oh-my-codex 0.15.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/Cargo.lock +10 -7
  2. package/Cargo.toml +1 -1
  3. package/README.md +3 -0
  4. package/crates/omx-explore/Cargo.toml +3 -0
  5. package/crates/omx-explore/src/main.rs +517 -16
  6. package/dist/agents/__tests__/native-config.test.js +33 -0
  7. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  8. package/dist/autoresearch/goal.d.ts +90 -0
  9. package/dist/autoresearch/goal.d.ts.map +1 -0
  10. package/dist/autoresearch/goal.js +237 -0
  11. package/dist/autoresearch/goal.js.map +1 -0
  12. package/dist/autoresearch/skill-validation.d.ts +1 -0
  13. package/dist/autoresearch/skill-validation.d.ts.map +1 -1
  14. package/dist/autoresearch/skill-validation.js +10 -3
  15. package/dist/autoresearch/skill-validation.js.map +1 -1
  16. package/dist/catalog/__tests__/generator.test.js +9 -4
  17. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  18. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +29 -2
  19. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +1 -1
  20. package/dist/catalog/__tests__/schema.test.js +14 -3
  21. package/dist/catalog/__tests__/schema.test.js.map +1 -1
  22. package/dist/catalog/schema.js +1 -1
  23. package/dist/catalog/schema.js.map +1 -1
  24. package/dist/cli/__tests__/autoresearch-goal.test.d.ts +2 -0
  25. package/dist/cli/__tests__/autoresearch-goal.test.d.ts.map +1 -0
  26. package/dist/cli/__tests__/autoresearch-goal.test.js +194 -0
  27. package/dist/cli/__tests__/autoresearch-goal.test.js.map +1 -0
  28. package/dist/cli/__tests__/cleanup.test.js +82 -1
  29. package/dist/cli/__tests__/cleanup.test.js.map +1 -1
  30. package/dist/cli/__tests__/codex-plugin-layout.test.js +7 -4
  31. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  32. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +2 -0
  33. package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +1 -0
  34. package/dist/cli/__tests__/doctor-context-window-warning.test.js +122 -0
  35. package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +1 -0
  36. package/dist/cli/__tests__/doctor-warning-copy.test.js +25 -2
  37. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  38. package/dist/cli/__tests__/exec.test.js +1 -0
  39. package/dist/cli/__tests__/exec.test.js.map +1 -1
  40. package/dist/cli/__tests__/explore.test.js +48 -18
  41. package/dist/cli/__tests__/explore.test.js.map +1 -1
  42. package/dist/cli/__tests__/index.test.js +222 -10
  43. package/dist/cli/__tests__/index.test.js.map +1 -1
  44. package/dist/cli/__tests__/launch-fallback.test.js +58 -0
  45. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  46. package/dist/cli/__tests__/mcp-serve.test.js +27 -1
  47. package/dist/cli/__tests__/mcp-serve.test.js.map +1 -1
  48. package/dist/cli/__tests__/native-assets.test.js +26 -1
  49. package/dist/cli/__tests__/native-assets.test.js.map +1 -1
  50. package/dist/cli/__tests__/package-bin-contract.test.js +2 -2
  51. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  52. package/dist/cli/__tests__/performance-goal.test.d.ts +2 -0
  53. package/dist/cli/__tests__/performance-goal.test.d.ts.map +1 -0
  54. package/dist/cli/__tests__/performance-goal.test.js +144 -0
  55. package/dist/cli/__tests__/performance-goal.test.js.map +1 -0
  56. package/dist/cli/__tests__/question.test.js +8 -0
  57. package/dist/cli/__tests__/question.test.js.map +1 -1
  58. package/dist/cli/__tests__/ralph-goal-mode-contract.test.d.ts +2 -0
  59. package/dist/cli/__tests__/ralph-goal-mode-contract.test.d.ts.map +1 -0
  60. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +31 -0
  61. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -0
  62. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +5 -4
  63. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -1
  64. package/dist/cli/__tests__/ralph-prd-smoke.test.js +7 -0
  65. package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +1 -1
  66. package/dist/cli/__tests__/ralph.test.js +59 -1
  67. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  68. package/dist/cli/__tests__/setup-install-mode.test.js +57 -21
  69. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  70. package/dist/cli/__tests__/setup-refresh.test.js +27 -8
  71. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  72. package/dist/cli/__tests__/setup-scope.test.js +20 -10
  73. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  74. package/dist/cli/__tests__/setup-skill-validation.test.js +11 -11
  75. package/dist/cli/__tests__/setup-skill-validation.test.js.map +1 -1
  76. package/dist/cli/__tests__/setup-skills-overwrite.test.js +12 -12
  77. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
  78. package/dist/cli/__tests__/team.test.js +242 -10
  79. package/dist/cli/__tests__/team.test.js.map +1 -1
  80. package/dist/cli/__tests__/ultragoal.test.d.ts +2 -0
  81. package/dist/cli/__tests__/ultragoal.test.d.ts.map +1 -0
  82. package/dist/cli/__tests__/ultragoal.test.js +106 -0
  83. package/dist/cli/__tests__/ultragoal.test.js.map +1 -0
  84. package/dist/cli/__tests__/uninstall.test.js +11 -0
  85. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  86. package/dist/cli/autoresearch-goal.d.ts +3 -0
  87. package/dist/cli/autoresearch-goal.d.ts.map +1 -0
  88. package/dist/cli/autoresearch-goal.js +175 -0
  89. package/dist/cli/autoresearch-goal.js.map +1 -0
  90. package/dist/cli/cleanup.d.ts +3 -1
  91. package/dist/cli/cleanup.d.ts.map +1 -1
  92. package/dist/cli/cleanup.js +42 -2
  93. package/dist/cli/cleanup.js.map +1 -1
  94. package/dist/cli/doctor.d.ts.map +1 -1
  95. package/dist/cli/doctor.js +95 -3
  96. package/dist/cli/doctor.js.map +1 -1
  97. package/dist/cli/explore.d.ts.map +1 -1
  98. package/dist/cli/explore.js +10 -2
  99. package/dist/cli/explore.js.map +1 -1
  100. package/dist/cli/index.d.ts +21 -2
  101. package/dist/cli/index.d.ts.map +1 -1
  102. package/dist/cli/index.js +268 -30
  103. package/dist/cli/index.js.map +1 -1
  104. package/dist/cli/mcp-serve.d.ts +1 -0
  105. package/dist/cli/mcp-serve.d.ts.map +1 -1
  106. package/dist/cli/mcp-serve.js +8 -0
  107. package/dist/cli/mcp-serve.js.map +1 -1
  108. package/dist/cli/native-assets.js +1 -1
  109. package/dist/cli/native-assets.js.map +1 -1
  110. package/dist/cli/performance-goal.d.ts +3 -0
  111. package/dist/cli/performance-goal.d.ts.map +1 -0
  112. package/dist/cli/performance-goal.js +186 -0
  113. package/dist/cli/performance-goal.js.map +1 -0
  114. package/dist/cli/ralph.d.ts +2 -0
  115. package/dist/cli/ralph.d.ts.map +1 -1
  116. package/dist/cli/ralph.js +25 -1
  117. package/dist/cli/ralph.js.map +1 -1
  118. package/dist/cli/setup.d.ts.map +1 -1
  119. package/dist/cli/setup.js +13 -6
  120. package/dist/cli/setup.js.map +1 -1
  121. package/dist/cli/team.d.ts +6 -0
  122. package/dist/cli/team.d.ts.map +1 -1
  123. package/dist/cli/team.js +113 -33
  124. package/dist/cli/team.js.map +1 -1
  125. package/dist/cli/tmux-hook.d.ts.map +1 -1
  126. package/dist/cli/tmux-hook.js +2 -1
  127. package/dist/cli/tmux-hook.js.map +1 -1
  128. package/dist/cli/ultragoal.d.ts +3 -0
  129. package/dist/cli/ultragoal.d.ts.map +1 -0
  130. package/dist/cli/ultragoal.js +191 -0
  131. package/dist/cli/ultragoal.js.map +1 -0
  132. package/dist/cli/uninstall.d.ts.map +1 -1
  133. package/dist/cli/uninstall.js +4 -2
  134. package/dist/cli/uninstall.js.map +1 -1
  135. package/dist/config/__tests__/generator-idempotent.test.js +39 -6
  136. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  137. package/dist/config/__tests__/generator-notify.test.js +5 -0
  138. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  139. package/dist/config/commit-lore-guard.d.ts +3 -0
  140. package/dist/config/commit-lore-guard.d.ts.map +1 -0
  141. package/dist/config/commit-lore-guard.js +9 -0
  142. package/dist/config/commit-lore-guard.js.map +1 -0
  143. package/dist/config/generator.d.ts +14 -4
  144. package/dist/config/generator.d.ts.map +1 -1
  145. package/dist/config/generator.js +166 -66
  146. package/dist/config/generator.js.map +1 -1
  147. package/dist/config/omx-first-party-mcp.d.ts +1 -0
  148. package/dist/config/omx-first-party-mcp.d.ts.map +1 -1
  149. package/dist/config/omx-first-party-mcp.js +4 -1
  150. package/dist/config/omx-first-party-mcp.js.map +1 -1
  151. package/dist/goal-workflows/__tests__/artifacts.test.d.ts +2 -0
  152. package/dist/goal-workflows/__tests__/artifacts.test.d.ts.map +1 -0
  153. package/dist/goal-workflows/__tests__/artifacts.test.js +96 -0
  154. package/dist/goal-workflows/__tests__/artifacts.test.js.map +1 -0
  155. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.d.ts +2 -0
  156. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.d.ts.map +1 -0
  157. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +54 -0
  158. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -0
  159. package/dist/goal-workflows/artifacts.d.ts +62 -0
  160. package/dist/goal-workflows/artifacts.d.ts.map +1 -0
  161. package/dist/goal-workflows/artifacts.js +132 -0
  162. package/dist/goal-workflows/artifacts.js.map +1 -0
  163. package/dist/goal-workflows/codex-goal-snapshot.d.ts +28 -0
  164. package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -0
  165. package/dist/goal-workflows/codex-goal-snapshot.js +110 -0
  166. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -0
  167. package/dist/goal-workflows/handoff.d.ts +10 -0
  168. package/dist/goal-workflows/handoff.d.ts.map +1 -0
  169. package/dist/goal-workflows/handoff.js +31 -0
  170. package/dist/goal-workflows/handoff.js.map +1 -0
  171. package/dist/goal-workflows/validation.d.ts +13 -0
  172. package/dist/goal-workflows/validation.d.ts.map +1 -0
  173. package/dist/goal-workflows/validation.js +36 -0
  174. package/dist/goal-workflows/validation.js.map +1 -0
  175. package/dist/hooks/__tests__/agents-overlay.test.js +59 -0
  176. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  177. package/dist/hooks/__tests__/anti-slop-workflow.test.js +109 -18
  178. package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
  179. package/dist/hooks/__tests__/keyword-detector.test.js +45 -32
  180. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  181. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +3 -3
  182. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  183. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +2 -1
  184. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  185. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +17 -24
  186. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  187. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +3 -3
  188. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
  189. package/dist/hooks/__tests__/task-size-detector.test.js +1 -1
  190. package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -1
  191. package/dist/hooks/__tests__/visual-ralph-skill.test.js +3 -3
  192. package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +1 -1
  193. package/dist/hooks/__tests__/visual-verdict-loop.test.js +7 -11
  194. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -1
  195. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  196. package/dist/hooks/agents-overlay.js +23 -2
  197. package/dist/hooks/agents-overlay.js.map +1 -1
  198. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  199. package/dist/hooks/keyword-detector.js +12 -13
  200. package/dist/hooks/keyword-detector.js.map +1 -1
  201. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  202. package/dist/hooks/keyword-registry.js +2 -10
  203. package/dist/hooks/keyword-registry.js.map +1 -1
  204. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  205. package/dist/hooks/prompt-guidance-contract.js +0 -4
  206. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  207. package/dist/hooks/session.js +2 -2
  208. package/dist/hooks/session.js.map +1 -1
  209. package/dist/hooks/task-size-detector.d.ts.map +1 -1
  210. package/dist/hooks/task-size-detector.js +1 -0
  211. package/dist/hooks/task-size-detector.js.map +1 -1
  212. package/dist/hud/__tests__/index.test.js +30 -14
  213. package/dist/hud/__tests__/index.test.js.map +1 -1
  214. package/dist/hud/__tests__/reconcile.test.js +29 -7
  215. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  216. package/dist/hud/reconcile.d.ts +2 -1
  217. package/dist/hud/reconcile.d.ts.map +1 -1
  218. package/dist/hud/reconcile.js +12 -0
  219. package/dist/hud/reconcile.js.map +1 -1
  220. package/dist/mcp/__tests__/bootstrap.test.js +15 -2
  221. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  222. package/dist/mcp/__tests__/state-paths.test.js +54 -0
  223. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  224. package/dist/mcp/__tests__/state-server.test.js +36 -0
  225. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  226. package/dist/mcp/bootstrap.d.ts +1 -1
  227. package/dist/mcp/bootstrap.d.ts.map +1 -1
  228. package/dist/mcp/bootstrap.js +9 -7
  229. package/dist/mcp/bootstrap.js.map +1 -1
  230. package/dist/mcp/state-paths.d.ts +17 -0
  231. package/dist/mcp/state-paths.d.ts.map +1 -1
  232. package/dist/mcp/state-paths.js +36 -2
  233. package/dist/mcp/state-paths.js.map +1 -1
  234. package/dist/modes/__tests__/base-session-scope.test.js +26 -0
  235. package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
  236. package/dist/modes/base.d.ts +1 -0
  237. package/dist/modes/base.d.ts.map +1 -1
  238. package/dist/modes/base.js +35 -5
  239. package/dist/modes/base.js.map +1 -1
  240. package/dist/notifications/__tests__/http-client.test.d.ts +2 -0
  241. package/dist/notifications/__tests__/http-client.test.d.ts.map +1 -0
  242. package/dist/notifications/__tests__/http-client.test.js +90 -0
  243. package/dist/notifications/__tests__/http-client.test.js.map +1 -0
  244. package/dist/notifications/__tests__/notifier.test.js +22 -60
  245. package/dist/notifications/__tests__/notifier.test.js.map +1 -1
  246. package/dist/notifications/dispatcher.d.ts.map +1 -1
  247. package/dist/notifications/dispatcher.js +35 -60
  248. package/dist/notifications/dispatcher.js.map +1 -1
  249. package/dist/notifications/http-client.d.ts +22 -0
  250. package/dist/notifications/http-client.d.ts.map +1 -0
  251. package/dist/notifications/http-client.js +298 -0
  252. package/dist/notifications/http-client.js.map +1 -0
  253. package/dist/notifications/notifier.d.ts +3 -2
  254. package/dist/notifications/notifier.d.ts.map +1 -1
  255. package/dist/notifications/notifier.js +17 -22
  256. package/dist/notifications/notifier.js.map +1 -1
  257. package/dist/openclaw/__tests__/dispatcher.test.js +63 -2
  258. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  259. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  260. package/dist/openclaw/dispatcher.js +3 -2
  261. package/dist/openclaw/dispatcher.js.map +1 -1
  262. package/dist/performance-goal/artifacts.d.ts +76 -0
  263. package/dist/performance-goal/artifacts.d.ts.map +1 -0
  264. package/dist/performance-goal/artifacts.js +221 -0
  265. package/dist/performance-goal/artifacts.js.map +1 -0
  266. package/dist/pipeline/__tests__/stages.test.js +423 -14
  267. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  268. package/dist/pipeline/stages/team-exec.d.ts +8 -4
  269. package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
  270. package/dist/pipeline/stages/team-exec.js +181 -13
  271. package/dist/pipeline/stages/team-exec.js.map +1 -1
  272. package/dist/planning/__tests__/artifacts.test.js +261 -1
  273. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  274. package/dist/planning/artifact-names.d.ts +13 -0
  275. package/dist/planning/artifact-names.d.ts.map +1 -0
  276. package/dist/planning/artifact-names.js +108 -0
  277. package/dist/planning/artifact-names.js.map +1 -0
  278. package/dist/planning/artifacts.d.ts +23 -1
  279. package/dist/planning/artifacts.d.ts.map +1 -1
  280. package/dist/planning/artifacts.js +171 -59
  281. package/dist/planning/artifacts.js.map +1 -1
  282. package/dist/ralph/__tests__/persistence.test.js +21 -1
  283. package/dist/ralph/__tests__/persistence.test.js.map +1 -1
  284. package/dist/ralph/persistence.d.ts.map +1 -1
  285. package/dist/ralph/persistence.js +6 -4
  286. package/dist/ralph/persistence.js.map +1 -1
  287. package/dist/ralplan/__tests__/runtime.test.js +2 -0
  288. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  289. package/dist/ralplan/runtime.d.ts.map +1 -1
  290. package/dist/ralplan/runtime.js +6 -0
  291. package/dist/ralplan/runtime.js.map +1 -1
  292. package/dist/scripts/__tests__/codex-native-hook.test.js +1749 -88
  293. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  294. package/dist/scripts/__tests__/hook-derived-watcher.test.js +33 -1
  295. package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +1 -1
  296. package/dist/scripts/__tests__/run-test-files.test.js +36 -0
  297. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  298. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  299. package/dist/scripts/codex-native-hook.js +570 -45
  300. package/dist/scripts/codex-native-hook.js.map +1 -1
  301. package/dist/scripts/codex-native-pre-post.d.ts +7 -0
  302. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  303. package/dist/scripts/codex-native-pre-post.js +341 -15
  304. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  305. package/dist/scripts/hook-derived-watcher.js +2 -1
  306. package/dist/scripts/hook-derived-watcher.js.map +1 -1
  307. package/dist/scripts/notify-fallback-watcher.js +2 -1
  308. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  309. package/dist/scripts/notify-hook/orchestration-intent.d.ts +1 -2
  310. package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -1
  311. package/dist/scripts/notify-hook/orchestration-intent.js +2 -3
  312. package/dist/scripts/notify-hook/orchestration-intent.js.map +1 -1
  313. package/dist/scripts/notify-hook/team-leader-nudge.d.ts +0 -2
  314. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  315. package/dist/scripts/notify-hook/team-leader-nudge.js +8 -60
  316. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  317. package/dist/scripts/notify-hook/team-worker-posttooluse.js +1 -1
  318. package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -1
  319. package/dist/scripts/notify-hook/team-worker-stop.d.ts +15 -0
  320. package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -0
  321. package/dist/scripts/notify-hook/team-worker-stop.js +224 -0
  322. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -0
  323. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  324. package/dist/scripts/notify-hook/team-worker.js +26 -18
  325. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  326. package/dist/scripts/notify-hook.js +1 -1
  327. package/dist/scripts/notify-hook.js.map +1 -1
  328. package/dist/scripts/run-test-files.js +17 -1
  329. package/dist/scripts/run-test-files.js.map +1 -1
  330. package/dist/scripts/sync-plugin-mirror.d.ts +1 -0
  331. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  332. package/dist/scripts/sync-plugin-mirror.js +10 -4
  333. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  334. package/dist/state/__tests__/operations.test.js +26 -0
  335. package/dist/state/__tests__/operations.test.js.map +1 -1
  336. package/dist/state/__tests__/skill-active.test.js +76 -0
  337. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  338. package/dist/state/operations.d.ts +3 -1
  339. package/dist/state/operations.d.ts.map +1 -1
  340. package/dist/state/operations.js +8 -4
  341. package/dist/state/operations.js.map +1 -1
  342. package/dist/state/skill-active.d.ts +1 -0
  343. package/dist/state/skill-active.d.ts.map +1 -1
  344. package/dist/state/skill-active.js +54 -13
  345. package/dist/state/skill-active.js.map +1 -1
  346. package/dist/team/__tests__/api-interop.test.js +279 -0
  347. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  348. package/dist/team/__tests__/approved-execution.test.d.ts +2 -0
  349. package/dist/team/__tests__/approved-execution.test.d.ts.map +1 -0
  350. package/dist/team/__tests__/approved-execution.test.js +124 -0
  351. package/dist/team/__tests__/approved-execution.test.js.map +1 -0
  352. package/dist/team/__tests__/delivery-e2e-smoke.test.js +2 -4
  353. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
  354. package/dist/team/__tests__/delivery-log.test.d.ts +2 -0
  355. package/dist/team/__tests__/delivery-log.test.d.ts.map +1 -0
  356. package/dist/team/__tests__/delivery-log.test.js +44 -0
  357. package/dist/team/__tests__/delivery-log.test.js.map +1 -0
  358. package/dist/team/__tests__/model-contract.test.js +40 -9
  359. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  360. package/dist/team/__tests__/repo-aware-decomposition.test.js +41 -0
  361. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -1
  362. package/dist/team/__tests__/role-router.test.js +4 -4
  363. package/dist/team/__tests__/role-router.test.js.map +1 -1
  364. package/dist/team/__tests__/runtime-boxed-state.test.d.ts +2 -0
  365. package/dist/team/__tests__/runtime-boxed-state.test.d.ts.map +1 -0
  366. package/dist/team/__tests__/runtime-boxed-state.test.js +39 -0
  367. package/dist/team/__tests__/runtime-boxed-state.test.js.map +1 -0
  368. package/dist/team/__tests__/runtime-cli.test.js +24 -0
  369. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  370. package/dist/team/__tests__/runtime.test.js +563 -72
  371. package/dist/team/__tests__/runtime.test.js.map +1 -1
  372. package/dist/team/__tests__/state-root.test.js +13 -0
  373. package/dist/team/__tests__/state-root.test.js.map +1 -1
  374. package/dist/team/__tests__/state.test.js +13 -0
  375. package/dist/team/__tests__/state.test.js.map +1 -1
  376. package/dist/team/__tests__/team-identity.test.d.ts +2 -0
  377. package/dist/team/__tests__/team-identity.test.d.ts.map +1 -0
  378. package/dist/team/__tests__/team-identity.test.js +166 -0
  379. package/dist/team/__tests__/team-identity.test.js.map +1 -0
  380. package/dist/team/__tests__/tmux-session.test.js +58 -1
  381. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  382. package/dist/team/__tests__/worker-bootstrap.test.js +62 -0
  383. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  384. package/dist/team/api-interop.d.ts +1 -0
  385. package/dist/team/api-interop.d.ts.map +1 -1
  386. package/dist/team/api-interop.js +163 -132
  387. package/dist/team/api-interop.js.map +1 -1
  388. package/dist/team/approved-execution.d.ts +37 -0
  389. package/dist/team/approved-execution.d.ts.map +1 -0
  390. package/dist/team/approved-execution.js +136 -0
  391. package/dist/team/approved-execution.js.map +1 -0
  392. package/dist/team/delivery-log.d.ts +1 -1
  393. package/dist/team/delivery-log.d.ts.map +1 -1
  394. package/dist/team/delivery-log.js +2 -1
  395. package/dist/team/delivery-log.js.map +1 -1
  396. package/dist/team/followup-planner.js +2 -2
  397. package/dist/team/followup-planner.js.map +1 -1
  398. package/dist/team/goal-workflow.d.ts +20 -0
  399. package/dist/team/goal-workflow.d.ts.map +1 -0
  400. package/dist/team/goal-workflow.js +57 -0
  401. package/dist/team/goal-workflow.js.map +1 -0
  402. package/dist/team/orchestrator.js +2 -2
  403. package/dist/team/orchestrator.js.map +1 -1
  404. package/dist/team/repo-aware-decomposition.d.ts +3 -0
  405. package/dist/team/repo-aware-decomposition.d.ts.map +1 -1
  406. package/dist/team/repo-aware-decomposition.js +2 -0
  407. package/dist/team/repo-aware-decomposition.js.map +1 -1
  408. package/dist/team/role-router.js +5 -5
  409. package/dist/team/role-router.js.map +1 -1
  410. package/dist/team/runtime-cli.d.ts +32 -2
  411. package/dist/team/runtime-cli.d.ts.map +1 -1
  412. package/dist/team/runtime-cli.js +78 -26
  413. package/dist/team/runtime-cli.js.map +1 -1
  414. package/dist/team/runtime.d.ts +7 -1
  415. package/dist/team/runtime.d.ts.map +1 -1
  416. package/dist/team/runtime.js +383 -40
  417. package/dist/team/runtime.js.map +1 -1
  418. package/dist/team/scaling.d.ts.map +1 -1
  419. package/dist/team/scaling.js +2 -0
  420. package/dist/team/scaling.js.map +1 -1
  421. package/dist/team/state.d.ts +9 -0
  422. package/dist/team/state.d.ts.map +1 -1
  423. package/dist/team/state.js +21 -0
  424. package/dist/team/state.js.map +1 -1
  425. package/dist/team/team-identity.d.ts +26 -0
  426. package/dist/team/team-identity.d.ts.map +1 -0
  427. package/dist/team/team-identity.js +169 -0
  428. package/dist/team/team-identity.js.map +1 -0
  429. package/dist/team/tmux-session.d.ts +18 -0
  430. package/dist/team/tmux-session.d.ts.map +1 -1
  431. package/dist/team/tmux-session.js +65 -3
  432. package/dist/team/tmux-session.js.map +1 -1
  433. package/dist/team/worker-bootstrap.d.ts +4 -0
  434. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  435. package/dist/team/worker-bootstrap.js +28 -2
  436. package/dist/team/worker-bootstrap.js.map +1 -1
  437. package/dist/ultragoal/__tests__/artifacts.test.d.ts +2 -0
  438. package/dist/ultragoal/__tests__/artifacts.test.d.ts.map +1 -0
  439. package/dist/ultragoal/__tests__/artifacts.test.js +93 -0
  440. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -0
  441. package/dist/ultragoal/artifacts.d.ts +89 -0
  442. package/dist/ultragoal/artifacts.d.ts.map +1 -0
  443. package/dist/ultragoal/artifacts.js +233 -0
  444. package/dist/ultragoal/artifacts.js.map +1 -0
  445. package/dist/utils/__tests__/agents-model-table.test.js +3 -1
  446. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
  447. package/dist/utils/__tests__/paths.test.js +31 -1
  448. package/dist/utils/__tests__/paths.test.js.map +1 -1
  449. package/dist/utils/agents-model-table.d.ts.map +1 -1
  450. package/dist/utils/agents-model-table.js +12 -1
  451. package/dist/utils/agents-model-table.js.map +1 -1
  452. package/dist/utils/paths.d.ts +2 -0
  453. package/dist/utils/paths.d.ts.map +1 -1
  454. package/dist/utils/paths.js +23 -7
  455. package/dist/utils/paths.js.map +1 -1
  456. package/dist/verification/__tests__/ci-rust-gates.test.js +30 -19
  457. package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
  458. package/package.json +5 -5
  459. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  460. package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +30 -5
  461. package/plugins/oh-my-codex/skills/ask/SKILL.md +58 -0
  462. package/plugins/oh-my-codex/skills/autoresearch-goal/SKILL.md +36 -0
  463. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +2 -2
  464. package/plugins/oh-my-codex/skills/performance-goal/SKILL.md +65 -0
  465. package/plugins/oh-my-codex/skills/plan/SKILL.md +1 -1
  466. package/plugins/oh-my-codex/skills/ralph/SKILL.md +22 -3
  467. package/plugins/oh-my-codex/skills/team/SKILL.md +6 -2
  468. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +49 -0
  469. package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +9 -9
  470. package/prompts/api-reviewer.md +1 -1
  471. package/prompts/code-reviewer.md +2 -0
  472. package/prompts/performance-reviewer.md +1 -1
  473. package/prompts/quality-reviewer.md +1 -1
  474. package/prompts/quality-strategist.md +2 -2
  475. package/prompts/style-reviewer.md +1 -1
  476. package/prompts/test-engineer.md +1 -1
  477. package/skills/ai-slop-cleaner/SKILL.md +30 -5
  478. package/skills/ask/SKILL.md +58 -0
  479. package/skills/ask-claude/SKILL.md +3 -54
  480. package/skills/ask-gemini/SKILL.md +3 -54
  481. package/skills/autoresearch-goal/SKILL.md +36 -0
  482. package/skills/build-fix/SKILL.md +4 -139
  483. package/skills/deepsearch/SKILL.md +4 -32
  484. package/skills/ecomode/SKILL.md +4 -108
  485. package/skills/help/SKILL.md +4 -196
  486. package/skills/note/SKILL.md +4 -56
  487. package/skills/omx-setup/SKILL.md +2 -2
  488. package/skills/performance-goal/SKILL.md +65 -0
  489. package/skills/plan/SKILL.md +1 -1
  490. package/skills/ralph/SKILL.md +22 -3
  491. package/skills/ralph-init/SKILL.md +4 -40
  492. package/skills/review/SKILL.md +4 -32
  493. package/skills/security-review/SKILL.md +4 -294
  494. package/skills/swarm/SKILL.md +4 -19
  495. package/skills/tdd/SKILL.md +4 -100
  496. package/skills/team/SKILL.md +6 -2
  497. package/skills/trace/SKILL.md +4 -27
  498. package/skills/ultragoal/SKILL.md +49 -0
  499. package/skills/visual-ralph/SKILL.md +9 -9
  500. package/skills/visual-verdict/SKILL.md +4 -70
  501. package/skills/web-clone/SKILL.md +4 -18
  502. package/src/scripts/__tests__/codex-native-hook.test.ts +2923 -1030
  503. package/src/scripts/__tests__/hook-derived-watcher.test.ts +45 -1
  504. package/src/scripts/__tests__/run-test-files.test.ts +46 -0
  505. package/src/scripts/codex-native-hook.ts +696 -46
  506. package/src/scripts/codex-native-pre-post.ts +369 -16
  507. package/src/scripts/hook-derived-watcher.ts +2 -1
  508. package/src/scripts/notify-fallback-watcher.ts +2 -1
  509. package/src/scripts/notify-hook/orchestration-intent.ts +1 -3
  510. package/src/scripts/notify-hook/team-leader-nudge.ts +7 -63
  511. package/src/scripts/notify-hook/team-worker-posttooluse.ts +1 -1
  512. package/src/scripts/notify-hook/team-worker-stop.ts +246 -0
  513. package/src/scripts/notify-hook/team-worker.ts +23 -14
  514. package/src/scripts/notify-hook.ts +1 -1
  515. package/src/scripts/run-test-files.ts +20 -1
  516. package/src/scripts/sync-plugin-mirror.ts +13 -4
  517. package/templates/catalog-manifest.json +45 -27
  518. package/plugins/oh-my-codex/skills/ask-claude/SKILL.md +0 -61
  519. package/plugins/oh-my-codex/skills/ask-gemini/SKILL.md +0 -61
  520. package/plugins/oh-my-codex/skills/help/SKILL.md +0 -202
  521. package/plugins/oh-my-codex/skills/note/SKILL.md +0 -62
  522. package/plugins/oh-my-codex/skills/security-review/SKILL.md +0 -300
  523. package/plugins/oh-my-codex/skills/trace/SKILL.md +0 -33
  524. package/plugins/oh-my-codex/skills/visual-verdict/SKILL.md +0 -76
@@ -0,0 +1,96 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import { tmpdir } from 'node:os';
6
+ import { createGoalWorkflowRun, readGoalWorkflowRun, transitionGoalWorkflowRun, } from '../artifacts.js';
7
+ import { buildGoalWorkflowHandoff } from '../handoff.js';
8
+ import { assertGoalWorkflowCanComplete, normalizeGoalWorkflowValidation, GoalWorkflowValidationError, } from '../validation.js';
9
+ async function withTempRepo(run) {
10
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-goal-workflow-'));
11
+ try {
12
+ return await run(cwd);
13
+ }
14
+ finally {
15
+ await rm(cwd, { recursive: true, force: true });
16
+ }
17
+ }
18
+ describe('goal-workflow artifacts', () => {
19
+ it('creates durable status and ledger artifacts under .omx/goals', async () => {
20
+ await withTempRepo(async (cwd) => {
21
+ const run = await createGoalWorkflowRun(cwd, {
22
+ workflow: 'performance-goal',
23
+ slug: 'Latency Pass',
24
+ objective: 'Reduce p95 latency below 100ms.',
25
+ now: new Date('2026-05-04T10:00:00Z'),
26
+ });
27
+ assert.equal(run.artifactDir, '.omx/goals/performance-goal/latency-pass');
28
+ assert.equal(run.status, 'pending');
29
+ assert.equal((await readGoalWorkflowRun(cwd, 'performance-goal', 'latency-pass')).objective, 'Reduce p95 latency below 100ms.');
30
+ const ledger = await readFile(join(cwd, '.omx/goals/performance-goal/latency-pass/ledger.jsonl'), 'utf-8');
31
+ assert.match(ledger, /"event":"workflow_created"/);
32
+ });
33
+ });
34
+ it('requires a real validation artifact when entering validation_passed', async () => {
35
+ await withTempRepo(async (cwd) => {
36
+ await createGoalWorkflowRun(cwd, { workflow: 'scrum-goal', slug: 'strict', objective: 'Strictly validate release.' });
37
+ await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed' }), /Completion requires a validation artifact/);
38
+ const placeholder = normalizeGoalWorkflowValidation({
39
+ status: 'pass',
40
+ summary: 'TODO placeholder evaluator says pass.',
41
+ artifactPath: '.omx/goals/scrum-goal/strict/audit.json',
42
+ });
43
+ await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed', validation: placeholder }), /real validation evidence/);
44
+ const missingArtifact = normalizeGoalWorkflowValidation({
45
+ status: 'pass',
46
+ summary: 'Leader audit passed with concrete test output.',
47
+ artifactPath: ' ',
48
+ });
49
+ await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed', validation: missingArtifact }), /validation artifact path/);
50
+ });
51
+ });
52
+ it('blocks completion until validation passes and records ledger transitions', async () => {
53
+ await withTempRepo(async (cwd) => {
54
+ await createGoalWorkflowRun(cwd, { workflow: 'scrum-goal', slug: 'release', objective: 'Ship release.' });
55
+ await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'in_progress', now: new Date('2026-05-04T10:01:00Z') });
56
+ await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'complete', evidence: 'looks done' }), /passing validation artifact/);
57
+ const validation = normalizeGoalWorkflowValidation({
58
+ status: 'pass',
59
+ summary: 'Worker evidence matrix passed leader audit.',
60
+ artifactPath: '.omx/goals/scrum-goal/release/audit.json',
61
+ checkedAt: new Date('2026-05-04T10:02:00Z'),
62
+ });
63
+ assertGoalWorkflowCanComplete(validation);
64
+ await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'validation_passed', validation });
65
+ const completed = await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'complete', evidence: 'audit passed' });
66
+ assert.equal(completed.status, 'complete');
67
+ const ledger = await readFile(join(cwd, '.omx/goals/scrum-goal/release/ledger.jsonl'), 'utf-8');
68
+ assert.match(ledger, /"event":"goal_started"/);
69
+ assert.match(ledger, /"event":"validation_passed"/);
70
+ assert.match(ledger, /"event":"goal_completed"/);
71
+ });
72
+ });
73
+ });
74
+ describe('goal-workflow handoff and validation', () => {
75
+ it('renders truthful Codex goal handoff instructions for degraded mode', async () => {
76
+ await withTempRepo(async (cwd) => {
77
+ const run = await createGoalWorkflowRun(cwd, { workflow: 'autoresearch-goal', objective: 'Research safe rollout options.' });
78
+ const handoff = buildGoalWorkflowHandoff({ run, degradedMode: true });
79
+ assert.match(handoff, /call get_goal/i);
80
+ assert.match(handoff, /Call create_goal only if no active goal exists/i);
81
+ assert.match(handoff, /update_goal\(\{status: "complete"\}\) only after/i);
82
+ assert.match(handoff, /fresh complete snapshot/i);
83
+ assert.match(handoff, /did not mutate hidden Codex goal state/i);
84
+ assert.match(handoff, /Research safe rollout options/);
85
+ });
86
+ });
87
+ it('rejects placeholder validation evidence', () => {
88
+ const validation = normalizeGoalWorkflowValidation({
89
+ status: true,
90
+ summary: 'TODO placeholder evaluator says pass.',
91
+ artifactPath: '.omx/goals/demo/evaluator.json',
92
+ });
93
+ assert.throws(() => assertGoalWorkflowCanComplete(validation), GoalWorkflowValidationError);
94
+ });
95
+ });
96
+ //# sourceMappingURL=artifacts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.test.js","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/artifacts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codex-goal-snapshot.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-goal-snapshot.test.d.ts","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/codex-goal-snapshot.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ import { tmpdir } from 'node:os';
6
+ import { CodexGoalSnapshotError, parseCodexGoalSnapshot, readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot, } from '../codex-goal-snapshot.js';
7
+ describe('codex goal snapshot reconciliation', () => {
8
+ it('normalizes get_goal JSON shape', () => {
9
+ const snapshot = parseCodexGoalSnapshot({
10
+ goal: { objective: 'Ship the feature', status: 'completed', token_budget: 1000 },
11
+ remainingTokens: 25,
12
+ });
13
+ assert.equal(snapshot.available, true);
14
+ assert.equal(snapshot.objective, 'Ship the feature');
15
+ assert.equal(snapshot.status, 'complete');
16
+ assert.equal(snapshot.tokenBudget, 1000);
17
+ assert.equal(snapshot.remainingTokens, 25);
18
+ });
19
+ it('reports absent snapshots as warnings unless required', () => {
20
+ const optional = reconcileCodexGoalSnapshot(null, { expectedObjective: 'Ship' });
21
+ assert.equal(optional.ok, true);
22
+ assert.match(optional.warnings.join('\n'), /call get_goal/);
23
+ const required = reconcileCodexGoalSnapshot(null, { expectedObjective: 'Ship', requireSnapshot: true });
24
+ assert.equal(required.ok, false);
25
+ assert.match(required.errors.join('\n'), /call get_goal/);
26
+ });
27
+ it('detects objective mismatches and incomplete completion proof', () => {
28
+ const mismatch = reconcileCodexGoalSnapshot(parseCodexGoalSnapshot({ goal: { objective: 'Different', status: 'active' } }), { expectedObjective: 'Expected', requireSnapshot: true, requireComplete: true });
29
+ assert.equal(mismatch.ok, false);
30
+ assert.match(mismatch.errors.join('\n'), /objective mismatch/);
31
+ assert.match(mismatch.errors.join('\n'), /not complete/);
32
+ });
33
+ it('accepts compatible complete proof', () => {
34
+ const result = reconcileCodexGoalSnapshot(parseCodexGoalSnapshot({ goal: { objective: 'Expected objective', status: 'complete' } }), { expectedObjective: 'Expected objective', requireSnapshot: true, requireComplete: true });
35
+ assert.equal(result.ok, true);
36
+ assert.deepEqual(result.errors, []);
37
+ });
38
+ it('reads inline JSON and path input but rejects malformed sources', async () => {
39
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-codex-goal-snapshot-'));
40
+ try {
41
+ const fromJson = await readCodexGoalSnapshotInput('{"goal":{"objective":"A","status":"active"}}', cwd);
42
+ assert.equal(fromJson?.objective, 'A');
43
+ await writeFile(join(cwd, 'goal.json'), '{"goal":{"objective":"B","status":"complete"}}');
44
+ const fromPath = await readCodexGoalSnapshotInput('goal.json', cwd);
45
+ assert.equal(fromPath?.objective, 'B');
46
+ await assert.rejects(() => readCodexGoalSnapshotInput('{not-json}', cwd), CodexGoalSnapshotError);
47
+ await assert.rejects(() => readCodexGoalSnapshotInput('missing.json', cwd), /neither valid JSON nor a readable path/);
48
+ }
49
+ finally {
50
+ await rm(cwd, { recursive: true, force: true });
51
+ }
52
+ });
53
+ });
54
+ //# sourceMappingURL=codex-goal-snapshot.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-goal-snapshot.test.js","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/codex-goal-snapshot.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export declare const GOAL_WORKFLOWS_DIR = ".omx/goals";
2
+ export declare const GOAL_WORKFLOW_STATUS = "status.json";
3
+ export declare const GOAL_WORKFLOW_LEDGER = "ledger.jsonl";
4
+ export type GoalWorkflowStatus = 'pending' | 'in_progress' | 'validation_passed' | 'blocked' | 'failed' | 'complete';
5
+ export type GoalWorkflowLedgerEvent = 'workflow_created' | 'goal_started' | 'validation_passed' | 'validation_failed' | 'goal_handoff_emitted' | 'goal_completed' | 'goal_failed';
6
+ export interface GoalWorkflowRun {
7
+ version: 1;
8
+ workflow: string;
9
+ slug: string;
10
+ objective: string;
11
+ status: GoalWorkflowStatus;
12
+ createdAt: string;
13
+ updatedAt: string;
14
+ artifactDir: string;
15
+ statusPath: string;
16
+ ledgerPath: string;
17
+ metadata?: Record<string, unknown>;
18
+ validation?: GoalWorkflowValidationSummary;
19
+ evidence?: string;
20
+ }
21
+ export interface GoalWorkflowValidationSummary {
22
+ status: Extract<GoalWorkflowStatus, 'validation_passed' | 'blocked' | 'failed'>;
23
+ summary: string;
24
+ artifactPath?: string;
25
+ checkedAt: string;
26
+ }
27
+ export interface GoalWorkflowLedgerEntry {
28
+ ts: string;
29
+ event: GoalWorkflowLedgerEvent;
30
+ status?: GoalWorkflowStatus;
31
+ message?: string;
32
+ evidence?: string;
33
+ validation?: GoalWorkflowValidationSummary;
34
+ metadata?: Record<string, unknown>;
35
+ }
36
+ export interface CreateGoalWorkflowRunOptions {
37
+ workflow: string;
38
+ slug?: string;
39
+ objective: string;
40
+ metadata?: Record<string, unknown>;
41
+ now?: Date;
42
+ force?: boolean;
43
+ }
44
+ export interface TransitionGoalWorkflowOptions {
45
+ status: Exclude<GoalWorkflowStatus, 'pending'>;
46
+ message?: string;
47
+ evidence?: string;
48
+ validation?: GoalWorkflowValidationSummary;
49
+ metadata?: Record<string, unknown>;
50
+ now?: Date;
51
+ }
52
+ export declare class GoalWorkflowError extends Error {
53
+ }
54
+ export declare function normalizeGoalWorkflowSegment(value: string, fallback?: string): string;
55
+ export declare function goalWorkflowDir(cwd: string, workflow: string, slug: string): string;
56
+ export declare function goalWorkflowStatusPath(cwd: string, workflow: string, slug: string): string;
57
+ export declare function goalWorkflowLedgerPath(cwd: string, workflow: string, slug: string): string;
58
+ export declare function appendGoalWorkflowLedger(cwd: string, run: GoalWorkflowRun, entry: GoalWorkflowLedgerEntry): Promise<void>;
59
+ export declare function createGoalWorkflowRun(cwd: string, options: CreateGoalWorkflowRunOptions): Promise<GoalWorkflowRun>;
60
+ export declare function readGoalWorkflowRun(cwd: string, workflow: string, slug: string): Promise<GoalWorkflowRun>;
61
+ export declare function transitionGoalWorkflowRun(cwd: string, workflow: string, slug: string, options: TransitionGoalWorkflowOptions): Promise<GoalWorkflowRun>;
62
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises';
3
+ import { join, relative } from 'node:path';
4
+ import { assertGoalWorkflowCanComplete } from './validation.js';
5
+ export const GOAL_WORKFLOWS_DIR = '.omx/goals';
6
+ export const GOAL_WORKFLOW_STATUS = 'status.json';
7
+ export const GOAL_WORKFLOW_LEDGER = 'ledger.jsonl';
8
+ export class GoalWorkflowError extends Error {
9
+ }
10
+ function iso(now = new Date()) {
11
+ return now.toISOString();
12
+ }
13
+ function cleanSegment(value, fallback) {
14
+ const segment = value
15
+ .toLowerCase()
16
+ .replace(/[^a-z0-9]+/g, '-')
17
+ .replace(/^-+|-+$/g, '')
18
+ .slice(0, 72)
19
+ .replace(/-+$/g, '');
20
+ return segment || fallback;
21
+ }
22
+ function slugFromObjective(objective) {
23
+ const firstLine = objective.split(/\r?\n/).map((line) => line.trim()).find(Boolean) ?? 'goal-workflow';
24
+ return cleanSegment(firstLine, 'goal-workflow');
25
+ }
26
+ function repoRelative(cwd, path) {
27
+ return relative(cwd, path).split('\\').join('/');
28
+ }
29
+ export function normalizeGoalWorkflowSegment(value, fallback = 'workflow') {
30
+ return cleanSegment(value, fallback);
31
+ }
32
+ export function goalWorkflowDir(cwd, workflow, slug) {
33
+ return join(cwd, GOAL_WORKFLOWS_DIR, normalizeGoalWorkflowSegment(workflow), normalizeGoalWorkflowSegment(slug, 'goal-workflow'));
34
+ }
35
+ export function goalWorkflowStatusPath(cwd, workflow, slug) {
36
+ return join(goalWorkflowDir(cwd, workflow, slug), GOAL_WORKFLOW_STATUS);
37
+ }
38
+ export function goalWorkflowLedgerPath(cwd, workflow, slug) {
39
+ return join(goalWorkflowDir(cwd, workflow, slug), GOAL_WORKFLOW_LEDGER);
40
+ }
41
+ export async function appendGoalWorkflowLedger(cwd, run, entry) {
42
+ await mkdir(join(cwd, run.artifactDir), { recursive: true });
43
+ await appendFile(join(cwd, run.ledgerPath), `${JSON.stringify(entry)}\n`);
44
+ }
45
+ async function writeRun(cwd, run) {
46
+ await mkdir(join(cwd, run.artifactDir), { recursive: true });
47
+ await writeFile(join(cwd, run.statusPath), `${JSON.stringify(run, null, 2)}\n`);
48
+ }
49
+ export async function createGoalWorkflowRun(cwd, options) {
50
+ if (!options.objective.trim())
51
+ throw new GoalWorkflowError('Missing goal workflow objective.');
52
+ const workflow = normalizeGoalWorkflowSegment(options.workflow);
53
+ const slug = normalizeGoalWorkflowSegment(options.slug ?? slugFromObjective(options.objective), 'goal-workflow');
54
+ const statusPath = goalWorkflowStatusPath(cwd, workflow, slug);
55
+ if (!options.force && existsSync(statusPath)) {
56
+ throw new GoalWorkflowError(`Refusing to overwrite existing ${repoRelative(cwd, statusPath)}; pass force to recreate it.`);
57
+ }
58
+ const now = iso(options.now);
59
+ const artifactDir = repoRelative(cwd, goalWorkflowDir(cwd, workflow, slug));
60
+ const run = {
61
+ version: 1,
62
+ workflow,
63
+ slug,
64
+ objective: options.objective.trim(),
65
+ status: 'pending',
66
+ createdAt: now,
67
+ updatedAt: now,
68
+ artifactDir,
69
+ statusPath: `${artifactDir}/${GOAL_WORKFLOW_STATUS}`,
70
+ ledgerPath: `${artifactDir}/${GOAL_WORKFLOW_LEDGER}`,
71
+ metadata: options.metadata,
72
+ };
73
+ await writeRun(cwd, run);
74
+ await writeFile(join(cwd, run.ledgerPath), '');
75
+ await appendGoalWorkflowLedger(cwd, run, { ts: now, event: 'workflow_created', status: run.status, message: 'Goal workflow created' });
76
+ return run;
77
+ }
78
+ export async function readGoalWorkflowRun(cwd, workflow, slug) {
79
+ const path = goalWorkflowStatusPath(cwd, workflow, slug);
80
+ let raw;
81
+ try {
82
+ raw = await readFile(path, 'utf-8');
83
+ }
84
+ catch {
85
+ throw new GoalWorkflowError(`No goal workflow run found at ${repoRelative(cwd, path)}.`);
86
+ }
87
+ const parsed = JSON.parse(raw);
88
+ if (parsed.version !== 1 || !parsed.workflow || !parsed.slug || !parsed.objective) {
89
+ throw new GoalWorkflowError(`Invalid goal workflow run at ${repoRelative(cwd, path)}.`);
90
+ }
91
+ return parsed;
92
+ }
93
+ function eventForStatus(status) {
94
+ switch (status) {
95
+ case 'in_progress': return 'goal_started';
96
+ case 'validation_passed': return 'validation_passed';
97
+ case 'blocked':
98
+ case 'failed': return 'goal_failed';
99
+ case 'complete': return 'goal_completed';
100
+ }
101
+ }
102
+ export async function transitionGoalWorkflowRun(cwd, workflow, slug, options) {
103
+ const run = await readGoalWorkflowRun(cwd, workflow, slug);
104
+ if (options.status === 'validation_passed') {
105
+ assertGoalWorkflowCanComplete(options.validation);
106
+ }
107
+ if (options.status === 'complete') {
108
+ if (run.status !== 'validation_passed') {
109
+ throw new GoalWorkflowError('Goal workflow completion requires a passing validation artifact first.');
110
+ }
111
+ assertGoalWorkflowCanComplete(run.validation);
112
+ }
113
+ const now = iso(options.now);
114
+ run.status = options.status;
115
+ run.updatedAt = now;
116
+ run.evidence = options.evidence ?? run.evidence;
117
+ run.metadata = { ...run.metadata, ...options.metadata };
118
+ if (options.validation)
119
+ run.validation = options.validation;
120
+ await writeRun(cwd, run);
121
+ await appendGoalWorkflowLedger(cwd, run, {
122
+ ts: now,
123
+ event: eventForStatus(options.status),
124
+ status: run.status,
125
+ message: options.message,
126
+ evidence: options.evidence,
127
+ validation: options.validation,
128
+ metadata: options.metadata,
129
+ });
130
+ return run;
131
+ }
132
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/goal-workflows/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAoEnD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,SAAS,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;IAC3B,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,QAAgB;IACnD,MAAM,OAAO,GAAG,KAAK;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvB,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC;IACvG,OAAO,YAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY;IAC7C,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAa,EAAE,QAAQ,GAAG,UAAU;IAC/E,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY;IACzE,OAAO,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,4BAA4B,CAAC,QAAQ,CAAC,EAAE,4BAA4B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;AACpI,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY;IAChF,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY;IAChF,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAW,EAAE,GAAoB,EAAE,KAA8B;IAC9G,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,GAAoB;IACvD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,OAAqC;IAC5F,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,4BAA4B,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC,CAAC;IACjH,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC7H,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAoB;QAC3B,OAAO,EAAE,CAAC;QACV,QAAQ;QACR,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;QACnC,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,WAAW;QACX,UAAU,EAAE,GAAG,WAAW,IAAI,oBAAoB,EAAE;QACpD,UAAU,EAAE,GAAG,WAAW,IAAI,oBAAoB,EAAE;QACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IAEF,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACvI,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY;IACnF,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAClD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAClF,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAA+C;IACrE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC,CAAC,OAAO,cAAc,CAAC;QAC1C,KAAK,mBAAmB,CAAC,CAAC,OAAO,mBAAmB,CAAC;QACrD,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,OAAO,aAAa,CAAC;QACpC,KAAK,UAAU,CAAC,CAAC,OAAO,gBAAgB,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY,EAAE,OAAsC;IACjI,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;QAC3C,6BAA6B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;YACvC,MAAM,IAAI,iBAAiB,CAAC,wEAAwE,CAAC,CAAC;QACxG,CAAC;QACD,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;IACpB,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC;IAChD,GAAG,CAAC,QAAQ,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACxD,IAAI,OAAO,CAAC,UAAU;QAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAE5D,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE;QACvC,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type CodexGoalSnapshotStatus = 'active' | 'complete' | 'cancelled' | 'failed' | 'unknown';
2
+ export interface CodexGoalSnapshot {
3
+ available: boolean;
4
+ objective?: string;
5
+ status?: CodexGoalSnapshotStatus;
6
+ tokenBudget?: number;
7
+ remainingTokens?: number | null;
8
+ raw: unknown;
9
+ }
10
+ export interface CodexGoalReconciliation {
11
+ ok: boolean;
12
+ snapshot: CodexGoalSnapshot;
13
+ warnings: string[];
14
+ errors: string[];
15
+ }
16
+ export interface ReconcileCodexGoalOptions {
17
+ expectedObjective: string;
18
+ allowedStatuses?: readonly CodexGoalSnapshotStatus[];
19
+ requireSnapshot?: boolean;
20
+ requireComplete?: boolean;
21
+ }
22
+ export declare class CodexGoalSnapshotError extends Error {
23
+ }
24
+ export declare function parseCodexGoalSnapshot(value: unknown): CodexGoalSnapshot;
25
+ export declare function readCodexGoalSnapshotInput(raw: string | undefined, cwd?: string): Promise<CodexGoalSnapshot | null>;
26
+ export declare function reconcileCodexGoalSnapshot(snapshot: CodexGoalSnapshot | null | undefined, options: ReconcileCodexGoalOptions): CodexGoalReconciliation;
27
+ export declare function formatCodexGoalReconciliation(reconciliation: CodexGoalReconciliation): string;
28
+ //# sourceMappingURL=codex-goal-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-goal-snapshot.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AA2BpD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA+BxE;AAED,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAgBhI;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC9C,OAAO,EAAE,yBAAyB,GACjC,uBAAuB,CA8BzB;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,uBAAuB,GAAG,MAAM,CAG7F"}
@@ -0,0 +1,110 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ export class CodexGoalSnapshotError extends Error {
5
+ }
6
+ function safeObject(value) {
7
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
8
+ }
9
+ function safeString(value) {
10
+ return typeof value === 'string' ? value.trim() : '';
11
+ }
12
+ function safeNumber(value) {
13
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
14
+ }
15
+ function normalizeStatus(value) {
16
+ const status = safeString(value).toLowerCase();
17
+ if (status === 'complete' || status === 'completed' || status === 'done')
18
+ return 'complete';
19
+ if (status === 'cancelled' || status === 'canceled')
20
+ return 'cancelled';
21
+ if (status === 'failed' || status === 'failure')
22
+ return 'failed';
23
+ if (status === 'active' || status === 'in_progress' || status === 'pending' || status === 'running')
24
+ return 'active';
25
+ return 'unknown';
26
+ }
27
+ function normalizeObjective(value) {
28
+ return value.replace(/\s+/g, ' ').trim();
29
+ }
30
+ export function parseCodexGoalSnapshot(value) {
31
+ const root = safeObject(value);
32
+ const goalValue = Object.hasOwn(root, 'goal') ? root.goal : value;
33
+ if (goalValue === null || goalValue === undefined || goalValue === false) {
34
+ return { available: false, raw: value };
35
+ }
36
+ const goal = safeObject(goalValue);
37
+ const objective = safeString(goal.objective
38
+ ?? goal.goal
39
+ ?? goal.description
40
+ ?? root.objective);
41
+ const status = normalizeStatus(goal.status ?? root.status);
42
+ const tokenBudget = safeNumber(goal.token_budget
43
+ ?? goal.tokenBudget
44
+ ?? root.token_budget
45
+ ?? root.tokenBudget);
46
+ const remainingTokens = safeNumber(root.remainingTokens ?? root.remaining_tokens);
47
+ return {
48
+ available: Boolean(objective || status !== 'unknown'),
49
+ ...(objective ? { objective } : {}),
50
+ status,
51
+ ...(tokenBudget !== undefined ? { tokenBudget } : {}),
52
+ remainingTokens: remainingTokens ?? null,
53
+ raw: value,
54
+ };
55
+ }
56
+ export async function readCodexGoalSnapshotInput(raw, cwd = process.cwd()) {
57
+ if (!raw?.trim())
58
+ return null;
59
+ const trimmed = raw.trim();
60
+ try {
61
+ return parseCodexGoalSnapshot(JSON.parse(trimmed));
62
+ }
63
+ catch {
64
+ const path = resolve(cwd, trimmed);
65
+ if (!existsSync(path)) {
66
+ throw new CodexGoalSnapshotError(`Codex goal snapshot is neither valid JSON nor a readable path: ${trimmed}`);
67
+ }
68
+ try {
69
+ return parseCodexGoalSnapshot(JSON.parse(await readFile(path, 'utf-8')));
70
+ }
71
+ catch (error) {
72
+ throw new CodexGoalSnapshotError(`Codex goal snapshot path does not contain valid JSON: ${trimmed}${error instanceof Error ? ` (${error.message})` : ''}`);
73
+ }
74
+ }
75
+ }
76
+ export function reconcileCodexGoalSnapshot(snapshot, options) {
77
+ const effectiveSnapshot = snapshot ?? { available: false, raw: null };
78
+ const errors = [];
79
+ const warnings = [];
80
+ if (!effectiveSnapshot.available) {
81
+ const message = 'Codex goal snapshot is absent or reports no active goal; call get_goal and pass its JSON with --codex-goal-json.';
82
+ if (options.requireSnapshot)
83
+ errors.push(message);
84
+ else
85
+ warnings.push(message);
86
+ return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
87
+ }
88
+ const expected = normalizeObjective(options.expectedObjective);
89
+ const actual = normalizeObjective(effectiveSnapshot.objective ?? '');
90
+ if (!actual) {
91
+ errors.push('Codex goal snapshot is missing objective text.');
92
+ }
93
+ else if (actual !== expected) {
94
+ errors.push(`Codex goal objective mismatch: expected "${expected}", got "${actual}".`);
95
+ }
96
+ const allowed = options.allowedStatuses ?? (options.requireComplete ? ['complete'] : ['active', 'complete']);
97
+ const actualStatus = effectiveSnapshot.status ?? 'unknown';
98
+ if (!allowed.includes(actualStatus)) {
99
+ errors.push(`Codex goal status mismatch: expected ${allowed.join(' or ')}, got ${actualStatus}.`);
100
+ }
101
+ if (options.requireComplete && actualStatus !== 'complete') {
102
+ errors.push(`Codex goal is not complete; call update_goal({status: "complete"}) only after the objective is actually complete, then pass the fresh get_goal JSON.`);
103
+ }
104
+ return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
105
+ }
106
+ export function formatCodexGoalReconciliation(reconciliation) {
107
+ const parts = [...reconciliation.errors, ...reconciliation.warnings];
108
+ return parts.join(' ');
109
+ }
110
+ //# sourceMappingURL=codex-goal-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-goal-snapshot.js","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { GoalWorkflowRun } from './artifacts.js';
2
+ export interface GoalWorkflowHandoffOptions {
3
+ run: GoalWorkflowRun;
4
+ title?: string;
5
+ tokenBudget?: number;
6
+ completionCommand?: string;
7
+ degradedMode?: boolean;
8
+ }
9
+ export declare function buildGoalWorkflowHandoff(options: GoalWorkflowHandoffOptions): string;
10
+ //# sourceMappingURL=handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,eAAe,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CA6BpF"}
@@ -0,0 +1,31 @@
1
+ export function buildGoalWorkflowHandoff(options) {
2
+ const createPayload = {
3
+ objective: options.run.objective,
4
+ ...(options.tokenBudget ? { token_budget: options.tokenBudget } : {}),
5
+ };
6
+ return [
7
+ options.title ?? `${options.run.workflow} goal-workflow handoff`,
8
+ `Status: ${options.run.status}`,
9
+ `Artifacts: ${options.run.artifactDir}`,
10
+ `Ledger: ${options.run.ledgerPath}`,
11
+ '',
12
+ 'Codex goal integration constraints:',
13
+ '- First call get_goal to inspect the active Codex thread goal.',
14
+ '- Call create_goal only if no active goal exists and this handoff is the explicit objective to start.',
15
+ '- If a different active Codex goal exists, finish, checkpoint, or ask the leader before replacing focus.',
16
+ '- Work only this objective until the workflow-specific completion audit passes.',
17
+ '- Call update_goal({status: "complete"}) only after the OMX completion audit and validation artifacts pass, then call get_goal again for a fresh complete snapshot.',
18
+ options.completionCommand ? `- Then record OMX completion evidence with the fresh snapshot: ${options.completionCommand}` : '- Then record OMX completion evidence in the workflow ledger/status artifacts with the fresh get_goal snapshot when the workflow supports --codex-goal-json.',
19
+ '',
20
+ options.degradedMode
21
+ ? 'Degraded-mode warning: this shell-rendered handoff did not mutate hidden Codex goal state; the active agent must use get_goal/create_goal/update_goal when those tools are available.'
22
+ : 'Truth boundary: OMX owns durable workflow artifacts; Codex owns active-thread focus/accounting.',
23
+ '',
24
+ 'create_goal payload:',
25
+ JSON.stringify(createPayload, null, 2),
26
+ '',
27
+ 'Objective:',
28
+ options.run.objective,
29
+ ].join('\n');
30
+ }
31
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/goal-workflows/handoff.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,wBAAwB,CAAC,OAAmC;IAC1E,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAChC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;IACF,OAAO;QACL,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,wBAAwB;QAChE,WAAW,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAC/B,cAAc,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QACvC,WAAW,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;QACnC,EAAE;QACF,qCAAqC;QACrC,gEAAgE;QAChE,uGAAuG;QACvG,0GAA0G;QAC1G,iFAAiF;QACjF,qKAAqK;QACrK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,kEAAkE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,8JAA8J;QAC1R,EAAE;QACF,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,uLAAuL;YACzL,CAAC,CAAC,iGAAiG;QACrG,EAAE;QACF,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,EAAE;QACF,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,SAAS;KACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { GoalWorkflowValidationSummary } from './artifacts.js';
2
+ export type GoalWorkflowValidationStatus = 'pass' | 'fail' | 'blocker';
3
+ export interface GoalWorkflowValidationInput {
4
+ status: GoalWorkflowValidationStatus | boolean;
5
+ summary: string;
6
+ artifactPath?: string;
7
+ checkedAt?: Date;
8
+ }
9
+ export declare class GoalWorkflowValidationError extends Error {
10
+ }
11
+ export declare function normalizeGoalWorkflowValidation(input: GoalWorkflowValidationInput): GoalWorkflowValidationSummary;
12
+ export declare function assertGoalWorkflowCanComplete(validation: GoalWorkflowValidationSummary | undefined): void;
13
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAUzD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,2BAA2B,GAAG,6BAA6B,CAajH;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,6BAA6B,GAAG,SAAS,GAAG,IAAI,CASzG"}