운영자 콘솔 v2 — 마스터 오케스트레이터 실PTY + 워커 실CLI 관측
One conversation surface per project: a real agent PTY on top, the parallel-mission board below, and click-through to every worker's real CLI (pane capture or headless dispatch-log tail). Built entirely on existing engines — zero new engine code.
What landed
apps/desktop/src/operator-console/ — an admin hard-mode screen (🛰 launcher / #operator hash):
- Top: the master orchestrator — a real hidden agent pane (
ensureZoneAgent+TerminalPanere-parenting the registry xterm). Interactive, provider-agnostic (RULE #12). On first open a mission briefing is auto-delivered (registry path,scripts/ops/dk-dispatch.sh, shared operating rules, lane cap 3–5, "your memory is the registry — restart when foggy"). - Bottom: the board — registry workers grouped into phase lanes; per-card badge maps the
registry status union onto the ui-system 12-value
WorkState. Merge queue on the right. - Click any card → that agent's real screen: pinned pane →
pane_capture_text1.5s polling; headless dk-dispatch worker → tail of<result_doc_path>.logvia the existingcode_read_file(confined to the granted root). dk-dispatch now redirects provider output to that log (previously interleaved on the dispatcher terminal — unreadable and invisible). - Look/data split:
OperatorConsoleViewis presentational; the browser preview (#operator-preview, fixture-labeled) and the desktop container share it.
Design decision
One conversation endpoint per project. Sub-captains (backend/front/db) are lanes the master
spawns — they appear on the board like any worker. Multi-project falls out of startupId
keying: switching startup switches the master pane + board wholesale.
Verified
Scoped tsc EXIT=0; vite transforms 200 for all modules on the live dev server; browser
screenshots of the rendered preview (layout, lanes, drawer). bash -n on dk-dispatch. Real-PTY
boot and live-registry load are desktop-only paths, verified at first run.