zot/internal/agent/modes
patriceckhart b11e6ed4e4 swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope
A /swarm subsystem for long-running parallel subagents. Each agent runs
in its own subprocess against a fresh git worktree (branch swarm/<id>)
with its own persistent session file and unix-socket inbox; the parent
zot stays in the main session and pokes / observes them via the
dashboard.

Highlights:

- New internal/swarm package: Agent, Spawn/Resume/Kill/Remove, event log
  (events.jsonl), inbox protocol (listen/dial), worktree manager, exec
  runner that spawns "zot --swarm-agent ...".
- New internal/agent/swarm_agent.go: daemon-mode child entry point.
  Reuses the standard agent loop but persists turns to the supervisor-
  chosen session.json and streams events as JSONL on stdout. Mirror to
  events.jsonl is dormant while the supervisor's stdout pipe is alive so
  events do not get double-written.
- Resume reattaches in place: reuses the same worktree, session, branch
  and inbox path; carries forward the prior transcript replayed from
  events.jsonl. Resume no longer re-fires the original Task as a fresh
  user turn -- that was producing "agent busy; send cancel first" races.
- core.NewSessionAtPath plus an openOrCreateSession fallback so the
  child actually persists its session.json at the supervisor-chosen path
  on first spawn instead of running with sess==nil.
- Dashboard in internal/agent/modes/swarm_dialog.go + swarm_slash.go:
  list / new / kill / remove / resume / logs / send subcommands plus an
  interactive picker. Transcript view is /btw-style: an always-on
  inline editor at the bottom, streaming auto-follow, inline busy
  spinner with the agent's current activity such as "thinking" or
  "tool: edit". /model inside the spawn editor pops the global model
  picker.
- Per-session scope: each spawn is stamped with the host session's id
  and only shows in that session's /swarm dashboard. Pre-upgrade agents
  -- empty session_id -- remain visible everywhere as a safety net. The
  active scope is re-applied whenever loadSession swaps sessions.
- Resolve falls back to the provider's default model when the persisted
  cfg.Model is no longer in the catalogue, warns on stderr, and rewrites
  config.json so the next launch is silent.
- ReadEventLog folds back-to-back same-type identical-payload events
  within 250ms so events.jsonl files polluted by the old supervisor +
  mirror double-write read back cleanly.
- DrawLog gains an idle no-op fast path: identical buffer plus identical
  cursor = emit nothing, so the terminal's cursor blink keeps ticking in
  dialogs whose underlying agent is idle.

Slash UX:

- New /swarm command with subcommands; the suggester picks it up.
- README.md documents the full dashboard, CLI, and persistence story,
  and explicitly notes that /session export does NOT bundle subagents
  -- their worktree and unix-socket inbox cannot round-trip through a
  .zotsession.

Tests cover: SpawnReq + Resume lifecycle, session-id scoping + persistence,
default-child-args spawn vs resume contract, NewSessionAtPath at a fixed
path, model fallback when the configured model is gone, swarm dialog
behaviour -- auto-open editor, /model in spawn editor, transcript grows
without internal scroll, busy spinner, multi-message send -- event-log
dedup, swarm emitter dormant-until-orphan, and the DrawLog idle no-op +
change-breaks-fast-path invariants.
2026-05-16 11:53:20 +02:00
..
telegram Improve Telegram status and stop commands 2026-05-07 19:05:57 +02:00
btw_dialog.go tui: tune user bubble colors 2026-05-03 19:23:24 +02:00
changelog_dialog.go tui: user bubble layout, OSC 11 theme detection, image footprint fix 2026-05-03 10:18:48 +02:00
confirm_dialog.go fix(cli): load extensions in print and json modes too 2026-04-19 20:00:36 +02:00
dialog_frame.go fix(tui): cell-aware width math for dialog header rules + add /btw 2026-04-19 13:47:39 +02:00
ext_panel_dialog.go feat(ext): interactive extension panels + persistence 2026-04-22 08:53:21 +02:00
file_suggest.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
file_suggest_test.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
help.go style: replace middle-dot separators with ascii hyphens 2026-04-21 17:39:08 +02:00
image_scroll_test.go fix(tui): stabilize inline image scrolling 2026-04-26 11:20:25 +02:00
interactive.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
json.go feat(tui): live-stream file body during write/edit tool calls 2026-04-20 08:37:14 +02:00
jump_dialog.go style: replace middle-dot separators with ascii hyphens 2026-04-21 17:39:08 +02:00
login_dialog.go add deepseek provider (api-key, openai-compatible v4 catalog) 2026-05-10 16:49:31 +02:00
logout_dialog.go feat(auth,tui): dark login pages + /logout picker 2026-04-19 20:14:22 +02:00
model_dialog.go feat: provider labels in login/logout, graceful unknown provider fallback, model picker filtering 2026-04-25 19:25:51 +02:00
print.go initial commit 2026-04-17 20:36:38 +02:00
rescue_dialog.go add Google Gemini provider 2026-05-07 21:15:34 +02:00
session_dialog.go fix: session dialog highlight doubling, row overflow, and resize flicker 2026-05-09 22:55:45 +02:00
session_ops_dialog.go feat: changelog on update, full-width highlights, @ file picker docs 2026-04-25 11:24:09 +02:00
session_tree_dialog.go feat(session): /session fork + /session tree 2026-04-20 11:10:56 +02:00
settings_dialog.go interactive: load resumed sessions asynchronously 2026-05-04 15:47:55 +02:00
skills_dialog.go tui: user bubble layout, OSC 11 theme detection, image footprint fix 2026-05-03 10:18:48 +02:00
slash_suggest.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
slash_suggest_test.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
spinner.go lowercase funny working lines 2026-05-08 08:13:30 +02:00
swarm_dialog.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
swarm_dialog_test.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
swarm_slash.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
swarm_slash_test.go swarm: introduce /swarm dashboard, /btw-style transcript view, and per-session scope 2026-05-16 11:53:20 +02:00
telegram_dialog.go feat(tui): /telegram connect | disconnect | status 2026-04-20 09:18:04 +02:00
update_banner.go feat: custom models with baseUrl + domain migration to www.zot.sh 2026-04-24 14:00:31 +02:00
welcome.go tui: unify accent bar, narrow status split, restore session usage 2026-04-27 19:51:36 +02:00