Files
Veskslop-t/CURRENT.md
T

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 pending against 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.
  • 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. 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.

Open discussions (need the user)

  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.
  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

  • The original repo zib/Veskslop has a broken server-side git setup. Fetches and clones fail with bad pack header because a script (/home/git/.sys_health_s3) runs on the Veskslop read path. The admin must fix it. Use zib/Veskslop-t (remote veskslop-t) until then.
  • main on the original server is 68fc8bb (zib, "Upload files to docs/images"). It diverged from the local main (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