oh-my-codex 0.15.0 → 0.15.2
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 +36 -5
- package/crates/omx-explore/src/main.rs +222 -12
- package/dist/agents/__tests__/native-config.test.js +40 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/native-config.d.ts +1 -0
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +6 -1
- package/dist/agents/native-config.js.map +1 -1
- package/dist/agents/policy.d.ts +1 -0
- package/dist/agents/policy.d.ts.map +1 -1
- package/dist/agents/policy.js +4 -0
- package/dist/agents/policy.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js +37 -13
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-team.test.js +46 -1
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +225 -111
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/exec.test.js +96 -1
- package/dist/cli/__tests__/exec.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +15 -2
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +292 -3
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +223 -0
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-parity.test.js +86 -0
- package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +23 -0
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +76 -11
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +140 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +310 -4
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +78 -19
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +79 -2
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/sidecar.test.d.ts +2 -0
- package/dist/cli/__tests__/sidecar.test.d.ts.map +1 -0
- package/dist/cli/__tests__/sidecar.test.js +24 -0
- package/dist/cli/__tests__/sidecar.test.js.map +1 -0
- package/dist/cli/__tests__/team.test.js +54 -7
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +12 -4
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/codex-home.d.ts +4 -6
- package/dist/cli/codex-home.d.ts.map +1 -1
- package/dist/cli/codex-home.js +9 -41
- package/dist/cli/codex-home.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +509 -279
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +6 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +284 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/omx.js +3 -1
- package/dist/cli/omx.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts +13 -0
- package/dist/cli/plugin-marketplace.d.ts.map +1 -0
- package/dist/cli/plugin-marketplace.js +77 -0
- package/dist/cli/plugin-marketplace.js.map +1 -0
- package/dist/cli/question.d.ts +1 -1
- package/dist/cli/question.d.ts.map +1 -1
- package/dist/cli/question.js +26 -12
- package/dist/cli/question.js.map +1 -1
- package/dist/cli/setup-preferences.d.ts +20 -0
- package/dist/cli/setup-preferences.d.ts.map +1 -0
- package/dist/cli/setup-preferences.js +71 -0
- package/dist/cli/setup-preferences.js.map +1 -0
- package/dist/cli/setup.d.ts +7 -5
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +271 -152
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +1 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +70 -15
- package/dist/cli/team.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +100 -3
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +6 -5
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/__tests__/generator-status-line-presets.test.d.ts +2 -0
- package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +1 -0
- package/dist/config/__tests__/generator-status-line-presets.test.js +203 -0
- package/dist/config/__tests__/generator-status-line-presets.test.js.map +1 -0
- package/dist/config/__tests__/models.test.js +23 -1
- package/dist/config/__tests__/models.test.js.map +1 -1
- package/dist/config/generator.d.ts +9 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +184 -16
- package/dist/config/generator.js.map +1 -1
- package/dist/config/models.d.ts +5 -1
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +12 -2
- package/dist/config/models.js.map +1 -1
- package/dist/exec/followup.d.ts +44 -0
- package/dist/exec/followup.d.ts.map +1 -0
- package/dist/exec/followup.js +349 -0
- package/dist/exec/followup.js.map +1 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +37 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/codebase-map.test.js +63 -1
- package/dist/hooks/__tests__/codebase-map.test.js.map +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +5 -5
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +12 -9
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +25 -18
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -2
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +45 -2
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +17 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +121 -0
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js +4 -4
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +103 -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 +2 -2
- 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 +27 -13
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +35 -0
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +215 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +70 -3
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js +5 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +3 -2
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +9 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-refactor-contract.test.js +22 -0
- package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +1 -0
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +83 -6
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +35 -4
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts +6 -0
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +117 -13
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.d.ts +2 -0
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +6 -0
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +4 -4
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +4 -0
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/types.test.js +27 -0
- package/dist/hud/__tests__/types.test.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +8 -0
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/types.d.ts +9 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +3 -0
- package/dist/hud/types.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +23 -5
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js +50 -7
- package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +70 -12
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +10 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +71 -26
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/state-server.d.ts +5 -11
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +16 -432
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.js +1 -1
- package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +89 -5
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +98 -1
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/index.d.ts +5 -3
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +4 -3
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts +7 -6
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +90 -11
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/review-verdict.d.ts +3 -0
- package/dist/pipeline/review-verdict.d.ts.map +1 -0
- package/dist/pipeline/review-verdict.js +14 -0
- package/dist/pipeline/review-verdict.js.map +1 -0
- package/dist/pipeline/stages/code-review.d.ts +33 -0
- package/dist/pipeline/stages/code-review.d.ts.map +1 -0
- package/dist/pipeline/stages/code-review.js +51 -0
- package/dist/pipeline/stages/code-review.js.map +1 -0
- package/dist/pipeline/stages/ralph-verify.d.ts +12 -2
- package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -1
- package/dist/pipeline/stages/ralph-verify.js +24 -6
- package/dist/pipeline/stages/ralph-verify.js.map +1 -1
- package/dist/pipeline/stages/ralplan.d.ts +1 -1
- package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
- package/dist/pipeline/stages/ralplan.js +21 -1
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/pipeline/types.d.ts +14 -7
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +2 -2
- package/dist/planning/__tests__/artifacts.test.js +152 -1
- package/dist/planning/__tests__/artifacts.test.js.map +1 -1
- package/dist/planning/artifacts.d.ts +9 -0
- package/dist/planning/artifacts.d.ts.map +1 -1
- package/dist/planning/artifacts.js +60 -1
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/question/__tests__/client.test.js +23 -3
- package/dist/question/__tests__/client.test.js.map +1 -1
- package/dist/question/__tests__/renderer.test.js +148 -37
- package/dist/question/__tests__/renderer.test.js.map +1 -1
- package/dist/question/__tests__/types.test.js +21 -0
- package/dist/question/__tests__/types.test.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +155 -7
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/client.d.ts +14 -4
- package/dist/question/client.d.ts.map +1 -1
- package/dist/question/client.js.map +1 -1
- package/dist/question/renderer.d.ts +11 -1
- package/dist/question/renderer.d.ts.map +1 -1
- package/dist/question/renderer.js +102 -7
- package/dist/question/renderer.js.map +1 -1
- package/dist/question/state.d.ts +2 -2
- package/dist/question/state.d.ts.map +1 -1
- package/dist/question/state.js +26 -17
- package/dist/question/state.js.map +1 -1
- package/dist/question/types.d.ts +25 -1
- package/dist/question/types.d.ts.map +1 -1
- package/dist/question/types.js +48 -13
- package/dist/question/types.js.map +1 -1
- package/dist/question/ui.d.ts +15 -2
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +268 -162
- package/dist/question/ui.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +415 -94
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/generate-release-body.test.js +36 -0
- package/dist/scripts/__tests__/generate-release-body.test.js.map +1 -1
- package/dist/scripts/__tests__/prompt-inventory.test.d.ts +2 -0
- package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/prompt-inventory.test.js +56 -0
- package/dist/scripts/__tests__/prompt-inventory.test.js.map +1 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +232 -54
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +12 -9
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/generate-release-body.d.ts.map +1 -1
- package/dist/scripts/generate-release-body.js +12 -3
- package/dist/scripts/generate-release-body.js.map +1 -1
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +2 -0
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +1 -0
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +153 -0
- package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +1 -0
- package/dist/scripts/notify-hook/managed-tmux.d.ts +4 -2
- package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.js +188 -6
- package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
- package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
- package/dist/scripts/notify-hook/process-runner.js +7 -3
- package/dist/scripts/notify-hook/process-runner.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +96 -11
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +3 -3
- package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts +34 -0
- package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts.map +1 -0
- package/dist/scripts/notify-hook/team-worker-posttooluse.js +434 -0
- package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -0
- package/dist/scripts/notify-hook/team-worker.d.ts +1 -1
- package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +3 -43
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +25 -4
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/notify-hook.js +36 -5
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/prompt-inventory.d.ts +29 -0
- package/dist/scripts/prompt-inventory.d.ts.map +1 -0
- package/dist/scripts/prompt-inventory.js +178 -0
- package/dist/scripts/prompt-inventory.js.map +1 -0
- package/dist/scripts/run-test-files.js +1 -0
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/sidecar/__tests__/boundary.test.d.ts +2 -0
- package/dist/sidecar/__tests__/boundary.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/boundary.test.js +48 -0
- package/dist/sidecar/__tests__/boundary.test.js.map +1 -0
- package/dist/sidecar/__tests__/collector.test.d.ts +2 -0
- package/dist/sidecar/__tests__/collector.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/collector.test.js +162 -0
- package/dist/sidecar/__tests__/collector.test.js.map +1 -0
- package/dist/sidecar/__tests__/render.test.d.ts +2 -0
- package/dist/sidecar/__tests__/render.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/render.test.js +67 -0
- package/dist/sidecar/__tests__/render.test.js.map +1 -0
- package/dist/sidecar/__tests__/tmux.test.d.ts +2 -0
- package/dist/sidecar/__tests__/tmux.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/tmux.test.js +30 -0
- package/dist/sidecar/__tests__/tmux.test.js.map +1 -0
- package/dist/sidecar/__tests__/watch.test.d.ts +2 -0
- package/dist/sidecar/__tests__/watch.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/watch.test.js +42 -0
- package/dist/sidecar/__tests__/watch.test.js.map +1 -0
- package/dist/sidecar/collector.d.ts +4 -0
- package/dist/sidecar/collector.d.ts.map +1 -0
- package/dist/sidecar/collector.js +377 -0
- package/dist/sidecar/collector.js.map +1 -0
- package/dist/sidecar/index.d.ts +25 -0
- package/dist/sidecar/index.d.ts.map +1 -0
- package/dist/sidecar/index.js +165 -0
- package/dist/sidecar/index.js.map +1 -0
- package/dist/sidecar/render.d.ts +3 -0
- package/dist/sidecar/render.d.ts.map +1 -0
- package/dist/sidecar/render.js +72 -0
- package/dist/sidecar/render.js.map +1 -0
- package/dist/sidecar/tmux.d.ts +13 -0
- package/dist/sidecar/tmux.d.ts.map +1 -0
- package/dist/sidecar/tmux.js +44 -0
- package/dist/sidecar/tmux.js.map +1 -0
- package/dist/sidecar/types.d.ts +125 -0
- package/dist/sidecar/types.d.ts.map +1 -0
- package/dist/sidecar/types.js +2 -0
- package/dist/sidecar/types.js.map +1 -0
- package/dist/state/__tests__/operations.test.js +50 -22
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/workflow-transition.test.js +9 -1
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/operations.d.ts +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +19 -7
- package/dist/state/operations.js.map +1 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +1 -0
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/team/__tests__/commit-hygiene.test.d.ts +2 -0
- package/dist/team/__tests__/commit-hygiene.test.d.ts.map +1 -0
- package/dist/team/__tests__/commit-hygiene.test.js +93 -0
- package/dist/team/__tests__/commit-hygiene.test.js.map +1 -0
- package/dist/team/__tests__/delegation-policy.test.d.ts +2 -0
- package/dist/team/__tests__/delegation-policy.test.d.ts.map +1 -0
- package/dist/team/__tests__/delegation-policy.test.js +69 -0
- package/dist/team/__tests__/delegation-policy.test.js.map +1 -0
- package/dist/team/__tests__/events.test.js +54 -4
- package/dist/team/__tests__/events.test.js.map +1 -1
- package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +2 -0
- package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +1 -0
- package/dist/team/__tests__/hook-primary-e2e-contract.test.js +78 -0
- package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +1 -0
- package/dist/team/__tests__/model-contract.test.js +16 -0
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +2 -0
- package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +1 -0
- package/dist/team/__tests__/repo-aware-decomposition.test.js +95 -0
- package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +623 -14
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.js +177 -1
- package/dist/team/__tests__/state-root.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +110 -0
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +399 -2
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +94 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/commit-hygiene.d.ts +22 -3
- package/dist/team/commit-hygiene.d.ts.map +1 -1
- package/dist/team/commit-hygiene.js +134 -2
- package/dist/team/commit-hygiene.js.map +1 -1
- package/dist/team/contracts.d.ts +1 -1
- package/dist/team/contracts.d.ts.map +1 -1
- package/dist/team/contracts.js +2 -0
- package/dist/team/contracts.js.map +1 -1
- package/dist/team/dag-schema.d.ts +38 -0
- package/dist/team/dag-schema.d.ts.map +1 -0
- package/dist/team/dag-schema.js +221 -0
- package/dist/team/dag-schema.js.map +1 -0
- package/dist/team/delegation-policy.d.ts +3 -0
- package/dist/team/delegation-policy.d.ts.map +1 -0
- package/dist/team/delegation-policy.js +82 -0
- package/dist/team/delegation-policy.js.map +1 -0
- package/dist/team/model-contract.d.ts +3 -1
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +44 -5
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/repo-aware-decomposition.d.ts +60 -0
- package/dist/team/repo-aware-decomposition.d.ts.map +1 -0
- package/dist/team/repo-aware-decomposition.js +229 -0
- package/dist/team/repo-aware-decomposition.js.map +1 -0
- package/dist/team/runtime.d.ts +27 -0
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +172 -52
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state/tasks.d.ts.map +1 -1
- package/dist/team/state/tasks.js +33 -0
- package/dist/team/state/tasks.js.map +1 -1
- package/dist/team/state/types.d.ts +23 -1
- package/dist/team/state/types.d.ts.map +1 -1
- package/dist/team/state/types.js.map +1 -1
- package/dist/team/state-root.d.ts +35 -0
- package/dist/team/state-root.d.ts.map +1 -1
- package/dist/team/state-root.js +281 -1
- package/dist/team/state-root.js.map +1 -1
- package/dist/team/state.d.ts +27 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +6 -0
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts +1 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +105 -6
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +3 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +77 -4
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/utils/agents-md.d.ts +3 -0
- package/dist/utils/agents-md.d.ts.map +1 -1
- package/dist/utils/agents-md.js +25 -0
- package/dist/utils/agents-md.js.map +1 -1
- package/package.json +3 -2
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +2 -2
- package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/analyze/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +134 -205
- package/plugins/oh-my-codex/skills/code-review/SKILL.md +4 -4
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +14 -7
- package/plugins/oh-my-codex/skills/doctor/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/help/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +41 -10
- package/plugins/oh-my-codex/skills/plan/SKILL.md +12 -14
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -4
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -9
- package/plugins/oh-my-codex/skills/security-review/SKILL.md +4 -4
- package/plugins/oh-my-codex/skills/team/SKILL.md +2 -5
- package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +2 -5
- package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +2 -3
- 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 +15 -5
- package/prompts/code-simplifier.md +1 -1
- package/prompts/critic.md +35 -83
- package/prompts/debugger.md +2 -2
- package/prompts/dependency-expert.md +2 -2
- package/prompts/designer.md +2 -2
- package/prompts/executor.md +40 -114
- package/prompts/explore-harness.md +1 -1
- package/prompts/explore.md +37 -90
- package/prompts/git-master.md +2 -2
- package/prompts/information-architect.md +1 -1
- package/prompts/performance-reviewer.md +2 -2
- package/prompts/planner.md +35 -62
- 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 +46 -78
- 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 +1 -1
- package/prompts/test-engineer.md +2 -2
- package/prompts/ux-researcher.md +2 -2
- package/prompts/verifier.md +29 -34
- package/prompts/vision.md +2 -2
- package/prompts/writer.md +2 -2
- package/skills/ai-slop-cleaner/SKILL.md +1 -1
- package/skills/analyze/SKILL.md +1 -1
- package/skills/autopilot/SKILL.md +134 -205
- package/skills/build-fix/SKILL.md +4 -4
- package/skills/code-review/SKILL.md +4 -4
- package/skills/deep-interview/SKILL.md +14 -7
- package/skills/doctor/SKILL.md +1 -1
- package/skills/help/SKILL.md +1 -1
- package/skills/omx-setup/SKILL.md +41 -10
- package/skills/plan/SKILL.md +12 -14
- package/skills/ralph/SKILL.md +2 -4
- package/skills/ralplan/SKILL.md +5 -9
- package/skills/security-review/SKILL.md +4 -4
- package/skills/team/SKILL.md +2 -5
- package/skills/ultraqa/SKILL.md +2 -5
- package/skills/ultrawork/SKILL.md +2 -3
- package/src/scripts/__tests__/codex-native-hook.test.ts +502 -94
- package/src/scripts/__tests__/generate-release-body.test.ts +41 -0
- package/src/scripts/__tests__/prompt-inventory.test.ts +64 -0
- package/src/scripts/codex-native-hook.ts +293 -61
- package/src/scripts/codex-native-pre-post.ts +10 -8
- package/src/scripts/generate-release-body.ts +13 -2
- package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +180 -0
- package/src/scripts/notify-hook/managed-tmux.ts +196 -9
- package/src/scripts/notify-hook/process-runner.ts +7 -3
- package/src/scripts/notify-hook/team-dispatch.ts +103 -11
- package/src/scripts/notify-hook/team-tmux-guard.ts +3 -3
- package/src/scripts/notify-hook/team-worker-posttooluse.ts +536 -0
- package/src/scripts/notify-hook/team-worker.ts +4 -48
- package/src/scripts/notify-hook/tmux-injection.ts +24 -6
- package/src/scripts/notify-hook.ts +36 -5
- package/src/scripts/prompt-inventory.ts +218 -0
- package/src/scripts/run-test-files.ts +1 -0
- package/templates/AGENTS.md +34 -95
|
@@ -123,6 +123,42 @@ describe('generate-release-body', () => {
|
|
|
123
123
|
await rm(root, { recursive: true, force: true });
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
|
+
it('skips off-ancestry semver-previous tags when auto-resolving the compare base', async () => {
|
|
127
|
+
const root = await mkdtemp(join(tmpdir(), 'omx-generate-release-body-off-ancestry-'));
|
|
128
|
+
try {
|
|
129
|
+
git(root, ['init']);
|
|
130
|
+
git(root, ['config', 'user.name', 'Release Bot']);
|
|
131
|
+
git(root, ['config', 'user.email', 'release@example.com']);
|
|
132
|
+
await writeFile(join(root, 'notes.txt'), 'base\n');
|
|
133
|
+
git(root, ['add', '.']);
|
|
134
|
+
git(root, ['commit', '-m', 'base']);
|
|
135
|
+
git(root, ['tag', 'v0.14.3']);
|
|
136
|
+
await writeFile(join(root, 'notes.txt'), 'dev train\n');
|
|
137
|
+
git(root, ['add', 'notes.txt']);
|
|
138
|
+
git(root, ['commit', '-m', 'dev train']);
|
|
139
|
+
git(root, ['tag', 'v0.15.1']);
|
|
140
|
+
git(root, ['checkout', '-b', 'side-release', 'v0.14.3']);
|
|
141
|
+
await writeFile(join(root, 'side.txt'), 'side release\n');
|
|
142
|
+
git(root, ['add', 'side.txt']);
|
|
143
|
+
git(root, ['commit', '-m', 'side release']);
|
|
144
|
+
git(root, ['tag', 'v0.15.0']);
|
|
145
|
+
git(root, ['checkout', 'v0.15.1']);
|
|
146
|
+
await writeFile(join(root, 'RELEASE_BODY.md'), TEMPLATE);
|
|
147
|
+
await generateReleaseBody({
|
|
148
|
+
cwd: root,
|
|
149
|
+
templatePath: 'RELEASE_BODY.md',
|
|
150
|
+
outPath: 'RELEASE_BODY.generated.md',
|
|
151
|
+
currentTag: 'v0.15.1',
|
|
152
|
+
repo: 'example/oh-my-codex',
|
|
153
|
+
});
|
|
154
|
+
const generated = await readFile(join(root, 'RELEASE_BODY.generated.md'), 'utf-8');
|
|
155
|
+
assert.match(generated, /`v0\.14\.3\.\.\.v0\.15\.1`/);
|
|
156
|
+
assert.doesNotMatch(generated, /`v0\.15\.0\.\.\.v0\.15\.1`/);
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
await rm(root, { recursive: true, force: true });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
126
162
|
it('rejects missing or inverted compare refs before rendering a compare link', async () => {
|
|
127
163
|
const root = await mkdtemp(join(tmpdir(), 'omx-generate-release-body-range-'));
|
|
128
164
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-release-body.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/generate-release-body.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-release-body.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/generate-release-body.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-inventory.test.d.ts","sourceRoot":"","sources":["../../../src/scripts/__tests__/prompt-inventory.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { mkdtemp, rm, writeFile, mkdir } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { describe, it } from 'node:test';
|
|
6
|
+
import { buildPromptInventory, listPromptSurfacePaths, renderPromptInventoryMarkdown } from '../prompt-inventory.js';
|
|
7
|
+
describe('prompt inventory', () => {
|
|
8
|
+
it('counts prompt surfaces, absolute directives, markers, and duplicate fragments', async () => {
|
|
9
|
+
const root = await mkdtemp(join(tmpdir(), 'omx-prompt-inventory-'));
|
|
10
|
+
try {
|
|
11
|
+
await mkdir(join(root, 'templates'), { recursive: true });
|
|
12
|
+
await mkdir(join(root, 'prompts'), { recursive: true });
|
|
13
|
+
await mkdir(join(root, 'skills', 'worker'), { recursive: true });
|
|
14
|
+
await mkdir(join(root, 'docs', 'prompt-guidance-fragments'), { recursive: true });
|
|
15
|
+
await mkdir(join(root, 'src', 'hooks'), { recursive: true });
|
|
16
|
+
await mkdir(join(root, 'src', 'config'), { recursive: true });
|
|
17
|
+
await mkdir(join(root, 'src', 'cli'), { recursive: true });
|
|
18
|
+
const repeated = 'AUTO-CONTINUE for clear, already-requested, low-risk, reversible local work with evidence.';
|
|
19
|
+
await writeFile(join(root, 'AGENTS.md'), `# Root\n${repeated}\n<!-- omx:generated:agents-md -->\n`);
|
|
20
|
+
await writeFile(join(root, 'templates', 'AGENTS.md'), `# Template\nMUST preserve markers.\n${repeated}\n<!-- OMX:RUNTIME:START -->\n<!-- OMX:RUNTIME:END -->\n`);
|
|
21
|
+
await writeFile(join(root, 'prompts', 'executor.md'), `# Executor\nDO NOT stop early.\n${repeated}\n`);
|
|
22
|
+
await writeFile(join(root, 'skills', 'worker', 'SKILL.md'), '# Worker\nALWAYS claim tasks.\n');
|
|
23
|
+
await writeFile(join(root, 'docs', 'prompt-guidance-contract.md'), '# Contract\n');
|
|
24
|
+
await writeFile(join(root, 'docs', 'guidance-schema.md'), '# Schema\n');
|
|
25
|
+
await writeFile(join(root, 'docs', 'prompt-guidance-fragments', 'core.md'), 'fragment\n');
|
|
26
|
+
await writeFile(join(root, 'src', 'hooks', 'prompt-guidance-contract.ts'), 'export {};\n');
|
|
27
|
+
await writeFile(join(root, 'src', 'config', 'generator.ts'), 'export {};\n');
|
|
28
|
+
await writeFile(join(root, 'src', 'cli', 'setup.ts'), 'export {};\n');
|
|
29
|
+
const paths = listPromptSurfacePaths(root);
|
|
30
|
+
assert.deepEqual(paths, [
|
|
31
|
+
'AGENTS.md',
|
|
32
|
+
'docs/guidance-schema.md',
|
|
33
|
+
'docs/prompt-guidance-contract.md',
|
|
34
|
+
'docs/prompt-guidance-fragments/core.md',
|
|
35
|
+
'prompts/executor.md',
|
|
36
|
+
'skills/worker/SKILL.md',
|
|
37
|
+
'src/cli/setup.ts',
|
|
38
|
+
'src/config/generator.ts',
|
|
39
|
+
'src/hooks/prompt-guidance-contract.ts',
|
|
40
|
+
'templates/AGENTS.md',
|
|
41
|
+
]);
|
|
42
|
+
const report = buildPromptInventory(root, '2026-01-01T00:00:00.000Z');
|
|
43
|
+
assert.equal(report.totals.files, paths.length);
|
|
44
|
+
assert.ok(report.totals.lines > 0);
|
|
45
|
+
assert.ok(report.totals.approximateTokens > 0);
|
|
46
|
+
assert.equal(report.totals.absoluteDirectiveCount, 6);
|
|
47
|
+
assert.equal(report.surfaces.find((surface) => surface.path === 'templates/AGENTS.md')?.markers['<!-- OMX:RUNTIME:START -->'], 1);
|
|
48
|
+
assert.equal(report.duplicateFragmentFamilies[0]?.count, 3);
|
|
49
|
+
assert.match(renderPromptInventoryMarkdown(report), /# Prompt Inventory/);
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
await rm(root, { recursive: true, force: true });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=prompt-inventory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-inventory.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/prompt-inventory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AAkCA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAuBtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAyBlE,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,OAAO,2BAA2B,CAAC;CACpE;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AAsOD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAef;AAoOD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,GACL,MAAM,GAAG,IAAI,CAuBf;AA+7CD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAmOnC;AAOD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAGT;AA+CD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3D"}
|
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
import { execFileSync } from "child_process";
|
|
2
|
-
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
import { closeSync, existsSync, openSync, readFileSync, readSync } from "fs";
|
|
3
3
|
import { mkdir, readFile, readdir, writeFile } from "fs/promises";
|
|
4
|
-
import { join, resolve } from "path";
|
|
4
|
+
import { join, relative, resolve } from "path";
|
|
5
5
|
import { pathToFileURL } from "url";
|
|
6
6
|
import { readModeState, readModeStateForSession, updateModeState } from "../modes/base.js";
|
|
7
7
|
import { listActiveSkills, readVisibleSkillActiveState, } from "../state/skill-active.js";
|
|
8
|
-
import { readSubagentSessionSummary } from "../subagents/tracker.js";
|
|
9
|
-
import { resolveCanonicalTeamStateRoot } from "../team/state-root.js";
|
|
10
|
-
import { isSessionStateUsable, readSessionState, readUsableSessionState, reconcileNativeSessionStart, } from "../hooks/session.js";
|
|
8
|
+
import { readSubagentSessionSummary, recordSubagentTurnForSession, } from "../subagents/tracker.js";
|
|
9
|
+
import { resolveCanonicalTeamStateRoot, resolveWorkerNotifyTeamStateRootPath } from "../team/state-root.js";
|
|
10
|
+
import { appendToLog, isSessionStateUsable, readSessionState, readUsableSessionState, reconcileNativeSessionStart, } from "../hooks/session.js";
|
|
11
11
|
import { appendTeamEvent, readTeamLeaderAttention, readTeamManifestV2, readTeamPhase, writeTeamLeaderAttention, writeTeamPhase, } from "../team/state.js";
|
|
12
12
|
import { omxNotepadPath, omxProjectMemoryPath } from "../utils/paths.js";
|
|
13
|
+
import { findGitLayout } from "../utils/git-layout.js";
|
|
13
14
|
import { getStateFilePath, getStatePath } from "../mcp/state-paths.js";
|
|
14
15
|
import { detectKeywords, detectPrimaryKeyword, recordSkillActivation, } from "../hooks/keyword-detector.js";
|
|
15
16
|
import { detectNativeStopStallPattern, loadAutoNudgeConfig, normalizeAutoNudgeSignatureText, resolveEffectiveAutoNudgeResponse, } from "./notify-hook/auto-nudge.js";
|
|
16
17
|
import { buildNativePostToolUseOutput, buildNativePreToolUseOutput, detectMcpTransportFailure, } from "./codex-native-pre-post.js";
|
|
18
|
+
import { handleTeamWorkerPostToolUseSuccess } from "./notify-hook/team-worker-posttooluse.js";
|
|
17
19
|
import { resolveCodexExecutionSurface, } from "./codex-execution-surface.js";
|
|
18
20
|
import { buildNativeHookEvent, } from "../hooks/extensibility/events.js";
|
|
19
21
|
import { dispatchHookEvent } from "../hooks/extensibility/dispatcher.js";
|
|
20
22
|
import { reconcileHudForPromptSubmit } from "../hud/reconcile.js";
|
|
21
23
|
import { onSessionStart as buildWikiSessionStartContext } from "../wiki/lifecycle.js";
|
|
22
24
|
import { readAutoresearchCompletionStatus, readAutoresearchModeState } from "../autoresearch/skill-validation.js";
|
|
23
|
-
import {
|
|
25
|
+
import { readRunState } from "../runtime/run-state.js";
|
|
26
|
+
import { getRunContinuationSnapshot, shouldContinueRun } from "../runtime/run-loop.js";
|
|
24
27
|
import { triagePrompt } from "../hooks/triage-heuristic.js";
|
|
25
28
|
import { readTriageConfig } from "../hooks/triage-config.js";
|
|
26
29
|
import { readTriageState, writeTriageState, shouldSuppressFollowup, promptSignature, } from "../hooks/triage-state.js";
|
|
27
30
|
import { isPendingDeepInterviewQuestionEnforcement, reconcileDeepInterviewQuestionEnforcementFromAnsweredRecords, } from "../question/deep-interview.js";
|
|
28
31
|
import { buildDocumentRefreshAdvisoryOutput, evaluateFinalHandoffDocumentRefresh, isFinalHandoffDocumentRefreshCandidate, } from "../document-refresh/enforcer.js";
|
|
32
|
+
import { buildExecFollowupStopOutput } from "../exec/followup.js";
|
|
29
33
|
const TERMINAL_MODE_PHASES = new Set(["complete", "failed", "cancelled"]);
|
|
30
34
|
const SKILL_STOP_BLOCKERS = new Set(["ralplan"]);
|
|
31
35
|
const TEAM_TERMINAL_TASK_STATUSES = new Set(["completed", "failed"]);
|
|
@@ -49,12 +53,125 @@ const SHORT_FOLLOWUP_PRIORITY_PATTERNS = [
|
|
|
49
53
|
/(?:按照|按|基于)(?:这个|上述|当前)?(?:plan|计划|方案)/u,
|
|
50
54
|
/\b(?:follow up|latest request|this turn|current turn|newest request)\b/i,
|
|
51
55
|
];
|
|
56
|
+
const MAX_SESSION_META_LINE_BYTES = 256 * 1024;
|
|
52
57
|
function safeString(value) {
|
|
53
58
|
return typeof value === "string" ? value : "";
|
|
54
59
|
}
|
|
55
60
|
function safeObject(value) {
|
|
56
61
|
return value && typeof value === "object" ? value : {};
|
|
57
62
|
}
|
|
63
|
+
function readBoundedFirstLineSync(path) {
|
|
64
|
+
const fd = openSync(path, "r");
|
|
65
|
+
try {
|
|
66
|
+
const chunks = [];
|
|
67
|
+
const buffer = Buffer.alloc(Math.min(8192, MAX_SESSION_META_LINE_BYTES));
|
|
68
|
+
let totalBytesRead = 0;
|
|
69
|
+
while (totalBytesRead < MAX_SESSION_META_LINE_BYTES) {
|
|
70
|
+
const bytesToRead = Math.min(buffer.length, MAX_SESSION_META_LINE_BYTES - totalBytesRead);
|
|
71
|
+
const bytesRead = readSync(fd, buffer, 0, bytesToRead, totalBytesRead);
|
|
72
|
+
if (bytesRead <= 0)
|
|
73
|
+
break;
|
|
74
|
+
totalBytesRead += bytesRead;
|
|
75
|
+
const chunk = buffer.subarray(0, bytesRead);
|
|
76
|
+
const newlineOffset = chunk.indexOf(0x0a);
|
|
77
|
+
if (newlineOffset >= 0) {
|
|
78
|
+
chunks.push(Buffer.from(chunk.subarray(0, newlineOffset)));
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
chunks.push(Buffer.from(chunk));
|
|
82
|
+
}
|
|
83
|
+
return Buffer.concat(chunks).toString("utf-8").replace(/\r$/, "");
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
closeSync(fd);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function readNativeSubagentSessionStartMetadata(transcriptPath) {
|
|
90
|
+
const normalizedPath = transcriptPath.trim();
|
|
91
|
+
if (!normalizedPath)
|
|
92
|
+
return null;
|
|
93
|
+
try {
|
|
94
|
+
const firstLine = readBoundedFirstLineSync(normalizedPath).trim();
|
|
95
|
+
if (!firstLine)
|
|
96
|
+
return null;
|
|
97
|
+
const firstRecord = safeObject(JSON.parse(firstLine));
|
|
98
|
+
if (safeString(firstRecord.type) !== "session_meta")
|
|
99
|
+
return null;
|
|
100
|
+
const payload = safeObject(firstRecord.payload);
|
|
101
|
+
const source = safeObject(payload.source);
|
|
102
|
+
const subagent = safeObject(source.subagent);
|
|
103
|
+
const threadSpawn = safeObject(subagent.thread_spawn);
|
|
104
|
+
const parentThreadId = safeString(threadSpawn.parent_thread_id).trim();
|
|
105
|
+
if (!parentThreadId)
|
|
106
|
+
return null;
|
|
107
|
+
const agentNickname = safeString(threadSpawn.agent_nickname ?? payload.agent_nickname).trim();
|
|
108
|
+
const agentRole = safeString(threadSpawn.agent_role ?? payload.agent_role).trim();
|
|
109
|
+
return {
|
|
110
|
+
parentThreadId,
|
|
111
|
+
...(agentNickname ? { agentNickname } : {}),
|
|
112
|
+
...(agentRole ? { agentRole } : {}),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function recordNativeSubagentSessionStart(cwd, canonicalSessionId, childSessionId, metadata, transcriptPath) {
|
|
120
|
+
const trackingSessionIds = [...new Set([
|
|
121
|
+
canonicalSessionId.trim(),
|
|
122
|
+
metadata.parentThreadId.trim(),
|
|
123
|
+
].filter(Boolean))];
|
|
124
|
+
for (const sessionId of trackingSessionIds) {
|
|
125
|
+
await recordSubagentTurnForSession(cwd, {
|
|
126
|
+
sessionId,
|
|
127
|
+
threadId: metadata.parentThreadId,
|
|
128
|
+
}).catch(() => { });
|
|
129
|
+
await recordSubagentTurnForSession(cwd, {
|
|
130
|
+
sessionId,
|
|
131
|
+
threadId: childSessionId,
|
|
132
|
+
mode: metadata.agentRole,
|
|
133
|
+
}).catch(() => { });
|
|
134
|
+
}
|
|
135
|
+
await appendToLog(cwd, {
|
|
136
|
+
event: "subagent_session_start",
|
|
137
|
+
session_id: canonicalSessionId,
|
|
138
|
+
native_owner_session_id: metadata.parentThreadId,
|
|
139
|
+
native_session_id: childSessionId,
|
|
140
|
+
parent_thread_id: metadata.parentThreadId,
|
|
141
|
+
...(metadata.agentNickname ? { agent_nickname: metadata.agentNickname } : {}),
|
|
142
|
+
...(metadata.agentRole ? { agent_role: metadata.agentRole } : {}),
|
|
143
|
+
...(transcriptPath ? { transcript_path: transcriptPath } : {}),
|
|
144
|
+
timestamp: new Date().toISOString(),
|
|
145
|
+
}).catch(() => { });
|
|
146
|
+
}
|
|
147
|
+
async function nativeSubagentSessionStartBelongsToCanonicalSession(cwd, canonicalSessionId, currentSessionState, metadata) {
|
|
148
|
+
const parentThreadId = metadata.parentThreadId.trim();
|
|
149
|
+
if (!parentThreadId)
|
|
150
|
+
return false;
|
|
151
|
+
const currentNativeSessionId = safeString(currentSessionState?.native_session_id).trim();
|
|
152
|
+
if (currentNativeSessionId && currentNativeSessionId === parentThreadId) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
const summary = await readSubagentSessionSummary(cwd, canonicalSessionId).catch(() => null);
|
|
156
|
+
if (!summary)
|
|
157
|
+
return false;
|
|
158
|
+
if (summary.leaderThreadId === parentThreadId)
|
|
159
|
+
return true;
|
|
160
|
+
return summary.allThreadIds.includes(parentThreadId);
|
|
161
|
+
}
|
|
162
|
+
async function recordIgnoredNativeSubagentSessionStart(cwd, canonicalSessionId, childSessionId, metadata, transcriptPath) {
|
|
163
|
+
await appendToLog(cwd, {
|
|
164
|
+
event: "subagent_session_start_ignored",
|
|
165
|
+
reason: "parent_not_in_canonical_session",
|
|
166
|
+
session_id: canonicalSessionId,
|
|
167
|
+
native_session_id: childSessionId,
|
|
168
|
+
parent_thread_id: metadata.parentThreadId,
|
|
169
|
+
...(metadata.agentNickname ? { agent_nickname: metadata.agentNickname } : {}),
|
|
170
|
+
...(metadata.agentRole ? { agent_role: metadata.agentRole } : {}),
|
|
171
|
+
...(transcriptPath ? { transcript_path: transcriptPath } : {}),
|
|
172
|
+
timestamp: new Date().toISOString(),
|
|
173
|
+
}).catch(() => { });
|
|
174
|
+
}
|
|
58
175
|
function safePositiveInteger(value) {
|
|
59
176
|
if (typeof value === "number" && Number.isInteger(value) && value > 0)
|
|
60
177
|
return value;
|
|
@@ -192,6 +309,31 @@ async function readActiveAutoresearchState(cwd, sessionId) {
|
|
|
192
309
|
return null;
|
|
193
310
|
return state;
|
|
194
311
|
}
|
|
312
|
+
function isRalphStartingPhase(state) {
|
|
313
|
+
return safeString(state.current_phase ?? state.currentPhase).trim().toLowerCase() === "starting";
|
|
314
|
+
}
|
|
315
|
+
function shouldHonorCanonicalTerminalRunState(runState, mode) {
|
|
316
|
+
if (!runState)
|
|
317
|
+
return false;
|
|
318
|
+
const runMode = safeString(runState.mode).trim();
|
|
319
|
+
if (runMode && runMode !== mode)
|
|
320
|
+
return false;
|
|
321
|
+
return getRunContinuationSnapshot(runState)?.terminal === true;
|
|
322
|
+
}
|
|
323
|
+
async function readCanonicalTerminalRunStateForStop(cwd, sessionId, mode) {
|
|
324
|
+
if (!safeString(sessionId).trim())
|
|
325
|
+
return null;
|
|
326
|
+
const runState = await readRunState(cwd, sessionId).catch(() => null);
|
|
327
|
+
const runRecord = runState;
|
|
328
|
+
return shouldHonorCanonicalTerminalRunState(runRecord, mode) ? runRecord : null;
|
|
329
|
+
}
|
|
330
|
+
async function isVisibleRalphActiveForSession(cwd, sessionId) {
|
|
331
|
+
const canonicalState = await readVisibleSkillActiveState(cwd, sessionId);
|
|
332
|
+
if (!canonicalState)
|
|
333
|
+
return false;
|
|
334
|
+
return listActiveSkills(canonicalState).some((entry) => (entry.skill === "ralph"
|
|
335
|
+
&& matchesSkillStopContext(entry, canonicalState, sessionId, "")));
|
|
336
|
+
}
|
|
195
337
|
async function readActiveRalphState(stateDir, preferredSessionId) {
|
|
196
338
|
const cwd = resolve(stateDir, "..", "..");
|
|
197
339
|
const [rawSessionInfo, usableSessionInfo] = await Promise.all([
|
|
@@ -213,16 +355,26 @@ async function readActiveRalphState(stateDir, preferredSessionId) {
|
|
|
213
355
|
if (staleCurrentSessionId && sessionId === staleCurrentSessionId) {
|
|
214
356
|
continue;
|
|
215
357
|
}
|
|
216
|
-
|
|
358
|
+
if (await readCanonicalTerminalRunStateForStop(cwd, sessionId, "ralph")) {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const sessionScopedPath = getStateFilePath("ralph-state.json", cwd, sessionId);
|
|
362
|
+
const sessionScoped = await readJsonIfExists(sessionScopedPath);
|
|
363
|
+
if (sessionScoped?.active === true
|
|
364
|
+
&& isRalphStartingPhase(sessionScoped)
|
|
365
|
+
&& !(await isVisibleRalphActiveForSession(cwd, sessionId))) {
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
217
368
|
if (sessionScoped?.active === true && shouldContinueRun(sessionScoped)) {
|
|
218
|
-
return sessionScoped;
|
|
369
|
+
return { state: sessionScoped, path: sessionScopedPath };
|
|
219
370
|
}
|
|
220
371
|
}
|
|
221
372
|
if (sessionCandidates.length > 0)
|
|
222
373
|
return null;
|
|
223
|
-
const
|
|
374
|
+
const directPath = join(stateDir, "ralph-state.json");
|
|
375
|
+
const direct = await readJsonIfExists(directPath);
|
|
224
376
|
if (direct?.active === true && shouldContinueRun(direct)) {
|
|
225
|
-
return direct;
|
|
377
|
+
return { state: direct, path: directPath };
|
|
226
378
|
}
|
|
227
379
|
return null;
|
|
228
380
|
}
|
|
@@ -328,6 +480,22 @@ function tryReadGitValue(cwd, args) {
|
|
|
328
480
|
return null;
|
|
329
481
|
}
|
|
330
482
|
}
|
|
483
|
+
function localExcludeAlreadyIgnoresOmx(cwd) {
|
|
484
|
+
const layout = findGitLayout(cwd);
|
|
485
|
+
if (!layout)
|
|
486
|
+
return false;
|
|
487
|
+
const excludePath = join(layout.gitDir, "info", "exclude");
|
|
488
|
+
try {
|
|
489
|
+
const lines = readFileSync(excludePath, "utf-8")
|
|
490
|
+
.split(/\r?\n/)
|
|
491
|
+
.map((line) => line.trim())
|
|
492
|
+
.filter((line) => line && !line.startsWith("#"));
|
|
493
|
+
return lines.includes(".omx/") || lines.includes(".omx");
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
331
499
|
function isPathIgnoredByGit(cwd, path) {
|
|
332
500
|
try {
|
|
333
501
|
execFileSync("git", ["check-ignore", "-q", path], {
|
|
@@ -345,7 +513,7 @@ async function ensureOmxLocalIgnoreEntry(cwd) {
|
|
|
345
513
|
const repoRoot = tryReadGitValue(cwd, ["rev-parse", "--show-toplevel"]);
|
|
346
514
|
if (!repoRoot)
|
|
347
515
|
return { changed: false };
|
|
348
|
-
if (isPathIgnoredByGit(repoRoot, ".omx/")) {
|
|
516
|
+
if (localExcludeAlreadyIgnoresOmx(repoRoot) || isPathIgnoredByGit(repoRoot, ".omx/")) {
|
|
349
517
|
return { changed: false };
|
|
350
518
|
}
|
|
351
519
|
const excludePathValue = tryReadGitValue(repoRoot, ["rev-parse", "--git-path", "info/exclude"]);
|
|
@@ -472,10 +640,10 @@ function resolveExecutionEnvironment(cwd, options = {}) {
|
|
|
472
640
|
transport: executionSurface.transport,
|
|
473
641
|
surface: "attached tmux runtime - tmux",
|
|
474
642
|
tmuxWorkflowGuidance: "omx team, omx hud, and omx question are directly usable in this session",
|
|
475
|
-
questionGuidance: "visible renderer available from the current pane",
|
|
643
|
+
questionGuidance: "visible temporary renderer available from the current pane; primary success JSON is answers[]",
|
|
476
644
|
teamRuntimeInstruction: "Use the durable OMX team runtime via `omx team ...` for coordinated execution; do not replace it with in-process fanout.",
|
|
477
645
|
teamHelpInstruction: "If you need runtime syntax, run `omx team --help` yourself.",
|
|
478
|
-
deepInterviewInstruction: "Deep-interview must ask each interview round via `omx question`; do not fall back to `request_user_input` or plain-text questioning. This session is already attached to tmux, so `omx question` can open its
|
|
646
|
+
deepInterviewInstruction: "Deep-interview must ask each interview round via `omx question`; do not fall back to `request_user_input` or plain-text questioning. This session is already attached to tmux, so `omx question` can open its temporary renderer directly over the leader pane. After starting `omx question` in a background terminal, wait for that terminal to finish and read the JSON answer before continuing the interview. Prefer `answers[0].answer` / `answers[]`; use legacy `answer` only as fallback. Deep-interview remains one question per round, so do not batch multiple interview rounds into one `questions[]` form. Stop remains blocked while a deep-interview question obligation is pending.",
|
|
479
647
|
leaderPaneHint,
|
|
480
648
|
};
|
|
481
649
|
}
|
|
@@ -717,43 +885,16 @@ function parseTeamWorkerEnv(rawValue) {
|
|
|
717
885
|
workerName: match[2] || "",
|
|
718
886
|
};
|
|
719
887
|
}
|
|
720
|
-
async function readTeamStateRootFromJson(path) {
|
|
721
|
-
const parsed = await readJsonIfExists(path);
|
|
722
|
-
const value = safeString(parsed?.team_state_root).trim();
|
|
723
|
-
return value || null;
|
|
724
|
-
}
|
|
725
888
|
async function resolveTeamStateDirForWorkerContext(cwd, workerContext) {
|
|
726
|
-
|
|
727
|
-
if (explicitStateRoot) {
|
|
728
|
-
return resolve(cwd, explicitStateRoot);
|
|
729
|
-
}
|
|
730
|
-
const leaderCwd = safeString(process.env.OMX_TEAM_LEADER_CWD).trim();
|
|
731
|
-
const candidateStateDirs = [
|
|
732
|
-
...(leaderCwd ? [join(resolve(leaderCwd), ".omx", "state")] : []),
|
|
733
|
-
join(cwd, ".omx", "state"),
|
|
734
|
-
];
|
|
735
|
-
for (const candidateStateDir of candidateStateDirs) {
|
|
736
|
-
const teamRoot = join(candidateStateDir, "team", workerContext.teamName);
|
|
737
|
-
if (!existsSync(teamRoot))
|
|
738
|
-
continue;
|
|
739
|
-
const identityRoot = await readTeamStateRootFromJson(join(teamRoot, "workers", workerContext.workerName, "identity.json"));
|
|
740
|
-
if (identityRoot)
|
|
741
|
-
return resolve(cwd, identityRoot);
|
|
742
|
-
const manifestRoot = await readTeamStateRootFromJson(join(teamRoot, "manifest.v2.json"));
|
|
743
|
-
if (manifestRoot)
|
|
744
|
-
return resolve(cwd, manifestRoot);
|
|
745
|
-
const configRoot = await readTeamStateRootFromJson(join(teamRoot, "config.json"));
|
|
746
|
-
if (configRoot)
|
|
747
|
-
return resolve(cwd, configRoot);
|
|
748
|
-
return candidateStateDir;
|
|
749
|
-
}
|
|
750
|
-
return join(cwd, ".omx", "state");
|
|
889
|
+
return resolveWorkerNotifyTeamStateRootPath(cwd, workerContext, process.env);
|
|
751
890
|
}
|
|
752
891
|
async function buildTeamWorkerStopOutput(cwd) {
|
|
753
892
|
const workerContext = parseTeamWorkerEnv(safeString(process.env.OMX_TEAM_WORKER));
|
|
754
893
|
if (!workerContext)
|
|
755
894
|
return null;
|
|
756
895
|
const stateDir = await resolveTeamStateDirForWorkerContext(cwd, workerContext);
|
|
896
|
+
if (!stateDir)
|
|
897
|
+
return null;
|
|
757
898
|
const workerRoot = join(stateDir, "team", workerContext.teamName, "workers", workerContext.workerName);
|
|
758
899
|
const [identity, status] = await Promise.all([
|
|
759
900
|
readJsonIfExists(join(workerRoot, "identity.json")),
|
|
@@ -834,6 +975,9 @@ async function readTeamModeStateForStop(cwd, sessionId) {
|
|
|
834
975
|
return rootState;
|
|
835
976
|
}
|
|
836
977
|
async function buildTeamStopOutput(cwd, sessionId) {
|
|
978
|
+
if (await readCanonicalTerminalRunStateForStop(cwd, sessionId, "team")) {
|
|
979
|
+
return null;
|
|
980
|
+
}
|
|
837
981
|
const teamState = await readTeamModeStateForStop(cwd, sessionId);
|
|
838
982
|
if (teamState?.active !== true)
|
|
839
983
|
return null;
|
|
@@ -1020,7 +1164,7 @@ async function buildDeepInterviewQuestionStopOutput(cwd, sessionId, threadId) {
|
|
|
1020
1164
|
const obligationId = safeString(questionEnforcement.obligation_id).trim();
|
|
1021
1165
|
if (!obligationId)
|
|
1022
1166
|
return null;
|
|
1023
|
-
const systemMessage = `OMX deep-interview is still active (phase: ${phase}) and requires a structured question via omx question before stopping.`;
|
|
1167
|
+
const systemMessage = `OMX deep-interview is still active (phase: ${phase}) and requires a structured question via omx question before stopping; read the returned answers[] JSON before continuing.`;
|
|
1024
1168
|
return {
|
|
1025
1169
|
obligationId,
|
|
1026
1170
|
output: {
|
|
@@ -1061,6 +1205,12 @@ function buildRepeatableStopSignature(payload, kind, detail = "", canonicalSessi
|
|
|
1061
1205
|
normalizedDetail || "no-detail",
|
|
1062
1206
|
].join("|");
|
|
1063
1207
|
}
|
|
1208
|
+
function formatStopStatePath(cwd, statePath) {
|
|
1209
|
+
const relativePath = relative(cwd, statePath);
|
|
1210
|
+
if (!relativePath || relativePath.startsWith(".."))
|
|
1211
|
+
return statePath;
|
|
1212
|
+
return relativePath.replace(/\\/g, "/");
|
|
1213
|
+
}
|
|
1064
1214
|
function readNativeStopSessionKey(payload, canonicalSessionId) {
|
|
1065
1215
|
return resolveRepeatableStopSessionId(payload, canonicalSessionId) || readPayloadThreadId(payload) || "global";
|
|
1066
1216
|
}
|
|
@@ -1271,6 +1421,9 @@ async function buildStopHookOutput(payload, cwd, stateDir) {
|
|
|
1271
1421
|
const sessionId = readPayloadSessionId(payload);
|
|
1272
1422
|
const canonicalSessionId = await resolveInternalSessionIdForPayload(cwd, sessionId);
|
|
1273
1423
|
const threadId = readPayloadThreadId(payload);
|
|
1424
|
+
const execFollowupOutput = await buildExecFollowupStopOutput(cwd, canonicalSessionId);
|
|
1425
|
+
if (execFollowupOutput)
|
|
1426
|
+
return execFollowupOutput;
|
|
1274
1427
|
const ralphState = await readActiveRalphState(stateDir, canonicalSessionId);
|
|
1275
1428
|
if (!ralphState) {
|
|
1276
1429
|
const autoresearchState = await readActiveAutoresearchState(cwd, canonicalSessionId);
|
|
@@ -1315,7 +1468,9 @@ async function buildStopHookOutput(payload, cwd, stateDir) {
|
|
|
1315
1468
|
if (deepInterviewQuestionOutput) {
|
|
1316
1469
|
return await returnPersistentStopBlock(payload, stateDir, "deep-interview-question-stop", deepInterviewQuestionOutput.obligationId, deepInterviewQuestionOutput.output, canonicalSessionId);
|
|
1317
1470
|
}
|
|
1318
|
-
const canonicalTeam = await
|
|
1471
|
+
const canonicalTeam = await readCanonicalTerminalRunStateForStop(cwd, canonicalSessionId, "team")
|
|
1472
|
+
? null
|
|
1473
|
+
: await findCanonicalActiveTeamForSession(cwd, canonicalSessionId);
|
|
1319
1474
|
if (canonicalTeam) {
|
|
1320
1475
|
const canonicalTeamOutput = buildTeamStopOutputForPhase(canonicalTeam.teamName, canonicalTeam.phase);
|
|
1321
1476
|
const repeatedCanonicalTeamOutput = await returnPersistentStopBlock(payload, stateDir, "team-stop", `${canonicalTeam.teamName}|${canonicalTeam.phase}`, canonicalTeamOutput, canonicalSessionId);
|
|
@@ -1348,9 +1503,10 @@ async function buildStopHookOutput(payload, cwd, stateDir) {
|
|
|
1348
1503
|
}
|
|
1349
1504
|
return null;
|
|
1350
1505
|
}
|
|
1351
|
-
const currentPhase = safeString(ralphState
|
|
1506
|
+
const currentPhase = safeString(ralphState.state.current_phase).trim() || "executing";
|
|
1507
|
+
const blockingPath = formatStopStatePath(cwd, ralphState.path);
|
|
1352
1508
|
const stopReason = `ralph_${currentPhase}`;
|
|
1353
|
-
const systemMessage = `OMX Ralph is still active (phase: ${currentPhase}); continue the task and gather fresh verification evidence before stopping.`;
|
|
1509
|
+
const systemMessage = `OMX Ralph is still active (phase: ${currentPhase}; state: ${blockingPath}); continue the task and gather fresh verification evidence before stopping.`;
|
|
1354
1510
|
return await returnPersistentStopBlock(payload, stateDir, "ralph-stop", currentPhase, {
|
|
1355
1511
|
decision: "block",
|
|
1356
1512
|
reason: systemMessage,
|
|
@@ -1372,12 +1528,30 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
1372
1528
|
const currentSessionState = await readUsableSessionState(cwd);
|
|
1373
1529
|
let canonicalSessionId = safeString(currentSessionState?.session_id).trim();
|
|
1374
1530
|
let resolvedNativeSessionId = nativeSessionId;
|
|
1531
|
+
let skipCanonicalSessionStartContext = false;
|
|
1375
1532
|
if (hookEventName === "SessionStart" && nativeSessionId) {
|
|
1376
|
-
const
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1533
|
+
const transcriptPath = safeString(payload.transcript_path ?? payload.transcriptPath).trim();
|
|
1534
|
+
const subagentSessionStart = readNativeSubagentSessionStartMetadata(transcriptPath);
|
|
1535
|
+
if (subagentSessionStart && canonicalSessionId) {
|
|
1536
|
+
const belongsToCanonicalSession = await nativeSubagentSessionStartBelongsToCanonicalSession(cwd, canonicalSessionId, currentSessionState, subagentSessionStart);
|
|
1537
|
+
if (belongsToCanonicalSession) {
|
|
1538
|
+
resolvedNativeSessionId = nativeSessionId;
|
|
1539
|
+
await recordNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
1540
|
+
}
|
|
1541
|
+
else {
|
|
1542
|
+
skipCanonicalSessionStartContext = true;
|
|
1543
|
+
resolvedNativeSessionId =
|
|
1544
|
+
safeString(currentSessionState?.native_session_id).trim() || nativeSessionId;
|
|
1545
|
+
await recordIgnoredNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
else {
|
|
1549
|
+
const sessionState = await reconcileNativeSessionStart(cwd, nativeSessionId, {
|
|
1550
|
+
pid: options.sessionOwnerPid ?? resolveSessionOwnerPid(payload),
|
|
1551
|
+
});
|
|
1552
|
+
canonicalSessionId = safeString(sessionState.session_id).trim();
|
|
1553
|
+
resolvedNativeSessionId = safeString(sessionState.native_session_id).trim() || nativeSessionId;
|
|
1554
|
+
}
|
|
1381
1555
|
}
|
|
1382
1556
|
else if (!canonicalSessionId) {
|
|
1383
1557
|
canonicalSessionId = safeString(currentSessionState?.session_id).trim();
|
|
@@ -1484,7 +1658,7 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
1484
1658
|
const reconcileHudForPromptSubmitFn = options.reconcileHudForPromptSubmitFn ?? reconcileHudForPromptSubmit;
|
|
1485
1659
|
await reconcileHudForPromptSubmitFn(cwd, { sessionId: canonicalSessionId || sessionIdForState || undefined }).catch(() => { });
|
|
1486
1660
|
}
|
|
1487
|
-
if (omxEventName) {
|
|
1661
|
+
if (omxEventName && !skipCanonicalSessionStartContext) {
|
|
1488
1662
|
const baseContext = buildBaseContext(cwd, payload, hookEventName, canonicalSessionId);
|
|
1489
1663
|
if (resolvedNativeSessionId) {
|
|
1490
1664
|
baseContext.native_session_id = resolvedNativeSessionId;
|
|
@@ -1501,7 +1675,7 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
1501
1675
|
});
|
|
1502
1676
|
await dispatchHookEvent(event, { cwd });
|
|
1503
1677
|
}
|
|
1504
|
-
if (hookEventName === "SessionStart" || hookEventName === "UserPromptSubmit") {
|
|
1678
|
+
if ((hookEventName === "SessionStart" && !skipCanonicalSessionStartContext) || hookEventName === "UserPromptSubmit") {
|
|
1505
1679
|
const additionalContext = hookEventName === "SessionStart"
|
|
1506
1680
|
? await buildSessionStartContext(cwd, canonicalSessionId || nativeSessionId, {
|
|
1507
1681
|
hookEventName,
|
|
@@ -1527,6 +1701,7 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
1527
1701
|
await markTeamTransportFailure(cwd, payload);
|
|
1528
1702
|
}
|
|
1529
1703
|
outputJson = buildNativePostToolUseOutput(payload);
|
|
1704
|
+
await handleTeamWorkerPostToolUseSuccess(payload, cwd);
|
|
1530
1705
|
}
|
|
1531
1706
|
else if (hookEventName === "Stop") {
|
|
1532
1707
|
outputJson = await buildStopHookOutput(payload, cwd, stateDir);
|
|
@@ -1604,6 +1779,9 @@ export async function runCodexNativeHookCli() {
|
|
|
1604
1779
|
if (result.outputJson) {
|
|
1605
1780
|
writeNativeHookJsonStdout(result.outputJson);
|
|
1606
1781
|
}
|
|
1782
|
+
else if (result.hookEventName === "Stop") {
|
|
1783
|
+
writeNativeHookJsonStdout({});
|
|
1784
|
+
}
|
|
1607
1785
|
}
|
|
1608
1786
|
catch (error) {
|
|
1609
1787
|
if (readHookEventName(payload) !== "Stop") {
|