oh-my-codex 0.20.1 → 0.20.3
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 +7 -6
- package/Cargo.toml +1 -1
- package/README.md +36 -1
- package/crates/omx-runtime/Cargo.toml +1 -0
- package/crates/omx-runtime/src/main.rs +25 -2
- package/crates/omx-runtime/tests/execution.rs +219 -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__/hermes.test.js.map +1 -1
- package/dist/adapt/contracts.d.ts.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.d.ts +2 -0
- package/dist/auth/__tests__/hotswap.test.d.ts.map +1 -0
- package/dist/auth/__tests__/hotswap.test.js +183 -0
- package/dist/auth/__tests__/hotswap.test.js.map +1 -0
- package/dist/auth/hotswap.d.ts +6 -0
- package/dist/auth/hotswap.d.ts.map +1 -1
- package/dist/auth/hotswap.js +102 -19
- package/dist/auth/hotswap.js.map +1 -1
- package/dist/auth/paths.js.map +1 -1
- package/dist/auth/storage.js.map +1 -1
- package/dist/autopilot/__tests__/ralplan-gate.test.js +5 -5
- package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
- package/dist/autopilot/completion-gate.js.map +1 -1
- package/dist/autopilot/fsm.d.ts +1 -1
- package/dist/autopilot/fsm.d.ts.map +1 -1
- package/dist/autoresearch/goal.js.map +1 -1
- package/dist/autoresearch/runtime.js.map +1 -1
- package/dist/capabilities/lockfile.js.map +1 -1
- package/dist/catalog/reader.js.map +1 -1
- package/dist/catalog/skill-mirror.js.map +1 -1
- package/dist/cli/__tests__/adapt-help.test.js.map +1 -1
- package/dist/cli/__tests__/agents-init.test.js.map +1 -1
- package/dist/cli/__tests__/agents.test.js.map +1 -1
- package/dist/cli/__tests__/api.test.js.map +1 -1
- package/dist/cli/__tests__/ask.test.js.map +1 -1
- package/dist/cli/__tests__/auth.test.js +60 -6
- package/dist/cli/__tests__/auth.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
- package/dist/cli/__tests__/capabilities.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +80 -0
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-invalid-config.test.js +47 -4
- package/dist/cli/__tests__/doctor-invalid-config.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +752 -15
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/exec.test.js +136 -0
- package/dist/cli/__tests__/exec.test.js.map +1 -1
- package/dist/cli/__tests__/imagegen-continuation.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +473 -14
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +336 -4
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-parity.test.js +87 -12
- package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
- package/dist/cli/__tests__/native-hook-claim-journal.test.d.ts +2 -0
- package/dist/cli/__tests__/native-hook-claim-journal.test.d.ts.map +1 -0
- package/dist/cli/__tests__/native-hook-claim-journal.test.js +206 -0
- package/dist/cli/__tests__/native-hook-claim-journal.test.js.map +1 -0
- package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-deslop-contract.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +6 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +8 -3
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.d.ts +2 -0
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js +72 -0
- package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js.map +1 -0
- package/dist/cli/__tests__/ralplan.test.d.ts +2 -0
- package/dist/cli/__tests__/ralplan.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralplan.test.js +55 -0
- package/dist/cli/__tests__/ralplan.test.js.map +1 -0
- package/dist/cli/__tests__/resume.test.js +17 -11
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +25 -0
- 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__/session-search.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +79 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-gh-star.test.js.map +1 -1
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +77 -3
- package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +1 -1
- package/dist/cli/__tests__/setup-hooks-trust-e2e.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-hooks-trust-e2e.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-hooks-trust-e2e.test.js +285 -0
- package/dist/cli/__tests__/setup-hooks-trust-e2e.test.js.map +1 -0
- package/dist/cli/__tests__/setup-install-mode.test.js +2579 -294
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-preferences.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-preferences.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-preferences.test.js +79 -0
- package/dist/cli/__tests__/setup-preferences.test.js.map +1 -0
- package/dist/cli/__tests__/setup-refresh.test.js +33 -2
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +46 -3
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/state.test.js +37 -0
- package/dist/cli/__tests__/state.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +105 -7
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +61 -1
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +1817 -24
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/__tests__/update.test.js +58 -0
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/__tests__/url.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +2 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/adapt.js.map +1 -1
- package/dist/cli/agents-init.js.map +1 -1
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/api.js.map +1 -1
- package/dist/cli/ask.d.ts +1 -1
- package/dist/cli/ask.d.ts.map +1 -1
- package/dist/cli/ask.js.map +1 -1
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch-intake.js.map +1 -1
- package/dist/cli/capabilities.js.map +1 -1
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/codex-feature-probe.js.map +1 -1
- package/dist/cli/codex-home.js.map +1 -1
- package/dist/cli/doctor.d.ts +21 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +607 -130
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +14 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +245 -57
- 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/mcp-serve.js.map +1 -1
- package/dist/cli/mission.js.map +1 -1
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/native-hook-claim-journal.d.ts +29 -0
- package/dist/cli/native-hook-claim-journal.d.ts.map +1 -0
- package/dist/cli/native-hook-claim-journal.js +252 -0
- package/dist/cli/native-hook-claim-journal.js.map +1 -0
- package/dist/cli/omx.js.map +1 -1
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/project-runtime-codex-homes.js.map +1 -1
- package/dist/cli/question.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +3 -2
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/ralplan.d.ts +10 -0
- package/dist/cli/ralplan.d.ts.map +1 -0
- package/dist/cli/ralplan.js +110 -0
- package/dist/cli/ralplan.js.map +1 -0
- 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 +11 -0
- package/dist/cli/setup-preferences.d.ts.map +1 -1
- package/dist/cli/setup-preferences.js +32 -0
- package/dist/cli/setup-preferences.js.map +1 -1
- package/dist/cli/setup.d.ts +58 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +1450 -398
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/star-prompt.js.map +1 -1
- package/dist/cli/state.d.ts.map +1 -1
- package/dist/cli/state.js +2 -1
- package/dist/cli/state.js.map +1 -1
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/ultragoal.d.ts +5 -1
- package/dist/cli/ultragoal.d.ts.map +1 -1
- package/dist/cli/ultragoal.js +34 -2
- package/dist/cli/ultragoal.js.map +1 -1
- package/dist/cli/uninstall.d.ts +17 -0
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +986 -95
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +8 -1
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/url.js.map +1 -1
- package/dist/compat/__tests__/doctor-contract.test.js +5 -1
- package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js +1 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +1287 -11
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +1179 -32
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +6 -1
- 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/codex-feature-flags.d.ts.map +1 -1
- package/dist/config/codex-feature-flags.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +124 -1
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +2142 -265
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/commit-lore-guard.js.map +1 -1
- package/dist/config/generator.d.ts +23 -34
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +1480 -246
- package/dist/config/generator.js.map +1 -1
- package/dist/config/mcp-registry.js.map +1 -1
- package/dist/config/models.d.ts +14 -4
- 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/config/omx-first-party-mcp.js.map +1 -1
- package/dist/config/team-mode.d.ts.map +1 -1
- package/dist/document-refresh/__tests__/enforcer.test.js.map +1 -1
- package/dist/document-refresh/enforcer.js.map +1 -1
- package/dist/exec/followup.js.map +1 -1
- package/dist/goal-workflows/artifacts.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +7 -4
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/analyze-routing-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/analyze-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +9 -3
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/design-skill.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +1376 -6
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +252 -543
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +38 -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 +765 -10
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +2 -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 +142 -1
- package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-non-omx-guard.test.js +48 -2
- package/dist/hooks/__tests__/notify-hook-non-omx-guard.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +61 -44
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +3 -2
- package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +243 -4
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +531 -12
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +163 -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-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-visual-verdict.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +43 -4
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
- package/dist/hooks/__tests__/prometheus-strict-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-test-helpers.js.map +1 -1
- package/dist/hooks/__tests__/prompt-session-provenance.test.d.ts +2 -0
- package/dist/hooks/__tests__/prompt-session-provenance.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prompt-session-provenance.test.js +82 -0
- package/dist/hooks/__tests__/prompt-session-provenance.test.js.map +1 -0
- package/dist/hooks/__tests__/session.test.js +878 -11
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/__tests__/skill-catalog-hygiene.test.js.map +1 -1
- package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +1 -1
- package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -1
- package/dist/hooks/agents-overlay.js +5 -5
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/code-simplifier/index.js.map +1 -1
- package/dist/hooks/explore-routing.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/extensibility/events.js.map +1 -1
- package/dist/hooks/extensibility/loader.js.map +1 -1
- package/dist/hooks/extensibility/plugin-runner-stdin.js.map +1 -1
- package/dist/hooks/extensibility/sdk/logging.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +33 -7
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +2228 -119
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts +12 -0
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +41 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-session-provenance.d.ts +87 -0
- package/dist/hooks/prompt-session-provenance.d.ts.map +1 -0
- package/dist/hooks/prompt-session-provenance.js +180 -0
- package/dist/hooks/prompt-session-provenance.js.map +1 -0
- package/dist/hooks/session.d.ts +163 -34
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +1395 -317
- package/dist/hooks/session.js.map +1 -1
- package/dist/hooks/task-size-detector.js.map +1 -1
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/authority.js.map +1 -1
- package/dist/hud/constants.js.map +1 -1
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.js.map +1 -1
- package/dist/leader/__tests__/contract.test.js +153 -1
- package/dist/leader/__tests__/contract.test.js.map +1 -1
- package/dist/leader/contract.d.ts +42 -5
- package/dist/leader/contract.d.ts.map +1 -1
- package/dist/leader/contract.js +184 -3
- package/dist/leader/contract.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.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__/server-lifecycle.test.js +15 -2
- package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
- package/dist/mcp/__tests__/state-paths.test.js +98 -1
- package/dist/mcp/__tests__/state-paths.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/bootstrap.js.map +1 -1
- package/dist/mcp/code-intel-server.d.ts +58 -58
- 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.js.map +1 -1
- package/dist/mcp/hermes-server.d.ts +70 -70
- package/dist/mcp/hermes-server.d.ts.map +1 -1
- package/dist/mcp/lifecycle-telemetry.js.map +1 -1
- package/dist/mcp/memory-server.d.ts +34 -34
- package/dist/mcp/memory-server.d.ts.map +1 -1
- package/dist/mcp/memory-server.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +14 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +96 -20
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts +47 -47
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.d.ts +4 -4
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/mcp/wiki-server.d.ts +34 -23
- 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-session-scope.test.js +53 -1
- 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.map +1 -1
- package/dist/modes/base.js +5 -5
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/lifecycle-dedupe.test.js.map +1 -1
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js +177 -85
- package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js.map +1 -1
- package/dist/notifications/__tests__/session-registry.test.js.map +1 -1
- package/dist/notifications/__tests__/template-engine.test.js.map +1 -1
- package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
- package/dist/notifications/http-client.js.map +1 -1
- package/dist/notifications/index.d.ts +4 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +3 -9
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/lifecycle-dedupe.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/session-status.js.map +1 -1
- 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/notifications/tmux-detector.js.map +1 -1
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/openclaw/config.js.map +1 -1
- package/dist/openclaw/dispatcher.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +4 -4
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +16 -13
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/stages/code-review.js.map +1 -1
- package/dist/pipeline/stages/ralph-verify.js.map +1 -1
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/pipeline/stages/team-exec.js.map +1 -1
- package/dist/pipeline/stages/ultragoal.js.map +1 -1
- package/dist/pipeline/stages/ultraqa.js.map +1 -1
- package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
- package/dist/planning/artifact-names.js.map +1 -1
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/question/__tests__/state.test.js.map +1 -1
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/autopilot-wait.js.map +1 -1
- package/dist/question/client.d.ts.map +1 -1
- package/dist/question/client.js.map +1 -1
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/question/events.js.map +1 -1
- package/dist/question/renderer.js.map +1 -1
- package/dist/question/state.d.ts.map +1 -1
- package/dist/question/state.js.map +1 -1
- package/dist/question/ui.js.map +1 -1
- package/dist/ralph/contract.d.ts +1 -1
- package/dist/ralph/contract.d.ts.map +1 -1
- package/dist/ralplan/__tests__/consensus-gate.test.js +527 -8
- 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 +46 -0
- package/dist/ralplan/__tests__/documented-leader-preflight.test.js.map +1 -0
- package/dist/ralplan/__tests__/runtime.test.js +116 -14
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +3 -3
- package/dist/ralplan/consensus-gate.d.ts.map +1 -1
- package/dist/ralplan/consensus-gate.js +173 -70
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/ralplan/documented-leader-preflight.d.ts +34 -0
- package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -0
- package/dist/ralplan/documented-leader-preflight.js +58 -0
- package/dist/ralplan/documented-leader-preflight.js.map +1 -0
- package/dist/ralplan/runtime.d.ts +3 -2
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +12 -9
- 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/process-tree.js.map +1 -1
- package/dist/runtime/run-loop.js.map +1 -1
- package/dist/runtime/run-outcome.d.ts +3 -3
- package/dist/runtime/run-outcome.d.ts.map +1 -1
- package/dist/runtime/run-outcome.js.map +1 -1
- package/dist/runtime/run-state.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +6657 -995
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.d.ts +2 -0
- package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.d.ts.map +1 -0
- package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.js +634 -0
- package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.js.map +1 -0
- package/dist/scripts/__tests__/generate-release-body.test.js.map +1 -1
- package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-fallback-delivery.test.d.ts +2 -0
- package/dist/scripts/__tests__/notify-fallback-delivery.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/notify-fallback-delivery.test.js +174 -0
- package/dist/scripts/__tests__/notify-fallback-delivery.test.js.map +1 -0
- package/dist/scripts/__tests__/notify-state-io.test.js +57 -1
- package/dist/scripts/__tests__/notify-state-io.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.d.ts +2 -0
- package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js +78 -0
- package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js.map +1 -0
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.d.ts +2 -0
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js +55 -0
- package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js.map +1 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js +1100 -4
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
- package/dist/scripts/__tests__/test-reply-listener-live.test.js.map +1 -1
- package/dist/scripts/build-api.js.map +1 -1
- package/dist/scripts/build-explore-harness.js.map +1 -1
- package/dist/scripts/build-sparkshell.js.map +1 -1
- package/dist/scripts/cleanup-explore-harness.js.map +1 -1
- package/dist/scripts/codex-execution-surface.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts +4 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +11577 -1184
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/generate-native-release-manifest.js.map +1 -1
- package/dist/scripts/generate-release-body.js.map +1 -1
- package/dist/scripts/hook-payload-guard.d.ts.map +1 -1
- package/dist/scripts/hook-payload-guard.js.map +1 -1
- package/dist/scripts/notify-fallback-delivery.d.ts +48 -0
- package/dist/scripts/notify-fallback-delivery.d.ts.map +1 -0
- package/dist/scripts/notify-fallback-delivery.js +419 -0
- package/dist/scripts/notify-fallback-delivery.js.map +1 -0
- package/dist/scripts/notify-fallback-watcher.js +218 -138
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.d.ts +18 -9
- package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.js +112 -15
- package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.d.ts +23 -0
- package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.js +122 -12
- package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
- package/dist/scripts/notify-hook/orchestration-intent.d.ts +7 -7
- package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts +5 -2
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.js +33 -37
- package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
- package/dist/scripts/notify-hook/state-io.d.ts +17 -0
- package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
- package/dist/scripts/notify-hook/state-io.js +73 -11
- package/dist/scripts/notify-hook/state-io.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts +10 -1
- 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 +2 -2
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +39 -13
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts +16 -8
- 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-posttooluse.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.d.ts +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.js +19 -18
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker.d.ts +5 -2
- package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +37 -28
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts +8 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +53 -18
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/notify-hook/visual-verdict.d.ts +1 -1
- package/dist/scripts/notify-hook/visual-verdict.d.ts.map +1 -1
- package/dist/scripts/notify-hook/visual-verdict.js +15 -13
- package/dist/scripts/notify-hook/visual-verdict.js.map +1 -1
- package/dist/scripts/notify-hook.d.ts +24 -1
- package/dist/scripts/notify-hook.d.ts.map +1 -1
- package/dist/scripts/notify-hook.js +267 -90
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/scripts/prompt-inventory.js.map +1 -1
- package/dist/scripts/smoke-packed-install.d.ts +927 -5
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +4317 -13
- package/dist/scripts/smoke-packed-install.js.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/scripts/test-reply-listener-live.js.map +1 -1
- package/dist/scripts/test-sparkshell.js.map +1 -1
- package/dist/scripts/verify-native-agents.js.map +1 -1
- package/dist/session-history/friction.js.map +1 -1
- package/dist/session-history/search.js.map +1 -1
- package/dist/sidecar/__tests__/boundary.test.js.map +1 -1
- package/dist/sidecar/collector.js.map +1 -1
- package/dist/sidecar/index.js.map +1 -1
- package/dist/sidecar/render.js.map +1 -1
- package/dist/sidecar/tmux.js.map +1 -1
- package/dist/state/__tests__/mode-state-context.test.js +54 -0
- package/dist/state/__tests__/mode-state-context.test.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +66 -15
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +19 -1
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/__tests__/workflow-transition.test.js +61 -0
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/mode-state-context.d.ts +5 -0
- package/dist/state/mode-state-context.d.ts.map +1 -1
- package/dist/state/mode-state-context.js +59 -0
- package/dist/state/mode-state-context.js.map +1 -1
- package/dist/state/operations.d.ts +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +49 -55
- package/dist/state/operations.js.map +1 -1
- package/dist/state/paths.d.ts +1 -1
- package/dist/state/paths.d.ts.map +1 -1
- package/dist/state/paths.js +1 -1
- package/dist/state/paths.js.map +1 -1
- package/dist/state/skill-active.d.ts +13 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +43 -4
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/terminal-normalization.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +20 -4
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/state/workflow-transition.d.ts +1 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.d.ts +2 -0
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.d.ts.map +1 -0
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.js +52 -0
- package/dist/subagents/__tests__/leader-bootstrap-3181.test.js.map +1 -0
- package/dist/subagents/__tests__/tracker.test.js +1550 -10
- package/dist/subagents/__tests__/tracker.test.js.map +1 -1
- package/dist/subagents/role-routing-marker.d.ts +10 -0
- package/dist/subagents/role-routing-marker.d.ts.map +1 -0
- package/dist/subagents/role-routing-marker.js +136 -0
- package/dist/subagents/role-routing-marker.js.map +1 -0
- package/dist/subagents/tracker.d.ts +91 -0
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +806 -62
- 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__/approved-execution.test.js.map +1 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.js +52 -10
- 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 +93 -27
- package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +341 -4
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/role-router.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 +3624 -355
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +2516 -118
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- 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 +3664 -969
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/tmux-test-fixture.js.map +1 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +38 -2
- 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 +2 -2
- 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/commit-hygiene.js.map +1 -1
- package/dist/team/contracts.d.ts +5 -5
- package/dist/team/contracts.d.ts.map +1 -1
- package/dist/team/delivery-log.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/followup-planner.js.map +1 -1
- package/dist/team/goal-workflow.js.map +1 -1
- 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 +18 -2
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +314 -35
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/pane-status.js.map +1 -1
- package/dist/team/phase-controller.js.map +1 -1
- package/dist/team/reminder-intents.d.ts +1 -1
- package/dist/team/reminder-intents.d.ts.map +1 -1
- package/dist/team/reminder-intents.js.map +1 -1
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +1 -0
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +1326 -231
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +22 -8
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +1463 -376
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/dispatch-lock.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/events.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/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-root.js.map +1 -1
- package/dist/team/state.d.ts +67 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +636 -129
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-identity.d.ts.map +1 -1
- package/dist/team/team-identity.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 +125 -23
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +1340 -333
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.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.map +1 -1
- package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +4 -1
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/url-reader/index.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 +57 -0
- package/dist/utils/__tests__/file-durability.test.js.map +1 -0
- package/dist/utils/agents-model-table.js.map +1 -1
- package/dist/utils/file-durability.d.ts +15 -0
- package/dist/utils/file-durability.d.ts.map +1 -0
- package/dist/utils/file-durability.js +37 -0
- package/dist/utils/file-durability.js.map +1 -0
- package/dist/utils/package.js.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-command.js.map +1 -1
- package/dist/utils/repo-deps.js.map +1 -1
- package/dist/utils/version.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +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/verifier.js.map +1 -1
- package/dist/visual/constants.d.ts +1 -1
- package/dist/visual/constants.d.ts.map +1 -1
- package/dist/vscode/__tests__/index.test.js.map +1 -1
- package/dist/vscode/index.js.map +1 -1
- package/dist/wiki/__tests__/cjk-tokenize.test.js.map +1 -1
- package/dist/wiki/__tests__/lint.test.js.map +1 -1
- package/dist/wiki/__tests__/query.test.js.map +1 -1
- package/dist/wiki/__tests__/storage.test.js.map +1 -1
- package/dist/wiki/__tests__/test-helpers.d.ts.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/dist/wiki/query.js.map +1 -1
- package/dist/wiki/storage.js.map +1 -1
- package/package.json +2 -2
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +24 -0
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +10 -5
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +6 -2
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +6 -2
- package/plugins/oh-my-codex/skills/team/SKILL.md +13 -9
- package/skills/omx-setup/SKILL.md +10 -5
- package/skills/ralph/SKILL.md +6 -2
- package/skills/ralplan/SKILL.md +6 -2
- package/skills/team/SKILL.md +13 -9
- package/src/scripts/__tests__/codex-native-hook.test.ts +20048 -10827
- package/src/scripts/__tests__/fixtures/issue-3138-installed-smoke.ts +734 -0
- package/src/scripts/__tests__/notify-fallback-delivery.test.ts +177 -0
- package/src/scripts/__tests__/notify-state-io.test.ts +73 -0
- package/src/scripts/__tests__/reasoning-artifact-contract.test.ts +129 -0
- package/src/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.ts +78 -0
- package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +60 -0
- package/src/scripts/__tests__/smoke-packed-install.test.ts +1309 -4
- package/src/scripts/codex-native-hook.ts +11429 -1163
- package/src/scripts/notify-fallback-delivery.ts +416 -0
- package/src/scripts/notify-fallback-watcher.ts +216 -155
- package/src/scripts/notify-hook/auto-nudge.ts +113 -14
- package/src/scripts/notify-hook/managed-tmux.ts +149 -12
- package/src/scripts/notify-hook/ralph-session-resume.ts +37 -36
- package/src/scripts/notify-hook/state-io.ts +100 -13
- package/src/scripts/notify-hook/team-dispatch.ts +242 -75
- package/src/scripts/notify-hook/team-leader-nudge.ts +40 -18
- package/src/scripts/notify-hook/team-tmux-guard.ts +366 -39
- package/src/scripts/notify-hook/team-worker-stop.ts +20 -16
- package/src/scripts/notify-hook/team-worker.ts +39 -26
- package/src/scripts/notify-hook/tmux-injection.ts +66 -23
- package/src/scripts/notify-hook/visual-verdict.ts +22 -12
- package/src/scripts/notify-hook.ts +336 -90
- package/src/scripts/smoke-packed-install.ts +5154 -149
|
@@ -21,7 +21,22 @@
|
|
|
21
21
|
import { writeFile, appendFile, mkdir, readFile } from 'fs/promises';
|
|
22
22
|
import { existsSync } from 'fs';
|
|
23
23
|
import { dirname, join, resolve } from 'path';
|
|
24
|
-
import {
|
|
24
|
+
import { fileURLToPath } from 'url';
|
|
25
|
+
import {
|
|
26
|
+
appendPromptSessionProvenanceRejection,
|
|
27
|
+
isSessionStateUsable,
|
|
28
|
+
readSessionPointer,
|
|
29
|
+
normalizeSessionId,
|
|
30
|
+
resolveSessionPointerContext,
|
|
31
|
+
type SessionPointerContext,
|
|
32
|
+
} from '../hooks/session.js';
|
|
33
|
+
import {
|
|
34
|
+
evaluateResolvedPromptTurn,
|
|
35
|
+
extractSelectedTargetOwnerEvidence,
|
|
36
|
+
preflightSelectedTargetOwner,
|
|
37
|
+
type ResolvedPromptTurnContext,
|
|
38
|
+
} from '../hooks/prompt-session-provenance.js';
|
|
39
|
+
import { readTeamModeConfig } from '../config/team-mode.js';
|
|
25
40
|
|
|
26
41
|
import { safeString, asNumber } from './notify-hook/utils.js';
|
|
27
42
|
import {
|
|
@@ -32,12 +47,16 @@ import {
|
|
|
32
47
|
import { getBaseStateDir } from '../mcp/state-paths.js';
|
|
33
48
|
import {
|
|
34
49
|
getScopedStatePath,
|
|
50
|
+
getScopedStatePathAtScope,
|
|
51
|
+
readScopedJsonAtScope,
|
|
52
|
+
hasExistingScopedSessionDir,
|
|
35
53
|
readCurrentSessionId,
|
|
36
54
|
readScopedJsonIfExists,
|
|
37
55
|
getScopedStateDirsForCurrentSession,
|
|
38
56
|
normalizeNotifyState,
|
|
39
57
|
pruneRecentTurns,
|
|
40
58
|
readdir,
|
|
59
|
+
type NotifyStateScope,
|
|
41
60
|
} from './notify-hook/state-io.js';
|
|
42
61
|
import { isLeaderStale, resolveLeaderStalenessThresholdMs, maybeNudgeTeamLeader } from './notify-hook/team-leader-nudge.js';
|
|
43
62
|
import { drainPendingTeamDispatch } from './notify-hook/team-dispatch.js';
|
|
@@ -49,7 +68,7 @@ import {
|
|
|
49
68
|
isDeepInterviewInputLockActive,
|
|
50
69
|
syncSkillStateFromTurn,
|
|
51
70
|
} from './notify-hook/auto-nudge.js';
|
|
52
|
-
import {
|
|
71
|
+
import { isManagedOmxSessionAtPromptContext } from './notify-hook/managed-tmux.js';
|
|
53
72
|
import { logNotifyHookEvent } from './notify-hook/log.js';
|
|
54
73
|
import { reconcileRalphSessionResume } from './notify-hook/ralph-session-resume.js';
|
|
55
74
|
import { sendPaneInput } from './notify-hook/team-tmux-guard.js';
|
|
@@ -73,6 +92,13 @@ import {
|
|
|
73
92
|
extractRawJsonStringField,
|
|
74
93
|
utf8ByteLength,
|
|
75
94
|
} from './hook-payload-guard.js';
|
|
95
|
+
import {
|
|
96
|
+
classifyKeywordInput,
|
|
97
|
+
recordSkillActivation,
|
|
98
|
+
type KeywordInputClassification,
|
|
99
|
+
type RecordSkillActivationInput,
|
|
100
|
+
type SkillActiveState,
|
|
101
|
+
} from '../hooks/keyword-detector.js';
|
|
76
102
|
|
|
77
103
|
const RALPH_ACTIVE_PROGRESS_PHASES = new Set([
|
|
78
104
|
'start',
|
|
@@ -89,6 +115,8 @@ const RALPH_ACTIVE_PROGRESS_PHASES = new Set([
|
|
|
89
115
|
]);
|
|
90
116
|
|
|
91
117
|
const IDLE_NOTIFICATION_SUMMARY_MAX_LENGTH = 240;
|
|
118
|
+
const NOTIFY_SKILL_ACTIVATION_ERROR_MAX_LENGTH = 512;
|
|
119
|
+
const NOTIFY_SKILL_ACTIVATION_CONTEXT_MAX_LENGTH = 200;
|
|
92
120
|
|
|
93
121
|
async function readJsonFileIfObject(path: string): Promise<Record<string, unknown> | null> {
|
|
94
122
|
try {
|
|
@@ -263,13 +291,6 @@ function classifyIdleNotificationPhase(message: unknown): 'idle' | 'progress' |
|
|
|
263
291
|
}
|
|
264
292
|
|
|
265
293
|
|
|
266
|
-
function isExplicitAutopilotActivationText(text: string): boolean {
|
|
267
|
-
return /(?:^|[^\w])\$autopilot\b/i.test(text)
|
|
268
|
-
|| /^\s*\/autopilot\b/i.test(text)
|
|
269
|
-
|| /^\s*(?:please\s+)?autopilot(?:\s+(?:this|mode|workflow|skill|loop|now))?\s*[.!]?\s*$/i.test(text)
|
|
270
|
-
|| /\b(?:use|run|start|enable|launch|invoke|activate|resume|continue)\s+(?:the\s+)?autopilot(?:\s+(?:mode|workflow|skill|loop|now))?\s*[.!]?\s*$/i.test(text)
|
|
271
|
-
|| /\bautopilot\s+(?:mode|workflow|skill|loop)\b/i.test(text);
|
|
272
|
-
}
|
|
273
294
|
|
|
274
295
|
function looksLikeAutopilotTerminalHandoff(text: string): boolean {
|
|
275
296
|
return /\bAutopilot complete\b/i.test(text)
|
|
@@ -334,6 +355,106 @@ async function shouldSuppressAutopilotTerminalReplayActivation(
|
|
|
334
355
|
return hasTerminalAutopilotStateForNotifyTurn(stateDir, sessionId, payload);
|
|
335
356
|
}
|
|
336
357
|
|
|
358
|
+
export interface NotifySkillActivationInput {
|
|
359
|
+
readonly stateDir: string;
|
|
360
|
+
readonly sourceCwd: string;
|
|
361
|
+
readonly text: string;
|
|
362
|
+
readonly sessionId?: string;
|
|
363
|
+
readonly threadId?: string;
|
|
364
|
+
readonly turnId?: string;
|
|
365
|
+
readonly payload: Record<string, unknown>;
|
|
366
|
+
readonly nowIso?: string;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export interface NotifySkillActivationDependencies {
|
|
370
|
+
readonly classifyKeywordInput?: (text: string) => KeywordInputClassification;
|
|
371
|
+
readonly recordSkillActivation?: (input: RecordSkillActivationInput) => Promise<SkillActiveState | null>;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
function boundedNotifySkillActivationContext(value: unknown): string | null {
|
|
375
|
+
try {
|
|
376
|
+
const context = safeString(value).trim().slice(0, NOTIFY_SKILL_ACTIVATION_CONTEXT_MAX_LENGTH);
|
|
377
|
+
return context || null;
|
|
378
|
+
} catch {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
function boundedNotifySkillActivationError(error: unknown): string {
|
|
384
|
+
try {
|
|
385
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
386
|
+
return message.slice(0, NOTIFY_SKILL_ACTIVATION_ERROR_MAX_LENGTH);
|
|
387
|
+
} catch {
|
|
388
|
+
return 'unknown_error';
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
async function logNotifySkillActivationFailure(
|
|
393
|
+
logsDir: string,
|
|
394
|
+
input: NotifySkillActivationInput,
|
|
395
|
+
error: unknown,
|
|
396
|
+
): Promise<void> {
|
|
397
|
+
await logNotifyHookEvent(logsDir, {
|
|
398
|
+
timestamp: new Date().toISOString(),
|
|
399
|
+
level: 'warn',
|
|
400
|
+
type: 'notify_skill_activation_failure',
|
|
401
|
+
error: boundedNotifySkillActivationError(error),
|
|
402
|
+
session_id: boundedNotifySkillActivationContext(input.sessionId),
|
|
403
|
+
thread_id: boundedNotifySkillActivationContext(input.threadId),
|
|
404
|
+
turn_id: boundedNotifySkillActivationContext(input.turnId),
|
|
405
|
+
}).catch(() => {});
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Records prompt skill activation using one shared input classification for the
|
|
410
|
+
* terminal-replay check and the state writer.
|
|
411
|
+
*/
|
|
412
|
+
export async function recordNotifySkillActivation(
|
|
413
|
+
input: NotifySkillActivationInput,
|
|
414
|
+
dependencies: NotifySkillActivationDependencies = {},
|
|
415
|
+
): Promise<SkillActiveState | null> {
|
|
416
|
+
const classification = (dependencies.classifyKeywordInput ?? classifyKeywordInput)(input.text);
|
|
417
|
+
const teamEnabled = readTeamModeConfig(input.sourceCwd).enabled;
|
|
418
|
+
const runtimeMatches = teamEnabled
|
|
419
|
+
? classification.matches
|
|
420
|
+
: classification.matches.filter((match) => match.skill !== 'team');
|
|
421
|
+
const terminalAutopilotReplay = await shouldSuppressAutopilotTerminalReplayActivation(
|
|
422
|
+
input.stateDir,
|
|
423
|
+
input.payload,
|
|
424
|
+
runtimeMatches.some((match) => match.skill === 'autopilot'),
|
|
425
|
+
input.sessionId || '',
|
|
426
|
+
);
|
|
427
|
+
if (terminalAutopilotReplay && runtimeMatches[0]?.skill === 'autopilot') return null;
|
|
428
|
+
|
|
429
|
+
return (dependencies.recordSkillActivation ?? recordSkillActivation)({
|
|
430
|
+
stateDir: input.stateDir,
|
|
431
|
+
sourceCwd: input.sourceCwd,
|
|
432
|
+
text: input.text,
|
|
433
|
+
sessionId: input.sessionId,
|
|
434
|
+
threadId: input.threadId,
|
|
435
|
+
turnId: input.turnId,
|
|
436
|
+
nowIso: input.nowIso,
|
|
437
|
+
classification,
|
|
438
|
+
allowSecondaryAutopilot: !terminalAutopilotReplay,
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Non-fatal notify-hook boundary for shared classification and state writes.
|
|
444
|
+
*/
|
|
445
|
+
export async function recordNotifySkillActivationNonFatal(
|
|
446
|
+
input: NotifySkillActivationInput,
|
|
447
|
+
logsDir: string,
|
|
448
|
+
dependencies: NotifySkillActivationDependencies = {},
|
|
449
|
+
): Promise<SkillActiveState | null> {
|
|
450
|
+
try {
|
|
451
|
+
return await recordNotifySkillActivation(input, dependencies);
|
|
452
|
+
} catch (error) {
|
|
453
|
+
await logNotifySkillActivationFailure(logsDir, input, error);
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
337
458
|
function buildIdleNotificationFingerprint(payload: Record<string, unknown>): string {
|
|
338
459
|
const lastAssistantMessage = safeString(payload['last-assistant-message'] || payload.last_assistant_message || '');
|
|
339
460
|
const summary = summarizeIdleNotificationMessage(lastAssistantMessage);
|
|
@@ -357,6 +478,78 @@ function isNotifyFallbackTaskCompletePayload(payload: Record<string, unknown>):
|
|
|
357
478
|
));
|
|
358
479
|
}
|
|
359
480
|
|
|
481
|
+
interface LeaderNotifyWriteDecision {
|
|
482
|
+
readonly context: ResolvedPromptTurnContext;
|
|
483
|
+
readonly pointerContext: SessionPointerContext;
|
|
484
|
+
readonly scope?: NotifyStateScope;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
async function preflightLeaderNotifyTarget(
|
|
488
|
+
stateDir: string,
|
|
489
|
+
context: ResolvedPromptTurnContext,
|
|
490
|
+
): Promise<ResolvedPromptTurnContext> {
|
|
491
|
+
if (context.status !== 'authorized') return context;
|
|
492
|
+
const scope: NotifyStateScope = {
|
|
493
|
+
targetSessionId: context.authorization.targetSessionId,
|
|
494
|
+
ownerCodexSessionId: context.authorization.ownerCodexSessionId,
|
|
495
|
+
allowedStorageSessionIds: context.authorization.allowedStorageSessionIds,
|
|
496
|
+
};
|
|
497
|
+
const probePath = await getScopedStatePathAtScope(stateDir, 'prompt-provenance-probe.json', scope);
|
|
498
|
+
const targetDir = dirname(probePath);
|
|
499
|
+
const evidence: Array<{ ownerCodexSessionId?: unknown; targetSessionId?: unknown }> = [];
|
|
500
|
+
let filenames: string[];
|
|
501
|
+
try {
|
|
502
|
+
filenames = await readdir(targetDir);
|
|
503
|
+
} catch (error) {
|
|
504
|
+
if ((error as NodeJS.ErrnoException).code === 'ENOENT') return context;
|
|
505
|
+
return preflightSelectedTargetOwner(context, [{ ownerCodexSessionId: {} }], 'notify', new Date().toISOString());
|
|
506
|
+
}
|
|
507
|
+
for (const filename of filenames) {
|
|
508
|
+
if (!filename.endsWith('-state.json') && filename !== 'skill-active-state.json') continue;
|
|
509
|
+
try {
|
|
510
|
+
const value = JSON.parse(await readFile(join(targetDir, filename), 'utf8')) as unknown;
|
|
511
|
+
evidence.push(...extractSelectedTargetOwnerEvidence(value));
|
|
512
|
+
} catch {
|
|
513
|
+
evidence.push({ ownerCodexSessionId: {} });
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
return preflightSelectedTargetOwner(context, evidence, 'notify', new Date().toISOString());
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
async function resolveLeaderNotifyWriteDecision(
|
|
520
|
+
cwd: string,
|
|
521
|
+
stateDir: string,
|
|
522
|
+
payloadSessionId: unknown,
|
|
523
|
+
): Promise<LeaderNotifyWriteDecision> {
|
|
524
|
+
const pointerContext = resolveSessionPointerContext(cwd);
|
|
525
|
+
const selectedPointer = await readSessionPointer(pointerContext);
|
|
526
|
+
const ownerEnvSessionId = process.env.OMX_SESSION_ID;
|
|
527
|
+
const normalizedOwnerEnvSessionId = normalizeSessionId(ownerEnvSessionId);
|
|
528
|
+
const forkScopeExists = normalizedOwnerEnvSessionId
|
|
529
|
+
? await hasExistingScopedSessionDir(stateDir, normalizedOwnerEnvSessionId)
|
|
530
|
+
: false;
|
|
531
|
+
const context = evaluateResolvedPromptTurn({
|
|
532
|
+
producer: 'notify',
|
|
533
|
+
payloadSessionId,
|
|
534
|
+
ownerEnvSessionId,
|
|
535
|
+
selectedPointer,
|
|
536
|
+
forkScopeExists,
|
|
537
|
+
nowIso: new Date().toISOString(),
|
|
538
|
+
});
|
|
539
|
+
const preflightedContext = await preflightLeaderNotifyTarget(stateDir, context);
|
|
540
|
+
if (preflightedContext.status !== 'authorized') return { context: preflightedContext, pointerContext };
|
|
541
|
+
if (context.status !== 'authorized') return { context, pointerContext };
|
|
542
|
+
return {
|
|
543
|
+
context: preflightedContext,
|
|
544
|
+
pointerContext,
|
|
545
|
+
scope: {
|
|
546
|
+
targetSessionId: preflightedContext.authorization.targetSessionId,
|
|
547
|
+
ownerCodexSessionId: preflightedContext.authorization.ownerCodexSessionId,
|
|
548
|
+
allowedStorageSessionIds: preflightedContext.authorization.allowedStorageSessionIds,
|
|
549
|
+
},
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
|
|
360
553
|
async function main() {
|
|
361
554
|
const rawPayload = process.argv[process.argv.length - 1];
|
|
362
555
|
if (!rawPayload || rawPayload.startsWith('-')) {
|
|
@@ -377,7 +570,8 @@ async function main() {
|
|
|
377
570
|
if (!(await isOmxManagedCwd(cwd))) {
|
|
378
571
|
process.exit(0);
|
|
379
572
|
}
|
|
380
|
-
const
|
|
573
|
+
const rawPayloadSessionId = payload.session_id ?? payload['session-id'];
|
|
574
|
+
const payloadSessionId = safeString(rawPayloadSessionId);
|
|
381
575
|
const payloadThreadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
382
576
|
const inputMessages = normalizeInputMessages(payload);
|
|
383
577
|
const latestUserInput = safeString(inputMessages.length > 0 ? inputMessages[inputMessages.length - 1] : '');
|
|
@@ -396,46 +590,70 @@ async function main() {
|
|
|
396
590
|
const stateDir = resolvedWorkerStateDir || getBaseStateDir(cwd);
|
|
397
591
|
const logsDir = join(cwd, '.omx', 'logs');
|
|
398
592
|
const omxDir = join(cwd, '.omx');
|
|
399
|
-
|
|
593
|
+
const leaderWriteDecision = isTeamWorker
|
|
594
|
+
? null
|
|
595
|
+
: await resolveLeaderNotifyWriteDecision(cwd, stateDir, rawPayloadSessionId);
|
|
596
|
+
if (!isTeamWorker && leaderWriteDecision?.context.status === 'rejected') {
|
|
597
|
+
await appendPromptSessionProvenanceRejection(
|
|
598
|
+
leaderWriteDecision.pointerContext,
|
|
599
|
+
leaderWriteDecision.context.diagnostic,
|
|
600
|
+
).catch(() => {});
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
if (!isTeamWorker && leaderWriteDecision?.context.status === 'suppressed-target-child') return;
|
|
604
|
+
const leaderAuthorization = leaderWriteDecision?.context.status === 'authorized'
|
|
605
|
+
? leaderWriteDecision.context.authorization
|
|
606
|
+
: null;
|
|
607
|
+
const canWriteLeaderScopedState = Boolean(leaderWriteDecision?.scope && leaderAuthorization);
|
|
608
|
+
let currentOmxSessionId = isTeamWorker
|
|
609
|
+
? ''
|
|
610
|
+
: leaderWriteDecision?.scope?.targetSessionId || '';
|
|
400
611
|
const getEffectiveSessionId = () => currentOmxSessionId || payloadSessionId;
|
|
401
612
|
|
|
402
613
|
// Ensure directories exist
|
|
403
614
|
await mkdir(logsDir, { recursive: true }).catch(() => {});
|
|
404
|
-
if (workerStateRootResolved) {
|
|
615
|
+
if (isTeamWorker && workerStateRootResolved) {
|
|
405
616
|
await mkdir(stateDir, { recursive: true }).catch(() => {});
|
|
406
617
|
currentOmxSessionId = await readCurrentSessionId(stateDir).catch(() => '') || '';
|
|
407
618
|
}
|
|
408
619
|
|
|
409
620
|
// Turn-level dedupe prevents double-processing when native notify and fallback
|
|
410
621
|
// watcher both emit the same completed turn.
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
622
|
+
if (isTeamWorker || canWriteLeaderScopedState) {
|
|
623
|
+
try {
|
|
624
|
+
if (!workerStateRootResolved) throw new Error('worker_state_root_unresolved');
|
|
625
|
+
const turnId = safeString(payload['turn-id'] || payload.turn_id || '');
|
|
626
|
+
if (turnId) {
|
|
627
|
+
const now = Date.now();
|
|
628
|
+
const threadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
629
|
+
const eventType = safeString(payload.type || 'agent-turn-complete');
|
|
630
|
+
const key = `${threadId || 'no-thread'}|${turnId}|${eventType}`;
|
|
631
|
+
const dedupeSessionId = getEffectiveSessionId();
|
|
632
|
+
const scope = leaderWriteDecision?.scope;
|
|
633
|
+
const dedupeStatePath = scope
|
|
634
|
+
? await getScopedStatePathAtScope(stateDir, 'notify-hook-state.json', scope)
|
|
635
|
+
: await getScopedStatePath(stateDir, 'notify-hook-state.json', dedupeSessionId);
|
|
636
|
+
const dedupeState = normalizeNotifyState(
|
|
637
|
+
scope
|
|
638
|
+
? await readScopedJsonAtScope(stateDir, 'notify-hook-state.json', scope, null)
|
|
639
|
+
: await readScopedJsonIfExists(stateDir, 'notify-hook-state.json', dedupeSessionId, null),
|
|
640
|
+
);
|
|
641
|
+
dedupeState.recent_turns = pruneRecentTurns(dedupeState.recent_turns, now);
|
|
642
|
+
if (dedupeState.recent_turns[key]) {
|
|
643
|
+
process.exit(0);
|
|
644
|
+
}
|
|
645
|
+
dedupeState.recent_turns[key] = now;
|
|
646
|
+
dedupeState.last_event_at = new Date().toISOString();
|
|
647
|
+
await mkdir(dirname(dedupeStatePath), { recursive: true }).catch(() => {});
|
|
648
|
+
await writeFile(dedupeStatePath, JSON.stringify(dedupeState, null, 2)).catch(() => {});
|
|
427
649
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
await mkdir(dirname(dedupeStatePath), { recursive: true }).catch(() => {});
|
|
431
|
-
await writeFile(dedupeStatePath, JSON.stringify(dedupeState, null, 2)).catch(() => {});
|
|
650
|
+
} catch {
|
|
651
|
+
// Non-critical
|
|
432
652
|
}
|
|
433
|
-
} catch {
|
|
434
|
-
// Non-critical
|
|
435
653
|
}
|
|
436
654
|
|
|
437
655
|
// 0.5. Track leader + native subagent thread activity (lead session only)
|
|
438
|
-
if (!isTeamWorker) {
|
|
656
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
439
657
|
try {
|
|
440
658
|
const threadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
441
659
|
const turnId = safeString(payload['turn-id'] || payload.turn_id || '');
|
|
@@ -513,14 +731,22 @@ async function main() {
|
|
|
513
731
|
|
|
514
732
|
// Reconcile Ralph ownership for same-Codex-session continuation before
|
|
515
733
|
// lifecycle counters or injection read the active scope.
|
|
516
|
-
if (!isTeamWorker) {
|
|
734
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
517
735
|
try {
|
|
518
736
|
const resumeResult = await reconcileRalphSessionResume({
|
|
519
737
|
stateDir,
|
|
520
|
-
|
|
738
|
+
authorization: leaderAuthorization!,
|
|
739
|
+
env: {
|
|
740
|
+
...process.env,
|
|
741
|
+
OMX_SESSION_ID: leaderAuthorization!.targetSessionId,
|
|
742
|
+
CODEX_SESSION_ID: '',
|
|
743
|
+
SESSION_ID: '',
|
|
744
|
+
},
|
|
521
745
|
payloadThreadId,
|
|
522
746
|
});
|
|
523
|
-
currentOmxSessionId
|
|
747
|
+
if (resumeResult.currentOmxSessionId && resumeResult.currentOmxSessionId === leaderAuthorization!.targetSessionId) {
|
|
748
|
+
currentOmxSessionId = resumeResult.currentOmxSessionId;
|
|
749
|
+
}
|
|
524
750
|
if (resumeResult.resumed || resumeResult.updatedCurrentOwner) {
|
|
525
751
|
await logNotifyHookEvent(logsDir, {
|
|
526
752
|
timestamp: new Date().toISOString(),
|
|
@@ -547,9 +773,9 @@ async function main() {
|
|
|
547
773
|
|
|
548
774
|
// 2. Update active mode state (increment iteration)
|
|
549
775
|
// GUARD: Skip when running inside a team worker to prevent state corruption
|
|
550
|
-
if (!isTeamWorker) {
|
|
776
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
551
777
|
try {
|
|
552
|
-
const scopedDirs = await getScopedStateDirsForCurrentSession(stateDir);
|
|
778
|
+
const scopedDirs = await getScopedStateDirsForCurrentSession(stateDir, getEffectiveSessionId());
|
|
553
779
|
for (const scopedDir of scopedDirs) {
|
|
554
780
|
const stateFiles = await readdir(scopedDir).catch(() => []);
|
|
555
781
|
for (const f of stateFiles) {
|
|
@@ -678,11 +904,12 @@ async function main() {
|
|
|
678
904
|
}
|
|
679
905
|
|
|
680
906
|
// 4. Write HUD state summary for `omx hud` (lead session only)
|
|
681
|
-
if (!isTeamWorker) {
|
|
907
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
682
908
|
try {
|
|
683
|
-
const
|
|
684
|
-
|
|
685
|
-
|
|
909
|
+
const scope = leaderWriteDecision?.scope;
|
|
910
|
+
if (!scope) return;
|
|
911
|
+
const hudStatePath = await getScopedStatePathAtScope(stateDir, 'hud-state.json', scope);
|
|
912
|
+
let hudState = await readScopedJsonAtScope(stateDir, 'hud-state.json', scope, {
|
|
686
913
|
last_turn_at: '',
|
|
687
914
|
turn_count: 0,
|
|
688
915
|
});
|
|
@@ -711,39 +938,42 @@ async function main() {
|
|
|
711
938
|
}
|
|
712
939
|
}
|
|
713
940
|
|
|
941
|
+
let skillSyncResult: Awaited<ReturnType<typeof syncSkillStateFromTurn>> | null = null;
|
|
942
|
+
|
|
714
943
|
// 4.45. Skill activation tracking: update skill-active-state.json before any nudge logic.
|
|
715
|
-
|
|
716
|
-
const { detectKeywords, recordSkillActivation } = await import('../hooks/keyword-detector.js');
|
|
944
|
+
if (isTeamWorker || canWriteLeaderScopedState) {
|
|
717
945
|
if (latestUserInput) {
|
|
718
|
-
|
|
719
|
-
const isAutopilotActivation = detectKeywords(latestUserInput)
|
|
720
|
-
.some((match) => match.skill === 'autopilot')
|
|
721
|
-
|| isExplicitAutopilotActivationText(latestUserInput);
|
|
722
|
-
const suppressTerminalReplay = await shouldSuppressAutopilotTerminalReplayActivation(
|
|
946
|
+
await recordNotifySkillActivationNonFatal({
|
|
723
947
|
stateDir,
|
|
948
|
+
sourceCwd: cwd,
|
|
949
|
+
text: latestUserInput,
|
|
950
|
+
sessionId: getEffectiveSessionId(),
|
|
951
|
+
threadId: payloadThreadId,
|
|
952
|
+
turnId: safeString(payload['turn-id'] || payload.turn_id || ''),
|
|
724
953
|
payload,
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
});
|
|
737
|
-
}
|
|
954
|
+
}, logsDir, {
|
|
955
|
+
recordSkillActivation: async (input) => recordSkillActivation({
|
|
956
|
+
...input,
|
|
957
|
+
...(!isTeamWorker && leaderWriteDecision ? {
|
|
958
|
+
resolvedPromptTurnContext: leaderWriteDecision.context,
|
|
959
|
+
onProvenanceRejected: async (diagnostic: import('../hooks/prompt-session-provenance.js').PromptDiagnosticDescriptor) => {
|
|
960
|
+
await appendPromptSessionProvenanceRejection(leaderWriteDecision.pointerContext, diagnostic).catch(() => {});
|
|
961
|
+
},
|
|
962
|
+
} : {}),
|
|
963
|
+
}),
|
|
964
|
+
});
|
|
738
965
|
}
|
|
739
|
-
} catch {
|
|
740
|
-
// Non-fatal: keyword detector module may not be built yet
|
|
741
|
-
}
|
|
742
966
|
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
967
|
+
try {
|
|
968
|
+
skillSyncResult = await syncSkillStateFromTurn(
|
|
969
|
+
stateDir,
|
|
970
|
+
payload,
|
|
971
|
+
!isTeamWorker && leaderAuthorization ? leaderAuthorization.targetSessionId : '',
|
|
972
|
+
!isTeamWorker ? leaderAuthorization : null,
|
|
973
|
+
);
|
|
974
|
+
} catch {
|
|
975
|
+
// Non-fatal: lifecycle sync should not block the hook
|
|
976
|
+
}
|
|
747
977
|
}
|
|
748
978
|
|
|
749
979
|
const effectiveSessionId = getEffectiveSessionId();
|
|
@@ -772,16 +1002,16 @@ async function main() {
|
|
|
772
1002
|
|
|
773
1003
|
// 5. Optional tmux prompt injection workaround (non-fatal, opt-in)
|
|
774
1004
|
// Skip for team workers - only the lead should inject prompts
|
|
775
|
-
if (!isTeamWorker) {
|
|
1005
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
776
1006
|
try {
|
|
777
|
-
await handleTmuxInjection({ payload, cwd, stateDir, logsDir });
|
|
1007
|
+
await handleTmuxInjection({ payload, cwd, stateDir, logsDir, context: leaderWriteDecision!.context });
|
|
778
1008
|
} catch {
|
|
779
1009
|
// Non-critical
|
|
780
1010
|
}
|
|
781
1011
|
}
|
|
782
1012
|
|
|
783
1013
|
// 5.5. Opportunistic team dispatch drain (leader session only).
|
|
784
|
-
if (!isTeamWorker) {
|
|
1014
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
785
1015
|
try {
|
|
786
1016
|
await drainPendingTeamDispatch({ cwd, stateDir, logsDir, maxPerTick: 5 } as any);
|
|
787
1017
|
} catch {
|
|
@@ -790,7 +1020,7 @@ async function main() {
|
|
|
790
1020
|
}
|
|
791
1021
|
|
|
792
1022
|
// 6. Team leader nudge (lead session only): remind the leader to check teammate/mailbox state.
|
|
793
|
-
if (!isTeamWorker && !deepInterviewStateActive) {
|
|
1023
|
+
if (!isTeamWorker && canWriteLeaderScopedState && !deepInterviewStateActive) {
|
|
794
1024
|
try {
|
|
795
1025
|
await maybeNudgeTeamLeader({ cwd, stateDir, logsDir, preComputedLeaderStale });
|
|
796
1026
|
} catch {
|
|
@@ -866,9 +1096,12 @@ async function main() {
|
|
|
866
1096
|
const idleFingerprint = buildIdleNotificationFingerprint(payload);
|
|
867
1097
|
const notifySessionId = getEffectiveSessionId();
|
|
868
1098
|
|
|
869
|
-
const shouldNotifyLifecycle = notifySessionId
|
|
870
|
-
|
|
871
|
-
|
|
1099
|
+
const shouldNotifyLifecycle = notifySessionId && (
|
|
1100
|
+
!canWriteLeaderScopedState
|
|
1101
|
+
|| shouldSendIdleNotification(stateDir, notifySessionId, idleFingerprint)
|
|
1102
|
+
);
|
|
1103
|
+
const shouldDispatchSessionIdleHookEvent = canWriteLeaderScopedState
|
|
1104
|
+
&& notifySessionId
|
|
872
1105
|
&& shouldSendSessionIdleHookEvent(stateDir, notifySessionId, idleFingerprint);
|
|
873
1106
|
|
|
874
1107
|
if (shouldNotifyLifecycle || shouldDispatchSessionIdleHookEvent) {
|
|
@@ -876,8 +1109,10 @@ async function main() {
|
|
|
876
1109
|
const idleResult = await notifyLifecycle('session-idle', {
|
|
877
1110
|
sessionId: notifySessionId,
|
|
878
1111
|
projectPath: cwd,
|
|
1112
|
+
}, undefined, {
|
|
1113
|
+
persistScopedReceipts: canWriteLeaderScopedState,
|
|
879
1114
|
});
|
|
880
|
-
if (idleResult && idleResult.anySuccess) {
|
|
1115
|
+
if (canWriteLeaderScopedState && idleResult && idleResult.anySuccess) {
|
|
881
1116
|
recordIdleNotificationSent(stateDir, notifySessionId, idleFingerprint);
|
|
882
1117
|
}
|
|
883
1118
|
}
|
|
@@ -919,9 +1154,16 @@ async function main() {
|
|
|
919
1154
|
|
|
920
1155
|
// 9. Auto-nudge: detect Codex stall patterns and automatically send a continuation prompt.
|
|
921
1156
|
// Works for both leader and worker contexts.
|
|
922
|
-
if (!deepInterviewStateActive || deepInterviewInputLockActive) {
|
|
1157
|
+
if ((isTeamWorker || canWriteLeaderScopedState) && (!deepInterviewStateActive || deepInterviewInputLockActive)) {
|
|
923
1158
|
try {
|
|
924
|
-
await maybeAutoNudge({
|
|
1159
|
+
await maybeAutoNudge({
|
|
1160
|
+
cwd,
|
|
1161
|
+
stateDir,
|
|
1162
|
+
logsDir,
|
|
1163
|
+
payload,
|
|
1164
|
+
context: isTeamWorker ? null : leaderWriteDecision!.context,
|
|
1165
|
+
syncResult: skillSyncResult,
|
|
1166
|
+
});
|
|
925
1167
|
} catch {
|
|
926
1168
|
// Non-critical
|
|
927
1169
|
}
|
|
@@ -938,6 +1180,7 @@ async function main() {
|
|
|
938
1180
|
logsDir,
|
|
939
1181
|
sessionId: getEffectiveSessionId(),
|
|
940
1182
|
turnId: safeString(payload['turn-id'] || payload.turn_id || ''),
|
|
1183
|
+
persistRuntimeFeedback: canWriteLeaderScopedState,
|
|
941
1184
|
});
|
|
942
1185
|
} catch (err) {
|
|
943
1186
|
// Structured warning for module import failure (issue #421)
|
|
@@ -956,12 +1199,12 @@ async function main() {
|
|
|
956
1199
|
|
|
957
1200
|
// 10. Code simplifier: delegate recently modified files for simplification.
|
|
958
1201
|
// Opt-in via ~/.omx/config.json: { "codeSimplifier": { "enabled": true } }
|
|
959
|
-
if (!isTeamWorker) {
|
|
1202
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
960
1203
|
try {
|
|
961
1204
|
const { processCodeSimplifier } = await import('../hooks/code-simplifier/index.js');
|
|
962
1205
|
const csResult = processCodeSimplifier(cwd, stateDir);
|
|
963
1206
|
if (csResult.triggered) {
|
|
964
|
-
const managedSession = await
|
|
1207
|
+
const managedSession = await isManagedOmxSessionAtPromptContext(cwd, leaderWriteDecision!.context, { allowTeamWorker: false });
|
|
965
1208
|
if (!managedSession) {
|
|
966
1209
|
const { logTmuxHookEvent } = await import('./notify-hook/log.js');
|
|
967
1210
|
await logTmuxHookEvent(logsDir, {
|
|
@@ -970,11 +1213,12 @@ async function main() {
|
|
|
970
1213
|
reason: 'unmanaged_session',
|
|
971
1214
|
});
|
|
972
1215
|
} else {
|
|
973
|
-
const csPaneId = await resolveNudgePaneTarget(stateDir, cwd, payload);
|
|
1216
|
+
const csPaneId = await resolveNudgePaneTarget(stateDir, cwd, payload, leaderWriteDecision!.context);
|
|
974
1217
|
if (csPaneId) {
|
|
975
1218
|
const csText = `${csResult.message} ${DEFAULT_MARKER}`;
|
|
976
1219
|
const sendResult = await sendPaneInput({
|
|
977
1220
|
paneTarget: csPaneId,
|
|
1221
|
+
exactPaneId: csPaneId,
|
|
978
1222
|
prompt: csText,
|
|
979
1223
|
submitKeyPresses: 2,
|
|
980
1224
|
submitDelayMs: 100,
|
|
@@ -1025,9 +1269,11 @@ async function logFatalNotifyHookError(err: unknown): Promise<void> {
|
|
|
1025
1269
|
}) + '\n').catch(() => {});
|
|
1026
1270
|
}
|
|
1027
1271
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1272
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
1273
|
+
main().catch((err) => {
|
|
1274
|
+
// Notify hooks are auxiliary background work. Avoid printing stack traces into
|
|
1275
|
+
// Codex TUI/PowerShell foreground panes; record diagnostics in .omx/logs.
|
|
1276
|
+
process.exitCode = 0;
|
|
1277
|
+
void logFatalNotifyHookError(err);
|
|
1278
|
+
});
|
|
1279
|
+
}
|