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
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { readExactPaneProofSync } from '../team/exact-pane.js';
|
|
3
|
+
import { spawnPlatformCommandSync } from '../utils/platform-command.js';
|
|
4
|
+
import { isPaneRunningShell } from '../scripts/tmux-hook-engine.js';
|
|
1
5
|
import { execFileSync } from 'child_process';
|
|
2
6
|
export function captureTmuxPaneFromEnv(env = process.env) {
|
|
3
7
|
const value = env.TMUX_PANE;
|
|
@@ -26,11 +30,63 @@ export function captureTmuxWindowForPane(pane, env = process.env) {
|
|
|
26
30
|
function hasNonEmptyString(value) {
|
|
27
31
|
return typeof value === 'string' && value.trim() !== '';
|
|
28
32
|
}
|
|
33
|
+
export const OMX_RALPH_PANE_OWNER_OPTION = '@omx_ralph_pane_owner_id';
|
|
34
|
+
function clearRalphPaneBinding(state) {
|
|
35
|
+
delete state.tmux_pane_id;
|
|
36
|
+
delete state.tmux_pane_pid;
|
|
37
|
+
delete state.tmux_pane_owner_id;
|
|
38
|
+
delete state.tmux_session_name;
|
|
39
|
+
delete state.tmux_session_id;
|
|
40
|
+
delete state.tmux_pane_current_command;
|
|
41
|
+
delete state.tmux_pane_start_command;
|
|
42
|
+
delete state.tmux_pane_set_at;
|
|
43
|
+
delete state.tmux_window_id;
|
|
44
|
+
}
|
|
45
|
+
function isSafeForegroundCommand(value) {
|
|
46
|
+
return typeof value === 'string'
|
|
47
|
+
&& /^[A-Za-z0-9_./:+@%=-]+(?: [A-Za-z0-9_./:+@%=-]+)*$/.test(value);
|
|
48
|
+
}
|
|
49
|
+
function captureRalphPaneBinding(paneId) {
|
|
50
|
+
const initialProof = readExactPaneProofSync(paneId);
|
|
51
|
+
if (initialProof.status !== 'live')
|
|
52
|
+
return null;
|
|
53
|
+
const paneOwnerId = `ralph:${randomUUID()}`;
|
|
54
|
+
const effectProof = readExactPaneProofSync(initialProof.paneId);
|
|
55
|
+
if (effectProof.status !== 'live' || effectProof.pid !== initialProof.pid)
|
|
56
|
+
return null;
|
|
57
|
+
const tagged = spawnPlatformCommandSync('tmux', ['set-option', '-p', '-t', effectProof.paneId, OMX_RALPH_PANE_OWNER_OPTION, paneOwnerId], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] }).result;
|
|
58
|
+
if (tagged.error || tagged.status !== 0)
|
|
59
|
+
return null;
|
|
60
|
+
const authority = spawnPlatformCommandSync('tmux', ['display-message', '-p', '-t', effectProof.paneId, `#{pane_id}\x1f#{pane_pid}\x1f#{session_name}\x1f#{session_id}\x1f#{window_id}\x1f#{${OMX_RALPH_PANE_OWNER_OPTION}}\x1f#{pane_current_command}\x1f#{pane_start_command}`], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] }).result;
|
|
61
|
+
if (authority.error || authority.status !== 0 || typeof authority.stdout !== 'string')
|
|
62
|
+
return null;
|
|
63
|
+
const [capturedPaneId, capturedPid, sessionName, sessionId, windowId, capturedOwnerId, paneCurrentCommand, paneStartCommand, ...extra] = authority.stdout.trim().split('\x1f');
|
|
64
|
+
const panePid = Number(capturedPid);
|
|
65
|
+
if (extra.length > 0 || capturedPaneId !== effectProof.paneId || panePid !== effectProof.pid
|
|
66
|
+
|| !/^%[0-9]+$/.test(capturedPaneId) || !Number.isSafeInteger(panePid) || panePid <= 0
|
|
67
|
+
|| !isSafeForegroundCommand(sessionName) || !/^\$[0-9]+$/.test(sessionId) || !/^@[0-9]+$/.test(windowId)
|
|
68
|
+
|| capturedOwnerId !== paneOwnerId || !isSafeForegroundCommand(paneCurrentCommand)
|
|
69
|
+
|| !isSafeForegroundCommand(paneStartCommand) || isPaneRunningShell(paneCurrentCommand))
|
|
70
|
+
return null;
|
|
71
|
+
return {
|
|
72
|
+
paneId: capturedPaneId,
|
|
73
|
+
panePid,
|
|
74
|
+
sessionName,
|
|
75
|
+
sessionId,
|
|
76
|
+
windowId,
|
|
77
|
+
paneOwnerId,
|
|
78
|
+
paneCurrentCommand,
|
|
79
|
+
paneStartCommand,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
29
82
|
export function withModeRuntimeContext(existing, next, options) {
|
|
30
83
|
const env = options?.env ?? process.env;
|
|
31
84
|
const nowIso = options?.nowIso ?? new Date().toISOString();
|
|
32
85
|
const wasActive = existing.active === true;
|
|
33
86
|
const isActive = next.active === true;
|
|
87
|
+
const isRalphActivation = !wasActive && isActive && next.mode === 'ralph';
|
|
88
|
+
if (isRalphActivation)
|
|
89
|
+
clearRalphPaneBinding(next);
|
|
34
90
|
const hasPane = hasNonEmptyString(next.tmux_pane_id);
|
|
35
91
|
if (isActive && (!wasActive || !hasPane)) {
|
|
36
92
|
const pane = captureTmuxPaneFromEnv(env);
|
|
@@ -44,6 +100,23 @@ export function withModeRuntimeContext(existing, next, options) {
|
|
|
44
100
|
}
|
|
45
101
|
}
|
|
46
102
|
}
|
|
103
|
+
const ralphPaneId = typeof next.tmux_pane_id === 'string' ? next.tmux_pane_id.trim() : '';
|
|
104
|
+
if (isRalphActivation && ralphPaneId) {
|
|
105
|
+
const binding = captureRalphPaneBinding(ralphPaneId);
|
|
106
|
+
if (binding) {
|
|
107
|
+
next.tmux_pane_id = binding.paneId;
|
|
108
|
+
next.tmux_pane_pid = binding.panePid;
|
|
109
|
+
next.tmux_session_name = binding.sessionName;
|
|
110
|
+
next.tmux_session_id = binding.sessionId;
|
|
111
|
+
next.tmux_window_id = binding.windowId;
|
|
112
|
+
next.tmux_pane_owner_id = binding.paneOwnerId;
|
|
113
|
+
next.tmux_pane_current_command = binding.paneCurrentCommand;
|
|
114
|
+
next.tmux_pane_start_command = binding.paneStartCommand;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
clearRalphPaneBinding(next);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
47
120
|
return next;
|
|
48
121
|
}
|
|
49
122
|
//# sourceMappingURL=mode-state-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-state-context.js","sourceRoot":"","sources":["../../src/state/mode-state-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"mode-state-context.js","sourceRoot":"","sources":["../../src/state/mode-state-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type BeforeWritableCommit, type ResolvedStateScope } from '../mcp/state-paths.js';
|
|
1
2
|
export declare const SUPPORTED_STATE_READ_MODES: readonly ['autopilot', 'autoresearch', 'team', 'ralph', 'ultrawork', 'ultraqa', 'ralplan', 'deep-interview', 'skill-active'];
|
|
2
3
|
export type SupportedStateReadMode = (typeof SUPPORTED_STATE_READ_MODES)[number];
|
|
3
4
|
export type StateOperationName = 'state_read' | 'state_write' | 'state_clear' | 'state_list_active' | 'state_get_status';
|
|
@@ -14,6 +15,8 @@ export declare function completeRalplanSession(options: {
|
|
|
14
15
|
state: Record<string, unknown>;
|
|
15
16
|
explicitSessionId?: string;
|
|
16
17
|
requireNativeSubagents?: boolean;
|
|
18
|
+
beforeCommit?: BeforeWritableCommit;
|
|
19
|
+
capturedScope?: ResolvedStateScope;
|
|
17
20
|
}): Promise<boolean>;
|
|
18
21
|
export declare function listStateStatuses(cwd: string, explicitSessionId?: string, mode?: string, options?: {
|
|
19
22
|
authoritativeActiveDecision?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/state/operations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/state/operations.ts"],"names":[],"mappings":"AAKA,OAAO,EAgBL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AA2F/B,eAAO,MAAM,0BAA0B,YACrC,WAAW,EACX,cAAc,EACd,MAAM,EACN,OAAO,EACP,WAAW,EACX,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,cAAc,CACN,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AACjF,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,aAAa,GACb,aAAa,GACb,mBAAmB,GACnB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsPD,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAO,GACjD,MAAM,GAAG,IAAI,CA2Bf;AAsJD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6EnB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,iBAAiB,CAAC,EAAE,MAAM,EAC1B,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6ClC;AAGD,wBAAsB,oBAAoB,CACxC,gBAAgB,CAAC,EAAE,MAAM,EACzB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB;AA4DD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAwcjC"}
|
package/dist/state/operations.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { mkdir, readFile, readdir, rename, unlink, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { withModeRuntimeContext } from './mode-state-context.js';
|
|
5
|
-
import { getAllScopedStatePaths, getAuthoritativeActiveStateDirs, getBaseStateDir, getBaseStateDirWithSource, getReadScopedStateDirs, getReadScopedStatePaths, getStateDir, getStatePath, resolveRuntimeStateScope, resolveWritableStateScope, resolveWorkingDirectoryForState, validateSessionId, validateStateModeSegment, } from '../mcp/state-paths.js';
|
|
5
|
+
import { createWritableCommitRevalidator, getStateFilename, getAllScopedStatePaths, getAuthoritativeActiveStateDirs, getBaseStateDir, getBaseStateDirWithSource, getReadScopedStateDirs, getReadScopedStatePaths, getStateDir, getStatePath, resolveRuntimeStateScope, resolveWritableStateScope, resolveWorkingDirectoryForState, validateSessionId, validateStateModeSegment, } from '../mcp/state-paths.js';
|
|
6
6
|
import { evaluateRalphCompletionAuditEvidence } from '../ralph/completion-audit.js';
|
|
7
7
|
import { ensureCanonicalRalphArtifacts } from '../ralph/persistence.js';
|
|
8
8
|
import { RALPH_PHASES, validateAndNormalizeRalphState } from '../ralph/contract.js';
|
|
@@ -10,14 +10,14 @@ import { applyRunOutcomeContract } from '../runtime/run-outcome.js';
|
|
|
10
10
|
import { normalizeTerminalWorkflowState } from './terminal-normalization.js';
|
|
11
11
|
import { hasCleanAutopilotReviewAndQaEvidence, isAutopilotSuccessfulTerminalState, validateAutopilotCompletionTransition, } from '../autopilot/completion-gate.js';
|
|
12
12
|
import { readUltragoalState } from '../hud/state.js';
|
|
13
|
-
import { SKILL_ACTIVE_STATE_MODE, clearTerminalSkillActiveMarkers, getSkillActiveStatePathsForStateDir, isTerminalSkillActiveState, isTransitionCanonicalStateOwned, listActiveSkills, listTransitionActiveSkills, readSkillActiveState, readVisibleSkillActiveStateForStateDir, syncCanonicalSkillStateForMode, writeSkillActiveStateCopiesForStateDir, } from './skill-active.js';
|
|
13
|
+
import { SKILL_ACTIVE_STATE_MODE, clearTerminalSkillActiveMarkers, getSkillActiveStatePathsForStateDir, isTerminalSkillActiveState, isTransitionCanonicalStateOwned, listActiveSkills, listTransitionActiveSkills, readSkillActiveState, readVisibleSkillActiveStateForStateDir, syncCanonicalSkillStateForMode, writeSkillActiveStateCopiesForStateDir, writeSkillActiveStateWithPrimaryTransactionForStateDir, } from './skill-active.js';
|
|
14
14
|
import { buildWorkflowTransitionError, evaluateWorkflowTransition, isTrackedWorkflowMode, } from './workflow-transition.js';
|
|
15
15
|
import { reconcileWorkflowTransition } from './workflow-transition-reconcile.js';
|
|
16
16
|
import { buildAutopilotDeepInterviewRalplanGateError, canAdvanceAutopilotDeepInterviewToRalplan, } from '../autopilot/deep-interview-gate.js';
|
|
17
|
-
import { deriveAutopilotChildPhase, } from '../autopilot/fsm.js';
|
|
17
|
+
import { deriveAutopilotChildPhase, normalizeAutopilotPhase, } from '../autopilot/fsm.js';
|
|
18
18
|
import { buildAutopilotRalplanUltragoalGateError, canAdvanceAutopilotRalplanToUltragoal, } from '../autopilot/ralplan-gate.js';
|
|
19
19
|
import { isUnsupportedNativeSubagentEvidenceForScope, } from '../leader/contract.js';
|
|
20
|
-
import { buildRalplanConsensusGateFromSources, } from '../ralplan/consensus-gate.js';
|
|
20
|
+
import { buildRalplanConsensusGateFromSources, RALPLAN_CONSENSUS_BLOCKED_REASONS, shouldBlockFreshAutopilotForRalplanReceipt, } from '../ralplan/consensus-gate.js';
|
|
21
21
|
const AUTOPILOT_CHILD_PHASE_ORDER = [
|
|
22
22
|
'deep-interview',
|
|
23
23
|
'ralplan',
|
|
@@ -83,7 +83,7 @@ async function writeAtomicFile(path, data) {
|
|
|
83
83
|
throw error;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
async function writeClearedSessionScopedModeState(path, mode, sessionId) {
|
|
86
|
+
async function writeClearedSessionScopedModeState(path, mode, sessionId, beforeCommit) {
|
|
87
87
|
const nowIso = new Date().toISOString();
|
|
88
88
|
const clearedState = withModeRuntimeContext({}, {
|
|
89
89
|
mode,
|
|
@@ -93,15 +93,17 @@ async function writeClearedSessionScopedModeState(path, mode, sessionId) {
|
|
|
93
93
|
completed_at: nowIso,
|
|
94
94
|
session_id: sessionId,
|
|
95
95
|
});
|
|
96
|
-
|
|
96
|
+
const payload = JSON.stringify(clearedState, null, 2);
|
|
97
|
+
await beforeCommit?.({ site: 'state-clear.primary', kind: 'write', path });
|
|
98
|
+
await writeAtomicFile(path, payload);
|
|
97
99
|
}
|
|
98
|
-
async function clearSessionNativeStopState(baseStateDir, sessionId) {
|
|
100
|
+
async function clearSessionNativeStopState(baseStateDir, sessionId, beforeCommit) {
|
|
99
101
|
const paths = [
|
|
100
|
-
join(baseStateDir, 'native-stop-state.json'),
|
|
101
|
-
join(baseStateDir, 'sessions', sessionId, 'native-stop-state.json'),
|
|
102
|
+
{ path: join(baseStateDir, 'native-stop-state.json'), site: 'native-stop.root' },
|
|
103
|
+
{ path: join(baseStateDir, 'sessions', sessionId, 'native-stop-state.json'), site: 'native-stop.session' },
|
|
102
104
|
];
|
|
103
105
|
const changed = [];
|
|
104
|
-
for (const path of paths) {
|
|
106
|
+
for (const { path, site } of paths) {
|
|
105
107
|
if (!existsSync(path))
|
|
106
108
|
continue;
|
|
107
109
|
let state;
|
|
@@ -118,7 +120,9 @@ async function clearSessionNativeStopState(baseStateDir, sessionId) {
|
|
|
118
120
|
continue;
|
|
119
121
|
delete sessions[sessionId];
|
|
120
122
|
state.sessions = sessions;
|
|
121
|
-
|
|
123
|
+
const payload = JSON.stringify(state, null, 2);
|
|
124
|
+
await beforeCommit?.({ site, kind: 'write', path });
|
|
125
|
+
await writeAtomicFile(path, payload);
|
|
122
126
|
changed.push(path);
|
|
123
127
|
}
|
|
124
128
|
return changed;
|
|
@@ -133,9 +137,14 @@ function validateStrictReadableMode(mode) {
|
|
|
133
137
|
}
|
|
134
138
|
return normalized;
|
|
135
139
|
}
|
|
136
|
-
async function initializeStateEnvironment(cwd, effectiveSessionId, rootSource) {
|
|
137
|
-
|
|
138
|
-
|
|
140
|
+
async function initializeStateEnvironment(cwd, effectiveSessionId, rootSource, exactStateDir) {
|
|
141
|
+
if (exactStateDir) {
|
|
142
|
+
await mkdir(exactStateDir, { recursive: true });
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
await mkdir(getStateDir(cwd), { recursive: true });
|
|
146
|
+
}
|
|
147
|
+
if (effectiveSessionId && !exactStateDir) {
|
|
139
148
|
await mkdir(getStateDir(cwd, effectiveSessionId), { recursive: true });
|
|
140
149
|
}
|
|
141
150
|
if (rootSource === 'team-env')
|
|
@@ -369,10 +378,12 @@ function collectCompletedRalplanSessionEntries(sessionState, rootState, sessionI
|
|
|
369
378
|
}
|
|
370
379
|
return [...entries.values()];
|
|
371
380
|
}
|
|
372
|
-
|
|
381
|
+
function serializeAtomicJson(value) {
|
|
373
382
|
const serialized = JSON.stringify(value, null, 2);
|
|
374
383
|
JSON.parse(serialized);
|
|
375
|
-
|
|
384
|
+
return serialized;
|
|
385
|
+
}
|
|
386
|
+
async function writeAtomicJson(path, serialized) {
|
|
376
387
|
await writeAtomicFile(path, serialized);
|
|
377
388
|
}
|
|
378
389
|
async function readJsonRecordIfExists(path) {
|
|
@@ -392,44 +403,75 @@ function shouldWriteRootRalplanTerminalState(rootState, sessionId) {
|
|
|
392
403
|
return optionalSessionId(rootState?.session_id) === sessionId;
|
|
393
404
|
}
|
|
394
405
|
export async function completeRalplanSession(options) {
|
|
406
|
+
if (options.beforeCommit && !options.capturedScope) {
|
|
407
|
+
throw new Error('completeRalplanSession requires capturedScope when beforeCommit is provided');
|
|
408
|
+
}
|
|
395
409
|
if (!isCompleteRalplanTerminalState(options.state))
|
|
396
410
|
return false;
|
|
397
|
-
const writableScope =
|
|
411
|
+
const writableScope = options.capturedScope
|
|
412
|
+
?? await resolveWritableStateScope(options.cwd, options.explicitSessionId);
|
|
398
413
|
const sessionId = writableScope.sessionId;
|
|
399
414
|
const validationError = validateRalplanTerminalConsensus(options.cwd, options.state, sessionId, {
|
|
400
415
|
requireNativeSubagents: options.requireNativeSubagents === true,
|
|
401
416
|
});
|
|
402
417
|
if (validationError)
|
|
403
418
|
throw new Error(validationError);
|
|
419
|
+
const beforeCommit = options.beforeCommit ?? createWritableCommitRevalidator({
|
|
420
|
+
operation: 'completeRalplanSession',
|
|
421
|
+
cwd: options.cwd,
|
|
422
|
+
explicitSessionId: options.explicitSessionId,
|
|
423
|
+
capturedScope: writableScope,
|
|
424
|
+
baseStateDir: options.baseStateDir,
|
|
425
|
+
});
|
|
404
426
|
const completedSessionId = sessionId ?? optionalSessionId(options.state.session_id);
|
|
405
427
|
const rootScopeCompletion = !sessionId;
|
|
406
428
|
const nowIso = new Date().toISOString();
|
|
407
429
|
const rootState = buildRalplanTerminalState(options.state, sessionId, nowIso);
|
|
408
|
-
const rootStatePath =
|
|
430
|
+
const rootStatePath = join(options.baseStateDir, getStateFilename('ralplan'));
|
|
409
431
|
const existingRootState = await readJsonRecordIfExists(rootStatePath);
|
|
410
432
|
const shouldWriteRootState = shouldWriteRootRalplanTerminalState(existingRootState, sessionId);
|
|
411
433
|
if (shouldWriteRootState) {
|
|
412
|
-
|
|
434
|
+
const rootStatePayload = serializeAtomicJson(rootState);
|
|
435
|
+
await mkdir(dirname(rootStatePath), { recursive: true });
|
|
436
|
+
await beforeCommit({ site: 'ralplan.root-state', kind: 'write', path: rootStatePath });
|
|
437
|
+
await writeAtomicJson(rootStatePath, rootStatePayload);
|
|
413
438
|
}
|
|
414
439
|
if (sessionId) {
|
|
415
|
-
|
|
440
|
+
const sessionStatePath = join(writableScope.stateDir, getStateFilename('ralplan'));
|
|
441
|
+
const sessionState = buildRalplanTerminalState(options.state, sessionId, nowIso);
|
|
442
|
+
const sessionStatePayload = serializeAtomicJson(sessionState);
|
|
443
|
+
await mkdir(dirname(sessionStatePath), { recursive: true });
|
|
444
|
+
await beforeCommit({ site: 'ralplan.session-state', kind: 'write', path: sessionStatePath });
|
|
445
|
+
await writeAtomicJson(sessionStatePath, sessionStatePayload);
|
|
416
446
|
}
|
|
417
447
|
const { rootPath, sessionPath } = getSkillActiveStatePathsForStateDir(options.baseStateDir, sessionId);
|
|
418
448
|
const rootSkillState = await readSkillActiveState(rootPath);
|
|
419
449
|
const rootEntries = filterCompletedRalplanRootEntries(listActiveSkills(rootSkillState ?? {}), completedSessionId, rootScopeCompletion);
|
|
420
450
|
if (rootEntries.length > 0 || (shouldWriteRootState && rootSkillState !== null)) {
|
|
421
|
-
|
|
451
|
+
const nextRootSkillState = buildRalplanSkillStateFromEntries(rootSkillState, rootState, rootEntries, undefined, nowIso);
|
|
452
|
+
const rootSkillStatePayload = serializeAtomicJson(nextRootSkillState);
|
|
453
|
+
await mkdir(dirname(rootPath), { recursive: true });
|
|
454
|
+
await beforeCommit({ site: 'ralplan.root-skill-write', kind: 'write', path: rootPath });
|
|
455
|
+
await writeAtomicJson(rootPath, rootSkillStatePayload);
|
|
422
456
|
}
|
|
423
457
|
else if (rootSkillState !== null && !isTerminalSkillActiveTombstone(rootSkillState)) {
|
|
424
|
-
await
|
|
458
|
+
await beforeCommit({ site: 'ralplan.root-skill-unlink', kind: 'unlink', path: rootPath });
|
|
459
|
+
await unlink(rootPath).catch((error) => {
|
|
460
|
+
if (error.code !== 'ENOENT')
|
|
461
|
+
throw error;
|
|
462
|
+
});
|
|
425
463
|
}
|
|
426
464
|
if (sessionPath && sessionId) {
|
|
427
465
|
const sessionSkillState = await readSkillActiveState(sessionPath);
|
|
428
466
|
const sessionEntries = collectCompletedRalplanSessionEntries(sessionSkillState, rootSkillState, sessionId);
|
|
429
467
|
if (sessionEntries.length > 0 || sessionSkillState !== null) {
|
|
430
|
-
|
|
468
|
+
const nextSessionSkillState = sessionEntries.length > 0
|
|
431
469
|
? buildRalplanSkillStateFromEntries(sessionSkillState ?? rootSkillState, rootState, sessionEntries, sessionId, nowIso)
|
|
432
|
-
: buildRalplanTerminalSkillState(sessionSkillState, rootState, sessionId, nowIso)
|
|
470
|
+
: buildRalplanTerminalSkillState(sessionSkillState, rootState, sessionId, nowIso);
|
|
471
|
+
const sessionSkillStatePayload = serializeAtomicJson(nextSessionSkillState);
|
|
472
|
+
await mkdir(dirname(sessionPath), { recursive: true });
|
|
473
|
+
await beforeCommit({ site: 'ralplan.session-skill-write', kind: 'write', path: sessionPath });
|
|
474
|
+
await writeAtomicJson(sessionPath, sessionSkillStatePayload);
|
|
433
475
|
}
|
|
434
476
|
}
|
|
435
477
|
return true;
|
|
@@ -445,7 +487,7 @@ export async function listStateStatuses(cwd, explicitSessionId, mode, options =
|
|
|
445
487
|
continue;
|
|
446
488
|
const files = await readdir(stateDir);
|
|
447
489
|
for (const file of files) {
|
|
448
|
-
if (!file.endsWith('-state.json'))
|
|
490
|
+
if (!file.endsWith('-state.json') || file === 'run-state.json')
|
|
449
491
|
continue;
|
|
450
492
|
const currentMode = file.replace('-state.json', '');
|
|
451
493
|
if (!mode && currentMode === SKILL_ACTIVE_STATE_MODE)
|
|
@@ -517,6 +559,19 @@ function isActiveDetailWorkflowState(state) {
|
|
|
517
559
|
const phase = typeof state.current_phase === 'string' ? state.current_phase.trim().toLowerCase() : '';
|
|
518
560
|
return !['complete', 'completed', 'cancelled', 'canceled', 'failed', 'cleared'].includes(phase);
|
|
519
561
|
}
|
|
562
|
+
function isResumableAutopilotState(state) {
|
|
563
|
+
if (state.active !== true)
|
|
564
|
+
return false;
|
|
565
|
+
if (state.mode !== undefined && state.mode !== 'autopilot')
|
|
566
|
+
return false;
|
|
567
|
+
const phaseValues = ['current_phase', 'currentPhase']
|
|
568
|
+
.filter((key) => Object.prototype.hasOwnProperty.call(state, key))
|
|
569
|
+
.map((key) => normalizeAutopilotPhase(state[key]));
|
|
570
|
+
if (phaseValues.length === 0 || phaseValues.some((phase) => phase === null || phase === 'complete' || phase === 'failed')) {
|
|
571
|
+
return false;
|
|
572
|
+
}
|
|
573
|
+
return new Set(phaseValues).size === 1;
|
|
574
|
+
}
|
|
520
575
|
async function readSessionDetailTransitionModes(cwd, sessionId, requestedMode) {
|
|
521
576
|
if (!sessionId || requestedMode !== 'ralplan')
|
|
522
577
|
return undefined;
|
|
@@ -572,12 +627,21 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
572
627
|
const effectiveSessionId = stateScope.sessionId;
|
|
573
628
|
const mode = validateStateModeSegment(rawArgs.mode);
|
|
574
629
|
const { baseStateDir, rootSource } = getBaseStateDirWithSource(cwd);
|
|
575
|
-
|
|
576
|
-
|
|
630
|
+
const beforeCommit = createWritableCommitRevalidator({
|
|
631
|
+
operation: 'state_write',
|
|
632
|
+
cwd,
|
|
633
|
+
explicitSessionId,
|
|
634
|
+
capturedScope: stateScope,
|
|
635
|
+
baseStateDir,
|
|
636
|
+
});
|
|
637
|
+
// Write to the exact resolved scope directory; never recompute the
|
|
638
|
+
// target root/path after authorization.
|
|
639
|
+
const path = join(stateScope.stateDir, getStateFilename(mode));
|
|
577
640
|
const { mode: _mode, workingDirectory: _workingDirectory, session_id: _sessionId, state: customState, ...fields } = rawArgs;
|
|
578
641
|
let validationError = null;
|
|
579
642
|
let transitionMessage;
|
|
580
643
|
let ensureRalphArtifacts = false;
|
|
644
|
+
let skillActivePrimaryCommitted = false;
|
|
581
645
|
await withStateWriteLock(path, async () => {
|
|
582
646
|
let existing = {};
|
|
583
647
|
if (existsSync(path)) {
|
|
@@ -604,6 +668,26 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
604
668
|
if (!hasExplicitStateField(fields, customState, 'terminal_outcome')) {
|
|
605
669
|
delete mergedRaw.terminal_outcome;
|
|
606
670
|
}
|
|
671
|
+
let activeCanonicalModes;
|
|
672
|
+
let canonicalDecision;
|
|
673
|
+
if (isTrackedWorkflowMode(mode) && mergedRaw.active === true) {
|
|
674
|
+
activeCanonicalModes = await readCanonicalActiveWorkflowModes(baseStateDir, effectiveSessionId);
|
|
675
|
+
canonicalDecision = evaluateWorkflowTransition(activeCanonicalModes, mode);
|
|
676
|
+
const hasExistingCanonicalRalplan = activeCanonicalModes.includes('ralplan');
|
|
677
|
+
const freshAutopilotReceiptBlocked = mode === 'autopilot'
|
|
678
|
+
&& !isResumableAutopilotState(existing)
|
|
679
|
+
&& hasExistingCanonicalRalplan
|
|
680
|
+
&& shouldBlockFreshAutopilotForRalplanReceipt();
|
|
681
|
+
if (freshAutopilotReceiptBlocked) {
|
|
682
|
+
validationError = `${RALPLAN_CONSENSUS_BLOCKED_REASONS.documentedHostConsensusReceiptUnavailable}: official host consensus receipt verifier is unavailable`;
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
if (!canonicalDecision.allowed && canonicalDecision.denialReason === 'rollback') {
|
|
686
|
+
validationError = buildWorkflowTransitionError(activeCanonicalModes, mode, 'write');
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
await initializeStateEnvironment(cwd, effectiveSessionId, rootSource, stateScope.stateDir);
|
|
607
691
|
if (mode === 'ralph' &&
|
|
608
692
|
effectiveSessionId &&
|
|
609
693
|
typeof mergedRaw.owner_omx_session_id !== 'string') {
|
|
@@ -729,12 +813,6 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
729
813
|
}
|
|
730
814
|
}
|
|
731
815
|
if (isTrackedWorkflowMode(mode) && mergedRaw.active === true) {
|
|
732
|
-
const activeCanonicalModes = await readCanonicalActiveWorkflowModes(baseStateDir, effectiveSessionId);
|
|
733
|
-
const canonicalDecision = evaluateWorkflowTransition(activeCanonicalModes, mode);
|
|
734
|
-
if (!canonicalDecision.allowed && canonicalDecision.denialReason === 'rollback') {
|
|
735
|
-
validationError = buildWorkflowTransitionError(activeCanonicalModes, mode, 'write');
|
|
736
|
-
return;
|
|
737
|
-
}
|
|
738
816
|
const transitionCurrentModes = mode === 'ralplan'
|
|
739
817
|
? (activeCanonicalModes.length > 0
|
|
740
818
|
? activeCanonicalModes
|
|
@@ -746,6 +824,7 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
746
824
|
sessionId: effectiveSessionId,
|
|
747
825
|
source: 'state-operations',
|
|
748
826
|
baseStateDir,
|
|
827
|
+
beforeCommit,
|
|
749
828
|
...(transitionCurrentModes ? { currentModes: transitionCurrentModes } : {}),
|
|
750
829
|
});
|
|
751
830
|
transitionMessage ??= transition.transitionMessage;
|
|
@@ -756,7 +835,18 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
756
835
|
}
|
|
757
836
|
}
|
|
758
837
|
const merged = withModeRuntimeContext(existing, mergedRaw);
|
|
759
|
-
|
|
838
|
+
const payload = JSON.stringify(merged, null, 2);
|
|
839
|
+
if (mode === SKILL_ACTIVE_STATE_MODE && effectiveSessionId) {
|
|
840
|
+
await writeSkillActiveStateWithPrimaryTransactionForStateDir(baseStateDir, merged, effectiveSessionId, path, async () => {
|
|
841
|
+
await beforeCommit({ site: 'mode.primary', kind: 'write', path });
|
|
842
|
+
await writeAtomicFile(path, payload);
|
|
843
|
+
}, { beforeCommit });
|
|
844
|
+
skillActivePrimaryCommitted = true;
|
|
845
|
+
}
|
|
846
|
+
else {
|
|
847
|
+
await beforeCommit({ site: 'mode.primary', kind: 'write', path });
|
|
848
|
+
await writeAtomicFile(path, payload);
|
|
849
|
+
}
|
|
760
850
|
});
|
|
761
851
|
if (validationError) {
|
|
762
852
|
return {
|
|
@@ -765,9 +855,11 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
765
855
|
};
|
|
766
856
|
}
|
|
767
857
|
if (mode === SKILL_ACTIVE_STATE_MODE) {
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
858
|
+
if (!skillActivePrimaryCommitted) {
|
|
859
|
+
const state = await readSkillActiveState(path);
|
|
860
|
+
if (state) {
|
|
861
|
+
await writeSkillActiveStateCopiesForStateDir(baseStateDir, state, effectiveSessionId, undefined, { beforeCommit });
|
|
862
|
+
}
|
|
771
863
|
}
|
|
772
864
|
}
|
|
773
865
|
else {
|
|
@@ -783,6 +875,8 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
783
875
|
state: data,
|
|
784
876
|
explicitSessionId,
|
|
785
877
|
requireNativeSubagents: true,
|
|
878
|
+
beforeCommit,
|
|
879
|
+
capturedScope: stateScope,
|
|
786
880
|
});
|
|
787
881
|
if (!ralplanCompletionHandled) {
|
|
788
882
|
await syncCanonicalSkillStateForMode({
|
|
@@ -793,6 +887,7 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
793
887
|
currentPhase: typeof data.current_phase === 'string' ? data.current_phase : undefined,
|
|
794
888
|
sessionId: effectiveSessionId,
|
|
795
889
|
source: 'state-operations',
|
|
890
|
+
beforeCommit,
|
|
796
891
|
});
|
|
797
892
|
}
|
|
798
893
|
}
|
|
@@ -845,17 +940,25 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
845
940
|
const stateScope = await resolveWritableStateScope(cwd, explicitSessionId);
|
|
846
941
|
const effectiveSessionId = stateScope.sessionId;
|
|
847
942
|
await initializeStateEnvironment(cwd, effectiveSessionId, rootSource);
|
|
848
|
-
const
|
|
943
|
+
const beforeCommit = createWritableCommitRevalidator({
|
|
944
|
+
operation: 'state_clear',
|
|
945
|
+
cwd,
|
|
946
|
+
explicitSessionId,
|
|
947
|
+
capturedScope: stateScope,
|
|
948
|
+
baseStateDir,
|
|
949
|
+
});
|
|
950
|
+
const path = join(stateScope.stateDir, getStateFilename(mode));
|
|
849
951
|
if (mode !== SKILL_ACTIVE_STATE_MODE
|
|
850
952
|
&& effectiveSessionId
|
|
851
953
|
&& existsSync(getStatePath(mode, cwd))) {
|
|
852
|
-
await writeClearedSessionScopedModeState(path, mode, effectiveSessionId);
|
|
954
|
+
await writeClearedSessionScopedModeState(path, mode, effectiveSessionId, beforeCommit);
|
|
853
955
|
}
|
|
854
956
|
else if (existsSync(path)) {
|
|
957
|
+
await beforeCommit({ site: 'state-clear.primary', kind: 'unlink', path });
|
|
855
958
|
await unlink(path);
|
|
856
959
|
}
|
|
857
960
|
const nativeStopCleared = effectiveSessionId
|
|
858
|
-
? await clearSessionNativeStopState(baseStateDir, effectiveSessionId)
|
|
961
|
+
? await clearSessionNativeStopState(baseStateDir, effectiveSessionId, beforeCommit)
|
|
859
962
|
: [];
|
|
860
963
|
if (mode !== SKILL_ACTIVE_STATE_MODE) {
|
|
861
964
|
await syncCanonicalSkillStateForMode({
|
|
@@ -865,6 +968,7 @@ export async function executeStateOperation(name, rawArgs = {}) {
|
|
|
865
968
|
active: false,
|
|
866
969
|
sessionId: effectiveSessionId,
|
|
867
970
|
source: 'state-operations',
|
|
971
|
+
beforeCommit,
|
|
868
972
|
});
|
|
869
973
|
}
|
|
870
974
|
return { payload: { cleared: true, mode, path, ...(nativeStopCleared.length > 0 ? { native_stop_cleared: nativeStopCleared } : {}) } };
|