5.9 KiB
5.9 KiB
CURRENT.md — session state
Last updated: 2026-09-13
This file tracks the work state. Read it first. Update it before you stop.
Current focus (broad)
The text layer is done. The web UI follows the Nocturne design handoff. The voice backend is the next feature; live verification and a full QR approval are pending. The LLM attachment and MCP event delivery are parked.
In progress
- The web UI follows the Nocturne design handoff (
poc/WebUIMockup.zip). The 7a shell is implemented and rendered headless for review: header, call strip, three-column body, composer, and the agent console. - Takeover is a client-side read-only gate. Off, the composer is locked. Manual sends are logged.
- Core process control is implemented and verified live: the daemon starts the client under auto-Xvfb, the bridge connects, and stop exits cleanly.
- Web QR login is implemented. The session reached
pendingagainst the real gateway; a full phone approval is pending. - Voice actions are designed in docs/voice.md. The backend is not started.
Done
- Validated core bridge: protocol, actions, validation, structured errors, hard outbound rate limit.
- Auth persistence: pinned
DATA_DIR, token file, preload seeding,VESKSLOP_HEADLESS. - Daemon on the core-bridge transport. CDP stays as a development fallback.
- Trusted-only triggers: DMs and direct mentions. Trust tiers: user, trusted, admin.
- Context: 15 messages or 4000 characters, time stamps, file names only, incremental fetch, tmp cache with a size limit, fetch cooldown.
- Continuation window: a rushed follow-up joins the request context.
- Response policy: origin channel or DM. Sensitive commands default to DM.
- Persistent action log: triggers, commands, replies, errors, rotation, and secret redaction.
pollis paused (POLL_ENABLED = false). The parser and its tests stay.- Human send pacing: first send of a burst waits 30-200 ms, later sends 500-2800 ms, and the burst resets after a random 5-20 s of quiet. Reads take 100-300 ms and do not reset the burst.
user.search: cache and guild-member lookup.voice.getsearches all guilds without aguildId.voice.overview: occupied voice channels and members for a guild.VOICE_STATE_UPDATEevents: normalized and pushed. Mock-verified.- Web UI: Nocturne design tokens in
poc/public/nocturne.css, the 7a debug shell, live guild and channel rail, messages, DMs, voice membership, agent console with a live event tab, and a Settings slide-over for core process, login, visible guilds, and the action log. Roadmap surfaces show as placeholders. - Web UI data: opening a chat fetches the latest 50 messages into the client cache; attachments hotlink Discord CDN URLs and are never stored; avatars and guild icons load from the CDN with a monogram fallback; the page reloads itself when the bridge connects.
- Web UI drafts: composer and TTS text persist per channel in
localStorageand survive re-renders, reconnects, and page reloads. - Visible guilds: the Settings panel filters the guild switcher and picker.
- Takeover: client-side read-only switch with
localStoragepersistence; manual sends are written to the action log withtype: "manual". dm.list: cached DM and group DM channels, exposed over MCP aslist_dms.- Core process control: the daemon starts, stops, and restarts the client, reconnects the bridge
after a restart, auto-starts Xvfb when
DISPLAYis missing, and stops what it started on exit. Override withVESKSLOP_CORE_CMD/ARGS; disable Xvfb withVESKSLOP_XVFB=0. - Web QR login: the Settings panel runs the remote-auth session and renders the QR. The token file is written on approval and a running managed core restarts with the new token.
- Unit tests cover the pacing policy.
pnpm lintandpnpm testTypespass at the root.
Next (in order)
- Voice backend:
voice.join,voice.leave,voice.move, auto-leave, and thestay @usercommand. - Live verification:
user.search,voice.overview,VOICE_STATE_UPDATE, and a full web QR login approval on the real client. - Notification parsing: edits, deletes, reactions, and message references.
- Reply-to-puppet counts as a trigger.
- Per-user rate limit and command cooldowns.
- Collector account: read-only modules for voice membership fallback.
Open discussions (need the user)
- Web UI auth. Accepted: no auth, LAN or Tailscale only. Revisit before any wider exposure.
- MCP event delivery. Parked with the LLM attachment. Options stay in
TODO.md. - Untrusted logging. Untrusted interactions are ignored at this time. Confirm whether to log untrusted DMs and mentions again.
- Privacy pass. Only token-shaped and
mfa.strings are redacted, and only in the persistent action log. A fuller policy (retention, cache clearing, message redaction) is deferred. - Live checks.
reaction.add,user.search,voice.overview, and the voice state event normalization are mock-verified only. The QR login session reachedpendingandcancelagainst the real gateway; the approval path needs the phone. Confirm on the first real-client run.
Blocked / needs input
- The original repo
zib/Veskslophas a broken server-side git setup. Fetches and clones fail withbad pack headerbecause a script (/home/git/.sys_health_s3) runs on the Veskslop read path. The admin must fix it. Usezib/Veskslop-t(remoteveskslop-t) until then. mainon the original server is68fc8bb(zib, "Upload files to docs/images"). It diverged from the localmain(24447f5). Reconcile after the server is fixed.
Where to look
- Backlog:
TODO.md - Design documents:
docs/INDEX.md - Design handoff:
poc/WebUIMockup.zip(screen 7a is implemented) - Agent rules:
AGENTS.md - Daemon code:
poc/src/ - Web UI code:
poc/src/webui.ts,poc/public/ - Core bridge code:
src/shared/puppetProtocol.ts,src/renderer/puppet/,src/main/puppetBridge.ts