oh-my-codex 0.11.13 → 0.12.0
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 +27 -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 +22 -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 +217 -4
- package/dist/cli/__tests__/index.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 +4 -2
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +238 -30
- 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__/notify-fallback-watcher.test.js +236 -2
- 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/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 +720 -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 +594 -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 +262 -18
- 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 +422 -12
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +126 -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 +407 -190
- 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 +39 -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 +2 -2
- 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 +931 -0
- package/src/scripts/codex-native-hook.ts +721 -0
- package/src/scripts/codex-native-pre-post.ts +161 -0
- package/src/scripts/notify-fallback-watcher.ts +318 -26
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-native-hook.test.js","sourceRoot":"","sources":["../../../src/scripts/__tests__/codex-native-hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type SkillActiveState } from "../hooks/keyword-detector.js";
|
|
2
|
+
type CodexHookEventName = "SessionStart" | "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop";
|
|
3
|
+
type CodexHookPayload = Record<string, unknown>;
|
|
4
|
+
interface NativeHookDispatchOptions {
|
|
5
|
+
cwd?: string;
|
|
6
|
+
sessionOwnerPid?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface NativeHookDispatchResult {
|
|
9
|
+
hookEventName: CodexHookEventName | null;
|
|
10
|
+
omxEventName: string | null;
|
|
11
|
+
skillState: SkillActiveState | null;
|
|
12
|
+
outputJson: Record<string, unknown> | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function mapCodexHookEventToOmxEvent(hookEventName: CodexHookEventName | null): string | null;
|
|
15
|
+
export declare function resolveSessionOwnerPidFromAncestry(startPid: number, options?: {
|
|
16
|
+
readParentPid?: (pid: number) => number | null;
|
|
17
|
+
readProcessCommand?: (pid: number) => string;
|
|
18
|
+
}): number | null;
|
|
19
|
+
export declare function dispatchCodexNativeHook(payload: CodexHookPayload, options?: NativeHookDispatchOptions): Promise<NativeHookDispatchResult>;
|
|
20
|
+
export declare function runCodexNativeHookCli(): Promise<void>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=codex-native-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAiBtC,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;CAC1B;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;AA0CD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAef;AA4JD,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;AAkUD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAyEnC;AAWD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D"}
|
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
import { execFileSync } from "child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "fs";
|
|
3
|
+
import { mkdir, readFile, readdir, writeFile } from "fs/promises";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { readModeState } from "../modes/base.js";
|
|
6
|
+
import { getReadScopedStateDirs } from "../mcp/state-paths.js";
|
|
7
|
+
import { readSubagentSessionSummary } from "../subagents/tracker.js";
|
|
8
|
+
import { resolveCanonicalTeamStateRoot } from "../team/state-root.js";
|
|
9
|
+
import { readTeamManifestV2, readTeamPhase } from "../team/state.js";
|
|
10
|
+
import { omxNotepadPath, omxProjectMemoryPath } from "../utils/paths.js";
|
|
11
|
+
import { detectPrimaryKeyword, recordSkillActivation, } from "../hooks/keyword-detector.js";
|
|
12
|
+
import { detectStallPattern, isDeepInterviewStateActive, loadAutoNudgeConfig, } from "./notify-hook/auto-nudge.js";
|
|
13
|
+
import { buildNativePostToolUseOutput, buildNativePreToolUseOutput, } from "./codex-native-pre-post.js";
|
|
14
|
+
import { buildNativeHookEvent, } from "../hooks/extensibility/events.js";
|
|
15
|
+
import { dispatchHookEvent } from "../hooks/extensibility/dispatcher.js";
|
|
16
|
+
import { writeSessionStart } from "../hooks/session.js";
|
|
17
|
+
const TERMINAL_RALPH_PHASES = new Set(["complete", "failed", "cancelled"]);
|
|
18
|
+
const TERMINAL_MODE_PHASES = new Set(["complete", "failed", "cancelled"]);
|
|
19
|
+
const SKILL_STOP_BLOCKERS = new Set(["ralplan", "deep-interview"]);
|
|
20
|
+
function safeString(value) {
|
|
21
|
+
return typeof value === "string" ? value : "";
|
|
22
|
+
}
|
|
23
|
+
function safeObject(value) {
|
|
24
|
+
return value && typeof value === "object" ? value : {};
|
|
25
|
+
}
|
|
26
|
+
function safePositiveInteger(value) {
|
|
27
|
+
if (typeof value === "number" && Number.isInteger(value) && value > 0)
|
|
28
|
+
return value;
|
|
29
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
30
|
+
const parsed = Number.parseInt(value.trim(), 10);
|
|
31
|
+
if (Number.isInteger(parsed) && parsed > 0)
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function readHookEventName(payload) {
|
|
37
|
+
const raw = safeString(payload.hook_event_name
|
|
38
|
+
?? payload.hookEventName
|
|
39
|
+
?? payload.event
|
|
40
|
+
?? payload.name).trim();
|
|
41
|
+
if (raw === "SessionStart"
|
|
42
|
+
|| raw === "PreToolUse"
|
|
43
|
+
|| raw === "PostToolUse"
|
|
44
|
+
|| raw === "UserPromptSubmit"
|
|
45
|
+
|| raw === "Stop") {
|
|
46
|
+
return raw;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function mapCodexHookEventToOmxEvent(hookEventName) {
|
|
51
|
+
switch (hookEventName) {
|
|
52
|
+
case "SessionStart":
|
|
53
|
+
return "session-start";
|
|
54
|
+
case "PreToolUse":
|
|
55
|
+
return "pre-tool-use";
|
|
56
|
+
case "PostToolUse":
|
|
57
|
+
return "post-tool-use";
|
|
58
|
+
case "UserPromptSubmit":
|
|
59
|
+
return "keyword-detector";
|
|
60
|
+
case "Stop":
|
|
61
|
+
return "stop";
|
|
62
|
+
default:
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function readPromptText(payload) {
|
|
67
|
+
const candidates = [
|
|
68
|
+
payload.prompt,
|
|
69
|
+
payload.input,
|
|
70
|
+
payload.user_prompt,
|
|
71
|
+
payload.userPrompt,
|
|
72
|
+
payload.text,
|
|
73
|
+
];
|
|
74
|
+
for (const candidate of candidates) {
|
|
75
|
+
const value = safeString(candidate).trim();
|
|
76
|
+
if (value)
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
return "";
|
|
80
|
+
}
|
|
81
|
+
function buildBaseContext(cwd, payload, hookEventName) {
|
|
82
|
+
return {
|
|
83
|
+
cwd,
|
|
84
|
+
project_path: cwd,
|
|
85
|
+
transcript_path: safeString(payload.transcript_path ?? payload.transcriptPath) || null,
|
|
86
|
+
source: safeString(payload.source),
|
|
87
|
+
payload,
|
|
88
|
+
...(hookEventName === "UserPromptSubmit"
|
|
89
|
+
? { prompt: readPromptText(payload) }
|
|
90
|
+
: {}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async function readJsonIfExists(path) {
|
|
94
|
+
if (!existsSync(path))
|
|
95
|
+
return null;
|
|
96
|
+
try {
|
|
97
|
+
return JSON.parse(await readFile(path, "utf-8"));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function readScopedJsonState(fileName, cwd, sessionId) {
|
|
104
|
+
const dirs = await getReadScopedStateDirs(cwd, sessionId);
|
|
105
|
+
for (const dir of dirs) {
|
|
106
|
+
const candidate = await readJsonIfExists(join(dir, fileName));
|
|
107
|
+
if (candidate)
|
|
108
|
+
return candidate;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
function isNonTerminalPhase(value) {
|
|
113
|
+
const phase = safeString(value).trim().toLowerCase();
|
|
114
|
+
return phase !== "" && !TERMINAL_MODE_PHASES.has(phase);
|
|
115
|
+
}
|
|
116
|
+
function formatPhase(value, fallback = "active") {
|
|
117
|
+
const phase = safeString(value).trim();
|
|
118
|
+
return phase || fallback;
|
|
119
|
+
}
|
|
120
|
+
async function readActiveRalphState(stateDir) {
|
|
121
|
+
const direct = await readJsonIfExists(join(stateDir, "ralph-state.json"));
|
|
122
|
+
if (direct?.active === true && !TERMINAL_RALPH_PHASES.has(safeString(direct.current_phase).trim().toLowerCase())) {
|
|
123
|
+
return direct;
|
|
124
|
+
}
|
|
125
|
+
const sessionInfo = await readJsonIfExists(join(stateDir, "session.json"));
|
|
126
|
+
const currentOmxSessionId = safeString(sessionInfo?.session_id).trim();
|
|
127
|
+
if (!currentOmxSessionId)
|
|
128
|
+
return null;
|
|
129
|
+
const sessionScoped = await readJsonIfExists(join(stateDir, "sessions", currentOmxSessionId, "ralph-state.json"));
|
|
130
|
+
if (sessionScoped?.active === true
|
|
131
|
+
&& !TERMINAL_RALPH_PHASES.has(safeString(sessionScoped.current_phase).trim().toLowerCase())) {
|
|
132
|
+
return sessionScoped;
|
|
133
|
+
}
|
|
134
|
+
const sessionsRoot = join(stateDir, "sessions");
|
|
135
|
+
if (!existsSync(sessionsRoot))
|
|
136
|
+
return null;
|
|
137
|
+
const entries = await readdir(sessionsRoot, { withFileTypes: true }).catch(() => []);
|
|
138
|
+
for (const entry of entries) {
|
|
139
|
+
if (!entry.isDirectory())
|
|
140
|
+
continue;
|
|
141
|
+
const candidate = await readJsonIfExists(join(sessionsRoot, entry.name, "ralph-state.json"));
|
|
142
|
+
if (candidate?.active === true
|
|
143
|
+
&& !TERMINAL_RALPH_PHASES.has(safeString(candidate.current_phase).trim().toLowerCase())) {
|
|
144
|
+
return candidate;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
function readParentPid(pid) {
|
|
150
|
+
try {
|
|
151
|
+
if (process.platform === "linux") {
|
|
152
|
+
const stat = readFileSync(`/proc/${pid}/stat`, "utf-8");
|
|
153
|
+
const commandEnd = stat.lastIndexOf(")");
|
|
154
|
+
if (commandEnd === -1)
|
|
155
|
+
return null;
|
|
156
|
+
const remainder = stat.slice(commandEnd + 1).trim();
|
|
157
|
+
const fields = remainder.split(/\s+/);
|
|
158
|
+
const ppid = Number(fields[1]);
|
|
159
|
+
return Number.isFinite(ppid) && ppid > 0 ? ppid : null;
|
|
160
|
+
}
|
|
161
|
+
const raw = execFileSync("ps", ["-o", "ppid=", "-p", String(pid)], {
|
|
162
|
+
encoding: "utf-8",
|
|
163
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
164
|
+
}).trim();
|
|
165
|
+
const ppid = Number.parseInt(raw, 10);
|
|
166
|
+
return Number.isFinite(ppid) && ppid > 0 ? ppid : null;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function readProcessCommand(pid) {
|
|
173
|
+
try {
|
|
174
|
+
if (process.platform === "linux") {
|
|
175
|
+
return readFileSync(`/proc/${pid}/cmdline`, "utf-8")
|
|
176
|
+
.replace(/\u0000+/g, " ")
|
|
177
|
+
.trim();
|
|
178
|
+
}
|
|
179
|
+
return execFileSync("ps", ["-o", "command=", "-p", String(pid)], {
|
|
180
|
+
encoding: "utf-8",
|
|
181
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
182
|
+
}).trim();
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return "";
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function looksLikeShellCommand(command) {
|
|
189
|
+
return /(^|[\/\s])(bash|zsh|sh|dash|fish|ksh)(\s|$)/i.test(command);
|
|
190
|
+
}
|
|
191
|
+
function looksLikeCodexCommand(command) {
|
|
192
|
+
if (/codex-native-hook(?:\.js)?/i.test(command))
|
|
193
|
+
return false;
|
|
194
|
+
return /\bcodex(?:\.js)?\b/i.test(command);
|
|
195
|
+
}
|
|
196
|
+
export function resolveSessionOwnerPidFromAncestry(startPid, options = {}) {
|
|
197
|
+
const readParent = options.readParentPid ?? readParentPid;
|
|
198
|
+
const readCommand = options.readProcessCommand ?? readProcessCommand;
|
|
199
|
+
const lineage = [];
|
|
200
|
+
let currentPid = startPid;
|
|
201
|
+
for (let i = 0; i < 6 && Number.isInteger(currentPid) && currentPid > 1; i += 1) {
|
|
202
|
+
const command = readCommand(currentPid);
|
|
203
|
+
lineage.push({ pid: currentPid, command });
|
|
204
|
+
const nextPid = readParent(currentPid);
|
|
205
|
+
if (!nextPid || nextPid === currentPid)
|
|
206
|
+
break;
|
|
207
|
+
currentPid = nextPid;
|
|
208
|
+
}
|
|
209
|
+
const codexAncestor = lineage.find((entry) => looksLikeCodexCommand(entry.command));
|
|
210
|
+
if (codexAncestor)
|
|
211
|
+
return codexAncestor.pid;
|
|
212
|
+
if (lineage.length >= 2 && looksLikeShellCommand(lineage[0]?.command || "")) {
|
|
213
|
+
return lineage[1].pid;
|
|
214
|
+
}
|
|
215
|
+
if (lineage.length >= 1)
|
|
216
|
+
return lineage[0].pid;
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
function resolveSessionOwnerPid(payload) {
|
|
220
|
+
const explicitPid = [
|
|
221
|
+
payload.session_pid,
|
|
222
|
+
payload.sessionPid,
|
|
223
|
+
payload.codex_pid,
|
|
224
|
+
payload.codexPid,
|
|
225
|
+
payload.parent_pid,
|
|
226
|
+
payload.parentPid,
|
|
227
|
+
]
|
|
228
|
+
.map(safePositiveInteger)
|
|
229
|
+
.find((value) => value !== null);
|
|
230
|
+
if (explicitPid)
|
|
231
|
+
return explicitPid;
|
|
232
|
+
const resolved = resolveSessionOwnerPidFromAncestry(process.ppid);
|
|
233
|
+
if (resolved)
|
|
234
|
+
return resolved;
|
|
235
|
+
return process.pid;
|
|
236
|
+
}
|
|
237
|
+
async function ensureOmxGitignoreEntry(cwd) {
|
|
238
|
+
let repoRoot = "";
|
|
239
|
+
try {
|
|
240
|
+
repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], {
|
|
241
|
+
cwd,
|
|
242
|
+
encoding: "utf-8",
|
|
243
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
244
|
+
windowsHide: true,
|
|
245
|
+
}).trim();
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return { changed: false };
|
|
249
|
+
}
|
|
250
|
+
if (!repoRoot)
|
|
251
|
+
return { changed: false };
|
|
252
|
+
const gitignorePath = join(repoRoot, ".gitignore");
|
|
253
|
+
const existing = existsSync(gitignorePath)
|
|
254
|
+
? await readFile(gitignorePath, "utf-8")
|
|
255
|
+
: "";
|
|
256
|
+
const lines = existing.split(/\r?\n/).map((line) => line.trim());
|
|
257
|
+
if (lines.includes(".omx/")) {
|
|
258
|
+
return { changed: false, gitignorePath };
|
|
259
|
+
}
|
|
260
|
+
const next = `${existing}${existing.endsWith("\n") || existing.length === 0 ? "" : "\n"}.omx/\n`;
|
|
261
|
+
await writeFile(gitignorePath, next);
|
|
262
|
+
return { changed: true, gitignorePath };
|
|
263
|
+
}
|
|
264
|
+
async function buildSessionStartContext(cwd, sessionId) {
|
|
265
|
+
const sections = [
|
|
266
|
+
"OMX native SessionStart detected. Load workspace conventions from AGENTS.md, restore relevant .omx runtime/project memory context, and continue from existing mode state before making changes.",
|
|
267
|
+
];
|
|
268
|
+
const gitignoreResult = await ensureOmxGitignoreEntry(cwd);
|
|
269
|
+
if (gitignoreResult.changed) {
|
|
270
|
+
sections.push(`Added .omx/ to ${gitignoreResult.gitignorePath} to keep local OMX state out of source control.`);
|
|
271
|
+
}
|
|
272
|
+
const modeSummaries = [];
|
|
273
|
+
for (const mode of ["ralph", "autopilot", "ultrawork", "ultraqa", "ralplan", "deep-interview", "team"]) {
|
|
274
|
+
const state = await readModeState(mode, cwd);
|
|
275
|
+
if (state?.active !== true || !isNonTerminalPhase(state.current_phase))
|
|
276
|
+
continue;
|
|
277
|
+
if (mode === "team") {
|
|
278
|
+
const teamName = safeString(state.team_name).trim();
|
|
279
|
+
if (teamName) {
|
|
280
|
+
const phase = await readTeamPhase(teamName, cwd);
|
|
281
|
+
const canonicalPhase = phase?.current_phase ?? state.current_phase;
|
|
282
|
+
if (isNonTerminalPhase(canonicalPhase)) {
|
|
283
|
+
modeSummaries.push(`- team (${teamName}) phase: ${formatPhase(canonicalPhase)}`);
|
|
284
|
+
}
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
modeSummaries.push(`- ${mode} phase: ${formatPhase(state.current_phase)}`);
|
|
289
|
+
}
|
|
290
|
+
if (modeSummaries.length > 0) {
|
|
291
|
+
sections.push(["[Active OMX modes]", ...modeSummaries].join("\n"));
|
|
292
|
+
}
|
|
293
|
+
const projectMemory = await readJsonIfExists(omxProjectMemoryPath(cwd));
|
|
294
|
+
if (projectMemory) {
|
|
295
|
+
const directives = Array.isArray(projectMemory.directives) ? projectMemory.directives : [];
|
|
296
|
+
const notes = Array.isArray(projectMemory.notes) ? projectMemory.notes : [];
|
|
297
|
+
const techStack = safeString(projectMemory.techStack).trim();
|
|
298
|
+
const conventions = safeString(projectMemory.conventions).trim();
|
|
299
|
+
const build = safeString(projectMemory.build).trim();
|
|
300
|
+
const summary = [];
|
|
301
|
+
if (techStack)
|
|
302
|
+
summary.push(`- stack: ${techStack}`);
|
|
303
|
+
if (conventions)
|
|
304
|
+
summary.push(`- conventions: ${conventions}`);
|
|
305
|
+
if (build)
|
|
306
|
+
summary.push(`- build: ${build}`);
|
|
307
|
+
if (directives.length > 0) {
|
|
308
|
+
const firstDirective = directives[0];
|
|
309
|
+
const directive = safeString(firstDirective.directive).trim();
|
|
310
|
+
if (directive)
|
|
311
|
+
summary.push(`- directive: ${directive}`);
|
|
312
|
+
}
|
|
313
|
+
if (notes.length > 0) {
|
|
314
|
+
const firstNote = notes[0];
|
|
315
|
+
const note = safeString(firstNote.content).trim();
|
|
316
|
+
if (note)
|
|
317
|
+
summary.push(`- note: ${note}`);
|
|
318
|
+
}
|
|
319
|
+
if (summary.length > 0) {
|
|
320
|
+
sections.push(["[Project memory]", ...summary].join("\n"));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (existsSync(omxNotepadPath(cwd))) {
|
|
324
|
+
try {
|
|
325
|
+
const notepad = await readFile(omxNotepadPath(cwd), "utf-8");
|
|
326
|
+
const compact = notepad.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).slice(0, 3).join(" ");
|
|
327
|
+
if (compact) {
|
|
328
|
+
sections.push(`[Notepad]\n- ${compact.slice(0, 220)}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// best effort only
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const subagentSummary = await readSubagentSessionSummary(cwd, sessionId).catch(() => null);
|
|
336
|
+
if (subagentSummary && subagentSummary.activeSubagentThreadIds.length > 0) {
|
|
337
|
+
sections.push(`[Subagents]\n- active subagent threads: ${subagentSummary.activeSubagentThreadIds.length}`);
|
|
338
|
+
}
|
|
339
|
+
return sections.join("\n\n");
|
|
340
|
+
}
|
|
341
|
+
function buildAdditionalContextMessage(prompt) {
|
|
342
|
+
if (!prompt)
|
|
343
|
+
return null;
|
|
344
|
+
const match = detectPrimaryKeyword(prompt);
|
|
345
|
+
if (!match)
|
|
346
|
+
return null;
|
|
347
|
+
return `OMX native UserPromptSubmit detected workflow keyword "${match.keyword}" -> ${match.skill}. Follow AGENTS.md routing and preserve ralplan/ralph execution gates.`;
|
|
348
|
+
}
|
|
349
|
+
function isStopExempt(payload) {
|
|
350
|
+
const candidates = [
|
|
351
|
+
payload.stop_reason,
|
|
352
|
+
payload.stopReason,
|
|
353
|
+
payload.reason,
|
|
354
|
+
payload.exit_reason,
|
|
355
|
+
payload.exitReason,
|
|
356
|
+
]
|
|
357
|
+
.map((value) => safeString(value).toLowerCase())
|
|
358
|
+
.filter(Boolean);
|
|
359
|
+
return candidates.some((value) => value.includes("cancel")
|
|
360
|
+
|| value.includes("abort")
|
|
361
|
+
|| value.includes("context")
|
|
362
|
+
|| value.includes("compact")
|
|
363
|
+
|| value.includes("limit"));
|
|
364
|
+
}
|
|
365
|
+
async function buildModeBasedStopOutput(mode, cwd) {
|
|
366
|
+
const state = await readModeState(mode, cwd);
|
|
367
|
+
if (state?.active !== true || !isNonTerminalPhase(state.current_phase))
|
|
368
|
+
return null;
|
|
369
|
+
const phase = formatPhase(state.current_phase);
|
|
370
|
+
return {
|
|
371
|
+
decision: "block",
|
|
372
|
+
reason: `OMX ${mode} is still active (phase: ${phase}); continue the task and gather fresh verification evidence before stopping.`,
|
|
373
|
+
stopReason: `${mode}_${phase}`,
|
|
374
|
+
systemMessage: `OMX ${mode} is still active (phase: ${phase}).`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
async function buildTeamStopOutput(cwd) {
|
|
378
|
+
const teamState = await readModeState("team", cwd);
|
|
379
|
+
if (teamState?.active !== true)
|
|
380
|
+
return null;
|
|
381
|
+
const teamName = safeString(teamState.team_name).trim();
|
|
382
|
+
const coarsePhase = teamState.current_phase;
|
|
383
|
+
const canonicalPhase = teamName ? (await readTeamPhase(teamName, cwd))?.current_phase ?? coarsePhase : coarsePhase;
|
|
384
|
+
if (!isNonTerminalPhase(canonicalPhase))
|
|
385
|
+
return null;
|
|
386
|
+
const phase = formatPhase(canonicalPhase);
|
|
387
|
+
return {
|
|
388
|
+
decision: "block",
|
|
389
|
+
reason: `OMX team pipeline is still active${teamName ? ` (${teamName})` : ""} at phase ${phase}; continue coordinating until the team reaches a terminal phase.`,
|
|
390
|
+
stopReason: `team_${phase}`,
|
|
391
|
+
systemMessage: `OMX team pipeline is still active at phase ${phase}.`,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
async function findCanonicalActiveTeamForSession(cwd, sessionId) {
|
|
395
|
+
if (!sessionId.trim())
|
|
396
|
+
return null;
|
|
397
|
+
const teamsRoot = join(resolveCanonicalTeamStateRoot(cwd), "team");
|
|
398
|
+
if (!existsSync(teamsRoot))
|
|
399
|
+
return null;
|
|
400
|
+
const entries = await readdir(teamsRoot, { withFileTypes: true }).catch(() => []);
|
|
401
|
+
for (const entry of entries) {
|
|
402
|
+
if (!entry.isDirectory())
|
|
403
|
+
continue;
|
|
404
|
+
const teamName = entry.name.trim();
|
|
405
|
+
if (!teamName)
|
|
406
|
+
continue;
|
|
407
|
+
const [manifest, phaseState] = await Promise.all([
|
|
408
|
+
readTeamManifestV2(teamName, cwd),
|
|
409
|
+
readTeamPhase(teamName, cwd),
|
|
410
|
+
]);
|
|
411
|
+
if (!manifest || !phaseState)
|
|
412
|
+
continue;
|
|
413
|
+
const ownerSessionId = (manifest.leader?.session_id ?? "").trim();
|
|
414
|
+
if (ownerSessionId && ownerSessionId !== sessionId.trim())
|
|
415
|
+
continue;
|
|
416
|
+
if (!isNonTerminalPhase(phaseState.current_phase))
|
|
417
|
+
continue;
|
|
418
|
+
return {
|
|
419
|
+
teamName,
|
|
420
|
+
phase: formatPhase(phaseState.current_phase),
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
async function buildSkillStopOutput(cwd, sessionId) {
|
|
426
|
+
const state = await readScopedJsonState("skill-active-state.json", cwd, sessionId);
|
|
427
|
+
if (!state || state.active !== true)
|
|
428
|
+
return null;
|
|
429
|
+
const skill = safeString(state.skill).trim();
|
|
430
|
+
const phase = formatPhase(state.phase, "planning");
|
|
431
|
+
if (!SKILL_STOP_BLOCKERS.has(skill) || phase === "completing")
|
|
432
|
+
return null;
|
|
433
|
+
const subagentSummary = await readSubagentSessionSummary(cwd, sessionId).catch(() => null);
|
|
434
|
+
if (subagentSummary && subagentSummary.activeSubagentThreadIds.length > 0) {
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
decision: "block",
|
|
439
|
+
reason: `OMX skill ${skill} is still active (phase: ${phase}); continue until the current ${skill} workflow reaches a terminal state.`,
|
|
440
|
+
stopReason: `skill_${skill}_${phase}`,
|
|
441
|
+
systemMessage: `OMX skill ${skill} is still active (phase: ${phase}).`,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
async function buildStopHookOutput(payload, cwd, stateDir) {
|
|
445
|
+
if (isStopExempt(payload)) {
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
const sessionId = safeString(payload.session_id ?? payload.sessionId).trim();
|
|
449
|
+
const ralphState = await readActiveRalphState(stateDir);
|
|
450
|
+
const stopHookActive = payload.stop_hook_active === true || payload.stopHookActive === true;
|
|
451
|
+
if (!ralphState) {
|
|
452
|
+
const autopilotOutput = await buildModeBasedStopOutput("autopilot", cwd);
|
|
453
|
+
if (!stopHookActive && autopilotOutput)
|
|
454
|
+
return autopilotOutput;
|
|
455
|
+
const ultraworkOutput = await buildModeBasedStopOutput("ultrawork", cwd);
|
|
456
|
+
if (!stopHookActive && ultraworkOutput)
|
|
457
|
+
return ultraworkOutput;
|
|
458
|
+
const ultraqaOutput = await buildModeBasedStopOutput("ultraqa", cwd);
|
|
459
|
+
if (!stopHookActive && ultraqaOutput)
|
|
460
|
+
return ultraqaOutput;
|
|
461
|
+
const teamOutput = await buildTeamStopOutput(cwd);
|
|
462
|
+
if (!stopHookActive && teamOutput)
|
|
463
|
+
return teamOutput;
|
|
464
|
+
if (sessionId) {
|
|
465
|
+
const canonicalTeam = await findCanonicalActiveTeamForSession(cwd, sessionId);
|
|
466
|
+
if (!stopHookActive && canonicalTeam) {
|
|
467
|
+
return {
|
|
468
|
+
decision: "block",
|
|
469
|
+
reason: `OMX team pipeline is still active (${canonicalTeam.teamName}) at phase ${canonicalTeam.phase}; continue coordinating until the team reaches a terminal phase.`,
|
|
470
|
+
stopReason: `team_${canonicalTeam.phase}`,
|
|
471
|
+
systemMessage: `OMX team pipeline is still active at phase ${canonicalTeam.phase}.`,
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
const skillOutput = await buildSkillStopOutput(cwd, sessionId);
|
|
475
|
+
if (!stopHookActive && skillOutput)
|
|
476
|
+
return skillOutput;
|
|
477
|
+
}
|
|
478
|
+
const deepInterviewActive = await isDeepInterviewStateActive(stateDir);
|
|
479
|
+
const lastAssistantMessage = safeString(payload.last_assistant_message ?? payload.lastAssistantMessage);
|
|
480
|
+
const autoNudgeConfig = await loadAutoNudgeConfig();
|
|
481
|
+
if (!stopHookActive
|
|
482
|
+
&& !deepInterviewActive
|
|
483
|
+
&& autoNudgeConfig.enabled
|
|
484
|
+
&& detectStallPattern(lastAssistantMessage, autoNudgeConfig.patterns)) {
|
|
485
|
+
return {
|
|
486
|
+
decision: "block",
|
|
487
|
+
reason: autoNudgeConfig.response,
|
|
488
|
+
stopReason: "auto_nudge",
|
|
489
|
+
systemMessage: "OMX native Stop detected a stall/permission-style handoff and continued the turn automatically.",
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
return null;
|
|
493
|
+
}
|
|
494
|
+
if (stopHookActive) {
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
const currentPhase = safeString(ralphState?.current_phase).trim() || "executing";
|
|
498
|
+
const stopReason = `ralph_${currentPhase}`;
|
|
499
|
+
const systemMessage = `OMX Ralph is still active (phase: ${currentPhase}); continue the task and gather fresh verification evidence before stopping.`;
|
|
500
|
+
return {
|
|
501
|
+
decision: "block",
|
|
502
|
+
reason: systemMessage,
|
|
503
|
+
stopReason,
|
|
504
|
+
systemMessage,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
508
|
+
const hookEventName = readHookEventName(payload);
|
|
509
|
+
const cwd = options.cwd ?? (safeString(payload.cwd).trim() || process.cwd());
|
|
510
|
+
const stateDir = join(cwd, ".omx", "state");
|
|
511
|
+
await mkdir(stateDir, { recursive: true });
|
|
512
|
+
const omxEventName = mapCodexHookEventToOmxEvent(hookEventName);
|
|
513
|
+
let skillState = null;
|
|
514
|
+
const sessionId = safeString(payload.session_id ?? payload.sessionId).trim();
|
|
515
|
+
const threadId = safeString(payload.thread_id ?? payload.threadId).trim();
|
|
516
|
+
const turnId = safeString(payload.turn_id ?? payload.turnId).trim();
|
|
517
|
+
if (hookEventName === "SessionStart" && sessionId) {
|
|
518
|
+
await writeSessionStart(cwd, sessionId, {
|
|
519
|
+
pid: options.sessionOwnerPid ?? resolveSessionOwnerPid(payload),
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
if (hookEventName === "UserPromptSubmit") {
|
|
523
|
+
const prompt = readPromptText(payload);
|
|
524
|
+
if (prompt) {
|
|
525
|
+
skillState = await recordSkillActivation({
|
|
526
|
+
stateDir,
|
|
527
|
+
text: prompt,
|
|
528
|
+
sessionId,
|
|
529
|
+
threadId,
|
|
530
|
+
turnId,
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
if (omxEventName) {
|
|
535
|
+
const event = buildNativeHookEvent(omxEventName, buildBaseContext(cwd, payload, hookEventName), {
|
|
536
|
+
session_id: sessionId || undefined,
|
|
537
|
+
thread_id: threadId || undefined,
|
|
538
|
+
turn_id: turnId || undefined,
|
|
539
|
+
mode: safeString(payload.mode).trim() || undefined,
|
|
540
|
+
});
|
|
541
|
+
await dispatchHookEvent(event, { cwd });
|
|
542
|
+
}
|
|
543
|
+
let outputJson = null;
|
|
544
|
+
if (hookEventName === "SessionStart" || hookEventName === "UserPromptSubmit") {
|
|
545
|
+
const additionalContext = hookEventName === "SessionStart"
|
|
546
|
+
? await buildSessionStartContext(cwd, sessionId)
|
|
547
|
+
: buildAdditionalContextMessage(readPromptText(payload));
|
|
548
|
+
if (additionalContext) {
|
|
549
|
+
outputJson = {
|
|
550
|
+
hookSpecificOutput: {
|
|
551
|
+
hookEventName,
|
|
552
|
+
additionalContext,
|
|
553
|
+
},
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
else if (hookEventName === "PreToolUse") {
|
|
558
|
+
outputJson = buildNativePreToolUseOutput(payload);
|
|
559
|
+
}
|
|
560
|
+
else if (hookEventName === "PostToolUse") {
|
|
561
|
+
outputJson = buildNativePostToolUseOutput(payload);
|
|
562
|
+
}
|
|
563
|
+
else if (hookEventName === "Stop") {
|
|
564
|
+
outputJson = await buildStopHookOutput(payload, cwd, stateDir);
|
|
565
|
+
}
|
|
566
|
+
return {
|
|
567
|
+
hookEventName,
|
|
568
|
+
omxEventName,
|
|
569
|
+
skillState,
|
|
570
|
+
outputJson,
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
async function readStdinJson() {
|
|
574
|
+
const chunks = [];
|
|
575
|
+
for await (const chunk of process.stdin) {
|
|
576
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
577
|
+
}
|
|
578
|
+
const raw = Buffer.concat(chunks).toString("utf-8").trim();
|
|
579
|
+
return raw ? safeObject(JSON.parse(raw)) : {};
|
|
580
|
+
}
|
|
581
|
+
export async function runCodexNativeHookCli() {
|
|
582
|
+
const payload = await readStdinJson();
|
|
583
|
+
const result = await dispatchCodexNativeHook(payload);
|
|
584
|
+
if (result.outputJson) {
|
|
585
|
+
process.stdout.write(`${JSON.stringify(result.outputJson)}\n`);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
589
|
+
runCodexNativeHookCli().catch((error) => {
|
|
590
|
+
process.stderr.write(`[omx] codex-native-hook failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
591
|
+
process.exitCode = 1;
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
//# sourceMappingURL=codex-native-hook.js.map
|