oh-my-codex 0.18.16 → 0.19.0
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/crates/omx-sparkshell/tests/execution.rs +8 -1
- package/dist/agents/__tests__/definitions.test.js +5 -5
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +18 -14
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts +2 -2
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +4 -4
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts +1 -0
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +18 -16
- package/dist/agents/native-config.js.map +1 -1
- 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/autopilot/__tests__/planner-routing.test.js +2 -2
- package/dist/autopilot/__tests__/planner-routing.test.js.map +1 -1
- package/dist/autopilot/fsm.d.ts +1 -1
- package/dist/autopilot/fsm.d.ts.map +1 -1
- package/dist/autopilot/fsm.js +1 -1
- package/dist/autopilot/fsm.js.map +1 -1
- package/dist/cli/__tests__/auth.test.js +78 -3
- package/dist/cli/__tests__/auth.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +30 -5
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +2 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +96 -8
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +135 -1
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-parity.test.js +2 -4
- package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
- package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js +14 -0
- package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +8 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +229 -1
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +46 -0
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +37 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.js +21 -0
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
- package/dist/cli/__tests__/version.test.js +13 -1
- package/dist/cli/__tests__/version.test.js.map +1 -1
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +49 -9
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/index.d.ts +25 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +233 -32
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugin-marketplace.d.ts.map +1 -1
- package/dist/cli/plugin-marketplace.js +22 -1
- package/dist/cli/plugin-marketplace.js.map +1 -1
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +4 -0
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +3 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +7 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +12 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +267 -7
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +143 -30
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +121 -0
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +110 -0
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +1 -1
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/reconcile.d.ts +3 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +281 -151
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +4 -2
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +44 -12
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +1 -4
- package/dist/hud/tmux.js.map +1 -1
- package/dist/hud/types.d.ts +5 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/dist/leader/__tests__/contract.test.d.ts +2 -0
- package/dist/leader/__tests__/contract.test.d.ts.map +1 -0
- package/dist/leader/__tests__/contract.test.js +75 -0
- package/dist/leader/__tests__/contract.test.js.map +1 -0
- package/dist/leader/contract.d.ts +26 -0
- package/dist/leader/contract.d.ts.map +1 -0
- package/dist/leader/contract.js +97 -0
- package/dist/leader/contract.js.map +1 -0
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +22 -7
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/dispatcher.test.js +16 -0
- package/dist/notifications/__tests__/dispatcher.test.js.map +1 -1
- package/dist/notifications/__tests__/profiles.test.js +87 -0
- package/dist/notifications/__tests__/profiles.test.js.map +1 -1
- package/dist/notifications/config.d.ts +1 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +60 -22
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/dispatcher.d.ts.map +1 -1
- package/dist/notifications/dispatcher.js +6 -16
- package/dist/notifications/dispatcher.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +2 -0
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/stages/ultragoal.d.ts.map +1 -1
- package/dist/pipeline/stages/ultragoal.js +6 -1
- package/dist/pipeline/stages/ultragoal.js.map +1 -1
- package/dist/question/__tests__/renderer.test.js +58 -4
- package/dist/question/__tests__/renderer.test.js.map +1 -1
- package/dist/question/renderer.d.ts +1 -1
- package/dist/question/renderer.d.ts.map +1 -1
- package/dist/question/renderer.js +73 -5
- package/dist/question/renderer.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +202 -0
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/runtime.d.ts +7 -0
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +63 -4
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +8484 -4560
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts +1 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +4387 -190
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +1137 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/planning-gate.test.js +410 -0
- package/dist/state/__tests__/planning-gate.test.js.map +1 -1
- package/dist/state/operations.d.ts +10 -0
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +242 -8
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts +4 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +5 -3
- package/dist/state/skill-active.js.map +1 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +642 -1
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/__tests__/tracker.test.js +248 -1
- package/dist/subagents/__tests__/tracker.test.js.map +1 -1
- package/dist/subagents/tracker.d.ts +60 -0
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +225 -1
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/model-contract.test.js +72 -4
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +44 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +127 -8
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-runtime-identity.test.js +89 -0
- package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
- package/dist/team/model-contract.d.ts +3 -0
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +42 -5
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/runtime.d.ts +2 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +21 -11
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +13 -11
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/tmux-session.d.ts +1 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +63 -13
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +7 -0
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +5 -0
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/dist/utils/__tests__/agents-model-table.test.js +2 -2
- package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +19 -7
- package/plugins/oh-my-codex/skills/code-review/SKILL.md +16 -0
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +23 -0
- package/plugins/oh-my-codex/skills/ultrawork/references/agent-tiers.md +3 -2
- package/skills/code-review/SKILL.md +16 -0
- package/skills/ecomode/references/agent-tiers.md +1 -1
- package/skills/ultragoal/SKILL.md +23 -0
- package/skills/ultrawork/references/agent-tiers.md +3 -2
- package/src/scripts/__tests__/codex-native-hook.test.ts +14014 -9097
- package/src/scripts/codex-native-hook.ts +4459 -199
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-goal-snapshot.js","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codex-goal-snapshot.js","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
7
|
const autopilotSkill = readFileSync(join(__dirname, '../../../skills/autopilot/SKILL.md'), 'utf-8');
|
|
8
8
|
const ralplanSkill = readFileSync(join(__dirname, '../../../skills/ralplan/SKILL.md'), 'utf-8');
|
|
9
|
+
const codeReviewSkill = readFileSync(join(__dirname, '../../../skills/code-review/SKILL.md'), 'utf-8');
|
|
10
|
+
const ultragoalSkill = readFileSync(join(__dirname, '../../../skills/ultragoal/SKILL.md'), 'utf-8');
|
|
9
11
|
const pipelineSkill = readFileSync(join(__dirname, '../../../skills/pipeline/SKILL.md'), 'utf-8');
|
|
10
12
|
const skillsDocs = readFileSync(join(__dirname, '../../../docs/skills.html'), 'utf-8');
|
|
11
13
|
const gettingStartedDocs = readFileSync(join(__dirname, '../../../docs/getting-started.html'), 'utf-8');
|
|
@@ -34,6 +36,16 @@ describe('autopilot skill default Ultragoal contract', () => {
|
|
|
34
36
|
assert.match(autopilotSkill, new RegExp(field));
|
|
35
37
|
}
|
|
36
38
|
});
|
|
39
|
+
it('documents minimal state/HUD contracts for code-review and ultragoal child phases', () => {
|
|
40
|
+
assert.match(codeReviewSkill, /State\/HUD Phase Contract/);
|
|
41
|
+
assert.match(codeReviewSkill, /not a standalone tracked mode with a `code-review-state\.json` lifecycle/i);
|
|
42
|
+
assert.match(codeReviewSkill, /skill-active-state\.json.*skill:"code-review".*phase:"planning"/s);
|
|
43
|
+
assert.match(codeReviewSkill, /current_phase":"code-review"/);
|
|
44
|
+
assert.match(ultragoalSkill, /State\/HUD Phase Contract/);
|
|
45
|
+
assert.match(ultragoalSkill, /mode:"ultragoal".*active:true.*current_phase/s);
|
|
46
|
+
assert.match(ultragoalSkill, /current_phase":"ultragoal"/);
|
|
47
|
+
assert.match(ultragoalSkill, /handoff_artifacts\.ultragoal/);
|
|
48
|
+
});
|
|
37
49
|
it('forbids self-attesting clean review and QA gates without durable stage evidence', () => {
|
|
38
50
|
assert.match(autopilotSkill, /Do not author `review_verdict:\{clean:true\}` from the leader's own summary/i);
|
|
39
51
|
assert.match(autopilotSkill, /both gates have durable source evidence/i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot-skill-contract.test.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/autopilot-skill-contract.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autopilot-skill-contract.test.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/autopilot-skill-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,kCAAkC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChG,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,sCAAsC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvG,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClG,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAAE,OAAO,CAAC,CAAC;AACvF,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE,OAAO,CAAC,CAAC;AAExG,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,yGAAyG,EAAE,GAAG,EAAE;QACjH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,sHAAsH,CAAC,CAAC;QACrJ,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,4DAA4D,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,mFAAmF,CAAC,CAAC;QAClH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,2DAA2D,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,KAAK,MAAM,KAAK,IAAI;YAClB,eAAe;YACf,WAAW;YACX,cAAc;YACd,aAAa;YACb,mBAAmB;YACnB,gBAAgB;YAChB,YAAY;YACZ,0BAA0B;SAC3B,EAAE,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,2EAA2E,CAAC,CAAC;QAC3G,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,kEAAkE,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,+CAA+C,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,8EAA8E,CAAC,CAAC;QAC7G,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,qFAAqF,CAAC,CAAC;QACpH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,wDAAwD,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,gGAAgG,CAAC,CAAC;QAC/H,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,kHAAkH,CAAC,CAAC;IACnJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,yDAAyD,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,8EAA8E,CAAC,CAAC;QAC7G,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,wCAAwC,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,qCAAqC,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,2EAA2E,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACrG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,sDAAsD,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,iFAAiF,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,kFAAkF,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,oDAAoD,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,qDAAqD,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,wIAAwI,CAAC,CAAC;IACzK,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,gEAAgE,CAAC,CAAC;QAC7F,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,0DAA0D,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,8DAA8D,CAAC,CAAC;QAC3F,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,6EAA6E,CAAC,CAAC;QAC1G,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,+DAA+D,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,iDAAiD,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,+EAA+E,CAAC,CAAC;QAC1G,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,yEAAyE,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAC5D,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,iHAAiH,CAAC,CAAC;QAChJ,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,wFAAwF,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -326,6 +326,27 @@ describe('keyword detector team compatibility', () => {
|
|
|
326
326
|
assert.equal(match.skill, 'cancel');
|
|
327
327
|
assert.equal(match.keyword.toLowerCase(), 'stop');
|
|
328
328
|
});
|
|
329
|
+
it('treats explicit slash stop commands as cancel intent', () => {
|
|
330
|
+
const match = detectPrimaryKeyword('/stop');
|
|
331
|
+
assert.ok(match);
|
|
332
|
+
assert.equal(match.skill, 'cancel');
|
|
333
|
+
assert.equal(match.keyword.toLowerCase(), 'stop');
|
|
334
|
+
});
|
|
335
|
+
it('treats comma-delimited slash stop commands as cancel intent', () => {
|
|
336
|
+
for (const prompt of ['/stop, please', 'Please /stop, now']) {
|
|
337
|
+
const match = detectPrimaryKeyword(prompt);
|
|
338
|
+
assert.ok(match, `expected cancel match for ${prompt}`);
|
|
339
|
+
assert.equal(match.skill, 'cancel');
|
|
340
|
+
assert.equal(match.keyword.toLowerCase(), 'stop');
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
it('does not trigger cancel from stop inside filenames or paths', () => {
|
|
344
|
+
assert.equal(detectPrimaryKeyword('inspect .omx/context/stop-hook-invalid-json-handoff-20260629T210626Z.md'), null);
|
|
345
|
+
assert.equal(detectPrimaryKeyword('Please summarize /tmp/stop-hook-invalid-json-handoff-20260629T210626Z.md'), null);
|
|
346
|
+
assert.equal(detectPrimaryKeyword('inspect /stop.md'), null);
|
|
347
|
+
assert.equal(detectPrimaryKeyword('inspect /abort.md'), null);
|
|
348
|
+
assert.equal(detectPrimaryKeyword('inspect /stop:hook.md'), null);
|
|
349
|
+
});
|
|
329
350
|
it('does not trigger cancel from incidental stop/abort test-log prose', () => {
|
|
330
351
|
assert.equal(detectPrimaryKeyword('FAIL should stop retrying after max attempts'), null);
|
|
331
352
|
assert.equal(detectPrimaryKeyword('PASS request aborted when upstream returns 499'), null);
|
|
@@ -571,7 +592,7 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
571
592
|
assert.deepEqual(modeState.state.planning_routing, {
|
|
572
593
|
owner: 'main',
|
|
573
594
|
mainModel: 'gpt-5.5',
|
|
574
|
-
plannerModel: 'gpt-5.
|
|
595
|
+
plannerModel: 'gpt-5.5',
|
|
575
596
|
reason: 'main_not_cheap_or_mini',
|
|
576
597
|
explicitPlannerOverride: false,
|
|
577
598
|
});
|
|
@@ -583,6 +604,172 @@ describe('keyword detector skill-active-state lifecycle', () => {
|
|
|
583
604
|
await rm(cwd, { recursive: true, force: true });
|
|
584
605
|
}
|
|
585
606
|
});
|
|
607
|
+
it('does not advance the supervised child phase past an unsatisfied deep-interview gate via keyword handoff', async () => {
|
|
608
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-supervised-gate-'));
|
|
609
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
610
|
+
try {
|
|
611
|
+
await mkdir(stateDir, { recursive: true });
|
|
612
|
+
// Activate Autopilot: seeds autopilot-state.json at current_phase=deep-interview
|
|
613
|
+
// with deep_interview_gate.status="required" (gate not satisfied).
|
|
614
|
+
const activated = await recordSkillActivation({
|
|
615
|
+
stateDir,
|
|
616
|
+
text: 'please run $autopilot',
|
|
617
|
+
sessionId: 'sess-gate',
|
|
618
|
+
threadId: 'thread-gate',
|
|
619
|
+
turnId: 'turn-1',
|
|
620
|
+
nowIso: '2026-02-25T00:00:00.000Z',
|
|
621
|
+
});
|
|
622
|
+
assert.equal(activated?.phase, 'deep-interview');
|
|
623
|
+
const autopilotStatePath = join(stateDir, 'sessions', 'sess-gate', 'autopilot-state.json');
|
|
624
|
+
const beforeAdvance = JSON.parse(await readFile(autopilotStatePath, 'utf-8'));
|
|
625
|
+
assert.equal(beforeAdvance.current_phase, 'deep-interview');
|
|
626
|
+
// A bare `$ralplan` keyword handoff must not advance current_phase across the
|
|
627
|
+
// deep-interview -> ralplan gate while the gate is unsatisfied. The keyword
|
|
628
|
+
// path now defers to the same gate as the state_write backend.
|
|
629
|
+
const denied = await recordSkillActivation({
|
|
630
|
+
stateDir,
|
|
631
|
+
text: 'continue with $ralplan',
|
|
632
|
+
sessionId: 'sess-gate',
|
|
633
|
+
threadId: 'thread-gate',
|
|
634
|
+
turnId: 'turn-2',
|
|
635
|
+
nowIso: '2026-02-25T00:01:00.000Z',
|
|
636
|
+
});
|
|
637
|
+
const afterAdvance = JSON.parse(await readFile(autopilotStatePath, 'utf-8'));
|
|
638
|
+
assert.equal(afterAdvance.current_phase, 'deep-interview', 'keyword handoff must not skip the deep-interview gate');
|
|
639
|
+
// The visible canonical skill-active state must stay aligned with the held
|
|
640
|
+
// detail phase (no drift to ralplan) — both the returned state and the
|
|
641
|
+
// persisted skill-active-state.json mirror.
|
|
642
|
+
assert.equal(denied?.phase, 'deep-interview');
|
|
643
|
+
assert.deepEqual(denied?.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'deep-interview']]);
|
|
644
|
+
const canonical = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-gate', SKILL_ACTIVE_STATE_FILE), 'utf-8'));
|
|
645
|
+
assert.equal(canonical.phase, 'deep-interview');
|
|
646
|
+
assert.deepEqual(canonical.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'deep-interview']]);
|
|
647
|
+
}
|
|
648
|
+
finally {
|
|
649
|
+
await rm(cwd, { recursive: true, force: true });
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
it('does not let a keyword jump ahead past a planning gate (forward skip)', async () => {
|
|
653
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-skip-ahead-'));
|
|
654
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
655
|
+
try {
|
|
656
|
+
await mkdir(stateDir, { recursive: true });
|
|
657
|
+
await recordSkillActivation({
|
|
658
|
+
stateDir,
|
|
659
|
+
text: 'please run $autopilot',
|
|
660
|
+
sessionId: 'sess-skip',
|
|
661
|
+
threadId: 'thread-skip',
|
|
662
|
+
turnId: 'turn-1',
|
|
663
|
+
nowIso: '2026-02-25T00:00:00.000Z',
|
|
664
|
+
});
|
|
665
|
+
// `$ultragoal` while in deep-interview skips the ralplan gate entirely; the
|
|
666
|
+
// keyword handoff must hold the current phase rather than jump ahead.
|
|
667
|
+
const result = await recordSkillActivation({
|
|
668
|
+
stateDir,
|
|
669
|
+
text: 'jump straight to $ultragoal',
|
|
670
|
+
sessionId: 'sess-skip',
|
|
671
|
+
threadId: 'thread-skip',
|
|
672
|
+
turnId: 'turn-2',
|
|
673
|
+
nowIso: '2026-02-25T00:01:00.000Z',
|
|
674
|
+
});
|
|
675
|
+
const autopilotState = JSON.parse(await readFile(join(stateDir, 'sessions', 'sess-skip', 'autopilot-state.json'), 'utf-8'));
|
|
676
|
+
assert.equal(autopilotState.current_phase, 'deep-interview', 'forward skip must be held');
|
|
677
|
+
// skill-active phase is kept in sync with the held autopilot phase.
|
|
678
|
+
assert.equal(result?.phase, 'deep-interview');
|
|
679
|
+
}
|
|
680
|
+
finally {
|
|
681
|
+
await rm(cwd, { recursive: true, force: true });
|
|
682
|
+
}
|
|
683
|
+
});
|
|
684
|
+
it('does not advance or drift canonical state past an unsatisfied ralplan -> ultragoal gate', async () => {
|
|
685
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-ralplan-gate-'));
|
|
686
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
687
|
+
const sessionId = 'sess-ralplan-gate';
|
|
688
|
+
try {
|
|
689
|
+
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
690
|
+
// Supervised Autopilot already in ralplan, with no ralplan consensus evidence
|
|
691
|
+
// (the ralplan -> ultragoal gate is unsatisfied).
|
|
692
|
+
await writeFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), JSON.stringify({
|
|
693
|
+
version: 1,
|
|
694
|
+
active: true,
|
|
695
|
+
skill: 'autopilot',
|
|
696
|
+
keyword: '$autopilot',
|
|
697
|
+
phase: 'ralplan',
|
|
698
|
+
source: 'keyword-detector',
|
|
699
|
+
session_id: sessionId,
|
|
700
|
+
active_skills: [{ skill: 'autopilot', phase: 'ralplan', active: true, session_id: sessionId }],
|
|
701
|
+
}, null, 2));
|
|
702
|
+
const autopilotStatePath = join(stateDir, 'sessions', sessionId, 'autopilot-state.json');
|
|
703
|
+
await writeFile(autopilotStatePath, JSON.stringify({ active: true, mode: 'autopilot', current_phase: 'ralplan', session_id: sessionId }, null, 2));
|
|
704
|
+
await writeFile(join(stateDir, 'sessions', sessionId, 'ralplan-state.json'), JSON.stringify({
|
|
705
|
+
active: true,
|
|
706
|
+
mode: 'ralplan',
|
|
707
|
+
current_phase: 'planning',
|
|
708
|
+
session_id: sessionId,
|
|
709
|
+
}, null, 2));
|
|
710
|
+
const denied = await recordSkillActivation({
|
|
711
|
+
stateDir,
|
|
712
|
+
text: 'advance to $ultragoal',
|
|
713
|
+
sessionId,
|
|
714
|
+
threadId: 'thread-ralplan-gate',
|
|
715
|
+
turnId: 'turn-ralplan-gate',
|
|
716
|
+
nowIso: '2026-02-25T00:01:00.000Z',
|
|
717
|
+
});
|
|
718
|
+
const afterAdvance = JSON.parse(await readFile(autopilotStatePath, 'utf-8'));
|
|
719
|
+
assert.equal(afterAdvance.current_phase, 'ralplan', 'keyword handoff must not skip the ralplan -> ultragoal gate');
|
|
720
|
+
assert.equal(denied?.phase, 'ralplan');
|
|
721
|
+
assert.deepEqual(denied?.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'ralplan']]);
|
|
722
|
+
const ralplanState = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'ralplan-state.json'), 'utf-8'));
|
|
723
|
+
assert.equal(ralplanState.active, true, 'blocked gate must not auto-complete ralplan state');
|
|
724
|
+
assert.equal(ralplanState.current_phase, 'planning', 'blocked gate must not advance ralplan state');
|
|
725
|
+
const canonical = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
|
|
726
|
+
assert.equal(canonical.phase, 'ralplan');
|
|
727
|
+
assert.deepEqual(canonical.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'ralplan']]);
|
|
728
|
+
}
|
|
729
|
+
finally {
|
|
730
|
+
await rm(cwd, { recursive: true, force: true });
|
|
731
|
+
}
|
|
732
|
+
});
|
|
733
|
+
it('does not let an implementation-phase keyword skip the code-review gate to ultraqa', async () => {
|
|
734
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-ultraqa-skip-'));
|
|
735
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
736
|
+
const sessionId = 'sess-ultraqa-skip';
|
|
737
|
+
try {
|
|
738
|
+
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
739
|
+
// Supervised Autopilot in an implementation phase (ultragoal). The completion
|
|
740
|
+
// gate requires code-review before ultraqa.
|
|
741
|
+
await writeFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), JSON.stringify({
|
|
742
|
+
version: 1,
|
|
743
|
+
active: true,
|
|
744
|
+
skill: 'autopilot',
|
|
745
|
+
keyword: '$autopilot',
|
|
746
|
+
phase: 'ultragoal',
|
|
747
|
+
source: 'keyword-detector',
|
|
748
|
+
session_id: sessionId,
|
|
749
|
+
active_skills: [{ skill: 'autopilot', phase: 'ultragoal', active: true, session_id: sessionId }],
|
|
750
|
+
}, null, 2));
|
|
751
|
+
const autopilotStatePath = join(stateDir, 'sessions', sessionId, 'autopilot-state.json');
|
|
752
|
+
await writeFile(autopilotStatePath, JSON.stringify({ active: true, mode: 'autopilot', current_phase: 'ultragoal', session_id: sessionId }, null, 2));
|
|
753
|
+
const denied = await recordSkillActivation({
|
|
754
|
+
stateDir,
|
|
755
|
+
text: 'run $ultraqa now',
|
|
756
|
+
sessionId,
|
|
757
|
+
threadId: 'thread-ultraqa-skip',
|
|
758
|
+
turnId: 'turn-ultraqa-skip',
|
|
759
|
+
nowIso: '2026-02-25T00:01:00.000Z',
|
|
760
|
+
});
|
|
761
|
+
const afterAdvance = JSON.parse(await readFile(autopilotStatePath, 'utf-8'));
|
|
762
|
+
assert.equal(afterAdvance.current_phase, 'ultragoal', 'keyword handoff must not skip the code-review gate');
|
|
763
|
+
assert.equal(denied?.phase, 'ultragoal');
|
|
764
|
+
assert.deepEqual(denied?.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'ultragoal']]);
|
|
765
|
+
const canonical = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
|
|
766
|
+
assert.equal(canonical.phase, 'ultragoal');
|
|
767
|
+
assert.deepEqual(canonical.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'ultragoal']]);
|
|
768
|
+
}
|
|
769
|
+
finally {
|
|
770
|
+
await rm(cwd, { recursive: true, force: true });
|
|
771
|
+
}
|
|
772
|
+
});
|
|
586
773
|
it('seeds dedicated planner routing in Autopilot state when main is cheap', async () => {
|
|
587
774
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-autopilot-planner-routing-'));
|
|
588
775
|
const stateDir = join(cwd, '.omx', 'state');
|
|
@@ -2236,7 +2423,7 @@ deepMaxRounds = 21
|
|
|
2236
2423
|
await rm(cwd, { recursive: true, force: true });
|
|
2237
2424
|
}
|
|
2238
2425
|
});
|
|
2239
|
-
it('keeps Autopilot visible when a supervised code-review child keyword appears', async () => {
|
|
2426
|
+
it('keeps Autopilot visible and advances HUD phase when a supervised code-review child keyword appears', async () => {
|
|
2240
2427
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-state-autopilot-child-code-review-'));
|
|
2241
2428
|
const stateDir = join(cwd, '.omx', 'state');
|
|
2242
2429
|
const sessionId = 'sess-autopilot-child-code-review';
|
|
@@ -2247,12 +2434,18 @@ deepMaxRounds = 21
|
|
|
2247
2434
|
active: true,
|
|
2248
2435
|
skill: 'autopilot',
|
|
2249
2436
|
keyword: '$autopilot',
|
|
2250
|
-
phase: '
|
|
2437
|
+
phase: 'ultragoal',
|
|
2251
2438
|
activated_at: '2026-05-30T00:00:00.000Z',
|
|
2252
2439
|
updated_at: '2026-05-30T00:01:00.000Z',
|
|
2253
2440
|
source: 'keyword-detector',
|
|
2254
2441
|
session_id: sessionId,
|
|
2255
|
-
active_skills: [{ skill: 'autopilot', phase: '
|
|
2442
|
+
active_skills: [{ skill: 'autopilot', phase: 'ultragoal', active: true, session_id: sessionId }],
|
|
2443
|
+
}, null, 2));
|
|
2444
|
+
await writeFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), JSON.stringify({
|
|
2445
|
+
active: true,
|
|
2446
|
+
mode: 'autopilot',
|
|
2447
|
+
current_phase: 'ultragoal',
|
|
2448
|
+
session_id: sessionId,
|
|
2256
2449
|
}, null, 2));
|
|
2257
2450
|
const result = await recordSkillActivation({
|
|
2258
2451
|
stateDir,
|
|
@@ -2264,13 +2457,72 @@ deepMaxRounds = 21
|
|
|
2264
2457
|
});
|
|
2265
2458
|
assert.ok(result);
|
|
2266
2459
|
assert.equal(result.skill, 'autopilot');
|
|
2267
|
-
assert.equal(result.phase, '
|
|
2460
|
+
assert.equal(result.phase, 'code-review');
|
|
2268
2461
|
assert.equal(result.supervised_child_skill, 'code-review');
|
|
2269
2462
|
const persisted = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
|
|
2270
2463
|
assert.equal(persisted.skill, 'autopilot');
|
|
2271
|
-
assert.equal(persisted.phase, '
|
|
2272
|
-
assert.deepEqual(persisted.active_skills?.map((entry) => entry.skill), ['autopilot']);
|
|
2464
|
+
assert.equal(persisted.phase, 'code-review');
|
|
2465
|
+
assert.deepEqual(persisted.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'code-review']]);
|
|
2466
|
+
assert.equal(existsSync(join(stateDir, 'sessions', sessionId, 'code-review-state.json')), false);
|
|
2467
|
+
const autopilot = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), 'utf-8'));
|
|
2468
|
+
assert.equal(autopilot.current_phase, 'code-review');
|
|
2469
|
+
assert.equal(autopilot.thread_id, 'thread-autopilot-child-code-review');
|
|
2470
|
+
assert.equal(autopilot.turn_id, 'turn-autopilot-child-code-review');
|
|
2471
|
+
}
|
|
2472
|
+
finally {
|
|
2473
|
+
await rm(cwd, { recursive: true, force: true });
|
|
2474
|
+
}
|
|
2475
|
+
});
|
|
2476
|
+
it('repairs stale inactive Autopilot detail when a supervised code-review child keyword appears', async () => {
|
|
2477
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-keyword-state-autopilot-child-stale-detail-'));
|
|
2478
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
2479
|
+
const sessionId = 'sess-autopilot-child-stale-detail';
|
|
2480
|
+
try {
|
|
2481
|
+
await mkdir(join(stateDir, 'sessions', sessionId), { recursive: true });
|
|
2482
|
+
await writeFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), JSON.stringify({
|
|
2483
|
+
version: 1,
|
|
2484
|
+
active: true,
|
|
2485
|
+
skill: 'autopilot',
|
|
2486
|
+
keyword: '$autopilot',
|
|
2487
|
+
phase: 'ultragoal',
|
|
2488
|
+
activated_at: '2026-05-30T00:00:00.000Z',
|
|
2489
|
+
updated_at: '2026-05-30T00:01:00.000Z',
|
|
2490
|
+
source: 'keyword-detector',
|
|
2491
|
+
session_id: sessionId,
|
|
2492
|
+
active_skills: [{ skill: 'autopilot', phase: 'ultragoal', active: true, session_id: sessionId }],
|
|
2493
|
+
}, null, 2));
|
|
2494
|
+
await writeFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), JSON.stringify({
|
|
2495
|
+
active: false,
|
|
2496
|
+
mode: 'autopilot',
|
|
2497
|
+
current_phase: 'ultragoal',
|
|
2498
|
+
started_at: '2026-05-30T00:00:00.000Z',
|
|
2499
|
+
updated_at: '2026-05-30T00:01:00.000Z',
|
|
2500
|
+
session_id: sessionId,
|
|
2501
|
+
}, null, 2));
|
|
2502
|
+
const result = await recordSkillActivation({
|
|
2503
|
+
stateDir,
|
|
2504
|
+
text: '$code-review inspect before QA',
|
|
2505
|
+
sessionId,
|
|
2506
|
+
threadId: 'thread-autopilot-child-stale-detail',
|
|
2507
|
+
turnId: 'turn-autopilot-child-stale-detail',
|
|
2508
|
+
nowIso: '2026-05-30T00:02:00.000Z',
|
|
2509
|
+
});
|
|
2510
|
+
assert.ok(result);
|
|
2511
|
+
assert.equal(result.skill, 'autopilot');
|
|
2512
|
+
assert.equal(result.phase, 'code-review');
|
|
2513
|
+
assert.equal(result.supervised_child_skill, 'code-review');
|
|
2514
|
+
assert.equal(result.transition_error, undefined);
|
|
2273
2515
|
assert.equal(existsSync(join(stateDir, 'sessions', sessionId, 'code-review-state.json')), false);
|
|
2516
|
+
const persisted = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, SKILL_ACTIVE_STATE_FILE), 'utf-8'));
|
|
2517
|
+
assert.equal(persisted.skill, 'autopilot');
|
|
2518
|
+
assert.equal(persisted.phase, 'code-review');
|
|
2519
|
+
assert.deepEqual(persisted.active_skills?.map((entry) => [entry.skill, entry.phase]), [['autopilot', 'code-review']]);
|
|
2520
|
+
const autopilot = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), 'utf-8'));
|
|
2521
|
+
assert.equal(autopilot.active, true);
|
|
2522
|
+
assert.equal(autopilot.mode, 'autopilot');
|
|
2523
|
+
assert.equal(autopilot.current_phase, 'code-review');
|
|
2524
|
+
assert.equal(autopilot.thread_id, 'thread-autopilot-child-stale-detail');
|
|
2525
|
+
assert.equal(autopilot.turn_id, 'turn-autopilot-child-stale-detail');
|
|
2274
2526
|
}
|
|
2275
2527
|
finally {
|
|
2276
2528
|
await rm(cwd, { recursive: true, force: true });
|
|
@@ -2346,6 +2598,12 @@ deepMaxRounds = 21
|
|
|
2346
2598
|
current_phase: 'executing',
|
|
2347
2599
|
session_id: sessionId,
|
|
2348
2600
|
}, null, 2));
|
|
2601
|
+
await writeFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), JSON.stringify({
|
|
2602
|
+
active: true,
|
|
2603
|
+
mode: 'autopilot',
|
|
2604
|
+
current_phase: 'ultragoal',
|
|
2605
|
+
session_id: sessionId,
|
|
2606
|
+
}, null, 2));
|
|
2349
2607
|
const result = await recordSkillActivation({
|
|
2350
2608
|
stateDir,
|
|
2351
2609
|
text: '$deep-interview go back and re-plan',
|
|
@@ -2359,6 +2617,8 @@ deepMaxRounds = 21
|
|
|
2359
2617
|
const ultragoal = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'ultragoal-state.json'), 'utf-8'));
|
|
2360
2618
|
assert.equal(ultragoal.active, true);
|
|
2361
2619
|
assert.equal(ultragoal.current_phase, 'executing');
|
|
2620
|
+
const autopilot = JSON.parse(await readFile(join(stateDir, 'sessions', sessionId, 'autopilot-state.json'), 'utf-8'));
|
|
2621
|
+
assert.equal(autopilot.current_phase, 'ultragoal');
|
|
2362
2622
|
}
|
|
2363
2623
|
finally {
|
|
2364
2624
|
await rm(cwd, { recursive: true, force: true });
|