oh-my-codex 0.18.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +45 -19
  4. package/crates/omx-api/src/lib.rs +66 -9
  5. package/crates/omx-sparkshell/src/exec.rs +125 -3
  6. package/crates/omx-sparkshell/src/main.rs +126 -36
  7. package/crates/omx-sparkshell/tests/execution.rs +225 -1
  8. package/dist/agents/__tests__/definitions.test.js +14 -0
  9. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  10. package/dist/agents/__tests__/native-config.test.js +19 -0
  11. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  12. package/dist/agents/definitions.d.ts.map +1 -1
  13. package/dist/agents/definitions.js +30 -0
  14. package/dist/agents/definitions.js.map +1 -1
  15. package/dist/agents/native-config.d.ts +1 -0
  16. package/dist/agents/native-config.d.ts.map +1 -1
  17. package/dist/agents/native-config.js +4 -0
  18. package/dist/agents/native-config.js.map +1 -1
  19. package/dist/catalog/__tests__/generator.test.js +4 -0
  20. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  21. package/dist/cli/__tests__/codex-plugin-layout.test.js +15 -7
  22. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  23. package/dist/cli/__tests__/doctor-warning-copy.test.js +137 -8
  24. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  25. package/dist/cli/__tests__/index.test.js +203 -15
  26. package/dist/cli/__tests__/index.test.js.map +1 -1
  27. package/dist/cli/__tests__/install-docs-contract.test.d.ts +2 -0
  28. package/dist/cli/__tests__/install-docs-contract.test.d.ts.map +1 -0
  29. package/dist/cli/__tests__/install-docs-contract.test.js +55 -0
  30. package/dist/cli/__tests__/install-docs-contract.test.js.map +1 -0
  31. package/dist/cli/__tests__/launch-fallback.test.js +163 -0
  32. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  33. package/dist/cli/__tests__/question.test.js +29 -43
  34. package/dist/cli/__tests__/question.test.js.map +1 -1
  35. package/dist/cli/__tests__/setup-install-mode.test.js +94 -35
  36. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  37. package/dist/cli/__tests__/sparkshell-cli.test.js +20 -1
  38. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  39. package/dist/cli/__tests__/sparkshell-packaging.test.js +1 -0
  40. package/dist/cli/__tests__/sparkshell-packaging.test.js.map +1 -1
  41. package/dist/cli/__tests__/ultragoal.test.js +227 -4
  42. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  43. package/dist/cli/__tests__/update.test.js +72 -1
  44. package/dist/cli/__tests__/update.test.js.map +1 -1
  45. package/dist/cli/codex-feature-probe.d.ts +5 -0
  46. package/dist/cli/codex-feature-probe.d.ts.map +1 -1
  47. package/dist/cli/codex-feature-probe.js +13 -7
  48. package/dist/cli/codex-feature-probe.js.map +1 -1
  49. package/dist/cli/doctor.d.ts +7 -0
  50. package/dist/cli/doctor.d.ts.map +1 -1
  51. package/dist/cli/doctor.js +297 -17
  52. package/dist/cli/doctor.js.map +1 -1
  53. package/dist/cli/index.d.ts +9 -1
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +465 -110
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/plugin-marketplace.d.ts +2 -0
  58. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  59. package/dist/cli/plugin-marketplace.js +15 -1
  60. package/dist/cli/plugin-marketplace.js.map +1 -1
  61. package/dist/cli/setup.d.ts.map +1 -1
  62. package/dist/cli/setup.js +71 -11
  63. package/dist/cli/setup.js.map +1 -1
  64. package/dist/cli/sparkshell.d.ts +7 -1
  65. package/dist/cli/sparkshell.d.ts.map +1 -1
  66. package/dist/cli/sparkshell.js +13 -3
  67. package/dist/cli/sparkshell.js.map +1 -1
  68. package/dist/cli/ultragoal.d.ts +1 -1
  69. package/dist/cli/ultragoal.d.ts.map +1 -1
  70. package/dist/cli/ultragoal.js +184 -10
  71. package/dist/cli/ultragoal.js.map +1 -1
  72. package/dist/cli/update.d.ts +2 -0
  73. package/dist/cli/update.d.ts.map +1 -1
  74. package/dist/cli/update.js +14 -3
  75. package/dist/cli/update.js.map +1 -1
  76. package/dist/compat/__tests__/doctor-contract.test.js +3 -0
  77. package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
  78. package/dist/config/__tests__/codex-feature-flags.test.js +11 -1
  79. package/dist/config/__tests__/codex-feature-flags.test.js.map +1 -1
  80. package/dist/config/__tests__/codex-hooks.test.js +22 -11
  81. package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
  82. package/dist/config/__tests__/commit-lore-guard.test.d.ts +2 -0
  83. package/dist/config/__tests__/commit-lore-guard.test.d.ts.map +1 -0
  84. package/dist/config/__tests__/commit-lore-guard.test.js +20 -0
  85. package/dist/config/__tests__/commit-lore-guard.test.js.map +1 -0
  86. package/dist/config/codex-feature-flags.d.ts +4 -0
  87. package/dist/config/codex-feature-flags.d.ts.map +1 -1
  88. package/dist/config/codex-feature-flags.js +4 -0
  89. package/dist/config/codex-feature-flags.js.map +1 -1
  90. package/dist/config/codex-hooks.d.ts +1 -0
  91. package/dist/config/codex-hooks.d.ts.map +1 -1
  92. package/dist/config/codex-hooks.js +8 -10
  93. package/dist/config/codex-hooks.js.map +1 -1
  94. package/dist/config/commit-lore-guard.d.ts +1 -0
  95. package/dist/config/commit-lore-guard.d.ts.map +1 -1
  96. package/dist/config/commit-lore-guard.js +29 -3
  97. package/dist/config/commit-lore-guard.js.map +1 -1
  98. package/dist/config/generator.d.ts +17 -1
  99. package/dist/config/generator.d.ts.map +1 -1
  100. package/dist/config/generator.js +124 -11
  101. package/dist/config/generator.js.map +1 -1
  102. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +21 -0
  103. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
  104. package/dist/goal-workflows/codex-goal-snapshot.d.ts +4 -0
  105. package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
  106. package/dist/goal-workflows/codex-goal-snapshot.js +50 -3
  107. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  108. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +27 -6
  109. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  110. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +1 -1
  111. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +13 -11
  112. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
  113. package/dist/hooks/__tests__/deep-interview-contract.test.js +4 -3
  114. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  115. package/dist/hooks/__tests__/keyword-detector.test.js +173 -17
  116. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  117. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +33 -0
  118. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  119. package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts +2 -0
  120. package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts.map +1 -0
  121. package/dist/hooks/__tests__/prometheus-strict-contract.test.js +320 -0
  122. package/dist/hooks/__tests__/prometheus-strict-contract.test.js.map +1 -0
  123. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +12 -0
  124. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
  125. package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts +2 -0
  126. package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts.map +1 -0
  127. package/dist/hooks/__tests__/research-workflow-boundaries.test.js +35 -0
  128. package/dist/hooks/__tests__/research-workflow-boundaries.test.js.map +1 -0
  129. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +26 -3
  130. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
  131. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  132. package/dist/hooks/extensibility/dispatcher.js +29 -14
  133. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  134. package/dist/hooks/keyword-detector.d.ts +1 -1
  135. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  136. package/dist/hooks/keyword-detector.js +36 -9
  137. package/dist/hooks/keyword-detector.js.map +1 -1
  138. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  139. package/dist/hooks/keyword-registry.js +1 -0
  140. package/dist/hooks/keyword-registry.js.map +1 -1
  141. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  142. package/dist/hooks/prompt-guidance-contract.js +14 -2
  143. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  144. package/dist/hud/__tests__/hud-tmux-injection.test.js +36 -8
  145. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
  146. package/dist/hud/__tests__/reconcile.test.js +122 -11
  147. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  148. package/dist/hud/__tests__/render.test.js +84 -0
  149. package/dist/hud/__tests__/render.test.js.map +1 -1
  150. package/dist/hud/__tests__/resource-leak-watch.test.d.ts +2 -0
  151. package/dist/hud/__tests__/resource-leak-watch.test.d.ts.map +1 -0
  152. package/dist/hud/__tests__/resource-leak-watch.test.js +28 -0
  153. package/dist/hud/__tests__/resource-leak-watch.test.js.map +1 -0
  154. package/dist/hud/__tests__/state.test.js +51 -1
  155. package/dist/hud/__tests__/state.test.js.map +1 -1
  156. package/dist/hud/__tests__/tmux.test.js +69 -23
  157. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  158. package/dist/hud/index.d.ts +2 -2
  159. package/dist/hud/index.d.ts.map +1 -1
  160. package/dist/hud/index.js +17 -6
  161. package/dist/hud/index.js.map +1 -1
  162. package/dist/hud/reconcile.d.ts.map +1 -1
  163. package/dist/hud/reconcile.js +6 -3
  164. package/dist/hud/reconcile.js.map +1 -1
  165. package/dist/hud/render.d.ts.map +1 -1
  166. package/dist/hud/render.js +26 -0
  167. package/dist/hud/render.js.map +1 -1
  168. package/dist/hud/state.d.ts +2 -1
  169. package/dist/hud/state.d.ts.map +1 -1
  170. package/dist/hud/state.js +62 -1
  171. package/dist/hud/state.js.map +1 -1
  172. package/dist/hud/tmux.d.ts +10 -3
  173. package/dist/hud/tmux.d.ts.map +1 -1
  174. package/dist/hud/tmux.js +60 -11
  175. package/dist/hud/tmux.js.map +1 -1
  176. package/dist/hud/types.d.ts +22 -0
  177. package/dist/hud/types.d.ts.map +1 -1
  178. package/dist/hud/types.js.map +1 -1
  179. package/dist/notifications/__tests__/http-client-resource.test.d.ts +2 -0
  180. package/dist/notifications/__tests__/http-client-resource.test.d.ts.map +1 -0
  181. package/dist/notifications/__tests__/http-client-resource.test.js +41 -0
  182. package/dist/notifications/__tests__/http-client-resource.test.js.map +1 -0
  183. package/dist/notifications/__tests__/verbosity.test.js +20 -0
  184. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  185. package/dist/notifications/config.d.ts.map +1 -1
  186. package/dist/notifications/config.js +6 -3
  187. package/dist/notifications/config.js.map +1 -1
  188. package/dist/notifications/http-client.d.ts.map +1 -1
  189. package/dist/notifications/http-client.js +78 -27
  190. package/dist/notifications/http-client.js.map +1 -1
  191. package/dist/notifications/types.d.ts +2 -0
  192. package/dist/notifications/types.d.ts.map +1 -1
  193. package/dist/openclaw/__tests__/dispatcher.test.js +49 -1
  194. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  195. package/dist/openclaw/dispatcher.d.ts +7 -4
  196. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  197. package/dist/openclaw/dispatcher.js +32 -69
  198. package/dist/openclaw/dispatcher.js.map +1 -1
  199. package/dist/pipeline/__tests__/orchestrator.test.js +128 -4
  200. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  201. package/dist/pipeline/__tests__/stages.test.js +460 -9
  202. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  203. package/dist/pipeline/index.d.ts +8 -2
  204. package/dist/pipeline/index.d.ts.map +1 -1
  205. package/dist/pipeline/index.js +5 -2
  206. package/dist/pipeline/index.js.map +1 -1
  207. package/dist/pipeline/orchestrator.d.ts +5 -4
  208. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  209. package/dist/pipeline/orchestrator.js +85 -17
  210. package/dist/pipeline/orchestrator.js.map +1 -1
  211. package/dist/pipeline/stages/code-review.d.ts +2 -2
  212. package/dist/pipeline/stages/code-review.d.ts.map +1 -1
  213. package/dist/pipeline/stages/code-review.js +5 -3
  214. package/dist/pipeline/stages/code-review.js.map +1 -1
  215. package/dist/pipeline/stages/deep-interview.d.ts +15 -0
  216. package/dist/pipeline/stages/deep-interview.d.ts.map +1 -0
  217. package/dist/pipeline/stages/deep-interview.js +32 -0
  218. package/dist/pipeline/stages/deep-interview.js.map +1 -0
  219. package/dist/pipeline/stages/ralph-verify.d.ts +5 -5
  220. package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -1
  221. package/dist/pipeline/stages/ralph-verify.js +2 -2
  222. package/dist/pipeline/stages/ralph-verify.js.map +1 -1
  223. package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
  224. package/dist/pipeline/stages/ralplan.js +41 -6
  225. package/dist/pipeline/stages/ralplan.js.map +1 -1
  226. package/dist/pipeline/stages/ultragoal.d.ts +19 -0
  227. package/dist/pipeline/stages/ultragoal.d.ts.map +1 -0
  228. package/dist/pipeline/stages/ultragoal.js +38 -0
  229. package/dist/pipeline/stages/ultragoal.js.map +1 -0
  230. package/dist/pipeline/stages/ultraqa.d.ts +30 -0
  231. package/dist/pipeline/stages/ultraqa.d.ts.map +1 -0
  232. package/dist/pipeline/stages/ultraqa.js +46 -0
  233. package/dist/pipeline/stages/ultraqa.js.map +1 -0
  234. package/dist/pipeline/types.d.ts +8 -6
  235. package/dist/pipeline/types.d.ts.map +1 -1
  236. package/dist/pipeline/types.js +2 -2
  237. package/dist/question/__tests__/ui.test.js +43 -10
  238. package/dist/question/__tests__/ui.test.js.map +1 -1
  239. package/dist/question/ui.d.ts +12 -0
  240. package/dist/question/ui.d.ts.map +1 -1
  241. package/dist/question/ui.js +83 -46
  242. package/dist/question/ui.js.map +1 -1
  243. package/dist/ralplan/__tests__/runtime.test.js +200 -10
  244. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  245. package/dist/ralplan/consensus-gate.d.ts +23 -0
  246. package/dist/ralplan/consensus-gate.d.ts.map +1 -0
  247. package/dist/ralplan/consensus-gate.js +212 -0
  248. package/dist/ralplan/consensus-gate.js.map +1 -0
  249. package/dist/ralplan/runtime.d.ts +25 -0
  250. package/dist/ralplan/runtime.d.ts.map +1 -1
  251. package/dist/ralplan/runtime.js +144 -8
  252. package/dist/ralplan/runtime.js.map +1 -1
  253. package/dist/scripts/__tests__/codex-native-hook.test.js +1358 -79
  254. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  255. package/dist/scripts/__tests__/docs-site-contract.test.d.ts +2 -0
  256. package/dist/scripts/__tests__/docs-site-contract.test.d.ts.map +1 -0
  257. package/dist/scripts/__tests__/docs-site-contract.test.js +42 -0
  258. package/dist/scripts/__tests__/docs-site-contract.test.js.map +1 -0
  259. package/dist/scripts/__tests__/notify-dispatcher.test.js +115 -2
  260. package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
  261. package/dist/scripts/__tests__/run-test-files.test.js +57 -0
  262. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  263. package/dist/scripts/__tests__/smoke-packed-install.test.js +23 -1
  264. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  265. package/dist/scripts/__tests__/verify-native-agents.test.js +18 -3
  266. package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
  267. package/dist/scripts/cleanup-explore-harness.js +1 -0
  268. package/dist/scripts/cleanup-explore-harness.js.map +1 -1
  269. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  270. package/dist/scripts/codex-native-hook.js +372 -44
  271. package/dist/scripts/codex-native-hook.js.map +1 -1
  272. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  273. package/dist/scripts/codex-native-pre-post.js +9 -1
  274. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  275. package/dist/scripts/notify-dispatcher.js +188 -4
  276. package/dist/scripts/notify-dispatcher.js.map +1 -1
  277. package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
  278. package/dist/scripts/notify-hook/process-runner.js +39 -17
  279. package/dist/scripts/notify-hook/process-runner.js.map +1 -1
  280. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  281. package/dist/scripts/notify-hook/team-dispatch.js +9 -5
  282. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  283. package/dist/scripts/notify-hook/team-tmux-guard.d.ts +1 -1
  284. package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
  285. package/dist/scripts/notify-hook/team-tmux-guard.js +7 -1
  286. package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
  287. package/dist/scripts/run-test-files.js +13 -0
  288. package/dist/scripts/run-test-files.js.map +1 -1
  289. package/dist/scripts/smoke-packed-install.d.ts +3 -0
  290. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  291. package/dist/scripts/smoke-packed-install.js +99 -1
  292. package/dist/scripts/smoke-packed-install.js.map +1 -1
  293. package/dist/scripts/sync-plugin-mirror.js +2 -2
  294. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  295. package/dist/scripts/verify-native-agents.js +2 -2
  296. package/dist/scripts/verify-native-agents.js.map +1 -1
  297. package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts +2 -0
  298. package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts.map +1 -0
  299. package/dist/sidecar/__tests__/resource-leak-watch.test.js +38 -0
  300. package/dist/sidecar/__tests__/resource-leak-watch.test.js.map +1 -0
  301. package/dist/sidecar/index.d.ts +1 -1
  302. package/dist/sidecar/index.d.ts.map +1 -1
  303. package/dist/sidecar/index.js +29 -12
  304. package/dist/sidecar/index.js.map +1 -1
  305. package/dist/state/__tests__/operations-ralph-phase.test.js +88 -1
  306. package/dist/state/__tests__/operations-ralph-phase.test.js.map +1 -1
  307. package/dist/state/__tests__/workflow-transition.test.js +6 -0
  308. package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
  309. package/dist/state/operations.d.ts.map +1 -1
  310. package/dist/state/operations.js +11 -0
  311. package/dist/state/operations.js.map +1 -1
  312. package/dist/state/workflow-transition.d.ts +1 -1
  313. package/dist/state/workflow-transition.d.ts.map +1 -1
  314. package/dist/state/workflow-transition.js +7 -0
  315. package/dist/state/workflow-transition.js.map +1 -1
  316. package/dist/subagents/tracker.d.ts.map +1 -1
  317. package/dist/subagents/tracker.js +4 -3
  318. package/dist/subagents/tracker.js.map +1 -1
  319. package/dist/team/__tests__/runtime.test.js +36 -44
  320. package/dist/team/__tests__/runtime.test.js.map +1 -1
  321. package/dist/team/__tests__/tmux-session.test.js +163 -15
  322. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  323. package/dist/team/runtime.d.ts.map +1 -1
  324. package/dist/team/runtime.js +10 -20
  325. package/dist/team/runtime.js.map +1 -1
  326. package/dist/team/tmux-session.d.ts.map +1 -1
  327. package/dist/team/tmux-session.js +51 -21
  328. package/dist/team/tmux-session.js.map +1 -1
  329. package/dist/ultragoal/__tests__/artifacts.test.js +764 -10
  330. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  331. package/dist/ultragoal/__tests__/docs-contract.test.js +57 -1
  332. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  333. package/dist/ultragoal/__tests__/steering-fixtures.d.ts +68 -0
  334. package/dist/ultragoal/__tests__/steering-fixtures.d.ts.map +1 -0
  335. package/dist/ultragoal/__tests__/steering-fixtures.js +259 -0
  336. package/dist/ultragoal/__tests__/steering-fixtures.js.map +1 -0
  337. package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts +2 -0
  338. package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts.map +1 -0
  339. package/dist/ultragoal/__tests__/steering-fixtures.test.js +65 -0
  340. package/dist/ultragoal/__tests__/steering-fixtures.test.js.map +1 -0
  341. package/dist/ultragoal/artifacts.d.ts +97 -2
  342. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  343. package/dist/ultragoal/artifacts.js +837 -256
  344. package/dist/ultragoal/artifacts.js.map +1 -1
  345. package/dist/utils/__tests__/sleep-resource.test.d.ts +2 -0
  346. package/dist/utils/__tests__/sleep-resource.test.d.ts.map +1 -0
  347. package/dist/utils/__tests__/sleep-resource.test.js +39 -0
  348. package/dist/utils/__tests__/sleep-resource.test.js.map +1 -0
  349. package/dist/utils/sleep.d.ts.map +1 -1
  350. package/dist/utils/sleep.js +17 -6
  351. package/dist/utils/sleep.js.map +1 -1
  352. package/package.json +2 -1
  353. package/plugins/oh-my-codex/.codex-plugin/plugin.json +4 -3
  354. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +56 -0
  355. package/plugins/oh-my-codex/hooks/hooks.json +77 -0
  356. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +92 -50
  357. package/plugins/oh-my-codex/skills/autoresearch/SKILL.md +4 -0
  358. package/plugins/oh-my-codex/skills/autoresearch-goal/SKILL.md +1 -1
  359. package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +1 -1
  360. package/plugins/oh-my-codex/skills/cancel/SKILL.md +2 -2
  361. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +8 -8
  362. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
  363. package/plugins/oh-my-codex/skills/pipeline/SKILL.md +23 -12
  364. package/plugins/oh-my-codex/skills/plan/SKILL.md +8 -8
  365. package/plugins/oh-my-codex/skills/prometheus-strict/README.md +35 -0
  366. package/plugins/oh-my-codex/skills/prometheus-strict/SKILL.md +219 -0
  367. package/plugins/oh-my-codex/skills/ralph/SKILL.md +7 -0
  368. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +22 -7
  369. package/plugins/oh-my-codex/skills/team/SKILL.md +1 -1
  370. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +38 -4
  371. package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +1 -1
  372. package/prompts/planner.md +1 -1
  373. package/prompts/prometheus-strict-metis.md +274 -0
  374. package/prompts/prometheus-strict-momus.md +82 -0
  375. package/prompts/prometheus-strict-oracle.md +107 -0
  376. package/prompts/researcher.md +22 -3
  377. package/skills/autopilot/SKILL.md +92 -50
  378. package/skills/autoresearch/SKILL.md +4 -0
  379. package/skills/autoresearch-goal/SKILL.md +1 -1
  380. package/skills/best-practice-research/SKILL.md +1 -1
  381. package/skills/cancel/SKILL.md +2 -2
  382. package/skills/deep-interview/SKILL.md +8 -8
  383. package/skills/omx-setup/SKILL.md +1 -1
  384. package/skills/pipeline/SKILL.md +23 -12
  385. package/skills/plan/SKILL.md +8 -8
  386. package/skills/prometheus-strict/README.md +35 -0
  387. package/skills/prometheus-strict/SKILL.md +219 -0
  388. package/skills/ralph/SKILL.md +7 -0
  389. package/skills/ralplan/SKILL.md +22 -7
  390. package/skills/team/SKILL.md +1 -1
  391. package/skills/ultragoal/SKILL.md +38 -4
  392. package/skills/ultrawork/SKILL.md +1 -1
  393. package/src/scripts/__tests__/codex-native-hook.test.ts +1757 -210
  394. package/src/scripts/__tests__/docs-site-contract.test.ts +47 -0
  395. package/src/scripts/__tests__/notify-dispatcher.test.ts +132 -3
  396. package/src/scripts/__tests__/run-test-files.test.ts +67 -0
  397. package/src/scripts/__tests__/smoke-packed-install.test.ts +31 -0
  398. package/src/scripts/__tests__/verify-native-agents.test.ts +23 -3
  399. package/src/scripts/cleanup-explore-harness.ts +1 -0
  400. package/src/scripts/codex-native-hook.ts +393 -40
  401. package/src/scripts/codex-native-pre-post.ts +16 -1
  402. package/src/scripts/notify-dispatcher.ts +202 -4
  403. package/src/scripts/notify-hook/process-runner.ts +40 -16
  404. package/src/scripts/notify-hook/team-dispatch.ts +9 -5
  405. package/src/scripts/notify-hook/team-tmux-guard.ts +7 -0
  406. package/src/scripts/run-test-files.ts +13 -0
  407. package/src/scripts/smoke-packed-install.ts +105 -0
  408. package/src/scripts/sync-plugin-mirror.ts +3 -3
  409. package/src/scripts/verify-native-agents.ts +2 -2
  410. package/templates/catalog-manifest.json +22 -0
@@ -1,10 +1,11 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
3
+ import { dirname, join } from 'node:path';
4
+ import { getBaseStateDir } from '../state/paths.js';
4
5
  export const SUBAGENT_TRACKING_SCHEMA_VERSION = 1;
5
6
  export const DEFAULT_SUBAGENT_ACTIVE_WINDOW_MS = 120_000;
6
7
  export function subagentTrackingPath(cwd) {
7
- return join(cwd, '.omx', 'state', 'subagent-tracking.json');
8
+ return join(getBaseStateDir(cwd), 'subagent-tracking.json');
8
9
  }
9
10
  export function createSubagentTrackingState() {
10
11
  return {
@@ -87,7 +88,7 @@ export async function readSubagentTrackingState(cwd) {
87
88
  export async function writeSubagentTrackingState(cwd, state) {
88
89
  const normalized = normalizeSubagentTrackingState(state);
89
90
  const path = subagentTrackingPath(cwd);
90
- await mkdir(join(cwd, '.omx', 'state'), { recursive: true });
91
+ await mkdir(dirname(path), { recursive: true });
91
92
  await writeFile(path, `${JSON.stringify(normalized, null, 2)}\n`);
92
93
  return path;
93
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"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"}
@@ -884,7 +884,7 @@ esac
884
884
  await rm(cwd, { recursive: true, force: true });
885
885
  }
886
886
  });
887
- it('startTeam records recoverable issue when tmux fallback never produces worker startup evidence', { skip: skipSlowLifecycleUnderCoverage }, async () => {
887
+ it('startTeam rejects tmux fallback when worker startup evidence stays missing', { skip: skipSlowLifecycleUnderCoverage }, async () => {
888
888
  const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-startup-no-evidence-'));
889
889
  const prevTmux = process.env.TMUX;
890
890
  const prevTmuxPane = process.env.TMUX_PANE;
@@ -985,17 +985,14 @@ esac
985
985
  }
986
986
  })();
987
987
  }, 20);
988
- const runtime = await withoutTeamWorkerEnv(() => startTeam('team-startup-no-evidence', 'interactive startup records missing worker evidence without aborting live panes', 'executor', 1, [{ subject: 's', description: 'd', owner: 'worker-1' }], cwd));
988
+ await assert.rejects(withoutTeamWorkerEnv(() => startTeam('team-startup-no-evidence', 'interactive startup rejects missing worker evidence without false task evidence', 'executor', 1, [{ subject: 's', description: 'd', owner: 'worker-1' }], cwd)), /worker_notify_failed:worker-1:codex_startup_no_evidence_after_fallback/);
989
989
  if (receiptFailer) {
990
990
  clearInterval(receiptFailer);
991
991
  receiptFailer = null;
992
992
  }
993
- assert.ok(await readTeamConfig(runtime.teamName, cwd));
994
- const workerStatus = await readWorkerStatus(runtime.teamName, 'worker-1', cwd);
995
- assert.ok(['unknown', 'idle'].includes(workerStatus.state));
996
993
  const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
997
994
  assert.match(tmuxLog, /send-keys -t %2 -l --/);
998
- await shutdownTeam(runtime.teamName, cwd, { force: true }).catch(() => { });
995
+ await shutdownTeam(expectedTeamName, cwd, { force: true }).catch(() => { });
999
996
  });
1000
997
  }
1001
998
  finally {
@@ -1659,7 +1656,7 @@ esac
1659
1656
  assert.equal(applyIndex < saveIndex, true);
1660
1657
  assert.equal(saveIndex < readyIndex, true);
1661
1658
  });
1662
- it('startTeam sends startup direct trigger before slow readiness wait when pane is safe', async () => {
1659
+ it('startTeam rejects startup direct trigger success when Codex startup evidence is missing', async () => {
1663
1660
  const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-startup-direct-fast-'));
1664
1661
  const previousTmux = process.env.TMUX;
1665
1662
  const previousTmuxPane = process.env.TMUX_PANE;
@@ -1668,13 +1665,14 @@ esac
1668
1665
  const previousReadyTimeout = process.env.OMX_TEAM_READY_TIMEOUT_MS;
1669
1666
  const previousStartupEvidenceTimeout = process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS;
1670
1667
  const previousStartupDispatchRetries = process.env.OMX_TEAM_STARTUP_DISPATCH_RETRIES;
1671
- let runtimeTeamName = null;
1668
+ const teamName = `tsd-${process.pid}-${Date.now().toString(36)}`;
1672
1669
  try {
1673
1670
  await withMockTmuxFixture({
1674
1671
  dirPrefix: 'omx-runtime-startup-direct-fast-bin-',
1675
1672
  tmuxScript: () => `#!/bin/sh
1676
1673
  set -eu
1677
1674
  order_file="${cwd}/startup-order.log"
1675
+ count_file="${cwd}/startup-capture-count"
1678
1676
  case "$1" in
1679
1677
  -V)
1680
1678
  echo "tmux 3.4"
@@ -1699,7 +1697,15 @@ case "$1" in
1699
1697
  ;;
1700
1698
  capture-pane)
1701
1699
  printf '%s\n' capture >> "$order_file"
1702
- printf 'OpenAI Codex\nmodel: test\ndirectory: /tmp/demo\n'
1700
+ count=0
1701
+ if [ -f "$count_file" ]; then count=$(cat "$count_file"); fi
1702
+ count=$((count + 1))
1703
+ printf '%s' "$count" > "$count_file"
1704
+ if [ "$count" -eq 1 ]; then
1705
+ printf 'OpenAI Codex\nmodel: test\ndirectory: /tmp/demo\n'
1706
+ else
1707
+ printf 'worker process is still starting; no agent prompt yet\n'
1708
+ fi
1703
1709
  exit 0
1704
1710
  ;;
1705
1711
  send-keys)
@@ -1725,26 +1731,15 @@ esac
1725
1731
  process.env.OMX_TEAM_WORKER_LAUNCH_MODE = 'interactive';
1726
1732
  process.env.OMX_TEAM_WORKER_CLI = 'codex';
1727
1733
  process.env.OMX_TEAM_READY_TIMEOUT_MS = '5000';
1728
- process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS = '50';
1734
+ process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS = '500';
1729
1735
  process.env.OMX_TEAM_STARTUP_DISPATCH_RETRIES = '1';
1730
- const runtime = await withoutTeamWorkerEnv(() => startTeam('team-startup-direct-fast', 'startup direct trigger falls back to evidence-gated dispatch', 'executor', 1, [{ subject: 'w1', description: 'worker one', owner: 'worker-1' }], cwd));
1731
- runtimeTeamName = runtime.teamName;
1736
+ await assert.rejects(withoutTeamWorkerEnv(() => startTeam(teamName, 'startup direct trigger falls back to evidence-gated dispatch', 'executor', 1, [{ subject: 'w1', description: 'worker one', owner: 'worker-1' }], cwd)), /worker_notify_failed:worker-1:codex_startup_no_evidence_after_fallback/);
1732
1737
  const order = (await readFile(join(cwd, 'startup-order.log'), 'utf-8')).trim().split('\n');
1733
1738
  assert.ok(order.includes('send-keys'), `expected direct send-keys, got ${order.join(',')}`);
1734
- const timing = JSON.parse(await readFile(join(cwd, '.omx', 'state', 'team', runtime.teamName, 'startup-timing.json'), 'utf-8'));
1735
- assert.ok(timing.events.some((event) => event.phase === 'split_returned'));
1736
- assert.ok(timing.events.some((event) => event.phase === 'identity_inbox_written'));
1737
- assert.ok(timing.events.some((event) => event.phase === 'direct_fallback' && /startup_direct_trigger_sent/.test(event.reason ?? '')));
1738
- assert.ok(timing.events.some((event) => event.phase === 'startup_evidence' && event.reason === 'none' && event.ok === false));
1739
- assert.equal(timing.events.some((event) => event.phase === 'ready_wait_start'), false);
1740
- const workerStatus = await readWorkerStatus(runtime.teamName, 'worker-1', cwd);
1741
- assert.equal(workerStatus?.state, 'unknown');
1742
- assert.match(workerStatus?.reason ?? '', /startup_direct_no_evidence/);
1739
+ assert.ok(order.filter((entry) => entry === 'send-keys').length >= 2, `expected evidence-gated dispatch after startup-direct no-evidence, got ${order.join(',')}`);
1743
1740
  });
1744
1741
  }
1745
1742
  finally {
1746
- if (runtimeTeamName)
1747
- await shutdownTeam(runtimeTeamName, cwd, { force: true }).catch(() => { });
1748
1743
  if (typeof previousTmux === 'string')
1749
1744
  process.env.TMUX = previousTmux;
1750
1745
  else
@@ -1858,12 +1853,16 @@ esac
1858
1853
  assert.equal(workerStatus.state, 'unknown');
1859
1854
  assert.equal(workerStatus.reason, undefined);
1860
1855
  const requests = await listDispatchRequests(runtime.teamName, cwd, { kind: 'inbox' });
1861
- assert.equal(requests.at(-1)?.status, 'notified');
1856
+ assert.ok(requests.some((request) => request.status === 'notified')
1857
+ || requests.some((request) => /fallback_confirmed/.test(request.last_reason ?? '')), `expected hook notification or ready-prompt fallback confirmation, got ${JSON.stringify(requests)}`);
1862
1858
  const captureCount = Number.parseInt(await readFile(join(cwd, 'capture-count'), 'utf-8'), 10);
1863
1859
  assert.ok(captureCount >= 2, `expected ready wait capture after bootstrapping, got ${captureCount}`);
1864
- const timing = JSON.parse(await readFile(join(cwd, '.omx', 'state', 'team', runtime.teamName, 'startup-timing.json'), 'utf-8'));
1865
- assert.ok(timing.events.some((event) => event.phase === 'ready_wait_start'));
1866
- assert.ok(timing.events.some((event) => event.phase === 'ready_wait_end' && event.ok === true));
1860
+ const timingPath = join(cwd, '.omx', 'state', 'team', runtime.teamName, 'startup-timing.json');
1861
+ if (existsSync(timingPath)) {
1862
+ const timing = JSON.parse(await readFile(timingPath, 'utf-8'));
1863
+ assert.ok(timing.events.some((event) => event.phase === 'ready_wait_start'));
1864
+ assert.ok(timing.events.some((event) => event.phase === 'ready_wait_end' && event.ok === true));
1865
+ }
1867
1866
  });
1868
1867
  }
1869
1868
  finally {
@@ -2158,7 +2157,7 @@ esac
2158
2157
  await rm(cwd, { recursive: true, force: true });
2159
2158
  }
2160
2159
  });
2161
- it('startTeam records recoverable startup issues per worker instead of failing launch early when panes stay alive', { skip: skipSlowLifecycleUnderCoverage }, async () => {
2160
+ it('startTeam rejects no-evidence startup issues instead of treating live panes as recoverable', { skip: skipSlowLifecycleUnderCoverage }, async () => {
2162
2161
  const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-no-startup-evidence-'));
2163
2162
  const previousTmux = process.env.TMUX;
2164
2163
  const previousTmuxPane = process.env.TMUX_PANE;
@@ -2171,6 +2170,7 @@ esac
2171
2170
  let receiptFailer = null;
2172
2171
  let runtime = null;
2173
2172
  const teamName = 'team-no-startup-evidence';
2173
+ let observedNoEvidenceRequest = false;
2174
2174
  try {
2175
2175
  await withMockTmuxFixture({
2176
2176
  dirPrefix: 'omx-runtime-no-startup-evidence-bin-',
@@ -2255,29 +2255,21 @@ process.on('SIGTERM', () => process.exit(0));
2255
2255
  process.env.OMX_TEAM_STARTUP_DISPATCH_RETRY_DELAY_MS = '50';
2256
2256
  receiptFailer = setInterval(() => {
2257
2257
  void (async () => {
2258
- const requests = await listDispatchRequests(await resolveRuntimeTeamName(cwd, teamName), cwd, { kind: 'inbox' }).catch(() => []);
2258
+ const runtimeTeamName = await resolveRuntimeTeamName(cwd, teamName);
2259
+ const requests = await listDispatchRequests(runtimeTeamName, cwd, { kind: 'inbox' }).catch(() => []);
2259
2260
  for (const request of requests) {
2261
+ observedNoEvidenceRequest ||= /startup_no_evidence|fallback_attempted_but_unconfirmed/.test(request.last_reason ?? '');
2260
2262
  if (request.status !== 'pending')
2261
2263
  continue;
2262
2264
  await transitionDispatchRequest(teamName, request.request_id, 'pending', 'failed', { last_reason: 'test_failed_receipt' }, cwd).catch(() => { });
2263
2265
  }
2264
2266
  })();
2265
2267
  }, 20);
2266
- runtime = await withoutTeamWorkerEnv(() => startTeam(teamName, 'interactive startup should keep evaluating per-worker startup issues while panes stay alive', 'executor', 2, [
2268
+ await assert.rejects(withoutTeamWorkerEnv(() => startTeam(teamName, 'interactive startup should reject no-evidence startup even while panes stay alive', 'executor', 2, [
2267
2269
  { subject: 'worker-1 task', description: 'd', owner: 'worker-1' },
2268
2270
  { subject: 'worker-2 task', description: 'd', owner: 'worker-2' },
2269
- ], cwd));
2270
- const runtimeTeamName = runtime.teamName;
2271
- const worker1Status = await readWorkerStatus(runtimeTeamName, 'worker-1', cwd);
2272
- const worker2Status = await readWorkerStatus(runtimeTeamName, 'worker-2', cwd);
2273
- assert.equal(worker1Status.state, 'unknown');
2274
- assert.equal(worker2Status.state, 'unknown');
2275
- assert.match(worker1Status.reason ?? '', /startup_no_evidence|fallback_attempted_but_unconfirmed/);
2276
- assert.match(worker2Status.reason ?? '', /startup_no_evidence|fallback_attempted_but_unconfirmed/);
2277
- const task1 = await readTask(runtimeTeamName, '1', cwd);
2278
- const task2 = await readTask(runtimeTeamName, '2', cwd);
2279
- assert.equal(task1?.status, 'pending');
2280
- assert.equal(task2?.status, 'pending');
2271
+ ], cwd)), /worker_notify_failed:worker-\d+:(codex_startup_no_evidence_after_fallback|fallback_attempted_but_unconfirmed)/);
2272
+ assert.equal(observedNoEvidenceRequest, true);
2281
2273
  });
2282
2274
  }
2283
2275
  finally {
@@ -3375,7 +3367,7 @@ exit 0
3375
3367
  const standaloneHudSplitRe = new RegExp(`split-window -v -l ${HUD_TMUX_TEAM_HEIGHT_LINES} -t %1 -d -P -F #\\{pane_id\\}`, 'g');
3376
3368
  assert.equal(tmuxLog.match(teamHudSplitRe)?.length ?? 0, 2);
3377
3369
  assert.equal(tmuxLog.match(standaloneHudSplitRe)?.length ?? 0, 1);
3378
- assert.equal(tmuxLog.match(/set-hook -w -t leader:0 window-resized\[\d+\]/g)?.length ?? 0, 2);
3370
+ assert.equal(tmuxLog.match(/set-hook -t leader:0 client-resized\[\d+\]/g)?.length ?? 0, 2);
3379
3371
  assert.equal(tmuxLog.match(/set-hook -t leader:0 client-attached\[\d+\]/g)?.length ?? 0, 2);
3380
3372
  assert.equal(tmuxLog.match(/run-shell -b sleep \d+; tmux resize-pane -t %3 -y \d+ >/g)?.length ?? 0, 3);
3381
3373
  assert.equal(tmuxLog.match(/run-shell tmux resize-pane -t %3 -y \d+ >/g)?.length ?? 0, 3);
@@ -4718,7 +4710,7 @@ esac
4718
4710
  const teamRoot = teamStateTestPath(cwd, 'team', 'team-shutdown-gate-failed');
4719
4711
  assert.equal(existsSync(teamRoot), false);
4720
4712
  const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
4721
- assert.match(tmuxLog, /set-hook -u -w -t omx-team-team-shutdown-gate-failed:0 window-resized\[\d+\]/);
4713
+ assert.match(tmuxLog, /set-hook -u -t omx-team-team-shutdown-gate-failed:0 client-resized\[\d+\]/);
4722
4714
  assert.match(tmuxLog, /kill-session -t omx-team-team-shutdown-gate-failed/);
4723
4715
  });
4724
4716
  }