oh-my-codex 0.20.3 → 0.20.5

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 (661) hide show
  1. package/Cargo.lock +35 -18
  2. package/Cargo.toml +1 -1
  3. package/README.md +2 -2
  4. package/crates/omx-runtime/Cargo.toml +3 -0
  5. package/crates/omx-runtime/src/main.rs +390 -0
  6. package/crates/omx-runtime/tests/execution.rs +264 -0
  7. package/dist/adapt/__tests__/herdr-target.test.d.ts +2 -0
  8. package/dist/adapt/__tests__/herdr-target.test.d.ts.map +1 -0
  9. package/dist/adapt/__tests__/herdr-target.test.js +72 -0
  10. package/dist/adapt/__tests__/herdr-target.test.js.map +1 -0
  11. package/dist/adapt/contracts.d.ts +1 -1
  12. package/dist/adapt/contracts.d.ts.map +1 -1
  13. package/dist/adapt/contracts.js +1 -1
  14. package/dist/adapt/contracts.js.map +1 -1
  15. package/dist/adapt/herdr/__tests__/authority.test.d.ts +2 -0
  16. package/dist/adapt/herdr/__tests__/authority.test.d.ts.map +1 -0
  17. package/dist/adapt/herdr/__tests__/authority.test.js +49 -0
  18. package/dist/adapt/herdr/__tests__/authority.test.js.map +1 -0
  19. package/dist/adapt/herdr/__tests__/bridge.test.d.ts +2 -0
  20. package/dist/adapt/herdr/__tests__/bridge.test.d.ts.map +1 -0
  21. package/dist/adapt/herdr/__tests__/bridge.test.js +176 -0
  22. package/dist/adapt/herdr/__tests__/bridge.test.js.map +1 -0
  23. package/dist/adapt/herdr/__tests__/sanitize.test.d.ts +2 -0
  24. package/dist/adapt/herdr/__tests__/sanitize.test.d.ts.map +1 -0
  25. package/dist/adapt/herdr/__tests__/sanitize.test.js +45 -0
  26. package/dist/adapt/herdr/__tests__/sanitize.test.js.map +1 -0
  27. package/dist/adapt/herdr/__tests__/semantic.test.d.ts +2 -0
  28. package/dist/adapt/herdr/__tests__/semantic.test.d.ts.map +1 -0
  29. package/dist/adapt/herdr/__tests__/semantic.test.js +130 -0
  30. package/dist/adapt/herdr/__tests__/semantic.test.js.map +1 -0
  31. package/dist/adapt/herdr/__tests__/seq-store.test.d.ts +2 -0
  32. package/dist/adapt/herdr/__tests__/seq-store.test.d.ts.map +1 -0
  33. package/dist/adapt/herdr/__tests__/seq-store.test.js +54 -0
  34. package/dist/adapt/herdr/__tests__/seq-store.test.js.map +1 -0
  35. package/dist/adapt/herdr/__tests__/socket-live.test.d.ts +2 -0
  36. package/dist/adapt/herdr/__tests__/socket-live.test.d.ts.map +1 -0
  37. package/dist/adapt/herdr/__tests__/socket-live.test.js +104 -0
  38. package/dist/adapt/herdr/__tests__/socket-live.test.js.map +1 -0
  39. package/dist/adapt/herdr/__tests__/team-map.test.d.ts +2 -0
  40. package/dist/adapt/herdr/__tests__/team-map.test.d.ts.map +1 -0
  41. package/dist/adapt/herdr/__tests__/team-map.test.js +46 -0
  42. package/dist/adapt/herdr/__tests__/team-map.test.js.map +1 -0
  43. package/dist/adapt/herdr/__tests__/transport.test.d.ts +2 -0
  44. package/dist/adapt/herdr/__tests__/transport.test.d.ts.map +1 -0
  45. package/dist/adapt/herdr/__tests__/transport.test.js +160 -0
  46. package/dist/adapt/herdr/__tests__/transport.test.js.map +1 -0
  47. package/dist/adapt/herdr/__tests__/wiring.test.d.ts +2 -0
  48. package/dist/adapt/herdr/__tests__/wiring.test.d.ts.map +1 -0
  49. package/dist/adapt/herdr/__tests__/wiring.test.js +118 -0
  50. package/dist/adapt/herdr/__tests__/wiring.test.js.map +1 -0
  51. package/dist/adapt/herdr/authority.d.ts +34 -0
  52. package/dist/adapt/herdr/authority.d.ts.map +1 -0
  53. package/dist/adapt/herdr/authority.js +71 -0
  54. package/dist/adapt/herdr/authority.js.map +1 -0
  55. package/dist/adapt/herdr/bridge.d.ts +84 -0
  56. package/dist/adapt/herdr/bridge.d.ts.map +1 -0
  57. package/dist/adapt/herdr/bridge.js +222 -0
  58. package/dist/adapt/herdr/bridge.js.map +1 -0
  59. package/dist/adapt/herdr/sanitize.d.ts +20 -0
  60. package/dist/adapt/herdr/sanitize.d.ts.map +1 -0
  61. package/dist/adapt/herdr/sanitize.js +70 -0
  62. package/dist/adapt/herdr/sanitize.js.map +1 -0
  63. package/dist/adapt/herdr/semantic.d.ts +67 -0
  64. package/dist/adapt/herdr/semantic.d.ts.map +1 -0
  65. package/dist/adapt/herdr/semantic.js +170 -0
  66. package/dist/adapt/herdr/semantic.js.map +1 -0
  67. package/dist/adapt/herdr/seq-store.d.ts +32 -0
  68. package/dist/adapt/herdr/seq-store.d.ts.map +1 -0
  69. package/dist/adapt/herdr/seq-store.js +126 -0
  70. package/dist/adapt/herdr/seq-store.js.map +1 -0
  71. package/dist/adapt/herdr/team-map.d.ts +30 -0
  72. package/dist/adapt/herdr/team-map.d.ts.map +1 -0
  73. package/dist/adapt/herdr/team-map.js +37 -0
  74. package/dist/adapt/herdr/team-map.js.map +1 -0
  75. package/dist/adapt/herdr/transport.d.ts +115 -0
  76. package/dist/adapt/herdr/transport.d.ts.map +1 -0
  77. package/dist/adapt/herdr/transport.js +260 -0
  78. package/dist/adapt/herdr/transport.js.map +1 -0
  79. package/dist/adapt/herdr/wiring.d.ts +24 -0
  80. package/dist/adapt/herdr/wiring.d.ts.map +1 -0
  81. package/dist/adapt/herdr/wiring.js +62 -0
  82. package/dist/adapt/herdr/wiring.js.map +1 -0
  83. package/dist/adapt/herdr.d.ts +19 -0
  84. package/dist/adapt/herdr.d.ts.map +1 -0
  85. package/dist/adapt/herdr.js +115 -0
  86. package/dist/adapt/herdr.js.map +1 -0
  87. package/dist/adapt/index.d.ts +4 -0
  88. package/dist/adapt/index.d.ts.map +1 -1
  89. package/dist/adapt/index.js +48 -0
  90. package/dist/adapt/index.js.map +1 -1
  91. package/dist/adapt/registry.d.ts.map +1 -1
  92. package/dist/adapt/registry.js +11 -0
  93. package/dist/adapt/registry.js.map +1 -1
  94. package/dist/auth/__tests__/hotswap.test.js +60 -1
  95. package/dist/auth/__tests__/hotswap.test.js.map +1 -1
  96. package/dist/auth/__tests__/storage.test.js +33 -1
  97. package/dist/auth/__tests__/storage.test.js.map +1 -1
  98. package/dist/auth/hotswap.d.ts +16 -2
  99. package/dist/auth/hotswap.d.ts.map +1 -1
  100. package/dist/auth/hotswap.js +22 -7
  101. package/dist/auth/hotswap.js.map +1 -1
  102. package/dist/auth/storage.js +1 -1
  103. package/dist/auth/storage.js.map +1 -1
  104. package/dist/autopilot/__tests__/ralplan-gate.test.js +86 -1333
  105. package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
  106. package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
  107. package/dist/autopilot/ralplan-gate.js +7 -6
  108. package/dist/autopilot/ralplan-gate.js.map +1 -1
  109. package/dist/cli/__tests__/agents-init.test.js +4 -23
  110. package/dist/cli/__tests__/agents-init.test.js.map +1 -1
  111. package/dist/cli/__tests__/api.test.js +61 -24
  112. package/dist/cli/__tests__/api.test.js.map +1 -1
  113. package/dist/cli/__tests__/auth.test.js +3 -1
  114. package/dist/cli/__tests__/auth.test.js.map +1 -1
  115. package/dist/cli/__tests__/codex-feature-probe.test.js +66 -1
  116. package/dist/cli/__tests__/codex-feature-probe.test.js.map +1 -1
  117. package/dist/cli/__tests__/codex-plugin-layout.test.js +70 -2
  118. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  119. package/dist/cli/__tests__/detached-leader-teardown.test.d.ts +2 -0
  120. package/dist/cli/__tests__/detached-leader-teardown.test.d.ts.map +1 -0
  121. package/dist/cli/__tests__/detached-leader-teardown.test.js +473 -0
  122. package/dist/cli/__tests__/detached-leader-teardown.test.js.map +1 -0
  123. package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts +2 -0
  124. package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts.map +1 -0
  125. package/dist/cli/__tests__/doctor-process-identity-readiness.test.js +103 -0
  126. package/dist/cli/__tests__/doctor-process-identity-readiness.test.js.map +1 -0
  127. package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts +2 -0
  128. package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts.map +1 -0
  129. package/dist/cli/__tests__/doctor-state-root-binding.test.js +139 -0
  130. package/dist/cli/__tests__/doctor-state-root-binding.test.js.map +1 -0
  131. package/dist/cli/__tests__/doctor-warning-copy.test.js +35 -3
  132. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  133. package/dist/cli/__tests__/exec.test.js +75 -0
  134. package/dist/cli/__tests__/exec.test.js.map +1 -1
  135. package/dist/cli/__tests__/index.test.js +621 -460
  136. package/dist/cli/__tests__/index.test.js.map +1 -1
  137. package/dist/cli/__tests__/launch-fallback.test.js +1020 -143
  138. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  139. package/dist/cli/__tests__/mcp-parity.test.js +4 -3
  140. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  141. package/dist/cli/__tests__/native-assets.test.js +398 -16
  142. package/dist/cli/__tests__/native-assets.test.js.map +1 -1
  143. package/dist/cli/__tests__/native-hook-claim-journal.test.js +53 -5
  144. package/dist/cli/__tests__/native-hook-claim-journal.test.js.map +1 -1
  145. package/dist/cli/__tests__/ralph.test.js +2 -2
  146. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  147. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js +57 -57
  148. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js.map +1 -1
  149. package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts +2 -0
  150. package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts.map +1 -0
  151. package/dist/cli/__tests__/ralplan-child-binding-3212.test.js +56 -0
  152. package/dist/cli/__tests__/ralplan-child-binding-3212.test.js.map +1 -0
  153. package/dist/cli/__tests__/ralplan.test.js +84 -12
  154. package/dist/cli/__tests__/ralplan.test.js.map +1 -1
  155. package/dist/cli/__tests__/session-scoped-runtime.test.js +1118 -43
  156. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  157. package/dist/cli/__tests__/setup-agents-overwrite.test.js +8 -55
  158. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  159. package/dist/cli/__tests__/setup-install-mode.test.js +183 -4
  160. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  161. package/dist/cli/__tests__/sparkshell-cli.test.js +93 -41
  162. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  163. package/dist/cli/__tests__/team.test.js +45 -1
  164. package/dist/cli/__tests__/team.test.js.map +1 -1
  165. package/dist/cli/__tests__/ultragoal.test.js +117 -2
  166. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  167. package/dist/cli/__tests__/uninstall.test.js +50 -5
  168. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  169. package/dist/cli/__tests__/update.test.js +669 -177
  170. package/dist/cli/__tests__/update.test.js.map +1 -1
  171. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +32 -2
  172. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  173. package/dist/cli/api.d.ts.map +1 -1
  174. package/dist/cli/api.js +9 -10
  175. package/dist/cli/api.js.map +1 -1
  176. package/dist/cli/codex-feature-probe.d.ts +16 -0
  177. package/dist/cli/codex-feature-probe.d.ts.map +1 -1
  178. package/dist/cli/codex-feature-probe.js +44 -0
  179. package/dist/cli/codex-feature-probe.js.map +1 -1
  180. package/dist/cli/codex-home.d.ts.map +1 -1
  181. package/dist/cli/codex-home.js +7 -4
  182. package/dist/cli/codex-home.js.map +1 -1
  183. package/dist/cli/doctor.d.ts +17 -0
  184. package/dist/cli/doctor.d.ts.map +1 -1
  185. package/dist/cli/doctor.js +277 -3
  186. package/dist/cli/doctor.js.map +1 -1
  187. package/dist/cli/index.d.ts +231 -12
  188. package/dist/cli/index.d.ts.map +1 -1
  189. package/dist/cli/index.js +2298 -735
  190. package/dist/cli/index.js.map +1 -1
  191. package/dist/cli/native-assets.d.ts +25 -0
  192. package/dist/cli/native-assets.d.ts.map +1 -1
  193. package/dist/cli/native-assets.js +448 -51
  194. package/dist/cli/native-assets.js.map +1 -1
  195. package/dist/cli/native-hook-claim-journal.d.ts +8 -4
  196. package/dist/cli/native-hook-claim-journal.d.ts.map +1 -1
  197. package/dist/cli/native-hook-claim-journal.js +30 -8
  198. package/dist/cli/native-hook-claim-journal.js.map +1 -1
  199. package/dist/cli/package-manager-ownership.d.ts +63 -0
  200. package/dist/cli/package-manager-ownership.d.ts.map +1 -0
  201. package/dist/cli/package-manager-ownership.js +323 -0
  202. package/dist/cli/package-manager-ownership.js.map +1 -0
  203. package/dist/cli/ralph.js +2 -2
  204. package/dist/cli/ralph.js.map +1 -1
  205. package/dist/cli/ralplan.d.ts +4 -2
  206. package/dist/cli/ralplan.d.ts.map +1 -1
  207. package/dist/cli/ralplan.js +76 -34
  208. package/dist/cli/ralplan.js.map +1 -1
  209. package/dist/cli/setup-preferences.d.ts +15 -0
  210. package/dist/cli/setup-preferences.d.ts.map +1 -1
  211. package/dist/cli/setup-preferences.js +27 -1
  212. package/dist/cli/setup-preferences.js.map +1 -1
  213. package/dist/cli/setup.d.ts +3 -0
  214. package/dist/cli/setup.d.ts.map +1 -1
  215. package/dist/cli/setup.js +55 -32
  216. package/dist/cli/setup.js.map +1 -1
  217. package/dist/cli/sparkshell.d.ts.map +1 -1
  218. package/dist/cli/sparkshell.js +52 -9
  219. package/dist/cli/sparkshell.js.map +1 -1
  220. package/dist/cli/ultragoal.d.ts.map +1 -1
  221. package/dist/cli/ultragoal.js +2 -2
  222. package/dist/cli/ultragoal.js.map +1 -1
  223. package/dist/cli/uninstall.d.ts.map +1 -1
  224. package/dist/cli/uninstall.js +27 -28
  225. package/dist/cli/uninstall.js.map +1 -1
  226. package/dist/cli/update-worker.d.ts +2 -0
  227. package/dist/cli/update-worker.d.ts.map +1 -0
  228. package/dist/cli/update-worker.js +142 -0
  229. package/dist/cli/update-worker.js.map +1 -0
  230. package/dist/cli/update.d.ts +14 -22
  231. package/dist/cli/update.d.ts.map +1 -1
  232. package/dist/cli/update.js +192 -241
  233. package/dist/cli/update.js.map +1 -1
  234. package/dist/config/__tests__/generator-idempotent.test.js +173 -29
  235. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  236. package/dist/config/__tests__/generator-notify.test.js +3 -1
  237. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  238. package/dist/config/generator.d.ts +25 -3
  239. package/dist/config/generator.d.ts.map +1 -1
  240. package/dist/config/generator.js +113 -35
  241. package/dist/config/generator.js.map +1 -1
  242. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +25 -0
  243. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
  244. package/dist/goal-workflows/codex-goal-snapshot.d.ts +1 -1
  245. package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
  246. package/dist/goal-workflows/codex-goal-snapshot.js +2 -0
  247. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  248. package/dist/hooks/__tests__/agents-overlay.test.js +3 -1
  249. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  250. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +27 -4
  251. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  252. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts +2 -0
  253. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts.map +1 -0
  254. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js +172 -0
  255. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js.map +1 -0
  256. package/dist/hooks/__tests__/keyword-detector.test.js +172 -33
  257. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  258. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +173 -11
  259. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  260. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +1 -0
  261. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  262. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +65 -17
  263. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  264. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +27 -0
  265. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  266. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +10 -118
  267. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  268. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +7 -0
  269. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  270. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +2 -2
  271. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  272. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +4 -1
  273. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  274. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +2 -1
  275. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -1
  276. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +1 -0
  277. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  278. package/dist/hooks/__tests__/prompt-guidance-contract.test.js +9 -0
  279. package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +1 -1
  280. package/dist/hooks/__tests__/session.test.js +2976 -557
  281. package/dist/hooks/__tests__/session.test.js.map +1 -1
  282. package/dist/hooks/agents-overlay.js +1 -1
  283. package/dist/hooks/agents-overlay.js.map +1 -1
  284. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +108 -2
  285. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
  286. package/dist/hooks/extensibility/__tests__/sdk.test.js +151 -1
  287. package/dist/hooks/extensibility/__tests__/sdk.test.js.map +1 -1
  288. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  289. package/dist/hooks/extensibility/dispatcher.js +20 -3
  290. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  291. package/dist/hooks/extensibility/plugin-runner.js +1 -0
  292. package/dist/hooks/extensibility/plugin-runner.js.map +1 -1
  293. package/dist/hooks/extensibility/runtime.d.ts.map +1 -1
  294. package/dist/hooks/extensibility/runtime.js.map +1 -1
  295. package/dist/hooks/extensibility/sdk/paths.d.ts +1 -1
  296. package/dist/hooks/extensibility/sdk/paths.d.ts.map +1 -1
  297. package/dist/hooks/extensibility/sdk/paths.js +2 -2
  298. package/dist/hooks/extensibility/sdk/paths.js.map +1 -1
  299. package/dist/hooks/extensibility/sdk/runtime-state.d.ts +1 -1
  300. package/dist/hooks/extensibility/sdk/runtime-state.d.ts.map +1 -1
  301. package/dist/hooks/extensibility/sdk/runtime-state.js +55 -15
  302. package/dist/hooks/extensibility/sdk/runtime-state.js.map +1 -1
  303. package/dist/hooks/extensibility/sdk.d.ts +1 -0
  304. package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
  305. package/dist/hooks/extensibility/sdk.js +1 -1
  306. package/dist/hooks/extensibility/sdk.js.map +1 -1
  307. package/dist/hooks/extensibility/types.d.ts +7 -0
  308. package/dist/hooks/extensibility/types.d.ts.map +1 -1
  309. package/dist/hooks/keyword-detector.d.ts +10 -3
  310. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  311. package/dist/hooks/keyword-detector.js +116 -20
  312. package/dist/hooks/keyword-detector.js.map +1 -1
  313. package/dist/hooks/session.d.ts +180 -14
  314. package/dist/hooks/session.d.ts.map +1 -1
  315. package/dist/hooks/session.js +1402 -281
  316. package/dist/hooks/session.js.map +1 -1
  317. package/dist/hud/__tests__/hud-tmux-injection.test.js +6 -6
  318. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
  319. package/dist/hud/__tests__/index.test.js +26 -16
  320. package/dist/hud/__tests__/index.test.js.map +1 -1
  321. package/dist/hud/__tests__/reconcile.test.js +83 -78
  322. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  323. package/dist/hud/__tests__/state.test.js +36 -31
  324. package/dist/hud/__tests__/state.test.js.map +1 -1
  325. package/dist/hud/__tests__/tmux.test.js +155 -198
  326. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  327. package/dist/hud/tmux.d.ts +42 -4
  328. package/dist/hud/tmux.d.ts.map +1 -1
  329. package/dist/hud/tmux.js +1017 -139
  330. package/dist/hud/tmux.js.map +1 -1
  331. package/dist/leader/__tests__/contract.test.js +71 -34
  332. package/dist/leader/__tests__/contract.test.js.map +1 -1
  333. package/dist/leader/contract.d.ts +1 -6
  334. package/dist/leader/contract.d.ts.map +1 -1
  335. package/dist/leader/contract.js +25 -24
  336. package/dist/leader/contract.js.map +1 -1
  337. package/dist/mcp/__tests__/hermes-bridge.test.js +17 -0
  338. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
  339. package/dist/mcp/__tests__/server-lifecycle.test.js +4 -4
  340. package/dist/mcp/__tests__/state-paths.test.js +735 -4
  341. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  342. package/dist/mcp/__tests__/state-server.test.js +1 -1
  343. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  344. package/dist/mcp/__tests__/trace-server.test.js +2 -2
  345. package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
  346. package/dist/mcp/hermes-bridge.d.ts.map +1 -1
  347. package/dist/mcp/hermes-bridge.js +2 -2
  348. package/dist/mcp/hermes-bridge.js.map +1 -1
  349. package/dist/mcp/state-paths.d.ts +78 -4
  350. package/dist/mcp/state-paths.d.ts.map +1 -1
  351. package/dist/mcp/state-paths.js +543 -40
  352. package/dist/mcp/state-paths.js.map +1 -1
  353. package/dist/mcp/state-server.d.ts +4 -4
  354. package/dist/mcp/state-server.d.ts.map +1 -1
  355. package/dist/modes/__tests__/base-autopilot-gates.test.js +36 -7
  356. package/dist/modes/__tests__/base-autopilot-gates.test.js.map +1 -1
  357. package/dist/modes/__tests__/base-multi-state-compat.test.js +1 -1
  358. package/dist/modes/__tests__/base-multi-state-compat.test.js.map +1 -1
  359. package/dist/modes/__tests__/base-session-scope.test.js +17 -8
  360. package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
  361. package/dist/modes/base.d.ts +5 -5
  362. package/dist/modes/base.d.ts.map +1 -1
  363. package/dist/modes/base.js +76 -21
  364. package/dist/modes/base.js.map +1 -1
  365. package/dist/native-assets/archive.d.ts +17 -0
  366. package/dist/native-assets/archive.d.ts.map +1 -0
  367. package/dist/native-assets/archive.js +238 -0
  368. package/dist/native-assets/archive.js.map +1 -0
  369. package/dist/native-assets/policy.d.ts +42 -0
  370. package/dist/native-assets/policy.d.ts.map +1 -0
  371. package/dist/native-assets/policy.js +155 -0
  372. package/dist/native-assets/policy.js.map +1 -0
  373. package/dist/pipeline/__tests__/orchestrator.test.js +162 -40
  374. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  375. package/dist/pipeline/__tests__/stages.test.js +66 -149
  376. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  377. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  378. package/dist/pipeline/orchestrator.js +124 -18
  379. package/dist/pipeline/orchestrator.js.map +1 -1
  380. package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
  381. package/dist/pipeline/stages/ralplan.js +36 -8
  382. package/dist/pipeline/stages/ralplan.js.map +1 -1
  383. package/dist/ralplan/__tests__/consensus-gate.test.js +70 -1437
  384. package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
  385. package/dist/ralplan/__tests__/documented-leader-preflight.test.js +328 -39
  386. package/dist/ralplan/__tests__/documented-leader-preflight.test.js.map +1 -1
  387. package/dist/ralplan/__tests__/runtime.test.js +82 -102
  388. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  389. package/dist/ralplan/consensus-gate.d.ts +9 -1
  390. package/dist/ralplan/consensus-gate.d.ts.map +1 -1
  391. package/dist/ralplan/consensus-gate.js +40 -304
  392. package/dist/ralplan/consensus-gate.js.map +1 -1
  393. package/dist/ralplan/documented-leader-preflight.d.ts +15 -8
  394. package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -1
  395. package/dist/ralplan/documented-leader-preflight.js +356 -54
  396. package/dist/ralplan/documented-leader-preflight.js.map +1 -1
  397. package/dist/ralplan/runtime.d.ts +1 -1
  398. package/dist/ralplan/runtime.d.ts.map +1 -1
  399. package/dist/ralplan/runtime.js +68 -173
  400. package/dist/ralplan/runtime.js.map +1 -1
  401. package/dist/runtime/run-state.d.ts +5 -1
  402. package/dist/runtime/run-state.d.ts.map +1 -1
  403. package/dist/runtime/run-state.js +15 -8
  404. package/dist/runtime/run-state.js.map +1 -1
  405. package/dist/scripts/__tests__/codex-native-hook.test.js +14071 -8859
  406. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  407. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts +2 -0
  408. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts.map +1 -0
  409. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js +225 -0
  410. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js.map +1 -0
  411. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts +2 -0
  412. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts.map +1 -0
  413. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js +188 -0
  414. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js.map +1 -0
  415. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts +2 -0
  416. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts.map +1 -0
  417. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js +259 -0
  418. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js.map +1 -0
  419. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts +2 -0
  420. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts.map +1 -0
  421. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js +491 -0
  422. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js.map +1 -0
  423. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts +2 -0
  424. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts.map +1 -0
  425. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js +708 -0
  426. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js.map +1 -0
  427. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts +2 -0
  428. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts.map +1 -0
  429. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js +208 -0
  430. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js.map +1 -0
  431. package/dist/scripts/__tests__/notify-state-io.test.js +26 -0
  432. package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -1
  433. package/dist/scripts/__tests__/notify-tmux-injection.test.js +23 -1
  434. package/dist/scripts/__tests__/notify-tmux-injection.test.js.map +1 -1
  435. package/dist/scripts/__tests__/postinstall.test.js +19 -1
  436. package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
  437. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js +25 -8
  438. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js.map +1 -1
  439. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js +60 -25
  440. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js.map +1 -1
  441. package/dist/scripts/__tests__/smoke-packed-install.test.js +155 -16
  442. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  443. package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts +2 -0
  444. package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts.map +1 -0
  445. package/dist/scripts/__tests__/verify-native-release-assets.test.js +235 -0
  446. package/dist/scripts/__tests__/verify-native-release-assets.test.js.map +1 -0
  447. package/dist/scripts/codex-native-hook.d.ts +50 -1
  448. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  449. package/dist/scripts/codex-native-hook.js +3559 -451
  450. package/dist/scripts/codex-native-hook.js.map +1 -1
  451. package/dist/scripts/codex-native-pre-post.d.ts +9 -0
  452. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  453. package/dist/scripts/codex-native-pre-post.js +35 -12
  454. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  455. package/dist/scripts/generate-native-release-manifest.js +80 -51
  456. package/dist/scripts/generate-native-release-manifest.js.map +1 -1
  457. package/dist/scripts/notify-fallback-watcher.js +28 -39
  458. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  459. package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
  460. package/dist/scripts/notify-hook/state-io.js +5 -0
  461. package/dist/scripts/notify-hook/state-io.js.map +1 -1
  462. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  463. package/dist/scripts/notify-hook/team-leader-nudge.js +32 -3
  464. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  465. package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
  466. package/dist/scripts/notify-hook/team-worker-stop.js +23 -3
  467. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
  468. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  469. package/dist/scripts/notify-hook/team-worker.js +45 -5
  470. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  471. package/dist/scripts/notify-hook/tmux-injection.d.ts +1 -0
  472. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  473. package/dist/scripts/notify-hook/tmux-injection.js +4 -1
  474. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  475. package/dist/scripts/notify-hook.js +78 -82
  476. package/dist/scripts/notify-hook.js.map +1 -1
  477. package/dist/scripts/postinstall-advisory.d.ts +14 -0
  478. package/dist/scripts/postinstall-advisory.d.ts.map +1 -0
  479. package/dist/scripts/postinstall-advisory.js +49 -0
  480. package/dist/scripts/postinstall-advisory.js.map +1 -0
  481. package/dist/scripts/postinstall.d.ts +1 -1
  482. package/dist/scripts/postinstall.d.ts.map +1 -1
  483. package/dist/scripts/postinstall.js +1 -1
  484. package/dist/scripts/postinstall.js.map +1 -1
  485. package/dist/scripts/smoke-packed-install.d.ts +32 -1
  486. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  487. package/dist/scripts/smoke-packed-install.js +413 -60
  488. package/dist/scripts/smoke-packed-install.js.map +1 -1
  489. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  490. package/dist/scripts/sync-plugin-mirror.js +16 -1
  491. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  492. package/dist/scripts/verify-native-release-assets.js +37 -23
  493. package/dist/scripts/verify-native-release-assets.js.map +1 -1
  494. package/dist/state/__tests__/mode-state-context.test.js +12 -5
  495. package/dist/state/__tests__/mode-state-context.test.js.map +1 -1
  496. package/dist/state/__tests__/operations.test.js +460 -850
  497. package/dist/state/__tests__/operations.test.js.map +1 -1
  498. package/dist/state/__tests__/skill-active.test.js +400 -2
  499. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  500. package/dist/state/mode-state-context.d.ts +3 -0
  501. package/dist/state/mode-state-context.d.ts.map +1 -1
  502. package/dist/state/mode-state-context.js +27 -13
  503. package/dist/state/mode-state-context.js.map +1 -1
  504. package/dist/state/operations.d.ts +3 -0
  505. package/dist/state/operations.d.ts.map +1 -1
  506. package/dist/state/operations.js +144 -40
  507. package/dist/state/operations.js.map +1 -1
  508. package/dist/state/skill-active.d.ts +18 -1
  509. package/dist/state/skill-active.d.ts.map +1 -1
  510. package/dist/state/skill-active.js +420 -23
  511. package/dist/state/skill-active.js.map +1 -1
  512. package/dist/state/workflow-transition-reconcile.d.ts +3 -0
  513. package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
  514. package/dist/state/workflow-transition-reconcile.js +10 -4
  515. package/dist/state/workflow-transition-reconcile.js.map +1 -1
  516. package/dist/state/workflow-transition.d.ts.map +1 -1
  517. package/dist/state/workflow-transition.js +3 -1
  518. package/dist/state/workflow-transition.js.map +1 -1
  519. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js +27 -0
  520. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js.map +1 -1
  521. package/dist/subagents/__tests__/tracker.test.js +837 -1048
  522. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  523. package/dist/subagents/tracker.d.ts +64 -60
  524. package/dist/subagents/tracker.d.ts.map +1 -1
  525. package/dist/subagents/tracker.js +809 -358
  526. package/dist/subagents/tracker.js.map +1 -1
  527. package/dist/team/__tests__/delivery-e2e-smoke.test.js +6 -7
  528. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
  529. package/dist/team/__tests__/mcp-comm.test.js +104 -3
  530. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  531. package/dist/team/__tests__/notice-ledger.test.d.ts +2 -0
  532. package/dist/team/__tests__/notice-ledger.test.d.ts.map +1 -0
  533. package/dist/team/__tests__/notice-ledger.test.js +131 -0
  534. package/dist/team/__tests__/notice-ledger.test.js.map +1 -0
  535. package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts +2 -0
  536. package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts.map +1 -0
  537. package/dist/team/__tests__/pane-teardown-residue-e2e.test.js +410 -0
  538. package/dist/team/__tests__/pane-teardown-residue-e2e.test.js.map +1 -0
  539. package/dist/team/__tests__/phase-controller.test.js +20 -0
  540. package/dist/team/__tests__/phase-controller.test.js.map +1 -1
  541. package/dist/team/__tests__/runtime.test.js +725 -59
  542. package/dist/team/__tests__/runtime.test.js.map +1 -1
  543. package/dist/team/__tests__/scaling.test.js +222 -237
  544. package/dist/team/__tests__/scaling.test.js.map +1 -1
  545. package/dist/team/__tests__/state-root.test.js +117 -2
  546. package/dist/team/__tests__/state-root.test.js.map +1 -1
  547. package/dist/team/__tests__/tmux-session.test.js +887 -92
  548. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  549. package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts +2 -0
  550. package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts.map +1 -0
  551. package/dist/team/__tests__/tmux-source-authority-realtmux.test.js +149 -0
  552. package/dist/team/__tests__/tmux-source-authority-realtmux.test.js.map +1 -0
  553. package/dist/team/__tests__/tmux-test-fixture.d.ts +69 -0
  554. package/dist/team/__tests__/tmux-test-fixture.d.ts.map +1 -1
  555. package/dist/team/__tests__/tmux-test-fixture.js +242 -15
  556. package/dist/team/__tests__/tmux-test-fixture.js.map +1 -1
  557. package/dist/team/__tests__/tmux-test-fixture.test.js +177 -1
  558. package/dist/team/__tests__/tmux-test-fixture.test.js.map +1 -1
  559. package/dist/team/__tests__/worker-runtime-identity.test.js +45 -72
  560. package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
  561. package/dist/team/notice-ledger.d.ts +54 -0
  562. package/dist/team/notice-ledger.d.ts.map +1 -0
  563. package/dist/team/notice-ledger.js +259 -0
  564. package/dist/team/notice-ledger.js.map +1 -0
  565. package/dist/team/phase-controller.d.ts.map +1 -1
  566. package/dist/team/phase-controller.js +2 -0
  567. package/dist/team/phase-controller.js.map +1 -1
  568. package/dist/team/runtime.d.ts +3 -1
  569. package/dist/team/runtime.d.ts.map +1 -1
  570. package/dist/team/runtime.js +314 -142
  571. package/dist/team/runtime.js.map +1 -1
  572. package/dist/team/scaling.d.ts.map +1 -1
  573. package/dist/team/scaling.js +161 -91
  574. package/dist/team/scaling.js.map +1 -1
  575. package/dist/team/state/monitor.d.ts +10 -0
  576. package/dist/team/state/monitor.d.ts.map +1 -1
  577. package/dist/team/state/monitor.js +13 -0
  578. package/dist/team/state/monitor.js.map +1 -1
  579. package/dist/team/state/types.d.ts +15 -0
  580. package/dist/team/state/types.d.ts.map +1 -1
  581. package/dist/team/state/types.js.map +1 -1
  582. package/dist/team/state-root.d.ts +12 -0
  583. package/dist/team/state-root.d.ts.map +1 -1
  584. package/dist/team/state-root.js +177 -0
  585. package/dist/team/state-root.js.map +1 -1
  586. package/dist/team/state.d.ts +18 -0
  587. package/dist/team/state.d.ts.map +1 -1
  588. package/dist/team/state.js +36 -0
  589. package/dist/team/state.js.map +1 -1
  590. package/dist/team/tmux-session.d.ts +40 -4
  591. package/dist/team/tmux-session.d.ts.map +1 -1
  592. package/dist/team/tmux-session.js +513 -166
  593. package/dist/team/tmux-session.js.map +1 -1
  594. package/dist/ultragoal/__tests__/artifacts.test.js +950 -2
  595. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  596. package/dist/ultragoal/__tests__/docs-contract.test.js +1 -0
  597. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  598. package/dist/ultragoal/artifacts.d.ts +35 -1
  599. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  600. package/dist/ultragoal/artifacts.js +232 -46
  601. package/dist/ultragoal/artifacts.js.map +1 -1
  602. package/dist/utils/__tests__/file-durability.test.js +58 -1
  603. package/dist/utils/__tests__/file-durability.test.js.map +1 -1
  604. package/dist/utils/__tests__/paths.test.js +21 -1
  605. package/dist/utils/__tests__/paths.test.js.map +1 -1
  606. package/dist/utils/file-durability.d.ts +10 -0
  607. package/dist/utils/file-durability.d.ts.map +1 -1
  608. package/dist/utils/file-durability.js +34 -4
  609. package/dist/utils/file-durability.js.map +1 -1
  610. package/dist/utils/paths.d.ts.map +1 -1
  611. package/dist/utils/paths.js +14 -6
  612. package/dist/utils/paths.js.map +1 -1
  613. package/dist/verification/__tests__/ci-rust-gates.test.js +49 -4
  614. package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
  615. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +60 -0
  616. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
  617. package/dist/verification/__tests__/native-release-manifest.test.js +157 -4
  618. package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -1
  619. package/package.json +13 -5
  620. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  621. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +81 -17
  622. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +13 -5
  623. package/plugins/oh-my-codex/skills/cancel/SKILL.md +30 -85
  624. package/plugins/oh-my-codex/skills/ralph/SKILL.md +5 -5
  625. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +15 -17
  626. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +3 -2
  627. package/skills/autopilot/SKILL.md +13 -5
  628. package/skills/cancel/SKILL.md +30 -85
  629. package/skills/ralph/SKILL.md +5 -5
  630. package/skills/ralplan/SKILL.md +15 -17
  631. package/skills/ultragoal/SKILL.md +3 -2
  632. package/src/scripts/__tests__/codex-native-hook.test.ts +6091 -540
  633. package/src/scripts/__tests__/issue-3293-callsite-parity.test.ts +187 -0
  634. package/src/scripts/__tests__/issue-3293-cancel-transaction.test.ts +189 -0
  635. package/src/scripts/__tests__/issue-3293-hook-owned-cancel.test.ts +187 -0
  636. package/src/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.ts +591 -0
  637. package/src/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.ts +701 -0
  638. package/src/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.ts +211 -0
  639. package/src/scripts/__tests__/notify-state-io.test.ts +29 -0
  640. package/src/scripts/__tests__/notify-tmux-injection.test.ts +26 -1
  641. package/src/scripts/__tests__/postinstall.test.ts +23 -1
  642. package/src/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.ts +27 -8
  643. package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +61 -27
  644. package/src/scripts/__tests__/smoke-packed-install.test.ts +209 -18
  645. package/src/scripts/__tests__/verify-native-release-assets.test.ts +240 -0
  646. package/src/scripts/codex-native-hook.ts +3638 -475
  647. package/src/scripts/codex-native-pre-post.ts +43 -12
  648. package/src/scripts/generate-native-release-manifest.ts +83 -79
  649. package/src/scripts/notify-fallback-watcher.ts +38 -38
  650. package/src/scripts/notify-hook/state-io.ts +11 -0
  651. package/src/scripts/notify-hook/team-leader-nudge.ts +32 -4
  652. package/src/scripts/notify-hook/team-worker-stop.ts +23 -4
  653. package/src/scripts/notify-hook/team-worker.ts +43 -5
  654. package/src/scripts/notify-hook/tmux-injection.ts +5 -1
  655. package/src/scripts/notify-hook.ts +83 -82
  656. package/src/scripts/postinstall-advisory.ts +67 -0
  657. package/src/scripts/postinstall.ts +1 -1
  658. package/src/scripts/smoke-packed-install.ts +446 -59
  659. package/src/scripts/sync-plugin-mirror.ts +17 -1
  660. package/src/scripts/verify-native-release-assets.ts +39 -31
  661. package/templates/AGENTS.md +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"explore-harness-release-workflow.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/explore-harness-release-workflow.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explore-harness-release-workflow.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/explore-harness-release-workflow.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,32 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
+ import { createHash } from 'node:crypto';
3
4
  import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
4
5
  import { spawnSync } from 'node:child_process';
5
6
  import { tmpdir } from 'node:os';
6
7
  import { join } from 'node:path';
8
+ import { gzipSync } from 'node:zlib';
9
+ import * as tar from 'tar-stream';
10
+ import * as yazl from 'yazl';
11
+ import { validateNativeReleaseManifest } from '../../native-assets/policy.js';
12
+ async function collect(stream) {
13
+ const chunks = [];
14
+ for await (const chunk of stream)
15
+ chunks.push(Buffer.from(chunk));
16
+ return Buffer.concat(chunks);
17
+ }
18
+ async function makeTarGz(binaryName, contents) {
19
+ const archive = tar.pack();
20
+ archive.entry({ name: binaryName, type: 'file', size: Buffer.byteLength(contents) }, Buffer.from(contents));
21
+ archive.finalize();
22
+ return gzipSync(await collect(archive));
23
+ }
24
+ async function makeZip(binaryName, contents) {
25
+ const archive = new yazl.ZipFile();
26
+ archive.addBuffer(Buffer.from(contents), binaryName);
27
+ archive.end();
28
+ return collect(archive.outputStream);
29
+ }
7
30
  describe('native release manifest generator', () => {
8
31
  it('annotates Linux libc variants and sorts musl assets before glibc fallbacks', async () => {
9
32
  const root = await mkdtemp(join(tmpdir(), 'omx-native-release-manifest-'));
@@ -12,10 +35,12 @@ describe('native release manifest generator', () => {
12
35
  await mkdir(artifactsDir, { recursive: true });
13
36
  const muslArchive = 'omx-sparkshell-x86_64-unknown-linux-musl.tar.gz';
14
37
  const glibcArchive = 'omx-sparkshell-x86_64-unknown-linux-gnu.tar.gz';
15
- await writeFile(join(artifactsDir, muslArchive), 'musl');
16
- await writeFile(join(artifactsDir, `${muslArchive}.sha256`), 'musl-checksum\n');
17
- await writeFile(join(artifactsDir, glibcArchive), 'glibc');
18
- await writeFile(join(artifactsDir, `${glibcArchive}.sha256`), 'glibc-checksum\n');
38
+ const muslBytes = await makeTarGz('omx-sparkshell', 'musl');
39
+ const glibcBytes = await makeTarGz('omx-sparkshell', 'glibc');
40
+ await writeFile(join(artifactsDir, muslArchive), muslBytes);
41
+ await writeFile(join(artifactsDir, `${muslArchive}.sha256`), `${createHash('sha256').update(muslBytes).digest('hex')} ${muslArchive}\n`);
42
+ await writeFile(join(artifactsDir, glibcArchive), glibcBytes);
43
+ await writeFile(join(artifactsDir, `${glibcArchive}.sha256`), `${createHash('sha256').update(glibcBytes).digest('hex')} ${glibcArchive}\n`);
19
44
  const planPath = join(root, 'dist-plan.json');
20
45
  await writeFile(planPath, JSON.stringify({
21
46
  announcement_tag: 'v0.10.2',
@@ -76,5 +101,133 @@ describe('native release manifest generator', () => {
76
101
  await rm(root, { recursive: true, force: true });
77
102
  }
78
103
  });
104
+ it('uses the executable path basename for Windows cargo-dist assets', async () => {
105
+ const root = await mkdtemp(join(tmpdir(), 'omx-native-release-manifest-windows-'));
106
+ try {
107
+ const artifactsDir = join(root, 'artifacts');
108
+ await mkdir(artifactsDir, { recursive: true });
109
+ const archiveName = 'omx-api-x86_64-pc-windows-msvc.zip';
110
+ const archiveBytes = await makeZip('omx-api.exe', 'windows');
111
+ await writeFile(join(artifactsDir, archiveName), archiveBytes);
112
+ await writeFile(join(artifactsDir, `${archiveName}.sha256`), `${createHash('sha256').update(archiveBytes).digest('hex')} ${archiveName}\n`);
113
+ const planPath = join(root, 'dist-plan.json');
114
+ await writeFile(planPath, JSON.stringify({
115
+ announcement_tag: 'v0.10.2',
116
+ releases: [{ app_name: 'omx-api', app_version: '0.10.2' }],
117
+ artifacts: {
118
+ windows: {
119
+ kind: 'executable-zip',
120
+ name: archiveName,
121
+ checksum: `${archiveName}.sha256`,
122
+ target_triples: ['x86_64-pc-windows-msvc'],
123
+ assets: [{ kind: 'executable', id: 'omx-api-exe-x86_64-pc-windows-msvc', name: 'omx-api', path: 'omx-api.exe' }],
124
+ },
125
+ },
126
+ }));
127
+ const outputPath = join(root, 'native-release-manifest.json');
128
+ const result = spawnSync(process.execPath, [
129
+ join(process.cwd(), 'dist', 'scripts', 'generate-native-release-manifest.js'),
130
+ '--plan', planPath,
131
+ '--artifacts-dir', artifactsDir,
132
+ '--out', outputPath,
133
+ '--release-base-url', 'https://github.com/example/releases/download/v0.10.2',
134
+ ], { cwd: process.cwd(), encoding: 'utf-8' });
135
+ assert.equal(result.status, 0, result.stderr || result.stdout);
136
+ const manifest = JSON.parse(await readFile(outputPath, 'utf-8'));
137
+ const asset = manifest.assets[0];
138
+ assert.equal(asset.product, 'omx-api');
139
+ assert.equal(asset.binary, 'omx-api');
140
+ assert.equal(asset.binary_path, 'omx-api.exe');
141
+ assert.equal(asset.target, 'x86_64-pc-windows-msvc');
142
+ assert.equal(asset.platform, 'win32');
143
+ assert.equal(asset.arch, 'x64');
144
+ }
145
+ finally {
146
+ await rm(root, { recursive: true, force: true });
147
+ }
148
+ });
149
+ it('generates and verifies a complete cargo-dist release manifest, including non-hydratable omx-runtime', async () => {
150
+ const root = await mkdtemp(join(tmpdir(), 'omx-native-release-manifest-full-'));
151
+ try {
152
+ const artifactsDir = join(root, 'artifacts');
153
+ await mkdir(artifactsDir, { recursive: true });
154
+ const artifacts = [
155
+ { key: 'apiWindows', product: 'omx-api', target: 'x86_64-pc-windows-msvc', archive: 'omx-api-x86_64-pc-windows-msvc.zip', binaryPath: 'omx-api.exe', format: 'zip' },
156
+ { key: 'exploreLinux', product: 'omx-explore-harness', target: 'x86_64-unknown-linux-musl', archive: 'omx-explore-harness-x86_64-unknown-linux-musl.tar.gz', binaryPath: 'omx-explore-harness', format: 'tar.gz' },
157
+ { key: 'runtimeLinux', product: 'omx-runtime', target: 'x86_64-unknown-linux-musl', archive: 'omx-runtime-x86_64-unknown-linux-musl.tar.gz', binaryPath: 'omx-runtime', format: 'tar.gz' },
158
+ { key: 'sparkshellLinux', product: 'omx-sparkshell', target: 'x86_64-unknown-linux-musl', archive: 'omx-sparkshell-x86_64-unknown-linux-musl.tar.gz', binaryPath: 'omx-sparkshell', format: 'tar.gz' },
159
+ ];
160
+ for (const artifact of artifacts) {
161
+ const bytes = artifact.format === 'zip'
162
+ ? await makeZip(artifact.binaryPath, artifact.product)
163
+ : await makeTarGz(artifact.binaryPath, artifact.product);
164
+ await writeFile(join(artifactsDir, artifact.archive), bytes);
165
+ await writeFile(join(artifactsDir, `${artifact.archive}.sha256`), `${createHash('sha256').update(bytes).digest('hex')} ${artifact.archive}\n`);
166
+ }
167
+ const planPath = join(root, 'dist-plan.json');
168
+ await writeFile(planPath, JSON.stringify({
169
+ announcement_tag: 'v0.20.3',
170
+ releases: artifacts.map(({ product }) => ({ app_name: product, app_version: '0.20.3' })),
171
+ artifacts: Object.fromEntries(artifacts.map((artifact) => [artifact.key, {
172
+ kind: 'executable-zip',
173
+ name: artifact.archive,
174
+ checksum: `${artifact.archive}.sha256`,
175
+ target_triples: [artifact.target],
176
+ assets: [{ kind: 'executable', name: artifact.product, path: artifact.binaryPath }],
177
+ }])),
178
+ }));
179
+ const outputPath = join(root, 'native-release-manifest.json');
180
+ const generated = spawnSync(process.execPath, [
181
+ join(process.cwd(), 'dist', 'scripts', 'generate-native-release-manifest.js'),
182
+ '--plan', planPath,
183
+ '--artifacts-dir', artifactsDir,
184
+ '--out', outputPath,
185
+ '--release-base-url', 'https://github.com/example/releases/download/v0.20.3',
186
+ '--require-products', 'omx-api,omx-explore-harness,omx-sparkshell',
187
+ ], { cwd: process.cwd(), encoding: 'utf-8' });
188
+ assert.equal(generated.status, 0, generated.stderr || generated.stdout);
189
+ const manifest = JSON.parse(await readFile(outputPath, 'utf-8'));
190
+ assert.deepEqual(new Set(manifest.assets.map((asset) => asset.product)), new Set(artifacts.map((artifact) => artifact.product)));
191
+ const windowsApi = manifest.assets.find((asset) => asset.product === 'omx-api');
192
+ assert.equal(windowsApi?.binary, 'omx-api');
193
+ assert.equal(windowsApi?.binary_path, 'omx-api.exe');
194
+ const verified = spawnSync(process.execPath, [
195
+ join(process.cwd(), 'dist', 'scripts', 'verify-native-release-assets.js'),
196
+ '--manifest', outputPath,
197
+ '--artifacts-dir', artifactsDir,
198
+ ], { cwd: process.cwd(), encoding: 'utf-8' });
199
+ assert.equal(verified.status, 0, verified.stderr || verified.stdout);
200
+ }
201
+ finally {
202
+ await rm(root, { recursive: true, force: true });
203
+ }
204
+ });
205
+ it('rejects the same closed-product, binary, path, suffix, and archive-hint violations as release verification', () => {
206
+ const asset = {
207
+ product: 'omx-api', version: '0.8.15', platform: 'linux', arch: 'x64', target: 'x86_64-unknown-linux-musl', libc: 'musl',
208
+ archive: 'omx-api-x86_64-unknown-linux-musl.tar.gz', binary: 'omx-api', binary_path: 'omx-api', sha256: 'a'.repeat(64), size: 1,
209
+ download_url: 'https://example.invalid/omx-api-x86_64-unknown-linux-musl.tar.gz',
210
+ };
211
+ const assertInvalid = (assetOverrides = {}, documentOverrides = {}) => {
212
+ assert.throws(() => validateNativeReleaseManifest({
213
+ manifest_version: 1,
214
+ version: '0.8.15',
215
+ tag: 'v0.8.15',
216
+ assets: [{ ...asset, ...assetOverrides }],
217
+ ...documentOverrides,
218
+ }));
219
+ };
220
+ assertInvalid({}, { manifest_version: undefined });
221
+ assertInvalid({}, { version: 'v0.8.15', tag: 'vv0.8.15' });
222
+ assertInvalid({}, { tag: 'v0.8.16' });
223
+ assertInvalid({ platform: 'darwin', arch: 'x64', target: 'x86_64-apple-darwin', libc: 'musl' });
224
+ assertInvalid({ product: 'omx-unknown' });
225
+ assertInvalid({ binary: 'omx-api.exe' });
226
+ assertInvalid({ binary_path: '../omx-api' });
227
+ assertInvalid({ archive: 'nested/omx-api-x86_64-unknown-linux-musl.tar.gz' });
228
+ assertInvalid({ archive: 'omx-api-x86_64-unknown-linux-musl.tar.bz2' });
229
+ assertInvalid({ archive: 'omx-api-x86_64-unknown-linux-gnu.tar.gz' });
230
+ assertInvalid({ archive: 'omx-api-aarch64-unknown-linux-musl.tar.gz' });
231
+ });
79
232
  });
80
233
  //# sourceMappingURL=native-release-manifest.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"native-release-manifest.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/native-release-manifest.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-release-manifest.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/native-release-manifest.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-codex",
3
- "version": "0.20.3",
3
+ "version": "0.20.5",
4
4
  "description": "Multi-agent orchestration layer for OpenAI Codex CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,6 +10,7 @@
10
10
  "scripts": {
11
11
  "build": "node -e \"const fs=require('fs'); fs.rmSync('dist',{recursive:true,force:true});\" && tsc && node -e \"require('fs').chmodSync('dist/cli/omx.js', 0o755)\"",
12
12
  "build:explore": "cargo build -p omx-explore-harness",
13
+ "build:runtime": "cargo build -p omx-runtime",
13
14
  "build:full": "npm run build && npm run build:explore:release && npm run build:sparkshell && npm run build:api",
14
15
  "build:explore:release": "node dist/scripts/build-explore-harness.js",
15
16
  "check:no-unused": "tsc -p tsconfig.no-unused.json",
@@ -27,8 +28,8 @@
27
28
  "test:team:cross-rebase-smoke:compiled": "node dist/scripts/run-test-files.js dist/team/__tests__/cross-rebase-smoke.test.js",
28
29
  "test:team:worker-runtime-identity": "npm run build && npm run test:team:worker-runtime-identity:compiled",
29
30
  "test:team:worker-runtime-identity:compiled": "node dist/scripts/run-test-files.js dist/team/__tests__/worker-runtime-identity.test.js",
30
- "test:recent-bug-regressions": "npm run build && npm run test:recent-bug-regressions:compiled",
31
- "test:recent-bug-regressions:compiled": "node dist/scripts/run-test-files.js dist/hooks/__tests__/keyword-detector.test.js dist/scripts/__tests__/codex-native-hook.test.js dist/cli/__tests__/launch-fallback.test.js dist/team/__tests__/runtime.test.js dist/team/__tests__/hardening-e2e.test.js",
31
+ "test:recent-bug-regressions": "npm run build && npm run build:runtime && npm run test:recent-bug-regressions:compiled",
32
+ "test:recent-bug-regressions:compiled": "node dist/scripts/run-test-files.js dist/hooks/__tests__/keyword-detector.test.js dist/scripts/__tests__/codex-native-hook.test.js dist/cli/__tests__/launch-fallback.test.js dist/hooks/__tests__/session.test.js dist/team/__tests__/runtime.test.js dist/team/__tests__/hardening-e2e.test.js",
32
33
  "test:plugin-boundaries:compiled": "node dist/scripts/run-test-files.js dist/cli/__tests__/codex-plugin-layout.test.js dist/cli/__tests__/package-bin-contract.test.js dist/cli/__tests__/setup-hooks-shared-ownership.test.js dist/catalog/__tests__/plugin-bundle-ssot.test.js",
33
34
  "test:node": "node dist/scripts/run-test-files.js dist",
34
35
  "test:node:cross-platform": "npm run test:node",
@@ -46,7 +47,7 @@
46
47
  "test:compat:node:cross-platform": "npm run build && node dist/scripts/run-test-files.js dist/compat/__tests__",
47
48
  "test:compat:rust": "cargo build && OMX_COMPAT_TARGET=./target/debug/omx npm run test:compat:node",
48
49
  "build:sparkshell": "node dist/scripts/build-sparkshell.js",
49
- "smoke:packed-install": "node dist/scripts/smoke-packed-install.js",
50
+ "smoke:packed-install": "npm run build:runtime && node dist/scripts/smoke-packed-install.js",
50
51
  "test:sparkshell": "node dist/scripts/test-sparkshell.js",
51
52
  "test:reply-listener:live": "node dist/scripts/test-reply-listener-live.js",
52
53
  "postpack": "npm run clean:native-package-assets",
@@ -95,13 +96,20 @@
95
96
  "dependencies": {
96
97
  "@iarna/toml": "^2.2.5",
97
98
  "@modelcontextprotocol/sdk": "^1.26.0",
99
+ "@napi-rs/lzma": "1.4.1",
100
+ "tar-stream": "3.2.0",
101
+ "yauzl": "3.4.0",
98
102
  "zod": "^4.3.6"
99
103
  },
100
104
  "devDependencies": {
101
105
  "@biomejs/biome": "^2.4.4",
102
106
  "@types/node": "^26.0.0",
107
+ "@types/tar-stream": "3.1.4",
108
+ "@types/yauzl": "3.4.0",
109
+ "@types/yazl": "3.3.1",
103
110
  "c8": "^11.0.0",
104
- "typescript": "^7.0.2"
111
+ "typescript": "^7.0.2",
112
+ "yazl": "3.3.1"
105
113
  },
106
114
  "overrides": {
107
115
  "ajv": ">=8.18.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-codex",
3
- "version": "0.20.3",
3
+ "version": "0.20.5",
4
4
  "description": "Multi-agent orchestration layer for OpenAI Codex CLI",
5
5
  "author": {
6
6
  "name": "Yeachan Heo",
@@ -1,16 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn } from 'node:child_process';
3
3
  import { extname } from 'node:path';
4
- import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs';
4
+ import { closeSync, constants as fsConstants, existsSync, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, writeFileSync } from 'node:fs';
5
5
  import { dirname, join, resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
8
  const hookDir = dirname(fileURLToPath(import.meta.url));
9
9
  // sync-plugin-mirror verifies this stable marker; runtime behavior is tested separately.
10
10
  const OMX_PLUGIN_HOOK_LAUNCHER_CONTRACT_MARKER = 'omx-plugin-hook-launcher:v1';
11
+ const OMX_PLUGIN_HOOK_ROUTING_ONLY_MARKER = 'omx-plugin-hook-routing-only:v1';
11
12
  const MAX_WRAPPER_STDIN_BYTES = 1024 * 1024;
12
13
  const RAW_EVENT_SCAN_BYTES = 64 * 1024;
13
14
  const MAX_STOP_STDOUT_BYTES = 1024 * 1024;
15
+ const MAX_ROUTING_RECORD_BYTES = 4 * 1024;
14
16
  const CODEX_HOOK_EVENT_NAMES = new Set([
15
17
  'SessionStart',
16
18
  'PreToolUse',
@@ -144,35 +146,97 @@ function sanitizeLaunchId(value) {
144
146
  return String(value ?? '').trim().replace(/[^a-zA-Z0-9._-]/g, '_').slice(0, 128);
145
147
  }
146
148
 
147
- function resolveLaunchClaimPath(payload, launchId) {
149
+ function resolveLaunchRoutingPath(payload, launchId) {
148
150
  const cwd = typeof payload.cwd === 'string' && payload.cwd.trim() ? payload.cwd : process.cwd();
149
151
  const stateRoot = typeof process.env.OMX_ROOT === 'string' && process.env.OMX_ROOT.trim()
150
152
  ? process.env.OMX_ROOT.trim()
151
153
  : join(cwd, '.omx');
152
- return join(stateRoot, 'state', 'plugin-hook-launches', `${sanitizeLaunchId(launchId)}.json`);
154
+ return join(stateRoot, 'state', 'plugin-hook-routing', `${sanitizeLaunchId(launchId)}.json`);
153
155
  }
154
156
 
155
157
  function hookPayloadSessionId(input, payload) {
156
- const parsedSessionId = typeof payload.session_id === 'string' ? payload.session_id.trim() : '';
158
+ const candidate = payload?.session_id ?? payload?.sessionId;
159
+ const parsedSessionId = typeof candidate === 'string' ? candidate.trim() : '';
157
160
  if (parsedSessionId) return parsedSessionId;
158
- return extractTopLevelStringField(input.toString('utf8'), ['session_id', 'sessionId'])?.trim() ?? '';
161
+ return input && typeof input.toString === 'function'
162
+ ? extractTopLevelStringField(input.toString('utf8'), ['session_id', 'sessionId'])?.trim() ?? ''
163
+ : '';
159
164
  }
160
165
 
161
- function isOmxLauncherSession(input, payload) {
162
- const launchId = process.env.OMX_CODEX_LAUNCH_ID?.trim();
166
+ function isSafeRoutingSessionId(value) {
167
+ return typeof value === 'string' && value.length > 0 && value.length <= 256;
168
+ }
169
+
170
+ function isChildRoutingSessionStart(payload, ownerSessionId) {
171
+ if ((payload?.hook_event_name ?? payload?.hookEventName) !== 'SessionStart' || !ownerSessionId) return false;
172
+ const childSessionId = hookPayloadSessionId(null, payload);
173
+ const transcriptCandidate = payload?.transcript_path ?? payload?.transcriptPath;
174
+ const transcriptPath = typeof transcriptCandidate === 'string' ? transcriptCandidate.trim() : '';
175
+ if (!childSessionId || !transcriptPath) return false;
176
+ let fd;
177
+ try {
178
+ fd = openSync(transcriptPath, 'r');
179
+ const buffer = Buffer.alloc(64 * 1024);
180
+ const bytes = readSync(fd, buffer, 0, buffer.length, 0);
181
+ const newline = buffer.subarray(0, bytes).indexOf(0x0a);
182
+ const firstLine = buffer.subarray(0, newline >= 0 ? newline : bytes).toString('utf8').trim();
183
+ const record = JSON.parse(firstLine);
184
+ const metadata = record?.type === 'session_meta' && record?.payload && typeof record.payload === 'object' ? record.payload : null;
185
+ const spawn = metadata?.source?.subagent?.thread_spawn;
186
+ const metadataIds = [metadata?.id, metadata?.session_id].filter((value) => value !== undefined);
187
+ return metadataIds.length > 0
188
+ && metadataIds.every((value) => value === childSessionId)
189
+ && spawn && typeof spawn === 'object'
190
+ && spawn.parent_thread_id === ownerSessionId;
191
+ } catch {
192
+ return false;
193
+ } finally {
194
+ if (fd !== undefined) try { closeSync(fd); } catch {}
195
+ }
196
+ }
197
+
198
+ function readPinnedRoutingRecord(routingPath) {
199
+ let fd;
200
+ try {
201
+ const initial = lstatSync(routingPath);
202
+ if (!initial.isFile() || initial.isSymbolicLink() || initial.nlink !== 1 || initial.size <= 0 || initial.size > MAX_ROUTING_RECORD_BYTES) return null;
203
+ fd = openSync(routingPath, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0));
204
+ const opened = fstatSync(fd);
205
+ if (!opened.isFile() || opened.nlink !== 1 || opened.size !== initial.size || opened.dev !== initial.dev || opened.ino !== initial.ino) return null;
206
+ const buffer = Buffer.alloc(opened.size);
207
+ if (readSync(fd, buffer, 0, buffer.length, 0) !== buffer.length) return null;
208
+ const current = lstatSync(routingPath);
209
+ const final = fstatSync(fd);
210
+ if (!current.isFile() || current.isSymbolicLink() || current.nlink !== 1 || current.size !== opened.size || current.dev !== opened.dev || current.ino !== opened.ino || final.nlink !== 1 || final.size !== opened.size) return null;
211
+ const routing = JSON.parse(buffer.toString('utf8'));
212
+ return routing && typeof routing === 'object' && !Array.isArray(routing) ? routing : null;
213
+ } catch {
214
+ return null;
215
+ } finally {
216
+ if (fd !== undefined) try { closeSync(fd); } catch {}
217
+ }
218
+ }
219
+
220
+ // This is routing correlation only. It is intentionally unauthenticated and must
221
+ // never be used as authorization or proof that a session is OMX-owned.
222
+ function isPluginHookRoutingSession(input, payload) {
223
+ const launchId = sanitizeLaunchId(process.env.OMX_CODEX_LAUNCH_ID);
163
224
  const entryPath = process.env.OMX_ENTRY_PATH?.trim();
164
225
  const sessionId = hookPayloadSessionId(input, payload);
165
- if (!launchId || !entryPath || !sessionId) return false;
166
-
167
- const claimPath = resolveLaunchClaimPath(payload, launchId);
226
+ if (!launchId || !entryPath || !isSafeRoutingSessionId(sessionId)) return false;
168
227
 
228
+ const routingPath = resolveLaunchRoutingPath(payload, launchId);
169
229
  try {
170
- if (existsSync(claimPath)) {
171
- const claimed = JSON.parse(readFileSync(claimPath, 'utf8'));
172
- return claimed?.sessionId === sessionId;
230
+ if (existsSync(routingPath)) {
231
+ const routing = readPinnedRoutingRecord(routingPath);
232
+ if (!routing) return false;
233
+ const ownerSessionId = routing.routing === OMX_PLUGIN_HOOK_ROUTING_ONLY_MARKER && isSafeRoutingSessionId(routing.ownerSessionId)
234
+ ? routing.ownerSessionId
235
+ : '';
236
+ return ownerSessionId === sessionId || isChildRoutingSessionStart(payload, ownerSessionId);
173
237
  }
174
- mkdirSync(dirname(claimPath), { recursive: true });
175
- writeFileSync(claimPath, `${JSON.stringify({ sessionId })}\n`, { encoding: 'utf8', mode: 0o600 });
238
+ mkdirSync(dirname(routingPath), { recursive: true });
239
+ writeFileSync(routingPath, `${JSON.stringify({ routing: OMX_PLUGIN_HOOK_ROUTING_ONLY_MARKER, ownerSessionId: sessionId })}\n`, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
176
240
  return true;
177
241
  } catch {
178
242
  return false;
@@ -439,11 +503,11 @@ function parseSingleJsonObjectOutput(raw) {
439
503
  async function main() {
440
504
  const { input, oversized, totalBytes } = await readBoundedStdin({ drainOversized: true });
441
505
  const payload = parseHookPayload(input);
442
- const launchedByOmx = isOmxLauncherSession(input, payload);
506
+ const routedByLaunchCorrelation = isPluginHookRoutingSession(input, payload);
443
507
  const isStop = detectStopHookInput(input);
444
508
  const isCompact = detectCompactHookInput(input);
445
509
 
446
- if (!launchedByOmx) {
510
+ if (!routedByLaunchCorrelation) {
447
511
  writePlainCodexNoop(isStop);
448
512
  return;
449
513
  }
@@ -39,13 +39,14 @@ Autopilot must not run a separate broad expansion/planning/execution/QA/validati
39
39
  - Ground the task with pre-context intake and the deep-interview artifact.
40
40
  - Current ownership rule: Autopilot records `planning_routing` in state before heavy planning. When the Autopilot/main model resolves to a cheap/mini lane (for example `o4-mini`, `*-mini`, `*spark*`, or an explicitly cheap/economy/lite model name), the initial planning/decomposition owner is dedicated `[planner]`; otherwise `[main]` may keep ownership for backward compatibility. A configured `agentModels.planner` is an explicit opt-in that forces dedicated `[planner]` ownership even when `[main]` is not cheap/mini.
41
41
  - Run or resume `$ralplan` to produce/update PRD and test-spec artifacts. If `planning_routing.owner` is `planner`, use the dedicated `[planner]` role for the initial Planner draft/decomposition before the Architect→Critic consensus gates.
42
- - PRD/test-spec files alone are not completion evidence. Ralplan may hand off only after durable consensus evidence records a subsequent `Architect` approval first and a subsequent `Critic` approval second.
42
+ - PRD/test-spec files alone are not completion evidence. Local Architect→Critic approvals are lifecycle evidence, not handoff authority. Ralplan may hand off only after an official host-issued receipt is verified through a documented non-user-mintable host surface; until then retain the reviews with `ralplan_consensus_gate.complete:false` and `blocked_reason:"documented_host_consensus_receipt_unavailable"`.
43
+ - On every revised planning pass, require subsequent `Architect` approval first and subsequent `Critic` approval second. These ordered reviews remain lifecycle evidence only and never replace the official host receipt.
43
44
  - When returning from a non-clean review or QA pass, include `return_to_ralplan_reason` and the findings as first-class planning input.
44
45
  - If either review is missing, blocked, out of order, or non-approving, remain in `ralplan` or report an explicit blocker/max-iteration outcome; do not progress to `$ultragoal`, `$team`, `$ralph`, or implementation.
45
- - Required handoff artifact: an approved plan/test spec plus `ralplan_consensus_gate` evidence suitable for `$ultragoal`.
46
+ - Required handoff artifact: planning artifacts, lifecycle-only Architect→Critic reviews, and a verified official host receipt authorizing `ralplan_consensus_gate.complete:true`. Without that receipt, remain in `ralplan` and report the host blocker.
46
47
 
47
48
  3. **Phase `ultragoal`** — durable implementation + verification loop
48
- - Run `$ultragoal` from the approved ralplan artifacts.
49
+ - Run `$ultragoal` only from ralplan artifacts whose consensus gate is authorized by a verified official host receipt.
49
50
  - Ultragoal owns durable Codex goal handoffs, `.omx/ultragoal` ledger checkpoints, implementation, tests, build/lint/typecheck evidence, cleanup, and final review gate discipline.
50
51
  - Use `$team` only inside an active Ultragoal story when the story clearly benefits from coordinated parallel execution (for example independent file/module lanes, broad test matrix work, or multi-domain implementation). Team remains explicit and leader-owned; Ultragoal keeps the goal/ledger state.
51
52
  - Required handoff artifact: implementation evidence, changed-file summary, verification evidence, and Ultragoal ledger/checkpoint references suitable for `$code-review`.
@@ -134,10 +135,17 @@ Required fields:
134
135
 
135
136
  - **On start**: `omx state write --input '{"mode":"autopilot","active":true,"current_phase":"deep-interview","iteration":1,"review_cycle":0,"state":{"phase_cycle":["deep-interview","ralplan","ultragoal","code-review","ultraqa"],"handoff_artifacts":{"context_snapshot_path":"<snapshot-path>","deep_interview":null,"ralplan":null,"ralplan_consensus_gate":{"required":true,"sequence":["architect-review","critic-review"],"planning_artifacts_are_not_consensus":true,"required_review_roles":["architect","critic"],"ralplan_architect_review":null,"ralplan_critic_review":null,"complete":false},"ultragoal":null,"code_review":null,"ultraqa":null},"review_verdict":null,"qa_verdict":null,"return_to_ralplan_reason":null}}' --json`
136
137
  - **On deep-interview -> ralplan**: only after a separate gate proves the interview chain is explicitly complete or the user explicitly authorized a skip. For completion, persist `deep_interview_gate:{"status":"complete","rationale":"<why requirements are complete>","handoff_summary":"<summary>"}` (or equivalent non-empty rationale/summary) plus the clarified spec/requirements under `handoff_artifacts.deep_interview`; if a final `omx question` was involved, keep its same-session answered record linked by `question_id`/`satisfied_at`. For skip, persist `deep_interview_gate:{"status":"skipped","skip_authorized_by_user":true,"skip_reason":"<user-authorized reason>","skipped_at":"<timestamp>","source":"user","session_id":"<session>"}`. Do not leave deep-interview merely because the first `omx question` was answered or cleared.
138
+ - The stable `<!-- OMX:AUTOPILOT:DEEP-INTERVIEW-RALPLAN-HANDOFF:v1 -->` marker immediately precedes the executable completion handoff fence; automation may locate exactly that fence.
139
+
140
+ <!-- OMX:AUTOPILOT:DEEP-INTERVIEW-RALPLAN-HANDOFF:v1 -->
141
+ ```bash
142
+ omx state write --input '{"mode":"autopilot","active":true,"current_phase":"ralplan","session_id":"'"${OMX_SESSION_ID:?authoritative OMX session required}"'","workingDirectory":"'"${PWD:?working directory required}"'","state":{"deep_interview_gate":{"status":"complete","rationale":"requirements are clarified and ready for planning","handoff_summary":"durable deep-interview handoff recorded for ralplan"},"handoff_artifacts":{"deep_interview":".omx/specs/deep-interview-handoff.md"}}}' --json
143
+ ```
144
+ - The artifact path above must already contain the durable clarified requirements/specification before this command runs. Omit session aliases unless needed; if emitted, `owner_omx_session_id`, `codex_session_id`, and `owner_codex_session_id` must each equal `session_id`.
137
145
  - **Optional execution contract foundation**: when a downstream handoff explicitly sets `execution_contract_required:true`, persist a complete structured `execution_contract` under `handoff_artifacts.deep_interview` before leaving deep-interview. The canonical schema is `version:1`, `execution_stride:"task"|"deliverable"|"milestone"`, `source:"deep-interview"`, `selected_by:"user"|"default"`, `allow_task_shrink:<boolean>`, non-empty `completion_unit`, non-empty `stop_condition`, `acceptance_coverage_scope:"task"|"deliverable"|"milestone"`, and `shrink_policy:"allowed"|"ask_before_shrink"|"deny_unless_blocked"`.
138
146
  - Stride semantics are binding only when `execution_contract_required:true`: `task` means `allow_task_shrink:true`, `acceptance_coverage_scope:"task"`, `shrink_policy:"allowed"`; `deliverable` means `allow_task_shrink:false`, `acceptance_coverage_scope:"deliverable"`, `shrink_policy:"ask_before_shrink"`; `milestone` means `allow_task_shrink:false`, `acceptance_coverage_scope:"milestone"`, `shrink_policy:"deny_unless_blocked"`.
139
147
  - Preserve legacy behavior when `execution_contract_required` is absent or false. Do not infer stride from prose, broadness, phase names, snapshots, or task size; this foundation only validates an explicit structured contract and deliberately uses `milestone` rather than `phase`. New artifacts must write canonical snake_case keys under `handoff_artifacts.deep_interview`; the runtime may read legacy camelCase field/marker aliases and direct/nested `execution_contract` locations only as compatibility input.
140
- - **On ralplan -> ultragoal**: only after `ralplan_consensus_gate.complete:true`, with tracker-backed native-subagent `ralplan_architect_review.agent_role:"architect"` and `ralplan_architect_review.verdict:"approve"` recorded before tracker-backed native-subagent `ralplan_critic_review.agent_role:"critic"` and `ralplan_critic_review.verdict:"approve"`; `codex_exec` or artifact-only approvals are trace evidence but not native lane proof. Set `current_phase:"ultragoal"` and persist the plan/test-spec paths under `handoff_artifacts.ralplan`.
148
+ - **On ralplan -> ultragoal**: only after `ralplan_consensus_gate.complete:true` from an official host-issued receipt verified through a documented non-user-mintable host surface. Native-subagent Architect/Critic lanes, tracker records, `codex_exec`, and artifact approvals are lifecycle or trace evidence only. Until that verifier exists, keep `current_phase:"ralplan"` and persist `blocked_reason:"documented_host_consensus_receipt_unavailable"`.
141
149
  - **On missing ralplan consensus evidence**: keep `current_phase:"ralplan"`, persist `ralplan_consensus_gate.complete:false` with `blocked_reason`, and report an explicit blocker or max-iteration outcome instead of handing off to execution.
142
150
  - **On ultragoal -> code-review**: set `current_phase:"code-review"`, persist implementation/test/ledger evidence under `handoff_artifacts.ultragoal`.
143
151
  - **On code-review -> ultraqa**: set `current_phase:"ultraqa"` only after a real `$code-review` stage/subagent has produced durable evidence; persist the clean review under `handoff_artifacts.code_review` with its source thread/tool/stage reference. Do not author `review_verdict:{clean:true}` from the leader's own summary.
@@ -182,7 +190,7 @@ Pipeline state should use `current_phase` values that match the same phase names
182
190
 
183
191
  <Final_Checklist>
184
192
  - [ ] Phase `deep-interview` produced/updated clarified requirements or a concise spec
185
- - [ ] Phase `ralplan` produced/updated approved planning artifacts and durable sequential evidence from a subsequent `Architect` approval followed by a subsequent `Critic` approval
193
+ - [ ] Phase `ralplan` produced/updated planning artifacts and preserved subsequent Architect→Critic approvals as lifecycle-only evidence; it advanced only with a verified official host receipt, or remained in `ralplan` with `complete:false` and `blocked_reason:"documented_host_consensus_receipt_unavailable"`.
186
194
  - [ ] Phase `ultragoal` implemented and verified the plan with fresh evidence and durable ledger/checkpoint references
187
195
  - [ ] Phase `rework` was used for implementation-only review fixes when applicable, with findings scoped to a fresh code-review cycle
188
196
  - [ ] `$team` was used only if the active Ultragoal story needed coordinated parallel work, or explicitly recorded as not needed