oh-my-codex 0.17.3 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/Cargo.lock +13 -5
  2. package/Cargo.toml +2 -1
  3. package/README.md +44 -19
  4. package/crates/omx-api/Cargo.toml +19 -0
  5. package/crates/omx-api/src/lib.rs +2997 -0
  6. package/crates/omx-api/src/main.rs +10 -0
  7. package/crates/omx-api/tests/cli.rs +558 -0
  8. package/crates/omx-explore/src/main.rs +4 -0
  9. package/crates/omx-sparkshell/src/codex_bridge.rs +437 -123
  10. package/crates/omx-sparkshell/src/exec.rs +127 -1
  11. package/crates/omx-sparkshell/src/main.rs +829 -30
  12. package/crates/omx-sparkshell/src/prompt.rs +25 -3
  13. package/crates/omx-sparkshell/src/redaction.rs +241 -0
  14. package/crates/omx-sparkshell/tests/execution.rs +702 -237
  15. package/dist/cli/__tests__/api.test.d.ts +2 -0
  16. package/dist/cli/__tests__/api.test.d.ts.map +1 -0
  17. package/dist/cli/__tests__/api.test.js +175 -0
  18. package/dist/cli/__tests__/api.test.js.map +1 -0
  19. package/dist/cli/__tests__/ask.test.js +72 -5
  20. package/dist/cli/__tests__/ask.test.js.map +1 -1
  21. package/dist/cli/__tests__/autoresearch-goal.test.js +14 -1
  22. package/dist/cli/__tests__/autoresearch-goal.test.js.map +1 -1
  23. package/dist/cli/__tests__/codex-plugin-layout.test.js +15 -7
  24. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  25. package/dist/cli/__tests__/doctor-warning-copy.test.js +76 -3
  26. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  27. package/dist/cli/__tests__/explore.test.js +23 -0
  28. package/dist/cli/__tests__/explore.test.js.map +1 -1
  29. package/dist/cli/__tests__/index.test.js +171 -5
  30. package/dist/cli/__tests__/index.test.js.map +1 -1
  31. package/dist/cli/__tests__/install-docs-contract.test.d.ts +2 -0
  32. package/dist/cli/__tests__/install-docs-contract.test.d.ts.map +1 -0
  33. package/dist/cli/__tests__/install-docs-contract.test.js +55 -0
  34. package/dist/cli/__tests__/install-docs-contract.test.js.map +1 -0
  35. package/dist/cli/__tests__/launch-fallback.test.js +191 -0
  36. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  37. package/dist/cli/__tests__/package-bin-contract.test.js +4 -3
  38. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  39. package/dist/cli/__tests__/question.test.js +27 -41
  40. package/dist/cli/__tests__/question.test.js.map +1 -1
  41. package/dist/cli/__tests__/setup-install-mode.test.js +232 -35
  42. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  43. package/dist/cli/__tests__/sparkshell-cli.test.js +25 -1
  44. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  45. package/dist/cli/__tests__/sparkshell-packaging.test.js +1 -0
  46. package/dist/cli/__tests__/sparkshell-packaging.test.js.map +1 -1
  47. package/dist/cli/__tests__/ultragoal.test.js +227 -4
  48. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  49. package/dist/cli/__tests__/update.test.js +72 -1
  50. package/dist/cli/__tests__/update.test.js.map +1 -1
  51. package/dist/cli/__tests__/version-sync-contract.test.js +4 -0
  52. package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
  53. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -1
  54. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  55. package/dist/cli/api.d.ts +26 -0
  56. package/dist/cli/api.d.ts.map +1 -0
  57. package/dist/cli/api.js +153 -0
  58. package/dist/cli/api.js.map +1 -0
  59. package/dist/cli/codex-feature-probe.d.ts +5 -0
  60. package/dist/cli/codex-feature-probe.d.ts.map +1 -1
  61. package/dist/cli/codex-feature-probe.js +13 -7
  62. package/dist/cli/codex-feature-probe.js.map +1 -1
  63. package/dist/cli/doctor.d.ts +7 -0
  64. package/dist/cli/doctor.d.ts.map +1 -1
  65. package/dist/cli/doctor.js +119 -10
  66. package/dist/cli/doctor.js.map +1 -1
  67. package/dist/cli/explore.d.ts +2 -0
  68. package/dist/cli/explore.d.ts.map +1 -1
  69. package/dist/cli/explore.js +43 -1
  70. package/dist/cli/explore.js.map +1 -1
  71. package/dist/cli/index.d.ts +12 -4
  72. package/dist/cli/index.d.ts.map +1 -1
  73. package/dist/cli/index.js +460 -87
  74. package/dist/cli/index.js.map +1 -1
  75. package/dist/cli/native-assets.d.ts +2 -1
  76. package/dist/cli/native-assets.d.ts.map +1 -1
  77. package/dist/cli/native-assets.js +1 -0
  78. package/dist/cli/native-assets.js.map +1 -1
  79. package/dist/cli/plugin-marketplace.d.ts +2 -0
  80. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  81. package/dist/cli/plugin-marketplace.js +15 -1
  82. package/dist/cli/plugin-marketplace.js.map +1 -1
  83. package/dist/cli/setup.d.ts.map +1 -1
  84. package/dist/cli/setup.js +71 -11
  85. package/dist/cli/setup.js.map +1 -1
  86. package/dist/cli/sparkshell.d.ts +7 -1
  87. package/dist/cli/sparkshell.d.ts.map +1 -1
  88. package/dist/cli/sparkshell.js +31 -4
  89. package/dist/cli/sparkshell.js.map +1 -1
  90. package/dist/cli/ultragoal.d.ts +1 -1
  91. package/dist/cli/ultragoal.d.ts.map +1 -1
  92. package/dist/cli/ultragoal.js +184 -10
  93. package/dist/cli/ultragoal.js.map +1 -1
  94. package/dist/cli/update.d.ts +2 -0
  95. package/dist/cli/update.d.ts.map +1 -1
  96. package/dist/cli/update.js +14 -3
  97. package/dist/cli/update.js.map +1 -1
  98. package/dist/compat/__tests__/doctor-contract.test.js +3 -0
  99. package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
  100. package/dist/config/__tests__/codex-feature-flags.test.js +11 -1
  101. package/dist/config/__tests__/codex-feature-flags.test.js.map +1 -1
  102. package/dist/config/__tests__/codex-hooks.test.js +19 -8
  103. package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
  104. package/dist/config/__tests__/commit-lore-guard.test.d.ts +2 -0
  105. package/dist/config/__tests__/commit-lore-guard.test.d.ts.map +1 -0
  106. package/dist/config/__tests__/commit-lore-guard.test.js +20 -0
  107. package/dist/config/__tests__/commit-lore-guard.test.js.map +1 -0
  108. package/dist/config/codex-feature-flags.d.ts +4 -0
  109. package/dist/config/codex-feature-flags.d.ts.map +1 -1
  110. package/dist/config/codex-feature-flags.js +4 -0
  111. package/dist/config/codex-feature-flags.js.map +1 -1
  112. package/dist/config/codex-hooks.js +6 -6
  113. package/dist/config/codex-hooks.js.map +1 -1
  114. package/dist/config/commit-lore-guard.d.ts +1 -0
  115. package/dist/config/commit-lore-guard.d.ts.map +1 -1
  116. package/dist/config/commit-lore-guard.js +29 -3
  117. package/dist/config/commit-lore-guard.js.map +1 -1
  118. package/dist/config/generator.d.ts +3 -1
  119. package/dist/config/generator.d.ts.map +1 -1
  120. package/dist/config/generator.js +114 -10
  121. package/dist/config/generator.js.map +1 -1
  122. package/dist/goal-workflows/codex-goal-snapshot.d.ts +1 -0
  123. package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
  124. package/dist/goal-workflows/codex-goal-snapshot.js +5 -1
  125. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  126. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +10 -6
  127. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  128. package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts +2 -0
  129. package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts.map +1 -0
  130. package/dist/hooks/__tests__/best-practice-research-skill.test.js +27 -0
  131. package/dist/hooks/__tests__/best-practice-research-skill.test.js.map +1 -0
  132. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +1 -1
  133. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +13 -11
  134. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
  135. package/dist/hooks/__tests__/deep-interview-contract.test.js +4 -3
  136. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  137. package/dist/hooks/__tests__/keyword-detector.test.js +15 -3
  138. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  139. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +6 -0
  140. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  141. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +33 -0
  142. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  143. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +4 -0
  144. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
  145. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +26 -3
  146. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
  147. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  148. package/dist/hooks/extensibility/dispatcher.js +29 -14
  149. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  150. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  151. package/dist/hooks/keyword-detector.js +8 -3
  152. package/dist/hooks/keyword-detector.js.map +1 -1
  153. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  154. package/dist/hooks/keyword-registry.js +1 -0
  155. package/dist/hooks/keyword-registry.js.map +1 -1
  156. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  157. package/dist/hooks/prompt-guidance-contract.js +3 -2
  158. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  159. package/dist/hud/__tests__/hud-tmux-injection.test.js +14 -8
  160. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
  161. package/dist/hud/__tests__/reconcile.test.js +4 -4
  162. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  163. package/dist/hud/__tests__/resource-leak-watch.test.d.ts +2 -0
  164. package/dist/hud/__tests__/resource-leak-watch.test.d.ts.map +1 -0
  165. package/dist/hud/__tests__/resource-leak-watch.test.js +28 -0
  166. package/dist/hud/__tests__/resource-leak-watch.test.js.map +1 -0
  167. package/dist/hud/__tests__/tmux.test.js +23 -18
  168. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  169. package/dist/hud/index.d.ts +1 -1
  170. package/dist/hud/index.d.ts.map +1 -1
  171. package/dist/hud/index.js +10 -4
  172. package/dist/hud/index.js.map +1 -1
  173. package/dist/hud/tmux.d.ts.map +1 -1
  174. package/dist/hud/tmux.js +9 -8
  175. package/dist/hud/tmux.js.map +1 -1
  176. package/dist/mcp/__tests__/bootstrap.test.js +75 -1
  177. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  178. package/dist/mcp/bootstrap.d.ts +3 -1
  179. package/dist/mcp/bootstrap.d.ts.map +1 -1
  180. package/dist/mcp/bootstrap.js +71 -2
  181. package/dist/mcp/bootstrap.js.map +1 -1
  182. package/dist/notifications/__tests__/http-client-resource.test.d.ts +2 -0
  183. package/dist/notifications/__tests__/http-client-resource.test.d.ts.map +1 -0
  184. package/dist/notifications/__tests__/http-client-resource.test.js +41 -0
  185. package/dist/notifications/__tests__/http-client-resource.test.js.map +1 -0
  186. package/dist/notifications/__tests__/verbosity.test.js +20 -0
  187. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  188. package/dist/notifications/config.d.ts.map +1 -1
  189. package/dist/notifications/config.js +6 -3
  190. package/dist/notifications/config.js.map +1 -1
  191. package/dist/notifications/http-client.d.ts.map +1 -1
  192. package/dist/notifications/http-client.js +78 -27
  193. package/dist/notifications/http-client.js.map +1 -1
  194. package/dist/notifications/types.d.ts +2 -0
  195. package/dist/notifications/types.d.ts.map +1 -1
  196. package/dist/openclaw/__tests__/dispatcher.test.js +49 -1
  197. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  198. package/dist/openclaw/dispatcher.d.ts +7 -4
  199. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  200. package/dist/openclaw/dispatcher.js +32 -69
  201. package/dist/openclaw/dispatcher.js.map +1 -1
  202. package/dist/pipeline/__tests__/orchestrator.test.js +65 -3
  203. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  204. package/dist/pipeline/__tests__/stages.test.js +50 -5
  205. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  206. package/dist/pipeline/index.d.ts +8 -2
  207. package/dist/pipeline/index.d.ts.map +1 -1
  208. package/dist/pipeline/index.js +5 -2
  209. package/dist/pipeline/index.js.map +1 -1
  210. package/dist/pipeline/orchestrator.d.ts +5 -4
  211. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  212. package/dist/pipeline/orchestrator.js +56 -15
  213. package/dist/pipeline/orchestrator.js.map +1 -1
  214. package/dist/pipeline/stages/code-review.d.ts +2 -2
  215. package/dist/pipeline/stages/code-review.d.ts.map +1 -1
  216. package/dist/pipeline/stages/code-review.js +5 -3
  217. package/dist/pipeline/stages/code-review.js.map +1 -1
  218. package/dist/pipeline/stages/deep-interview.d.ts +15 -0
  219. package/dist/pipeline/stages/deep-interview.d.ts.map +1 -0
  220. package/dist/pipeline/stages/deep-interview.js +32 -0
  221. package/dist/pipeline/stages/deep-interview.js.map +1 -0
  222. package/dist/pipeline/stages/ralph-verify.d.ts +5 -5
  223. package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -1
  224. package/dist/pipeline/stages/ralph-verify.js +2 -2
  225. package/dist/pipeline/stages/ralph-verify.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/scripts/__tests__/codex-native-hook.test.js +1488 -117
  238. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  239. package/dist/scripts/__tests__/notify-dispatcher.test.js +183 -1
  240. package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
  241. package/dist/scripts/__tests__/smoke-packed-install.test.js +27 -2
  242. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  243. package/dist/scripts/__tests__/verify-native-agents.test.js +16 -1
  244. package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
  245. package/dist/scripts/build-api.d.ts +2 -0
  246. package/dist/scripts/build-api.d.ts.map +1 -0
  247. package/dist/scripts/build-api.js +44 -0
  248. package/dist/scripts/build-api.js.map +1 -0
  249. package/dist/scripts/cleanup-explore-harness.js +1 -0
  250. package/dist/scripts/cleanup-explore-harness.js.map +1 -1
  251. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  252. package/dist/scripts/codex-native-hook.js +364 -16
  253. package/dist/scripts/codex-native-hook.js.map +1 -1
  254. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  255. package/dist/scripts/codex-native-pre-post.js +98 -25
  256. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  257. package/dist/scripts/notify-dispatcher.js +88 -0
  258. package/dist/scripts/notify-dispatcher.js.map +1 -1
  259. package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
  260. package/dist/scripts/notify-hook/process-runner.js +39 -17
  261. package/dist/scripts/notify-hook/process-runner.js.map +1 -1
  262. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  263. package/dist/scripts/notify-hook/team-dispatch.js +36 -14
  264. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  265. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  266. package/dist/scripts/notify-hook/team-leader-nudge.js +26 -11
  267. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  268. package/dist/scripts/notify-hook/team-tmux-guard.d.ts +2 -1
  269. package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
  270. package/dist/scripts/notify-hook/team-tmux-guard.js +45 -1
  271. package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
  272. package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
  273. package/dist/scripts/notify-hook/team-worker-stop.js +27 -14
  274. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
  275. package/dist/scripts/run-provider-advisor.js +9 -3
  276. package/dist/scripts/run-provider-advisor.js.map +1 -1
  277. package/dist/scripts/smoke-packed-install.d.ts +4 -1
  278. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  279. package/dist/scripts/smoke-packed-install.js +101 -1
  280. package/dist/scripts/smoke-packed-install.js.map +1 -1
  281. package/dist/scripts/sync-plugin-mirror.js +2 -2
  282. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  283. package/dist/scripts/verify-native-agents.js +2 -2
  284. package/dist/scripts/verify-native-agents.js.map +1 -1
  285. package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts +2 -0
  286. package/dist/sidecar/__tests__/resource-leak-watch.test.d.ts.map +1 -0
  287. package/dist/sidecar/__tests__/resource-leak-watch.test.js +38 -0
  288. package/dist/sidecar/__tests__/resource-leak-watch.test.js.map +1 -0
  289. package/dist/sidecar/index.d.ts +1 -1
  290. package/dist/sidecar/index.d.ts.map +1 -1
  291. package/dist/sidecar/index.js +29 -12
  292. package/dist/sidecar/index.js.map +1 -1
  293. package/dist/state/__tests__/operations-ralph-phase.test.js +88 -1
  294. package/dist/state/__tests__/operations-ralph-phase.test.js.map +1 -1
  295. package/dist/state/operations.d.ts.map +1 -1
  296. package/dist/state/operations.js +11 -0
  297. package/dist/state/operations.js.map +1 -1
  298. package/dist/team/__tests__/runtime.test.js +2 -2
  299. package/dist/team/__tests__/runtime.test.js.map +1 -1
  300. package/dist/team/__tests__/tmux-session.test.js +207 -22
  301. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  302. package/dist/team/tmux-session.d.ts +1 -0
  303. package/dist/team/tmux-session.d.ts.map +1 -1
  304. package/dist/team/tmux-session.js +73 -28
  305. package/dist/team/tmux-session.js.map +1 -1
  306. package/dist/ultragoal/__tests__/artifacts.test.js +714 -10
  307. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  308. package/dist/ultragoal/__tests__/docs-contract.test.js +57 -1
  309. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  310. package/dist/ultragoal/__tests__/steering-fixtures.d.ts +68 -0
  311. package/dist/ultragoal/__tests__/steering-fixtures.d.ts.map +1 -0
  312. package/dist/ultragoal/__tests__/steering-fixtures.js +259 -0
  313. package/dist/ultragoal/__tests__/steering-fixtures.js.map +1 -0
  314. package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts +2 -0
  315. package/dist/ultragoal/__tests__/steering-fixtures.test.d.ts.map +1 -0
  316. package/dist/ultragoal/__tests__/steering-fixtures.test.js +65 -0
  317. package/dist/ultragoal/__tests__/steering-fixtures.test.js.map +1 -0
  318. package/dist/ultragoal/artifacts.d.ts +97 -2
  319. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  320. package/dist/ultragoal/artifacts.js +811 -256
  321. package/dist/ultragoal/artifacts.js.map +1 -1
  322. package/dist/utils/__tests__/sleep-resource.test.d.ts +2 -0
  323. package/dist/utils/__tests__/sleep-resource.test.d.ts.map +1 -0
  324. package/dist/utils/__tests__/sleep-resource.test.js +39 -0
  325. package/dist/utils/__tests__/sleep-resource.test.js.map +1 -0
  326. package/dist/utils/sleep.d.ts.map +1 -1
  327. package/dist/utils/sleep.js +17 -6
  328. package/dist/utils/sleep.js.map +1 -1
  329. package/dist/verification/__tests__/ci-rust-gates.test.js +85 -10
  330. package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
  331. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +1 -0
  332. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
  333. package/package.json +5 -3
  334. package/plugins/oh-my-codex/.codex-plugin/plugin.json +4 -3
  335. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +56 -0
  336. package/plugins/oh-my-codex/hooks/hooks.json +77 -0
  337. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +77 -47
  338. package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +83 -0
  339. package/plugins/oh-my-codex/skills/cancel/SKILL.md +2 -2
  340. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +9 -8
  341. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
  342. package/plugins/oh-my-codex/skills/pipeline/SKILL.md +22 -11
  343. package/plugins/oh-my-codex/skills/plan/SKILL.md +8 -8
  344. package/plugins/oh-my-codex/skills/ralph/SKILL.md +7 -0
  345. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -5
  346. package/plugins/oh-my-codex/skills/team/SKILL.md +1 -1
  347. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +38 -4
  348. package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +1 -1
  349. package/prompts/planner.md +1 -1
  350. package/prompts/researcher.md +15 -10
  351. package/skills/autopilot/SKILL.md +77 -47
  352. package/skills/best-practice-research/SKILL.md +83 -0
  353. package/skills/cancel/SKILL.md +2 -2
  354. package/skills/deep-interview/SKILL.md +9 -8
  355. package/skills/omx-setup/SKILL.md +1 -1
  356. package/skills/pipeline/SKILL.md +22 -11
  357. package/skills/plan/SKILL.md +8 -8
  358. package/skills/ralph/SKILL.md +7 -0
  359. package/skills/ralplan/SKILL.md +5 -5
  360. package/skills/team/SKILL.md +1 -1
  361. package/skills/ultragoal/SKILL.md +38 -4
  362. package/skills/ultrawork/SKILL.md +1 -1
  363. package/src/scripts/__tests__/codex-native-hook.test.ts +1758 -166
  364. package/src/scripts/__tests__/notify-dispatcher.test.ts +223 -1
  365. package/src/scripts/__tests__/smoke-packed-install.test.ts +39 -2
  366. package/src/scripts/__tests__/verify-native-agents.test.ts +21 -1
  367. package/src/scripts/build-api.ts +48 -0
  368. package/src/scripts/cleanup-explore-harness.ts +1 -0
  369. package/src/scripts/codex-native-hook.ts +416 -18
  370. package/src/scripts/codex-native-pre-post.ts +119 -25
  371. package/src/scripts/notify-dispatcher.ts +97 -0
  372. package/src/scripts/notify-hook/process-runner.ts +40 -16
  373. package/src/scripts/notify-hook/team-dispatch.ts +36 -13
  374. package/src/scripts/notify-hook/team-leader-nudge.ts +25 -11
  375. package/src/scripts/notify-hook/team-tmux-guard.ts +49 -0
  376. package/src/scripts/notify-hook/team-worker-stop.ts +24 -13
  377. package/src/scripts/run-provider-advisor.ts +11 -3
  378. package/src/scripts/smoke-packed-install.ts +107 -0
  379. package/src/scripts/sync-plugin-mirror.ts +3 -3
  380. package/src/scripts/verify-native-agents.ts +2 -2
  381. package/templates/catalog-manifest.json +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"version-sync-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/version-sync-contract.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-sync-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/version-sync-contract.test.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ const fallbackWatcherSource = readFileSync(join(repoRoot, 'src', 'scripts', 'not
14
14
  describe('Windows popup loop contracts', () => {
15
15
  it('keeps Windows helper spawns hidden', () => {
16
16
  assert.match(cliIndex, /buildWindowsMsysBackgroundHelperBootstrapScript/);
17
- assert.match(cliIndex, /const pidPath = notifyFallbackPidPath\(cwd\);\s+await reapStaleNotifyFallbackWatcher\(pidPath\);\s+if \(!shouldEnableNotifyFallbackWatcher\(process\.env,\s*process\.platform\)\) return;/);
17
+ assert.match(cliIndex, /const pidPath = notifyFallbackPidPath\(cwd\);\s+const reapResult = await reapStaleNotifyFallbackWatcher\(pidPath\);\s+if \(reapResult === "recent_active"\) return;\s+if \(!shouldEnableNotifyFallbackWatcher\(process\.env,\s*process\.platform\)\) return;/);
18
18
  assert.match(cliIndex, /detached:\s*shouldDetachBackgroundHelper\(options\.env,\s*process\.platform\),\s*[\s\S]*?stdio:\s*"ignore",\s*[\s\S]*?windowsHide:\s*true/);
19
19
  assert.match(cliIndex, /spawnSync\([\s\S]*?buildWindowsMsysBackgroundHelperBootstrapScript\([\s\S]*?windowsHide:\s*true/);
20
20
  assert.match(cliIndex, /detached:\s*true,\s*stdio:\s*'ignore',\s*windowsHide:\s*true/);
@@ -1 +1 @@
1
- {"version":3,"file":"windows-popup-loop-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/windows-popup-loop-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/G,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;AAEpH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iDAAiD,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CACV,QAAQ,EACR,2LAA2L,CAC5L,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,2IAA2I,CAAC,CAAC;QACpK,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iGAAiG,CAAC,CAAC;QAC1H,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,8DAA8D,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,0JAA0J,CAAC,CAAC;QACnL,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,kHAAkH,CAAC,CAAC;QAC3I,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,qEAAqE,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,+DAA+D,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,4EAA4E,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,iDAAiD,CAAC,CAAC;QACvF,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"windows-popup-loop-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/windows-popup-loop-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACtF,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/G,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC;AAEpH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iDAAiD,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CACV,QAAQ,EACR,8PAA8P,CAC/P,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,2IAA2I,CAAC,CAAC;QACpK,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iGAAiG,CAAC,CAAC;QAC1H,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,8DAA8D,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,0JAA0J,CAAC,CAAC;QACnL,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,kHAAkH,CAAC,CAAC;QAC3I,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,qEAAqE,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,+DAA+D,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,4EAA4E,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,iDAAiD,CAAC,CAAC;QACvF,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { spawnSync, type SpawnSyncReturns } from 'node:child_process';
2
+ export declare const API_USAGE: string;
3
+ export interface ResolveApiBinaryPathOptions {
4
+ cwd?: string;
5
+ env?: NodeJS.ProcessEnv;
6
+ packageRoot?: string;
7
+ platform?: NodeJS.Platform;
8
+ arch?: string;
9
+ linuxLibcPreference?: readonly ('musl' | 'glibc')[];
10
+ exists?: (path: string) => boolean;
11
+ }
12
+ export interface RunApiBinaryOptions {
13
+ cwd?: string;
14
+ env?: NodeJS.ProcessEnv;
15
+ spawnImpl?: typeof spawnSync;
16
+ }
17
+ export declare function apiBinaryName(platform?: NodeJS.Platform): string;
18
+ export declare function packagedApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform, arch?: string, libc?: 'musl' | 'glibc'): string;
19
+ export declare function packagedApiBinaryCandidatePaths(packageRoot?: string, platform?: NodeJS.Platform, arch?: string, env?: NodeJS.ProcessEnv, linuxLibcPreference?: readonly ('musl' | 'glibc')[]): string[];
20
+ export declare function repoLocalApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform): string;
21
+ export declare function nestedRepoLocalApiBinaryPath(packageRoot?: string, platform?: NodeJS.Platform): string;
22
+ export declare function resolveApiBinaryPath(options?: ResolveApiBinaryPathOptions): string;
23
+ export declare function resolveApiBinaryPathWithHydration(options?: ResolveApiBinaryPathOptions): Promise<string>;
24
+ export declare function runApiBinary(binaryPath: string, args: readonly string[], options?: RunApiBinaryOptions): SpawnSyncReturns<string>;
25
+ export declare function apiCommand(args: string[]): Promise<void>;
26
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/cli/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAgB5B,eAAO,MAAM,SAAS,QAaV,CAAC;AAEb,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AASD,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAElF;AAED,wBAAgB,qBAAqB,CACnC,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAiB,EACvB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GACtB,MAAM,CAGR;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAiB,EACvB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,GAClD,MAAM,EAAE,CASV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,SAAmB,EAC9B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,MAAM,CA6BtF;AAED,wBAAsB,iCAAiC,CACrD,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAwCjB;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,mBAAwB,GAChC,gBAAgB,CAAC,MAAM,CAAC,CAS1B;AAYD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9D"}
@@ -0,0 +1,153 @@
1
+ import { spawnSync, } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { arch as osArch, constants as osConstants } from 'node:os';
4
+ import { isAbsolute, join, resolve } from 'node:path';
5
+ import { getPackageRoot } from '../utils/package.js';
6
+ import { classifySpawnError } from '../utils/platform-command.js';
7
+ import { API_BIN_ENV as API_BIN_ENV_SHARED, getPackageVersion, hydrateNativeBinary, resolveCachedNativeBinaryCandidatePaths, resolveLinuxNativeLibcPreference, } from './native-assets.js';
8
+ const OMX_API_BIN_ENV = API_BIN_ENV_SHARED;
9
+ export const API_USAGE = [
10
+ 'Usage: omx api <command> [args...]',
11
+ '',
12
+ 'Commands:',
13
+ ' serve [--host 127.0.0.1] [--port N] [--daemon] [--system] [--dry-run]',
14
+ ' status',
15
+ ' stop',
16
+ ' generate text <prompt...> [--state-file path]',
17
+ ' generate image <prompt...> [--state-file path]',
18
+ '',
19
+ 'Runs the native omx-api localhost gateway sidecar and forwards arguments unchanged.',
20
+ 'Note: real-private backend mode is experimental and requires local bearer auth.',
21
+ `Set ${OMX_API_BIN_ENV} to override the native binary path.`,
22
+ ].join('\n');
23
+ function resolveSignalExitCode(signal) {
24
+ if (!signal)
25
+ return 1;
26
+ const signalNumber = osConstants.signals[signal];
27
+ if (typeof signalNumber === 'number' && Number.isFinite(signalNumber))
28
+ return 128 + signalNumber;
29
+ return 1;
30
+ }
31
+ export function apiBinaryName(platform = process.platform) {
32
+ return platform === 'win32' ? 'omx-api.exe' : 'omx-api';
33
+ }
34
+ export function packagedApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), libc) {
35
+ const platformKey = libc ? `${platform}-${arch}-${libc}` : `${platform}-${arch}`;
36
+ return join(packageRoot, 'bin', 'native', platformKey, apiBinaryName(platform));
37
+ }
38
+ export function packagedApiBinaryCandidatePaths(packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), env = process.env, linuxLibcPreference) {
39
+ const candidates = [];
40
+ if (platform === 'linux') {
41
+ for (const libc of linuxLibcPreference ?? resolveLinuxNativeLibcPreference({ env })) {
42
+ candidates.push(packagedApiBinaryPath(packageRoot, platform, arch, libc));
43
+ }
44
+ }
45
+ candidates.push(packagedApiBinaryPath(packageRoot, platform, arch));
46
+ return [...new Set(candidates)];
47
+ }
48
+ export function repoLocalApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform) {
49
+ return join(packageRoot, 'target', 'release', apiBinaryName(platform));
50
+ }
51
+ export function nestedRepoLocalApiBinaryPath(packageRoot = getPackageRoot(), platform = process.platform) {
52
+ return join(packageRoot, 'native', 'omx-api', 'target', 'release', apiBinaryName(platform));
53
+ }
54
+ export function resolveApiBinaryPath(options = {}) {
55
+ const { cwd = process.cwd(), env = process.env, packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), linuxLibcPreference, exists = existsSync, } = options;
56
+ const override = env[OMX_API_BIN_ENV]?.trim();
57
+ if (override)
58
+ return isAbsolute(override) ? override : resolve(cwd, override);
59
+ for (const packaged of packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference)) {
60
+ if (exists(packaged))
61
+ return packaged;
62
+ }
63
+ const repoLocal = repoLocalApiBinaryPath(packageRoot, platform);
64
+ if (exists(repoLocal))
65
+ return repoLocal;
66
+ const nestedRepoLocal = nestedRepoLocalApiBinaryPath(packageRoot, platform);
67
+ if (exists(nestedRepoLocal))
68
+ return nestedRepoLocal;
69
+ const packagedCandidates = packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference);
70
+ throw new Error(`[api] native binary not found. Checked ${packagedCandidates.join(', ')}, ${repoLocal}, and ${nestedRepoLocal}. `
71
+ + `Set ${OMX_API_BIN_ENV} to override the path.`);
72
+ }
73
+ export async function resolveApiBinaryPathWithHydration(options = {}) {
74
+ const { cwd = process.cwd(), env = process.env, packageRoot = getPackageRoot(), platform = process.platform, arch = osArch(), linuxLibcPreference, exists = existsSync, } = options;
75
+ const override = env[OMX_API_BIN_ENV]?.trim();
76
+ if (override)
77
+ return isAbsolute(override) ? override : resolve(cwd, override);
78
+ const version = await getPackageVersion(packageRoot);
79
+ for (const cached of resolveCachedNativeBinaryCandidatePaths('omx-api', version, platform, arch, env, {
80
+ linuxLibcPreference: platform === 'linux'
81
+ ? (linuxLibcPreference ?? resolveLinuxNativeLibcPreference({ env }))
82
+ : undefined,
83
+ })) {
84
+ if (exists(cached))
85
+ return cached;
86
+ }
87
+ for (const packaged of packagedApiBinaryCandidatePaths(packageRoot, platform, arch, env, linuxLibcPreference)) {
88
+ if (exists(packaged))
89
+ return packaged;
90
+ }
91
+ const repoLocal = repoLocalApiBinaryPath(packageRoot, platform);
92
+ if (exists(repoLocal))
93
+ return repoLocal;
94
+ const nestedRepoLocal = nestedRepoLocalApiBinaryPath(packageRoot, platform);
95
+ if (exists(nestedRepoLocal))
96
+ return nestedRepoLocal;
97
+ const hydrated = await hydrateNativeBinary('omx-api', { packageRoot, env, platform, arch });
98
+ if (hydrated)
99
+ return hydrated;
100
+ throw new Error(`[api] native binary not found. Checked cached/native candidates under ${packageRoot}, ${repoLocal}, and ${nestedRepoLocal}. `
101
+ + `Reconnect to the network so OMX can fetch the release asset, or set ${OMX_API_BIN_ENV} to override the path.`);
102
+ }
103
+ export function runApiBinary(binaryPath, args, options = {}) {
104
+ const { cwd = process.cwd(), env = process.env, spawnImpl = spawnSync } = options;
105
+ const spawnOptions = {
106
+ cwd,
107
+ env,
108
+ stdio: ['ignore', 'pipe', 'pipe'],
109
+ encoding: 'utf-8',
110
+ };
111
+ return spawnImpl(binaryPath, [...args], spawnOptions);
112
+ }
113
+ function writeApiResultOutput(result) {
114
+ if (typeof result.stdout === 'string' && result.stdout.length > 0)
115
+ process.stdout.write(result.stdout);
116
+ if (typeof result.stderr === 'string' && result.stderr.length > 0)
117
+ process.stderr.write(result.stderr);
118
+ }
119
+ function isHelpRequest(args) {
120
+ if (args.length === 0)
121
+ return true;
122
+ return args.includes('--help') || args.includes('-h');
123
+ }
124
+ export async function apiCommand(args) {
125
+ if (isHelpRequest(args)) {
126
+ console.log(API_USAGE);
127
+ return;
128
+ }
129
+ let binaryPath;
130
+ try {
131
+ binaryPath = await resolveApiBinaryPathWithHydration();
132
+ }
133
+ catch (error) {
134
+ throw error;
135
+ }
136
+ const result = runApiBinary(binaryPath, args);
137
+ if (result.error) {
138
+ const errno = result.error;
139
+ const kind = classifySpawnError(errno);
140
+ if (kind === 'missing')
141
+ throw new Error(`[api] failed to launch native binary: executable not found (${binaryPath})`);
142
+ if (kind === 'blocked')
143
+ throw new Error(`[api] failed to launch native binary: executable is blocked (${errno.code || 'blocked'})`);
144
+ throw new Error(`[api] failed to launch native binary: ${errno.message}`);
145
+ }
146
+ writeApiResultOutput(result);
147
+ if (result.status !== 0) {
148
+ process.exitCode = typeof result.status === 'number'
149
+ ? result.status
150
+ : resolveSignalExitCode(result.signal);
151
+ }
152
+ }
153
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/cli/api.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,10 @@ export interface CodexFeatureProbeOptions {
5
5
  }
6
6
  export declare function probeInstalledCodexFeatureList(): string | null;
7
7
  export declare function probeInstalledCodexVersion(): string | null;
8
+ export interface CodexHookFeatureSupport {
9
+ hookFeatureFlag: CodexHookFeatureFlag;
10
+ pluginScopedHooks: boolean;
11
+ }
12
+ export declare function resolveCodexHookFeatureSupportForCli(options?: CodexFeatureProbeOptions): CodexHookFeatureSupport;
8
13
  export declare function resolveCodexHookFeatureFlagForCli(options?: CodexFeatureProbeOptions): CodexHookFeatureFlag;
9
14
  //# sourceMappingURL=codex-feature-probe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-feature-probe.d.ts","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAM9D;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAM1D;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAStB"}
1
+ {"version":3,"file":"codex-feature-probe.d.ts","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAM9D;AAED,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,IAAI,CAM1D;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,oBAAoB,CAAC;IACtC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,oCAAoC,CAClD,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAYzB;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAEtB"}
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from "child_process";
2
- import { DEFAULT_CODEX_HOOK_FEATURE_FLAG, resolveCodexHookFeatureFlag, } from "../config/codex-feature-flags.js";
2
+ import { DEFAULT_CODEX_HOOK_FEATURE_FLAG, resolveCodexHookFeatureFlag, supportsCodexPluginScopedHooks, } from "../config/codex-feature-flags.js";
3
3
  export function probeInstalledCodexFeatureList() {
4
4
  const result = spawnSync("codex", ["features", "list"], {
5
5
  encoding: "utf-8",
@@ -16,13 +16,19 @@ export function probeInstalledCodexVersion() {
16
16
  return null;
17
17
  return [result.stdout, result.stderr].filter(Boolean).join("\n") || null;
18
18
  }
19
- export function resolveCodexHookFeatureFlagForCli(options = {}) {
19
+ export function resolveCodexHookFeatureSupportForCli(options = {}) {
20
20
  const featuresListOutput = options.codexFeaturesProbe?.() ?? probeInstalledCodexFeatureList();
21
21
  const versionOutput = options.codexVersionProbe?.() ?? probeInstalledCodexVersion();
22
- return resolveCodexHookFeatureFlag({
23
- featuresListOutput,
24
- versionOutput,
25
- fallback: DEFAULT_CODEX_HOOK_FEATURE_FLAG,
26
- });
22
+ return {
23
+ hookFeatureFlag: resolveCodexHookFeatureFlag({
24
+ featuresListOutput,
25
+ versionOutput,
26
+ fallback: DEFAULT_CODEX_HOOK_FEATURE_FLAG,
27
+ }),
28
+ pluginScopedHooks: supportsCodexPluginScopedHooks({ featuresListOutput }),
29
+ };
30
+ }
31
+ export function resolveCodexHookFeatureFlagForCli(options = {}) {
32
+ return resolveCodexHookFeatureSupportForCli(options).hookFeatureFlag;
27
33
  }
28
34
  //# sourceMappingURL=codex-feature-probe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-feature-probe.js","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAE5B,MAAM,kCAAkC,CAAC;AAO1C,MAAM,UAAU,8BAA8B;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;QACtD,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;QAC/C,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAAoC,EAAE;IAEtC,MAAM,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,EAAE,EAAE,IAAI,8BAA8B,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,EAAE,IAAI,0BAA0B,EAAE,CAAC;IACpF,OAAO,2BAA2B,CAAC;QACjC,kBAAkB;QAClB,aAAa;QACb,QAAQ,EAAE,+BAA+B;KAC1C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"codex-feature-probe.js","sourceRoot":"","sources":["../../src/cli/codex-feature-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAE/B,MAAM,kCAAkC,CAAC;AAO1C,MAAM,UAAU,8BAA8B;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;QACtD,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;QAC/C,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAOD,MAAM,UAAU,oCAAoC,CAClD,UAAoC,EAAE;IAEtC,MAAM,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,EAAE,EAAE,IAAI,8BAA8B,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,EAAE,IAAI,0BAA0B,EAAE,CAAC;IACpF,OAAO;QACL,eAAe,EAAE,2BAA2B,CAAC;YAC3C,kBAAkB;YAClB,aAAa;YACb,QAAQ,EAAE,+BAA+B;SAC1C,CAAC;QACF,iBAAiB,EAAE,8BAA8B,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAAoC,EAAE;IAEtC,OAAO,oCAAoC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC;AACvE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * omx doctor - Validate oh-my-codex installation
3
3
  */
4
+ import { spawnSync } from "child_process";
4
5
  interface DoctorOptions {
5
6
  verbose?: boolean;
6
7
  force?: boolean;
@@ -12,8 +13,14 @@ interface Check {
12
13
  status: "pass" | "warn" | "fail";
13
14
  message: string;
14
15
  }
16
+ interface NativeHookDistSmokeOptions {
17
+ packageRoot?: string;
18
+ nodePath?: string;
19
+ runner?: typeof spawnSync;
20
+ }
15
21
  export declare function doctor(options?: DoctorOptions): Promise<void>;
16
22
  export declare function checkExploreHarness(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): Check;
23
+ export declare function checkNativeHookDistSmoke(options?: NativeHookDistSmokeOptions): Promise<Check>;
17
24
  export declare function classifyPostCompactHookStdout(stdout: string): Check | null;
18
25
  export {};
19
26
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmEH,UAAU,aAAa;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,KAAK;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CAChB;AAyDD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IvE;AAuYD,wBAAgB,mBAAmB,CAClC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,KAAK,CAoFP;AAoUD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAmB1E"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA+D1C,UAAU,aAAa;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,KAAK;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,SAAS,CAAC;CAC1B;AAyDD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8IvE;AAuYD,wBAAgB,mBAAmB,CAClC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,KAAK,CAoFP;AAwWD,wBAAsB,wBAAwB,CAC7C,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,KAAK,CAAC,CA2EhB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAmB1E"}
@@ -95,6 +95,7 @@ export async function doctor(options = {}) {
95
95
  checks.push(contextRecommendationCheck);
96
96
  // Check 4.25: Native hooks coverage
97
97
  checks.push(await checkNativeHooks(paths.hooksPath, paths.configPath));
98
+ checks.push(await checkNativeHookDistSmoke());
98
99
  if (options.verbose) {
99
100
  const postCompactRuntimeCheck = await checkNativePostCompactHookRuntime(paths.hooksPath, cwd, paths.codexHomeDir);
100
101
  if (postCompactRuntimeCheck)
@@ -714,21 +715,40 @@ async function checkExploreRouting(configPath) {
714
715
  };
715
716
  }
716
717
  }
718
+ const LORE_COMMIT_GUARD_EXPLICIT_OPT_OUT_VALUES = new Set([
719
+ "0",
720
+ "false",
721
+ "no",
722
+ "off",
723
+ ]);
717
724
  async function checkLoreCommitGuard(configPath) {
718
725
  const envValue = process.env[OMX_LORE_COMMIT_GUARD_ENV];
719
- if (typeof envValue === "string" &&
720
- !isLoreCommitGuardEnabled(process.env)) {
726
+ if (typeof envValue === "string") {
727
+ if (isLoreCommitGuardEnabled(process.env)) {
728
+ return {
729
+ name: "Lore commit guard",
730
+ status: "pass",
731
+ message: "enabled by environment opt-in",
732
+ };
733
+ }
734
+ if (!isExplicitLoreCommitGuardOptOut(envValue)) {
735
+ return {
736
+ name: "Lore commit guard",
737
+ status: "warn",
738
+ message: "invalid environment value; Lore commit enforcement is disabled until OMX_LORE_COMMIT_GUARD is set to 1, true, yes, or on",
739
+ };
740
+ }
721
741
  return {
722
742
  name: "Lore commit guard",
723
- status: "warn",
724
- message: "disabled by environment override; enable with OMX_LORE_COMMIT_GUARD=1 (or remove the explicit opt-out)",
743
+ status: "pass",
744
+ message: "disabled by environment/default opt-out; enable with OMX_LORE_COMMIT_GUARD=1",
725
745
  };
726
746
  }
727
747
  if (!existsSync(configPath)) {
728
748
  return {
729
749
  name: "Lore commit guard",
730
750
  status: "pass",
731
- message: "enabled by default (config.toml not found yet)",
751
+ message: "disabled by default (config.toml not found yet)",
732
752
  };
733
753
  }
734
754
  try {
@@ -736,20 +756,33 @@ async function checkLoreCommitGuard(configPath) {
736
756
  const parsed = parseToml(content);
737
757
  const configuredValue = parsed?.shell_environment_policy?.set?.[OMX_LORE_COMMIT_GUARD_ENV] ??
738
758
  parsed?.env?.[OMX_LORE_COMMIT_GUARD_ENV];
739
- if (typeof configuredValue === "string" &&
740
- !isLoreCommitGuardEnabled({
759
+ if (typeof configuredValue === "string") {
760
+ if (isLoreCommitGuardEnabled({
741
761
  [OMX_LORE_COMMIT_GUARD_ENV]: configuredValue,
742
762
  })) {
763
+ return {
764
+ name: "Lore commit guard",
765
+ status: "pass",
766
+ message: "enabled by config.toml opt-in",
767
+ };
768
+ }
769
+ if (!isExplicitLoreCommitGuardOptOut(configuredValue)) {
770
+ return {
771
+ name: "Lore commit guard",
772
+ status: "warn",
773
+ message: 'invalid config.toml value; Lore commit enforcement is disabled until OMX_LORE_COMMIT_GUARD = "1" (or true/yes/on) is set under [shell_environment_policy.set]',
774
+ };
775
+ }
743
776
  return {
744
777
  name: "Lore commit guard",
745
- status: "warn",
746
- message: 'disabled in config.toml; set OMX_LORE_COMMIT_GUARD = "1" under [shell_environment_policy.set] to restore default Lore commit enforcement',
778
+ status: "pass",
779
+ message: 'disabled in config.toml/default opt-out; set OMX_LORE_COMMIT_GUARD = "1" under [shell_environment_policy.set] to enable Lore commit enforcement',
747
780
  };
748
781
  }
749
782
  return {
750
783
  name: "Lore commit guard",
751
784
  status: "pass",
752
- message: "enabled by default",
785
+ message: "disabled by default",
753
786
  };
754
787
  }
755
788
  catch {
@@ -760,6 +793,9 @@ async function checkLoreCommitGuard(configPath) {
760
793
  };
761
794
  }
762
795
  }
796
+ function isExplicitLoreCommitGuardOptOut(value) {
797
+ return LORE_COMMIT_GUARD_EXPLICIT_OPT_OUT_VALUES.has(value.trim().toLowerCase());
798
+ }
763
799
  async function checkNativeHooks(hooksPath, configPath) {
764
800
  if (!existsSync(hooksPath)) {
765
801
  if (existsSync(configPath)) {
@@ -817,6 +853,79 @@ async function checkNativeHooks(hooksPath, configPath) {
817
853
  };
818
854
  }
819
855
  }
856
+ export async function checkNativeHookDistSmoke(options = {}) {
857
+ const packageRoot = options.packageRoot ?? getPackageRoot();
858
+ const nodePath = options.nodePath ?? process.execPath;
859
+ const runner = options.runner ?? spawnSync;
860
+ const scriptPath = join(packageRoot, "dist", "scripts", "codex-native-hook.js");
861
+ const packageJsonPath = join(packageRoot, "package.json");
862
+ let packageVersion = "current";
863
+ try {
864
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
865
+ if (typeof packageJson.version === "string" && packageJson.version.trim()) {
866
+ packageVersion = packageJson.version.trim();
867
+ }
868
+ }
869
+ catch {
870
+ // Keep the generic recovery copy when package metadata is not readable.
871
+ }
872
+ if (!existsSync(scriptPath)) {
873
+ return {
874
+ name: "Native hook dist smoke",
875
+ status: "fail",
876
+ message: `installed native hook script is missing at ${scriptPath}; reinstall oh-my-codex and run "omx setup --force"`,
877
+ };
878
+ }
879
+ const smokeCwd = await mkdtemp(join(tmpdir(), "omx-doctor-native-hook-dist-"));
880
+ try {
881
+ const payload = JSON.stringify({
882
+ hook_event_name: "UserPromptSubmit",
883
+ session_id: "omx-doctor-native-hook-dist-smoke",
884
+ transcript_path: join(smokeCwd, "nonexistent-transcript.jsonl"),
885
+ cwd: smokeCwd,
886
+ prompt: "doctor smoke test",
887
+ });
888
+ const result = runner(nodePath, [scriptPath], {
889
+ cwd: smokeCwd,
890
+ encoding: "utf-8",
891
+ env: {
892
+ ...process.env,
893
+ OMX_NATIVE_HOOK_DOCTOR_SMOKE: "1",
894
+ OMX_ROOT: join(smokeCwd, ".omx-doctor-root"),
895
+ OMX_SESSION_ID: "omx-doctor-native-hook-dist-smoke",
896
+ OMX_SOURCE_CWD: smokeCwd,
897
+ OMX_STARTUP_CWD: smokeCwd,
898
+ },
899
+ input: payload,
900
+ timeout: 5_000,
901
+ });
902
+ if (result.error) {
903
+ return {
904
+ name: "Native hook dist smoke",
905
+ status: "fail",
906
+ message: `installed native hook dist smoke failed to run (${result.error.message}); reinstall oh-my-codex and run "omx setup --force"`,
907
+ };
908
+ }
909
+ if (result.status !== 0) {
910
+ const stderr = (result.stderr || "").trim();
911
+ const stdout = (result.stdout || "").trim();
912
+ const detail = stderr || stdout || `exit ${result.status}`;
913
+ return {
914
+ name: "Native hook dist smoke",
915
+ status: "fail",
916
+ message: `installed native hook dist failed a minimal UserPromptSubmit smoke (${detail}); reinstall with "npm install -g oh-my-codex@${packageVersion} --force --min-release-age=0 --before=" and then run "omx setup --force"`,
917
+ };
918
+ }
919
+ return {
920
+ name: "Native hook dist smoke",
921
+ status: "pass",
922
+ message: "installed dist/scripts/codex-native-hook.js parsed and accepted a minimal UserPromptSubmit payload",
923
+ };
924
+ }
925
+ finally {
926
+ await rm(smokeCwd, { recursive: true, force: true });
927
+ }
928
+ }
820
929
  export function classifyPostCompactHookStdout(stdout) {
821
930
  const trimmed = stdout.trim();
822
931
  if (trimmed === "")