oh-my-codex 0.18.16 → 0.19.1

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 (232) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +5 -0
  4. package/crates/omx-sparkshell/tests/execution.rs +8 -1
  5. package/dist/agents/__tests__/definitions.test.js +5 -5
  6. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  7. package/dist/agents/__tests__/native-config.test.js +18 -14
  8. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  9. package/dist/agents/definitions.d.ts +2 -2
  10. package/dist/agents/definitions.d.ts.map +1 -1
  11. package/dist/agents/definitions.js +4 -4
  12. package/dist/agents/definitions.js.map +1 -1
  13. package/dist/agents/native-config.d.ts +1 -0
  14. package/dist/agents/native-config.d.ts.map +1 -1
  15. package/dist/agents/native-config.js +18 -16
  16. package/dist/agents/native-config.js.map +1 -1
  17. package/dist/auth/hotswap.d.ts.map +1 -1
  18. package/dist/auth/hotswap.js +17 -4
  19. package/dist/auth/hotswap.js.map +1 -1
  20. package/dist/autopilot/__tests__/planner-routing.test.js +2 -2
  21. package/dist/autopilot/__tests__/planner-routing.test.js.map +1 -1
  22. package/dist/autopilot/fsm.d.ts +1 -1
  23. package/dist/autopilot/fsm.d.ts.map +1 -1
  24. package/dist/autopilot/fsm.js +1 -1
  25. package/dist/autopilot/fsm.js.map +1 -1
  26. package/dist/cli/__tests__/auth.test.js +78 -3
  27. package/dist/cli/__tests__/auth.test.js.map +1 -1
  28. package/dist/cli/__tests__/codex-plugin-layout.test.js +30 -5
  29. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  30. package/dist/cli/__tests__/doctor-warning-copy.test.js +2 -0
  31. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  32. package/dist/cli/__tests__/index.test.js +96 -8
  33. package/dist/cli/__tests__/index.test.js.map +1 -1
  34. package/dist/cli/__tests__/launch-fallback.test.js +135 -1
  35. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  36. package/dist/cli/__tests__/mcp-parity.test.js +2 -4
  37. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  38. package/dist/cli/__tests__/mission.test.d.ts +2 -0
  39. package/dist/cli/__tests__/mission.test.d.ts.map +1 -0
  40. package/dist/cli/__tests__/mission.test.js +239 -0
  41. package/dist/cli/__tests__/mission.test.js.map +1 -0
  42. package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js +14 -0
  43. package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js.map +1 -1
  44. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +8 -0
  45. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  46. package/dist/cli/__tests__/resume.test.js +229 -1
  47. package/dist/cli/__tests__/resume.test.js.map +1 -1
  48. package/dist/cli/__tests__/session-scoped-runtime.test.js +113 -0
  49. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  50. package/dist/cli/__tests__/setup-install-mode.test.js +37 -0
  51. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  52. package/dist/cli/__tests__/ultragoal.test.js +22 -1
  53. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  54. package/dist/cli/__tests__/version.test.js +13 -1
  55. package/dist/cli/__tests__/version.test.js.map +1 -1
  56. package/dist/cli/auth.d.ts +1 -1
  57. package/dist/cli/auth.d.ts.map +1 -1
  58. package/dist/cli/auth.js +49 -9
  59. package/dist/cli/auth.js.map +1 -1
  60. package/dist/cli/index.d.ts +27 -4
  61. package/dist/cli/index.d.ts.map +1 -1
  62. package/dist/cli/index.js +263 -36
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/cli/mission.d.ts +36 -0
  65. package/dist/cli/mission.d.ts.map +1 -0
  66. package/dist/cli/mission.js +443 -0
  67. package/dist/cli/mission.js.map +1 -0
  68. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  69. package/dist/cli/plugin-marketplace.js +22 -1
  70. package/dist/cli/plugin-marketplace.js.map +1 -1
  71. package/dist/cli/ralph.d.ts.map +1 -1
  72. package/dist/cli/ralph.js +4 -0
  73. package/dist/cli/ralph.js.map +1 -1
  74. package/dist/cli/setup.d.ts.map +1 -1
  75. package/dist/cli/setup.js +3 -1
  76. package/dist/cli/setup.js.map +1 -1
  77. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +7 -0
  78. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
  79. package/dist/goal-workflows/codex-goal-snapshot.js +1 -1
  80. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  81. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +12 -0
  82. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  83. package/dist/hooks/__tests__/keyword-detector.test.js +267 -7
  84. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  85. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  86. package/dist/hooks/keyword-detector.js +143 -30
  87. package/dist/hooks/keyword-detector.js.map +1 -1
  88. package/dist/hud/__tests__/reconcile.test.js +121 -0
  89. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  90. package/dist/hud/__tests__/state.test.js +141 -6
  91. package/dist/hud/__tests__/state.test.js.map +1 -1
  92. package/dist/hud/__tests__/tmux.test.js +1 -1
  93. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  94. package/dist/hud/reconcile.d.ts +3 -1
  95. package/dist/hud/reconcile.d.ts.map +1 -1
  96. package/dist/hud/reconcile.js +281 -151
  97. package/dist/hud/reconcile.js.map +1 -1
  98. package/dist/hud/render.d.ts.map +1 -1
  99. package/dist/hud/render.js +4 -2
  100. package/dist/hud/render.js.map +1 -1
  101. package/dist/hud/state.d.ts.map +1 -1
  102. package/dist/hud/state.js +51 -15
  103. package/dist/hud/state.js.map +1 -1
  104. package/dist/hud/tmux.d.ts.map +1 -1
  105. package/dist/hud/tmux.js +1 -4
  106. package/dist/hud/tmux.js.map +1 -1
  107. package/dist/hud/types.d.ts +5 -0
  108. package/dist/hud/types.d.ts.map +1 -1
  109. package/dist/hud/types.js.map +1 -1
  110. package/dist/leader/__tests__/contract.test.d.ts +2 -0
  111. package/dist/leader/__tests__/contract.test.d.ts.map +1 -0
  112. package/dist/leader/__tests__/contract.test.js +75 -0
  113. package/dist/leader/__tests__/contract.test.js.map +1 -0
  114. package/dist/leader/contract.d.ts +26 -0
  115. package/dist/leader/contract.d.ts.map +1 -0
  116. package/dist/leader/contract.js +97 -0
  117. package/dist/leader/contract.js.map +1 -0
  118. package/dist/mcp/__tests__/state-paths.test.js +32 -1
  119. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  120. package/dist/mcp/state-paths.d.ts +4 -0
  121. package/dist/mcp/state-paths.d.ts.map +1 -1
  122. package/dist/mcp/state-paths.js +6 -15
  123. package/dist/mcp/state-paths.js.map +1 -1
  124. package/dist/modes/base.d.ts.map +1 -1
  125. package/dist/modes/base.js +22 -7
  126. package/dist/modes/base.js.map +1 -1
  127. package/dist/notifications/__tests__/dispatcher.test.js +16 -0
  128. package/dist/notifications/__tests__/dispatcher.test.js.map +1 -1
  129. package/dist/notifications/__tests__/profiles.test.js +87 -0
  130. package/dist/notifications/__tests__/profiles.test.js.map +1 -1
  131. package/dist/notifications/config.d.ts +1 -0
  132. package/dist/notifications/config.d.ts.map +1 -1
  133. package/dist/notifications/config.js +60 -22
  134. package/dist/notifications/config.js.map +1 -1
  135. package/dist/notifications/dispatcher.d.ts.map +1 -1
  136. package/dist/notifications/dispatcher.js +6 -16
  137. package/dist/notifications/dispatcher.js.map +1 -1
  138. package/dist/pipeline/__tests__/stages.test.js +2 -0
  139. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  140. package/dist/pipeline/stages/ultragoal.d.ts.map +1 -1
  141. package/dist/pipeline/stages/ultragoal.js +6 -1
  142. package/dist/pipeline/stages/ultragoal.js.map +1 -1
  143. package/dist/question/__tests__/renderer.test.js +58 -4
  144. package/dist/question/__tests__/renderer.test.js.map +1 -1
  145. package/dist/question/renderer.d.ts +1 -1
  146. package/dist/question/renderer.d.ts.map +1 -1
  147. package/dist/question/renderer.js +73 -5
  148. package/dist/question/renderer.js.map +1 -1
  149. package/dist/ralplan/__tests__/consensus-gate.test.js +193 -0
  150. package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
  151. package/dist/ralplan/__tests__/runtime.test.js +202 -0
  152. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  153. package/dist/ralplan/consensus-gate.js +24 -3
  154. package/dist/ralplan/consensus-gate.js.map +1 -1
  155. package/dist/ralplan/runtime.d.ts +7 -0
  156. package/dist/ralplan/runtime.d.ts.map +1 -1
  157. package/dist/ralplan/runtime.js +63 -4
  158. package/dist/ralplan/runtime.js.map +1 -1
  159. package/dist/scripts/__tests__/codex-native-hook.test.js +6935 -2681
  160. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  161. package/dist/scripts/codex-native-hook.d.ts +1 -0
  162. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  163. package/dist/scripts/codex-native-hook.js +4442 -187
  164. package/dist/scripts/codex-native-hook.js.map +1 -1
  165. package/dist/scripts/generate-catalog-docs.js +1 -0
  166. package/dist/scripts/generate-catalog-docs.js.map +1 -1
  167. package/dist/state/__tests__/operations.test.js +1424 -0
  168. package/dist/state/__tests__/operations.test.js.map +1 -1
  169. package/dist/state/__tests__/planning-gate.test.js +410 -0
  170. package/dist/state/__tests__/planning-gate.test.js.map +1 -1
  171. package/dist/state/__tests__/skill-active.test.js +59 -0
  172. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  173. package/dist/state/operations.d.ts +10 -0
  174. package/dist/state/operations.d.ts.map +1 -1
  175. package/dist/state/operations.js +250 -14
  176. package/dist/state/operations.js.map +1 -1
  177. package/dist/state/skill-active.d.ts +4 -1
  178. package/dist/state/skill-active.d.ts.map +1 -1
  179. package/dist/state/skill-active.js +8 -6
  180. package/dist/state/skill-active.js.map +1 -1
  181. package/dist/state/workflow-transition.d.ts.map +1 -1
  182. package/dist/state/workflow-transition.js +642 -1
  183. package/dist/state/workflow-transition.js.map +1 -1
  184. package/dist/subagents/__tests__/tracker.test.js +248 -1
  185. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  186. package/dist/subagents/tracker.d.ts +60 -0
  187. package/dist/subagents/tracker.d.ts.map +1 -1
  188. package/dist/subagents/tracker.js +225 -1
  189. package/dist/subagents/tracker.js.map +1 -1
  190. package/dist/team/__tests__/model-contract.test.js +72 -4
  191. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  192. package/dist/team/__tests__/runtime.test.js +44 -2
  193. package/dist/team/__tests__/runtime.test.js.map +1 -1
  194. package/dist/team/__tests__/tmux-session.test.js +127 -8
  195. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  196. package/dist/team/__tests__/worker-runtime-identity.test.js +89 -0
  197. package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
  198. package/dist/team/model-contract.d.ts +3 -0
  199. package/dist/team/model-contract.d.ts.map +1 -1
  200. package/dist/team/model-contract.js +42 -5
  201. package/dist/team/model-contract.js.map +1 -1
  202. package/dist/team/runtime.d.ts +2 -1
  203. package/dist/team/runtime.d.ts.map +1 -1
  204. package/dist/team/runtime.js +21 -11
  205. package/dist/team/runtime.js.map +1 -1
  206. package/dist/team/scaling.d.ts.map +1 -1
  207. package/dist/team/scaling.js +13 -11
  208. package/dist/team/scaling.js.map +1 -1
  209. package/dist/team/tmux-session.d.ts +1 -0
  210. package/dist/team/tmux-session.d.ts.map +1 -1
  211. package/dist/team/tmux-session.js +63 -13
  212. package/dist/team/tmux-session.js.map +1 -1
  213. package/dist/ultragoal/__tests__/artifacts.test.js +21 -4
  214. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  215. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  216. package/dist/ultragoal/artifacts.js +75 -5
  217. package/dist/ultragoal/artifacts.js.map +1 -1
  218. package/dist/utils/__tests__/agents-model-table.test.js +2 -2
  219. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
  220. package/package.json +1 -1
  221. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  222. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +19 -7
  223. package/plugins/oh-my-codex/skills/code-review/SKILL.md +16 -0
  224. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +23 -0
  225. package/plugins/oh-my-codex/skills/ultrawork/references/agent-tiers.md +3 -2
  226. package/skills/code-review/SKILL.md +16 -0
  227. package/skills/ecomode/references/agent-tiers.md +1 -1
  228. package/skills/ultragoal/SKILL.md +23 -0
  229. package/skills/ultrawork/references/agent-tiers.md +3 -2
  230. package/src/scripts/__tests__/codex-native-hook.test.ts +14843 -9586
  231. package/src/scripts/codex-native-hook.ts +4520 -194
  232. package/src/scripts/generate-catalog-docs.ts +1 -0
@@ -14,6 +14,248 @@ describe('planning gate: tool classification', () => {
14
14
  assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: 'gh pr create --title "fix"' }), true);
15
15
  assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: 'gh pr merge 42' }), true);
16
16
  });
17
+ it('classifies same-command protected artifact write plus shell execution as implementation', () => {
18
+ const command = `mkdir -p .omx/context
19
+ cat > .omx/context/run.sh <<'SCRIPT'
20
+ #!/bin/sh
21
+ mkdir -p src
22
+ printf pwned > src/pwned.ts
23
+ SCRIPT
24
+ sh .omx/context/run.sh
25
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","state":{"deep_interview_gate":{"status":"complete","rationale":"done"}}}' --json`;
26
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
27
+ });
28
+ it('classifies Python literal planning artifact write plus shell execution as implementation', () => {
29
+ const command = `python3 - <<'PY'
30
+ from pathlib import Path
31
+ Path('.omx/plans/run.sh').write_text('echo pwned')
32
+ PY
33
+ sh .omx/plans/run.sh`;
34
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
35
+ });
36
+ it('classifies Python literal tmp artifact write plus shell execution as implementation', () => {
37
+ const command = `python3 - <<'PY'
38
+ from pathlib import Path
39
+ Path('.omx/tmp/sess/run.sh').write_text('echo pwned')
40
+ PY
41
+ sh .omx/tmp/sess/run.sh`;
42
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
43
+ });
44
+ it('classifies Python literal tmp artifact write plus tsx execution as implementation', () => {
45
+ const command = `python3 - <<'PY'
46
+ from pathlib import Path
47
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
48
+ PY
49
+ tsx .omx/tmp/sess/run.ts`;
50
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
51
+ });
52
+ it('classifies same-command tmp source runner and preload transports as implementation', () => {
53
+ const commands = [
54
+ `python3 - <<'PY'
55
+ from pathlib import Path
56
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
57
+ PY
58
+ tsx --tsconfig tsconfig.json watch .omx/tmp/sess/run.ts`,
59
+ `python3 - <<'PY'
60
+ from pathlib import Path
61
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
62
+ PY
63
+ deno run .omx/tmp/sess/run.ts`,
64
+ `python3 - <<'PY'
65
+ from pathlib import Path
66
+ Path('.omx/tmp/sess/run.txt').write_text('print(1)')
67
+ PY
68
+ python -X dev .omx/tmp/sess/run.txt`,
69
+ `python3 - <<'PY'
70
+ from pathlib import Path
71
+ Path('.omx/tmp/sess/probe.go').write_text('package main')
72
+ PY
73
+ go run .omx/tmp/sess/probe.go`,
74
+ `python3 - <<'PY'
75
+ from pathlib import Path
76
+ Path('.omx/tmp/sess/preload').write_text('')
77
+ PY
78
+ node --require .omx/tmp/sess/preload -e ''`,
79
+ `python3 - <<'PY'
80
+ from pathlib import Path
81
+ Path('.omx/tmp/sess/rc').write_text('')
82
+ PY
83
+ bash --rcfile .omx/tmp/sess/rc -i -c true`,
84
+ ];
85
+ for (const command of commands) {
86
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true, command);
87
+ }
88
+ });
89
+ it('classifies tmp stdin redirection into interpreters and shells as implementation', () => {
90
+ const commands = [
91
+ 'python < .omx/tmp/s/run.txt',
92
+ 'node < .omx/tmp/s/run.txt',
93
+ 'ruby < .omx/tmp/s/run.txt',
94
+ 'perl < .omx/tmp/s/run.txt',
95
+ 'sh < .omx/tmp/s/run.txt',
96
+ 'bash < .omx/tmp/s/run.txt',
97
+ '/usr/bin/python < .omx/tmp/s/run.txt',
98
+ '/bin/sh < .omx/tmp/s/run.txt',
99
+ 'env /bin/bash < .omx/tmp/s/run.txt',
100
+ 'command /usr/bin/node < .omx/tmp/s/run.txt',
101
+ `python3 - <<'PY'
102
+ from pathlib import Path
103
+ Path('.omx/tmp/s/run.txt').write_text('print(1)')
104
+ PY
105
+ python < .omx/tmp/s/run.txt`,
106
+ ];
107
+ for (const command of commands) {
108
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true, command);
109
+ }
110
+ });
111
+ it('does not classify Python literal tmp artifact write without execution as implementation', () => {
112
+ const command = `python3 - <<'PY'
113
+ from pathlib import Path
114
+ Path('.omx/tmp/sess/notes.md').write_text('# Scratch notes\\n')
115
+ PY`;
116
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), false);
117
+ });
118
+ it('does not classify Python literal planning artifact write without execution as implementation', () => {
119
+ const command = `python3 - <<'PY'
120
+ from pathlib import Path
121
+ Path('.omx/plans/notes.md').write_text('# Plan notes\\n')
122
+ PY`;
123
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), false);
124
+ });
125
+ it('classifies same-command protected artifact execution through cd plus timeout as implementation', () => {
126
+ const command = `mkdir -p .omx/context
127
+ cat > .omx/context/run.sh <<'SCRIPT'
128
+ echo pwned
129
+ SCRIPT
130
+ cd .omx/context && timeout 5 sh run.sh
131
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
132
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
133
+ });
134
+ it('classifies same-command protected artifact execution through cd shell wrappers and options as implementation', () => {
135
+ const executionForms = [
136
+ 'command cd .omx/context && sh run.sh',
137
+ 'builtin cd .omx/context && sh run.sh',
138
+ 'cd -- .omx/context && sh run.sh',
139
+ 'cd -P .omx/context && sh run.sh',
140
+ 'cd -L .omx/context && sh run.sh',
141
+ ];
142
+ for (const executionForm of executionForms) {
143
+ const command = `mkdir -p .omx/context
144
+ cat > .omx/context/run.sh <<'SCRIPT'
145
+ echo pwned
146
+ SCRIPT
147
+ ${executionForm}
148
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
149
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true, executionForm);
150
+ }
151
+ });
152
+ it('classifies grouped cwd same-command protected artifact executions as implementation', () => {
153
+ const executionForms = [
154
+ '(cd .omx/context && sh run.sh)',
155
+ '{ cd .omx/context; sh run.sh; }',
156
+ '(cd .omx/context; sh run.sh)',
157
+ ];
158
+ for (const executionForm of executionForms) {
159
+ const command = `mkdir -p .omx/context
160
+ cat > .omx/context/run.sh <<'SCRIPT'
161
+ echo pwned
162
+ SCRIPT
163
+ ${executionForm}
164
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
165
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true, executionForm);
166
+ }
167
+ });
168
+ it('classifies same-command protected artifact execution through bash -lc as implementation', () => {
169
+ const command = `mkdir -p .omx/context
170
+ cat > .omx/context/run.sh <<'SCRIPT'
171
+ echo pwned
172
+ SCRIPT
173
+ bash -lc 'sh .omx/context/run.sh'
174
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
175
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
176
+ });
177
+ it('classifies tee writes when the protected executable is a later output file', () => {
178
+ const command = `mkdir -p .omx/context
179
+ printf 'echo pwned\n' | tee .omx/context/notes.md .omx/context/run.sh
180
+ sh .omx/context/run.sh
181
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
182
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
183
+ });
184
+ it('classifies same-command protected artifact execution through script interpreters as implementation', () => {
185
+ const command = `mkdir -p .omx/context
186
+ cat > .omx/context/run.py <<'PY'
187
+ print('pwned')
188
+ PY
189
+ python3 .omx/context/run.py
190
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
191
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
192
+ });
193
+ it('classifies shell script operands after shell options that consume the next word', () => {
194
+ const command = `mkdir -p .omx/context
195
+ cat > .omx/context/run.sh <<'SCRIPT'
196
+ echo pwned
197
+ SCRIPT
198
+ bash -o posix .omx/context/run.sh
199
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
200
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
201
+ });
202
+ it('classifies same-command protected artifact execution through attached env chdir as implementation', () => {
203
+ const command = `mkdir -p .omx/context
204
+ cat > .omx/context/run.sh <<'SCRIPT'
205
+ echo pwned
206
+ SCRIPT
207
+ env -C.omx/context sh run.sh
208
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
209
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
210
+ });
211
+ it('classifies same-command protected artifact execution through env -C as implementation', () => {
212
+ const command = `mkdir -p .omx/context
213
+ cat > .omx/context/run.sh <<'SCRIPT'
214
+ printf '%s\n' pwned > src/pwned.ts
215
+ SCRIPT
216
+ env -C .omx/context sh run.sh
217
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","state":{"deep_interview_gate":{"status":"complete","rationale":"done"}}}' --json`;
218
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
219
+ });
220
+ it('classifies same-command protected artifact execution through env --chdir as implementation', () => {
221
+ const command = `mkdir -p .omx/context
222
+ cat > .omx/context/run.sh <<'SCRIPT'
223
+ printf '%s\n' pwned > src/pwned.ts
224
+ SCRIPT
225
+ env --chdir=.omx/context sh run.sh
226
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","state":{"deep_interview_gate":{"status":"complete","rationale":"done"}}}' --json`;
227
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
228
+ });
229
+ it('classifies direct executable artifact paths through direct-exec wrappers as implementation', () => {
230
+ for (const executionLine of [
231
+ 'command ./.omx/context/run.sh',
232
+ 'nohup ./.omx/context/run.sh',
233
+ 'time ./.omx/context/run.sh',
234
+ 'setsid ./.omx/context/run.sh',
235
+ ]) {
236
+ const command = `mkdir -p .omx/context
237
+ cat > .omx/context/run.sh <<'SCRIPT'
238
+ printf '%s\n' pwned > src/pwned.ts
239
+ SCRIPT
240
+ ${executionLine}
241
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","state":{"deep_interview_gate":{"status":"complete","rationale":"done"}}}' --json`;
242
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true, executionLine);
243
+ }
244
+ });
245
+ it('classifies same-command protected specs source through cwd-changing shell as implementation', () => {
246
+ const command = `mkdir -p .omx/specs
247
+ printf 'export PWNED=1\n' > .omx/specs/env.sh
248
+ env --chdir=.omx/specs sh -c '. env.sh'
249
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
250
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
251
+ });
252
+ it('classifies same-command protected artifact write plus source as implementation', () => {
253
+ const command = `mkdir -p .omx/specs
254
+ printf 'export PWNED=1\n' > .omx/specs/env.sh
255
+ source .omx/specs/env.sh
256
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
257
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), true);
258
+ });
17
259
  it('does not classify Read, Glob, Grep, or safe Bash as implementation tools', () => {
18
260
  assert.equal(isImplementationToolCall({ tool_name: 'Read' }), false);
19
261
  assert.equal(isImplementationToolCall({ tool_name: 'Glob' }), false);
@@ -22,6 +264,14 @@ describe('planning gate: tool classification', () => {
22
264
  assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: 'npm test' }), false);
23
265
  assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: 'ls -la' }), false);
24
266
  });
267
+ it('does not classify protected artifact write plus ralplan handoff without execution as implementation', () => {
268
+ const command = `mkdir -p .omx/context
269
+ cat > .omx/context/notes.md <<'EOF'
270
+ # Handoff notes
271
+ EOF
272
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
273
+ assert.equal(isImplementationToolCall({ tool_name: 'Bash', tool_input: command }), false);
274
+ });
25
275
  it('does not classify Bash without tool_input as implementation tool', () => {
26
276
  assert.equal(isImplementationToolCall({ tool_name: 'Bash' }), false);
27
277
  });
@@ -54,6 +304,166 @@ describe('planning gate: downstream_authority=plan_then_execute + no ralplan con
54
304
  assert.equal(decision.allowed, false);
55
305
  assert.equal(decision.gate_fired, true);
56
306
  });
307
+ it('denies same-command protected artifact write plus execution when no ralplan consensus artifact exists', () => {
308
+ const command = `mkdir -p .omx/context
309
+ cat > .omx/context/run.sh <<'SCRIPT'
310
+ #!/bin/sh
311
+ mkdir -p src
312
+ printf pwned > src/pwned.ts
313
+ SCRIPT
314
+ sh .omx/context/run.sh
315
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","state":{"deep_interview_gate":{"status":"complete","rationale":"done"}}}' --json`;
316
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
317
+ assert.equal(decision.allowed, false);
318
+ assert.equal(decision.gate_fired, true);
319
+ assert.match(decision.reason, /Bash denied/);
320
+ });
321
+ it('denies same-command tmp TypeScript artifact execution through tsx when no ralplan consensus artifact exists', () => {
322
+ const command = `python3 - <<'PY'
323
+ from pathlib import Path
324
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
325
+ PY
326
+ tsx .omx/tmp/sess/run.ts`;
327
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
328
+ assert.equal(decision.allowed, false);
329
+ assert.equal(decision.gate_fired, true);
330
+ assert.match(decision.reason, /Bash denied/);
331
+ });
332
+ it('denies same-command tmp source runner and preload transports when no ralplan consensus artifact exists', () => {
333
+ const commands = [
334
+ `python3 - <<'PY'
335
+ from pathlib import Path
336
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
337
+ PY
338
+ tsx --tsconfig tsconfig.json watch .omx/tmp/sess/run.ts`,
339
+ `python3 - <<'PY'
340
+ from pathlib import Path
341
+ Path('.omx/tmp/sess/run.ts').write_text('console.log(1)')
342
+ PY
343
+ deno run .omx/tmp/sess/run.ts`,
344
+ `python3 - <<'PY'
345
+ from pathlib import Path
346
+ Path('.omx/tmp/sess/run.txt').write_text('print(1)')
347
+ PY
348
+ python -X dev .omx/tmp/sess/run.txt`,
349
+ `python3 - <<'PY'
350
+ from pathlib import Path
351
+ Path('.omx/tmp/sess/probe.go').write_text('package main')
352
+ PY
353
+ go run .omx/tmp/sess/probe.go`,
354
+ ];
355
+ for (const command of commands) {
356
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
357
+ assert.equal(decision.allowed, false, command);
358
+ assert.equal(decision.gate_fired, true, command);
359
+ assert.match(decision.reason, /Bash denied/);
360
+ }
361
+ });
362
+ it('denies tmp stdin redirection into interpreters and shells when no ralplan consensus artifact exists', () => {
363
+ const commands = [
364
+ 'python < .omx/tmp/s/run.txt',
365
+ 'node < .omx/tmp/s/run.txt',
366
+ 'ruby < .omx/tmp/s/run.txt',
367
+ 'perl < .omx/tmp/s/run.txt',
368
+ 'sh < .omx/tmp/s/run.txt',
369
+ 'bash < .omx/tmp/s/run.txt',
370
+ `python3 - <<'PY'
371
+ from pathlib import Path
372
+ Path('.omx/tmp/s/run.txt').write_text('print(1)')
373
+ PY
374
+ python < .omx/tmp/s/run.txt`,
375
+ ];
376
+ for (const command of commands) {
377
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
378
+ assert.equal(decision.allowed, false, command);
379
+ assert.equal(decision.gate_fired, true, command);
380
+ assert.match(decision.reason, /Bash denied/);
381
+ }
382
+ });
383
+ it('denies review5 protected artifact write plus same-command execution probes', () => {
384
+ const probes = [
385
+ `mkdir -p .omx/context
386
+ cat > .omx/context/run.sh <<'SCRIPT'
387
+ echo pwned
388
+ SCRIPT
389
+ cd .omx/context && timeout 5 sh run.sh
390
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
391
+ `mkdir -p .omx/context
392
+ cat > .omx/context/run.sh <<'SCRIPT'
393
+ echo pwned
394
+ SCRIPT
395
+ bash -lc 'sh .omx/context/run.sh'
396
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
397
+ `mkdir -p .omx/context
398
+ printf 'echo pwned\n' | tee .omx/context/notes.md .omx/context/run.sh
399
+ sh .omx/context/run.sh
400
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
401
+ `mkdir -p .omx/context
402
+ cat > .omx/context/run.py <<'PY'
403
+ print('pwned')
404
+ PY
405
+ python3 .omx/context/run.py
406
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
407
+ `mkdir -p .omx/context
408
+ cat > .omx/context/run.sh <<'SCRIPT'
409
+ echo pwned
410
+ SCRIPT
411
+ bash -o posix .omx/context/run.sh
412
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
413
+ `mkdir -p .omx/context
414
+ cat > .omx/context/run.sh <<'SCRIPT'
415
+ echo pwned
416
+ SCRIPT
417
+ env -C.omx/context sh run.sh
418
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`,
419
+ ];
420
+ for (const command of probes) {
421
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
422
+ assert.equal(decision.allowed, false, command);
423
+ assert.equal(decision.gate_fired, true, command);
424
+ assert.match(decision.reason, /Bash denied/);
425
+ }
426
+ });
427
+ it('denies cd wrapper and option same-command protected artifact executions', () => {
428
+ const probes = [
429
+ 'command cd .omx/context && sh run.sh',
430
+ 'builtin cd .omx/context && sh run.sh',
431
+ 'cd -- .omx/context && sh run.sh',
432
+ 'cd -P .omx/context && sh run.sh',
433
+ 'cd -L .omx/context && sh run.sh',
434
+ ];
435
+ for (const executionForm of probes) {
436
+ const command = `mkdir -p .omx/context
437
+ cat > .omx/context/run.sh <<'SCRIPT'
438
+ echo pwned
439
+ SCRIPT
440
+ ${executionForm}
441
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
442
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
443
+ assert.equal(decision.allowed, false, executionForm);
444
+ assert.equal(decision.gate_fired, true, executionForm);
445
+ assert.match(decision.reason, /Bash denied/);
446
+ }
447
+ });
448
+ it('denies grouped cwd same-command protected artifact executions', () => {
449
+ const probes = [
450
+ `(cd .omx/context && sh run.sh)`,
451
+ `{ cd .omx/context; sh run.sh; }`,
452
+ `(cd .omx/context; sh run.sh)`,
453
+ ];
454
+ for (const executionForm of probes) {
455
+ const command = `mkdir -p .omx/context
456
+ cat > .omx/context/run.sh <<'SCRIPT'
457
+ echo pwned
458
+ SCRIPT
459
+ ${executionForm}
460
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan"}' --json`;
461
+ const decision = evaluatePreToolUseGate({ tool_name: 'Bash', tool_input: command }, gateState, false);
462
+ assert.equal(decision.allowed, false, executionForm);
463
+ assert.equal(decision.gate_fired, true, executionForm);
464
+ assert.match(decision.reason, /Bash denied/);
465
+ }
466
+ });
57
467
  it('allows Read when no ralplan consensus artifact exists', () => {
58
468
  const decision = evaluatePreToolUseGate({ tool_name: 'Read' }, gateState, false);
59
469
  assert.equal(decision.allowed, true);
@@ -1 +1 @@
1
- {"version":3,"file":"planning-gate.test.js","sourceRoot":"","sources":["../../../src/state/__tests__/planning-gate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planning-gate.test.js","sourceRoot":"","sources":["../../../src/state/__tests__/planning-gate.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
4
+ import { existsSync } from 'node:fs';
4
5
  import { tmpdir } from 'node:os';
5
6
  import { join } from 'node:path';
6
7
  import { listActiveSkills, readVisibleSkillActiveState, syncCanonicalSkillStateForMode, writeSkillActiveStateCopies, } from '../skill-active.js';
@@ -13,6 +14,40 @@ async function withTempRepo(prefix, run) {
13
14
  await rm(cwd, { recursive: true, force: true });
14
15
  }
15
16
  }
17
+ async function withStateRootEnv(env, run) {
18
+ const previousOmxRoot = process.env.OMX_ROOT;
19
+ const previousOmxStateRoot = process.env.OMX_STATE_ROOT;
20
+ const previousTeamStateRoot = process.env.OMX_TEAM_STATE_ROOT;
21
+ if (typeof env.OMX_ROOT === 'string')
22
+ process.env.OMX_ROOT = env.OMX_ROOT;
23
+ else
24
+ delete process.env.OMX_ROOT;
25
+ if (typeof env.OMX_STATE_ROOT === 'string')
26
+ process.env.OMX_STATE_ROOT = env.OMX_STATE_ROOT;
27
+ else
28
+ delete process.env.OMX_STATE_ROOT;
29
+ if (typeof env.OMX_TEAM_STATE_ROOT === 'string')
30
+ process.env.OMX_TEAM_STATE_ROOT = env.OMX_TEAM_STATE_ROOT;
31
+ else
32
+ delete process.env.OMX_TEAM_STATE_ROOT;
33
+ try {
34
+ return await run();
35
+ }
36
+ finally {
37
+ if (typeof previousOmxRoot === 'string')
38
+ process.env.OMX_ROOT = previousOmxRoot;
39
+ else
40
+ delete process.env.OMX_ROOT;
41
+ if (typeof previousOmxStateRoot === 'string')
42
+ process.env.OMX_STATE_ROOT = previousOmxStateRoot;
43
+ else
44
+ delete process.env.OMX_STATE_ROOT;
45
+ if (typeof previousTeamStateRoot === 'string')
46
+ process.env.OMX_TEAM_STATE_ROOT = previousTeamStateRoot;
47
+ else
48
+ delete process.env.OMX_TEAM_STATE_ROOT;
49
+ }
50
+ }
16
51
  describe('skill-active state helpers', () => {
17
52
  it('prefers session-scoped canonical state over root state', async () => {
18
53
  await withTempRepo('omx-skill-active-session-', async (cwd) => {
@@ -41,6 +76,30 @@ describe('skill-active state helpers', () => {
41
76
  assert.equal(entry.session_id, 'sess-1');
42
77
  });
43
78
  });
79
+ it('uses OMX_TEAM_STATE_ROOT for default canonical sync without creating cwd .omx', async () => {
80
+ await withTempRepo('omx-skill-active-team-root-', async (root) => {
81
+ const cwd = join(root, 'workspace');
82
+ const teamStateRoot = join(root, 'team-state');
83
+ await mkdir(cwd, { recursive: true });
84
+ await withStateRootEnv({ OMX_TEAM_STATE_ROOT: teamStateRoot }, async () => {
85
+ await syncCanonicalSkillStateForMode({
86
+ cwd,
87
+ mode: 'ralph',
88
+ active: true,
89
+ currentPhase: 'executing',
90
+ sessionId: 'sess-team',
91
+ nowIso: '2026-07-05T00:00:00.000Z',
92
+ });
93
+ });
94
+ const sessionState = JSON.parse(await readFile(join(teamStateRoot, 'sessions', 'sess-team', 'skill-active-state.json'), 'utf-8'));
95
+ assert.equal(sessionState.active, true);
96
+ assert.equal(sessionState.skill, 'ralph');
97
+ assert.deepEqual(sessionState.active_skills?.map(({ skill, session_id }) => ({ skill, session_id })), [
98
+ { skill: 'ralph', session_id: 'sess-team' },
99
+ ]);
100
+ assert.equal(existsSync(join(cwd, '.omx')), false);
101
+ });
102
+ });
44
103
  it('keeps stale root entries from other sessions out of current session state', async () => {
45
104
  await withTempRepo('omx-skill-active-filter-', async (cwd) => {
46
105
  await mkdir(join(cwd, '.omx', 'state'), { recursive: true });