101 lines
6.2 KiB
Markdown
101 lines
6.2 KiB
Markdown
# 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.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
|
|
|
|
- `stay @user`, invite-link joins, audio in and out, and video streaming. The plan is in
|
|
`docs/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
|
|
|
|
1. Voice auto-leave (owner-based) is implemented. `stay @user` is deferred.
|
|
2. Live verification on the audio host: TTS local + API, ducking, capture, and `voice.join`/
|
|
`voice.leave` end to end.
|
|
3. Browser microphone puppeting: a mix sink so the browser mic and TTS share `veskslop_mic`, a
|
|
`pacat` input path, and echo handling.
|
|
4. 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_URL` stay available.
|
|
5. Notification parsing (edits, deletes, reactions, replies) and the reply-to-puppet trigger: done.
|
|
6. Per-user rate limit and command cooldowns.
|
|
7. Collector account: stripped-down read-only modules. Use it when the puppet cannot find a user's
|
|
voice channel or the channel members.
|
|
8. 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.
|
|
9. 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`.
|
|
10. 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.
|
|
|
|
## Media archive follow-ups
|
|
|
|
## TTS follow-ups
|
|
|
|
1. **HTTP provider voice discovery.** `TTS-DESIGN.md` specifies `GET /voices` (id, name, language,
|
|
gender, speed/pitch ranges) for the HTTP provider; Veskslop still lists voices from espeak or
|
|
`VESKSLOP_TTS_VOICES` only. The command-provider path in use does not need it; implement when an
|
|
HTTP engine with multiple voices is deployed.
|
|
|
|
## 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:
|
|
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.
|
|
- **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.
|
|
|
|
- Update `poc/src/test-trigger.ts`: the core bridge rejects its `debug.emit` action (`UNKNOWN_ACTION`), so the live trigger test cannot run.
|
|
- Install the Go toolchain (owner action, no sudo here) so `agent/` can build, and add the respond-only `mode` branch plus the `{reply}` response to the harness.
|
|
- Add a fake-server test for `AgentClient` (respond-only task push, timeout, error path).
|
|
- remchild (branch `remchild`): PoC done; next M2 moves the listener into the daemon with settings, the `--allow-non-lan` unlock, and job dispatch. See `remchild/plan.md`.
|
|
- remchild GUI (M5): target **Wayland first**. Use a Wayland-capable backend (SDL3, or SDL2/GLFW built with Wayland plus `libwayland-dev`, `wayland-protocols`, `xkbcommon`), or a native wlroots/EGL backend. X11 only as a fallback, not the default.
|