oh-my-codex 0.20.2 → 0.20.5
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 +36 -18
- package/Cargo.toml +1 -1
- package/README.md +28 -2
- package/crates/omx-runtime/Cargo.toml +4 -0
- package/crates/omx-runtime/src/main.rs +415 -2
- package/crates/omx-runtime/tests/execution.rs +483 -0
- package/crates/omx-runtime-core/src/dispatch.rs +96 -10
- package/crates/omx-runtime-core/src/engine.rs +839 -29
- package/crates/omx-runtime-core/src/lib.rs +8 -0
- package/dist/adapt/__tests__/herdr-target.test.d.ts +2 -0
- package/dist/adapt/__tests__/herdr-target.test.d.ts.map +1 -0
- package/dist/adapt/__tests__/herdr-target.test.js +72 -0
- package/dist/adapt/__tests__/herdr-target.test.js.map +1 -0
- package/dist/adapt/contracts.d.ts +1 -1
- package/dist/adapt/contracts.d.ts.map +1 -1
- package/dist/adapt/contracts.js +1 -1
- package/dist/adapt/contracts.js.map +1 -1
- package/dist/adapt/herdr/__tests__/authority.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/authority.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/authority.test.js +49 -0
- package/dist/adapt/herdr/__tests__/authority.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/bridge.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/bridge.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/bridge.test.js +176 -0
- package/dist/adapt/herdr/__tests__/bridge.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/sanitize.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/sanitize.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/sanitize.test.js +45 -0
- package/dist/adapt/herdr/__tests__/sanitize.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/semantic.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/semantic.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/semantic.test.js +130 -0
- package/dist/adapt/herdr/__tests__/semantic.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/seq-store.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/seq-store.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/seq-store.test.js +54 -0
- package/dist/adapt/herdr/__tests__/seq-store.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/socket-live.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/socket-live.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/socket-live.test.js +104 -0
- package/dist/adapt/herdr/__tests__/socket-live.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/team-map.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/team-map.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/team-map.test.js +46 -0
- package/dist/adapt/herdr/__tests__/team-map.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/transport.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/transport.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/transport.test.js +160 -0
- package/dist/adapt/herdr/__tests__/transport.test.js.map +1 -0
- package/dist/adapt/herdr/__tests__/wiring.test.d.ts +2 -0
- package/dist/adapt/herdr/__tests__/wiring.test.d.ts.map +1 -0
- package/dist/adapt/herdr/__tests__/wiring.test.js +118 -0
- package/dist/adapt/herdr/__tests__/wiring.test.js.map +1 -0
- package/dist/adapt/herdr/authority.d.ts +34 -0
- package/dist/adapt/herdr/authority.d.ts.map +1 -0
- package/dist/adapt/herdr/authority.js +71 -0
- package/dist/adapt/herdr/authority.js.map +1 -0
- package/dist/adapt/herdr/bridge.d.ts +84 -0
- package/dist/adapt/herdr/bridge.d.ts.map +1 -0
- package/dist/adapt/herdr/bridge.js +222 -0
- package/dist/adapt/herdr/bridge.js.map +1 -0
- package/dist/adapt/herdr/sanitize.d.ts +20 -0
- package/dist/adapt/herdr/sanitize.d.ts.map +1 -0
- package/dist/adapt/herdr/sanitize.js +70 -0
- package/dist/adapt/herdr/sanitize.js.map +1 -0
- package/dist/adapt/herdr/semantic.d.ts +67 -0
- package/dist/adapt/herdr/semantic.d.ts.map +1 -0
- package/dist/adapt/herdr/semantic.js +170 -0
- package/dist/adapt/herdr/semantic.js.map +1 -0
- package/dist/adapt/herdr/seq-store.d.ts +32 -0
- package/dist/adapt/herdr/seq-store.d.ts.map +1 -0
- package/dist/adapt/herdr/seq-store.js +126 -0
- package/dist/adapt/herdr/seq-store.js.map +1 -0
- package/dist/adapt/herdr/team-map.d.ts +30 -0
- package/dist/adapt/herdr/team-map.d.ts.map +1 -0
- package/dist/adapt/herdr/team-map.js +37 -0
- package/dist/adapt/herdr/team-map.js.map +1 -0
- package/dist/adapt/herdr/transport.d.ts +115 -0
- package/dist/adapt/herdr/transport.d.ts.map +1 -0
- package/dist/adapt/herdr/transport.js +260 -0
- package/dist/adapt/herdr/transport.js.map +1 -0
- package/dist/adapt/herdr/wiring.d.ts +24 -0
- package/dist/adapt/herdr/wiring.d.ts.map +1 -0
- package/dist/adapt/herdr/wiring.js +62 -0
- package/dist/adapt/herdr/wiring.js.map +1 -0
- package/dist/adapt/herdr.d.ts +19 -0
- package/dist/adapt/herdr.d.ts.map +1 -0
- package/dist/adapt/herdr.js +115 -0
- package/dist/adapt/herdr.js.map +1 -0
- package/dist/adapt/index.d.ts +4 -0
- package/dist/adapt/index.d.ts.map +1 -1
- package/dist/adapt/index.js +48 -0
- package/dist/adapt/index.js.map +1 -1
- package/dist/adapt/registry.d.ts.map +1 -1
- package/dist/adapt/registry.js +11 -0
- package/dist/adapt/registry.js.map +1 -1
- package/dist/agents/__tests__/definitions.test.js +81 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +25 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/native-config.d.ts +2 -1
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js.map +1 -1
- package/dist/auth/__tests__/hotswap.test.js +60 -1
- package/dist/auth/__tests__/hotswap.test.js.map +1 -1
- package/dist/auth/__tests__/storage.test.js +33 -1
- package/dist/auth/__tests__/storage.test.js.map +1 -1
- package/dist/auth/hotswap.d.ts +22 -2
- package/dist/auth/hotswap.d.ts.map +1 -1
- package/dist/auth/hotswap.js +107 -22
- package/dist/auth/hotswap.js.map +1 -1
- package/dist/auth/storage.js +1 -1
- package/dist/auth/storage.js.map +1 -1
- package/dist/autopilot/__tests__/ralplan-gate.test.js +86 -1333
- package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
- package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
- package/dist/autopilot/ralplan-gate.js +7 -6
- package/dist/autopilot/ralplan-gate.js.map +1 -1
- package/dist/cli/__tests__/agents-init.test.js +4 -23
- package/dist/cli/__tests__/agents-init.test.js.map +1 -1
- package/dist/cli/__tests__/api.test.js +61 -24
- package/dist/cli/__tests__/api.test.js.map +1 -1
- package/dist/cli/__tests__/auth.test.js +63 -7
- package/dist/cli/__tests__/auth.test.js.map +1 -1
- package/dist/cli/__tests__/codex-feature-probe.test.js +66 -1
- package/dist/cli/__tests__/codex-feature-probe.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +150 -2
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/detached-leader-teardown.test.d.ts +2 -0
- package/dist/cli/__tests__/detached-leader-teardown.test.d.ts.map +1 -0
- package/dist/cli/__tests__/detached-leader-teardown.test.js +473 -0
- package/dist/cli/__tests__/detached-leader-teardown.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-process-identity-readiness.test.js +103 -0
- package/dist/cli/__tests__/doctor-process-identity-readiness.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-state-root-binding.test.js +139 -0
- package/dist/cli/__tests__/doctor-state-root-binding.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +135 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/exec.test.js +211 -0
- package/dist/cli/__tests__/exec.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +878 -463
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +1290 -127
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-parity.test.js +8 -4
- package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
- package/dist/cli/__tests__/native-assets.test.js +398 -16
- package/dist/cli/__tests__/native-assets.test.js.map +1 -1
- package/dist/cli/__tests__/native-hook-claim-journal.test.js +132 -6
- package/dist/cli/__tests__/native-hook-claim-journal.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -3
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +3 -3
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js +49 -164
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js.map +1 -1
- package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts +2 -0
- package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralplan-child-binding-3212.test.js +56 -0
- package/dist/cli/__tests__/ralplan-child-binding-3212.test.js.map +1 -0
- package/dist/cli/__tests__/ralplan.test.js +107 -109
- package/dist/cli/__tests__/ralplan.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +11 -10
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +1118 -43
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/session-search-help.test.js +25 -1
- package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +8 -55
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +224 -7
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +93 -41
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +150 -8
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +117 -2
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +95 -4
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/__tests__/update.test.js +669 -177
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +33 -2
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/api.d.ts.map +1 -1
- package/dist/cli/api.js +9 -10
- package/dist/cli/api.js.map +1 -1
- package/dist/cli/codex-feature-probe.d.ts +16 -0
- package/dist/cli/codex-feature-probe.d.ts.map +1 -1
- package/dist/cli/codex-feature-probe.js +44 -0
- package/dist/cli/codex-feature-probe.js.map +1 -1
- package/dist/cli/codex-home.d.ts.map +1 -1
- package/dist/cli/codex-home.js +7 -4
- package/dist/cli/codex-home.js.map +1 -1
- package/dist/cli/doctor.d.ts +20 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +290 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +234 -12
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2409 -746
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp-parity.js +2 -2
- package/dist/cli/mcp-parity.js.map +1 -1
- package/dist/cli/native-assets.d.ts +25 -0
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +448 -51
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/native-hook-claim-journal.d.ts +20 -5
- package/dist/cli/native-hook-claim-journal.d.ts.map +1 -1
- package/dist/cli/native-hook-claim-journal.js +67 -32
- package/dist/cli/native-hook-claim-journal.js.map +1 -1
- package/dist/cli/package-manager-ownership.d.ts +63 -0
- package/dist/cli/package-manager-ownership.d.ts.map +1 -0
- package/dist/cli/package-manager-ownership.js +323 -0
- package/dist/cli/package-manager-ownership.js.map +1 -0
- package/dist/cli/ralph.js +2 -2
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/ralplan.d.ts +5 -7
- package/dist/cli/ralplan.d.ts.map +1 -1
- package/dist/cli/ralplan.js +83 -134
- package/dist/cli/ralplan.js.map +1 -1
- package/dist/cli/session-search.d.ts +5 -0
- package/dist/cli/session-search.d.ts.map +1 -1
- package/dist/cli/session-search.js +87 -0
- package/dist/cli/session-search.js.map +1 -1
- package/dist/cli/setup-preferences.d.ts +15 -0
- package/dist/cli/setup-preferences.d.ts.map +1 -1
- package/dist/cli/setup-preferences.js +27 -1
- package/dist/cli/setup-preferences.js.map +1 -1
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +119 -47
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +52 -9
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/ultragoal.d.ts.map +1 -1
- package/dist/cli/ultragoal.js +2 -2
- package/dist/cli/ultragoal.js.map +1 -1
- package/dist/cli/uninstall.d.ts +9 -0
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +71 -30
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/cli/update-worker.d.ts +2 -0
- package/dist/cli/update-worker.d.ts.map +1 -0
- package/dist/cli/update-worker.js +142 -0
- package/dist/cli/update-worker.js.map +1 -0
- package/dist/cli/update.d.ts +14 -22
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +192 -241
- package/dist/cli/update.js.map +1 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +503 -30
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +5 -3
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/__tests__/models.test.js +67 -3
- package/dist/config/__tests__/models.test.js.map +1 -1
- package/dist/config/generator.d.ts +27 -21
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +610 -152
- package/dist/config/generator.js.map +1 -1
- package/dist/config/models.d.ts +12 -2
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +15 -1
- package/dist/config/models.js.map +1 -1
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +25 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.d.ts +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js +2 -0
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +5 -3
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +27 -4
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts +2 -0
- package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js +172 -0
- package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +176 -37
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +402 -545
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +39 -4
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +161 -26
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +27 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +10 -118
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js +7 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +533 -14
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +159 -24
- 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 +482 -32
- package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +2 -1
- package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +68 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +7 -1
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +44 -4
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js +9 -0
- package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/session.test.js +3130 -365
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/agents-overlay.js +1 -1
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js +108 -2
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/sdk.test.js +151 -1
- package/dist/hooks/extensibility/__tests__/sdk.test.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +20 -3
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/extensibility/plugin-runner.js +1 -0
- package/dist/hooks/extensibility/plugin-runner.js.map +1 -1
- package/dist/hooks/extensibility/runtime.d.ts.map +1 -1
- package/dist/hooks/extensibility/runtime.js.map +1 -1
- package/dist/hooks/extensibility/sdk/paths.d.ts +1 -1
- package/dist/hooks/extensibility/sdk/paths.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk/paths.js +2 -2
- package/dist/hooks/extensibility/sdk/paths.js.map +1 -1
- package/dist/hooks/extensibility/sdk/runtime-state.d.ts +1 -1
- package/dist/hooks/extensibility/sdk/runtime-state.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk/runtime-state.js +55 -15
- package/dist/hooks/extensibility/sdk/runtime-state.js.map +1 -1
- package/dist/hooks/extensibility/sdk.d.ts +1 -0
- package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk.js +1 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/extensibility/types.d.ts +7 -0
- package/dist/hooks/extensibility/types.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +10 -3
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +116 -20
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/session.d.ts +204 -14
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +1500 -223
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +6 -6
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +26 -16
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +83 -78
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +36 -31
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +155 -198
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/tmux.d.ts +42 -4
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +1017 -139
- package/dist/hud/tmux.js.map +1 -1
- package/dist/leader/__tests__/contract.test.js +124 -37
- package/dist/leader/__tests__/contract.test.js.map +1 -1
- package/dist/leader/contract.d.ts +17 -6
- package/dist/leader/contract.d.ts.map +1 -1
- package/dist/leader/contract.js +102 -26
- package/dist/leader/contract.js.map +1 -1
- package/dist/mcp/__tests__/code-intel-server.test.js +31 -3
- package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -1
- package/dist/mcp/__tests__/hermes-bridge.test.js +17 -0
- package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
- package/dist/mcp/__tests__/server-lifecycle.test.js +4 -4
- package/dist/mcp/__tests__/state-paths.test.js +735 -4
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +1 -1
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/__tests__/trace-server.test.js +2 -2
- package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
- package/dist/mcp/__tests__/wiki-server.test.js +18 -0
- package/dist/mcp/__tests__/wiki-server.test.js.map +1 -1
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +13 -3
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/mcp/hermes-bridge.d.ts.map +1 -1
- package/dist/mcp/hermes-bridge.js +2 -2
- package/dist/mcp/hermes-bridge.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +78 -4
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +543 -40
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts +4 -4
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/wiki-server.d.ts +11 -0
- package/dist/mcp/wiki-server.d.ts.map +1 -1
- package/dist/mcp/wiki-server.js +9 -2
- package/dist/mcp/wiki-server.js.map +1 -1
- package/dist/modes/__tests__/base-autopilot-gates.test.js +36 -7
- package/dist/modes/__tests__/base-autopilot-gates.test.js.map +1 -1
- package/dist/modes/__tests__/base-multi-state-compat.test.js +1 -1
- package/dist/modes/__tests__/base-multi-state-compat.test.js.map +1 -1
- package/dist/modes/__tests__/base-session-scope.test.js +17 -8
- package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js +4 -4
- package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
- package/dist/modes/base.d.ts +5 -5
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +76 -21
- package/dist/modes/base.js.map +1 -1
- package/dist/native-assets/archive.d.ts +17 -0
- package/dist/native-assets/archive.d.ts.map +1 -0
- package/dist/native-assets/archive.js +238 -0
- package/dist/native-assets/archive.js.map +1 -0
- package/dist/native-assets/policy.d.ts +42 -0
- package/dist/native-assets/policy.d.ts.map +1 -0
- package/dist/native-assets/policy.js +155 -0
- package/dist/native-assets/policy.js.map +1 -0
- package/dist/notifications/temp-contract.d.ts.map +1 -1
- package/dist/notifications/temp-contract.js +4 -0
- package/dist/notifications/temp-contract.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +164 -42
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +72 -155
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +124 -18
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
- package/dist/pipeline/stages/ralplan.js +36 -8
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/ralplan/__tests__/consensus-gate.test.js +73 -1316
- package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
- package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts +2 -0
- package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts.map +1 -0
- package/dist/ralplan/__tests__/documented-leader-preflight.test.js +335 -0
- package/dist/ralplan/__tests__/documented-leader-preflight.test.js.map +1 -0
- package/dist/ralplan/__tests__/runtime.test.js +85 -101
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +9 -1
- package/dist/ralplan/consensus-gate.d.ts.map +1 -1
- package/dist/ralplan/consensus-gate.js +82 -338
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/ralplan/documented-leader-preflight.d.ts +41 -0
- package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -0
- package/dist/ralplan/documented-leader-preflight.js +360 -0
- package/dist/ralplan/documented-leader-preflight.js.map +1 -0
- package/dist/ralplan/runtime.d.ts +2 -1
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +67 -168
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/runtime/__tests__/bridge.test.js +42 -1
- package/dist/runtime/__tests__/bridge.test.js.map +1 -1
- package/dist/runtime/bridge.d.ts +12 -0
- package/dist/runtime/bridge.d.ts.map +1 -1
- package/dist/runtime/bridge.js +52 -1
- package/dist/runtime/bridge.js.map +1 -1
- package/dist/runtime/run-state.d.ts +5 -1
- package/dist/runtime/run-state.d.ts.map +1 -1
- package/dist/runtime/run-state.js +15 -8
- package/dist/runtime/run-state.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +16323 -8978
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js +225 -0
- package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js.map +1 -0
- package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js +188 -0
- package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js.map +1 -0
- package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js +259 -0
- package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js.map +1 -0
- package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js +491 -0
- package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js.map +1 -0
- package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js +708 -0
- package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js.map +1 -0
- package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts +2 -0
- package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js +208 -0
- package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js.map +1 -0
- package/dist/scripts/__tests__/notify-state-io.test.js +26 -0
- package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-tmux-injection.test.js +23 -1
- package/dist/scripts/__tests__/notify-tmux-injection.test.js.map +1 -1
- package/dist/scripts/__tests__/postinstall.test.js +19 -1
- package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
- package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts +2 -0
- package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/reasoning-artifact-contract.test.js +108 -0
- package/dist/scripts/__tests__/reasoning-artifact-contract.test.js.map +1 -0
- package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js +63 -173
- package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js.map +1 -1
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js +74 -159
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js.map +1 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js +404 -13
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
- package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts +2 -0
- package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/verify-native-release-assets.test.js +235 -0
- package/dist/scripts/__tests__/verify-native-release-assets.test.js.map +1 -0
- package/dist/scripts/codex-native-hook.d.ts +53 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +14448 -1480
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts +9 -0
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +35 -12
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/generate-native-release-manifest.js +80 -51
- package/dist/scripts/generate-native-release-manifest.js.map +1 -1
- package/dist/scripts/notify-fallback-watcher.js +78 -115
- 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 +74 -3
- package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
- package/dist/scripts/notify-hook/state-io.js +5 -0
- package/dist/scripts/notify-hook/state-io.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts +9 -0
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +234 -79
- 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 +71 -16
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts +12 -4
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +365 -44
- 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 +42 -21
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker.d.ts +3 -0
- package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +82 -33
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts +1 -0
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +32 -3
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/notify-hook.js +79 -82
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/postinstall-advisory.d.ts +14 -0
- package/dist/scripts/postinstall-advisory.d.ts.map +1 -0
- package/dist/scripts/postinstall-advisory.js +49 -0
- package/dist/scripts/postinstall-advisory.js.map +1 -0
- package/dist/scripts/postinstall.d.ts +1 -1
- package/dist/scripts/postinstall.d.ts.map +1 -1
- package/dist/scripts/postinstall.js +1 -1
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/scripts/smoke-packed-install.d.ts +80 -4
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +3162 -26
- package/dist/scripts/smoke-packed-install.js.map +1 -1
- package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js +16 -1
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/scripts/verify-native-release-assets.js +37 -23
- package/dist/scripts/verify-native-release-assets.js.map +1 -1
- package/dist/state/__tests__/mode-state-context.test.js +61 -0
- package/dist/state/__tests__/mode-state-context.test.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +462 -850
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +400 -2
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/mode-state-context.d.ts +8 -0
- package/dist/state/mode-state-context.d.ts.map +1 -1
- package/dist/state/mode-state-context.js +73 -0
- package/dist/state/mode-state-context.js.map +1 -1
- package/dist/state/operations.d.ts +3 -0
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +144 -40
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts +18 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +420 -23
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.d.ts +3 -0
- package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +10 -4
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +3 -1
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.js +53 -247
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.js.map +1 -1
- package/dist/subagents/__tests__/tracker.test.js +837 -1048
- package/dist/subagents/__tests__/tracker.test.js.map +1 -1
- package/dist/subagents/tracker.d.ts +58 -135
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +811 -632
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/api-interop.test.js +91 -1
- package/dist/team/__tests__/api-interop.test.js.map +1 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.js +58 -17
- package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
- package/dist/team/__tests__/idle-nudge.test.js +45 -15
- package/dist/team/__tests__/idle-nudge.test.js.map +1 -1
- package/dist/team/__tests__/mcp-comm.test.js +197 -30
- package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +110 -3
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/notice-ledger.test.d.ts +2 -0
- package/dist/team/__tests__/notice-ledger.test.d.ts.map +1 -0
- package/dist/team/__tests__/notice-ledger.test.js +131 -0
- package/dist/team/__tests__/notice-ledger.test.js.map +1 -0
- package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts +2 -0
- package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts.map +1 -0
- package/dist/team/__tests__/pane-teardown-residue-e2e.test.js +410 -0
- package/dist/team/__tests__/pane-teardown-residue-e2e.test.js.map +1 -0
- package/dist/team/__tests__/phase-controller.test.js +20 -0
- package/dist/team/__tests__/phase-controller.test.js.map +1 -1
- package/dist/team/__tests__/runtime-cli.test.js +9 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +3963 -428
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +2405 -203
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.js +117 -2
- package/dist/team/__tests__/state-root.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +804 -36
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/team-ops-contract.test.js +6 -0
- package/dist/team/__tests__/team-ops-contract.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +4099 -1039
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-source-authority-realtmux.test.js +149 -0
- package/dist/team/__tests__/tmux-source-authority-realtmux.test.js.map +1 -0
- package/dist/team/__tests__/tmux-test-fixture.d.ts +69 -0
- package/dist/team/__tests__/tmux-test-fixture.d.ts.map +1 -1
- package/dist/team/__tests__/tmux-test-fixture.js +242 -15
- package/dist/team/__tests__/tmux-test-fixture.js.map +1 -1
- package/dist/team/__tests__/tmux-test-fixture.test.js +177 -1
- package/dist/team/__tests__/tmux-test-fixture.test.js.map +1 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +53 -44
- package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +6 -0
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +15 -9
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/exact-pane.d.ts +23 -0
- package/dist/team/exact-pane.d.ts.map +1 -0
- package/dist/team/exact-pane.js +133 -0
- package/dist/team/exact-pane.js.map +1 -0
- package/dist/team/idle-nudge.d.ts +12 -1
- package/dist/team/idle-nudge.d.ts.map +1 -1
- package/dist/team/idle-nudge.js +41 -14
- package/dist/team/idle-nudge.js.map +1 -1
- package/dist/team/model-contract.d.ts +2 -5
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +59 -17
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/notice-ledger.d.ts +54 -0
- package/dist/team/notice-ledger.d.ts.map +1 -0
- package/dist/team/notice-ledger.js +259 -0
- package/dist/team/notice-ledger.js.map +1 -0
- package/dist/team/phase-controller.d.ts.map +1 -1
- package/dist/team/phase-controller.js +2 -0
- package/dist/team/phase-controller.js.map +1 -1
- package/dist/team/runtime.d.ts +4 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +1527 -291
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +13 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +1503 -387
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/dispatch.d.ts.map +1 -1
- package/dist/team/state/dispatch.js +26 -8
- package/dist/team/state/dispatch.js.map +1 -1
- package/dist/team/state/locks.d.ts.map +1 -1
- package/dist/team/state/locks.js +61 -13
- package/dist/team/state/locks.js.map +1 -1
- package/dist/team/state/monitor.d.ts +10 -0
- package/dist/team/state/monitor.d.ts.map +1 -1
- package/dist/team/state/monitor.js +13 -0
- package/dist/team/state/monitor.js.map +1 -1
- package/dist/team/state/tasks.d.ts.map +1 -1
- package/dist/team/state/tasks.js +4 -3
- package/dist/team/state/tasks.js.map +1 -1
- package/dist/team/state/types.d.ts +15 -0
- package/dist/team/state/types.d.ts.map +1 -1
- package/dist/team/state/types.js.map +1 -1
- package/dist/team/state-root.d.ts +12 -0
- package/dist/team/state-root.d.ts.map +1 -1
- package/dist/team/state-root.js +177 -0
- package/dist/team/state-root.js.map +1 -1
- package/dist/team/state.d.ts +85 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +672 -129
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +5 -0
- 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 +163 -27
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +1682 -376
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worktree.d.ts.map +1 -1
- package/dist/team/worktree.js +4 -0
- package/dist/team/worktree.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +950 -2
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/__tests__/docs-contract.test.js +1 -0
- package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts +35 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +232 -46
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/utils/__tests__/file-durability.test.d.ts +2 -0
- package/dist/utils/__tests__/file-durability.test.d.ts.map +1 -0
- package/dist/utils/__tests__/file-durability.test.js +114 -0
- package/dist/utils/__tests__/file-durability.test.js.map +1 -0
- package/dist/utils/__tests__/paths.test.js +21 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/file-durability.d.ts +25 -0
- package/dist/utils/file-durability.d.ts.map +1 -0
- package/dist/utils/file-durability.js +67 -0
- package/dist/utils/file-durability.js.map +1 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +14 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +49 -4
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +3 -0
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +1 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +60 -0
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/dist/verification/__tests__/native-release-manifest.test.js +157 -4
- package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -1
- package/dist/wiki/lint.d.ts +4 -1
- package/dist/wiki/lint.d.ts.map +1 -1
- package/dist/wiki/lint.js +3 -2
- package/dist/wiki/lint.js.map +1 -1
- package/package.json +13 -5
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +105 -17
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +13 -5
- package/plugins/oh-my-codex/skills/cancel/SKILL.md +30 -85
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +6 -4
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +16 -17
- package/plugins/oh-my-codex/skills/team/SKILL.md +13 -9
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +3 -2
- package/skills/autopilot/SKILL.md +13 -5
- package/skills/cancel/SKILL.md +30 -85
- package/skills/ralph/SKILL.md +6 -4
- package/skills/ralplan/SKILL.md +16 -17
- package/skills/team/SKILL.md +13 -9
- package/skills/ultragoal/SKILL.md +3 -2
- package/src/scripts/__tests__/codex-native-hook.test.ts +8831 -951
- package/src/scripts/__tests__/issue-3293-callsite-parity.test.ts +187 -0
- package/src/scripts/__tests__/issue-3293-cancel-transaction.test.ts +189 -0
- package/src/scripts/__tests__/issue-3293-hook-owned-cancel.test.ts +187 -0
- package/src/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.ts +591 -0
- package/src/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.ts +701 -0
- package/src/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.ts +211 -0
- package/src/scripts/__tests__/notify-state-io.test.ts +29 -0
- package/src/scripts/__tests__/notify-tmux-injection.test.ts +26 -1
- package/src/scripts/__tests__/postinstall.test.ts +23 -1
- package/src/scripts/__tests__/reasoning-artifact-contract.test.ts +129 -0
- package/src/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.ts +67 -185
- package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +79 -178
- package/src/scripts/__tests__/smoke-packed-install.test.ts +525 -16
- package/src/scripts/__tests__/verify-native-release-assets.test.ts +240 -0
- package/src/scripts/codex-native-hook.ts +14238 -1429
- package/src/scripts/codex-native-pre-post.ts +43 -12
- package/src/scripts/generate-native-release-manifest.ts +83 -79
- package/src/scripts/notify-fallback-watcher.ts +91 -122
- package/src/scripts/notify-hook/auto-nudge.ts +71 -3
- package/src/scripts/notify-hook/state-io.ts +11 -0
- package/src/scripts/notify-hook/team-dispatch.ts +242 -75
- package/src/scripts/notify-hook/team-leader-nudge.ts +72 -22
- package/src/scripts/notify-hook/team-tmux-guard.ts +366 -39
- package/src/scripts/notify-hook/team-worker-stop.ts +43 -20
- package/src/scripts/notify-hook/team-worker.ts +82 -31
- package/src/scripts/notify-hook/tmux-injection.ts +33 -3
- package/src/scripts/notify-hook.ts +84 -82
- package/src/scripts/postinstall-advisory.ts +67 -0
- package/src/scripts/postinstall.ts +1 -1
- package/src/scripts/smoke-packed-install.ts +3608 -39
- package/src/scripts/sync-plugin-mirror.ts +17 -1
- package/src/scripts/verify-native-release-assets.ts +39 -31
- package/templates/AGENTS.md +1 -0
- package/dist/subagents/__tests__/adapted-role-binding.test.d.ts +0 -2
- package/dist/subagents/__tests__/adapted-role-binding.test.d.ts.map +0 -1
- package/dist/subagents/__tests__/adapted-role-binding.test.js +0 -988
- package/dist/subagents/__tests__/adapted-role-binding.test.js.map +0 -1
- package/dist/subagents/adapted-role-binding.d.ts +0 -17
- package/dist/subagents/adapted-role-binding.d.ts.map +0 -1
- package/dist/subagents/adapted-role-binding.js +0 -75
- package/dist/subagents/adapted-role-binding.js.map +0 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { describe, it } from "node:test";
|
|
7
|
+
import { DEEP_INTERVIEW_HANDOFF_REJECT_DETAILS, evaluateDeepInterviewRalplanHandoffCommand, } from "../../scripts/codex-native-hook.js";
|
|
8
|
+
const PROJECT_ROOT = join(dirname(new URL(import.meta.url).pathname), "../../..");
|
|
9
|
+
const HANDOFF_MARKER = "<!-- OMX:AUTOPILOT:DEEP-INTERVIEW-RALPLAN-HANDOFF:v1 -->";
|
|
10
|
+
const SESSION_ID = "issue-3293-session";
|
|
11
|
+
function handoffPayload(cwd) {
|
|
12
|
+
return {
|
|
13
|
+
mode: "autopilot",
|
|
14
|
+
active: true,
|
|
15
|
+
current_phase: "ralplan",
|
|
16
|
+
session_id: SESSION_ID,
|
|
17
|
+
workingDirectory: cwd,
|
|
18
|
+
state: {
|
|
19
|
+
deep_interview_gate: {
|
|
20
|
+
status: "complete",
|
|
21
|
+
rationale: "The requirements are complete.",
|
|
22
|
+
handoff_summary: "The interview is ready for planning.",
|
|
23
|
+
},
|
|
24
|
+
handoff_artifacts: {
|
|
25
|
+
deep_interview: ".omx/specs/deep-interview-handoff.md",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function handoffCommand(payload) {
|
|
31
|
+
return `omx state write --input '${JSON.stringify(payload)}' --json`;
|
|
32
|
+
}
|
|
33
|
+
function documentedHandoffCommand() {
|
|
34
|
+
const skill = readFileSync(join(PROJECT_ROOT, "skills/autopilot/SKILL.md"), "utf-8");
|
|
35
|
+
const markerOffset = skill.indexOf(HANDOFF_MARKER);
|
|
36
|
+
assert.notEqual(markerOffset, -1, "the stable handoff marker must be documented");
|
|
37
|
+
const fence = skill.slice(markerOffset).match(/^<!--[\s\S]*?-->\n```bash\n([\s\S]*?)\n```/);
|
|
38
|
+
assert.ok(fence?.[1], "the marker must immediately precede an executable bash fence");
|
|
39
|
+
return fence[1];
|
|
40
|
+
}
|
|
41
|
+
async function withFixture(action) {
|
|
42
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-issue-3293-handoff-"));
|
|
43
|
+
try {
|
|
44
|
+
await mkdir(join(cwd, ".omx", "specs"), { recursive: true });
|
|
45
|
+
await writeFile(join(cwd, ".omx", "specs", "deep-interview-handoff.md"), "# Clarified requirements\n");
|
|
46
|
+
await action(cwd);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
await rm(cwd, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function assertValueFreeDiagnostic(reason, cwd) {
|
|
53
|
+
const detail = DEEP_INTERVIEW_HANDOFF_REJECT_DETAILS[reason];
|
|
54
|
+
assert.ok(detail.length > 0);
|
|
55
|
+
assert.equal(detail.includes(cwd), false);
|
|
56
|
+
assert.equal(detail.includes(SESSION_ID), false);
|
|
57
|
+
assert.equal(detail.includes("deep-interview-handoff.md"), false);
|
|
58
|
+
}
|
|
59
|
+
describe("issue #3293 Autopilot deep-interview handoff", () => {
|
|
60
|
+
it("admits the exact stable-marked documented handoff command", async () => {
|
|
61
|
+
await withFixture(async (cwd) => {
|
|
62
|
+
const command = documentedHandoffCommand();
|
|
63
|
+
const result = evaluateDeepInterviewRalplanHandoffCommand(cwd, command, SESSION_ID);
|
|
64
|
+
assert.deepEqual(result, { allowed: true });
|
|
65
|
+
assert.match(command, /"current_phase":"ralplan"/);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
const rejectionCases = [
|
|
69
|
+
{
|
|
70
|
+
name: "reports session_id_missing",
|
|
71
|
+
reason: "session_id_missing",
|
|
72
|
+
command: (cwd) => {
|
|
73
|
+
const payload = handoffPayload(cwd);
|
|
74
|
+
delete payload.session_id;
|
|
75
|
+
return handoffCommand(payload);
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "reports session_id_mismatch",
|
|
80
|
+
reason: "session_id_mismatch",
|
|
81
|
+
command: (cwd) => handoffCommand({ ...handoffPayload(cwd), session_id: "other-session" }),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "reports session_alias_conflict",
|
|
85
|
+
reason: "session_alias_conflict",
|
|
86
|
+
command: (cwd) => handoffCommand({ ...handoffPayload(cwd), codex_session_id: "other-session" }),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "reports working_directory_missing",
|
|
90
|
+
reason: "working_directory_missing",
|
|
91
|
+
command: (cwd) => {
|
|
92
|
+
const payload = handoffPayload(cwd);
|
|
93
|
+
delete payload.workingDirectory;
|
|
94
|
+
return handoffCommand(payload);
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "reports working_directory_mismatch",
|
|
99
|
+
reason: "working_directory_mismatch",
|
|
100
|
+
command: (cwd) => handoffCommand({ ...handoffPayload(cwd), workingDirectory: join(cwd, "other") }),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "reports gate_incomplete",
|
|
104
|
+
reason: "gate_incomplete",
|
|
105
|
+
command: (cwd) => handoffCommand({ ...handoffPayload(cwd), state: {} }),
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: "reports durable_evidence_missing",
|
|
109
|
+
reason: "durable_evidence_missing",
|
|
110
|
+
command: (cwd) => handoffCommand(handoffPayload(cwd)),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "reports unsafe_transport",
|
|
114
|
+
reason: "unsafe_transport",
|
|
115
|
+
command: (cwd) => `${handoffCommand(handoffPayload(cwd))} $(printf unsafe)`,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "reports artifact_target_not_allowed",
|
|
119
|
+
reason: "artifact_target_not_allowed",
|
|
120
|
+
command: (cwd) => `${handoffCommand(handoffPayload(cwd))} > .omx/specs/allowed.md 2> forbidden.txt`,
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
for (const testCase of rejectionCases) {
|
|
124
|
+
it(testCase.name, async () => {
|
|
125
|
+
if (testCase.reason === "durable_evidence_missing") {
|
|
126
|
+
const cwd = await mkdtemp(join(tmpdir(), "omx-issue-3293-no-evidence-"));
|
|
127
|
+
try {
|
|
128
|
+
const result = evaluateDeepInterviewRalplanHandoffCommand(cwd, testCase.command(cwd), SESSION_ID);
|
|
129
|
+
assert.equal(result.allowed, false);
|
|
130
|
+
assert.equal(result.reason, testCase.reason);
|
|
131
|
+
assertValueFreeDiagnostic(testCase.reason, cwd);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
await rm(cwd, { recursive: true, force: true });
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
await withFixture(async (cwd) => {
|
|
139
|
+
const result = evaluateDeepInterviewRalplanHandoffCommand(cwd, testCase.command(cwd), SESSION_ID);
|
|
140
|
+
assert.equal(result.allowed, false);
|
|
141
|
+
assert.equal(result.reason, testCase.reason);
|
|
142
|
+
assertValueFreeDiagnostic(testCase.reason, cwd);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
it("preserves boolean admission parity for representative accepted and rejected commands", async () => {
|
|
147
|
+
await withFixture(async (cwd) => {
|
|
148
|
+
const accepted = handoffCommand(handoffPayload(cwd));
|
|
149
|
+
const rejected = handoffCommand({ ...handoffPayload(cwd), session_id: "other-session" });
|
|
150
|
+
assert.equal(evaluateDeepInterviewRalplanHandoffCommand(cwd, accepted, SESSION_ID).allowed, true);
|
|
151
|
+
assert.equal(evaluateDeepInterviewRalplanHandoffCommand(cwd, rejected, SESSION_ID).allowed, false);
|
|
152
|
+
const documentedCommand = documentedHandoffCommand();
|
|
153
|
+
assert.deepEqual(evaluateDeepInterviewRalplanHandoffCommand(cwd, documentedCommand, SESSION_ID), { allowed: true });
|
|
154
|
+
const unexpectedExpansion = documentedCommand.replace("${PWD:?working directory required}", "${UNTRUSTED_WORKING_DIRECTORY}");
|
|
155
|
+
assert.deepEqual(evaluateDeepInterviewRalplanHandoffCommand(cwd, unexpectedExpansion, SESSION_ID), {
|
|
156
|
+
allowed: false,
|
|
157
|
+
reason: "unsafe_transport",
|
|
158
|
+
});
|
|
159
|
+
assert.deepEqual(evaluateDeepInterviewRalplanHandoffCommand(cwd, handoffCommand({
|
|
160
|
+
...handoffPayload(cwd),
|
|
161
|
+
unexpected: true,
|
|
162
|
+
}), SESSION_ID), {
|
|
163
|
+
allowed: false,
|
|
164
|
+
reason: "unsafe_transport",
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
it("keeps the plugin Autopilot skill mirror byte-identical", { skip: existsSync(join(PROJECT_ROOT, "dist", "scripts", "sync-plugin-mirror.js")) ? false : "requires the built sync-plugin mirror runner" }, () => {
|
|
169
|
+
assert.equal(readFileSync(join(PROJECT_ROOT, "plugins/oh-my-codex/skills/autopilot/SKILL.md"), "utf-8"), readFileSync(join(PROJECT_ROOT, "skills/autopilot/SKILL.md"), "utf-8"));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=issue-3293-autopilot-handoff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-3293-autopilot-handoff.test.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/issue-3293-autopilot-handoff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,10 @@ import { mkdtemp, mkdir, readFile, rm, symlink, writeFile } from 'node:fs/promis
|
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { detectKeywords, detectPrimaryKeyword, classifyKeywordInput, KEYWORD_INERT_DIAGNOSTIC_ORDER, recordSkillActivation, DEEP_INTERVIEW_STATE_FILE, DEEP_INTERVIEW_BLOCKED_APPROVAL_INPUTS, DEEP_INTERVIEW_INPUT_LOCK_MESSAGE, persistDeepInterviewModeState, } from '../keyword-detector.js';
|
|
8
|
-
import { SKILL_ACTIVE_STATE_FILE } from '../../state/skill-active.js';
|
|
8
|
+
import { readSkillActiveState, SKILL_ACTIVE_STATE_FILE } from '../../state/skill-active.js';
|
|
9
9
|
import { isUnderspecifiedForExecution, applyRalplanGate } from '../keyword-detector.js';
|
|
10
|
+
import { neutralizeOwnedRoutingRalplan } from '../../ralplan/documented-leader-preflight.js';
|
|
11
|
+
import { readActiveWorkflowModes } from '../../state/workflow-transition.js';
|
|
10
12
|
import { EXPLICIT_SKILL_ALIASES, getExplicitSkillDefinition, KEYWORD_TRIGGER_DEFINITIONS, } from '../keyword-registry.js';
|
|
11
13
|
import { evaluateResolvedPromptTurn } from '../prompt-session-provenance.js';
|
|
12
14
|
async function withIsolatedHome(prefix, run) {
|
|
@@ -27,6 +29,12 @@ async function withIsolatedHome(prefix, run) {
|
|
|
27
29
|
const AUTOPILOT_TEST_NOW = '2026-05-30T00:00:00.000Z';
|
|
28
30
|
const AUTOPILOT_TEST_STARTED_AT = '2026-05-29T00:00:00.000Z';
|
|
29
31
|
const AUTOPILOT_TEST_UPDATED_AT = '2026-05-29T00:10:00.000Z';
|
|
32
|
+
const availableAutopilotReceiptVerifier = {
|
|
33
|
+
getRalplanHostConsensusReceiptVerifierCapability: () => 'available',
|
|
34
|
+
};
|
|
35
|
+
function recordSkillActivationWithAvailableAutopilotReceipt(input) {
|
|
36
|
+
return recordSkillActivation(input, availableAutopilotReceiptVerifier);
|
|
37
|
+
}
|
|
30
38
|
async function writeActiveAutopilotSkillState(stateDir, sessionId, phase = 'ralplan') {
|
|
31
39
|
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
32
40
|
await writeFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), JSON.stringify({
|
|
@@ -45,7 +53,7 @@ async function readAutopilotModeState(stateDir, sessionId) {
|
|
|
45
53
|
return JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), 'utf-8'));
|
|
46
54
|
}
|
|
47
55
|
async function continueAutopilotTestState(stateDir, cwd, sessionId, suffix, text = 'continue') {
|
|
48
|
-
await
|
|
56
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
49
57
|
stateDir,
|
|
50
58
|
sourceCwd: cwd,
|
|
51
59
|
text,
|
|
@@ -1794,6 +1802,61 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
1794
1802
|
await rm(root, { recursive: true, force: true });
|
|
1795
1803
|
}
|
|
1796
1804
|
});
|
|
1805
|
+
it('fails fresh native Autopilot before deep-interview when receipt verification is unavailable', async () => {
|
|
1806
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-autopilot-preflight-'));
|
|
1807
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
1808
|
+
try {
|
|
1809
|
+
const result = await recordSkillActivation({
|
|
1810
|
+
stateDir,
|
|
1811
|
+
sourceCwd: cwd,
|
|
1812
|
+
text: '$autopilot implement the task',
|
|
1813
|
+
sessionId: 'sess-autopilot-preflight',
|
|
1814
|
+
nowIso: '2026-07-23T00:00:00.000Z',
|
|
1815
|
+
});
|
|
1816
|
+
assert.equal(result?.active, false);
|
|
1817
|
+
assert.equal(result?.phase, 'failed');
|
|
1818
|
+
assert.equal(result?.error, 'documented_host_consensus_receipt_unavailable');
|
|
1819
|
+
assert.deepEqual(result?.active_skills, []);
|
|
1820
|
+
const modeState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-autopilot-preflight', 'autopilot-state.json'), 'utf-8'));
|
|
1821
|
+
assert.equal(modeState.active, false);
|
|
1822
|
+
assert.equal(modeState.current_phase, 'failed');
|
|
1823
|
+
assert.equal(modeState.error, 'documented_host_consensus_receipt_unavailable');
|
|
1824
|
+
assert.equal(existsSync(join(stateDir, 'sessions', 'sess-autopilot-preflight', 'deep-interview-state.json')), false);
|
|
1825
|
+
assert.equal(existsSync(join(stateDir, 'sessions', 'sess-autopilot-preflight', 'ultragoal-state.json')), false);
|
|
1826
|
+
}
|
|
1827
|
+
finally {
|
|
1828
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1829
|
+
}
|
|
1830
|
+
});
|
|
1831
|
+
it('byte-preserves an active native Autopilot session when receipt verification is unavailable', async () => {
|
|
1832
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-active-autopilot-preflight-'));
|
|
1833
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
1834
|
+
const sessionId = 'sess-active-autopilot-preflight';
|
|
1835
|
+
const sessionDir = join(stateDir, 'sessions', sessionId);
|
|
1836
|
+
const statePath = join(sessionDir, SKILL_ACTIVE_STATE_FILE);
|
|
1837
|
+
const modePath = join(sessionDir, 'autopilot-state.json');
|
|
1838
|
+
const rawState = '{"version":1,"active":true,"skill":"autopilot","keyword":"$autopilot","phase":"ralplan","activated_at":"2026-07-22T00:00:00.000Z","updated_at":"2026-07-22T00:00:00.000Z","source":"keyword-detector","session_id":"sess-active-autopilot-preflight","metadata":{"preserve":true},"active_skills":[{"skill":"autopilot","active":true,"phase":"ralplan","session_id":"sess-active-autopilot-preflight"}]}\n';
|
|
1839
|
+
const rawMode = '{"active":true,"mode":"autopilot","current_phase":"ralplan","session_id":"sess-active-autopilot-preflight","metadata":{"preserve":true},"handoff_artifacts":{"ralplan":{"path":".omx/plans/existing.md"}}}\n';
|
|
1840
|
+
try {
|
|
1841
|
+
await mkdir(sessionDir, { recursive: true });
|
|
1842
|
+
await writeFile(statePath, rawState);
|
|
1843
|
+
await writeFile(modePath, rawMode);
|
|
1844
|
+
const result = await recordSkillActivation({
|
|
1845
|
+
stateDir,
|
|
1846
|
+
sourceCwd: cwd,
|
|
1847
|
+
text: '$autopilot continue',
|
|
1848
|
+
sessionId,
|
|
1849
|
+
nowIso: '2026-07-23T00:00:00.000Z',
|
|
1850
|
+
});
|
|
1851
|
+
assert.equal(result?.active, true);
|
|
1852
|
+
assert.equal(result?.phase, 'ralplan');
|
|
1853
|
+
assert.equal(await readFile(statePath, 'utf-8'), rawState);
|
|
1854
|
+
assert.equal(await readFile(modePath, 'utf-8'), rawMode);
|
|
1855
|
+
}
|
|
1856
|
+
finally {
|
|
1857
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1858
|
+
}
|
|
1859
|
+
});
|
|
1797
1860
|
it('writes skill-active-state.json with deep-interview phase when autopilot keyword activates', async () => {
|
|
1798
1861
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-state-'));
|
|
1799
1862
|
const stateDir = join(cwd, '.omx', 'state');
|
|
@@ -1802,7 +1865,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
1802
1865
|
try {
|
|
1803
1866
|
process.env.CODEX_HOME = codexHome;
|
|
1804
1867
|
await mkdir(stateDir, { recursive: true });
|
|
1805
|
-
const result = await
|
|
1868
|
+
const result = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
1806
1869
|
stateDir,
|
|
1807
1870
|
text: 'please run $autopilot and keep going',
|
|
1808
1871
|
sessionId: 'sess-1',
|
|
@@ -1895,7 +1958,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
1895
1958
|
await mkdir(stateDir, { recursive: true });
|
|
1896
1959
|
// Activate Autopilot: seeds autopilot-state.json at current_phase=deep-interview
|
|
1897
1960
|
// with deep_interview_gate.status="required" (gate not satisfied).
|
|
1898
|
-
const activated = await
|
|
1961
|
+
const activated = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
1899
1962
|
stateDir,
|
|
1900
1963
|
text: 'please run $autopilot',
|
|
1901
1964
|
sessionId: 'sess-gate',
|
|
@@ -1938,7 +2001,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
1938
2001
|
const stateDir = join(cwd, '.omx', 'state');
|
|
1939
2002
|
try {
|
|
1940
2003
|
await mkdir(stateDir, { recursive: true });
|
|
1941
|
-
await
|
|
2004
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
1942
2005
|
stateDir,
|
|
1943
2006
|
text: 'please run $autopilot',
|
|
1944
2007
|
sessionId: 'sess-skip',
|
|
@@ -2066,7 +2129,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2066
2129
|
models: { autopilot: 'o4-mini' },
|
|
2067
2130
|
agentModels: { planner: 'gpt-5.6-sol-planner' },
|
|
2068
2131
|
}));
|
|
2069
|
-
await
|
|
2132
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
2070
2133
|
stateDir,
|
|
2071
2134
|
sourceCwd: cwd,
|
|
2072
2135
|
text: '$autopilot implement issue #2918',
|
|
@@ -2137,7 +2200,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2137
2200
|
context_snapshot_path: '.omx/context/../../escape.md',
|
|
2138
2201
|
state: { handoff_artifacts: { deep_interview: null } },
|
|
2139
2202
|
}, null, 2));
|
|
2140
|
-
const result = await
|
|
2203
|
+
const result = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
2141
2204
|
stateDir,
|
|
2142
2205
|
text: 'continue',
|
|
2143
2206
|
sessionId,
|
|
@@ -2327,7 +2390,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2327
2390
|
mock.method(console, 'warn', (...args) => {
|
|
2328
2391
|
warnings.push(args);
|
|
2329
2392
|
});
|
|
2330
|
-
await
|
|
2393
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
2331
2394
|
stateDir,
|
|
2332
2395
|
sourceCwd: cwd,
|
|
2333
2396
|
text: '$autopilot symlink escape',
|
|
@@ -2351,7 +2414,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2351
2414
|
const stateDir = join(cwd, '.omx', 'state');
|
|
2352
2415
|
try {
|
|
2353
2416
|
await mkdir(stateDir, { recursive: true });
|
|
2354
|
-
await
|
|
2417
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
2355
2418
|
stateDir,
|
|
2356
2419
|
sourceCwd: cwd,
|
|
2357
2420
|
text: '$autopilot same task',
|
|
@@ -2360,7 +2423,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2360
2423
|
turnId: 'turn-collision-a',
|
|
2361
2424
|
nowIso: '2026-05-30T00:00:00.000Z',
|
|
2362
2425
|
});
|
|
2363
|
-
await
|
|
2426
|
+
await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
2364
2427
|
stateDir,
|
|
2365
2428
|
sourceCwd: cwd,
|
|
2366
2429
|
text: '$autopilot same task',
|
|
@@ -2619,6 +2682,54 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2619
2682
|
await rm(cwd, { recursive: true, force: true });
|
|
2620
2683
|
}
|
|
2621
2684
|
});
|
|
2685
|
+
it('preserves an active Autopilot mode when canonical skill state is missing', async () => {
|
|
2686
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-autopilot-mode-drift-'));
|
|
2687
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
2688
|
+
const sessionId = 'sess-autopilot-mode-drift';
|
|
2689
|
+
const modePath = join(stateDir, 'sessions', sessionId, 'autopilot-state.json');
|
|
2690
|
+
try {
|
|
2691
|
+
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
2692
|
+
const rawMode = '{"active":true,"mode":"autopilot","current_phase":"ralplan","session_id":"sess-autopilot-mode-drift","marker":"preserve-active-mode","metadata":{"nested":{"keep":true}}}\n';
|
|
2693
|
+
await writeFile(modePath, rawMode);
|
|
2694
|
+
const result = await recordSkillActivation({
|
|
2695
|
+
stateDir,
|
|
2696
|
+
text: '$autopilot continue',
|
|
2697
|
+
sessionId,
|
|
2698
|
+
nowIso: '2026-07-23T00:00:00.000Z',
|
|
2699
|
+
});
|
|
2700
|
+
assert.equal(result?.skill, 'autopilot');
|
|
2701
|
+
assert.equal(result?.phase, 'ralplan');
|
|
2702
|
+
assert.equal(await readFile(modePath, 'utf-8'), rawMode);
|
|
2703
|
+
assert.equal(existsSync(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE)), false);
|
|
2704
|
+
}
|
|
2705
|
+
finally {
|
|
2706
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2707
|
+
}
|
|
2708
|
+
});
|
|
2709
|
+
it('preserves active standalone Ralplan state bytes when fresh Autopilot preflight is unavailable', async () => {
|
|
2710
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-ralplan-autopilot-preflight-'));
|
|
2711
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
2712
|
+
const sessionId = 'sess-ralplan-autopilot-preflight';
|
|
2713
|
+
const statePath = join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE);
|
|
2714
|
+
const rawState = '{"version":1,"active":true,"skill":"ralplan","keyword":"$ralplan","phase":"planning","session_id":"sess-ralplan-autopilot-preflight","active_skills":[{"skill":"ralplan","phase":"planning","active":true,"session_id":"sess-ralplan-autopilot-preflight"}]}';
|
|
2715
|
+
try {
|
|
2716
|
+
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
2717
|
+
await writeFile(statePath, rawState);
|
|
2718
|
+
const denied = await recordSkillActivation({
|
|
2719
|
+
stateDir,
|
|
2720
|
+
text: '$autopilot do it too',
|
|
2721
|
+
sessionId,
|
|
2722
|
+
nowIso: '2026-07-23T00:00:00.000Z',
|
|
2723
|
+
});
|
|
2724
|
+
assert.equal(denied?.skill, 'ralplan');
|
|
2725
|
+
assert.equal(denied?.transition_error, 'documented_host_consensus_receipt_unavailable');
|
|
2726
|
+
assert.equal(await readFile(statePath, 'utf-8'), rawState);
|
|
2727
|
+
assert.equal(existsSync(join(stateDir, 'sessions', sessionId, 'autopilot-state.json')), false);
|
|
2728
|
+
}
|
|
2729
|
+
finally {
|
|
2730
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2731
|
+
}
|
|
2732
|
+
});
|
|
2622
2733
|
it('denies prompt-submit overlaps against the current session-visible canonical state', async () => {
|
|
2623
2734
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-state-session-visible-'));
|
|
2624
2735
|
const stateDir = join(cwd, '.omx', 'state');
|
|
@@ -2842,6 +2953,35 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
2842
2953
|
await rm(cwd, { recursive: true, force: true });
|
|
2843
2954
|
}
|
|
2844
2955
|
});
|
|
2956
|
+
it('does not reactivate a neutralized routing-only Ralplan seed on plain continuation', async () => {
|
|
2957
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-neutralized-ralplan-'));
|
|
2958
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
2959
|
+
const sessionId = 'sess-neutralized';
|
|
2960
|
+
const previousSessionId = process.env.OMX_SESSION_ID;
|
|
2961
|
+
try {
|
|
2962
|
+
process.env.OMX_SESSION_ID = sessionId;
|
|
2963
|
+
await mkdir(stateDir, { recursive: true });
|
|
2964
|
+
await writeFile(join(stateDir, 'session.json'), JSON.stringify({ session_id: sessionId, cwd, state_root: stateDir }));
|
|
2965
|
+
assert.ok(await recordSkillActivation({ stateDir, sourceCwd: cwd, text: '$ralplan tighten the plan', sessionId, nowIso: '2026-02-25T00:00:00.000Z' }));
|
|
2966
|
+
const sessionDir = join(stateDir, 'sessions', sessionId);
|
|
2967
|
+
const ralplanPath = join(sessionDir, 'ralplan-state.json');
|
|
2968
|
+
const skillPath = join(sessionDir, SKILL_ACTIVE_STATE_FILE);
|
|
2969
|
+
const [ralplanBefore, skillBefore] = await Promise.all([readFile(ralplanPath), readFile(skillPath)]);
|
|
2970
|
+
assert.equal(await neutralizeOwnedRoutingRalplan(cwd), true);
|
|
2971
|
+
assert.deepEqual(await readActiveWorkflowModes(cwd, sessionId), []);
|
|
2972
|
+
assert.equal(await recordSkillActivation({ stateDir, sourceCwd: cwd, text: 'continue', sessionId, nowIso: '2026-02-25T00:00:01.000Z' }), null);
|
|
2973
|
+
assert.deepEqual(await readFile(ralplanPath), ralplanBefore);
|
|
2974
|
+
assert.deepEqual(await readFile(skillPath), skillBefore);
|
|
2975
|
+
assert.equal((await readSkillActiveState(skillPath))?.active, false);
|
|
2976
|
+
}
|
|
2977
|
+
finally {
|
|
2978
|
+
if (previousSessionId === undefined)
|
|
2979
|
+
delete process.env.OMX_SESSION_ID;
|
|
2980
|
+
else
|
|
2981
|
+
process.env.OMX_SESSION_ID = previousSessionId;
|
|
2982
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2983
|
+
}
|
|
2984
|
+
});
|
|
2845
2985
|
it('auto-completes deep-interview during allowlisted forward handoff', async () => {
|
|
2846
2986
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-handoff-'));
|
|
2847
2987
|
const stateDir = join(cwd, '.omx', 'state');
|
|
@@ -3167,7 +3307,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
3167
3307
|
await rm(cwd, { recursive: true, force: true });
|
|
3168
3308
|
}
|
|
3169
3309
|
});
|
|
3170
|
-
it('
|
|
3310
|
+
it('keeps a locally approved ralplan active when the host consensus receipt verifier is unavailable', async () => {
|
|
3171
3311
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-ralplan-ultragoal-handoff-'));
|
|
3172
3312
|
const stateDir = join(cwd, '.omx', 'state');
|
|
3173
3313
|
try {
|
|
@@ -3187,6 +3327,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
3187
3327
|
current_phase: 'complete',
|
|
3188
3328
|
planning_complete: true,
|
|
3189
3329
|
ralplan_consensus_gate: {
|
|
3330
|
+
documented_host_consensus_receipt: { issuer: 'official-host', verdict: 'approve' },
|
|
3190
3331
|
complete: true,
|
|
3191
3332
|
sequence: ['architect-review', 'critic-review'],
|
|
3192
3333
|
ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', approved: true },
|
|
@@ -3200,19 +3341,13 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
3200
3341
|
sessionId: 'sess-ralplan-ultragoal',
|
|
3201
3342
|
nowIso: '2026-04-10T00:20:00.000Z',
|
|
3202
3343
|
});
|
|
3203
|
-
assert.
|
|
3204
|
-
assert.
|
|
3205
|
-
assert.equal(result?.transition_message, 'mode transiting: ralplan -> ultragoal');
|
|
3206
|
-
assert.deepEqual(result?.active_skills?.map((entry) => entry.skill), ['ultragoal']);
|
|
3344
|
+
assert.notEqual(result?.skill, 'ultragoal');
|
|
3345
|
+
assert.notEqual(result?.transition_message, 'mode transiting: ralplan -> ultragoal');
|
|
3207
3346
|
const ralplan = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralplan-ultragoal', 'ralplan-state.json'), 'utf-8'));
|
|
3208
|
-
assert.equal(ralplan.active,
|
|
3209
|
-
assert.equal(ralplan.current_phase, '
|
|
3210
|
-
assert.
|
|
3211
|
-
assert.
|
|
3212
|
-
const ultragoal = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-ralplan-ultragoal', 'ultragoal-state.json'), 'utf-8'));
|
|
3213
|
-
assert.equal(ultragoal.active, true);
|
|
3214
|
-
assert.equal(ultragoal.mode, 'ultragoal');
|
|
3215
|
-
assert.equal(ultragoal.current_phase, 'planning');
|
|
3347
|
+
assert.equal(ralplan.active, true);
|
|
3348
|
+
assert.equal(ralplan.current_phase, 'complete');
|
|
3349
|
+
assert.notEqual(ralplan.auto_completed_reason, 'mode transiting: ralplan -> ultragoal');
|
|
3350
|
+
assert.equal(existsSync(join(stateDir, 'sessions', 'sess-ralplan-ultragoal', 'ultragoal-state.json')), false);
|
|
3216
3351
|
}
|
|
3217
3352
|
finally {
|
|
3218
3353
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -4008,7 +4143,7 @@ deepMaxRounds = 21
|
|
|
4008
4143
|
await rm(cwd, { recursive: true, force: true });
|
|
4009
4144
|
}
|
|
4010
4145
|
});
|
|
4011
|
-
it('
|
|
4146
|
+
it('warns when fresh Autopilot preflight persistence fails', async () => {
|
|
4012
4147
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-state-persist-fail-'));
|
|
4013
4148
|
const warnings = [];
|
|
4014
4149
|
mock.method(console, 'warn', (...args) => {
|
|
@@ -4024,6 +4159,7 @@ deepMaxRounds = 21
|
|
|
4024
4159
|
});
|
|
4025
4160
|
assert.ok(result);
|
|
4026
4161
|
assert.equal(result.skill, 'autopilot');
|
|
4162
|
+
assert.equal(result.phase, 'failed');
|
|
4027
4163
|
assert.equal(warnings.length, 1);
|
|
4028
4164
|
assert.match(String(warnings[0][0]), /failed to persist keyword activation state/);
|
|
4029
4165
|
}
|
|
@@ -4047,7 +4183,7 @@ deepMaxRounds = 21
|
|
|
4047
4183
|
updated_at: '2026-02-25T00:10:00.000Z',
|
|
4048
4184
|
source: 'keyword-detector',
|
|
4049
4185
|
}));
|
|
4050
|
-
const result = await
|
|
4186
|
+
const result = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
4051
4187
|
stateDir,
|
|
4052
4188
|
text: 'autopilot keep going',
|
|
4053
4189
|
nowIso: '2026-02-26T00:00:00.000Z',
|
|
@@ -4090,7 +4226,7 @@ deepMaxRounds = 21
|
|
|
4090
4226
|
}));
|
|
4091
4227
|
await mkdir(join(cwd, '.omx', 'context'), { recursive: true });
|
|
4092
4228
|
await writeFile(join(cwd, '.omx', 'context', 'existing.md'), '# existing context');
|
|
4093
|
-
const result = await
|
|
4229
|
+
const result = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
4094
4230
|
stateDir,
|
|
4095
4231
|
text: 'autopilot keep going',
|
|
4096
4232
|
sessionId: 'sess-autopilot',
|
|
@@ -4276,7 +4412,7 @@ deepMaxRounds = 21
|
|
|
4276
4412
|
}, null, 2));
|
|
4277
4413
|
await mkdir(join(cwd, '.omx', 'context'), { recursive: true });
|
|
4278
4414
|
await writeFile(join(cwd, '.omx', 'context', 'autopilot.md'), '# autopilot context');
|
|
4279
|
-
const result = await
|
|
4415
|
+
const result = await recordSkillActivationWithAvailableAutopilotReceipt({
|
|
4280
4416
|
stateDir,
|
|
4281
4417
|
text: '\\ keep going now',
|
|
4282
4418
|
sessionId: 'sess-autopilot-bare',
|
|
@@ -4697,7 +4833,7 @@ describe('applyRalplanGate', () => {
|
|
|
4697
4833
|
await rm(cwd, { recursive: true, force: true });
|
|
4698
4834
|
}
|
|
4699
4835
|
});
|
|
4700
|
-
it('
|
|
4836
|
+
it('keeps short approved team follow-ups gated without an official host consensus receipt', async () => {
|
|
4701
4837
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-gate-followup-ko-'));
|
|
4702
4838
|
try {
|
|
4703
4839
|
const plansDir = join(cwd, '.omx', 'plans');
|
|
@@ -4712,13 +4848,14 @@ describe('applyRalplanGate', () => {
|
|
|
4712
4848
|
ralplan_consensus_gate: {
|
|
4713
4849
|
complete: true,
|
|
4714
4850
|
sequence: ['architect-review', 'critic-review'],
|
|
4715
|
-
ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', iteration: 1 },
|
|
4716
|
-
ralplan_critic_review: { agent_role: 'critic', verdict: 'approve', iteration: 1 },
|
|
4851
|
+
ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', iteration: 1, sequence_index: 1 },
|
|
4852
|
+
ralplan_critic_review: { agent_role: 'critic', verdict: 'approve', iteration: 1, sequence_index: 2 },
|
|
4717
4853
|
},
|
|
4718
4854
|
}));
|
|
4719
4855
|
const result = applyRalplanGate(['team'], 'team으로 해줘', { cwd });
|
|
4720
|
-
assert.equal(result.gateApplied,
|
|
4721
|
-
assert.deepEqual(result.keywords, ['
|
|
4856
|
+
assert.equal(result.gateApplied, true);
|
|
4857
|
+
assert.deepEqual(result.keywords, ['ralplan']);
|
|
4858
|
+
assert.equal(result.blockedReason, 'documented_host_consensus_receipt_unavailable');
|
|
4722
4859
|
}
|
|
4723
4860
|
finally {
|
|
4724
4861
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -4756,12 +4893,13 @@ describe('applyRalplanGate', () => {
|
|
|
4756
4893
|
const result = applyRalplanGate(['team'], 'team', { cwd, requireNativeSubagents: true });
|
|
4757
4894
|
assert.equal(result.gateApplied, true);
|
|
4758
4895
|
assert.deepEqual(result.keywords, ['ralplan']);
|
|
4896
|
+
assert.equal(result.blockedReason, 'documented_host_consensus_receipt_unavailable');
|
|
4759
4897
|
}
|
|
4760
4898
|
finally {
|
|
4761
4899
|
await rm(cwd, { recursive: true, force: true });
|
|
4762
4900
|
}
|
|
4763
4901
|
});
|
|
4764
|
-
it('
|
|
4902
|
+
it('keeps short approved ralph follow-ups gated without an official host consensus receipt', async () => {
|
|
4765
4903
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-gate-followup-ralph-'));
|
|
4766
4904
|
try {
|
|
4767
4905
|
const plansDir = join(cwd, '.omx', 'plans');
|
|
@@ -4776,13 +4914,14 @@ describe('applyRalplanGate', () => {
|
|
|
4776
4914
|
ralplan_consensus_gate: {
|
|
4777
4915
|
complete: true,
|
|
4778
4916
|
sequence: ['architect-review', 'critic-review'],
|
|
4779
|
-
ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', iteration: 1 },
|
|
4780
|
-
ralplan_critic_review: { agent_role: 'critic', verdict: 'approve', iteration: 1 },
|
|
4917
|
+
ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', iteration: 1, sequence_index: 1 },
|
|
4918
|
+
ralplan_critic_review: { agent_role: 'critic', verdict: 'approve', iteration: 1, sequence_index: 2 },
|
|
4781
4919
|
},
|
|
4782
4920
|
}));
|
|
4783
4921
|
const result = applyRalplanGate(['ralph'], 'ralph please', { cwd, priorSkill: 'ralplan' });
|
|
4784
|
-
assert.equal(result.gateApplied,
|
|
4785
|
-
assert.deepEqual(result.keywords, ['
|
|
4922
|
+
assert.equal(result.gateApplied, true);
|
|
4923
|
+
assert.deepEqual(result.keywords, ['ralplan']);
|
|
4924
|
+
assert.equal(result.blockedReason, 'documented_host_consensus_receipt_unavailable');
|
|
4786
4925
|
}
|
|
4787
4926
|
finally {
|
|
4788
4927
|
await rm(cwd, { recursive: true, force: true });
|