oh-my-codex 0.17.3 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +13 -5
- package/Cargo.toml +2 -1
- package/README.md +44 -19
- package/crates/omx-api/Cargo.toml +19 -0
- package/crates/omx-api/src/lib.rs +2997 -0
- package/crates/omx-api/src/main.rs +10 -0
- package/crates/omx-api/tests/cli.rs +558 -0
- package/crates/omx-explore/src/main.rs +4 -0
- package/crates/omx-sparkshell/src/codex_bridge.rs +437 -123
- package/crates/omx-sparkshell/src/exec.rs +127 -1
- package/crates/omx-sparkshell/src/main.rs +829 -30
- package/crates/omx-sparkshell/src/prompt.rs +25 -3
- package/crates/omx-sparkshell/src/redaction.rs +241 -0
- package/crates/omx-sparkshell/tests/execution.rs +702 -237
- package/dist/cli/__tests__/api.test.d.ts +2 -0
- package/dist/cli/__tests__/api.test.d.ts.map +1 -0
- package/dist/cli/__tests__/api.test.js +175 -0
- package/dist/cli/__tests__/api.test.js.map +1 -0
- package/dist/cli/__tests__/ask.test.js +72 -5
- package/dist/cli/__tests__/ask.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-goal.test.js +14 -1
- package/dist/cli/__tests__/autoresearch-goal.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +15 -7
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +76 -3
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +23 -0
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +171 -5
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/install-docs-contract.test.d.ts +2 -0
- package/dist/cli/__tests__/install-docs-contract.test.d.ts.map +1 -0
- package/dist/cli/__tests__/install-docs-contract.test.js +55 -0
- package/dist/cli/__tests__/install-docs-contract.test.js.map +1 -0
- package/dist/cli/__tests__/launch-fallback.test.js +191 -0
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +4 -3
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +27 -41
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +232 -35
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +25 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-packaging.test.js +1 -0
- package/dist/cli/__tests__/sparkshell-packaging.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +227 -4
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/update.test.js +72 -1
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/__tests__/version-sync-contract.test.js +4 -0
- package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/api.d.ts +26 -0
- package/dist/cli/api.d.ts.map +1 -0
- package/dist/cli/api.js +153 -0
- package/dist/cli/api.js.map +1 -0
- package/dist/cli/codex-feature-probe.d.ts +5 -0
- package/dist/cli/codex-feature-probe.d.ts.map +1 -1
- package/dist/cli/codex-feature-probe.js +13 -7
- package/dist/cli/codex-feature-probe.js.map +1 -1
- package/dist/cli/doctor.d.ts +7 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +119 -10
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts +2 -0
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +43 -1
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +12 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +460 -87
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/native-assets.d.ts +2 -1
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +1 -0
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts +2 -0
- package/dist/cli/plugin-marketplace.d.ts.map +1 -1
- package/dist/cli/plugin-marketplace.js +15 -1
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +71 -11
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts +7 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +31 -4
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/ultragoal.d.ts +1 -1
- package/dist/cli/ultragoal.d.ts.map +1 -1
- package/dist/cli/ultragoal.js +184 -10
- package/dist/cli/ultragoal.js.map +1 -1
- package/dist/cli/update.d.ts +2 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +14 -3
- package/dist/cli/update.js.map +1 -1
- package/dist/compat/__tests__/doctor-contract.test.js +3 -0
- package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
- package/dist/config/__tests__/codex-feature-flags.test.js +11 -1
- package/dist/config/__tests__/codex-feature-flags.test.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +19 -8
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/commit-lore-guard.test.d.ts +2 -0
- package/dist/config/__tests__/commit-lore-guard.test.d.ts.map +1 -0
- package/dist/config/__tests__/commit-lore-guard.test.js +20 -0
- package/dist/config/__tests__/commit-lore-guard.test.js.map +1 -0
- package/dist/config/codex-feature-flags.d.ts +4 -0
- package/dist/config/codex-feature-flags.d.ts.map +1 -1
- package/dist/config/codex-feature-flags.js +4 -0
- package/dist/config/codex-feature-flags.js.map +1 -1
- package/dist/config/codex-hooks.js +6 -6
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/commit-lore-guard.d.ts +1 -0
- package/dist/config/commit-lore-guard.d.ts.map +1 -1
- package/dist/config/commit-lore-guard.js +29 -3
- package/dist/config/commit-lore-guard.js.map +1 -1
- package/dist/config/generator.d.ts +3 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +114 -10
- package/dist/config/generator.js.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.d.ts +1 -0
- package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js +5 -1
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +10 -6
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts +2 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.js +27 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.js.map +1 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +13 -11
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js +4 -3
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +15 -3
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +6 -0
- 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 +33 -0
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +4 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js +26 -3
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +29 -14
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +8 -3
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +1 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +3 -2
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +14 -8
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +4 -4
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/resource-leak-watch.test.d.ts +2 -0
- package/dist/hud/__tests__/resource-leak-watch.test.d.ts.map +1 -0
- package/dist/hud/__tests__/resource-leak-watch.test.js +28 -0
- package/dist/hud/__tests__/resource-leak-watch.test.js.map +1 -0
- package/dist/hud/__tests__/tmux.test.js +23 -18
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/index.d.ts +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +10 -4
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +9 -8
- package/dist/hud/tmux.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +75 -1
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +3 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +71 -2
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/notifications/__tests__/http-client-resource.test.d.ts +2 -0
- package/dist/notifications/__tests__/http-client-resource.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/http-client-resource.test.js +41 -0
- package/dist/notifications/__tests__/http-client-resource.test.js.map +1 -0
- package/dist/notifications/__tests__/verbosity.test.js +20 -0
- package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +6 -3
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/http-client.d.ts.map +1 -1
- package/dist/notifications/http-client.js +78 -27
- package/dist/notifications/http-client.js.map +1 -1
- package/dist/notifications/types.d.ts +2 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/dispatcher.test.js +49 -1
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
- package/dist/openclaw/dispatcher.d.ts +7 -4
- package/dist/openclaw/dispatcher.d.ts.map +1 -1
- package/dist/openclaw/dispatcher.js +32 -69
- package/dist/openclaw/dispatcher.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +65 -3
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +50 -5
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/index.d.ts +8 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +5 -2
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts +5 -4
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +56 -15
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/code-review.d.ts +2 -2
- package/dist/pipeline/stages/code-review.d.ts.map +1 -1
- package/dist/pipeline/stages/code-review.js +5 -3
- package/dist/pipeline/stages/code-review.js.map +1 -1
- package/dist/pipeline/stages/deep-interview.d.ts +15 -0
- package/dist/pipeline/stages/deep-interview.d.ts.map +1 -0
- package/dist/pipeline/stages/deep-interview.js +32 -0
- package/dist/pipeline/stages/deep-interview.js.map +1 -0
- package/dist/pipeline/stages/ralph-verify.d.ts +5 -5
- package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -1
- package/dist/pipeline/stages/ralph-verify.js +2 -2
- package/dist/pipeline/stages/ralph-verify.js.map +1 -1
- package/dist/pipeline/stages/ultragoal.d.ts +19 -0
- package/dist/pipeline/stages/ultragoal.d.ts.map +1 -0
- package/dist/pipeline/stages/ultragoal.js +38 -0
- package/dist/pipeline/stages/ultragoal.js.map +1 -0
- package/dist/pipeline/stages/ultraqa.d.ts +30 -0
- package/dist/pipeline/stages/ultraqa.d.ts.map +1 -0
- package/dist/pipeline/stages/ultraqa.js +46 -0
- package/dist/pipeline/stages/ultraqa.js.map +1 -0
- package/dist/pipeline/types.d.ts +8 -6
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +2 -2
- package/dist/scripts/__tests__/codex-native-hook.test.js +1488 -117
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-dispatcher.test.js +183 -1
- package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js +27 -2
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js +16 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
- package/dist/scripts/build-api.d.ts +2 -0
- package/dist/scripts/build-api.d.ts.map +1 -0
- package/dist/scripts/build-api.js +44 -0
- package/dist/scripts/build-api.js.map +1 -0
- package/dist/scripts/cleanup-explore-harness.js +1 -0
- package/dist/scripts/cleanup-explore-harness.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +364 -16
- 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 +98 -25
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/notify-dispatcher.js +88 -0
- package/dist/scripts/notify-dispatcher.js.map +1 -1
- package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
- package/dist/scripts/notify-hook/process-runner.js +39 -17
- 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 +36 -14
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +26 -11
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts +2 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +45 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.js +27 -14
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
- package/dist/scripts/run-provider-advisor.js +9 -3
- package/dist/scripts/run-provider-advisor.js.map +1 -1
- package/dist/scripts/smoke-packed-install.d.ts +4 -1
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +101 -1
- package/dist/scripts/smoke-packed-install.js.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js +2 -2
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/scripts/verify-native-agents.js +2 -2
- package/dist/scripts/verify-native-agents.js.map +1 -1
- package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts +2 -0
- package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts.map +1 -0
- package/dist/sidecar/__tests__/resource-leak-watch.test.js +38 -0
- package/dist/sidecar/__tests__/resource-leak-watch.test.js.map +1 -0
- package/dist/sidecar/index.d.ts +1 -1
- package/dist/sidecar/index.d.ts.map +1 -1
- package/dist/sidecar/index.js +29 -12
- package/dist/sidecar/index.js.map +1 -1
- package/dist/state/__tests__/operations-ralph-phase.test.js +88 -1
- package/dist/state/__tests__/operations-ralph-phase.test.js.map +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +11 -0
- package/dist/state/operations.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +2 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +207 -22
- package/dist/team/__tests__/tmux-session.test.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 +73 -28
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +714 -10
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/__tests__/docs-contract.test.js +57 -1
- package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
- package/dist/ultragoal/__tests__/steering-fixtures.d.ts +68 -0
- package/dist/ultragoal/__tests__/steering-fixtures.d.ts.map +1 -0
- package/dist/ultragoal/__tests__/steering-fixtures.js +259 -0
- package/dist/ultragoal/__tests__/steering-fixtures.js.map +1 -0
- package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts +2 -0
- package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts.map +1 -0
- package/dist/ultragoal/__tests__/steering-fixtures.test.js +65 -0
- package/dist/ultragoal/__tests__/steering-fixtures.test.js.map +1 -0
- package/dist/ultragoal/artifacts.d.ts +97 -2
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +811 -256
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/utils/__tests__/sleep-resource.test.d.ts +2 -0
- package/dist/utils/__tests__/sleep-resource.test.d.ts.map +1 -0
- package/dist/utils/__tests__/sleep-resource.test.js +39 -0
- package/dist/utils/__tests__/sleep-resource.test.js.map +1 -0
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js +17 -6
- package/dist/utils/sleep.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +85 -10
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +1 -0
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/package.json +5 -3
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +4 -3
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +56 -0
- package/plugins/oh-my-codex/hooks/hooks.json +77 -0
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +77 -47
- package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +83 -0
- package/plugins/oh-my-codex/skills/cancel/SKILL.md +2 -2
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +9 -8
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/pipeline/SKILL.md +22 -11
- package/plugins/oh-my-codex/skills/plan/SKILL.md +8 -8
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +7 -0
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -5
- package/plugins/oh-my-codex/skills/team/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +38 -4
- package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +1 -1
- package/prompts/planner.md +1 -1
- package/prompts/researcher.md +15 -10
- package/skills/autopilot/SKILL.md +77 -47
- package/skills/best-practice-research/SKILL.md +83 -0
- package/skills/cancel/SKILL.md +2 -2
- package/skills/deep-interview/SKILL.md +9 -8
- package/skills/omx-setup/SKILL.md +1 -1
- package/skills/pipeline/SKILL.md +22 -11
- package/skills/plan/SKILL.md +8 -8
- package/skills/ralph/SKILL.md +7 -0
- package/skills/ralplan/SKILL.md +5 -5
- package/skills/team/SKILL.md +1 -1
- package/skills/ultragoal/SKILL.md +38 -4
- package/skills/ultrawork/SKILL.md +1 -1
- package/src/scripts/__tests__/codex-native-hook.test.ts +1758 -166
- package/src/scripts/__tests__/notify-dispatcher.test.ts +223 -1
- package/src/scripts/__tests__/smoke-packed-install.test.ts +39 -2
- package/src/scripts/__tests__/verify-native-agents.test.ts +21 -1
- package/src/scripts/build-api.ts +48 -0
- package/src/scripts/cleanup-explore-harness.ts +1 -0
- package/src/scripts/codex-native-hook.ts +416 -18
- package/src/scripts/codex-native-pre-post.ts +119 -25
- package/src/scripts/notify-dispatcher.ts +97 -0
- package/src/scripts/notify-hook/process-runner.ts +40 -16
- package/src/scripts/notify-hook/team-dispatch.ts +36 -13
- package/src/scripts/notify-hook/team-leader-nudge.ts +25 -11
- package/src/scripts/notify-hook/team-tmux-guard.ts +49 -0
- package/src/scripts/notify-hook/team-worker-stop.ts +24 -13
- package/src/scripts/run-provider-advisor.ts +11 -3
- package/src/scripts/smoke-packed-install.ts +107 -0
- package/src/scripts/sync-plugin-mirror.ts +3 -3
- package/src/scripts/verify-native-agents.ts +2 -2
- package/templates/catalog-manifest.json +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-sync-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/version-sync-contract.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"version-sync-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/version-sync-contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ const fallbackWatcherSource = readFileSync(join(repoRoot, 'src', 'scripts', 'not
|
|
|
14
14
|
describe('Windows popup loop contracts', () => {
|
|
15
15
|
it('keeps Windows helper spawns hidden', () => {
|
|
16
16
|
assert.match(cliIndex, /buildWindowsMsysBackgroundHelperBootstrapScript/);
|
|
17
|
-
assert.match(cliIndex, /const pidPath = notifyFallbackPidPath\(cwd\);\s+await reapStaleNotifyFallbackWatcher\(pidPath\);\s+if \(!shouldEnableNotifyFallbackWatcher\(process\.env,\s*process\.platform\)\) return;/);
|
|
17
|
+
assert.match(cliIndex, /const pidPath = notifyFallbackPidPath\(cwd\);\s+const reapResult = await reapStaleNotifyFallbackWatcher\(pidPath\);\s+if \(reapResult === "recent_active"\) return;\s+if \(!shouldEnableNotifyFallbackWatcher\(process\.env,\s*process\.platform\)\) return;/);
|
|
18
18
|
assert.match(cliIndex, /detached:\s*shouldDetachBackgroundHelper\(options\.env,\s*process\.platform\),\s*[\s\S]*?stdio:\s*"ignore",\s*[\s\S]*?windowsHide:\s*true/);
|
|
19
19
|
assert.match(cliIndex, /spawnSync\([\s\S]*?buildWindowsMsysBackgroundHelperBootstrapScript\([\s\S]*?windowsHide:\s*true/);
|
|
20
20
|
assert.match(cliIndex, /detached:\s*true,\s*stdio:\s*'ignore',\s*windowsHide:\s*true/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows-popup-loop-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/windows-popup-loop-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/G,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;AAEpH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iDAAiD,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CACV,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"windows-popup-loop-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/windows-popup-loop-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/G,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;AAEpH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iDAAiD,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CACV,QAAQ,EACR,8PAA8P,CAC/P,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,2IAA2I,CAAC,CAAC;QACpK,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iGAAiG,CAAC,CAAC;QAC1H,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,8DAA8D,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,0JAA0J,CAAC,CAAC;QACnL,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,kHAAkH,CAAC,CAAC;QAC3I,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,qEAAqE,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,+DAA+D,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,4EAA4E,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,iDAAiD,CAAC,CAAC;QACvF,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { spawnSync, type SpawnSyncReturns } from 'node:child_process';
|
|
2
|
+
export declare const API_USAGE: string;
|
|
3
|
+
export interface ResolveApiBinaryPathOptions {
|
|
4
|
+
cwd?: string;
|
|
5
|
+
env?: NodeJS.ProcessEnv;
|
|
6
|
+
packageRoot?: string;
|
|
7
|
+
platform?: NodeJS.Platform;
|
|
8
|
+
arch?: string;
|
|
9
|
+
linuxLibcPreference?: readonly ('musl' | 'glibc')[];
|
|
10
|
+
exists?: (path: string) => boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface RunApiBinaryOptions {
|
|
13
|
+
cwd?: string;
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
spawnImpl?: typeof spawnSync;
|
|
16
|
+
}
|
|
17
|
+
export declare function apiBinaryName(platform?: NodeJS.Platform): string;
|
|
18
|
+
export declare function packagedApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform, arch?: string, libc?: 'musl' | 'glibc'): string;
|
|
19
|
+
export declare function packagedApiBinaryCandidatePaths(packageRoot?: string, platform?: NodeJS.Platform, arch?: string, env?: NodeJS.ProcessEnv, linuxLibcPreference?: readonly ('musl' | 'glibc')[]): string[];
|
|
20
|
+
export declare function repoLocalApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform): string;
|
|
21
|
+
export declare function nestedRepoLocalApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform): string;
|
|
22
|
+
export declare function resolveApiBinaryPath(options?: ResolveApiBinaryPathOptions): string;
|
|
23
|
+
export declare function resolveApiBinaryPathWithHydration(options?: ResolveApiBinaryPathOptions): Promise<string>;
|
|
24
|
+
export declare function runApiBinary(binaryPath: string, args: readonly string[], options?: RunApiBinaryOptions): SpawnSyncReturns<string>;
|
|
25
|
+
export declare function apiCommand(args: string[]): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/cli/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAgB5B,eAAO,MAAM,SAAS,QAaV,CAAC;AAEb,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AASD,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAElF;AAED,wBAAgB,qBAAqB,CACnC,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAiB,EACvB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GACtB,MAAM,CAGR;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAiB,EACvB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,GAClD,MAAM,EAAE,CASV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,MAAM,CA6BtF;AAED,wBAAsB,iCAAiC,CACrD,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAwCjB;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,mBAAwB,GAChC,gBAAgB,CAAC,MAAM,CAAC,CAS1B;AAYD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9D"}
|
package/dist/cli/api.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { spawnSync, } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { arch as osArch, constants as osConstants } from 'node:os';
|
|
4
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
5
|
+
import { getPackageRoot } from '../utils/package.js';
|
|
6
|
+
import { classifySpawnError } from '../utils/platform-command.js';
|
|
7
|
+
import { API_BIN_ENV as API_BIN_ENV_SHARED, getPackageVersion, hydrateNativeBinary, resolveCachedNativeBinaryCandidatePaths, resolveLinuxNativeLibcPreference, } from './native-assets.js';
|
|
8
|
+
const OMX_API_BIN_ENV = API_BIN_ENV_SHARED;
|
|
9
|
+
export const API_USAGE = [
|
|
10
|
+
'Usage: omx api <command> [args...]',
|
|
11
|
+
'',
|
|
12
|
+
'Commands:',
|
|
13
|
+
' serve [--host 127.0.0.1] [--port N] [--daemon] [--system] [--dry-run]',
|
|
14
|
+
' status',
|
|
15
|
+
' stop',
|
|
16
|
+
' generate text <prompt...> [--state-file path]',
|
|
17
|
+
' generate image <prompt...> [--state-file path]',
|
|
18
|
+
'',
|
|
19
|
+
'Runs the native omx-api localhost gateway sidecar and forwards arguments unchanged.',
|
|
20
|
+
'Note: real-private backend mode is experimental and requires local bearer auth.',
|
|
21
|
+
`Set ${OMX_API_BIN_ENV} to override the native binary path.`,
|
|
22
|
+
].join('\n');
|
|
23
|
+
function resolveSignalExitCode(signal) {
|
|
24
|
+
if (!signal)
|
|
25
|
+
return 1;
|
|
26
|
+
const signalNumber = osConstants.signals[signal];
|
|
27
|
+
if (typeof signalNumber === 'number' && Number.isFinite(signalNumber))
|
|
28
|
+
return 128 + signalNumber;
|
|
29
|
+
return 1;
|
|
30
|
+
}
|
|
31
|
+
export function apiBinaryName(platform = process.platform) {
|
|
32
|
+
return platform === 'win32' ? 'omx-api.exe' : 'omx-api';
|
|
33
|
+
}
|
|
34
|
+
export function packagedApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), libc) {
|
|
35
|
+
const platformKey = libc ? `${platform}-${arch}-${libc}` : `${platform}-${arch}`;
|
|
36
|
+
return join(packageRoot, 'bin', 'native', platformKey, apiBinaryName(platform));
|
|
37
|
+
}
|
|
38
|
+
export function packagedApiBinaryCandidatePaths(packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), env = process.env, linuxLibcPreference) {
|
|
39
|
+
const candidates = [];
|
|
40
|
+
if (platform === 'linux') {
|
|
41
|
+
for (const libc of linuxLibcPreference ?? resolveLinuxNativeLibcPreference({ env })) {
|
|
42
|
+
candidates.push(packagedApiBinaryPath(packageRoot, platform, arch, libc));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
candidates.push(packagedApiBinaryPath(packageRoot, platform, arch));
|
|
46
|
+
return [...new Set(candidates)];
|
|
47
|
+
}
|
|
48
|
+
export function repoLocalApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform) {
|
|
49
|
+
return join(packageRoot, 'target', 'release', apiBinaryName(platform));
|
|
50
|
+
}
|
|
51
|
+
export function nestedRepoLocalApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform) {
|
|
52
|
+
return join(packageRoot, 'native', 'omx-api', 'target', 'release', apiBinaryName(platform));
|
|
53
|
+
}
|
|
54
|
+
export function resolveApiBinaryPath(options = {}) {
|
|
55
|
+
const { cwd = process.cwd(), env = process.env, packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), linuxLibcPreference, exists = existsSync, } = options;
|
|
56
|
+
const override = env[OMX_API_BIN_ENV]?.trim();
|
|
57
|
+
if (override)
|
|
58
|
+
return isAbsolute(override) ? override : resolve(cwd, override);
|
|
59
|
+
for (const packaged of packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference)) {
|
|
60
|
+
if (exists(packaged))
|
|
61
|
+
return packaged;
|
|
62
|
+
}
|
|
63
|
+
const repoLocal = repoLocalApiBinaryPath(packageRoot, platform);
|
|
64
|
+
if (exists(repoLocal))
|
|
65
|
+
return repoLocal;
|
|
66
|
+
const nestedRepoLocal = nestedRepoLocalApiBinaryPath(packageRoot, platform);
|
|
67
|
+
if (exists(nestedRepoLocal))
|
|
68
|
+
return nestedRepoLocal;
|
|
69
|
+
const packagedCandidates = packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference);
|
|
70
|
+
throw new Error(`[api] native binary not found. Checked ${packagedCandidates.join(', ')}, ${repoLocal}, and ${nestedRepoLocal}. `
|
|
71
|
+
+ `Set ${OMX_API_BIN_ENV} to override the path.`);
|
|
72
|
+
}
|
|
73
|
+
export async function resolveApiBinaryPathWithHydration(options = {}) {
|
|
74
|
+
const { cwd = process.cwd(), env = process.env, packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), linuxLibcPreference, exists = existsSync, } = options;
|
|
75
|
+
const override = env[OMX_API_BIN_ENV]?.trim();
|
|
76
|
+
if (override)
|
|
77
|
+
return isAbsolute(override) ? override : resolve(cwd, override);
|
|
78
|
+
const version = await getPackageVersion(packageRoot);
|
|
79
|
+
for (const cached of resolveCachedNativeBinaryCandidatePaths('omx-api', version, platform, arch, env, {
|
|
80
|
+
linuxLibcPreference: platform === 'linux'
|
|
81
|
+
? (linuxLibcPreference ?? resolveLinuxNativeLibcPreference({ env }))
|
|
82
|
+
: undefined,
|
|
83
|
+
})) {
|
|
84
|
+
if (exists(cached))
|
|
85
|
+
return cached;
|
|
86
|
+
}
|
|
87
|
+
for (const packaged of packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference)) {
|
|
88
|
+
if (exists(packaged))
|
|
89
|
+
return packaged;
|
|
90
|
+
}
|
|
91
|
+
const repoLocal = repoLocalApiBinaryPath(packageRoot, platform);
|
|
92
|
+
if (exists(repoLocal))
|
|
93
|
+
return repoLocal;
|
|
94
|
+
const nestedRepoLocal = nestedRepoLocalApiBinaryPath(packageRoot, platform);
|
|
95
|
+
if (exists(nestedRepoLocal))
|
|
96
|
+
return nestedRepoLocal;
|
|
97
|
+
const hydrated = await hydrateNativeBinary('omx-api', { packageRoot, env, platform, arch });
|
|
98
|
+
if (hydrated)
|
|
99
|
+
return hydrated;
|
|
100
|
+
throw new Error(`[api] native binary not found. Checked cached/native candidates under ${packageRoot}, ${repoLocal}, and ${nestedRepoLocal}. `
|
|
101
|
+
+ `Reconnect to the network so OMX can fetch the release asset, or set ${OMX_API_BIN_ENV} to override the path.`);
|
|
102
|
+
}
|
|
103
|
+
export function runApiBinary(binaryPath, args, options = {}) {
|
|
104
|
+
const { cwd = process.cwd(), env = process.env, spawnImpl = spawnSync } = options;
|
|
105
|
+
const spawnOptions = {
|
|
106
|
+
cwd,
|
|
107
|
+
env,
|
|
108
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
109
|
+
encoding: 'utf-8',
|
|
110
|
+
};
|
|
111
|
+
return spawnImpl(binaryPath, [...args], spawnOptions);
|
|
112
|
+
}
|
|
113
|
+
function writeApiResultOutput(result) {
|
|
114
|
+
if (typeof result.stdout === 'string' && result.stdout.length > 0)
|
|
115
|
+
process.stdout.write(result.stdout);
|
|
116
|
+
if (typeof result.stderr === 'string' && result.stderr.length > 0)
|
|
117
|
+
process.stderr.write(result.stderr);
|
|
118
|
+
}
|
|
119
|
+
function isHelpRequest(args) {
|
|
120
|
+
if (args.length === 0)
|
|
121
|
+
return true;
|
|
122
|
+
return args.includes('--help') || args.includes('-h');
|
|
123
|
+
}
|
|
124
|
+
export async function apiCommand(args) {
|
|
125
|
+
if (isHelpRequest(args)) {
|
|
126
|
+
console.log(API_USAGE);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
let binaryPath;
|
|
130
|
+
try {
|
|
131
|
+
binaryPath = await resolveApiBinaryPathWithHydration();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
const result = runApiBinary(binaryPath, args);
|
|
137
|
+
if (result.error) {
|
|
138
|
+
const errno = result.error;
|
|
139
|
+
const kind = classifySpawnError(errno);
|
|
140
|
+
if (kind === 'missing')
|
|
141
|
+
throw new Error(`[api] failed to launch native binary: executable not found (${binaryPath})`);
|
|
142
|
+
if (kind === 'blocked')
|
|
143
|
+
throw new Error(`[api] failed to launch native binary: executable is blocked (${errno.code || 'blocked'})`);
|
|
144
|
+
throw new Error(`[api] failed to launch native binary: ${errno.message}`);
|
|
145
|
+
}
|
|
146
|
+
writeApiResultOutput(result);
|
|
147
|
+
if (result.status !== 0) {
|
|
148
|
+
process.exitCode = typeof result.status === 'number'
|
|
149
|
+
? result.status
|
|
150
|
+
: resolveSignalExitCode(result.signal);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/cli/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,10 @@ export interface CodexFeatureProbeOptions {
|
|
|
5
5
|
}
|
|
6
6
|
export declare function probeInstalledCodexFeatureList(): string | null;
|
|
7
7
|
export declare function probeInstalledCodexVersion(): string | null;
|
|
8
|
+
export interface CodexHookFeatureSupport {
|
|
9
|
+
hookFeatureFlag: CodexHookFeatureFlag;
|
|
10
|
+
pluginScopedHooks: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveCodexHookFeatureSupportForCli(options?: CodexFeatureProbeOptions): CodexHookFeatureSupport;
|
|
8
13
|
export declare function resolveCodexHookFeatureFlagForCli(options?: CodexFeatureProbeOptions): CodexHookFeatureFlag;
|
|
9
14
|
//# sourceMappingURL=codex-feature-probe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-feature-probe.d.ts","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"codex-feature-probe.d.ts","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAM9D;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAM1D;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,oBAAoB,CAAC;IACtC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,oCAAoC,CAClD,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAYzB;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAEtB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from "child_process";
|
|
2
|
-
import { DEFAULT_CODEX_HOOK_FEATURE_FLAG, resolveCodexHookFeatureFlag, } from "../config/codex-feature-flags.js";
|
|
2
|
+
import { DEFAULT_CODEX_HOOK_FEATURE_FLAG, resolveCodexHookFeatureFlag, supportsCodexPluginScopedHooks, } from "../config/codex-feature-flags.js";
|
|
3
3
|
export function probeInstalledCodexFeatureList() {
|
|
4
4
|
const result = spawnSync("codex", ["features", "list"], {
|
|
5
5
|
encoding: "utf-8",
|
|
@@ -16,13 +16,19 @@ export function probeInstalledCodexVersion() {
|
|
|
16
16
|
return null;
|
|
17
17
|
return [result.stdout, result.stderr].filter(Boolean).join("\n") || null;
|
|
18
18
|
}
|
|
19
|
-
export function
|
|
19
|
+
export function resolveCodexHookFeatureSupportForCli(options = {}) {
|
|
20
20
|
const featuresListOutput = options.codexFeaturesProbe?.() ?? probeInstalledCodexFeatureList();
|
|
21
21
|
const versionOutput = options.codexVersionProbe?.() ?? probeInstalledCodexVersion();
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
return {
|
|
23
|
+
hookFeatureFlag: resolveCodexHookFeatureFlag({
|
|
24
|
+
featuresListOutput,
|
|
25
|
+
versionOutput,
|
|
26
|
+
fallback: DEFAULT_CODEX_HOOK_FEATURE_FLAG,
|
|
27
|
+
}),
|
|
28
|
+
pluginScopedHooks: supportsCodexPluginScopedHooks({ featuresListOutput }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function resolveCodexHookFeatureFlagForCli(options = {}) {
|
|
32
|
+
return resolveCodexHookFeatureSupportForCli(options).hookFeatureFlag;
|
|
27
33
|
}
|
|
28
34
|
//# sourceMappingURL=codex-feature-probe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-feature-probe.js","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"codex-feature-probe.js","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAE/B,MAAM,kCAAkC,CAAC;AAO1C,MAAM,UAAU,8BAA8B;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;QACtD,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;QAC/C,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAOD,MAAM,UAAU,oCAAoC,CAClD,UAAoC,EAAE;IAEtC,MAAM,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,EAAE,EAAE,IAAI,8BAA8B,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,EAAE,IAAI,0BAA0B,EAAE,CAAC;IACpF,OAAO;QACL,eAAe,EAAE,2BAA2B,CAAC;YAC3C,kBAAkB;YAClB,aAAa;YACb,QAAQ,EAAE,+BAA+B;SAC1C,CAAC;QACF,iBAAiB,EAAE,8BAA8B,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAAoC,EAAE;IAEtC,OAAO,oCAAoC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC;AACvE,CAAC"}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* omx doctor - Validate oh-my-codex installation
|
|
3
3
|
*/
|
|
4
|
+
import { spawnSync } from "child_process";
|
|
4
5
|
interface DoctorOptions {
|
|
5
6
|
verbose?: boolean;
|
|
6
7
|
force?: boolean;
|
|
@@ -12,8 +13,14 @@ interface Check {
|
|
|
12
13
|
status: "pass" | "warn" | "fail";
|
|
13
14
|
message: string;
|
|
14
15
|
}
|
|
16
|
+
interface NativeHookDistSmokeOptions {
|
|
17
|
+
packageRoot?: string;
|
|
18
|
+
nodePath?: string;
|
|
19
|
+
runner?: typeof spawnSync;
|
|
20
|
+
}
|
|
15
21
|
export declare function doctor(options?: DoctorOptions): Promise<void>;
|
|
16
22
|
export declare function checkExploreHarness(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): Check;
|
|
23
|
+
export declare function checkNativeHookDistSmoke(options?: NativeHookDistSmokeOptions): Promise<Check>;
|
|
17
24
|
export declare function classifyPostCompactHookStdout(stdout: string): Check | null;
|
|
18
25
|
export {};
|
|
19
26
|
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA+D1C,UAAU,aAAa;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,KAAK;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,SAAS,CAAC;CAC1B;AAyDD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8IvE;AAuYD,wBAAgB,mBAAmB,CAClC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,KAAK,CAoFP;AAwWD,wBAAsB,wBAAwB,CAC7C,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,KAAK,CAAC,CA2EhB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAmB1E"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -95,6 +95,7 @@ export async function doctor(options = {}) {
|
|
|
95
95
|
checks.push(contextRecommendationCheck);
|
|
96
96
|
// Check 4.25: Native hooks coverage
|
|
97
97
|
checks.push(await checkNativeHooks(paths.hooksPath, paths.configPath));
|
|
98
|
+
checks.push(await checkNativeHookDistSmoke());
|
|
98
99
|
if (options.verbose) {
|
|
99
100
|
const postCompactRuntimeCheck = await checkNativePostCompactHookRuntime(paths.hooksPath, cwd, paths.codexHomeDir);
|
|
100
101
|
if (postCompactRuntimeCheck)
|
|
@@ -714,21 +715,40 @@ async function checkExploreRouting(configPath) {
|
|
|
714
715
|
};
|
|
715
716
|
}
|
|
716
717
|
}
|
|
718
|
+
const LORE_COMMIT_GUARD_EXPLICIT_OPT_OUT_VALUES = new Set([
|
|
719
|
+
"0",
|
|
720
|
+
"false",
|
|
721
|
+
"no",
|
|
722
|
+
"off",
|
|
723
|
+
]);
|
|
717
724
|
async function checkLoreCommitGuard(configPath) {
|
|
718
725
|
const envValue = process.env[OMX_LORE_COMMIT_GUARD_ENV];
|
|
719
|
-
if (typeof envValue === "string"
|
|
720
|
-
|
|
726
|
+
if (typeof envValue === "string") {
|
|
727
|
+
if (isLoreCommitGuardEnabled(process.env)) {
|
|
728
|
+
return {
|
|
729
|
+
name: "Lore commit guard",
|
|
730
|
+
status: "pass",
|
|
731
|
+
message: "enabled by environment opt-in",
|
|
732
|
+
};
|
|
733
|
+
}
|
|
734
|
+
if (!isExplicitLoreCommitGuardOptOut(envValue)) {
|
|
735
|
+
return {
|
|
736
|
+
name: "Lore commit guard",
|
|
737
|
+
status: "warn",
|
|
738
|
+
message: "invalid environment value; Lore commit enforcement is disabled until OMX_LORE_COMMIT_GUARD is set to 1, true, yes, or on",
|
|
739
|
+
};
|
|
740
|
+
}
|
|
721
741
|
return {
|
|
722
742
|
name: "Lore commit guard",
|
|
723
|
-
status: "
|
|
724
|
-
message: "disabled by environment
|
|
743
|
+
status: "pass",
|
|
744
|
+
message: "disabled by environment/default opt-out; enable with OMX_LORE_COMMIT_GUARD=1",
|
|
725
745
|
};
|
|
726
746
|
}
|
|
727
747
|
if (!existsSync(configPath)) {
|
|
728
748
|
return {
|
|
729
749
|
name: "Lore commit guard",
|
|
730
750
|
status: "pass",
|
|
731
|
-
message: "
|
|
751
|
+
message: "disabled by default (config.toml not found yet)",
|
|
732
752
|
};
|
|
733
753
|
}
|
|
734
754
|
try {
|
|
@@ -736,20 +756,33 @@ async function checkLoreCommitGuard(configPath) {
|
|
|
736
756
|
const parsed = parseToml(content);
|
|
737
757
|
const configuredValue = parsed?.shell_environment_policy?.set?.[OMX_LORE_COMMIT_GUARD_ENV] ??
|
|
738
758
|
parsed?.env?.[OMX_LORE_COMMIT_GUARD_ENV];
|
|
739
|
-
if (typeof configuredValue === "string"
|
|
740
|
-
|
|
759
|
+
if (typeof configuredValue === "string") {
|
|
760
|
+
if (isLoreCommitGuardEnabled({
|
|
741
761
|
[OMX_LORE_COMMIT_GUARD_ENV]: configuredValue,
|
|
742
762
|
})) {
|
|
763
|
+
return {
|
|
764
|
+
name: "Lore commit guard",
|
|
765
|
+
status: "pass",
|
|
766
|
+
message: "enabled by config.toml opt-in",
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
if (!isExplicitLoreCommitGuardOptOut(configuredValue)) {
|
|
770
|
+
return {
|
|
771
|
+
name: "Lore commit guard",
|
|
772
|
+
status: "warn",
|
|
773
|
+
message: 'invalid config.toml value; Lore commit enforcement is disabled until OMX_LORE_COMMIT_GUARD = "1" (or true/yes/on) is set under [shell_environment_policy.set]',
|
|
774
|
+
};
|
|
775
|
+
}
|
|
743
776
|
return {
|
|
744
777
|
name: "Lore commit guard",
|
|
745
|
-
status: "
|
|
746
|
-
message: 'disabled in config.toml; set OMX_LORE_COMMIT_GUARD = "1" under [shell_environment_policy.set] to
|
|
778
|
+
status: "pass",
|
|
779
|
+
message: 'disabled in config.toml/default opt-out; set OMX_LORE_COMMIT_GUARD = "1" under [shell_environment_policy.set] to enable Lore commit enforcement',
|
|
747
780
|
};
|
|
748
781
|
}
|
|
749
782
|
return {
|
|
750
783
|
name: "Lore commit guard",
|
|
751
784
|
status: "pass",
|
|
752
|
-
message: "
|
|
785
|
+
message: "disabled by default",
|
|
753
786
|
};
|
|
754
787
|
}
|
|
755
788
|
catch {
|
|
@@ -760,6 +793,9 @@ async function checkLoreCommitGuard(configPath) {
|
|
|
760
793
|
};
|
|
761
794
|
}
|
|
762
795
|
}
|
|
796
|
+
function isExplicitLoreCommitGuardOptOut(value) {
|
|
797
|
+
return LORE_COMMIT_GUARD_EXPLICIT_OPT_OUT_VALUES.has(value.trim().toLowerCase());
|
|
798
|
+
}
|
|
763
799
|
async function checkNativeHooks(hooksPath, configPath) {
|
|
764
800
|
if (!existsSync(hooksPath)) {
|
|
765
801
|
if (existsSync(configPath)) {
|
|
@@ -817,6 +853,79 @@ async function checkNativeHooks(hooksPath, configPath) {
|
|
|
817
853
|
};
|
|
818
854
|
}
|
|
819
855
|
}
|
|
856
|
+
export async function checkNativeHookDistSmoke(options = {}) {
|
|
857
|
+
const packageRoot = options.packageRoot ?? getPackageRoot();
|
|
858
|
+
const nodePath = options.nodePath ?? process.execPath;
|
|
859
|
+
const runner = options.runner ?? spawnSync;
|
|
860
|
+
const scriptPath = join(packageRoot, "dist", "scripts", "codex-native-hook.js");
|
|
861
|
+
const packageJsonPath = join(packageRoot, "package.json");
|
|
862
|
+
let packageVersion = "current";
|
|
863
|
+
try {
|
|
864
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
865
|
+
if (typeof packageJson.version === "string" && packageJson.version.trim()) {
|
|
866
|
+
packageVersion = packageJson.version.trim();
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
catch {
|
|
870
|
+
// Keep the generic recovery copy when package metadata is not readable.
|
|
871
|
+
}
|
|
872
|
+
if (!existsSync(scriptPath)) {
|
|
873
|
+
return {
|
|
874
|
+
name: "Native hook dist smoke",
|
|
875
|
+
status: "fail",
|
|
876
|
+
message: `installed native hook script is missing at ${scriptPath}; reinstall oh-my-codex and run "omx setup --force"`,
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
const smokeCwd = await mkdtemp(join(tmpdir(), "omx-doctor-native-hook-dist-"));
|
|
880
|
+
try {
|
|
881
|
+
const payload = JSON.stringify({
|
|
882
|
+
hook_event_name: "UserPromptSubmit",
|
|
883
|
+
session_id: "omx-doctor-native-hook-dist-smoke",
|
|
884
|
+
transcript_path: join(smokeCwd, "nonexistent-transcript.jsonl"),
|
|
885
|
+
cwd: smokeCwd,
|
|
886
|
+
prompt: "doctor smoke test",
|
|
887
|
+
});
|
|
888
|
+
const result = runner(nodePath, [scriptPath], {
|
|
889
|
+
cwd: smokeCwd,
|
|
890
|
+
encoding: "utf-8",
|
|
891
|
+
env: {
|
|
892
|
+
...process.env,
|
|
893
|
+
OMX_NATIVE_HOOK_DOCTOR_SMOKE: "1",
|
|
894
|
+
OMX_ROOT: join(smokeCwd, ".omx-doctor-root"),
|
|
895
|
+
OMX_SESSION_ID: "omx-doctor-native-hook-dist-smoke",
|
|
896
|
+
OMX_SOURCE_CWD: smokeCwd,
|
|
897
|
+
OMX_STARTUP_CWD: smokeCwd,
|
|
898
|
+
},
|
|
899
|
+
input: payload,
|
|
900
|
+
timeout: 5_000,
|
|
901
|
+
});
|
|
902
|
+
if (result.error) {
|
|
903
|
+
return {
|
|
904
|
+
name: "Native hook dist smoke",
|
|
905
|
+
status: "fail",
|
|
906
|
+
message: `installed native hook dist smoke failed to run (${result.error.message}); reinstall oh-my-codex and run "omx setup --force"`,
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
if (result.status !== 0) {
|
|
910
|
+
const stderr = (result.stderr || "").trim();
|
|
911
|
+
const stdout = (result.stdout || "").trim();
|
|
912
|
+
const detail = stderr || stdout || `exit ${result.status}`;
|
|
913
|
+
return {
|
|
914
|
+
name: "Native hook dist smoke",
|
|
915
|
+
status: "fail",
|
|
916
|
+
message: `installed native hook dist failed a minimal UserPromptSubmit smoke (${detail}); reinstall with "npm install -g oh-my-codex@${packageVersion} --force --min-release-age=0 --before=" and then run "omx setup --force"`,
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
return {
|
|
920
|
+
name: "Native hook dist smoke",
|
|
921
|
+
status: "pass",
|
|
922
|
+
message: "installed dist/scripts/codex-native-hook.js parsed and accepted a minimal UserPromptSubmit payload",
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
finally {
|
|
926
|
+
await rm(smokeCwd, { recursive: true, force: true });
|
|
927
|
+
}
|
|
928
|
+
}
|
|
820
929
|
export function classifyPostCompactHookStdout(stdout) {
|
|
821
930
|
const trimmed = stdout.trim();
|
|
822
931
|
if (trimmed === "")
|