oh-my-codex 0.18.11 → 0.18.12

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.
Files changed (154) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +2 -1
  4. package/dist/autopilot/__tests__/ralplan-gate.test.js +47 -0
  5. package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
  6. package/dist/autopilot/completion-gate.d.ts +10 -0
  7. package/dist/autopilot/completion-gate.d.ts.map +1 -0
  8. package/dist/autopilot/completion-gate.js +154 -0
  9. package/dist/autopilot/completion-gate.js.map +1 -0
  10. package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
  11. package/dist/autopilot/ralplan-gate.js +11 -4
  12. package/dist/autopilot/ralplan-gate.js.map +1 -1
  13. package/dist/cli/__tests__/codex-plugin-layout.test.js +46 -3
  14. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  15. package/dist/cli/__tests__/doctor-warning-copy.test.js +317 -0
  16. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  17. package/dist/cli/__tests__/index.test.js +66 -1
  18. package/dist/cli/__tests__/index.test.js.map +1 -1
  19. package/dist/cli/__tests__/launch-fallback.test.js +1 -1
  20. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  21. package/dist/cli/__tests__/session-scoped-runtime.test.js +101 -0
  22. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  23. package/dist/cli/__tests__/setup-agents-overwrite.test.js +289 -1
  24. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  25. package/dist/cli/__tests__/setup-install-mode.test.js +284 -12
  26. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  27. package/dist/cli/__tests__/state.test.js +93 -0
  28. package/dist/cli/__tests__/state.test.js.map +1 -1
  29. package/dist/cli/__tests__/update.test.js +152 -1
  30. package/dist/cli/__tests__/update.test.js.map +1 -1
  31. package/dist/cli/__tests__/version-sync-contract.test.js +2 -0
  32. package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
  33. package/dist/cli/doctor.d.ts.map +1 -1
  34. package/dist/cli/doctor.js +81 -11
  35. package/dist/cli/doctor.js.map +1 -1
  36. package/dist/cli/index.d.ts +4 -3
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +230 -39
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/setup.d.ts +1 -2
  41. package/dist/cli/setup.d.ts.map +1 -1
  42. package/dist/cli/setup.js +315 -123
  43. package/dist/cli/setup.js.map +1 -1
  44. package/dist/cli/state.d.ts.map +1 -1
  45. package/dist/cli/state.js +79 -8
  46. package/dist/cli/state.js.map +1 -1
  47. package/dist/cli/update.d.ts +1 -0
  48. package/dist/cli/update.d.ts.map +1 -1
  49. package/dist/cli/update.js +40 -10
  50. package/dist/cli/update.js.map +1 -1
  51. package/dist/config/__tests__/codex-hooks.test.js +36 -6
  52. package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
  53. package/dist/config/codex-hooks.d.ts +8 -0
  54. package/dist/config/codex-hooks.d.ts.map +1 -1
  55. package/dist/config/codex-hooks.js +20 -2
  56. package/dist/config/codex-hooks.js.map +1 -1
  57. package/dist/config/generator.d.ts +1 -1
  58. package/dist/config/generator.d.ts.map +1 -1
  59. package/dist/config/generator.js +1 -1
  60. package/dist/config/generator.js.map +1 -1
  61. package/dist/hooks/__tests__/best-practice-research-skill.test.js +12 -0
  62. package/dist/hooks/__tests__/best-practice-research-skill.test.js.map +1 -1
  63. package/dist/hud/__tests__/authority.test.js +45 -12
  64. package/dist/hud/__tests__/authority.test.js.map +1 -1
  65. package/dist/hud/__tests__/reconcile.test.js +95 -0
  66. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  67. package/dist/hud/__tests__/render.test.js +6 -6
  68. package/dist/hud/__tests__/render.test.js.map +1 -1
  69. package/dist/hud/__tests__/tmux.test.js +2 -2
  70. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  71. package/dist/hud/authority.d.ts.map +1 -1
  72. package/dist/hud/authority.js +17 -2
  73. package/dist/hud/authority.js.map +1 -1
  74. package/dist/hud/index.js +1 -4
  75. package/dist/hud/index.js.map +1 -1
  76. package/dist/hud/reconcile.d.ts.map +1 -1
  77. package/dist/hud/reconcile.js +42 -0
  78. package/dist/hud/reconcile.js.map +1 -1
  79. package/dist/hud/render.d.ts.map +1 -1
  80. package/dist/hud/render.js +6 -0
  81. package/dist/hud/render.js.map +1 -1
  82. package/dist/hud/tmux.d.ts.map +1 -1
  83. package/dist/hud/tmux.js +5 -4
  84. package/dist/hud/tmux.js.map +1 -1
  85. package/dist/mcp/__tests__/bootstrap.test.js +31 -1
  86. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  87. package/dist/mcp/bootstrap.d.ts +1 -0
  88. package/dist/mcp/bootstrap.d.ts.map +1 -1
  89. package/dist/mcp/bootstrap.js +32 -0
  90. package/dist/mcp/bootstrap.js.map +1 -1
  91. package/dist/modes/__tests__/base-autopilot-gates.test.d.ts +2 -0
  92. package/dist/modes/__tests__/base-autopilot-gates.test.d.ts.map +1 -0
  93. package/dist/modes/__tests__/base-autopilot-gates.test.js +154 -0
  94. package/dist/modes/__tests__/base-autopilot-gates.test.js.map +1 -0
  95. package/dist/modes/base.d.ts +4 -1
  96. package/dist/modes/base.d.ts.map +1 -1
  97. package/dist/modes/base.js +71 -1
  98. package/dist/modes/base.js.map +1 -1
  99. package/dist/pipeline/__tests__/orchestrator.test.js +19 -3
  100. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  101. package/dist/pipeline/orchestrator.js +4 -4
  102. package/dist/pipeline/orchestrator.js.map +1 -1
  103. package/dist/pipeline/stages/code-review.d.ts +2 -0
  104. package/dist/pipeline/stages/code-review.d.ts.map +1 -1
  105. package/dist/pipeline/stages/code-review.js +2 -0
  106. package/dist/pipeline/stages/code-review.js.map +1 -1
  107. package/dist/pipeline/stages/ultraqa.d.ts +3 -0
  108. package/dist/pipeline/stages/ultraqa.d.ts.map +1 -1
  109. package/dist/pipeline/stages/ultraqa.js +3 -0
  110. package/dist/pipeline/stages/ultraqa.js.map +1 -1
  111. package/dist/ralplan/__tests__/consensus-gate.test.d.ts +2 -0
  112. package/dist/ralplan/__tests__/consensus-gate.test.d.ts.map +1 -0
  113. package/dist/ralplan/__tests__/consensus-gate.test.js +192 -0
  114. package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -0
  115. package/dist/ralplan/consensus-gate.d.ts +7 -1
  116. package/dist/ralplan/consensus-gate.d.ts.map +1 -1
  117. package/dist/ralplan/consensus-gate.js +139 -19
  118. package/dist/ralplan/consensus-gate.js.map +1 -1
  119. package/dist/scripts/__tests__/codex-native-hook.test.js +208 -0
  120. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  121. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  122. package/dist/scripts/codex-native-hook.js +89 -13
  123. package/dist/scripts/codex-native-hook.js.map +1 -1
  124. package/dist/state/__tests__/operations.test.js +622 -0
  125. package/dist/state/__tests__/operations.test.js.map +1 -1
  126. package/dist/state/__tests__/skill-active.test.js +82 -0
  127. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  128. package/dist/state/operations.d.ts.map +1 -1
  129. package/dist/state/operations.js +31 -9
  130. package/dist/state/operations.js.map +1 -1
  131. package/dist/state/skill-active.d.ts.map +1 -1
  132. package/dist/state/skill-active.js +41 -1
  133. package/dist/state/skill-active.js.map +1 -1
  134. package/dist/team/__tests__/runtime.test.js +81 -57
  135. package/dist/team/__tests__/runtime.test.js.map +1 -1
  136. package/dist/team/runtime.js +4 -4
  137. package/dist/team/runtime.js.map +1 -1
  138. package/dist/utils/__tests__/paths.test.js +23 -0
  139. package/dist/utils/__tests__/paths.test.js.map +1 -1
  140. package/dist/utils/__tests__/version.test.js +27 -0
  141. package/dist/utils/__tests__/version.test.js.map +1 -1
  142. package/dist/utils/paths.d.ts.map +1 -1
  143. package/dist/utils/paths.js +4 -2
  144. package/dist/utils/paths.js.map +1 -1
  145. package/dist/utils/version.d.ts.map +1 -1
  146. package/dist/utils/version.js +7 -2
  147. package/dist/utils/version.js.map +1 -1
  148. package/package.json +1 -1
  149. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  150. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +53 -2
  151. package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +6 -1
  152. package/skills/best-practice-research/SKILL.md +6 -1
  153. package/src/scripts/__tests__/codex-native-hook.test.ts +252 -0
  154. package/src/scripts/codex-native-hook.ts +94 -14
package/Cargo.lock CHANGED
@@ -32,7 +32,7 @@ checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
32
32
 
33
33
  [[package]]
34
34
  name = "omx-api"
35
- version = "0.18.11"
35
+ version = "0.18.12"
36
36
  dependencies = [
37
37
  "serde",
38
38
  "serde_json",
@@ -40,14 +40,14 @@ dependencies = [
40
40
 
41
41
  [[package]]
42
42
  name = "omx-explore-harness"
43
- version = "0.18.11"
43
+ version = "0.18.12"
44
44
  dependencies = [
45
45
  "libc",
46
46
  ]
47
47
 
48
48
  [[package]]
49
49
  name = "omx-mux"
50
- version = "0.18.11"
50
+ version = "0.18.12"
51
51
  dependencies = [
52
52
  "serde",
53
53
  "serde_json",
@@ -55,7 +55,7 @@ dependencies = [
55
55
 
56
56
  [[package]]
57
57
  name = "omx-runtime"
58
- version = "0.18.11"
58
+ version = "0.18.12"
59
59
  dependencies = [
60
60
  "omx-mux",
61
61
  "omx-runtime-core",
@@ -64,7 +64,7 @@ dependencies = [
64
64
 
65
65
  [[package]]
66
66
  name = "omx-runtime-core"
67
- version = "0.18.11"
67
+ version = "0.18.12"
68
68
  dependencies = [
69
69
  "fs2",
70
70
  "serde",
@@ -73,7 +73,7 @@ dependencies = [
73
73
 
74
74
  [[package]]
75
75
  name = "omx-sparkshell"
76
- version = "0.18.11"
76
+ version = "0.18.12"
77
77
  dependencies = [
78
78
  "omx-mux",
79
79
  ]
package/Cargo.toml CHANGED
@@ -11,7 +11,7 @@ resolver = "2"
11
11
 
12
12
  [workspace.package]
13
13
 
14
- version = "0.18.11"
14
+ version = "0.18.12"
15
15
 
16
16
  edition = "2021"
17
17
  rust-version = "1.73"
package/README.md CHANGED
@@ -89,7 +89,7 @@ On a real `oh-my-codex` version bump, the global npm install now prints an expli
89
89
 
90
90
  OMX also checks for npm updates at launch on a throttled cadence and prompts before scheduling the update after the current session exits. Set `OMX_AUTO_UPDATE=0` to disable the launch-time check, or set `OMX_AUTO_UPDATE=defer` to schedule the same deferred update without prompting.
91
91
 
92
- **Codex plugin install note:** this repo also ships an official Codex plugin layout at `plugins/oh-my-codex` with marketplace metadata in `.agents/plugins/marketplace.json`. That plugin bundles the mirrored skill surface plus plugin-scoped companion metadata for official Codex lifecycle hooks, optional MCP compatibility servers, and apps. It is still **not** a replacement for `npm install -g oh-my-codex` plus `omx setup`: plugin-scoped hooks launch the installed `omx` CLI, legacy setup mode installs native agents and prompts, and plugin setup mode relies on plugin discovery for bundled skills while archiving/removing legacy OMX-managed prompts/native-agent TOMLs so stale role files cannot shadow plugin behavior.
92
+ **Codex plugin install note:** this repo also ships an official Codex plugin layout at `plugins/oh-my-codex` with marketplace metadata in `.agents/plugins/marketplace.json`. That plugin bundles the mirrored skill surface plus plugin-scoped companion metadata for official Codex lifecycle hooks, optional MCP compatibility servers, and apps. It is still **not** a replacement for `npm install -g oh-my-codex` plus `omx setup`: plugin-scoped hooks launch the installed `omx` CLI, legacy setup mode installs native agents and prompts, and plugin setup mode relies on plugin discovery for bundled skills while archiving/removing legacy OMX-managed prompts/native-agent TOMLs so stale role files cannot shadow plugin behavior. Plugin mode still needs a persistent scope `AGENTS.md` (`~/.codex/AGENTS.md` for user setup or `./AGENTS.md` for project setup) as the durable orchestration guidance layer; session-scoped AGENTS files only compose that durable guidance with runtime overlays and are not a replacement.
93
93
 
94
94
  Then work normally inside Codex:
95
95
 
@@ -302,6 +302,7 @@ These are operator/support surfaces:
302
302
  - Codex plugin marketplace install/discovery can cache the plugin under `${CODEX_HOME:-~/.codex}/plugins/cache/$MARKETPLACE_NAME/oh-my-codex/$VERSION/` (local installs may use `local` as the version identifier); that packaged plugin includes plugin-scoped companion metadata for official Codex lifecycle hooks, optional MCP compatibility servers, and apps (MCP/apps disabled by default), so it is still paired with the installed `omx` CLI for runtime execution
303
303
  - `omx setup` installs prompts, skills, AGENTS scaffolding, `.codex/config.toml`, and (for legacy installs or older Codex without `plugin_hooks`) OMX-managed native Codex hooks in `.codex/hooks.json`
304
304
  - setup refresh preserves non-OMX hook entries in `.codex/hooks.json` and only rewrites OMX-managed wrappers
305
+ - plugin setup keeps `AGENTS.md` as persistent durable guidance even though bundled skills/hooks come from the plugin cache; `omx doctor` treats a missing persistent scope `AGENTS.md` in plugin mode as a failed check because the session-scoped AGENTS file would otherwise contain only runtime overlay guidance
305
306
  - `omx setup --merge-agents` preserves existing `AGENTS.md` guidance while inserting or refreshing generated OMX sections between `<!-- OMX:AGENTS:START -->` / `<!-- OMX:AGENTS:END -->`; without `--merge-agents` or `--force`, non-interactive setup keeps skipping existing `AGENTS.md` files
306
307
  - `omx uninstall` removes OMX-managed wrappers from `.codex/hooks.json` but keeps the file when user hooks remain
307
308
  - `omx update` checks npm immediately, installs the newest global OMX build, then reruns the same interactive setup refresh path
@@ -6,6 +6,53 @@ import { tmpdir } from 'node:os';
6
6
  import { subagentTrackingPath } from '../../subagents/tracker.js';
7
7
  import { buildAutopilotRalplanUltragoalGateError, canAdvanceAutopilotRalplanToUltragoal, } from '../ralplan-gate.js';
8
8
  describe('autopilot ralplan gate', () => {
9
+ for (const { lane, architectVerdict, criticVerdict } of [
10
+ { lane: 'architect', architectVerdict: 'iterate', criticVerdict: 'approve' },
11
+ { lane: 'critic', architectVerdict: 'approve', criticVerdict: 'iterate' },
12
+ ]) {
13
+ it(`rejects complete ralplan consensus when ${lane} review verdict is iterate`, () => {
14
+ const state = {
15
+ current_phase: 'ralplan',
16
+ handoff_artifacts: {
17
+ ralplan_consensus_gate: {
18
+ complete: true,
19
+ sequence: ['architect-review', 'critic-review'],
20
+ ralplan_architect_review: {
21
+ agent_role: 'architect',
22
+ provenance_kind: 'native_subagent',
23
+ verdict: architectVerdict,
24
+ session_id: 'sess-autopilot-iterate',
25
+ thread_id: 'thread-architect',
26
+ artifact_path: '.omx/artifacts/architect.md',
27
+ tracker_path: '.omx/state/subagent-tracking.json',
28
+ completed_at: '2026-05-28T18:34:51.000Z',
29
+ },
30
+ ralplan_critic_review: {
31
+ agent_role: 'critic',
32
+ provenance_kind: 'native_subagent',
33
+ verdict: criticVerdict,
34
+ session_id: 'sess-autopilot-iterate',
35
+ thread_id: 'thread-critic',
36
+ artifact_path: '.omx/artifacts/critic.md',
37
+ tracker_path: '.omx/state/subagent-tracking.json',
38
+ completed_at: '2026-05-28T18:35:10.000Z',
39
+ },
40
+ },
41
+ },
42
+ };
43
+ const decision = canAdvanceAutopilotRalplanToUltragoal({
44
+ cwd: process.cwd(),
45
+ sessionId: 'sess-autopilot-iterate',
46
+ currentState: state,
47
+ });
48
+ assert.equal(decision.allowed, false);
49
+ assert.equal(decision.evidence?.blockedReason, 'non_approving_ralplan_consensus_review');
50
+ const error = buildAutopilotRalplanUltragoalGateError(decision);
51
+ assert.match(error, /non-approving architect or critic review evidence/i);
52
+ assert.doesNotMatch(error, /missing ralplan consensus gate/i);
53
+ assert.match(error, new RegExp(`${lane}.*verdict=iterate`, 'i'));
54
+ });
55
+ }
9
56
  it('rejects native review evidence from the session leader even when malformed tracking marks it as subagent', async () => {
10
57
  const cwd = await mkdtemp(join(tmpdir(), 'omx-autopilot-ralplan-leader-spoof-'));
11
58
  const sessionId = 'sess-autopilot-leader-spoof';
@@ -1 +1 @@
1
- {"version":3,"file":"ralplan-gate.test.js","sourceRoot":"","sources":["../../../src/autopilot/__tests__/ralplan-gate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ralplan-gate.test.js","sourceRoot":"","sources":["../../../src/autopilot/__tests__/ralplan-gate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ type JsonObject = Record<string, unknown>;
2
+ export declare function isAutopilotSuccessfulTerminalState(state: JsonObject): boolean;
3
+ export declare function hasCleanCodeReviewEvidence(value: unknown): boolean;
4
+ export declare function hasCleanUltraqaEvidence(value: unknown): boolean;
5
+ export declare function hasCleanAutopilotReviewAndQaEvidence(state: JsonObject): boolean;
6
+ export declare function validateAutopilotCompletionTransition(currentState: JsonObject, nextState: JsonObject, options?: {
7
+ allowUnknownActivePhaseCompletion?: boolean;
8
+ }): string | null;
9
+ export {};
10
+ //# sourceMappingURL=completion-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-gate.d.ts","sourceRoot":"","sources":["../../src/autopilot/completion-gate.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA+B1C,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAW7E;AA2CD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUlE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAa/D;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAU/E;AAED,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,UAAU,EACxB,SAAS,EAAE,UAAU,EACrB,OAAO,GAAE;IAAE,iCAAiC,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,MAAM,GAAG,IAAI,CAkCf"}
@@ -0,0 +1,154 @@
1
+ import { deriveAutopilotChildPhase, normalizeAutopilotPhase } from './fsm.js';
2
+ import { inferRunOutcome, inferTerminalLifecycleOutcome } from '../runtime/run-outcome.js';
3
+ function objectRecord(value) {
4
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
5
+ }
6
+ function nonEmptyString(value) {
7
+ return typeof value === 'string' ? value.trim() : '';
8
+ }
9
+ function stateField(state, key) {
10
+ if (Object.prototype.hasOwnProperty.call(state, key))
11
+ return state[key];
12
+ return objectRecord(state.state)[key];
13
+ }
14
+ function hasAnyStringField(value, keys) {
15
+ return keys.some((key) => nonEmptyString(value[key]).length > 0);
16
+ }
17
+ function stringField(value, key) {
18
+ return nonEmptyString(value[key]);
19
+ }
20
+ function isImplementationPhase(phase) {
21
+ return phase === 'ultragoal' || phase === 'team' || phase === 'ralph';
22
+ }
23
+ function isActiveAutopilotState(state) {
24
+ return state.mode === 'autopilot' && state.active === true;
25
+ }
26
+ export function isAutopilotSuccessfulTerminalState(state) {
27
+ const phase = normalizeAutopilotPhase(state.current_phase);
28
+ const runOutcome = inferRunOutcome(state);
29
+ const lifecycleOutcome = inferTerminalLifecycleOutcome(state);
30
+ if (phase === 'failed' || runOutcome === 'failed' || runOutcome === 'cancelled' || runOutcome === 'blocked_on_user')
31
+ return false;
32
+ if (lifecycleOutcome === 'failed' || lifecycleOutcome === 'blocked' || lifecycleOutcome === 'userinterlude' || lifecycleOutcome === 'askuserQuestion')
33
+ return false;
34
+ if (phase === 'complete')
35
+ return true;
36
+ if (runOutcome === 'finish')
37
+ return true;
38
+ if (lifecycleOutcome === 'finished')
39
+ return true;
40
+ if (nonEmptyString(state.completed_at))
41
+ return true;
42
+ return state.active === false;
43
+ }
44
+ function urlLooksLikeCi(url) {
45
+ return /github\.com\/[^/]+\/[^/]+\/actions\/runs\//i.test(url);
46
+ }
47
+ function evidenceText(value, keys) {
48
+ return keys.map((key) => nonEmptyString(value[key]).toLowerCase()).filter(Boolean).join('\n');
49
+ }
50
+ function looksLikeUltraqaEvidence(value) {
51
+ return /\bultraqa\b|\bqa[_-]?verdict\b|\bqa[_-]?evidence\b/.test(evidenceText(value, ['source', 'artifact_path', 'url', 'review_url', 'qa_url']));
52
+ }
53
+ function looksLikeCodeReviewEvidence(value) {
54
+ return /\bcode[-_]?review\b|\breview[_-]?verdict\b|\breview[_-]?evidence\b|\breviews\//.test(evidenceText(value, ['source', 'artifact_path', 'url', 'review_url', 'qa_url']));
55
+ }
56
+ function hasCodeReviewLocator(value) {
57
+ const artifactPath = stringField(value, 'artifact_path').toLowerCase();
58
+ const reviewUrl = stringField(value, 'review_url');
59
+ if (artifactPath)
60
+ return looksLikeCodeReviewEvidence(value);
61
+ return reviewUrl.length > 0 || hasAnyStringField(value, ['thread_id', 'agent_id', 'tool_call_id', 'url']);
62
+ }
63
+ function hasUltraqaLocator(value) {
64
+ const artifactPath = stringField(value, 'artifact_path').toLowerCase();
65
+ const qaUrl = stringField(value, 'qa_url');
66
+ const url = stringField(value, 'url');
67
+ if (artifactPath)
68
+ return looksLikeUltraqaEvidence(value) || /\bqa\b/.test(artifactPath);
69
+ return qaUrl.length > 0 || urlLooksLikeCi(url) || hasAnyStringField(value, ['tool_call_id', 'thread_id']);
70
+ }
71
+ function evidenceLocatorSet(value) {
72
+ return new Set(['artifact_path', 'url', 'review_url', 'qa_url', 'thread_id', 'tool_call_id', 'agent_id']
73
+ .map((key) => nonEmptyString(value[key]))
74
+ .filter(Boolean));
75
+ }
76
+ export function hasCleanCodeReviewEvidence(value) {
77
+ const verdict = objectRecord(value);
78
+ if (verdict.clean !== true)
79
+ return false;
80
+ if (nonEmptyString(verdict.stage) !== 'code-review')
81
+ return false;
82
+ if (nonEmptyString(verdict.recommendation).toUpperCase() !== 'APPROVE')
83
+ return false;
84
+ if (nonEmptyString(verdict.architectural_status).toUpperCase() !== 'CLEAR')
85
+ return false;
86
+ if (looksLikeUltraqaEvidence(verdict))
87
+ return false;
88
+ const url = nonEmptyString(verdict.url);
89
+ if (url && urlLooksLikeCi(url))
90
+ return false;
91
+ return hasCodeReviewLocator(verdict);
92
+ }
93
+ export function hasCleanUltraqaEvidence(value) {
94
+ const verdict = objectRecord(value);
95
+ if (verdict.clean !== true)
96
+ return false;
97
+ if (nonEmptyString(verdict.stage) !== 'ultraqa')
98
+ return false;
99
+ const source = nonEmptyString(verdict.source).toLowerCase();
100
+ if (source === 'leader' || source.includes('code-review'))
101
+ return false;
102
+ if (looksLikeCodeReviewEvidence(verdict))
103
+ return false;
104
+ if (verdict.skipped === true) {
105
+ return (nonEmptyString(verdict.reason).length > 0 || nonEmptyString(verdict.skip_reason).length > 0) && hasUltraqaLocator(verdict);
106
+ }
107
+ return hasUltraqaLocator(verdict);
108
+ }
109
+ export function hasCleanAutopilotReviewAndQaEvidence(state) {
110
+ const review = objectRecord(stateField(state, 'review_verdict'));
111
+ const qa = objectRecord(stateField(state, 'qa_verdict'));
112
+ if (!hasCleanCodeReviewEvidence(review) || !hasCleanUltraqaEvidence(qa))
113
+ return false;
114
+ const reviewLocators = evidenceLocatorSet(review);
115
+ const qaLocators = evidenceLocatorSet(qa);
116
+ for (const locator of reviewLocators) {
117
+ if (qaLocators.has(locator))
118
+ return false;
119
+ }
120
+ return true;
121
+ }
122
+ export function validateAutopilotCompletionTransition(currentState, nextState, options = {}) {
123
+ const current = { ...currentState, mode: 'autopilot' };
124
+ const next = { ...nextState, mode: 'autopilot' };
125
+ const currentPhase = deriveAutopilotChildPhase(current);
126
+ const nextPhase = deriveAutopilotChildPhase(next);
127
+ const successfulTerminal = isAutopilotSuccessfulTerminalState(next);
128
+ if (successfulTerminal
129
+ && isActiveAutopilotState(current)
130
+ && currentPhase === null
131
+ && options.allowUnknownActivePhaseCompletion !== true) {
132
+ return 'Cannot complete Autopilot from an unknown active phase; restore a valid Autopilot phase before terminalization.';
133
+ }
134
+ if (currentPhase === 'deep-interview' && successfulTerminal) {
135
+ return 'Cannot complete Autopilot before ralplan gate: deep-interview may only advance to ralplan.';
136
+ }
137
+ if (currentPhase === 'ralplan' && successfulTerminal) {
138
+ return 'Cannot complete Autopilot before ultragoal gate: ralplan may only advance to ultragoal.';
139
+ }
140
+ if (isImplementationPhase(currentPhase) && successfulTerminal) {
141
+ return `Cannot complete Autopilot before code-review gate: ${currentPhase} may only advance to code-review.`;
142
+ }
143
+ if (isImplementationPhase(currentPhase) && nextPhase === 'ultraqa') {
144
+ return `Cannot skip Autopilot code-review gate: ${currentPhase} may only advance to code-review.`;
145
+ }
146
+ if (currentPhase === 'code-review' && successfulTerminal) {
147
+ return 'Cannot complete Autopilot before ultraqa gate: code-review may only advance to ultraqa.';
148
+ }
149
+ if (currentPhase === 'ultraqa' && successfulTerminal && !hasCleanAutopilotReviewAndQaEvidence(nextState)) {
150
+ return 'Cannot complete Autopilot from ultraqa without clean code-review and ultraqa verdict evidence.';
151
+ }
152
+ return null;
153
+ }
154
+ //# sourceMappingURL=completion-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-gate.js","sourceRoot":"","sources":["../../src/autopilot/completion-gate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ralplan-gate.d.ts","sourceRoot":"","sources":["../../src/autopilot/ralplan-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEvH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,WAAW,kCAAkC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,4BAA4B,CAAC;CACzC;AAoCD,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kCAAkC,GACxC,qCAAqC,CAoBvC;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,qCAAqC,GAC9C,MAAM,CAKR"}
1
+ {"version":3,"file":"ralplan-gate.d.ts","sourceRoot":"","sources":["../../src/autopilot/ralplan-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,8BAA8B,CAAC;AAEtC,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,WAAW,kCAAkC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,4BAA4B,CAAC;CACzC;AAoCD,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,kCAAkC,GACxC,qCAAqC,CAkBvC;AAYD,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,qCAAqC,GAC9C,MAAM,CAKR"}
@@ -1,4 +1,4 @@
1
- import { buildRalplanConsensusGateFromSources } from '../ralplan/consensus-gate.js';
1
+ import { buildRalplanConsensusGateFromSources, RALPLAN_CONSENSUS_BLOCKED_REASONS, } from '../ralplan/consensus-gate.js';
2
2
  function safeObject(value) {
3
3
  return value && typeof value === 'object' && !Array.isArray(value)
4
4
  ? value
@@ -46,12 +46,19 @@ export function canAdvanceAutopilotRalplanToUltragoal(input) {
46
46
  }
47
47
  return {
48
48
  allowed: false,
49
- reason: evidence.blockedReason === 'native_subagent_consensus_evidence_missing'
50
- ? 'ralplan consensus lacks tracker-backed native architect and critic lanes'
51
- : 'missing ralplan consensus gate with tracker-backed native architect and critic lanes',
49
+ reason: ralplanConsensusBlockedReason(evidence),
52
50
  evidence,
53
51
  };
54
52
  }
53
+ function ralplanConsensusBlockedReason(evidence) {
54
+ if (evidence.blockedReason === RALPLAN_CONSENSUS_BLOCKED_REASONS.nativeSubagentEvidenceMissing) {
55
+ return 'ralplan consensus lacks tracker-backed native architect and critic lanes';
56
+ }
57
+ if (evidence.blockedReason === RALPLAN_CONSENSUS_BLOCKED_REASONS.nonApprovingReview) {
58
+ return 'ralplan consensus gate contains non-approving architect or critic review evidence';
59
+ }
60
+ return 'missing ralplan consensus gate with tracker-backed native architect and critic lanes';
61
+ }
55
62
  export function buildAutopilotRalplanUltragoalGateError(decision) {
56
63
  const details = decision.evidence?.blockedDetails?.length
57
64
  ? ` Details: ${decision.evidence.blockedDetails.join('; ')}.`
@@ -1 +1 @@
1
- {"version":3,"file":"ralplan-gate.js","sourceRoot":"","sources":["../../src/autopilot/ralplan-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAqC,MAAM,8BAA8B,CAAC;AAiBvH,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAmB;QACrB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAAoC;IACvD,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoC;IAC5D,OAAO,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,cAAc,CAAC,KAAoC;IAC1D,OAAO,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,KAAyC;IAC5D,MAAM,OAAO,GAA8C,EAAE,CAAC;IAC9D,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;QAC3B,CAAC,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;QACzC,CAAC,yBAAyB,EAAE,KAAK,CAAC,YAAY,CAAC;KACvC,EAAE,CAAC;QACX,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,KAAyC;IAEzC,MAAM,QAAQ,GAAG,oCAAoC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QACxE,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,sBAAsB,EAAE,IAAI;KAC7B,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,uEAAuE;YAC/E,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,QAAQ,CAAC,aAAa,KAAK,4CAA4C;YAC7E,CAAC,CAAC,0EAA0E;YAC5E,CAAC,CAAC,sFAAsF;QAC1F,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,QAA+C;IAE/C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM;QACvD,CAAC,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC7D,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,2CAA2C,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"ralplan-gate.js","sourceRoot":"","sources":["../../src/autopilot/ralplan-gate.ts"],"names":[],"mappings":"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"}
@@ -380,7 +380,7 @@ describe('official Codex plugin layout', () => {
380
380
  assert.equal(output.stopReason, 'plugin_stop_hook_launcher_empty_stdout');
381
381
  });
382
382
  });
383
- it('does not append fallback Stop JSON after partial child stdout', async () => {
383
+ it('replaces partial Stop child stdout with fallback Stop JSON', async () => {
384
384
  await withPluginCacheCopy(async (cachePluginRoot, cacheRoot) => {
385
385
  const commandPath = join(cacheRoot, process.platform === 'win32' ? 'partial.cmd' : 'partial.sh');
386
386
  if (process.platform === 'win32') {
@@ -391,11 +391,54 @@ describe('official Codex plugin layout', () => {
391
391
  await chmod(commandPath, 0o755);
392
392
  }
393
393
  const result = runPluginNativeHook(cachePluginRoot, JSON.stringify({ hook_event_name: 'Stop', session_id: 'sess-plugin-partial-stop' }), { OMX_NATIVE_HOOK_COMMAND: commandPath });
394
- assert.equal(result.status, 2, result.stderr || result.stdout);
395
- assert.equal(result.stdout, 'PARTIAL');
394
+ assert.equal(result.status, 0, result.stderr || result.stdout);
395
+ assert.doesNotMatch(result.stdout, /PARTIAL/);
396
+ const output = parseSingleJsonStdout(result.stdout);
397
+ assert.equal(output.decision, 'block');
398
+ assert.equal(output.stopReason, 'plugin_stop_hook_launcher_invalid_stdout');
399
+ });
400
+ });
401
+ it('preserves valid Stop child JSON even when the child exits nonzero', async () => {
402
+ await withPluginCacheCopy(async (cachePluginRoot, cacheRoot) => {
403
+ const commandPath = join(cacheRoot, process.platform === 'win32' ? 'valid-json-exit.cmd' : 'valid-json-exit.sh');
404
+ if (process.platform === 'win32') {
405
+ await writeFile(commandPath, '@echo off\r\necho {"decision":"block","stopReason":"child_valid_json"}\r\nexit /b 7\r\n', 'utf-8');
406
+ }
407
+ else {
408
+ await writeFile(commandPath, `#!/bin/sh
409
+ printf '{"decision":"block","stopReason":"child_valid_json"}\n'
410
+ exit 7
411
+ `, 'utf-8');
412
+ await chmod(commandPath, 0o755);
413
+ }
414
+ const result = runPluginNativeHook(cachePluginRoot, JSON.stringify({ hook_event_name: 'Stop', session_id: 'sess-plugin-valid-json-exit-stop' }), { OMX_NATIVE_HOOK_COMMAND: commandPath });
415
+ assert.equal(result.status, 0, result.stderr || result.stdout);
416
+ const output = parseSingleJsonStdout(result.stdout);
417
+ assert.equal(output.decision, 'block');
418
+ assert.equal(output.stopReason, 'child_valid_json');
396
419
  assert.doesNotMatch(result.stdout, /plugin_stop_hook_launcher/);
397
420
  });
398
421
  });
422
+ it('replaces oversized Stop child stdout with fallback Stop JSON', async () => {
423
+ await withPluginCacheCopy(async (cachePluginRoot, cacheRoot) => {
424
+ const commandPath = join(cacheRoot, process.platform === 'win32' ? 'oversized-stop-stdout.cmd' : 'oversized-stop-stdout.sh');
425
+ if (process.platform === 'win32') {
426
+ await writeFile(commandPath, '@echo off\r\nfor /L %%i in (1,1,1100000) do <nul set /p=x\r\n', 'utf-8');
427
+ }
428
+ else {
429
+ await writeFile(commandPath, `#!/bin/sh
430
+ head -c 1100000 /dev/zero | tr '\0' x
431
+ `, 'utf-8');
432
+ await chmod(commandPath, 0o755);
433
+ }
434
+ const result = runPluginNativeHook(cachePluginRoot, JSON.stringify({ hook_event_name: 'Stop', session_id: 'sess-plugin-oversized-stdout-stop' }), { OMX_NATIVE_HOOK_COMMAND: commandPath });
435
+ assert.equal(result.status, 0, result.stderr || result.stdout);
436
+ assert.ok(result.stdout.length < 2000, 'oversized child stdout should not leak to Stop stdout');
437
+ const output = parseSingleJsonStdout(result.stdout);
438
+ assert.equal(output.decision, 'block');
439
+ assert.equal(output.stopReason, 'plugin_stop_hook_launcher_stdout_oversized');
440
+ });
441
+ });
399
442
  it('emits Stop JSON for malformed Stop-looking stdin before invalid launcher failure', async () => {
400
443
  await withPluginCacheCopy(async (cachePluginRoot) => {
401
444
  await writeFile(join(cachePluginRoot, 'hooks', 'omx-command.json'), '{"command":', 'utf-8');