Update docs for the debug web UI, voice plan, and current status
This commit is contained in:
+55
-28
@@ -1,17 +1,26 @@
|
||||
# CURRENT.md — session state
|
||||
|
||||
Last updated: 2026-09-11
|
||||
Last updated: 2026-09-13
|
||||
|
||||
This file tracks the work state. Read it first. Update it before you stop.
|
||||
|
||||
## Current focus (broad)
|
||||
|
||||
Build the text-based communication layer: trusted tiers, context, response routing, MCP tools, and
|
||||
persistent logging. Voice, audio, and video stay deferred.
|
||||
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
|
||||
|
||||
- None. The documentation pass is complete. The project is ready to resume.
|
||||
- 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 `pending` against the real gateway; a full
|
||||
phone approval is pending.
|
||||
- Voice actions are designed in [docs/voice.md](docs/voice.md). The backend is not started.
|
||||
|
||||
## Done
|
||||
|
||||
@@ -24,38 +33,54 @@ persistent logging. Voice, audio, and video stay deferred.
|
||||
- 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.
|
||||
- Chat command: `poll` with number-emoji reactions, one vote per user, and auto results.
|
||||
- MCP tools: context, config, voice state, action log, and a read-only batch tool.
|
||||
- Event processing is serialized. Replayed events are dropped.
|
||||
- Unit tests for the pure logic and the cache. Mock end-to-end tests pass.
|
||||
- Live verification: state, DM send, and a synthetic trigger through the real event path.
|
||||
- `poll` is 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.get` searches all guilds without a `guildId`.
|
||||
- `voice.overview`: occupied voice channels and members for a guild.
|
||||
- `VOICE_STATE_UPDATE` events: 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 `localStorage` and 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 `localStorage` persistence; manual sends are written
|
||||
to the action log with `type: "manual"`.
|
||||
- `dm.list`: cached DM and group DM channels, exposed over MCP as `list_dms`.
|
||||
- Core process control: the daemon starts, stops, and restarts the client, reconnects the bridge
|
||||
after a restart, auto-starts Xvfb when `DISPLAY` is missing, and stops what it started on exit.
|
||||
Override with `VESKSLOP_CORE_CMD`/`ARGS`; disable Xvfb with `VESKSLOP_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 lint` and `pnpm testTypes` pass at the root.
|
||||
|
||||
## Next (in order)
|
||||
|
||||
1. Notification parsing: edits, deletes, reactions, and message references.
|
||||
2. Reply-to-puppet counts as a trigger.
|
||||
3. Per-user rate limit and command cooldowns.
|
||||
4. Setup command with reaction-based multiple choice.
|
||||
5. MCP event delivery decision: poll, stateful session, or a local event stream.
|
||||
1. Voice backend: `voice.join`, `voice.leave`, `voice.move`, auto-leave, and the `stay @user` command.
|
||||
2. Live verification: `user.search`, `voice.overview`, `VOICE_STATE_UPDATE`, and a full web QR login
|
||||
approval on the real client.
|
||||
3. Notification parsing: edits, deletes, reactions, and message references.
|
||||
4. Reply-to-puppet counts as a trigger.
|
||||
5. Per-user rate limit and command cooldowns.
|
||||
6. Collector account: read-only modules for voice membership fallback.
|
||||
7. Later: voice actions, audio, video, client lightening, web debug UI, remote authentication.
|
||||
|
||||
## Open discussions (need the user)
|
||||
|
||||
These items were discussed and wait for a decision or a live check.
|
||||
|
||||
1. **MCP event delivery.** The MCP server is stateless, so it cannot push events. Options: (a) poll
|
||||
the logs with a `since` cursor, (b) a stateful Streamable HTTP session with server notifications,
|
||||
(c) a separate local SSE or WebSocket event stream. Option (a) works today. Decide before an LLM
|
||||
attaches.
|
||||
2. **Untrusted logging.** Untrusted interactions are ignored at this time. The separate 30-entry
|
||||
buffer exists but receives nothing. Confirm whether to log untrusted DMs and mentions again.
|
||||
3. **Privacy pass.** Only token-shaped and `mfa.` strings are redacted, and only in the persistent
|
||||
1. **Web UI auth.** Accepted: no auth, LAN or Tailscale only. Revisit before any wider exposure.
|
||||
2. **MCP event delivery.** Parked with the LLM attachment. Options stay in `TODO.md`.
|
||||
3. **Untrusted logging.** Untrusted interactions are ignored at this time. Confirm whether to log
|
||||
untrusted DMs and mentions again.
|
||||
4. **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.
|
||||
4. **First live run of reactions.** `reaction.add` and the message-ID return are mock-verified only.
|
||||
The first real-client poll must confirm Discord's internal `addReaction` lookup.
|
||||
5. **Setup command flow.** The reaction-based multiple-choice design is recorded in `TODO.md`. The
|
||||
poll command now provides the reaction machinery.
|
||||
5. **Live checks.** `reaction.add`, `user.search`, `voice.overview`, and the voice state event
|
||||
normalization are mock-verified only. The QR login session reached `pending` and `cancel`
|
||||
against the real gateway; the approval path needs the phone. Confirm on the first real-client
|
||||
run.
|
||||
|
||||
## Blocked / needs input
|
||||
|
||||
@@ -69,7 +94,9 @@ These items were discussed and wait for a decision or a live check.
|
||||
|
||||
- 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`
|
||||
|
||||
Reference in New Issue
Block a user