유대선
프로젝트로
·업데이트·2

Operator console, promoted to a command center: auto-join, ghost cleanup, live status, direct dispatch

Five upgrades that turn the operator console from a viewer into a cockpit: workers auto-join their live panes by worktree path, dead-wave ghosts archive in one click, the orchestrator shows a live activity chip, and the drawer can dispatch directly to a worker — gated so text never lands in a bare shell.

What changed

  1. Worker ↔ pane auto-join. The tmux backend now reports each pane's #{pane_current_path}. When you click a worker card, the console finds the unique live pane whose cwd sits at or under the worker's worktree path and links it automatically. Manual pins still win and persist; auto-joins are re-derived each open, honestly labeled "경로 자동 연결". This closes the P1 the code comment had been carrying ("Worker→pane join key does not exist yet").
  2. Ghost cleanup. A wave ends, worktrees get deleted, and the board keeps showing corpses (we had 35 from June 17). The new "유령 정리" button archives every worker whose recorded path no longer exists to .dalkkak/mission-control/archive/registry-ghosts-<ts>.json, then removes them from the registry — archive-then-remove, never a bare delete. Headless workers (no path) are exempt by design.
  3. Orchestrator activity chip. The chat header now shows 작업 중 / 대기 / 막힘 / 신호 없음, fed by the same sessionStatus hook signal the pane badges use. No more reading the terminal to know if the master is alive.
  4. Direct dispatch to a worker. The drilldown drawer gets an input that types into the linked worker's pane — behind a hard gate: pane_agent_provider must report a LIVE agent, or the send is refused. Typed text in a bare shell would execute; that class of accident stays closed.
  5. Merge-queue actions. Queue rows with a received result doc get "결과 열기" — opens the real file with the OS default app.

Notes