oh-my-codex 0.21.0 → 0.21.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.toml +1 -1
- package/README.md +4 -2
- package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.d.ts +2 -0
- package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.d.ts.map +1 -0
- package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.js +592 -0
- package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.js.map +1 -0
- package/dist/cli/__tests__/detached-leader-teardown.test.js +270 -33
- package/dist/cli/__tests__/detached-leader-teardown.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +133 -5
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +543 -2
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/issue-windows-cancel-identity.test.d.ts +2 -0
- package/dist/cli/__tests__/issue-windows-cancel-identity.test.d.ts.map +1 -0
- package/dist/cli/__tests__/issue-windows-cancel-identity.test.js +17 -0
- package/dist/cli/__tests__/issue-windows-cancel-identity.test.js.map +1 -0
- package/dist/cli/__tests__/launch-fallback.test.js +15 -3
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +20 -0
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/plugin-cache-stale-lock.test.d.ts +2 -0
- package/dist/cli/__tests__/plugin-cache-stale-lock.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plugin-cache-stale-lock.test.js +76 -0
- package/dist/cli/__tests__/plugin-cache-stale-lock.test.js.map +1 -0
- package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.d.ts +2 -0
- package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.js +1662 -0
- package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.js.map +1 -0
- package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.d.ts +2 -0
- package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.js +522 -0
- package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.js.map +1 -0
- package/dist/cli/__tests__/ralplan-advisory.test.d.ts +2 -0
- package/dist/cli/__tests__/ralplan-advisory.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralplan-advisory.test.js +301 -0
- package/dist/cli/__tests__/ralplan-advisory.test.js.map +1 -0
- package/dist/cli/__tests__/ralplan.test.js +39 -0
- package/dist/cli/__tests__/ralplan.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +81 -6
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +423 -4
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +60 -3
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +9 -0
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +4 -0
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +71 -0
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +30 -4
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +57 -8
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +113 -7
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1850 -185
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/native-assets.d.ts +2 -1
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +7 -7
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts +89 -4
- package/dist/cli/plugin-marketplace.d.ts.map +1 -1
- package/dist/cli/plugin-marketplace.js +2135 -118
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/ralplan.d.ts +2 -1
- package/dist/cli/ralplan.d.ts.map +1 -1
- package/dist/cli/ralplan.js +149 -9
- package/dist/cli/ralplan.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +7 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +9 -10
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/cli/update-worker.js +9 -0
- package/dist/cli/update-worker.js.map +1 -1
- package/dist/cli/update.d.ts +1 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +9 -0
- package/dist/cli/update.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +118 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +74 -4
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +74 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/ralplan-advisory-keyword.test.d.ts +2 -0
- package/dist/hooks/__tests__/ralplan-advisory-keyword.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/ralplan-advisory-keyword.test.js +250 -0
- package/dist/hooks/__tests__/ralplan-advisory-keyword.test.js.map +1 -0
- package/dist/hooks/__tests__/session.test.js +10 -1
- package/dist/hooks/__tests__/session.test.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +8 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +130 -9
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/session.d.ts +5 -0
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +17 -3
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +16 -1
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +134 -7
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +57 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/session-attached.test.d.ts +2 -0
- package/dist/hud/__tests__/session-attached.test.d.ts.map +1 -0
- package/dist/hud/__tests__/session-attached.test.js +82 -0
- package/dist/hud/__tests__/session-attached.test.js.map +1 -0
- package/dist/hud/__tests__/state.test.js +94 -2
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux-split-realtmux.test.js +169 -2
- package/dist/hud/__tests__/tmux-split-realtmux.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +104 -22
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/__tests__/types.test.js +9 -0
- package/dist/hud/__tests__/types.test.js.map +1 -1
- package/dist/hud/__tests__/watch-detached.test.d.ts +2 -0
- package/dist/hud/__tests__/watch-detached.test.d.ts.map +1 -0
- package/dist/hud/__tests__/watch-detached.test.js +383 -0
- package/dist/hud/__tests__/watch-detached.test.js.map +1 -0
- package/dist/hud/__tests__/watch-realtmux.test.d.ts +2 -0
- package/dist/hud/__tests__/watch-realtmux.test.d.ts.map +1 -0
- package/dist/hud/__tests__/watch-realtmux.test.js +322 -0
- package/dist/hud/__tests__/watch-realtmux.test.js.map +1 -0
- package/dist/hud/index.d.ts +3 -0
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +98 -20
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +68 -24
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +20 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/session-attached.d.ts +15 -0
- package/dist/hud/session-attached.d.ts.map +1 -0
- package/dist/hud/session-attached.js +47 -0
- package/dist/hud/session-attached.js.map +1 -0
- package/dist/hud/state.d.ts +9 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +140 -3
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts +4 -0
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +86 -23
- package/dist/hud/tmux.js.map +1 -1
- package/dist/hud/types.d.ts +20 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +3 -0
- package/dist/hud/types.js.map +1 -1
- package/dist/modes/base.d.ts +15 -2
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +105 -16
- package/dist/modes/base.js.map +1 -1
- package/dist/question/autopilot-wait.js +2 -2
- package/dist/question/autopilot-wait.js.map +1 -1
- package/dist/question/deep-interview.js +2 -2
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/ralplan/__tests__/advisory-activation.test.d.ts +2 -0
- package/dist/ralplan/__tests__/advisory-activation.test.d.ts.map +1 -0
- package/dist/ralplan/__tests__/advisory-activation.test.js +700 -0
- package/dist/ralplan/__tests__/advisory-activation.test.js.map +1 -0
- package/dist/ralplan/__tests__/advisory-detached-transition.test.d.ts +2 -0
- package/dist/ralplan/__tests__/advisory-detached-transition.test.d.ts.map +1 -0
- package/dist/ralplan/__tests__/advisory-detached-transition.test.js +88 -0
- package/dist/ralplan/__tests__/advisory-detached-transition.test.js.map +1 -0
- package/dist/ralplan/__tests__/advisory.test.d.ts +2 -0
- package/dist/ralplan/__tests__/advisory.test.d.ts.map +1 -0
- package/dist/ralplan/__tests__/advisory.test.js +1087 -0
- package/dist/ralplan/__tests__/advisory.test.js.map +1 -0
- package/dist/ralplan/__tests__/runtime.test.js +416 -7
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/advisory-activation-verifier.d.ts +19 -0
- package/dist/ralplan/advisory-activation-verifier.d.ts.map +1 -0
- package/dist/ralplan/advisory-activation-verifier.js +77 -0
- package/dist/ralplan/advisory-activation-verifier.js.map +1 -0
- package/dist/ralplan/advisory-activation.d.ts +34 -0
- package/dist/ralplan/advisory-activation.d.ts.map +1 -0
- package/dist/ralplan/advisory-activation.js +205 -0
- package/dist/ralplan/advisory-activation.js.map +1 -0
- package/dist/ralplan/advisory-contract.d.ts +103 -0
- package/dist/ralplan/advisory-contract.d.ts.map +1 -0
- package/dist/ralplan/advisory-contract.js +83 -0
- package/dist/ralplan/advisory-contract.js.map +1 -0
- package/dist/ralplan/advisory-detached-transition.d.ts +11 -0
- package/dist/ralplan/advisory-detached-transition.d.ts.map +1 -0
- package/dist/ralplan/advisory-detached-transition.js +21 -0
- package/dist/ralplan/advisory-detached-transition.js.map +1 -0
- package/dist/ralplan/advisory-evidence.d.ts +91 -0
- package/dist/ralplan/advisory-evidence.d.ts.map +1 -0
- package/dist/ralplan/advisory-evidence.js +393 -0
- package/dist/ralplan/advisory-evidence.js.map +1 -0
- package/dist/ralplan/advisory-lifecycle-validation.d.ts +11 -0
- package/dist/ralplan/advisory-lifecycle-validation.d.ts.map +1 -0
- package/dist/ralplan/advisory-lifecycle-validation.js +72 -0
- package/dist/ralplan/advisory-lifecycle-validation.js.map +1 -0
- package/dist/ralplan/advisory-postconditions.d.ts +3 -0
- package/dist/ralplan/advisory-postconditions.d.ts.map +1 -0
- package/dist/ralplan/advisory-postconditions.js +33 -0
- package/dist/ralplan/advisory-postconditions.js.map +1 -0
- package/dist/ralplan/advisory-recovery-journal.d.ts +56 -0
- package/dist/ralplan/advisory-recovery-journal.d.ts.map +1 -0
- package/dist/ralplan/advisory-recovery-journal.js +136 -0
- package/dist/ralplan/advisory-recovery-journal.js.map +1 -0
- package/dist/ralplan/advisory-storage.d.ts +24 -0
- package/dist/ralplan/advisory-storage.d.ts.map +1 -0
- package/dist/ralplan/advisory-storage.js +106 -0
- package/dist/ralplan/advisory-storage.js.map +1 -0
- package/dist/ralplan/advisory.d.ts +99 -0
- package/dist/ralplan/advisory.d.ts.map +1 -0
- package/dist/ralplan/advisory.js +914 -0
- package/dist/ralplan/advisory.js.map +1 -0
- package/dist/ralplan/documented-leader-preflight.d.ts +8 -0
- package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -1
- package/dist/ralplan/documented-leader-preflight.js +60 -2
- package/dist/ralplan/documented-leader-preflight.js.map +1 -1
- package/dist/ralplan/runtime-advisory-lifecycle.d.ts +74 -0
- package/dist/ralplan/runtime-advisory-lifecycle.d.ts.map +1 -0
- package/dist/ralplan/runtime-advisory-lifecycle.js +352 -0
- package/dist/ralplan/runtime-advisory-lifecycle.js.map +1 -0
- package/dist/ralplan/runtime-contract.d.ts +126 -0
- package/dist/ralplan/runtime-contract.d.ts.map +1 -0
- package/dist/ralplan/runtime-contract.js +2 -0
- package/dist/ralplan/runtime-contract.js.map +1 -0
- package/dist/ralplan/runtime.d.ts +6 -109
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +174 -56
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/postinstall.test.js +26 -0
- package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
- package/dist/scripts/__tests__/ralplan-advisory-hook.test.d.ts +2 -0
- package/dist/scripts/__tests__/ralplan-advisory-hook.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/ralplan-advisory-hook.test.js +299 -0
- package/dist/scripts/__tests__/ralplan-advisory-hook.test.js.map +1 -0
- package/dist/scripts/__tests__/smoke-packed-install.test.js +102 -8
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts +20 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +226 -15
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/postinstall.d.ts +7 -0
- package/dist/scripts/postinstall.d.ts.map +1 -1
- package/dist/scripts/postinstall.js +40 -0
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/scripts/smoke-packed-install.d.ts +21 -5
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +157 -57
- package/dist/scripts/smoke-packed-install.js.map +1 -1
- package/dist/state/__tests__/mode-binding-lease.test.d.ts +2 -0
- package/dist/state/__tests__/mode-binding-lease.test.d.ts.map +1 -0
- package/dist/state/__tests__/mode-binding-lease.test.js +498 -0
- package/dist/state/__tests__/mode-binding-lease.test.js.map +1 -0
- package/dist/state/__tests__/operations.test.js +1 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/pinned-atomic-file.test.d.ts +2 -0
- package/dist/state/__tests__/pinned-atomic-file.test.d.ts.map +1 -0
- package/dist/state/__tests__/pinned-atomic-file.test.js +438 -0
- package/dist/state/__tests__/pinned-atomic-file.test.js.map +1 -0
- package/dist/state/__tests__/skill-active-exact-session-transaction.test.d.ts +2 -0
- package/dist/state/__tests__/skill-active-exact-session-transaction.test.d.ts.map +1 -0
- package/dist/state/__tests__/skill-active-exact-session-transaction.test.js +179 -0
- package/dist/state/__tests__/skill-active-exact-session-transaction.test.js.map +1 -0
- package/dist/state/__tests__/skill-active.test.js +29 -1
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/mode-binding-lease-helper.d.ts +2 -0
- package/dist/state/mode-binding-lease-helper.d.ts.map +1 -0
- package/dist/state/mode-binding-lease-helper.js +623 -0
- package/dist/state/mode-binding-lease-helper.js.map +1 -0
- package/dist/state/mode-binding-lease.d.ts +25 -0
- package/dist/state/mode-binding-lease.d.ts.map +1 -0
- package/dist/state/mode-binding-lease.js +380 -0
- package/dist/state/mode-binding-lease.js.map +1 -0
- package/dist/state/operations.d.ts +29 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +203 -122
- package/dist/state/operations.js.map +1 -1
- package/dist/state/pinned-atomic-file-darwin-client.d.ts +34 -0
- package/dist/state/pinned-atomic-file-darwin-client.d.ts.map +1 -0
- package/dist/state/pinned-atomic-file-darwin-client.js +174 -0
- package/dist/state/pinned-atomic-file-darwin-client.js.map +1 -0
- package/dist/state/pinned-atomic-file-darwin-helper.d.ts +2 -0
- package/dist/state/pinned-atomic-file-darwin-helper.d.ts.map +1 -0
- package/dist/state/pinned-atomic-file-darwin-helper.js +275 -0
- package/dist/state/pinned-atomic-file-darwin-helper.js.map +1 -0
- package/dist/state/pinned-atomic-file-darwin-janitor.d.ts +2 -0
- package/dist/state/pinned-atomic-file-darwin-janitor.d.ts.map +1 -0
- package/dist/state/pinned-atomic-file-darwin-janitor.js +272 -0
- package/dist/state/pinned-atomic-file-darwin-janitor.js.map +1 -0
- package/dist/state/pinned-atomic-file.d.ts +29 -0
- package/dist/state/pinned-atomic-file.d.ts.map +1 -0
- package/dist/state/pinned-atomic-file.js +536 -0
- package/dist/state/pinned-atomic-file.js.map +1 -0
- package/dist/state/process-identity.d.ts +30 -0
- package/dist/state/process-identity.d.ts.map +1 -0
- package/dist/state/process-identity.js +99 -0
- package/dist/state/process-identity.js.map +1 -0
- package/dist/state/skill-active.d.ts +18 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +82 -5
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition-reconcile.js +1 -1
- package/dist/state/workflow-transition-reconcile.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +109 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +10 -1
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/utils/__tests__/file-durability.test.js +20 -0
- package/dist/utils/__tests__/file-durability.test.js.map +1 -1
- package/dist/utils/file-durability.d.ts +1 -1
- package/dist/utils/file-durability.d.ts.map +1 -1
- package/dist/utils/file-durability.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +12 -4
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/ci-trusted-publish.test.d.ts +2 -0
- package/dist/verification/__tests__/ci-trusted-publish.test.d.ts.map +1 -0
- package/dist/verification/__tests__/ci-trusted-publish.test.js +205 -0
- package/dist/verification/__tests__/ci-trusted-publish.test.js.map +1 -0
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +10 -5
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/dist/verification/__tests__/publish-npm-manual-retired.test.d.ts +2 -0
- package/dist/verification/__tests__/publish-npm-manual-retired.test.d.ts.map +1 -0
- package/dist/verification/__tests__/publish-npm-manual-retired.test.js +22 -0
- package/dist/verification/__tests__/publish-npm-manual-retired.test.js.map +1 -0
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/doctor/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +10 -1
- package/plugins/oh-my-codex/skills/team/SKILL.md +2 -0
- package/skills/doctor/SKILL.md +1 -1
- package/skills/omx-setup/SKILL.md +1 -1
- package/skills/ralplan/SKILL.md +10 -1
- package/skills/team/SKILL.md +2 -0
- package/src/scripts/__tests__/postinstall.test.ts +28 -0
- package/src/scripts/__tests__/ralplan-advisory-hook.test.ts +320 -0
- package/src/scripts/__tests__/smoke-packed-install.test.ts +120 -7
- package/src/scripts/codex-native-hook.ts +220 -10
- package/src/scripts/postinstall.ts +46 -0
- package/src/scripts/smoke-packed-install.ts +175 -70
|
@@ -76,6 +76,8 @@ export interface SkillActiveState {
|
|
|
76
76
|
transition_error?: string;
|
|
77
77
|
transition_message?: string;
|
|
78
78
|
transition_messages?: string[];
|
|
79
|
+
workflow_variant?: 'advisory';
|
|
80
|
+
advisory_generation_id?: string;
|
|
79
81
|
requested_skills?: string[];
|
|
80
82
|
deferred_skills?: string[];
|
|
81
83
|
[key: string]: unknown;
|
|
@@ -94,6 +96,10 @@ export interface RecordSkillActivationInput {
|
|
|
94
96
|
resolvedPromptTurnContext?: ResolvedPromptTurnContext;
|
|
95
97
|
onProvenanceRejected?: (diagnostic: PromptDiagnosticDescriptor) => void | Promise<void>;
|
|
96
98
|
}
|
|
99
|
+
interface RecordSkillActivationDependencies {
|
|
100
|
+
advisoryActivationFailpoint?: (name: 'rollover_intent' | 'rollover_activation' | 'rollover_pointer' | 'intent_committed') => void | Promise<void>;
|
|
101
|
+
advisoryAfterModeBindingFailpoint?: () => void | Promise<void>;
|
|
102
|
+
}
|
|
97
103
|
export interface DeepInterviewModeStatePersistenceInput {
|
|
98
104
|
sessionId?: string;
|
|
99
105
|
threadId?: string;
|
|
@@ -128,7 +134,7 @@ export declare function classifyKeywordInput(text: string): KeywordInputClassifi
|
|
|
128
134
|
export declare function detectKeywords(text: string): KeywordMatch[];
|
|
129
135
|
/** Get the first match in classification order. */
|
|
130
136
|
export declare function detectPrimaryKeyword(text: string): KeywordMatch | null;
|
|
131
|
-
export declare function recordSkillActivation(input: RecordSkillActivationInput): Promise<SkillActiveState | null>;
|
|
137
|
+
export declare function recordSkillActivation(input: RecordSkillActivationInput, dependencies?: RecordSkillActivationDependencies): Promise<SkillActiveState | null>;
|
|
132
138
|
/**
|
|
133
139
|
* Options for task-size-aware keyword filtering
|
|
134
140
|
*/
|
|
@@ -152,4 +158,5 @@ export declare function getAllKeywordsWithSizeCheck(text: string, options?: Task
|
|
|
152
158
|
taskSizeResult: TaskSizeResult | null;
|
|
153
159
|
suppressedKeywords: string[];
|
|
154
160
|
};
|
|
161
|
+
export {};
|
|
155
162
|
//# sourceMappingURL=keyword-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword-detector.d.ts","sourceRoot":"","sources":["../../src/hooks/keyword-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAAiC,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAOtH,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAEL,KAAK,qCAAqC,EAC3C,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"keyword-detector.d.ts","sourceRoot":"","sources":["../../src/hooks/keyword-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,8 @@ import { buildDeepInterviewConfigStateFields, resolveDeepInterviewRuntimeConfig,
|
|
|
27
27
|
import { inferTerminalLifecycleOutcome } from '../runtime/run-outcome.js';
|
|
28
28
|
import { resolveAutopilotPlannerRouting } from '../autopilot/planner-routing.js';
|
|
29
29
|
import { isAutopilotSuccessfulTerminalState, } from '../autopilot/completion-gate.js';
|
|
30
|
+
import { isDirectRalplanAdvisoryInvocation, parseRalplanAdvisoryInvocation, readCurrentRalplanAdvisory } from '../ralplan/advisory.js';
|
|
31
|
+
import { activateOrResumeRalplanAdvisory } from '../ralplan/advisory-activation.js';
|
|
30
32
|
import { preflightSelectedTargetOwner, extractSelectedTargetOwnerEvidence, } from './prompt-session-provenance.js';
|
|
31
33
|
/** Stable diagnostic precedence for explicit candidates. */
|
|
32
34
|
export const KEYWORD_INERT_DIAGNOSTIC_ORDER = Object.freeze([
|
|
@@ -313,6 +315,23 @@ function buildActiveSkills(state) {
|
|
|
313
315
|
turn_id: state.turn_id,
|
|
314
316
|
}];
|
|
315
317
|
}
|
|
318
|
+
function listPromptVisibleEntries(previous, sessionId) {
|
|
319
|
+
const entries = listActiveSkills(previous ?? {});
|
|
320
|
+
const requestedSessionId = safeString(sessionId).trim();
|
|
321
|
+
const outerSessionId = safeString(previous?.session_id).trim();
|
|
322
|
+
const visible = requestedSessionId
|
|
323
|
+
? entries.filter((entry) => {
|
|
324
|
+
const entrySessionId = safeString(entry.session_id).trim();
|
|
325
|
+
return entrySessionId === requestedSessionId
|
|
326
|
+
|| (entrySessionId.length === 0 && outerSessionId === requestedSessionId);
|
|
327
|
+
})
|
|
328
|
+
: entries.filter((entry) => safeString(entry.session_id).trim().length === 0);
|
|
329
|
+
return visible;
|
|
330
|
+
}
|
|
331
|
+
function isAdvisoryRalplanEntry(entry, previous) {
|
|
332
|
+
return entry.skill === 'ralplan'
|
|
333
|
+
&& (entry.workflow_variant === 'advisory' || previous?.workflow_variant === 'advisory');
|
|
334
|
+
}
|
|
316
335
|
async function readExistingDeepInterviewState(statePath) {
|
|
317
336
|
try {
|
|
318
337
|
const raw = await readFile(statePath, 'utf-8');
|
|
@@ -363,7 +382,7 @@ export async function persistDeepInterviewModeState(stateDir, nextSkill, nowIso,
|
|
|
363
382
|
...(nextSkill.input_lock ? { input_lock: nextSkill.input_lock } : {}),
|
|
364
383
|
...(nextQuestionEnforcement ? { question_enforcement: nextQuestionEnforcement } : {}),
|
|
365
384
|
}, { nowIso });
|
|
366
|
-
await writeStateFile(statePath, JSON.stringify(nextState, null, 2));
|
|
385
|
+
await writeStateFile(statePath, JSON.stringify(nextState, null, 2), stateDir);
|
|
367
386
|
return;
|
|
368
387
|
}
|
|
369
388
|
const hadActiveDeepInterview = previousSkill?.skill === 'deep-interview' && previousSkill.active === true;
|
|
@@ -391,7 +410,7 @@ export async function persistDeepInterviewModeState(stateDir, nextSkill, nowIso,
|
|
|
391
410
|
}
|
|
392
411
|
: {}),
|
|
393
412
|
};
|
|
394
|
-
await writeStateFile(statePath, JSON.stringify(nextState, null, 2));
|
|
413
|
+
await writeStateFile(statePath, JSON.stringify(nextState, null, 2), stateDir);
|
|
395
414
|
}
|
|
396
415
|
function resolveSeedStateFilePath(stateDir, mode, sessionId, scope = 'session') {
|
|
397
416
|
if (scope !== 'root' && sessionId?.trim()) {
|
|
@@ -468,6 +487,54 @@ async function persistStatefulSkillSeedState(stateDir, nextSkill, nowIso, previo
|
|
|
468
487
|
if (config.mode === 'deep-interview') {
|
|
469
488
|
Object.assign(baseState, buildDeepInterviewConfigStateFields(nextSkill.deep_interview_config));
|
|
470
489
|
}
|
|
490
|
+
const advisoryInvocation = config.mode === 'ralplan'
|
|
491
|
+
&& isDirectRalplanAdvisoryInvocation(activationText);
|
|
492
|
+
if (config.mode === 'ralplan' && advisoryInvocation) {
|
|
493
|
+
const sessionId = safeString(nextSkill.session_id).trim();
|
|
494
|
+
const rootThreadId = safeString(nextSkill.thread_id).trim();
|
|
495
|
+
const activationTurnId = safeString(nextSkill.turn_id).trim();
|
|
496
|
+
if (!sessionId || !rootThreadId || !activationTurnId)
|
|
497
|
+
throw new Error('ralplan_advisory_canonical_turn_identity_required');
|
|
498
|
+
const prior = await readCurrentRalplanAdvisory(sourceCwd, sessionId);
|
|
499
|
+
const pendingRecovery = prior?.corruption === 'rollover_pending_admin'
|
|
500
|
+
|| prior?.corruption === 'current_missing_with_advisory_state';
|
|
501
|
+
if (prior?.corruption && !pendingRecovery)
|
|
502
|
+
throw new Error(`ralplan_advisory_${prior.corruption}`);
|
|
503
|
+
const activated = await activateOrResumeRalplanAdvisory({
|
|
504
|
+
cwd: sourceCwd, sessionId, rootThreadId, activationTurnId,
|
|
505
|
+
producer: 'native', threadKind: options.advisoryThreadKind ?? 'unknown',
|
|
506
|
+
...(prior?.activation?.generation_id ? { predecessorGenerationId: prior.activation.generation_id } : {}),
|
|
507
|
+
nowIso, prompt: activationText,
|
|
508
|
+
failpoint: async (checkpoint) => {
|
|
509
|
+
if (checkpoint === 'after_intent' && !pendingRecovery) {
|
|
510
|
+
await options.advisoryActivationFailpoint?.('rollover_intent');
|
|
511
|
+
}
|
|
512
|
+
if (checkpoint === 'after_mode')
|
|
513
|
+
await options.advisoryAfterModeBindingFailpoint?.();
|
|
514
|
+
if (checkpoint === 'intent_committed')
|
|
515
|
+
await options.advisoryActivationFailpoint?.('intent_committed');
|
|
516
|
+
},
|
|
517
|
+
});
|
|
518
|
+
const activation = activated.activation;
|
|
519
|
+
baseState.workflow_variant = 'advisory';
|
|
520
|
+
baseState.advisory_generation_id = activation.generation_id;
|
|
521
|
+
baseState.execution_handoff_authorized = false;
|
|
522
|
+
baseState.host_verified = false;
|
|
523
|
+
baseState.ralplan_consensus_gate = { complete: false };
|
|
524
|
+
}
|
|
525
|
+
if (baseState.workflow_variant === 'advisory') {
|
|
526
|
+
const advisoryGenerationId = safeString(baseState.advisory_generation_id);
|
|
527
|
+
return {
|
|
528
|
+
...nextSkill,
|
|
529
|
+
initialized_mode: config.mode,
|
|
530
|
+
initialized_state_path: relativePath,
|
|
531
|
+
workflow_variant: 'advisory',
|
|
532
|
+
advisory_generation_id: advisoryGenerationId,
|
|
533
|
+
active_skills: nextSkill.active_skills?.map((entry) => (entry.skill === 'ralplan' && entry.session_id === nextSkill.session_id
|
|
534
|
+
? { ...entry, workflow_variant: 'advisory', advisory_generation_id: advisoryGenerationId }
|
|
535
|
+
: entry)),
|
|
536
|
+
};
|
|
537
|
+
}
|
|
471
538
|
if (config.mode === 'autopilot') {
|
|
472
539
|
const reusableModeState = preserveExistingModeState ? existingModeState : null;
|
|
473
540
|
const existingStateRaw = (reusableModeState?.state && typeof reusableModeState.state === 'object')
|
|
@@ -550,11 +617,15 @@ async function persistStatefulSkillSeedState(stateDir, nextSkill, nowIso, previo
|
|
|
550
617
|
};
|
|
551
618
|
}
|
|
552
619
|
await mkdir(dirname(absolutePath), { recursive: true });
|
|
553
|
-
await writeStateFile(absolutePath, JSON.stringify(baseState, null, 2));
|
|
620
|
+
await writeStateFile(absolutePath, JSON.stringify(baseState, null, 2), stateDir);
|
|
554
621
|
return {
|
|
555
622
|
...nextSkill,
|
|
556
623
|
initialized_mode: config.mode,
|
|
557
624
|
initialized_state_path: relativePath,
|
|
625
|
+
...(baseState.workflow_variant === 'advisory' ? {
|
|
626
|
+
workflow_variant: 'advisory',
|
|
627
|
+
advisory_generation_id: safeString(baseState.advisory_generation_id),
|
|
628
|
+
} : {}),
|
|
558
629
|
};
|
|
559
630
|
}
|
|
560
631
|
function escapeRegex(text) {
|
|
@@ -664,6 +735,23 @@ const EXPLICIT_TOKEN_BOUNDARY_PUNCTUATION = /[,;؛!?:؟)\]}"'”’»›」』
|
|
|
664
735
|
const DIRECTIVE_PUNCTUATION = /[,;؛:!?؟?、،]/u;
|
|
665
736
|
const CLAUSE_BOUNDARY_PUNCTUATION = /[,;؛.!?؟?。!?:،、\r\n\u2013\u2014\u2028\u2029]/u;
|
|
666
737
|
const LOGICAL_SENTENCE_BOUNDARY_PUNCTUATION = /[;؛.!?؟?。!?]/u;
|
|
738
|
+
// Unicode regex matching can case-fold compatibility characters such as the
|
|
739
|
+
// Kelvin sign (K) into ASCII K. Explicit skill invocations are intentionally
|
|
740
|
+
// ASCII-only: confusable continuations must remain inert rather than routing a
|
|
741
|
+
// near-miss token to a workflow.
|
|
742
|
+
function isAsciiExplicitToken(token) {
|
|
743
|
+
if (token.length === 0)
|
|
744
|
+
return false;
|
|
745
|
+
for (let index = 0; index < token.length; index += 1) {
|
|
746
|
+
const code = token.charCodeAt(index);
|
|
747
|
+
const isAsciiLetter = (code >= 0x41 && code <= 0x5A) || (code >= 0x61 && code <= 0x7A);
|
|
748
|
+
const isAsciiDigit = code >= 0x30 && code <= 0x39;
|
|
749
|
+
if (index === 0 ? !isAsciiLetter : !(isAsciiLetter || isAsciiDigit || code === 0x5F || code === 0x2D)) {
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
return true;
|
|
754
|
+
}
|
|
667
755
|
function asciiCaseWordPattern(word) {
|
|
668
756
|
return [...word].map((character) => `[${character.toUpperCase()}${character.toLowerCase()}]`).join('');
|
|
669
757
|
}
|
|
@@ -1954,6 +2042,7 @@ function scanExplicitCandidates(text) {
|
|
|
1954
2042
|
const initialEnd = canonicalEnd ?? start + 1;
|
|
1955
2043
|
const end = maximalExplicitTokenEnd(text, initialEnd);
|
|
1956
2044
|
const rawKeyword = text.slice(start, end);
|
|
2045
|
+
const rawToken = rawKeyword.replace(/^\$(?:(?:[Oo][Hh]-[Mm][Yy]-[Cc][Oo][Dd][Ee][Xx]):)?/u, '');
|
|
1957
2046
|
dollarScanner.lastIndex = Math.max(end, start + 1);
|
|
1958
2047
|
const reasons = new Set();
|
|
1959
2048
|
for (const reason of STRUCTURAL_INERT_DIAGNOSTICS) {
|
|
@@ -1962,8 +2051,14 @@ function scanExplicitCandidates(text) {
|
|
|
1962
2051
|
}
|
|
1963
2052
|
if (hasOddImmediateBackslashes(text, start))
|
|
1964
2053
|
reasons.add('escaped');
|
|
1965
|
-
const
|
|
1966
|
-
const
|
|
2054
|
+
const capturedToken = canonicalMatch?.[1] ?? '';
|
|
2055
|
+
const canonicalToken = canonicalEnd === end && isAsciiExplicitToken(rawToken)
|
|
2056
|
+
? capturedToken.toLowerCase()
|
|
2057
|
+
: '';
|
|
2058
|
+
// Do not case-fold malformed/non-ASCII candidates. Besides bypassing the
|
|
2059
|
+
// explicit-skill lookup, folding them here would still route compatibility
|
|
2060
|
+
// characters (for example K) through the removed-skill sunset resolver.
|
|
2061
|
+
const normalizedToken = canonicalToken || rawToken;
|
|
1967
2062
|
const definition = canonicalToken ? getExplicitSkillDefinition(canonicalToken) : undefined;
|
|
1968
2063
|
candidates.push({
|
|
1969
2064
|
rawKeyword,
|
|
@@ -2783,7 +2878,7 @@ export function classifyKeywordInput(text) {
|
|
|
2783
2878
|
continue;
|
|
2784
2879
|
if (isNegativeExplicitMention(candidate, postposedNegations))
|
|
2785
2880
|
continue;
|
|
2786
|
-
if (candidate.skill !== null)
|
|
2881
|
+
if (candidate.skill !== null || !isAsciiExplicitToken(candidate.normalizedToken))
|
|
2787
2882
|
continue;
|
|
2788
2883
|
const info = getRemovedSkillInfo(candidate.normalizedToken);
|
|
2789
2884
|
if (!info)
|
|
@@ -3079,7 +3174,7 @@ async function preflightKeywordTargetState(stateDir, sessionId, context, nowIso)
|
|
|
3079
3174
|
}
|
|
3080
3175
|
return preflightSelectedTargetOwner(context, evidence, 'native', nowIso);
|
|
3081
3176
|
}
|
|
3082
|
-
export async function recordSkillActivation(input) {
|
|
3177
|
+
export async function recordSkillActivation(input, dependencies = {}) {
|
|
3083
3178
|
const classification = input.classification ?? classifyKeywordInput(input.text);
|
|
3084
3179
|
if (classification.originalText !== input.text) {
|
|
3085
3180
|
throw new Error('Keyword input classification text does not match activation text');
|
|
@@ -3089,6 +3184,11 @@ export async function recordSkillActivation(input) {
|
|
|
3089
3184
|
return null;
|
|
3090
3185
|
if (resolvedPromptTurnContext && input.sessionId !== resolvedPromptTurnContext.authorization.targetSessionId)
|
|
3091
3186
|
return null;
|
|
3187
|
+
const authenticatedRootPrompt = resolvedPromptTurnContext?.status === 'authorized'
|
|
3188
|
+
&& resolvedPromptTurnContext.authorization.targetRelation !== 'explicit-independent'
|
|
3189
|
+
&& resolvedPromptTurnContext.authorization.thread.kind === 'root-or-drift';
|
|
3190
|
+
if (isDirectRalplanAdvisoryInvocation(input.text) && !authenticatedRootPrompt)
|
|
3191
|
+
return null;
|
|
3092
3192
|
const suppressRootMutation = resolvedPromptTurnContext?.authorization.globalSideEffects === 'suppress';
|
|
3093
3193
|
const provenanceOwnerCodexSessionId = resolvedPromptTurnContext?.authorization.ownerCodexSessionId;
|
|
3094
3194
|
const applyProvenanceOwner = (state) => (provenanceOwnerCodexSessionId
|
|
@@ -3143,6 +3243,12 @@ export async function recordSkillActivation(input) {
|
|
|
3143
3243
|
const match = resolveContinuationKeywordMatch(input.text, previous, detectPrimaryKeywordForTeamMode(classification, teamMode.enabled), classification);
|
|
3144
3244
|
if (!match)
|
|
3145
3245
|
return null;
|
|
3246
|
+
const advisoryInvocation = parseRalplanAdvisoryInvocation(input.text);
|
|
3247
|
+
if (advisoryInvocation === 'invalid'
|
|
3248
|
+
|| (advisoryInvocation === 'valid'
|
|
3249
|
+
&& (match.skill !== 'ralplan' || classification.matches.some((candidate) => candidate.skill !== 'ralplan')))) {
|
|
3250
|
+
return null;
|
|
3251
|
+
}
|
|
3146
3252
|
const hadDeepInterviewLock = previous?.skill === 'deep-interview' && previous?.input_lock?.active === true;
|
|
3147
3253
|
const matches = filterMatchesForTeamMode(classification.matches, teamMode.enabled);
|
|
3148
3254
|
const hasCancelIntent = matches.some((entry) => entry.skill === 'cancel');
|
|
@@ -3167,6 +3273,8 @@ export async function recordSkillActivation(input) {
|
|
|
3167
3273
|
await persistDeepInterviewModeState(input.stateDir, applyProvenanceOwner(state), nowIso, previous, input);
|
|
3168
3274
|
}
|
|
3169
3275
|
catch (error) {
|
|
3276
|
+
if (isDirectRalplanAdvisoryInvocation(input.text))
|
|
3277
|
+
throw error;
|
|
3170
3278
|
console.warn('[omx] warning: failed to persist keyword activation state', error);
|
|
3171
3279
|
}
|
|
3172
3280
|
return applyProvenanceOwner(state);
|
|
@@ -3185,7 +3293,9 @@ export async function recordSkillActivation(input) {
|
|
|
3185
3293
|
return null;
|
|
3186
3294
|
const preserveActivatedAt = sameSkill && !matchedModeTerminal && (sameKeyword || sameSkillContinuation);
|
|
3187
3295
|
const previousEntries = listActiveSkills(previous ?? {});
|
|
3188
|
-
const
|
|
3296
|
+
const visibleEntries = listPromptVisibleEntries(previous, input.sessionId);
|
|
3297
|
+
const protectedAdvisoryEntries = visibleEntries.filter((entry) => isAdvisoryRalplanEntry(entry, previous));
|
|
3298
|
+
const previousWorkflowEntries = visibleEntries.filter((entry) => !isAdvisoryRalplanEntry(entry, previous)).filter((entry) => (isTrackedWorkflowMode(entry.skill)
|
|
3189
3299
|
&& (input.allowSecondaryAutopilot !== false || entry.skill !== 'autopilot' || entry.skill === match.skill)
|
|
3190
3300
|
&& (!input.sessionId
|
|
3191
3301
|
|| !safeString(entry.session_id).trim()
|
|
@@ -3358,7 +3468,7 @@ export async function recordSkillActivation(input) {
|
|
|
3358
3468
|
session_id: input.sessionId,
|
|
3359
3469
|
thread_id: input.threadId,
|
|
3360
3470
|
turn_id: input.turnId,
|
|
3361
|
-
active_skills: nextWorkflowEntries,
|
|
3471
|
+
active_skills: [...protectedAdvisoryEntries, ...nextWorkflowEntries],
|
|
3362
3472
|
...(transitionMessages[0] ? { transition_message: transitionMessages[0] } : {}),
|
|
3363
3473
|
...(transitionMessages.length > 0 ? { transition_messages: [...new Set(transitionMessages)] } : {}),
|
|
3364
3474
|
...(requestedWorkflowSkills.length > 1 ? { requested_skills: requestedWorkflowSkills } : {}),
|
|
@@ -3381,12 +3491,18 @@ export async function recordSkillActivation(input) {
|
|
|
3381
3491
|
}, nowIso, previous, input.text, sourceCwd, {
|
|
3382
3492
|
activeContinuation: requestedEntry.skill === 'autopilot' && sameSkillContinuation,
|
|
3383
3493
|
forceSessionScope: suppressRootMutation,
|
|
3494
|
+
advisoryActivationFailpoint: dependencies.advisoryActivationFailpoint,
|
|
3495
|
+
advisoryAfterModeBindingFailpoint: dependencies.advisoryAfterModeBindingFailpoint,
|
|
3496
|
+
advisoryThreadKind: authenticatedRootPrompt ? 'root-or-drift' : 'unknown',
|
|
3384
3497
|
});
|
|
3385
3498
|
if (requestedEntry.skill === workflowState.skill) {
|
|
3386
3499
|
nextState = {
|
|
3387
3500
|
...ownedWorkflowState,
|
|
3388
3501
|
initialized_mode: seeded.initialized_mode,
|
|
3389
3502
|
initialized_state_path: seeded.initialized_state_path,
|
|
3503
|
+
...(seeded.active_skills ? { active_skills: seeded.active_skills } : {}),
|
|
3504
|
+
...(seeded.workflow_variant ? { workflow_variant: seeded.workflow_variant } : {}),
|
|
3505
|
+
...(seeded.advisory_generation_id ? { advisory_generation_id: seeded.advisory_generation_id } : {}),
|
|
3390
3506
|
};
|
|
3391
3507
|
}
|
|
3392
3508
|
}
|
|
@@ -3397,6 +3513,8 @@ export async function recordSkillActivation(input) {
|
|
|
3397
3513
|
return nextState;
|
|
3398
3514
|
}
|
|
3399
3515
|
catch (error) {
|
|
3516
|
+
if (isDirectRalplanAdvisoryInvocation(input.text))
|
|
3517
|
+
throw error;
|
|
3400
3518
|
console.warn('[omx] warning: failed to persist keyword activation state', error);
|
|
3401
3519
|
}
|
|
3402
3520
|
return workflowState;
|
|
@@ -3431,6 +3549,9 @@ export async function recordSkillActivation(input) {
|
|
|
3431
3549
|
const nextState = await persistStatefulSkillSeedState(input.stateDir, ownedState, nowIso, previous, input.text, sourceCwd, {
|
|
3432
3550
|
activeContinuation: match.skill === 'autopilot' && sameSkillContinuation,
|
|
3433
3551
|
forceSessionScope: suppressRootMutation,
|
|
3552
|
+
advisoryActivationFailpoint: dependencies.advisoryActivationFailpoint,
|
|
3553
|
+
advisoryAfterModeBindingFailpoint: dependencies.advisoryAfterModeBindingFailpoint,
|
|
3554
|
+
advisoryThreadKind: authenticatedRootPrompt ? 'root-or-drift' : 'unknown',
|
|
3434
3555
|
});
|
|
3435
3556
|
const ownedNextState = applyProvenanceOwner(nextState);
|
|
3436
3557
|
ownedNextState.active_skills = buildActiveSkills(ownedNextState);
|