oh-my-codex 0.20.1 → 0.20.2
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 +6 -6
- package/Cargo.toml +1 -1
- package/README.md +10 -1
- package/dist/adapt/__tests__/hermes.test.js.map +1 -1
- package/dist/adapt/contracts.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.map +1 -1
- package/dist/auth/hotswap.js +17 -4
- 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 +4 -4
- 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.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.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 +650 -15
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- 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 +216 -11
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +49 -3
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-parity.test.js +84 -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 +128 -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 +187 -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 +129 -0
- package/dist/cli/__tests__/ralplan.test.js.map +1 -0
- package/dist/cli/__tests__/resume.test.js +6 -1
- 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.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 +2261 -14
- 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.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 +1771 -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.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 +18 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +594 -130
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +11 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +108 -20
- package/dist/cli/index.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 +18 -0
- package/dist/cli/native-hook-claim-journal.d.ts.map +1 -0
- package/dist/cli/native-hook-claim-journal.js +239 -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 +14 -0
- package/dist/cli/ralplan.d.ts.map +1 -0
- package/dist/cli/ralplan.js +203 -0
- package/dist/cli/ralplan.js.map +1 -0
- 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 +53 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +1401 -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 +8 -0
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +944 -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.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 +850 -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/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 +21 -16
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +991 -137
- package/dist/config/generator.js.map +1 -1
- package/dist/config/mcp-registry.js.map +1 -1
- package/dist/config/models.d.ts +2 -2
- package/dist/config/models.d.ts.map +1 -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 +1372 -2
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +14 -0
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +669 -1
- 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.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +8 -1
- 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.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -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.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 +532 -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 +139 -34
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +1239 -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 +103 -1
- package/dist/leader/__tests__/contract.test.js.map +1 -1
- package/dist/leader/contract.d.ts +26 -5
- package/dist/leader/contract.d.ts.map +1 -1
- package/dist/leader/contract.js +109 -3
- package/dist/leader/contract.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.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/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.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 +23 -23
- package/dist/mcp/wiki-server.d.ts.map +1 -1
- 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/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.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.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +8 -5
- 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 +403 -8
- package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +112 -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 +155 -60
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/ralplan/runtime.d.ts +2 -2
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +1 -2
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/runtime/bridge.d.ts.map +1 -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 +4121 -592
- 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__/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 +205 -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 +175 -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 +848 -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.map +1 -1
- package/dist/scripts/codex-native-hook.js +689 -156
- 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 +136 -30
- 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 +39 -13
- 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 +1 -1
- 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-tmux-guard.d.ts +4 -4
- 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.d.ts +2 -2
- 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 +25 -16
- 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 +266 -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 +879 -2
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +1528 -7
- 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__/operations.test.js +64 -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.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__/adapted-role-binding.test.d.ts +2 -0
- package/dist/subagents/__tests__/adapted-role-binding.test.d.ts.map +1 -0
- package/dist/subagents/__tests__/adapted-role-binding.test.js +988 -0
- package/dist/subagents/__tests__/adapted-role-binding.test.js.map +1 -0
- 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 +273 -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/adapted-role-binding.d.ts +17 -0
- package/dist/subagents/adapted-role-binding.d.ts.map +1 -0
- package/dist/subagents/adapted-role-binding.js +75 -0
- package/dist/subagents/adapted-role-binding.js.map +1 -0
- 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 +172 -0
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +1077 -61
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/approved-execution.test.js.map +1 -1
- package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +231 -1
- 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.test.js +401 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +181 -0
- 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__/tmux-session.test.js +434 -4
- 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/api-interop.d.ts +2 -2
- package/dist/team/api-interop.d.ts.map +1 -1
- 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/followup-planner.js.map +1 -1
- package/dist/team/goal-workflow.js.map +1 -1
- package/dist/team/idle-nudge.d.ts.map +1 -1
- package/dist/team/model-contract.d.ts +20 -1
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +267 -30
- 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.map +1 -1
- package/dist/team/runtime.js +83 -52
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +9 -7
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +69 -28
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/dispatch-lock.js.map +1 -1
- package/dist/team/state/dispatch.js.map +1 -1
- package/dist/team/state/events.js.map +1 -1
- package/dist/team/state/tasks.js.map +1 -1
- package/dist/team/state-root.js.map +1 -1
- 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/tmux-session.d.ts +2 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +90 -42
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.js.map +1 -1
- 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/agents-model-table.js.map +1 -1
- 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.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.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/skills/omx-setup/SKILL.md +10 -5
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +4 -2
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -2
- package/skills/omx-setup/SKILL.md +10 -5
- package/skills/ralph/SKILL.md +4 -2
- package/skills/ralplan/SKILL.md +5 -2
- package/src/scripts/__tests__/codex-native-hook.test.ts +17522 -10630
- 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__/role-intent-bootstrap-e2e-3181.test.ts +215 -0
- package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +193 -0
- package/src/scripts/__tests__/smoke-packed-install.test.ts +991 -4
- package/src/scripts/codex-native-hook.ts +779 -159
- package/src/scripts/notify-fallback-delivery.ts +416 -0
- package/src/scripts/notify-fallback-watcher.ts +132 -40
- package/src/scripts/notify-hook/auto-nudge.ts +43 -12
- 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/tmux-injection.ts +38 -21
- package/src/scripts/notify-hook/visual-verdict.ts +22 -12
- package/src/scripts/notify-hook.ts +335 -90
- package/src/scripts/smoke-packed-install.ts +1829 -6
|
@@ -4,6 +4,7 @@ import { dirname, join } from 'path';
|
|
|
4
4
|
import { captureTmuxPaneFromEnv } from '../../state/mode-state-context.js';
|
|
5
5
|
import { resolveCodexPane } from '../tmux-hook-engine.js';
|
|
6
6
|
import { safeString } from './utils.js';
|
|
7
|
+
import type { PromptMutationAuthorization } from '../../hooks/prompt-session-provenance.js';
|
|
7
8
|
|
|
8
9
|
const SESSION_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
9
10
|
const RALPH_TERMINAL_PHASES = new Set(['blocked_on_user', 'complete', 'failed', 'cancelled', 'interrupted']);
|
|
@@ -19,7 +20,9 @@ interface RalphSessionResumeHooks {
|
|
|
19
20
|
|
|
20
21
|
interface RalphSessionResumeParams {
|
|
21
22
|
stateDir: string;
|
|
22
|
-
|
|
23
|
+
authorization?: PromptMutationAuthorization;
|
|
24
|
+
/** Worker-only legacy identity; leader resume requires authorization. */
|
|
25
|
+
payloadSessionId?: string;
|
|
23
26
|
payloadThreadId?: string;
|
|
24
27
|
env?: NodeJS.ProcessEnv;
|
|
25
28
|
hooks?: RalphSessionResumeHooks;
|
|
@@ -210,25 +213,6 @@ async function markRalphStateAbandoned(
|
|
|
210
213
|
});
|
|
211
214
|
}
|
|
212
215
|
|
|
213
|
-
function readSessionIdFromEnvironment(env: NodeJS.ProcessEnv = process.env): string {
|
|
214
|
-
const candidates = [env.OMX_SESSION_ID, env.CODEX_SESSION_ID, env.SESSION_ID];
|
|
215
|
-
for (const candidate of candidates) {
|
|
216
|
-
const sessionId = safeString(candidate).trim();
|
|
217
|
-
if (SESSION_ID_PATTERN.test(sessionId)) return sessionId;
|
|
218
|
-
}
|
|
219
|
-
return '';
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
async function readCurrentOmxSessionId(stateDir: string, env: NodeJS.ProcessEnv = process.env): Promise<string> {
|
|
223
|
-
const envSessionId = readSessionIdFromEnvironment(env);
|
|
224
|
-
if (envSessionId) return envSessionId;
|
|
225
|
-
|
|
226
|
-
const session = await readJson(join(stateDir, 'session.json'));
|
|
227
|
-
if (!session || typeof session !== 'object') return '';
|
|
228
|
-
const sessionId = safeString(session?.session_id).trim();
|
|
229
|
-
return SESSION_ID_PATTERN.test(sessionId) ? sessionId : '';
|
|
230
|
-
}
|
|
231
|
-
|
|
232
216
|
function resolveResumePane(env: NodeJS.ProcessEnv = process.env): string {
|
|
233
217
|
const injectedPane = captureTmuxPaneFromEnv(env);
|
|
234
218
|
if (env !== process.env && injectedPane) return injectedPane;
|
|
@@ -249,8 +233,9 @@ function bindCurrentPane(state: Record<string, unknown>, nowIso: string, env: No
|
|
|
249
233
|
async function scanMatchingRalphCandidates(
|
|
250
234
|
stateDir: string,
|
|
251
235
|
currentOmxSessionId: string,
|
|
252
|
-
|
|
236
|
+
ownerCodexSessionId: string,
|
|
253
237
|
payloadThreadId: string,
|
|
238
|
+
allowedStorageSessionIds: readonly string[],
|
|
254
239
|
env: NodeJS.ProcessEnv = process.env,
|
|
255
240
|
): Promise<{ candidates: RalphStateCandidate[]; abandonedCount: number }> {
|
|
256
241
|
const sessionsRoot = join(stateDir, 'sessions');
|
|
@@ -260,18 +245,15 @@ async function scanMatchingRalphCandidates(
|
|
|
260
245
|
const matches: RalphStateCandidate[] = [];
|
|
261
246
|
let abandonedCount = 0;
|
|
262
247
|
for (const entry of entries) {
|
|
263
|
-
if (!entry.isDirectory() || !SESSION_ID_PATTERN.test(entry.name) || entry.name === currentOmxSessionId) continue;
|
|
248
|
+
if (!entry.isDirectory() || !SESSION_ID_PATTERN.test(entry.name) || entry.name === currentOmxSessionId || !allowedStorageSessionIds.includes(entry.name)) continue;
|
|
264
249
|
const path = join(sessionsRoot, entry.name, 'ralph-state.json');
|
|
265
250
|
if (!existsSync(path)) continue;
|
|
266
251
|
const state = await readJson(path);
|
|
267
252
|
if (!isActiveRalphCandidate(state)) continue;
|
|
268
253
|
const ownerSessionId = safeString(state.owner_codex_session_id).trim();
|
|
269
254
|
const ownerThreadId = safeString(state.owner_codex_thread_id).trim();
|
|
270
|
-
if (ownerSessionId)
|
|
271
|
-
|
|
272
|
-
} else if (!payloadThreadId || !ownerThreadId || ownerThreadId !== payloadThreadId) {
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
255
|
+
if (ownerSessionId !== ownerCodexSessionId) continue;
|
|
256
|
+
if (ownerThreadId && payloadThreadId && ownerThreadId !== payloadThreadId) continue;
|
|
275
257
|
const freshness = await readRalphStateFreshness(path, state, env);
|
|
276
258
|
if (freshness.stale) {
|
|
277
259
|
await markRalphStateAbandoned(path, state, freshness);
|
|
@@ -289,21 +271,29 @@ async function scanMatchingRalphCandidates(
|
|
|
289
271
|
|
|
290
272
|
export async function reconcileRalphSessionResume({
|
|
291
273
|
stateDir,
|
|
292
|
-
|
|
274
|
+
authorization,
|
|
293
275
|
payloadThreadId = '',
|
|
294
276
|
env = process.env,
|
|
295
277
|
hooks,
|
|
296
278
|
}: RalphSessionResumeParams): Promise<RalphSessionResumeResult> {
|
|
279
|
+
if (!authorization) {
|
|
280
|
+
return {
|
|
281
|
+
currentOmxSessionId: '',
|
|
282
|
+
resumed: false,
|
|
283
|
+
updatedCurrentOwner: false,
|
|
284
|
+
reason: 'authorization_missing',
|
|
285
|
+
};
|
|
286
|
+
}
|
|
297
287
|
const lockedResult = await withRalphResumeLock(stateDir, async () => {
|
|
298
288
|
await hooks?.afterLockAcquired?.();
|
|
299
289
|
|
|
300
|
-
const currentOmxSessionId =
|
|
301
|
-
if (!currentOmxSessionId) {
|
|
290
|
+
const currentOmxSessionId = authorization.targetSessionId;
|
|
291
|
+
if (!SESSION_ID_PATTERN.test(currentOmxSessionId) || !authorization.allowedStorageSessionIds.includes(currentOmxSessionId)) {
|
|
302
292
|
return {
|
|
303
293
|
currentOmxSessionId: '',
|
|
304
294
|
resumed: false,
|
|
305
295
|
updatedCurrentOwner: false,
|
|
306
|
-
reason: '
|
|
296
|
+
reason: 'current_omx_session_unauthorized',
|
|
307
297
|
};
|
|
308
298
|
}
|
|
309
299
|
|
|
@@ -315,6 +305,16 @@ export async function reconcileRalphSessionResume({
|
|
|
315
305
|
: null;
|
|
316
306
|
const nowIso = new Date().toISOString();
|
|
317
307
|
|
|
308
|
+
const currentOwnerCodexSessionId = safeString(currentRalphState?.owner_codex_session_id).trim();
|
|
309
|
+
if (currentRalphState && currentOwnerCodexSessionId && currentOwnerCodexSessionId !== authorization.ownerCodexSessionId) {
|
|
310
|
+
return {
|
|
311
|
+
currentOmxSessionId,
|
|
312
|
+
resumed: false,
|
|
313
|
+
updatedCurrentOwner: false,
|
|
314
|
+
reason: 'current_ralph_owner_unauthorized',
|
|
315
|
+
targetPath: currentRalphPath,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
318
|
if (currentRalphState && currentRalphState.active === true) {
|
|
319
319
|
const freshness = await readRalphStateFreshness(currentRalphPath, currentRalphState, env);
|
|
320
320
|
if (freshness.stale) {
|
|
@@ -335,8 +335,8 @@ export async function reconcileRalphSessionResume({
|
|
|
335
335
|
updated.owner_omx_session_id = currentOmxSessionId;
|
|
336
336
|
changed = true;
|
|
337
337
|
}
|
|
338
|
-
if (
|
|
339
|
-
updated.owner_codex_session_id =
|
|
338
|
+
if (!safeString(updated.owner_codex_session_id).trim()) {
|
|
339
|
+
updated.owner_codex_session_id = authorization.ownerCodexSessionId;
|
|
340
340
|
changed = true;
|
|
341
341
|
}
|
|
342
342
|
if (
|
|
@@ -382,14 +382,14 @@ export async function reconcileRalphSessionResume({
|
|
|
382
382
|
};
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
const normalizedPayloadSessionId =
|
|
385
|
+
const normalizedPayloadSessionId = authorization.ownerCodexSessionId;
|
|
386
386
|
const normalizedPayloadThreadId = safeString(payloadThreadId).trim();
|
|
387
|
-
if (!normalizedPayloadSessionId
|
|
387
|
+
if (!normalizedPayloadSessionId) {
|
|
388
388
|
return {
|
|
389
389
|
currentOmxSessionId,
|
|
390
390
|
resumed: false,
|
|
391
391
|
updatedCurrentOwner: false,
|
|
392
|
-
reason: '
|
|
392
|
+
reason: 'authorized_owner_missing',
|
|
393
393
|
};
|
|
394
394
|
}
|
|
395
395
|
|
|
@@ -398,6 +398,7 @@ export async function reconcileRalphSessionResume({
|
|
|
398
398
|
currentOmxSessionId,
|
|
399
399
|
normalizedPayloadSessionId,
|
|
400
400
|
normalizedPayloadThreadId,
|
|
401
|
+
authorization.allowedStorageSessionIds,
|
|
401
402
|
env,
|
|
402
403
|
);
|
|
403
404
|
if (candidates.length !== 1) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* State file I/O helpers for notify-hook modules.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { mkdir, readFile, readdir, writeFile } from 'fs/promises';
|
|
5
|
+
import { mkdir, readFile, readdir, stat, writeFile } from 'fs/promises';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
7
|
import { validateSessionId } from '../../mcp/state-paths.js';
|
|
8
8
|
import { asNumber, safeString } from './utils.js';
|
|
@@ -23,27 +23,74 @@ function isSafeStateFileName(fileName: string): boolean {
|
|
|
23
23
|
&& !fileName.includes('\\');
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
interface SessionMetadata {
|
|
26
|
+
export interface SessionMetadata {
|
|
27
27
|
sessionId?: string;
|
|
28
|
-
|
|
28
|
+
aliases: string[];
|
|
29
|
+
status: 'missing' | 'unusable' | 'usable';
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
async function readSessionMetadataFromBaseStateDir(baseStateDir: string): Promise<SessionMetadata> {
|
|
32
|
-
|
|
33
|
+
let session: any;
|
|
34
|
+
try {
|
|
35
|
+
session = JSON.parse(await readFile(join(baseStateDir, 'session.json'), 'utf-8'));
|
|
36
|
+
} catch (error: any) {
|
|
37
|
+
return { aliases: [], status: error?.code === 'ENOENT' ? 'missing' : 'unusable' };
|
|
38
|
+
}
|
|
39
|
+
if (!session || typeof session !== 'object' || Array.isArray(session)) {
|
|
40
|
+
return { aliases: [], status: 'unusable' };
|
|
41
|
+
}
|
|
42
|
+
|
|
33
43
|
let sessionId: string | undefined;
|
|
34
44
|
try {
|
|
35
|
-
sessionId = validateSessionId(session
|
|
45
|
+
sessionId = validateSessionId(session.session_id);
|
|
36
46
|
} catch {
|
|
37
|
-
|
|
47
|
+
return { aliases: [], status: 'unusable' };
|
|
38
48
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
session
|
|
49
|
+
if (!sessionId) return { aliases: [], status: 'unusable' };
|
|
50
|
+
|
|
51
|
+
const aliases = [
|
|
52
|
+
session.native_session_id,
|
|
53
|
+
session.codex_session_id,
|
|
54
|
+
session.previous_native_session_id,
|
|
55
|
+
session.owner_omx_session_id,
|
|
43
56
|
]
|
|
44
57
|
.map((value) => safeString(value).trim())
|
|
45
|
-
.filter(
|
|
46
|
-
|
|
58
|
+
.filter((value) => {
|
|
59
|
+
try {
|
|
60
|
+
return Boolean(validateSessionId(value));
|
|
61
|
+
} catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return { sessionId, aliases: [...new Set(aliases)], status: 'usable' };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function readNotifySessionMetadata(baseStateDir: string): Promise<SessionMetadata> {
|
|
69
|
+
return readSessionMetadataFromBaseStateDir(baseStateDir);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function readOmxSessionIdFromEnvironment(env: NodeJS.ProcessEnv = process.env): string | undefined {
|
|
73
|
+
const candidate = safeString(env.OMX_SESSION_ID).trim();
|
|
74
|
+
if (!candidate) return undefined;
|
|
75
|
+
try {
|
|
76
|
+
return validateSessionId(candidate);
|
|
77
|
+
} catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Neutral fact for the provenance evaluator; it never interprets fork policy. */
|
|
83
|
+
|
|
84
|
+
export async function hasExistingScopedSessionDir(baseStateDir: string, sessionId: string): Promise<boolean> {
|
|
85
|
+
try {
|
|
86
|
+
return (await stat(join(baseStateDir, 'sessions', sessionId))).isDirectory();
|
|
87
|
+
} catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function getOmxSessionIdFromEnvironment(): string | undefined {
|
|
93
|
+
return readOmxSessionIdFromEnvironment();
|
|
47
94
|
}
|
|
48
95
|
|
|
49
96
|
function readSessionIdFromEnvironment(): string | undefined {
|
|
@@ -63,7 +110,7 @@ function readSessionIdFromEnvironment(): string | undefined {
|
|
|
63
110
|
|
|
64
111
|
function resolveCanonicalSessionId(candidate: string | undefined, metadata: SessionMetadata): string | undefined {
|
|
65
112
|
if (!candidate) return undefined;
|
|
66
|
-
return metadata.sessionId && metadata.
|
|
113
|
+
return metadata.sessionId && metadata.aliases.includes(candidate)
|
|
67
114
|
? metadata.sessionId
|
|
68
115
|
: candidate;
|
|
69
116
|
}
|
|
@@ -117,6 +164,26 @@ export async function getScopedStateDirsForCurrentSession(
|
|
|
117
164
|
return resolveBaseScopedStateDirs(baseStateDir, explicitSessionId, options);
|
|
118
165
|
}
|
|
119
166
|
|
|
167
|
+
export interface NotifyStateScope {
|
|
168
|
+
readonly targetSessionId: string;
|
|
169
|
+
readonly ownerCodexSessionId: string;
|
|
170
|
+
readonly allowedStorageSessionIds: readonly string[];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export async function getScopedStatePathAtScope(
|
|
174
|
+
baseStateDir: string,
|
|
175
|
+
fileName: string,
|
|
176
|
+
scope: NotifyStateScope,
|
|
177
|
+
): Promise<string> {
|
|
178
|
+
if (!isSafeStateFileName(fileName)) {
|
|
179
|
+
throw new Error(`unsafe state file name: ${fileName}`);
|
|
180
|
+
}
|
|
181
|
+
if (!scope.allowedStorageSessionIds.includes(scope.targetSessionId)) {
|
|
182
|
+
throw new Error('notify state scope target is unauthorized');
|
|
183
|
+
}
|
|
184
|
+
return join(baseStateDir, 'sessions', scope.targetSessionId, fileName);
|
|
185
|
+
}
|
|
186
|
+
|
|
120
187
|
export async function getScopedStatePath(
|
|
121
188
|
baseStateDir: string,
|
|
122
189
|
fileName: string,
|
|
@@ -161,6 +228,26 @@ export async function writeScopedJson(
|
|
|
161
228
|
await writeFile(targetPath, JSON.stringify(value, null, 2));
|
|
162
229
|
}
|
|
163
230
|
|
|
231
|
+
export async function readScopedJsonAtScope(
|
|
232
|
+
baseStateDir: string,
|
|
233
|
+
fileName: string,
|
|
234
|
+
scope: NotifyStateScope,
|
|
235
|
+
fallback: any,
|
|
236
|
+
): Promise<any> {
|
|
237
|
+
return readJsonIfExists(await getScopedStatePathAtScope(baseStateDir, fileName, scope), fallback);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export async function writeScopedJsonAtScope(
|
|
241
|
+
baseStateDir: string,
|
|
242
|
+
fileName: string,
|
|
243
|
+
scope: NotifyStateScope,
|
|
244
|
+
value: unknown,
|
|
245
|
+
): Promise<void> {
|
|
246
|
+
const targetPath = await getScopedStatePathAtScope(baseStateDir, fileName, scope);
|
|
247
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
248
|
+
await writeFile(targetPath, JSON.stringify(value, null, 2));
|
|
249
|
+
}
|
|
250
|
+
|
|
164
251
|
export function normalizeTmuxState(raw: any): any {
|
|
165
252
|
if (!raw || typeof raw !== 'object') {
|
|
166
253
|
return {
|
|
@@ -19,7 +19,14 @@ import {
|
|
|
19
19
|
} from './state-io.js';
|
|
20
20
|
import { runProcess } from './process-runner.js';
|
|
21
21
|
import { logTmuxHookEvent } from './log.js';
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
resolveInvocationSessionId,
|
|
24
|
+
resolveManagedCurrentPane,
|
|
25
|
+
resolveManagedCurrentPaneAtPromptContext,
|
|
26
|
+
resolveManagedSessionContext,
|
|
27
|
+
verifyManagedPaneTarget,
|
|
28
|
+
verifyManagedPaneTargetAtPromptContext,
|
|
29
|
+
} from './managed-tmux.js';
|
|
23
30
|
import { evaluatePaneInjectionReadiness, mapPaneInjectionReadinessReason, sendPaneInput } from './team-tmux-guard.js';
|
|
24
31
|
import { listActiveSkills, readVisibleSkillActiveStateForStateDir } from '../../state/skill-active.js';
|
|
25
32
|
import {
|
|
@@ -28,6 +35,7 @@ import {
|
|
|
28
35
|
evaluateInjectionGuards,
|
|
29
36
|
buildSendKeysArgv,
|
|
30
37
|
} from '../tmux-hook-engine.js';
|
|
38
|
+
import type { ResolvedPromptTurnContext } from '../../hooks/prompt-session-provenance.js';
|
|
31
39
|
|
|
32
40
|
function isHudPaneStartCommand(startCommand: any): boolean {
|
|
33
41
|
return /\bomx\b.*\bhud\b.*--watch/i.test(safeString(startCommand));
|
|
@@ -404,16 +412,21 @@ export async function resolvePaneTarget(target: any, expectedCwd: any, modePane:
|
|
|
404
412
|
}
|
|
405
413
|
}
|
|
406
414
|
|
|
407
|
-
export async function handleTmuxInjection({
|
|
408
|
-
payload
|
|
409
|
-
cwd
|
|
410
|
-
stateDir
|
|
411
|
-
logsDir
|
|
412
|
-
|
|
415
|
+
export async function handleTmuxInjection({ payload, cwd, stateDir, logsDir, context = null }: {
|
|
416
|
+
payload: any;
|
|
417
|
+
cwd: string;
|
|
418
|
+
stateDir: string;
|
|
419
|
+
logsDir: string;
|
|
420
|
+
context?: ResolvedPromptTurnContext | null;
|
|
421
|
+
}): Promise<void> {
|
|
413
422
|
const omxDir = join(cwd, '.omx');
|
|
414
423
|
const configPath = join(omxDir, 'tmux-hook.json');
|
|
415
424
|
const hookStatePath = join(stateDir, 'tmux-hook-state.json');
|
|
416
425
|
const nowIso = new Date().toISOString();
|
|
426
|
+
if (context && context.status !== 'authorized') return;
|
|
427
|
+
const ownershipPayload = context?.status === 'authorized'
|
|
428
|
+
? { ...payload, session_id: context.authorization.ownerCodexSessionId, 'session-id': context.authorization.ownerCodexSessionId }
|
|
429
|
+
: payload;
|
|
417
430
|
const now = Date.now();
|
|
418
431
|
|
|
419
432
|
const rawConfig = await readJsonIfExists(configPath, null);
|
|
@@ -429,7 +442,7 @@ export async function handleTmuxInjection({
|
|
|
429
442
|
const sourceText = inputMessages.join('\n');
|
|
430
443
|
const state = normalizeTmuxState(await readJsonIfExists(hookStatePath, null));
|
|
431
444
|
state.recent_keys = pruneRecentKeys(state.recent_keys, now);
|
|
432
|
-
const canonicalModeState = await readVisibleAllowedModes(cwd, stateDir,
|
|
445
|
+
const canonicalModeState = await readVisibleAllowedModes(cwd, stateDir, ownershipPayload, config.allowed_modes).catch(() => ({
|
|
433
446
|
canonicalPresent: false,
|
|
434
447
|
activeSkillCount: 0,
|
|
435
448
|
allowedSet: null,
|
|
@@ -547,7 +560,9 @@ export async function handleTmuxInjection({
|
|
|
547
560
|
turnId,
|
|
548
561
|
timestamp: nowIso,
|
|
549
562
|
}), sourceText);
|
|
550
|
-
const managedCurrentPane =
|
|
563
|
+
const managedCurrentPane = context
|
|
564
|
+
? await resolveManagedCurrentPaneAtPromptContext(cwd, context)
|
|
565
|
+
: await resolveManagedCurrentPane(cwd, payload, { allowTeamWorker: false });
|
|
551
566
|
if (modePane && managedCurrentPane && modePane !== managedCurrentPane) {
|
|
552
567
|
state.last_reason = 'mode_pane_current_pane_mismatch';
|
|
553
568
|
state.last_event_at = nowIso;
|
|
@@ -564,12 +579,12 @@ export async function handleTmuxInjection({
|
|
|
564
579
|
|
|
565
580
|
const preferredPaneTarget = modePane || managedCurrentPane;
|
|
566
581
|
let resolution = preferredModePane
|
|
567
|
-
? await resolvePaneTarget({ type: 'pane', value: preferredModePane.pane }, cwd, preferredModePane.pane, cwd,
|
|
582
|
+
? await resolvePaneTarget({ type: 'pane', value: preferredModePane.pane }, cwd, preferredModePane.pane, cwd, ownershipPayload)
|
|
568
583
|
: preferredPaneTarget
|
|
569
|
-
? await resolvePaneTarget({ type: 'pane', value: preferredPaneTarget }, cwd, '', cwd,
|
|
570
|
-
: await resolvePaneTarget(config.target, cwd, modePane, cwd,
|
|
584
|
+
? await resolvePaneTarget({ type: 'pane', value: preferredPaneTarget }, cwd, '', cwd, ownershipPayload)
|
|
585
|
+
: await resolvePaneTarget(config.target, cwd, modePane, cwd, ownershipPayload);
|
|
571
586
|
if (!resolution.paneTarget && preferredPaneTarget) {
|
|
572
|
-
resolution = await resolvePaneTarget(config.target, cwd, modePane, cwd,
|
|
587
|
+
resolution = await resolvePaneTarget(config.target, cwd, modePane, cwd, ownershipPayload);
|
|
573
588
|
}
|
|
574
589
|
if (!resolution.paneTarget) {
|
|
575
590
|
state.last_reason = resolution.reason;
|
|
@@ -586,14 +601,16 @@ export async function handleTmuxInjection({
|
|
|
586
601
|
}
|
|
587
602
|
const paneTarget = resolution.paneTarget;
|
|
588
603
|
|
|
589
|
-
const ownership =
|
|
590
|
-
paneTarget,
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
604
|
+
const ownership = context
|
|
605
|
+
? await verifyManagedPaneTargetAtPromptContext(paneTarget, cwd, context)
|
|
606
|
+
: await validateResolvedInjectionOwnership({
|
|
607
|
+
paneTarget,
|
|
608
|
+
cwd,
|
|
609
|
+
payload,
|
|
610
|
+
modeState,
|
|
611
|
+
modePane,
|
|
612
|
+
managedCurrentPane,
|
|
613
|
+
});
|
|
597
614
|
if (!ownership.ok) {
|
|
598
615
|
state.last_reason = ownership.reason;
|
|
599
616
|
state.last_event_at = nowIso;
|
|
@@ -84,7 +84,15 @@ export function parseVisualVerdict(text: any): { verdict: string; raw: string }
|
|
|
84
84
|
*
|
|
85
85
|
* Module import failure is handled by the caller in notify-hook.ts.
|
|
86
86
|
*/
|
|
87
|
-
export async function maybePersistVisualVerdict({
|
|
87
|
+
export async function maybePersistVisualVerdict({
|
|
88
|
+
cwd,
|
|
89
|
+
payload,
|
|
90
|
+
stateDir,
|
|
91
|
+
logsDir,
|
|
92
|
+
sessionId,
|
|
93
|
+
turnId,
|
|
94
|
+
persistRuntimeFeedback = true,
|
|
95
|
+
}: any): Promise<void> {
|
|
88
96
|
const output = safeString(
|
|
89
97
|
payload?.['last-assistant-message'] || payload?.last_assistant_message || '',
|
|
90
98
|
);
|
|
@@ -92,17 +100,19 @@ export async function maybePersistVisualVerdict({ cwd, payload, stateDir, logsDi
|
|
|
92
100
|
|
|
93
101
|
// Runtime visual feedback (JSON/fenced JSON) for ralph-progress persistence.
|
|
94
102
|
// Non-fatal and observable via warn-level structured logging.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
if (persistRuntimeFeedback) {
|
|
104
|
+
try {
|
|
105
|
+
await maybePersistRuntimeVisualFeedback({ cwd, output, sessionId, stateDir });
|
|
106
|
+
} catch (err: any) {
|
|
107
|
+
await logNotifyHookEvent(logsDir, {
|
|
108
|
+
timestamp: new Date().toISOString(),
|
|
109
|
+
level: 'warn',
|
|
110
|
+
type: 'visual_runtime_feedback_persist_failure',
|
|
111
|
+
error: err?.message || String(err),
|
|
112
|
+
session_id: sessionId,
|
|
113
|
+
turn_id: turnId,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
const parsed = parseVisualVerdict(output);
|