oh-my-codex 0.11.13 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +5 -5
- package/Cargo.toml +1 -1
- package/README.md +34 -17
- package/crates/omx-runtime/src/main.rs +6 -2
- package/dist/agents/native-config.js +1 -1
- package/dist/agents/native-config.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js +74 -2
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/cleanup.test.js +37 -30
- package/dist/cli/__tests__/cleanup.test.js.map +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js +3 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +276 -5
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +95 -1
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +49 -9
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +9 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +136 -11
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +10 -0
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -0
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +2 -1
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch.d.ts.map +1 -1
- package/dist/cli/autoresearch.js +2 -1
- package/dist/cli/autoresearch.js.map +1 -1
- package/dist/cli/cleanup.d.ts.map +1 -1
- package/dist/cli/cleanup.js +10 -5
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/index.d.ts +21 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +298 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/omx.js +2 -0
- package/dist/cli/omx.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +41 -7
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +16 -557
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +34 -9
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +79 -2
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +2 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +11 -0
- package/dist/config/codex-hooks.d.ts.map +1 -0
- package/dist/config/codex-hooks.js +50 -0
- package/dist/config/codex-hooks.js.map +1 -0
- package/dist/config/generator.d.ts +5 -3
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +24 -14
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.js +20 -0
- package/dist/hooks/__tests__/debugger-log-recency-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +132 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +292 -4
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +86 -0
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +40 -0
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +54 -0
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js +31 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +51 -0
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +136 -0
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +120 -0
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +145 -20
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +116 -0
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +86 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js +1 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/runtime.test.js +49 -0
- package/dist/hooks/extensibility/__tests__/runtime.test.js.map +1 -1
- package/dist/hooks/extensibility/runtime.d.ts.map +1 -1
- package/dist/hooks/extensibility/runtime.js +10 -0
- package/dist/hooks/extensibility/runtime.js.map +1 -1
- package/dist/hooks/extensibility/types.d.ts +1 -1
- package/dist/hooks/extensibility/types.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +2 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +76 -4
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +12 -8
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.d.ts +5 -1
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +10 -6
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +6 -1
- package/dist/hud/index.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +0 -3
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/__tests__/code-intel-server.test.js +27 -1
- package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js +0 -5
- package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +0 -1
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/code-intel-server.d.ts +20 -0
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +6 -5
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/notifications/__tests__/idle-cooldown.test.js +24 -1
- package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -1
- package/dist/notifications/__tests__/reply-listener.test.js +20 -1
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
- package/dist/notifications/__tests__/tmux.test.js +41 -0
- package/dist/notifications/__tests__/tmux.test.js.map +1 -1
- package/dist/notifications/idle-cooldown.d.ts +13 -0
- package/dist/notifications/idle-cooldown.d.ts.map +1 -1
- package/dist/notifications/idle-cooldown.js +50 -16
- package/dist/notifications/idle-cooldown.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +2 -0
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +4 -0
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.d.ts +2 -0
- package/dist/scripts/__tests__/codex-native-hook.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/codex-native-hook.test.js +1050 -0
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -0
- package/dist/scripts/codex-native-hook.d.ts +22 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -0
- package/dist/scripts/codex-native-hook.js +792 -0
- package/dist/scripts/codex-native-hook.js.map +1 -0
- package/dist/scripts/codex-native-pre-post.d.ts +26 -0
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -0
- package/dist/scripts/codex-native-pre-post.js +118 -0
- package/dist/scripts/codex-native-pre-post.js.map +1 -0
- package/dist/scripts/notify-fallback-watcher.js +322 -21
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.js +5 -6
- package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/log.d.ts +2 -2
- package/dist/scripts/notify-hook/log.d.ts.map +1 -1
- package/dist/scripts/notify-hook/log.js +10 -2
- package/dist/scripts/notify-hook/log.js.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.js +2 -0
- package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
- package/dist/scripts/notify-hook/orchestration-intent.d.ts +18 -0
- package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -0
- package/dist/scripts/notify-hook/orchestration-intent.js +72 -0
- package/dist/scripts/notify-hook/orchestration-intent.js.map +1 -0
- package/dist/scripts/notify-hook/process-runner.js.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.js +7 -0
- package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts +15 -6
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +125 -6
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts +3 -2
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +165 -37
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts +4 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +33 -44
- package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +68 -5
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook/utils.d.ts +1 -1
- package/dist/scripts/notify-hook/utils.d.ts.map +1 -1
- package/dist/scripts/notify-hook/utils.js.map +1 -1
- package/dist/scripts/notify-hook.js +55 -32
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/team/__tests__/api-interop.test.js +344 -18
- package/dist/team/__tests__/api-interop.test.js.map +1 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts +2 -0
- package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts.map +1 -0
- package/dist/team/__tests__/delivery-e2e-smoke.test.js +671 -0
- package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -0
- package/dist/team/__tests__/mcp-comm.test.js +5 -0
- package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +543 -15
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +133 -8
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/team-ops-contract.test.js +4 -0
- package/dist/team/__tests__/team-ops-contract.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +160 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +19 -1
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +95 -23
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/contracts.d.ts +11 -1
- package/dist/team/contracts.d.ts.map +1 -1
- package/dist/team/contracts.js +29 -0
- package/dist/team/contracts.js.map +1 -1
- package/dist/team/delivery-log.d.ts +14 -0
- package/dist/team/delivery-log.d.ts.map +1 -0
- package/dist/team/delivery-log.js +35 -0
- package/dist/team/delivery-log.js.map +1 -0
- package/dist/team/idle-nudge.d.ts +2 -2
- package/dist/team/idle-nudge.js +2 -2
- package/dist/team/mcp-comm.d.ts +4 -0
- package/dist/team/mcp-comm.d.ts.map +1 -1
- package/dist/team/mcp-comm.js +84 -1
- package/dist/team/mcp-comm.js.map +1 -1
- package/dist/team/pane-status.d.ts +149 -0
- package/dist/team/pane-status.d.ts.map +1 -0
- package/dist/team/pane-status.js +558 -0
- package/dist/team/pane-status.js.map +1 -0
- package/dist/team/reminder-intents.d.ts +11 -0
- package/dist/team/reminder-intents.d.ts.map +1 -0
- package/dist/team/reminder-intents.js +40 -0
- package/dist/team/reminder-intents.js.map +1 -0
- package/dist/team/runtime-cli.d.ts +1 -1
- package/dist/team/runtime-cli.js +2 -2
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +2 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +409 -191
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +6 -5
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/dispatch.d.ts +4 -1
- package/dist/team/state/dispatch.d.ts.map +1 -1
- package/dist/team/state/dispatch.js +59 -18
- package/dist/team/state/dispatch.js.map +1 -1
- package/dist/team/state/mailbox.d.ts.map +1 -1
- package/dist/team/state/mailbox.js +45 -2
- package/dist/team/state/mailbox.js.map +1 -1
- package/dist/team/state/monitor.d.ts +2 -1
- package/dist/team/state/monitor.d.ts.map +1 -1
- package/dist/team/state/monitor.js +30 -1
- package/dist/team/state/monitor.js.map +1 -1
- package/dist/team/state/types.d.ts +5 -2
- package/dist/team/state/types.d.ts.map +1 -1
- package/dist/team/state/types.js.map +1 -1
- package/dist/team/state.d.ts +30 -3
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +170 -2
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +5 -1
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js +4 -0
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/tmux-session.d.ts +2 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +19 -3
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +4 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +33 -6
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +63 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/__tests__/platform-command.test.js +50 -4
- package/dist/utils/__tests__/platform-command.test.js.map +1 -1
- package/dist/utils/paths.d.ts +12 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +44 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-command.d.ts.map +1 -1
- package/dist/utils/platform-command.js +13 -5
- package/dist/utils/platform-command.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js +10 -1
- package/dist/utils/sleep.js.map +1 -1
- package/package.json +1 -1
- package/prompts/analyst.md +2 -2
- package/prompts/api-reviewer.md +2 -2
- package/prompts/architect.md +2 -2
- package/prompts/build-fixer.md +2 -2
- package/prompts/code-reviewer.md +2 -2
- package/prompts/code-simplifier.md +1 -1
- package/prompts/critic.md +2 -2
- package/prompts/debugger.md +3 -2
- package/prompts/dependency-expert.md +2 -2
- package/prompts/designer.md +2 -2
- package/prompts/executor.md +3 -2
- package/prompts/explore.md +2 -2
- package/prompts/git-master.md +2 -2
- package/prompts/information-architect.md +15 -102
- package/prompts/performance-reviewer.md +2 -2
- package/prompts/planner.md +3 -2
- package/prompts/product-analyst.md +2 -2
- package/prompts/product-manager.md +2 -2
- package/prompts/qa-tester.md +2 -2
- package/prompts/quality-reviewer.md +2 -2
- package/prompts/quality-strategist.md +2 -2
- package/prompts/researcher.md +2 -2
- package/prompts/security-reviewer.md +2 -2
- package/prompts/sisyphus-lite.md +2 -2
- package/prompts/style-reviewer.md +2 -2
- package/prompts/team-executor.md +2 -2
- package/prompts/test-engineer.md +2 -2
- package/prompts/ux-researcher.md +2 -2
- package/prompts/verifier.md +3 -2
- package/prompts/vision.md +2 -2
- package/prompts/writer.md +2 -2
- package/skills/team/SKILL.md +18 -33
- package/src/scripts/__tests__/codex-native-hook.test.ts +1346 -0
- package/src/scripts/codex-native-hook.ts +983 -0
- package/src/scripts/codex-native-pre-post.ts +161 -0
- package/src/scripts/notify-fallback-watcher.ts +378 -29
- package/src/scripts/notify-hook/auto-nudge.ts +5 -10
- package/src/scripts/notify-hook/log.ts +18 -4
- package/src/scripts/notify-hook/managed-tmux.ts +1 -0
- package/src/scripts/notify-hook/orchestration-intent.ts +82 -0
- package/src/scripts/notify-hook/process-runner.ts +4 -4
- package/src/scripts/notify-hook/ralph-session-resume.ts +9 -0
- package/src/scripts/notify-hook/team-dispatch.ts +134 -6
- package/src/scripts/notify-hook/team-leader-nudge.ts +183 -37
- package/src/scripts/notify-hook/team-tmux-guard.ts +35 -43
- package/src/scripts/notify-hook/team-worker.ts +73 -4
- package/src/scripts/notify-hook/utils.ts +1 -1
- package/src/scripts/notify-hook.ts +64 -32
- package/templates/AGENTS.md +21 -11
- package/README.de.md +0 -263
- package/README.el.md +0 -223
- package/README.es.md +0 -263
- package/README.fr.md +0 -263
- package/README.it.md +0 -263
- package/README.ja.md +0 -264
- package/README.ko.md +0 -264
- package/README.pl.md +0 -216
- package/README.pt.md +0 -263
- package/README.ru.md +0 -263
- package/README.tr.md +0 -263
- package/README.vi.md +0 -223
- package/README.zh-TW.md +0 -293
- package/README.zh.md +0 -264
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts +0 -2
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/team-server-cleanup.test.js +0 -219
- package/dist/mcp/__tests__/team-server-cleanup.test.js.map +0 -1
- package/dist/mcp/__tests__/team-server-runtime-deps.test.d.ts +0 -2
- package/dist/mcp/__tests__/team-server-runtime-deps.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/team-server-runtime-deps.test.js +0 -13
- package/dist/mcp/__tests__/team-server-runtime-deps.test.js.map +0 -1
- package/dist/mcp/__tests__/team-server-wait.test.d.ts +0 -2
- package/dist/mcp/__tests__/team-server-wait.test.d.ts.map +0 -1
- package/dist/mcp/__tests__/team-server-wait.test.js +0 -155
- package/dist/mcp/__tests__/team-server-wait.test.js.map +0 -1
- package/dist/mcp/team-server.d.ts +0 -24
- package/dist/mcp/team-server.d.ts.map +0 -1
- package/dist/mcp/team-server.js +0 -482
- package/dist/mcp/team-server.js.map +0 -1
package/dist/cli/team.js
CHANGED
|
@@ -12,8 +12,9 @@ import { routeTaskToRole } from '../team/role-router.js';
|
|
|
12
12
|
import { allocateTasksToWorkers } from '../team/allocation-policy.js';
|
|
13
13
|
import { buildFollowupStaffingPlan, resolveAvailableAgentTypes, } from '../team/followup-planner.js';
|
|
14
14
|
import { TEAM_API_OPERATIONS, resolveTeamApiOperation, executeTeamApiOperation, } from '../team/api-interop.js';
|
|
15
|
-
import { teamReadConfig as readTeamConfig,
|
|
15
|
+
import { teamReadConfig as readTeamConfig, teamReadPhase as readTeamPhase } from '../team/team-ops.js';
|
|
16
16
|
import { recordLeaderRuntimeActivity } from '../team/leader-activity.js';
|
|
17
|
+
import { readTeamPaneStatus } from '../team/pane-status.js';
|
|
17
18
|
function readPersistedTeamFollowupState(cwd) {
|
|
18
19
|
const path = join(cwd, '.omx', 'state', 'team-state.json');
|
|
19
20
|
if (!existsSync(path))
|
|
@@ -67,6 +68,9 @@ const MIN_WORKER_COUNT = 1;
|
|
|
67
68
|
const DEFAULT_SPARKSHELL_TAIL_LINES = 400;
|
|
68
69
|
const MIN_SPARKSHELL_TAIL_LINES = 100;
|
|
69
70
|
const MAX_SPARKSHELL_TAIL_LINES = 1000;
|
|
71
|
+
function isTerminalModePhase(phase) {
|
|
72
|
+
return ['complete', 'failed', 'cancelled'].includes(phase);
|
|
73
|
+
}
|
|
70
74
|
const TEAM_HELP = `
|
|
71
75
|
Usage: omx team [N:agent-type] "<task description>"
|
|
72
76
|
omx team status <team-name> [--json] [--tail-lines <100-1000>]
|
|
@@ -349,560 +353,6 @@ function buildDeadWorkerAwaitEvent(teamName, snapshot) {
|
|
|
349
353
|
source_type: 'await_snapshot',
|
|
350
354
|
};
|
|
351
355
|
}
|
|
352
|
-
async function readTeamPaneStatus(config, cwd = process.cwd(), snapshot, tailLines = DEFAULT_SPARKSHELL_TAIL_LINES) {
|
|
353
|
-
if (!config) {
|
|
354
|
-
return {
|
|
355
|
-
leader_pane_id: null,
|
|
356
|
-
hud_pane_id: null,
|
|
357
|
-
worker_panes: {},
|
|
358
|
-
sparkshell_hint: null,
|
|
359
|
-
sparkshell_commands: {},
|
|
360
|
-
recommended_inspect_targets: [],
|
|
361
|
-
recommended_inspect_reasons: {},
|
|
362
|
-
recommended_inspect_clis: {},
|
|
363
|
-
recommended_inspect_roles: {},
|
|
364
|
-
recommended_inspect_indexes: {},
|
|
365
|
-
recommended_inspect_alive: {},
|
|
366
|
-
recommended_inspect_turn_counts: {},
|
|
367
|
-
recommended_inspect_turns_without_progress: {},
|
|
368
|
-
recommended_inspect_last_turn_at: {},
|
|
369
|
-
recommended_inspect_status_updated_at: {},
|
|
370
|
-
recommended_inspect_pids: {},
|
|
371
|
-
recommended_inspect_worktree_paths: {},
|
|
372
|
-
recommended_inspect_worktree_repo_roots: {},
|
|
373
|
-
recommended_inspect_worktree_branches: {},
|
|
374
|
-
recommended_inspect_worktree_detached: {},
|
|
375
|
-
recommended_inspect_worktree_created: {},
|
|
376
|
-
recommended_inspect_team_state_roots: {},
|
|
377
|
-
recommended_inspect_workdirs: {},
|
|
378
|
-
recommended_inspect_assigned_tasks: {},
|
|
379
|
-
recommended_inspect_task_statuses: {},
|
|
380
|
-
recommended_inspect_task_results: {},
|
|
381
|
-
recommended_inspect_task_errors: {},
|
|
382
|
-
recommended_inspect_task_versions: {},
|
|
383
|
-
recommended_inspect_task_created_at: {},
|
|
384
|
-
recommended_inspect_task_completed_at: {},
|
|
385
|
-
recommended_inspect_task_depends_on: {},
|
|
386
|
-
recommended_inspect_task_claim_present: {},
|
|
387
|
-
recommended_inspect_task_claim_owners: {},
|
|
388
|
-
recommended_inspect_task_claim_tokens: {},
|
|
389
|
-
recommended_inspect_task_claim_leases: {},
|
|
390
|
-
recommended_inspect_task_claim_lock_paths: {},
|
|
391
|
-
recommended_inspect_approval_required: {},
|
|
392
|
-
recommended_inspect_requires_code_change: {},
|
|
393
|
-
recommended_inspect_descriptions: {},
|
|
394
|
-
recommended_inspect_blocked_by: {},
|
|
395
|
-
recommended_inspect_task_roles: {},
|
|
396
|
-
recommended_inspect_task_owners: {},
|
|
397
|
-
recommended_inspect_approval_statuses: {},
|
|
398
|
-
recommended_inspect_approval_reviewers: {},
|
|
399
|
-
recommended_inspect_approval_reasons: {},
|
|
400
|
-
recommended_inspect_approval_decided_at: {},
|
|
401
|
-
recommended_inspect_approval_record_present: {},
|
|
402
|
-
recommended_inspect_states: {},
|
|
403
|
-
recommended_inspect_state_reasons: {},
|
|
404
|
-
recommended_inspect_tasks: {},
|
|
405
|
-
recommended_inspect_subjects: {},
|
|
406
|
-
recommended_inspect_task_paths: {},
|
|
407
|
-
recommended_inspect_approval_paths: {},
|
|
408
|
-
recommended_inspect_worker_state_dirs: {},
|
|
409
|
-
recommended_inspect_worker_status_paths: {},
|
|
410
|
-
recommended_inspect_worker_heartbeat_paths: {},
|
|
411
|
-
recommended_inspect_worker_identity_paths: {},
|
|
412
|
-
recommended_inspect_worker_inbox_paths: {},
|
|
413
|
-
recommended_inspect_worker_mailbox_paths: {},
|
|
414
|
-
recommended_inspect_worker_shutdown_request_paths: {},
|
|
415
|
-
recommended_inspect_worker_shutdown_ack_paths: {},
|
|
416
|
-
recommended_inspect_team_dir_paths: {},
|
|
417
|
-
recommended_inspect_team_config_paths: {},
|
|
418
|
-
recommended_inspect_team_manifest_paths: {},
|
|
419
|
-
recommended_inspect_team_events_paths: {},
|
|
420
|
-
recommended_inspect_team_dispatch_paths: {},
|
|
421
|
-
recommended_inspect_team_phase_paths: {},
|
|
422
|
-
recommended_inspect_team_monitor_snapshot_paths: {},
|
|
423
|
-
recommended_inspect_team_summary_snapshot_paths: {},
|
|
424
|
-
recommended_inspect_panes: {},
|
|
425
|
-
recommended_inspect_command: null,
|
|
426
|
-
recommended_inspect_commands: [],
|
|
427
|
-
recommended_inspect_summary: null,
|
|
428
|
-
recommended_inspect_items: [],
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
const leaderPaneId = config.leader_pane_id?.trim() || null;
|
|
432
|
-
const hudPaneId = config.hud_pane_id?.trim() || null;
|
|
433
|
-
const workerPanes = Object.fromEntries(config.workers
|
|
434
|
-
.map((worker) => {
|
|
435
|
-
const paneId = worker.pane_id?.trim();
|
|
436
|
-
return paneId ? [worker.name, paneId] : null;
|
|
437
|
-
})
|
|
438
|
-
.filter((entry) => entry !== null));
|
|
439
|
-
const sparkshellCommands = Object.fromEntries([
|
|
440
|
-
leaderPaneId ? ['leader', `omx sparkshell --tmux-pane ${leaderPaneId} --tail-lines ${tailLines}`] : null,
|
|
441
|
-
hudPaneId ? ['hud', `omx sparkshell --tmux-pane ${hudPaneId} --tail-lines ${tailLines}`] : null,
|
|
442
|
-
...Object.entries(workerPanes).map(([workerName, paneId]) => [
|
|
443
|
-
workerName,
|
|
444
|
-
`omx sparkshell --tmux-pane ${paneId} --tail-lines ${tailLines}`,
|
|
445
|
-
]),
|
|
446
|
-
].filter((entry) => entry !== null));
|
|
447
|
-
const recommendedInspectTargets = [
|
|
448
|
-
...(snapshot?.deadWorkers ?? []),
|
|
449
|
-
...(snapshot?.nonReportingWorkers ?? []),
|
|
450
|
-
].filter((workerName, index, values) => (Object.hasOwn(workerPanes, workerName) && values.indexOf(workerName) === index));
|
|
451
|
-
const recommendedInspectReasons = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
452
|
-
target,
|
|
453
|
-
(snapshot?.deadWorkers ?? []).includes(target) ? 'dead_worker' : 'non_reporting_worker',
|
|
454
|
-
]));
|
|
455
|
-
const recommendedInspectClis = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
456
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
457
|
-
return [target, worker?.worker_cli ?? null];
|
|
458
|
-
}));
|
|
459
|
-
const recommendedInspectRoles = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
460
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
461
|
-
return [target, worker?.role ?? null];
|
|
462
|
-
}));
|
|
463
|
-
const recommendedInspectIndexes = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
464
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
465
|
-
return [target, worker?.index ?? null];
|
|
466
|
-
}));
|
|
467
|
-
const recommendedInspectAlive = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
468
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
469
|
-
return [target, worker?.alive ?? null];
|
|
470
|
-
}));
|
|
471
|
-
const recommendedInspectTurnCounts = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
472
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
473
|
-
return [target, worker?.heartbeat?.turn_count ?? null];
|
|
474
|
-
}));
|
|
475
|
-
const recommendedInspectTurnsWithoutProgress = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
476
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
477
|
-
return [target, worker?.turnsWithoutProgress ?? null];
|
|
478
|
-
}));
|
|
479
|
-
const recommendedInspectLastTurnAt = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
480
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
481
|
-
return [target, worker?.heartbeat?.last_turn_at ?? null];
|
|
482
|
-
}));
|
|
483
|
-
const recommendedInspectStatusUpdatedAt = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
484
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
485
|
-
return [target, worker?.status.updated_at ?? null];
|
|
486
|
-
}));
|
|
487
|
-
const recommendedInspectPids = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
488
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
489
|
-
return [target, worker?.pid ?? null];
|
|
490
|
-
}));
|
|
491
|
-
const recommendedInspectWorktreePaths = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
492
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
493
|
-
return [target, worker?.worktree_path ?? null];
|
|
494
|
-
}));
|
|
495
|
-
const recommendedInspectWorktreeRepoRoots = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
496
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
497
|
-
return [target, worker?.worktree_repo_root ?? null];
|
|
498
|
-
}));
|
|
499
|
-
const recommendedInspectWorktreeBranches = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
500
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
501
|
-
return [target, worker?.worktree_branch ?? null];
|
|
502
|
-
}));
|
|
503
|
-
const recommendedInspectWorktreeDetached = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
504
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
505
|
-
return [target, worker?.worktree_detached ?? null];
|
|
506
|
-
}));
|
|
507
|
-
const recommendedInspectWorktreeCreated = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
508
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
509
|
-
return [target, worker?.worktree_created ?? null];
|
|
510
|
-
}));
|
|
511
|
-
const recommendedInspectTeamStateRoots = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
512
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
513
|
-
return [target, worker?.team_state_root ?? null];
|
|
514
|
-
}));
|
|
515
|
-
const recommendedInspectWorkdirs = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
516
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
517
|
-
return [target, worker?.working_dir ?? worker?.worktree_path ?? null];
|
|
518
|
-
}));
|
|
519
|
-
const recommendedInspectAssignedTasks = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
520
|
-
const worker = config.workers.find((candidate) => candidate.name === target);
|
|
521
|
-
return [target, worker?.assigned_tasks ?? []];
|
|
522
|
-
}));
|
|
523
|
-
const recommendedInspectTasks = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
524
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
525
|
-
return [target, worker?.status.current_task_id ?? null];
|
|
526
|
-
}));
|
|
527
|
-
const taskStatusById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.status]));
|
|
528
|
-
const taskResultById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.result ?? null]));
|
|
529
|
-
const taskErrorById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.error ?? null]));
|
|
530
|
-
const taskVersionById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.version ?? null]));
|
|
531
|
-
const taskCreatedAtById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.created_at ?? null]));
|
|
532
|
-
const taskCompletedAtById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.completed_at ?? null]));
|
|
533
|
-
const taskDependsOnById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.depends_on ?? task.blocked_by ?? []]));
|
|
534
|
-
const taskClaimPresentById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.claim != null]));
|
|
535
|
-
const taskClaimOwnerById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.claim?.owner ?? null]));
|
|
536
|
-
const taskClaimTokenById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.claim?.token ?? null]));
|
|
537
|
-
const taskClaimLeaseById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.claim?.leased_until ?? null]));
|
|
538
|
-
const taskRequiresCodeChangeById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.requires_code_change ?? null]));
|
|
539
|
-
const recommendedInspectTaskStatuses = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
540
|
-
const taskId = recommendedInspectTasks[target];
|
|
541
|
-
return [target, taskId ? (taskStatusById.get(taskId) ?? null) : null];
|
|
542
|
-
}));
|
|
543
|
-
const recommendedInspectTaskResults = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
544
|
-
const taskId = recommendedInspectTasks[target];
|
|
545
|
-
return [target, taskId ? (taskResultById.get(taskId) ?? null) : null];
|
|
546
|
-
}));
|
|
547
|
-
const recommendedInspectTaskErrors = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
548
|
-
const taskId = recommendedInspectTasks[target];
|
|
549
|
-
return [target, taskId ? (taskErrorById.get(taskId) ?? null) : null];
|
|
550
|
-
}));
|
|
551
|
-
const recommendedInspectTaskVersions = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
552
|
-
const taskId = recommendedInspectTasks[target];
|
|
553
|
-
return [target, taskId ? (taskVersionById.get(taskId) ?? null) : null];
|
|
554
|
-
}));
|
|
555
|
-
const recommendedInspectTaskCreatedAt = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
556
|
-
const taskId = recommendedInspectTasks[target];
|
|
557
|
-
return [target, taskId ? (taskCreatedAtById.get(taskId) ?? null) : null];
|
|
558
|
-
}));
|
|
559
|
-
const recommendedInspectTaskCompletedAt = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
560
|
-
const taskId = recommendedInspectTasks[target];
|
|
561
|
-
return [target, taskId ? (taskCompletedAtById.get(taskId) ?? null) : null];
|
|
562
|
-
}));
|
|
563
|
-
const recommendedInspectTaskDependsOn = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
564
|
-
const taskId = recommendedInspectTasks[target];
|
|
565
|
-
return [target, taskId ? (taskDependsOnById.get(taskId) ?? []) : []];
|
|
566
|
-
}));
|
|
567
|
-
const recommendedInspectTaskClaimPresent = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
568
|
-
const taskId = recommendedInspectTasks[target];
|
|
569
|
-
return [target, taskId ? (taskClaimPresentById.get(taskId) ?? null) : null];
|
|
570
|
-
}));
|
|
571
|
-
const recommendedInspectTaskClaimOwners = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
572
|
-
const taskId = recommendedInspectTasks[target];
|
|
573
|
-
return [target, taskId ? (taskClaimOwnerById.get(taskId) ?? null) : null];
|
|
574
|
-
}));
|
|
575
|
-
const recommendedInspectTaskClaimTokens = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
576
|
-
const taskId = recommendedInspectTasks[target];
|
|
577
|
-
return [target, taskId ? (taskClaimTokenById.get(taskId) ?? null) : null];
|
|
578
|
-
}));
|
|
579
|
-
const recommendedInspectTaskClaimLeases = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
580
|
-
const taskId = recommendedInspectTasks[target];
|
|
581
|
-
return [target, taskId ? (taskClaimLeaseById.get(taskId) ?? null) : null];
|
|
582
|
-
}));
|
|
583
|
-
const recommendedInspectTaskClaimLockPaths = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
584
|
-
const taskId = recommendedInspectTasks[target];
|
|
585
|
-
return [target, taskId && snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'claims', `task-${taskId}.lock`) : null];
|
|
586
|
-
}));
|
|
587
|
-
const recommendedInspectRequiresCodeChange = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
588
|
-
const taskId = recommendedInspectTasks[target];
|
|
589
|
-
return [target, taskId ? (taskRequiresCodeChangeById.get(taskId) ?? null) : null];
|
|
590
|
-
}));
|
|
591
|
-
const taskDescriptionById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.description]));
|
|
592
|
-
const recommendedInspectDescriptions = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
593
|
-
const taskId = recommendedInspectTasks[target];
|
|
594
|
-
return [target, taskId ? (taskDescriptionById.get(taskId) ?? null) : null];
|
|
595
|
-
}));
|
|
596
|
-
const taskBlockedById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.blocked_by ?? []]));
|
|
597
|
-
const recommendedInspectBlockedBy = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
598
|
-
const taskId = recommendedInspectTasks[target];
|
|
599
|
-
return [target, taskId ? (taskBlockedById.get(taskId) ?? []) : []];
|
|
600
|
-
}));
|
|
601
|
-
const taskRoleById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.role ?? null]));
|
|
602
|
-
const recommendedInspectTaskRoles = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
603
|
-
const taskId = recommendedInspectTasks[target];
|
|
604
|
-
return [target, taskId ? (taskRoleById.get(taskId) ?? null) : null];
|
|
605
|
-
}));
|
|
606
|
-
const taskOwnerById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.owner ?? null]));
|
|
607
|
-
const recommendedInspectTaskOwners = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
608
|
-
const taskId = recommendedInspectTasks[target];
|
|
609
|
-
return [target, taskId ? (taskOwnerById.get(taskId) ?? null) : null];
|
|
610
|
-
}));
|
|
611
|
-
const approvalRecordByTaskId = new Map();
|
|
612
|
-
for (const taskId of new Set(Object.values(recommendedInspectTasks).filter((value) => typeof value === 'string' && value.length > 0))) {
|
|
613
|
-
approvalRecordByTaskId.set(taskId, snapshot?.teamName ? await readTaskApproval(snapshot.teamName, taskId, cwd) : null);
|
|
614
|
-
}
|
|
615
|
-
const recommendedInspectApprovalStatuses = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
616
|
-
const taskId = recommendedInspectTasks[target];
|
|
617
|
-
return [target, taskId ? (approvalRecordByTaskId.get(taskId)?.status ?? null) : null];
|
|
618
|
-
}));
|
|
619
|
-
const recommendedInspectApprovalRequired = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
620
|
-
const taskId = recommendedInspectTasks[target];
|
|
621
|
-
return [target, taskId ? (approvalRecordByTaskId.get(taskId)?.required ?? null) : null];
|
|
622
|
-
}));
|
|
623
|
-
const recommendedInspectApprovalReviewers = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
624
|
-
const taskId = recommendedInspectTasks[target];
|
|
625
|
-
return [target, taskId ? (approvalRecordByTaskId.get(taskId)?.reviewer ?? null) : null];
|
|
626
|
-
}));
|
|
627
|
-
const recommendedInspectApprovalReasons = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
628
|
-
const taskId = recommendedInspectTasks[target];
|
|
629
|
-
return [target, taskId ? (approvalRecordByTaskId.get(taskId)?.decision_reason ?? null) : null];
|
|
630
|
-
}));
|
|
631
|
-
const recommendedInspectApprovalDecidedAt = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
632
|
-
const taskId = recommendedInspectTasks[target];
|
|
633
|
-
return [target, taskId ? (approvalRecordByTaskId.get(taskId)?.decided_at ?? null) : null];
|
|
634
|
-
}));
|
|
635
|
-
const recommendedInspectApprovalRecordPresent = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
636
|
-
const taskId = recommendedInspectTasks[target];
|
|
637
|
-
return [target, taskId ? approvalRecordByTaskId.get(taskId) !== null : null];
|
|
638
|
-
}));
|
|
639
|
-
const recommendedInspectPanes = Object.fromEntries(recommendedInspectTargets.map((target) => [target, workerPanes[target] ?? null]));
|
|
640
|
-
const taskSubjectById = new Map((snapshot?.tasks.items ?? []).map((task) => [task.id, task.subject]));
|
|
641
|
-
const recommendedInspectSubjects = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
642
|
-
const taskId = recommendedInspectTasks[target];
|
|
643
|
-
return [target, taskId ? (taskSubjectById.get(taskId) ?? null) : null];
|
|
644
|
-
}));
|
|
645
|
-
const recommendedInspectTaskPaths = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
646
|
-
const taskId = recommendedInspectTasks[target];
|
|
647
|
-
return [target, taskId && snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'tasks', `task-${taskId}.json`) : null];
|
|
648
|
-
}));
|
|
649
|
-
const recommendedInspectApprovalPaths = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
650
|
-
const taskId = recommendedInspectTasks[target];
|
|
651
|
-
return [target, taskId && snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'approvals', `task-${taskId}.json`) : null];
|
|
652
|
-
}));
|
|
653
|
-
const recommendedInspectWorkerStateDirs = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
654
|
-
target,
|
|
655
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target) : null,
|
|
656
|
-
]));
|
|
657
|
-
const recommendedInspectWorkerStatusPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
658
|
-
target,
|
|
659
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'status.json') : null,
|
|
660
|
-
]));
|
|
661
|
-
const recommendedInspectWorkerHeartbeatPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
662
|
-
target,
|
|
663
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'heartbeat.json') : null,
|
|
664
|
-
]));
|
|
665
|
-
const recommendedInspectWorkerIdentityPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
666
|
-
target,
|
|
667
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'identity.json') : null,
|
|
668
|
-
]));
|
|
669
|
-
const recommendedInspectWorkerInboxPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
670
|
-
target,
|
|
671
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'inbox.md') : null,
|
|
672
|
-
]));
|
|
673
|
-
const recommendedInspectWorkerMailboxPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
674
|
-
target,
|
|
675
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'mailbox', `${target}.json`) : null,
|
|
676
|
-
]));
|
|
677
|
-
const recommendedInspectWorkerShutdownRequestPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
678
|
-
target,
|
|
679
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'shutdown-request.json') : null,
|
|
680
|
-
]));
|
|
681
|
-
const recommendedInspectWorkerShutdownAckPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
682
|
-
target,
|
|
683
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'workers', target, 'shutdown-ack.json') : null,
|
|
684
|
-
]));
|
|
685
|
-
const recommendedInspectTeamConfigPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
686
|
-
target,
|
|
687
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'config.json') : null,
|
|
688
|
-
]));
|
|
689
|
-
const recommendedInspectTeamManifestPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
690
|
-
target,
|
|
691
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'manifest.v2.json') : null,
|
|
692
|
-
]));
|
|
693
|
-
const recommendedInspectTeamEventsPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
694
|
-
target,
|
|
695
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'events', 'events.ndjson') : null,
|
|
696
|
-
]));
|
|
697
|
-
const recommendedInspectTeamDispatchPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
698
|
-
target,
|
|
699
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'dispatch', 'requests.json') : null,
|
|
700
|
-
]));
|
|
701
|
-
const recommendedInspectTeamDirPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
702
|
-
target,
|
|
703
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName) : null,
|
|
704
|
-
]));
|
|
705
|
-
const recommendedInspectTeamPhasePaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
706
|
-
target,
|
|
707
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'phase.json') : null,
|
|
708
|
-
]));
|
|
709
|
-
const recommendedInspectTeamMonitorSnapshotPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
710
|
-
target,
|
|
711
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'monitor-snapshot.json') : null,
|
|
712
|
-
]));
|
|
713
|
-
const recommendedInspectTeamSummarySnapshotPaths = Object.fromEntries(recommendedInspectTargets.map((target) => [
|
|
714
|
-
target,
|
|
715
|
-
snapshot?.teamName ? join(cwd, '.omx', 'state', 'team', snapshot.teamName, 'summary-snapshot.json') : null,
|
|
716
|
-
]));
|
|
717
|
-
const recommendedInspectStates = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
718
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
719
|
-
return [target, worker?.status.state ?? null];
|
|
720
|
-
}));
|
|
721
|
-
const recommendedInspectStateReasons = Object.fromEntries(recommendedInspectTargets.map((target) => {
|
|
722
|
-
const worker = snapshot?.workers.find((candidate) => candidate.name === target);
|
|
723
|
-
return [target, worker?.status.reason ?? null];
|
|
724
|
-
}));
|
|
725
|
-
const recommendedInspectCommand = recommendedInspectTargets.length > 0
|
|
726
|
-
? sparkshellCommands[recommendedInspectTargets[0]] ?? null
|
|
727
|
-
: null;
|
|
728
|
-
const recommendedInspectCommands = recommendedInspectTargets
|
|
729
|
-
.map((target) => sparkshellCommands[target])
|
|
730
|
-
.filter((command) => typeof command === 'string' && command.length > 0);
|
|
731
|
-
const recommendedInspectSummary = recommendedInspectTargets.length > 0
|
|
732
|
-
? [
|
|
733
|
-
`target=${recommendedInspectTargets[0]}`,
|
|
734
|
-
recommendedInspectPanes[recommendedInspectTargets[0]] ? `pane=${recommendedInspectPanes[recommendedInspectTargets[0]]}` : '',
|
|
735
|
-
recommendedInspectClis[recommendedInspectTargets[0]] ? `cli=${recommendedInspectClis[recommendedInspectTargets[0]]}` : '',
|
|
736
|
-
recommendedInspectRoles[recommendedInspectTargets[0]] ? `role=${recommendedInspectRoles[recommendedInspectTargets[0]]}` : '',
|
|
737
|
-
typeof recommendedInspectAlive[recommendedInspectTargets[0]] === 'boolean' ? `alive=${recommendedInspectAlive[recommendedInspectTargets[0]]}` : '',
|
|
738
|
-
typeof recommendedInspectTurnCounts[recommendedInspectTargets[0]] === 'number' ? `turn_count=${recommendedInspectTurnCounts[recommendedInspectTargets[0]]}` : '',
|
|
739
|
-
typeof recommendedInspectTurnsWithoutProgress[recommendedInspectTargets[0]] === 'number'
|
|
740
|
-
? `turns_without_progress=${recommendedInspectTurnsWithoutProgress[recommendedInspectTargets[0]]}` : '',
|
|
741
|
-
recommendedInspectReasons[recommendedInspectTargets[0]] ? `reason=${recommendedInspectReasons[recommendedInspectTargets[0]]}` : '',
|
|
742
|
-
recommendedInspectStates[recommendedInspectTargets[0]] ? `state=${recommendedInspectStates[recommendedInspectTargets[0]]}` : '',
|
|
743
|
-
recommendedInspectTasks[recommendedInspectTargets[0]] ? `task=${recommendedInspectTasks[recommendedInspectTargets[0]]}` : '',
|
|
744
|
-
recommendedInspectSubjects[recommendedInspectTargets[0]] ? `subject=${recommendedInspectSubjects[recommendedInspectTargets[0]]}` : '',
|
|
745
|
-
recommendedInspectCommand ? `command=${recommendedInspectCommand}` : '',
|
|
746
|
-
]
|
|
747
|
-
.filter(Boolean)
|
|
748
|
-
.join(' ')
|
|
749
|
-
.trim()
|
|
750
|
-
: null;
|
|
751
|
-
const recommendedInspectItems = recommendedInspectTargets
|
|
752
|
-
.map((target) => {
|
|
753
|
-
const command = sparkshellCommands[target];
|
|
754
|
-
const paneId = recommendedInspectPanes[target];
|
|
755
|
-
if (!command || !paneId)
|
|
756
|
-
return null;
|
|
757
|
-
return {
|
|
758
|
-
target,
|
|
759
|
-
pane_id: paneId,
|
|
760
|
-
worker_cli: recommendedInspectClis[target] ?? null,
|
|
761
|
-
role: recommendedInspectRoles[target] ?? null,
|
|
762
|
-
index: recommendedInspectIndexes[target] ?? null,
|
|
763
|
-
alive: recommendedInspectAlive[target] ?? null,
|
|
764
|
-
turn_count: recommendedInspectTurnCounts[target] ?? null,
|
|
765
|
-
turns_without_progress: recommendedInspectTurnsWithoutProgress[target] ?? null,
|
|
766
|
-
last_turn_at: recommendedInspectLastTurnAt[target] ?? null,
|
|
767
|
-
status_updated_at: recommendedInspectStatusUpdatedAt[target] ?? null,
|
|
768
|
-
pid: recommendedInspectPids[target] ?? null,
|
|
769
|
-
worktree_repo_root: recommendedInspectWorktreeRepoRoots[target] ?? null,
|
|
770
|
-
worktree_path: recommendedInspectWorktreePaths[target] ?? null,
|
|
771
|
-
worktree_branch: recommendedInspectWorktreeBranches[target] ?? null,
|
|
772
|
-
worktree_detached: recommendedInspectWorktreeDetached[target] ?? null,
|
|
773
|
-
worktree_created: recommendedInspectWorktreeCreated[target] ?? null,
|
|
774
|
-
team_state_root: recommendedInspectTeamStateRoots[target] ?? null,
|
|
775
|
-
working_dir: recommendedInspectWorkdirs[target] ?? null,
|
|
776
|
-
assigned_tasks: recommendedInspectAssignedTasks[target] ?? [],
|
|
777
|
-
task_status: recommendedInspectTaskStatuses[target] ?? null,
|
|
778
|
-
task_result: recommendedInspectTaskResults[target] ?? null,
|
|
779
|
-
task_error: recommendedInspectTaskErrors[target] ?? null,
|
|
780
|
-
task_version: recommendedInspectTaskVersions[target] ?? null,
|
|
781
|
-
task_created_at: recommendedInspectTaskCreatedAt[target] ?? null,
|
|
782
|
-
task_completed_at: recommendedInspectTaskCompletedAt[target] ?? null,
|
|
783
|
-
task_depends_on: recommendedInspectTaskDependsOn[target] ?? [],
|
|
784
|
-
task_claim_present: recommendedInspectTaskClaimPresent[target] ?? null,
|
|
785
|
-
task_claim_owner: recommendedInspectTaskClaimOwners[target] ?? null,
|
|
786
|
-
task_claim_token: recommendedInspectTaskClaimTokens[target] ?? null,
|
|
787
|
-
task_claim_leased_until: recommendedInspectTaskClaimLeases[target] ?? null,
|
|
788
|
-
task_claim_lock_path: recommendedInspectTaskClaimLockPaths[target] ?? null,
|
|
789
|
-
approval_required: recommendedInspectApprovalRequired[target] ?? null,
|
|
790
|
-
requires_code_change: recommendedInspectRequiresCodeChange[target] ?? null,
|
|
791
|
-
task_description: recommendedInspectDescriptions[target] ?? null,
|
|
792
|
-
blocked_by: recommendedInspectBlockedBy[target] ?? [],
|
|
793
|
-
task_role: recommendedInspectTaskRoles[target] ?? null,
|
|
794
|
-
task_owner: recommendedInspectTaskOwners[target] ?? null,
|
|
795
|
-
approval_status: recommendedInspectApprovalStatuses[target] ?? null,
|
|
796
|
-
approval_reviewer: recommendedInspectApprovalReviewers[target] ?? null,
|
|
797
|
-
approval_reason: recommendedInspectApprovalReasons[target] ?? null,
|
|
798
|
-
approval_decided_at: recommendedInspectApprovalDecidedAt[target] ?? null,
|
|
799
|
-
approval_record_present: recommendedInspectApprovalRecordPresent[target] ?? null,
|
|
800
|
-
reason: recommendedInspectReasons[target] ?? 'unknown',
|
|
801
|
-
state: recommendedInspectStates[target] ?? null,
|
|
802
|
-
state_reason: recommendedInspectStateReasons[target] ?? null,
|
|
803
|
-
task_id: recommendedInspectTasks[target] ?? null,
|
|
804
|
-
task_subject: recommendedInspectSubjects[target] ?? null,
|
|
805
|
-
task_path: recommendedInspectTaskPaths[target] ?? null,
|
|
806
|
-
approval_path: recommendedInspectApprovalPaths[target] ?? null,
|
|
807
|
-
worker_state_dir: recommendedInspectWorkerStateDirs[target] ?? null,
|
|
808
|
-
worker_status_path: recommendedInspectWorkerStatusPaths[target] ?? null,
|
|
809
|
-
worker_heartbeat_path: recommendedInspectWorkerHeartbeatPaths[target] ?? null,
|
|
810
|
-
worker_identity_path: recommendedInspectWorkerIdentityPaths[target] ?? null,
|
|
811
|
-
worker_inbox_path: recommendedInspectWorkerInboxPaths[target] ?? null,
|
|
812
|
-
worker_mailbox_path: recommendedInspectWorkerMailboxPaths[target] ?? null,
|
|
813
|
-
worker_shutdown_request_path: recommendedInspectWorkerShutdownRequestPaths[target] ?? null,
|
|
814
|
-
worker_shutdown_ack_path: recommendedInspectWorkerShutdownAckPaths[target] ?? null,
|
|
815
|
-
team_dir_path: recommendedInspectTeamDirPaths[target] ?? null,
|
|
816
|
-
team_config_path: recommendedInspectTeamConfigPaths[target] ?? null,
|
|
817
|
-
team_manifest_path: recommendedInspectTeamManifestPaths[target] ?? null,
|
|
818
|
-
team_events_path: recommendedInspectTeamEventsPaths[target] ?? null,
|
|
819
|
-
team_dispatch_path: recommendedInspectTeamDispatchPaths[target] ?? null,
|
|
820
|
-
team_phase_path: recommendedInspectTeamPhasePaths[target] ?? null,
|
|
821
|
-
team_monitor_snapshot_path: recommendedInspectTeamMonitorSnapshotPaths[target] ?? null,
|
|
822
|
-
team_summary_snapshot_path: recommendedInspectTeamSummarySnapshotPaths[target] ?? null,
|
|
823
|
-
command,
|
|
824
|
-
};
|
|
825
|
-
})
|
|
826
|
-
.filter((item) => item !== null);
|
|
827
|
-
return {
|
|
828
|
-
leader_pane_id: leaderPaneId,
|
|
829
|
-
hud_pane_id: hudPaneId,
|
|
830
|
-
worker_panes: workerPanes,
|
|
831
|
-
sparkshell_hint: Object.keys(workerPanes).length > 0
|
|
832
|
-
? 'omx sparkshell --tmux-pane <pane-id> --tail-lines 400'
|
|
833
|
-
: null,
|
|
834
|
-
sparkshell_commands: sparkshellCommands,
|
|
835
|
-
recommended_inspect_targets: recommendedInspectTargets,
|
|
836
|
-
recommended_inspect_reasons: recommendedInspectReasons,
|
|
837
|
-
recommended_inspect_clis: recommendedInspectClis,
|
|
838
|
-
recommended_inspect_roles: recommendedInspectRoles,
|
|
839
|
-
recommended_inspect_indexes: recommendedInspectIndexes,
|
|
840
|
-
recommended_inspect_alive: recommendedInspectAlive,
|
|
841
|
-
recommended_inspect_turn_counts: recommendedInspectTurnCounts,
|
|
842
|
-
recommended_inspect_turns_without_progress: recommendedInspectTurnsWithoutProgress,
|
|
843
|
-
recommended_inspect_last_turn_at: recommendedInspectLastTurnAt,
|
|
844
|
-
recommended_inspect_status_updated_at: recommendedInspectStatusUpdatedAt,
|
|
845
|
-
recommended_inspect_pids: recommendedInspectPids,
|
|
846
|
-
recommended_inspect_worktree_paths: recommendedInspectWorktreePaths,
|
|
847
|
-
recommended_inspect_worktree_repo_roots: recommendedInspectWorktreeRepoRoots,
|
|
848
|
-
recommended_inspect_worktree_branches: recommendedInspectWorktreeBranches,
|
|
849
|
-
recommended_inspect_worktree_detached: recommendedInspectWorktreeDetached,
|
|
850
|
-
recommended_inspect_worktree_created: recommendedInspectWorktreeCreated,
|
|
851
|
-
recommended_inspect_team_state_roots: recommendedInspectTeamStateRoots,
|
|
852
|
-
recommended_inspect_workdirs: recommendedInspectWorkdirs,
|
|
853
|
-
recommended_inspect_assigned_tasks: recommendedInspectAssignedTasks,
|
|
854
|
-
recommended_inspect_task_statuses: recommendedInspectTaskStatuses,
|
|
855
|
-
recommended_inspect_task_results: recommendedInspectTaskResults,
|
|
856
|
-
recommended_inspect_task_errors: recommendedInspectTaskErrors,
|
|
857
|
-
recommended_inspect_task_versions: recommendedInspectTaskVersions,
|
|
858
|
-
recommended_inspect_task_created_at: recommendedInspectTaskCreatedAt,
|
|
859
|
-
recommended_inspect_task_completed_at: recommendedInspectTaskCompletedAt,
|
|
860
|
-
recommended_inspect_task_depends_on: recommendedInspectTaskDependsOn,
|
|
861
|
-
recommended_inspect_task_claim_present: recommendedInspectTaskClaimPresent,
|
|
862
|
-
recommended_inspect_task_claim_owners: recommendedInspectTaskClaimOwners,
|
|
863
|
-
recommended_inspect_task_claim_tokens: recommendedInspectTaskClaimTokens,
|
|
864
|
-
recommended_inspect_task_claim_leases: recommendedInspectTaskClaimLeases,
|
|
865
|
-
recommended_inspect_task_claim_lock_paths: recommendedInspectTaskClaimLockPaths,
|
|
866
|
-
recommended_inspect_approval_required: recommendedInspectApprovalRequired,
|
|
867
|
-
recommended_inspect_requires_code_change: recommendedInspectRequiresCodeChange,
|
|
868
|
-
recommended_inspect_descriptions: recommendedInspectDescriptions,
|
|
869
|
-
recommended_inspect_blocked_by: recommendedInspectBlockedBy,
|
|
870
|
-
recommended_inspect_task_roles: recommendedInspectTaskRoles,
|
|
871
|
-
recommended_inspect_task_owners: recommendedInspectTaskOwners,
|
|
872
|
-
recommended_inspect_approval_statuses: recommendedInspectApprovalStatuses,
|
|
873
|
-
recommended_inspect_approval_reviewers: recommendedInspectApprovalReviewers,
|
|
874
|
-
recommended_inspect_approval_reasons: recommendedInspectApprovalReasons,
|
|
875
|
-
recommended_inspect_approval_decided_at: recommendedInspectApprovalDecidedAt,
|
|
876
|
-
recommended_inspect_approval_record_present: recommendedInspectApprovalRecordPresent,
|
|
877
|
-
recommended_inspect_states: recommendedInspectStates,
|
|
878
|
-
recommended_inspect_state_reasons: recommendedInspectStateReasons,
|
|
879
|
-
recommended_inspect_tasks: recommendedInspectTasks,
|
|
880
|
-
recommended_inspect_subjects: recommendedInspectSubjects,
|
|
881
|
-
recommended_inspect_task_paths: recommendedInspectTaskPaths,
|
|
882
|
-
recommended_inspect_approval_paths: recommendedInspectApprovalPaths,
|
|
883
|
-
recommended_inspect_worker_state_dirs: recommendedInspectWorkerStateDirs,
|
|
884
|
-
recommended_inspect_worker_status_paths: recommendedInspectWorkerStatusPaths,
|
|
885
|
-
recommended_inspect_worker_heartbeat_paths: recommendedInspectWorkerHeartbeatPaths,
|
|
886
|
-
recommended_inspect_worker_identity_paths: recommendedInspectWorkerIdentityPaths,
|
|
887
|
-
recommended_inspect_worker_inbox_paths: recommendedInspectWorkerInboxPaths,
|
|
888
|
-
recommended_inspect_worker_mailbox_paths: recommendedInspectWorkerMailboxPaths,
|
|
889
|
-
recommended_inspect_worker_shutdown_request_paths: recommendedInspectWorkerShutdownRequestPaths,
|
|
890
|
-
recommended_inspect_worker_shutdown_ack_paths: recommendedInspectWorkerShutdownAckPaths,
|
|
891
|
-
recommended_inspect_team_dir_paths: recommendedInspectTeamDirPaths,
|
|
892
|
-
recommended_inspect_team_config_paths: recommendedInspectTeamConfigPaths,
|
|
893
|
-
recommended_inspect_team_manifest_paths: recommendedInspectTeamManifestPaths,
|
|
894
|
-
recommended_inspect_team_events_paths: recommendedInspectTeamEventsPaths,
|
|
895
|
-
recommended_inspect_team_dispatch_paths: recommendedInspectTeamDispatchPaths,
|
|
896
|
-
recommended_inspect_team_phase_paths: recommendedInspectTeamPhasePaths,
|
|
897
|
-
recommended_inspect_team_monitor_snapshot_paths: recommendedInspectTeamMonitorSnapshotPaths,
|
|
898
|
-
recommended_inspect_team_summary_snapshot_paths: recommendedInspectTeamSummarySnapshotPaths,
|
|
899
|
-
recommended_inspect_panes: recommendedInspectPanes,
|
|
900
|
-
recommended_inspect_command: recommendedInspectCommand,
|
|
901
|
-
recommended_inspect_commands: recommendedInspectCommands,
|
|
902
|
-
recommended_inspect_summary: recommendedInspectSummary,
|
|
903
|
-
recommended_inspect_items: recommendedInspectItems,
|
|
904
|
-
};
|
|
905
|
-
}
|
|
906
356
|
function renderTeamPaneStatus(paneStatus) {
|
|
907
357
|
if (paneStatus.leader_pane_id || paneStatus.hud_pane_id) {
|
|
908
358
|
console.log(`panes: leader=${paneStatus.leader_pane_id || '-'} hud=${paneStatus.hud_pane_id || '-'}`);
|
|
@@ -1571,29 +1021,38 @@ async function ensureTeamModeState(parsed, tasks) {
|
|
|
1571
1021
|
workerCount: parsed.workerCount,
|
|
1572
1022
|
fallbackRole,
|
|
1573
1023
|
});
|
|
1024
|
+
const currentPhase = parsed.teamName
|
|
1025
|
+
? (await readTeamPhase(parsed.teamName, process.cwd()))?.current_phase ?? 'team-exec'
|
|
1026
|
+
: 'team-exec';
|
|
1027
|
+
const active = !isTerminalModePhase(currentPhase);
|
|
1028
|
+
const completionStamp = active ? undefined : new Date().toISOString();
|
|
1574
1029
|
const existing = await readModeState('team');
|
|
1575
1030
|
if (existing?.active) {
|
|
1576
1031
|
await updateModeState('team', {
|
|
1032
|
+
active,
|
|
1577
1033
|
task_description: parsed.task,
|
|
1578
|
-
current_phase:
|
|
1034
|
+
current_phase: currentPhase,
|
|
1579
1035
|
team_name: parsed.teamName,
|
|
1580
1036
|
agent_count: parsed.workerCount,
|
|
1581
1037
|
agent_types: roleDistribution,
|
|
1582
1038
|
available_agent_types: availableAgentTypes,
|
|
1583
1039
|
staffing_summary: staffingPlan.staffingSummary,
|
|
1584
1040
|
staffing_allocations: staffingPlan.allocations,
|
|
1041
|
+
completed_at: completionStamp,
|
|
1585
1042
|
});
|
|
1586
1043
|
return;
|
|
1587
1044
|
}
|
|
1588
1045
|
await startMode('team', parsed.task, 50);
|
|
1589
1046
|
await updateModeState('team', {
|
|
1590
|
-
|
|
1047
|
+
active,
|
|
1048
|
+
current_phase: currentPhase,
|
|
1591
1049
|
team_name: parsed.teamName,
|
|
1592
1050
|
agent_count: parsed.workerCount,
|
|
1593
1051
|
agent_types: roleDistribution,
|
|
1594
1052
|
available_agent_types: availableAgentTypes,
|
|
1595
1053
|
staffing_summary: staffingPlan.staffingSummary,
|
|
1596
1054
|
staffing_allocations: staffingPlan.allocations,
|
|
1055
|
+
completed_at: completionStamp,
|
|
1597
1056
|
});
|
|
1598
1057
|
}
|
|
1599
1058
|
async function renderStartSummary(runtime, staffingPlan) {
|