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
|
@@ -19,16 +19,19 @@
|
|
|
19
19
|
import { writeFile, appendFile, mkdir, readFile } from 'fs/promises';
|
|
20
20
|
import { existsSync } from 'fs';
|
|
21
21
|
import { dirname, join, resolve } from 'path';
|
|
22
|
-
import {
|
|
22
|
+
import { fileURLToPath } from 'url';
|
|
23
|
+
import { appendPromptSessionProvenanceRejection, isSessionStateUsable, readSessionPointer, normalizeSessionId, resolveSessionPointerContext, } from '../hooks/session.js';
|
|
24
|
+
import { evaluateResolvedPromptTurn, extractSelectedTargetOwnerEvidence, preflightSelectedTargetOwner, } from '../hooks/prompt-session-provenance.js';
|
|
25
|
+
import { readTeamModeConfig } from '../config/team-mode.js';
|
|
23
26
|
import { safeString, asNumber } from './notify-hook/utils.js';
|
|
24
27
|
import { getSessionTokenUsage, getQuotaUsage, normalizeInputMessages, } from './notify-hook/payload-parser.js';
|
|
25
28
|
import { getBaseStateDir } from '../mcp/state-paths.js';
|
|
26
|
-
import { getScopedStatePath, readCurrentSessionId, readScopedJsonIfExists, getScopedStateDirsForCurrentSession, normalizeNotifyState, pruneRecentTurns, readdir, } from './notify-hook/state-io.js';
|
|
29
|
+
import { getScopedStatePath, getScopedStatePathAtScope, readScopedJsonAtScope, hasExistingScopedSessionDir, readCurrentSessionId, readScopedJsonIfExists, getScopedStateDirsForCurrentSession, normalizeNotifyState, pruneRecentTurns, readdir, } from './notify-hook/state-io.js';
|
|
27
30
|
import { isLeaderStale, resolveLeaderStalenessThresholdMs, maybeNudgeTeamLeader } from './notify-hook/team-leader-nudge.js';
|
|
28
31
|
import { drainPendingTeamDispatch } from './notify-hook/team-dispatch.js';
|
|
29
32
|
import { handleTmuxInjection } from './notify-hook/tmux-injection.js';
|
|
30
33
|
import { maybeAutoNudge, resolveNudgePaneTarget, isDeepInterviewStateActive, isDeepInterviewInputLockActive, syncSkillStateFromTurn, } from './notify-hook/auto-nudge.js';
|
|
31
|
-
import {
|
|
34
|
+
import { isManagedOmxSessionAtPromptContext } from './notify-hook/managed-tmux.js';
|
|
32
35
|
import { logNotifyHookEvent } from './notify-hook/log.js';
|
|
33
36
|
import { reconcileRalphSessionResume } from './notify-hook/ralph-session-resume.js';
|
|
34
37
|
import { sendPaneInput } from './notify-hook/team-tmux-guard.js';
|
|
@@ -37,6 +40,7 @@ import { parseTeamWorkerEnv, resolveTeamStateDirForWorker, updateWorkerHeartbeat
|
|
|
37
40
|
import { DEFAULT_MARKER } from './tmux-hook-engine.js';
|
|
38
41
|
import { sameFilePath } from '../utils/paths.js';
|
|
39
42
|
import { MAX_NOTIFY_ARGV_JSON_BYTES, extractRawJsonStringField, utf8ByteLength, } from './hook-payload-guard.js';
|
|
43
|
+
import { classifyKeywordInput, recordSkillActivation, } from '../hooks/keyword-detector.js';
|
|
40
44
|
const RALPH_ACTIVE_PROGRESS_PHASES = new Set([
|
|
41
45
|
'start',
|
|
42
46
|
'started',
|
|
@@ -51,6 +55,8 @@ const RALPH_ACTIVE_PROGRESS_PHASES = new Set([
|
|
|
51
55
|
'fixing',
|
|
52
56
|
]);
|
|
53
57
|
const IDLE_NOTIFICATION_SUMMARY_MAX_LENGTH = 240;
|
|
58
|
+
const NOTIFY_SKILL_ACTIVATION_ERROR_MAX_LENGTH = 512;
|
|
59
|
+
const NOTIFY_SKILL_ACTIVATION_CONTEXT_MAX_LENGTH = 200;
|
|
54
60
|
async function readJsonFileIfObject(path) {
|
|
55
61
|
try {
|
|
56
62
|
const raw = await readFile(path, 'utf-8');
|
|
@@ -227,13 +233,6 @@ function classifyIdleNotificationPhase(message) {
|
|
|
227
233
|
}
|
|
228
234
|
return 'idle';
|
|
229
235
|
}
|
|
230
|
-
function isExplicitAutopilotActivationText(text) {
|
|
231
|
-
return /(?:^|[^\w])\$autopilot\b/i.test(text)
|
|
232
|
-
|| /^\s*\/autopilot\b/i.test(text)
|
|
233
|
-
|| /^\s*(?:please\s+)?autopilot(?:\s+(?:this|mode|workflow|skill|loop|now))?\s*[.!]?\s*$/i.test(text)
|
|
234
|
-
|| /\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)
|
|
235
|
-
|| /\bautopilot\s+(?:mode|workflow|skill|loop)\b/i.test(text);
|
|
236
|
-
}
|
|
237
236
|
function looksLikeAutopilotTerminalHandoff(text) {
|
|
238
237
|
return /\bAutopilot complete\b/i.test(text)
|
|
239
238
|
|| /\btask_complete\b/i.test(text)
|
|
@@ -281,6 +280,72 @@ async function shouldSuppressAutopilotTerminalReplayActivation(stateDir, payload
|
|
|
281
280
|
return false;
|
|
282
281
|
return hasTerminalAutopilotStateForNotifyTurn(stateDir, sessionId, payload);
|
|
283
282
|
}
|
|
283
|
+
function boundedNotifySkillActivationContext(value) {
|
|
284
|
+
try {
|
|
285
|
+
const context = safeString(value).trim().slice(0, NOTIFY_SKILL_ACTIVATION_CONTEXT_MAX_LENGTH);
|
|
286
|
+
return context || null;
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function boundedNotifySkillActivationError(error) {
|
|
293
|
+
try {
|
|
294
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
295
|
+
return message.slice(0, NOTIFY_SKILL_ACTIVATION_ERROR_MAX_LENGTH);
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return 'unknown_error';
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async function logNotifySkillActivationFailure(logsDir, input, error) {
|
|
302
|
+
await logNotifyHookEvent(logsDir, {
|
|
303
|
+
timestamp: new Date().toISOString(),
|
|
304
|
+
level: 'warn',
|
|
305
|
+
type: 'notify_skill_activation_failure',
|
|
306
|
+
error: boundedNotifySkillActivationError(error),
|
|
307
|
+
session_id: boundedNotifySkillActivationContext(input.sessionId),
|
|
308
|
+
thread_id: boundedNotifySkillActivationContext(input.threadId),
|
|
309
|
+
turn_id: boundedNotifySkillActivationContext(input.turnId),
|
|
310
|
+
}).catch(() => { });
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Records prompt skill activation using one shared input classification for the
|
|
314
|
+
* terminal-replay check and the state writer.
|
|
315
|
+
*/
|
|
316
|
+
export async function recordNotifySkillActivation(input, dependencies = {}) {
|
|
317
|
+
const classification = (dependencies.classifyKeywordInput ?? classifyKeywordInput)(input.text);
|
|
318
|
+
const teamEnabled = readTeamModeConfig(input.sourceCwd).enabled;
|
|
319
|
+
const runtimeMatches = teamEnabled
|
|
320
|
+
? classification.matches
|
|
321
|
+
: classification.matches.filter((match) => match.skill !== 'team');
|
|
322
|
+
const terminalAutopilotReplay = await shouldSuppressAutopilotTerminalReplayActivation(input.stateDir, input.payload, runtimeMatches.some((match) => match.skill === 'autopilot'), input.sessionId || '');
|
|
323
|
+
if (terminalAutopilotReplay && runtimeMatches[0]?.skill === 'autopilot')
|
|
324
|
+
return null;
|
|
325
|
+
return (dependencies.recordSkillActivation ?? recordSkillActivation)({
|
|
326
|
+
stateDir: input.stateDir,
|
|
327
|
+
sourceCwd: input.sourceCwd,
|
|
328
|
+
text: input.text,
|
|
329
|
+
sessionId: input.sessionId,
|
|
330
|
+
threadId: input.threadId,
|
|
331
|
+
turnId: input.turnId,
|
|
332
|
+
nowIso: input.nowIso,
|
|
333
|
+
classification,
|
|
334
|
+
allowSecondaryAutopilot: !terminalAutopilotReplay,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Non-fatal notify-hook boundary for shared classification and state writes.
|
|
339
|
+
*/
|
|
340
|
+
export async function recordNotifySkillActivationNonFatal(input, logsDir, dependencies = {}) {
|
|
341
|
+
try {
|
|
342
|
+
return await recordNotifySkillActivation(input, dependencies);
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
await logNotifySkillActivationFailure(logsDir, input, error);
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
284
349
|
function buildIdleNotificationFingerprint(payload) {
|
|
285
350
|
const lastAssistantMessage = safeString(payload['last-assistant-message'] || payload.last_assistant_message || '');
|
|
286
351
|
const summary = summarizeIdleNotificationMessage(lastAssistantMessage);
|
|
@@ -300,6 +365,70 @@ function isNotifyFallbackTaskCompletePayload(payload) {
|
|
|
300
365
|
return false;
|
|
301
366
|
return normalizeInputMessages(payload).some((message) => (message.includes('[notify-fallback] synthesized from rollout task_complete')));
|
|
302
367
|
}
|
|
368
|
+
async function preflightLeaderNotifyTarget(stateDir, context) {
|
|
369
|
+
if (context.status !== 'authorized')
|
|
370
|
+
return context;
|
|
371
|
+
const scope = {
|
|
372
|
+
targetSessionId: context.authorization.targetSessionId,
|
|
373
|
+
ownerCodexSessionId: context.authorization.ownerCodexSessionId,
|
|
374
|
+
allowedStorageSessionIds: context.authorization.allowedStorageSessionIds,
|
|
375
|
+
};
|
|
376
|
+
const probePath = await getScopedStatePathAtScope(stateDir, 'prompt-provenance-probe.json', scope);
|
|
377
|
+
const targetDir = dirname(probePath);
|
|
378
|
+
const evidence = [];
|
|
379
|
+
let filenames;
|
|
380
|
+
try {
|
|
381
|
+
filenames = await readdir(targetDir);
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
if (error.code === 'ENOENT')
|
|
385
|
+
return context;
|
|
386
|
+
return preflightSelectedTargetOwner(context, [{ ownerCodexSessionId: {} }], 'notify', new Date().toISOString());
|
|
387
|
+
}
|
|
388
|
+
for (const filename of filenames) {
|
|
389
|
+
if (!filename.endsWith('-state.json') && filename !== 'skill-active-state.json')
|
|
390
|
+
continue;
|
|
391
|
+
try {
|
|
392
|
+
const value = JSON.parse(await readFile(join(targetDir, filename), 'utf8'));
|
|
393
|
+
evidence.push(...extractSelectedTargetOwnerEvidence(value));
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
evidence.push({ ownerCodexSessionId: {} });
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return preflightSelectedTargetOwner(context, evidence, 'notify', new Date().toISOString());
|
|
400
|
+
}
|
|
401
|
+
async function resolveLeaderNotifyWriteDecision(cwd, stateDir, payloadSessionId) {
|
|
402
|
+
const pointerContext = resolveSessionPointerContext(cwd);
|
|
403
|
+
const selectedPointer = await readSessionPointer(pointerContext);
|
|
404
|
+
const ownerEnvSessionId = process.env.OMX_SESSION_ID;
|
|
405
|
+
const normalizedOwnerEnvSessionId = normalizeSessionId(ownerEnvSessionId);
|
|
406
|
+
const forkScopeExists = normalizedOwnerEnvSessionId
|
|
407
|
+
? await hasExistingScopedSessionDir(stateDir, normalizedOwnerEnvSessionId)
|
|
408
|
+
: false;
|
|
409
|
+
const context = evaluateResolvedPromptTurn({
|
|
410
|
+
producer: 'notify',
|
|
411
|
+
payloadSessionId,
|
|
412
|
+
ownerEnvSessionId,
|
|
413
|
+
selectedPointer,
|
|
414
|
+
forkScopeExists,
|
|
415
|
+
nowIso: new Date().toISOString(),
|
|
416
|
+
});
|
|
417
|
+
const preflightedContext = await preflightLeaderNotifyTarget(stateDir, context);
|
|
418
|
+
if (preflightedContext.status !== 'authorized')
|
|
419
|
+
return { context: preflightedContext, pointerContext };
|
|
420
|
+
if (context.status !== 'authorized')
|
|
421
|
+
return { context, pointerContext };
|
|
422
|
+
return {
|
|
423
|
+
context: preflightedContext,
|
|
424
|
+
pointerContext,
|
|
425
|
+
scope: {
|
|
426
|
+
targetSessionId: preflightedContext.authorization.targetSessionId,
|
|
427
|
+
ownerCodexSessionId: preflightedContext.authorization.ownerCodexSessionId,
|
|
428
|
+
allowedStorageSessionIds: preflightedContext.authorization.allowedStorageSessionIds,
|
|
429
|
+
},
|
|
430
|
+
};
|
|
431
|
+
}
|
|
303
432
|
async function main() {
|
|
304
433
|
const rawPayload = process.argv[process.argv.length - 1];
|
|
305
434
|
if (!rawPayload || rawPayload.startsWith('-')) {
|
|
@@ -319,7 +448,8 @@ async function main() {
|
|
|
319
448
|
if (!(await isOmxManagedCwd(cwd))) {
|
|
320
449
|
process.exit(0);
|
|
321
450
|
}
|
|
322
|
-
const
|
|
451
|
+
const rawPayloadSessionId = payload.session_id ?? payload['session-id'];
|
|
452
|
+
const payloadSessionId = safeString(rawPayloadSessionId);
|
|
323
453
|
const payloadThreadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
324
454
|
const inputMessages = normalizeInputMessages(payload);
|
|
325
455
|
const latestUserInput = safeString(inputMessages.length > 0 ? inputMessages[inputMessages.length - 1] : '');
|
|
@@ -336,43 +466,65 @@ async function main() {
|
|
|
336
466
|
const stateDir = resolvedWorkerStateDir || getBaseStateDir(cwd);
|
|
337
467
|
const logsDir = join(cwd, '.omx', 'logs');
|
|
338
468
|
const omxDir = join(cwd, '.omx');
|
|
339
|
-
|
|
469
|
+
const leaderWriteDecision = isTeamWorker
|
|
470
|
+
? null
|
|
471
|
+
: await resolveLeaderNotifyWriteDecision(cwd, stateDir, rawPayloadSessionId);
|
|
472
|
+
if (!isTeamWorker && leaderWriteDecision?.context.status === 'rejected') {
|
|
473
|
+
await appendPromptSessionProvenanceRejection(leaderWriteDecision.pointerContext, leaderWriteDecision.context.diagnostic).catch(() => { });
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (!isTeamWorker && leaderWriteDecision?.context.status === 'suppressed-target-child')
|
|
477
|
+
return;
|
|
478
|
+
const leaderAuthorization = leaderWriteDecision?.context.status === 'authorized'
|
|
479
|
+
? leaderWriteDecision.context.authorization
|
|
480
|
+
: null;
|
|
481
|
+
const canWriteLeaderScopedState = Boolean(leaderWriteDecision?.scope && leaderAuthorization);
|
|
482
|
+
let currentOmxSessionId = isTeamWorker
|
|
483
|
+
? ''
|
|
484
|
+
: leaderWriteDecision?.scope?.targetSessionId || '';
|
|
340
485
|
const getEffectiveSessionId = () => currentOmxSessionId || payloadSessionId;
|
|
341
486
|
// Ensure directories exist
|
|
342
487
|
await mkdir(logsDir, { recursive: true }).catch(() => { });
|
|
343
|
-
if (workerStateRootResolved) {
|
|
488
|
+
if (isTeamWorker && workerStateRootResolved) {
|
|
344
489
|
await mkdir(stateDir, { recursive: true }).catch(() => { });
|
|
345
490
|
currentOmxSessionId = await readCurrentSessionId(stateDir).catch(() => '') || '';
|
|
346
491
|
}
|
|
347
492
|
// Turn-level dedupe prevents double-processing when native notify and fallback
|
|
348
493
|
// watcher both emit the same completed turn.
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
494
|
+
if (isTeamWorker || canWriteLeaderScopedState) {
|
|
495
|
+
try {
|
|
496
|
+
if (!workerStateRootResolved)
|
|
497
|
+
throw new Error('worker_state_root_unresolved');
|
|
498
|
+
const turnId = safeString(payload['turn-id'] || payload.turn_id || '');
|
|
499
|
+
if (turnId) {
|
|
500
|
+
const now = Date.now();
|
|
501
|
+
const threadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
502
|
+
const eventType = safeString(payload.type || 'agent-turn-complete');
|
|
503
|
+
const key = `${threadId || 'no-thread'}|${turnId}|${eventType}`;
|
|
504
|
+
const dedupeSessionId = getEffectiveSessionId();
|
|
505
|
+
const scope = leaderWriteDecision?.scope;
|
|
506
|
+
const dedupeStatePath = scope
|
|
507
|
+
? await getScopedStatePathAtScope(stateDir, 'notify-hook-state.json', scope)
|
|
508
|
+
: await getScopedStatePath(stateDir, 'notify-hook-state.json', dedupeSessionId);
|
|
509
|
+
const dedupeState = normalizeNotifyState(scope
|
|
510
|
+
? await readScopedJsonAtScope(stateDir, 'notify-hook-state.json', scope, null)
|
|
511
|
+
: await readScopedJsonIfExists(stateDir, 'notify-hook-state.json', dedupeSessionId, null));
|
|
512
|
+
dedupeState.recent_turns = pruneRecentTurns(dedupeState.recent_turns, now);
|
|
513
|
+
if (dedupeState.recent_turns[key]) {
|
|
514
|
+
process.exit(0);
|
|
515
|
+
}
|
|
516
|
+
dedupeState.recent_turns[key] = now;
|
|
517
|
+
dedupeState.last_event_at = new Date().toISOString();
|
|
518
|
+
await mkdir(dirname(dedupeStatePath), { recursive: true }).catch(() => { });
|
|
519
|
+
await writeFile(dedupeStatePath, JSON.stringify(dedupeState, null, 2)).catch(() => { });
|
|
364
520
|
}
|
|
365
|
-
dedupeState.recent_turns[key] = now;
|
|
366
|
-
dedupeState.last_event_at = new Date().toISOString();
|
|
367
|
-
await mkdir(dirname(dedupeStatePath), { recursive: true }).catch(() => { });
|
|
368
|
-
await writeFile(dedupeStatePath, JSON.stringify(dedupeState, null, 2)).catch(() => { });
|
|
369
521
|
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
522
|
+
catch {
|
|
523
|
+
// Non-critical
|
|
524
|
+
}
|
|
373
525
|
}
|
|
374
526
|
// 0.5. Track leader + native subagent thread activity (lead session only)
|
|
375
|
-
if (!isTeamWorker) {
|
|
527
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
376
528
|
try {
|
|
377
529
|
const threadId = safeString(payload['thread-id'] || payload.thread_id || '');
|
|
378
530
|
const turnId = safeString(payload['turn-id'] || payload.turn_id || '');
|
|
@@ -444,14 +596,22 @@ async function main() {
|
|
|
444
596
|
}
|
|
445
597
|
// Reconcile Ralph ownership for same-Codex-session continuation before
|
|
446
598
|
// lifecycle counters or injection read the active scope.
|
|
447
|
-
if (!isTeamWorker) {
|
|
599
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
448
600
|
try {
|
|
449
601
|
const resumeResult = await reconcileRalphSessionResume({
|
|
450
602
|
stateDir,
|
|
451
|
-
|
|
603
|
+
authorization: leaderAuthorization,
|
|
604
|
+
env: {
|
|
605
|
+
...process.env,
|
|
606
|
+
OMX_SESSION_ID: leaderAuthorization.targetSessionId,
|
|
607
|
+
CODEX_SESSION_ID: '',
|
|
608
|
+
SESSION_ID: '',
|
|
609
|
+
},
|
|
452
610
|
payloadThreadId,
|
|
453
611
|
});
|
|
454
|
-
currentOmxSessionId
|
|
612
|
+
if (resumeResult.currentOmxSessionId && resumeResult.currentOmxSessionId === leaderAuthorization.targetSessionId) {
|
|
613
|
+
currentOmxSessionId = resumeResult.currentOmxSessionId;
|
|
614
|
+
}
|
|
455
615
|
if (resumeResult.resumed || resumeResult.updatedCurrentOwner) {
|
|
456
616
|
await logNotifyHookEvent(logsDir, {
|
|
457
617
|
timestamp: new Date().toISOString(),
|
|
@@ -478,9 +638,9 @@ async function main() {
|
|
|
478
638
|
}
|
|
479
639
|
// 2. Update active mode state (increment iteration)
|
|
480
640
|
// GUARD: Skip when running inside a team worker to prevent state corruption
|
|
481
|
-
if (!isTeamWorker) {
|
|
641
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
482
642
|
try {
|
|
483
|
-
const scopedDirs = await getScopedStateDirsForCurrentSession(stateDir);
|
|
643
|
+
const scopedDirs = await getScopedStateDirsForCurrentSession(stateDir, getEffectiveSessionId());
|
|
484
644
|
for (const scopedDir of scopedDirs) {
|
|
485
645
|
const stateFiles = await readdir(scopedDir).catch(() => []);
|
|
486
646
|
for (const f of stateFiles) {
|
|
@@ -608,11 +768,13 @@ async function main() {
|
|
|
608
768
|
}
|
|
609
769
|
}
|
|
610
770
|
// 4. Write HUD state summary for `omx hud` (lead session only)
|
|
611
|
-
if (!isTeamWorker) {
|
|
771
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
612
772
|
try {
|
|
613
|
-
const
|
|
614
|
-
|
|
615
|
-
|
|
773
|
+
const scope = leaderWriteDecision?.scope;
|
|
774
|
+
if (!scope)
|
|
775
|
+
return;
|
|
776
|
+
const hudStatePath = await getScopedStatePathAtScope(stateDir, 'hud-state.json', scope);
|
|
777
|
+
let hudState = await readScopedJsonAtScope(stateDir, 'hud-state.json', scope, {
|
|
616
778
|
last_turn_at: '',
|
|
617
779
|
turn_count: 0,
|
|
618
780
|
});
|
|
@@ -641,35 +803,36 @@ async function main() {
|
|
|
641
803
|
// Non-critical: heartbeat write failure should never block the hook
|
|
642
804
|
}
|
|
643
805
|
}
|
|
806
|
+
let skillSyncResult = null;
|
|
644
807
|
// 4.45. Skill activation tracking: update skill-active-state.json before any nudge logic.
|
|
645
|
-
|
|
646
|
-
const { detectKeywords, recordSkillActivation } = await import('../hooks/keyword-detector.js');
|
|
808
|
+
if (isTeamWorker || canWriteLeaderScopedState) {
|
|
647
809
|
if (latestUserInput) {
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
810
|
+
await recordNotifySkillActivationNonFatal({
|
|
811
|
+
stateDir,
|
|
812
|
+
sourceCwd: cwd,
|
|
813
|
+
text: latestUserInput,
|
|
814
|
+
sessionId: getEffectiveSessionId(),
|
|
815
|
+
threadId: payloadThreadId,
|
|
816
|
+
turnId: safeString(payload['turn-id'] || payload.turn_id || ''),
|
|
817
|
+
payload,
|
|
818
|
+
}, logsDir, {
|
|
819
|
+
recordSkillActivation: async (input) => recordSkillActivation({
|
|
820
|
+
...input,
|
|
821
|
+
...(!isTeamWorker && leaderWriteDecision ? {
|
|
822
|
+
resolvedPromptTurnContext: leaderWriteDecision.context,
|
|
823
|
+
onProvenanceRejected: async (diagnostic) => {
|
|
824
|
+
await appendPromptSessionProvenanceRejection(leaderWriteDecision.pointerContext, diagnostic).catch(() => { });
|
|
825
|
+
},
|
|
826
|
+
} : {}),
|
|
827
|
+
}),
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
try {
|
|
831
|
+
skillSyncResult = await syncSkillStateFromTurn(stateDir, payload, !isTeamWorker && leaderAuthorization ? leaderAuthorization.targetSessionId : '', !isTeamWorker ? leaderAuthorization : null);
|
|
832
|
+
}
|
|
833
|
+
catch {
|
|
834
|
+
// Non-fatal: lifecycle sync should not block the hook
|
|
663
835
|
}
|
|
664
|
-
}
|
|
665
|
-
catch {
|
|
666
|
-
// Non-fatal: keyword detector module may not be built yet
|
|
667
|
-
}
|
|
668
|
-
try {
|
|
669
|
-
await syncSkillStateFromTurn(stateDir, payload);
|
|
670
|
-
}
|
|
671
|
-
catch {
|
|
672
|
-
// Non-fatal: lifecycle sync should not block the hook
|
|
673
836
|
}
|
|
674
837
|
const effectiveSessionId = getEffectiveSessionId();
|
|
675
838
|
const deepInterviewStateActive = effectiveSessionId
|
|
@@ -696,16 +859,16 @@ async function main() {
|
|
|
696
859
|
}
|
|
697
860
|
// 5. Optional tmux prompt injection workaround (non-fatal, opt-in)
|
|
698
861
|
// Skip for team workers - only the lead should inject prompts
|
|
699
|
-
if (!isTeamWorker) {
|
|
862
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
700
863
|
try {
|
|
701
|
-
await handleTmuxInjection({ payload, cwd, stateDir, logsDir });
|
|
864
|
+
await handleTmuxInjection({ payload, cwd, stateDir, logsDir, context: leaderWriteDecision.context });
|
|
702
865
|
}
|
|
703
866
|
catch {
|
|
704
867
|
// Non-critical
|
|
705
868
|
}
|
|
706
869
|
}
|
|
707
870
|
// 5.5. Opportunistic team dispatch drain (leader session only).
|
|
708
|
-
if (!isTeamWorker) {
|
|
871
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
709
872
|
try {
|
|
710
873
|
await drainPendingTeamDispatch({ cwd, stateDir, logsDir, maxPerTick: 5 });
|
|
711
874
|
}
|
|
@@ -714,7 +877,7 @@ async function main() {
|
|
|
714
877
|
}
|
|
715
878
|
}
|
|
716
879
|
// 6. Team leader nudge (lead session only): remind the leader to check teammate/mailbox state.
|
|
717
|
-
if (!isTeamWorker && !deepInterviewStateActive) {
|
|
880
|
+
if (!isTeamWorker && canWriteLeaderScopedState && !deepInterviewStateActive) {
|
|
718
881
|
try {
|
|
719
882
|
await maybeNudgeTeamLeader({ cwd, stateDir, logsDir, preComputedLeaderStale });
|
|
720
883
|
}
|
|
@@ -783,17 +946,20 @@ async function main() {
|
|
|
783
946
|
const { shouldSendIdleNotification, recordIdleNotificationSent, shouldSendSessionIdleHookEvent, recordSessionIdleHookEventSent, } = await import('../notifications/idle-cooldown.js');
|
|
784
947
|
const idleFingerprint = buildIdleNotificationFingerprint(payload);
|
|
785
948
|
const notifySessionId = getEffectiveSessionId();
|
|
786
|
-
const shouldNotifyLifecycle = notifySessionId
|
|
787
|
-
|
|
788
|
-
const shouldDispatchSessionIdleHookEvent =
|
|
949
|
+
const shouldNotifyLifecycle = notifySessionId && (!canWriteLeaderScopedState
|
|
950
|
+
|| shouldSendIdleNotification(stateDir, notifySessionId, idleFingerprint));
|
|
951
|
+
const shouldDispatchSessionIdleHookEvent = canWriteLeaderScopedState
|
|
952
|
+
&& notifySessionId
|
|
789
953
|
&& shouldSendSessionIdleHookEvent(stateDir, notifySessionId, idleFingerprint);
|
|
790
954
|
if (shouldNotifyLifecycle || shouldDispatchSessionIdleHookEvent) {
|
|
791
955
|
if (shouldNotifyLifecycle) {
|
|
792
956
|
const idleResult = await notifyLifecycle('session-idle', {
|
|
793
957
|
sessionId: notifySessionId,
|
|
794
958
|
projectPath: cwd,
|
|
959
|
+
}, undefined, {
|
|
960
|
+
persistScopedReceipts: canWriteLeaderScopedState,
|
|
795
961
|
});
|
|
796
|
-
if (idleResult && idleResult.anySuccess) {
|
|
962
|
+
if (canWriteLeaderScopedState && idleResult && idleResult.anySuccess) {
|
|
797
963
|
recordIdleNotificationSent(stateDir, notifySessionId, idleFingerprint);
|
|
798
964
|
}
|
|
799
965
|
}
|
|
@@ -835,9 +1001,16 @@ async function main() {
|
|
|
835
1001
|
}
|
|
836
1002
|
// 9. Auto-nudge: detect Codex stall patterns and automatically send a continuation prompt.
|
|
837
1003
|
// Works for both leader and worker contexts.
|
|
838
|
-
if (!deepInterviewStateActive || deepInterviewInputLockActive) {
|
|
1004
|
+
if ((isTeamWorker || canWriteLeaderScopedState) && (!deepInterviewStateActive || deepInterviewInputLockActive)) {
|
|
839
1005
|
try {
|
|
840
|
-
await maybeAutoNudge({
|
|
1006
|
+
await maybeAutoNudge({
|
|
1007
|
+
cwd,
|
|
1008
|
+
stateDir,
|
|
1009
|
+
logsDir,
|
|
1010
|
+
payload,
|
|
1011
|
+
context: isTeamWorker ? null : leaderWriteDecision.context,
|
|
1012
|
+
syncResult: skillSyncResult,
|
|
1013
|
+
});
|
|
841
1014
|
}
|
|
842
1015
|
catch {
|
|
843
1016
|
// Non-critical
|
|
@@ -854,6 +1027,7 @@ async function main() {
|
|
|
854
1027
|
logsDir,
|
|
855
1028
|
sessionId: getEffectiveSessionId(),
|
|
856
1029
|
turnId: safeString(payload['turn-id'] || payload.turn_id || ''),
|
|
1030
|
+
persistRuntimeFeedback: canWriteLeaderScopedState,
|
|
857
1031
|
});
|
|
858
1032
|
}
|
|
859
1033
|
catch (err) {
|
|
@@ -872,12 +1046,12 @@ async function main() {
|
|
|
872
1046
|
}
|
|
873
1047
|
// 10. Code simplifier: delegate recently modified files for simplification.
|
|
874
1048
|
// Opt-in via ~/.omx/config.json: { "codeSimplifier": { "enabled": true } }
|
|
875
|
-
if (!isTeamWorker) {
|
|
1049
|
+
if (!isTeamWorker && canWriteLeaderScopedState) {
|
|
876
1050
|
try {
|
|
877
1051
|
const { processCodeSimplifier } = await import('../hooks/code-simplifier/index.js');
|
|
878
1052
|
const csResult = processCodeSimplifier(cwd, stateDir);
|
|
879
1053
|
if (csResult.triggered) {
|
|
880
|
-
const managedSession = await
|
|
1054
|
+
const managedSession = await isManagedOmxSessionAtPromptContext(cwd, leaderWriteDecision.context, { allowTeamWorker: false });
|
|
881
1055
|
if (!managedSession) {
|
|
882
1056
|
const { logTmuxHookEvent } = await import('./notify-hook/log.js');
|
|
883
1057
|
await logTmuxHookEvent(logsDir, {
|
|
@@ -887,11 +1061,12 @@ async function main() {
|
|
|
887
1061
|
});
|
|
888
1062
|
}
|
|
889
1063
|
else {
|
|
890
|
-
const csPaneId = await resolveNudgePaneTarget(stateDir, cwd, payload);
|
|
1064
|
+
const csPaneId = await resolveNudgePaneTarget(stateDir, cwd, payload, leaderWriteDecision.context);
|
|
891
1065
|
if (csPaneId) {
|
|
892
1066
|
const csText = `${csResult.message} ${DEFAULT_MARKER}`;
|
|
893
1067
|
const sendResult = await sendPaneInput({
|
|
894
1068
|
paneTarget: csPaneId,
|
|
1069
|
+
exactPaneId: csPaneId,
|
|
895
1070
|
prompt: csText,
|
|
896
1071
|
submitKeyPresses: 2,
|
|
897
1072
|
submitDelayMs: 100,
|
|
@@ -941,10 +1116,12 @@ async function logFatalNotifyHookError(err) {
|
|
|
941
1116
|
error: err instanceof Error ? err.message : String(err),
|
|
942
1117
|
}) + '\n').catch(() => { });
|
|
943
1118
|
}
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
1119
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
1120
|
+
main().catch((err) => {
|
|
1121
|
+
// Notify hooks are auxiliary background work. Avoid printing stack traces into
|
|
1122
|
+
// Codex TUI/PowerShell foreground panes; record diagnostics in .omx/logs.
|
|
1123
|
+
process.exitCode = 0;
|
|
1124
|
+
void logFatalNotifyHookError(err);
|
|
1125
|
+
});
|
|
1126
|
+
}
|
|
950
1127
|
//# sourceMappingURL=notify-hook.js.map
|