Update docs for the debug web UI, voice plan, and current status
This commit is contained in:
@@ -2,66 +2,73 @@
|
||||
|
||||
Ordered backlog. `CURRENT.md` tracks the live session state.
|
||||
|
||||
## Where the project finished (2026-09-11)
|
||||
## Where the project finished (2026-09-13)
|
||||
|
||||
- The validated core bridge is live: a fixed action list, input validation, structured errors, and a
|
||||
hard outbound rate limit. See `docs/core-bridge.md`.
|
||||
- The daemon uses the core bridge. QR login, pacing, the trigger log, trust tiers, context, the
|
||||
response policy, the continuation window, the persistent action log, and the read-only voice
|
||||
state all work.
|
||||
- Human pacing is live: a fast first send (30-200 ms), burst sends (500-2800 ms), and a variable
|
||||
5-20 s burst reset. Reads take a small gap. See `docs/daemon.md`.
|
||||
- User search reads the client cache and guild members. `voice.get` searches all guilds without a
|
||||
`guildId`. `voice.overview` lists occupied channels per guild.
|
||||
- The web UI follows the Nocturne design handoff: the 7a debug shell with the guild rail, message
|
||||
view, voice membership, agent console, Takeover read-only gate, and a Settings slide-over for
|
||||
core process, login, visible guilds, and the action log. Messages fetch the latest 50 on open;
|
||||
attachments use CDN links; avatars and guild icons load from the CDN. Drafts survive reloads.
|
||||
Roadmap surfaces show as placeholders. See `docs/webui.md`.
|
||||
- `dm.list` lists cached DM and group DM channels. `list_dms` exposes it over MCP.
|
||||
- The daemon starts, stops, and restarts the client, and the Settings panel runs the QR login.
|
||||
- Mock end-to-end tests pass: tiers, continuation, sensitive replies, batch MCP, and voice state.
|
||||
- Repo note: use `zib/Veskslop-t` (remote `veskslop-t`) until the original repo's server hook is
|
||||
fixed.
|
||||
|
||||
## Paused
|
||||
|
||||
- The `poll` command. `POLL_ENABLED` is `false` in `poc/src/puppet.ts`. The parser and tests stay.
|
||||
- The setup command flow. The reaction-based multiple-choice design is on hold.
|
||||
- The LLM attachment and MCP event delivery. Parked by the owner.
|
||||
|
||||
## Deferred
|
||||
|
||||
- Voice join and leave, invite-link joins, audio in and out, and video streaming. Voice state
|
||||
reads exist. Voice actions do not.
|
||||
- Voice join and leave, invite-link joins, audio in and out, and video streaming. The plan is in
|
||||
`docs/voice.md`. Voice state reads and events exist. Voice actions do not.
|
||||
- Client lightening. Low priority. The client must stay stable.
|
||||
- Web debug UI and remote client authentication.
|
||||
- Web UI authentication and remote accounts.
|
||||
|
||||
## Text features
|
||||
## Next
|
||||
|
||||
Done:
|
||||
1. Voice backend: `voice.join` (muted), `voice.leave`, `voice.move`, the auto-leave timer, and the
|
||||
`stay @user` command.
|
||||
2. Live verification: `reaction.add`, `user.search`, `voice.overview`, `VOICE_STATE_UPDATE`, core
|
||||
start on a real display, and a full QR login approval.
|
||||
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: stripped-down read-only modules. Use it when the puppet cannot find a user's
|
||||
voice channel or the channel members.
|
||||
|
||||
- Trusted-only triggers: direct messages and direct mentions.
|
||||
- Trust tiers: `user`, `trusted`, `admin`. The owner is an admin.
|
||||
- Context: the last 15 messages or 4000 characters, whichever is lower. File names only.
|
||||
Time stamps. Incremental fetch with an old-message cache.
|
||||
- Fetch cooldown: `fetchCooldownSeconds`, default 5.
|
||||
- Continuation window: `continuationSeconds`, default 10. A rushed follow-up joins the request
|
||||
context.
|
||||
- Response policy: origin channel or DM. Sensitive commands default to DM.
|
||||
- Persistent action log with rotation and secret redaction.
|
||||
- MCP batch tool for read-only commands, plus a voice state tool.
|
||||
- Reaction poll command: `poll "Question" opt 1 // opt 2 [// opt 3 [// opt 4]]` or the pipe form.
|
||||
Number emojis, multiple reactions per user, bare command shows help, auto results after
|
||||
`pollSeconds`.
|
||||
- Bare `whitelist` and bare `poll` show help with usage and formatting.
|
||||
## Web UI follow-ups
|
||||
|
||||
Next:
|
||||
Ordered after the voice backend unless the owner asks first.
|
||||
|
||||
- Notification parsing: edits, deletes, reactions, and message references.
|
||||
- Reply-to-puppet counts as a trigger.
|
||||
- Per-user rate limit and command cooldowns.
|
||||
- Setup command with reaction-based multiple choice. The puppet reacts 1, 2, 3, 4 to its own
|
||||
message and waits for the user reaction. This also serves as a small poll for group chats.
|
||||
- More chat commands: `ask`, `summarize`, `context`, `config`.
|
||||
- Collector account: stripped-down read-only modules. Use it when the puppet cannot find a user's
|
||||
voice channel or the channel members.
|
||||
- Favourites, presence dots, and real member counts.
|
||||
- MCP tool-call tracing in the console Tool calls tab.
|
||||
- Transcript tab once voice audio lands.
|
||||
- DM scope in the header (the guild picker becomes "Direct messages").
|
||||
- Message editing, deletion, reactions, and history pagination.
|
||||
- The remaining mockup screens: 7b/7c console details, 6b history window, 4b group chat, 2c state
|
||||
legend, 1c phone layout.
|
||||
|
||||
## Open decisions
|
||||
|
||||
- **MCP event delivery.** The current Streamable HTTP mode is stateless. The server cannot push
|
||||
events. Options:
|
||||
- **Web UI auth.** Accepted: no auth, LAN or Tailscale only. Revisit before any wider exposure.
|
||||
- **MCP event delivery.** Parked. Options when it returns:
|
||||
1. Poll `get_message_log` and `get_action_log` with a `since` cursor. No new transport work.
|
||||
2. A stateful Streamable HTTP session. The server can send notifications.
|
||||
3. A separate local event stream over SSE or a WebSocket.
|
||||
|
||||
Option 1 works today. Options 2 and 3 need a decision before an LLM attaches.
|
||||
- **Untrusted logging.** Untrusted interactions are ignored at this time. The separate 30-entry
|
||||
buffer exists but receives nothing. Decide 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. Decide the fuller policy (retention, cache clearing, message redaction) later.
|
||||
- **Live reaction check.** `reaction.add` and the message-ID return are mock-verified only. Confirm
|
||||
Discord's internal `addReaction` lookup on the first real-client run.
|
||||
|
||||
Reference in New Issue
Block a user