5.9 KiB
5.9 KiB
TODO
Ordered backlog. CURRENT.md tracks the live session state.
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.getsearches all guilds without aguildId.voice.overviewlists 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.listlists cached DM and group DM channels.list_dmsexposes 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(remoteveskslop-t) until the original repo's server hook is fixed.
Paused
- The
pollcommand.POLL_ENABLEDisfalseinpoc/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
stay @user, invite-link joins, audio in and out, and video streaming. The plan is indocs/voice.md. The basic voice actions exist; auto-leave and audio do not.- Client lightening. Low priority. The client must stay stable.
- Web UI authentication and remote accounts. Accepted for now: no auth, LAN or Tailscale only.
Next
- Voice auto-leave (owner-based) is implemented.
stay @useris deferred. - Live verification on the audio host: TTS local + API, ducking, capture, and
voice.join/voice.leaveend to end. - Browser microphone puppeting: a mix sink so the browser mic and TTS share
veskslop_mic, apacatinput path, and echo handling. - Speech to text: Vosk (small CPU model in
poc/models/) is wired and verified; add more languages or a larger model when needed.VESKSLOP_STT_CMD/_API_URLstay available. - Notification parsing (edits, deletes, reactions, replies) and the reply-to-puppet trigger: done.
- Per-user rate limit and command cooldowns.
- Collector account: stripped-down read-only modules. Use it when the puppet cannot find a user's voice channel or the channel members.
- Local agent harness (
agent/, Go + Eino): scaffold done and smoke-tested. Next: daemon task push (free-form triggers only; commands stay local), tool allowlist, per-conversation serialization with cancel-and-replace, delivery IDs, and tests against a fake model. - Remote agent MCP path: a notification tool set for external systems, a documented LAN/Tailscale
bind, and optional token auth on the MCP listener. See
docs/agent.md. - Mobile web UI: first draft at 390px with the four tabs (Users, Chat, Call, Activity) is implemented and rendered headless. Next: move the transcript into the Call tab, put the TTS box in the Call tab as in 1c, and verify with real data on a phone-width viewport.
- TTS VOX preference: a
tts.voxtoggle that exportsVESKSLOP_TTS_VOX(likewords), an optionalVOX_CLEAN, and a help line in the TTS panel. Requested inTTS-DESIGN.md; the wrapper side is ready and verified. Inline/rateand/pitchneed no UI.
Media archive follow-ups
- Provider exclusion list from real data. The Advanced
Do not include → Sourcescheckboxes use a hand-picked list (Twitch, YouTube, Discord, Tenor, Giphy). Replace it with the providers that actually dominate the archive: aggregate theprovidercolumn across the scraper databases (SELECT lower(provider), COUNT(*) FROM media WHERE provider IS NOT NULL GROUP BY 1 ORDER BY 2 DESC), take the top ~8-10, turn that into the checkbox list, and unit-test that the UI list matches the shared constant. Keep the source-kind boxes (embed/attachment/sticker) separate from the provider boxes.
Web UI follow-ups
Ordered after the voice backend unless the owner asks first.
- Favourites, presence dots, and real member counts.
- MCP tool-call tracing in the console Tool calls tab.
- Transcript tab fed by the audio capture and STT.
- Yield (stop mid-line) for TTS when a human speaks.
- 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.
Open decisions
- Web UI auth. Accepted: no auth, LAN or Tailscale only. Revisit before any wider exposure.
- MCP event delivery. Parked. Options when it returns:
- Poll
get_message_logandget_action_logwith asincecursor. No new transport work. - A stateful Streamable HTTP session. The server can send notifications.
- A separate local event stream over SSE or a WebSocket.
- Poll
- 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.