oh-my-codex 0.20.1 → 0.20.3

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 (791) hide show
  1. package/Cargo.lock +7 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +36 -1
  4. package/crates/omx-runtime/Cargo.toml +1 -0
  5. package/crates/omx-runtime/src/main.rs +25 -2
  6. package/crates/omx-runtime/tests/execution.rs +219 -0
  7. package/crates/omx-runtime-core/src/dispatch.rs +96 -10
  8. package/crates/omx-runtime-core/src/engine.rs +839 -29
  9. package/crates/omx-runtime-core/src/lib.rs +8 -0
  10. package/dist/adapt/__tests__/hermes.test.js.map +1 -1
  11. package/dist/adapt/contracts.d.ts.map +1 -1
  12. package/dist/agents/__tests__/definitions.test.js +81 -0
  13. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  14. package/dist/agents/__tests__/native-config.test.js +25 -0
  15. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  16. package/dist/agents/native-config.d.ts +2 -1
  17. package/dist/agents/native-config.d.ts.map +1 -1
  18. package/dist/agents/native-config.js.map +1 -1
  19. package/dist/auth/__tests__/hotswap.test.d.ts +2 -0
  20. package/dist/auth/__tests__/hotswap.test.d.ts.map +1 -0
  21. package/dist/auth/__tests__/hotswap.test.js +183 -0
  22. package/dist/auth/__tests__/hotswap.test.js.map +1 -0
  23. package/dist/auth/hotswap.d.ts +6 -0
  24. package/dist/auth/hotswap.d.ts.map +1 -1
  25. package/dist/auth/hotswap.js +102 -19
  26. package/dist/auth/hotswap.js.map +1 -1
  27. package/dist/auth/paths.js.map +1 -1
  28. package/dist/auth/storage.js.map +1 -1
  29. package/dist/autopilot/__tests__/ralplan-gate.test.js +5 -5
  30. package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
  31. package/dist/autopilot/completion-gate.js.map +1 -1
  32. package/dist/autopilot/fsm.d.ts +1 -1
  33. package/dist/autopilot/fsm.d.ts.map +1 -1
  34. package/dist/autoresearch/goal.js.map +1 -1
  35. package/dist/autoresearch/runtime.js.map +1 -1
  36. package/dist/capabilities/lockfile.js.map +1 -1
  37. package/dist/catalog/reader.js.map +1 -1
  38. package/dist/catalog/skill-mirror.js.map +1 -1
  39. package/dist/cli/__tests__/adapt-help.test.js.map +1 -1
  40. package/dist/cli/__tests__/agents-init.test.js.map +1 -1
  41. package/dist/cli/__tests__/agents.test.js.map +1 -1
  42. package/dist/cli/__tests__/api.test.js.map +1 -1
  43. package/dist/cli/__tests__/ask.test.js.map +1 -1
  44. package/dist/cli/__tests__/auth.test.js +60 -6
  45. package/dist/cli/__tests__/auth.test.js.map +1 -1
  46. package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
  47. package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
  48. package/dist/cli/__tests__/capabilities.test.js.map +1 -1
  49. package/dist/cli/__tests__/codex-plugin-layout.test.js +80 -0
  50. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  51. package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +1 -1
  52. package/dist/cli/__tests__/doctor-invalid-config.test.js +47 -4
  53. package/dist/cli/__tests__/doctor-invalid-config.test.js.map +1 -1
  54. package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
  55. package/dist/cli/__tests__/doctor-warning-copy.test.js +752 -15
  56. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  57. package/dist/cli/__tests__/exec.test.js +136 -0
  58. package/dist/cli/__tests__/exec.test.js.map +1 -1
  59. package/dist/cli/__tests__/imagegen-continuation.test.js.map +1 -1
  60. package/dist/cli/__tests__/index.test.js +473 -14
  61. package/dist/cli/__tests__/index.test.js.map +1 -1
  62. package/dist/cli/__tests__/launch-fallback.test.js +336 -4
  63. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  64. package/dist/cli/__tests__/mcp-parity.test.js +87 -12
  65. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  66. package/dist/cli/__tests__/native-hook-claim-journal.test.d.ts +2 -0
  67. package/dist/cli/__tests__/native-hook-claim-journal.test.d.ts.map +1 -0
  68. package/dist/cli/__tests__/native-hook-claim-journal.test.js +206 -0
  69. package/dist/cli/__tests__/native-hook-claim-journal.test.js.map +1 -0
  70. package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
  71. package/dist/cli/__tests__/question.test.js.map +1 -1
  72. package/dist/cli/__tests__/ralph-deslop-contract.test.js.map +1 -1
  73. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +6 -0
  74. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  75. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -1
  76. package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +1 -1
  77. package/dist/cli/__tests__/ralph.test.js +8 -3
  78. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  79. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.d.ts +2 -0
  80. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.d.ts.map +1 -0
  81. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js +72 -0
  82. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js.map +1 -0
  83. package/dist/cli/__tests__/ralplan.test.d.ts +2 -0
  84. package/dist/cli/__tests__/ralplan.test.d.ts.map +1 -0
  85. package/dist/cli/__tests__/ralplan.test.js +55 -0
  86. package/dist/cli/__tests__/ralplan.test.js.map +1 -0
  87. package/dist/cli/__tests__/resume.test.js +17 -11
  88. package/dist/cli/__tests__/resume.test.js.map +1 -1
  89. package/dist/cli/__tests__/session-scoped-runtime.test.js +25 -0
  90. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  91. package/dist/cli/__tests__/session-search-help.test.js +25 -1
  92. package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
  93. package/dist/cli/__tests__/session-search.test.js.map +1 -1
  94. package/dist/cli/__tests__/setup-agents-overwrite.test.js +79 -0
  95. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  96. package/dist/cli/__tests__/setup-gh-star.test.js.map +1 -1
  97. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +77 -3
  98. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +1 -1
  99. package/dist/cli/__tests__/setup-hooks-trust-e2e.test.d.ts +2 -0
  100. package/dist/cli/__tests__/setup-hooks-trust-e2e.test.d.ts.map +1 -0
  101. package/dist/cli/__tests__/setup-hooks-trust-e2e.test.js +285 -0
  102. package/dist/cli/__tests__/setup-hooks-trust-e2e.test.js.map +1 -0
  103. package/dist/cli/__tests__/setup-install-mode.test.js +2579 -294
  104. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  105. package/dist/cli/__tests__/setup-preferences.test.d.ts +2 -0
  106. package/dist/cli/__tests__/setup-preferences.test.d.ts.map +1 -0
  107. package/dist/cli/__tests__/setup-preferences.test.js +79 -0
  108. package/dist/cli/__tests__/setup-preferences.test.js.map +1 -0
  109. package/dist/cli/__tests__/setup-refresh.test.js +33 -2
  110. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  111. package/dist/cli/__tests__/setup-scope.test.js +46 -3
  112. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  113. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  114. package/dist/cli/__tests__/state.test.js +37 -0
  115. package/dist/cli/__tests__/state.test.js.map +1 -1
  116. package/dist/cli/__tests__/team.test.js +105 -7
  117. package/dist/cli/__tests__/team.test.js.map +1 -1
  118. package/dist/cli/__tests__/ultragoal.test.js +61 -1
  119. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  120. package/dist/cli/__tests__/uninstall.test.js +1817 -24
  121. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  122. package/dist/cli/__tests__/update.test.js +58 -0
  123. package/dist/cli/__tests__/update.test.js.map +1 -1
  124. package/dist/cli/__tests__/url.test.js.map +1 -1
  125. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +2 -1
  126. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  127. package/dist/cli/adapt.js.map +1 -1
  128. package/dist/cli/agents-init.js.map +1 -1
  129. package/dist/cli/agents.js.map +1 -1
  130. package/dist/cli/api.js.map +1 -1
  131. package/dist/cli/ask.d.ts +1 -1
  132. package/dist/cli/ask.d.ts.map +1 -1
  133. package/dist/cli/ask.js.map +1 -1
  134. package/dist/cli/auth.js.map +1 -1
  135. package/dist/cli/autoresearch-guided.js.map +1 -1
  136. package/dist/cli/autoresearch-intake.js.map +1 -1
  137. package/dist/cli/capabilities.js.map +1 -1
  138. package/dist/cli/cleanup.js.map +1 -1
  139. package/dist/cli/codex-feature-probe.js.map +1 -1
  140. package/dist/cli/codex-home.js.map +1 -1
  141. package/dist/cli/doctor.d.ts +21 -0
  142. package/dist/cli/doctor.d.ts.map +1 -1
  143. package/dist/cli/doctor.js +607 -130
  144. package/dist/cli/doctor.js.map +1 -1
  145. package/dist/cli/explore.js.map +1 -1
  146. package/dist/cli/index.d.ts +14 -3
  147. package/dist/cli/index.d.ts.map +1 -1
  148. package/dist/cli/index.js +245 -57
  149. package/dist/cli/index.js.map +1 -1
  150. package/dist/cli/mcp-parity.js +2 -2
  151. package/dist/cli/mcp-parity.js.map +1 -1
  152. package/dist/cli/mcp-serve.js.map +1 -1
  153. package/dist/cli/mission.js.map +1 -1
  154. package/dist/cli/native-assets.js.map +1 -1
  155. package/dist/cli/native-hook-claim-journal.d.ts +29 -0
  156. package/dist/cli/native-hook-claim-journal.d.ts.map +1 -0
  157. package/dist/cli/native-hook-claim-journal.js +252 -0
  158. package/dist/cli/native-hook-claim-journal.js.map +1 -0
  159. package/dist/cli/omx.js.map +1 -1
  160. package/dist/cli/plugin-marketplace.js.map +1 -1
  161. package/dist/cli/project-runtime-codex-homes.js.map +1 -1
  162. package/dist/cli/question.js.map +1 -1
  163. package/dist/cli/ralph.d.ts.map +1 -1
  164. package/dist/cli/ralph.js +3 -2
  165. package/dist/cli/ralph.js.map +1 -1
  166. package/dist/cli/ralplan.d.ts +10 -0
  167. package/dist/cli/ralplan.d.ts.map +1 -0
  168. package/dist/cli/ralplan.js +110 -0
  169. package/dist/cli/ralplan.js.map +1 -0
  170. package/dist/cli/session-search.d.ts +5 -0
  171. package/dist/cli/session-search.d.ts.map +1 -1
  172. package/dist/cli/session-search.js +87 -0
  173. package/dist/cli/session-search.js.map +1 -1
  174. package/dist/cli/setup-preferences.d.ts +11 -0
  175. package/dist/cli/setup-preferences.d.ts.map +1 -1
  176. package/dist/cli/setup-preferences.js +32 -0
  177. package/dist/cli/setup-preferences.js.map +1 -1
  178. package/dist/cli/setup.d.ts +58 -0
  179. package/dist/cli/setup.d.ts.map +1 -1
  180. package/dist/cli/setup.js +1450 -398
  181. package/dist/cli/setup.js.map +1 -1
  182. package/dist/cli/sparkshell.js.map +1 -1
  183. package/dist/cli/star-prompt.js.map +1 -1
  184. package/dist/cli/state.d.ts.map +1 -1
  185. package/dist/cli/state.js +2 -1
  186. package/dist/cli/state.js.map +1 -1
  187. package/dist/cli/team.js.map +1 -1
  188. package/dist/cli/ultragoal.d.ts +5 -1
  189. package/dist/cli/ultragoal.d.ts.map +1 -1
  190. package/dist/cli/ultragoal.js +34 -2
  191. package/dist/cli/ultragoal.js.map +1 -1
  192. package/dist/cli/uninstall.d.ts +17 -0
  193. package/dist/cli/uninstall.d.ts.map +1 -1
  194. package/dist/cli/uninstall.js +986 -95
  195. package/dist/cli/uninstall.js.map +1 -1
  196. package/dist/cli/update.d.ts.map +1 -1
  197. package/dist/cli/update.js +8 -1
  198. package/dist/cli/update.js.map +1 -1
  199. package/dist/cli/url.js.map +1 -1
  200. package/dist/compat/__tests__/doctor-contract.test.js +5 -1
  201. package/dist/compat/__tests__/doctor-contract.test.js.map +1 -1
  202. package/dist/compat/__tests__/rust-runtime-compat.test.js +1 -1
  203. package/dist/compat/__tests__/rust-runtime-compat.test.js.map +1 -1
  204. package/dist/config/__tests__/codex-hooks.test.js +1287 -11
  205. package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
  206. package/dist/config/__tests__/generator-idempotent.test.js +1179 -32
  207. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  208. package/dist/config/__tests__/generator-notify.test.js +6 -1
  209. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  210. package/dist/config/__tests__/models.test.js +67 -3
  211. package/dist/config/__tests__/models.test.js.map +1 -1
  212. package/dist/config/codex-feature-flags.d.ts.map +1 -1
  213. package/dist/config/codex-feature-flags.js.map +1 -1
  214. package/dist/config/codex-hooks.d.ts +124 -1
  215. package/dist/config/codex-hooks.d.ts.map +1 -1
  216. package/dist/config/codex-hooks.js +2142 -265
  217. package/dist/config/codex-hooks.js.map +1 -1
  218. package/dist/config/commit-lore-guard.js.map +1 -1
  219. package/dist/config/generator.d.ts +23 -34
  220. package/dist/config/generator.d.ts.map +1 -1
  221. package/dist/config/generator.js +1480 -246
  222. package/dist/config/generator.js.map +1 -1
  223. package/dist/config/mcp-registry.js.map +1 -1
  224. package/dist/config/models.d.ts +14 -4
  225. package/dist/config/models.d.ts.map +1 -1
  226. package/dist/config/models.js +15 -1
  227. package/dist/config/models.js.map +1 -1
  228. package/dist/config/omx-first-party-mcp.js.map +1 -1
  229. package/dist/config/team-mode.d.ts.map +1 -1
  230. package/dist/document-refresh/__tests__/enforcer.test.js.map +1 -1
  231. package/dist/document-refresh/enforcer.js.map +1 -1
  232. package/dist/exec/followup.js.map +1 -1
  233. package/dist/goal-workflows/artifacts.js.map +1 -1
  234. package/dist/hooks/__tests__/agents-overlay.test.js +7 -4
  235. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  236. package/dist/hooks/__tests__/analyze-routing-contract.test.js.map +1 -1
  237. package/dist/hooks/__tests__/analyze-skill-contract.test.js.map +1 -1
  238. package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
  239. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +9 -3
  240. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  241. package/dist/hooks/__tests__/code-review-skill-contract.test.js.map +1 -1
  242. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
  243. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  244. package/dist/hooks/__tests__/design-skill.test.js.map +1 -1
  245. package/dist/hooks/__tests__/keyword-detector.test.js +1376 -6
  246. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  247. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +252 -543
  248. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  249. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +38 -4
  250. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  251. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +765 -10
  252. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  253. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +2 -0
  254. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  255. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +142 -1
  256. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  257. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
  258. package/dist/hooks/__tests__/notify-hook-non-omx-guard.test.js +48 -2
  259. package/dist/hooks/__tests__/notify-hook-non-omx-guard.test.js.map +1 -1
  260. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +61 -44
  261. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -1
  262. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  263. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +3 -2
  264. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +1 -1
  265. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +243 -4
  266. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  267. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +531 -12
  268. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  269. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +163 -24
  270. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  271. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +482 -32
  272. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  273. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +68 -1
  274. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
  275. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +7 -1
  276. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +1 -1
  277. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +1 -1
  278. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +43 -4
  279. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  280. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -1
  281. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
  282. package/dist/hooks/__tests__/prometheus-strict-contract.test.js.map +1 -1
  283. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +1 -1
  284. package/dist/hooks/__tests__/prompt-guidance-test-helpers.js.map +1 -1
  285. package/dist/hooks/__tests__/prompt-session-provenance.test.d.ts +2 -0
  286. package/dist/hooks/__tests__/prompt-session-provenance.test.d.ts.map +1 -0
  287. package/dist/hooks/__tests__/prompt-session-provenance.test.js +82 -0
  288. package/dist/hooks/__tests__/prompt-session-provenance.test.js.map +1 -0
  289. package/dist/hooks/__tests__/session.test.js +878 -11
  290. package/dist/hooks/__tests__/session.test.js.map +1 -1
  291. package/dist/hooks/__tests__/skill-catalog-hygiene.test.js.map +1 -1
  292. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +1 -1
  293. package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +1 -1
  294. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -1
  295. package/dist/hooks/agents-overlay.js +5 -5
  296. package/dist/hooks/agents-overlay.js.map +1 -1
  297. package/dist/hooks/code-simplifier/index.js.map +1 -1
  298. package/dist/hooks/explore-routing.js.map +1 -1
  299. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  300. package/dist/hooks/extensibility/events.js.map +1 -1
  301. package/dist/hooks/extensibility/loader.js.map +1 -1
  302. package/dist/hooks/extensibility/plugin-runner-stdin.js.map +1 -1
  303. package/dist/hooks/extensibility/sdk/logging.js.map +1 -1
  304. package/dist/hooks/keyword-detector.d.ts +33 -7
  305. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  306. package/dist/hooks/keyword-detector.js +2228 -119
  307. package/dist/hooks/keyword-detector.js.map +1 -1
  308. package/dist/hooks/keyword-registry.d.ts +12 -0
  309. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  310. package/dist/hooks/keyword-registry.js +41 -0
  311. package/dist/hooks/keyword-registry.js.map +1 -1
  312. package/dist/hooks/prompt-session-provenance.d.ts +87 -0
  313. package/dist/hooks/prompt-session-provenance.d.ts.map +1 -0
  314. package/dist/hooks/prompt-session-provenance.js +180 -0
  315. package/dist/hooks/prompt-session-provenance.js.map +1 -0
  316. package/dist/hooks/session.d.ts +163 -34
  317. package/dist/hooks/session.d.ts.map +1 -1
  318. package/dist/hooks/session.js +1395 -317
  319. package/dist/hooks/session.js.map +1 -1
  320. package/dist/hooks/task-size-detector.js.map +1 -1
  321. package/dist/hud/__tests__/state.test.js.map +1 -1
  322. package/dist/hud/authority.js.map +1 -1
  323. package/dist/hud/constants.js.map +1 -1
  324. package/dist/hud/index.js.map +1 -1
  325. package/dist/hud/reconcile.js.map +1 -1
  326. package/dist/hud/render.js.map +1 -1
  327. package/dist/hud/state.js.map +1 -1
  328. package/dist/hud/tmux.js.map +1 -1
  329. package/dist/leader/__tests__/contract.test.js +153 -1
  330. package/dist/leader/__tests__/contract.test.js.map +1 -1
  331. package/dist/leader/contract.d.ts +42 -5
  332. package/dist/leader/contract.d.ts.map +1 -1
  333. package/dist/leader/contract.js +184 -3
  334. package/dist/leader/contract.js.map +1 -1
  335. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  336. package/dist/mcp/__tests__/code-intel-server.test.js +31 -3
  337. package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -1
  338. package/dist/mcp/__tests__/server-lifecycle.test.js +15 -2
  339. package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
  340. package/dist/mcp/__tests__/state-paths.test.js +98 -1
  341. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  342. package/dist/mcp/__tests__/wiki-server.test.js +18 -0
  343. package/dist/mcp/__tests__/wiki-server.test.js.map +1 -1
  344. package/dist/mcp/bootstrap.js.map +1 -1
  345. package/dist/mcp/code-intel-server.d.ts +58 -58
  346. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  347. package/dist/mcp/code-intel-server.js +13 -3
  348. package/dist/mcp/code-intel-server.js.map +1 -1
  349. package/dist/mcp/hermes-bridge.js.map +1 -1
  350. package/dist/mcp/hermes-server.d.ts +70 -70
  351. package/dist/mcp/hermes-server.d.ts.map +1 -1
  352. package/dist/mcp/lifecycle-telemetry.js.map +1 -1
  353. package/dist/mcp/memory-server.d.ts +34 -34
  354. package/dist/mcp/memory-server.d.ts.map +1 -1
  355. package/dist/mcp/memory-server.js.map +1 -1
  356. package/dist/mcp/state-paths.d.ts +14 -0
  357. package/dist/mcp/state-paths.d.ts.map +1 -1
  358. package/dist/mcp/state-paths.js +96 -20
  359. package/dist/mcp/state-paths.js.map +1 -1
  360. package/dist/mcp/state-server.d.ts +47 -47
  361. package/dist/mcp/state-server.d.ts.map +1 -1
  362. package/dist/mcp/trace-server.d.ts +4 -4
  363. package/dist/mcp/trace-server.d.ts.map +1 -1
  364. package/dist/mcp/trace-server.js.map +1 -1
  365. package/dist/mcp/wiki-server.d.ts +34 -23
  366. package/dist/mcp/wiki-server.d.ts.map +1 -1
  367. package/dist/mcp/wiki-server.js +9 -2
  368. package/dist/mcp/wiki-server.js.map +1 -1
  369. package/dist/modes/__tests__/base-session-scope.test.js +53 -1
  370. package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
  371. package/dist/modes/__tests__/base-tmux-pane.test.js +4 -4
  372. package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
  373. package/dist/modes/base.d.ts.map +1 -1
  374. package/dist/modes/base.js +5 -5
  375. package/dist/modes/base.js.map +1 -1
  376. package/dist/notifications/__tests__/lifecycle-dedupe.test.js.map +1 -1
  377. package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
  378. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js +177 -85
  379. package/dist/notifications/__tests__/session-idle-tail-dedupe.test.js.map +1 -1
  380. package/dist/notifications/__tests__/session-registry.test.js.map +1 -1
  381. package/dist/notifications/__tests__/template-engine.test.js.map +1 -1
  382. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  383. package/dist/notifications/http-client.js.map +1 -1
  384. package/dist/notifications/index.d.ts +4 -1
  385. package/dist/notifications/index.d.ts.map +1 -1
  386. package/dist/notifications/index.js +3 -9
  387. package/dist/notifications/index.js.map +1 -1
  388. package/dist/notifications/lifecycle-dedupe.js.map +1 -1
  389. package/dist/notifications/reply-listener.d.ts.map +1 -1
  390. package/dist/notifications/reply-listener.js.map +1 -1
  391. package/dist/notifications/session-registry.js.map +1 -1
  392. package/dist/notifications/session-status.js.map +1 -1
  393. package/dist/notifications/temp-contract.d.ts.map +1 -1
  394. package/dist/notifications/temp-contract.js +4 -0
  395. package/dist/notifications/temp-contract.js.map +1 -1
  396. package/dist/notifications/tmux-detector.js.map +1 -1
  397. package/dist/notifications/tmux.js.map +1 -1
  398. package/dist/openclaw/config.js.map +1 -1
  399. package/dist/openclaw/dispatcher.js.map +1 -1
  400. package/dist/pipeline/__tests__/orchestrator.test.js +4 -4
  401. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  402. package/dist/pipeline/__tests__/stages.test.js +16 -13
  403. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  404. package/dist/pipeline/stages/code-review.js.map +1 -1
  405. package/dist/pipeline/stages/ralph-verify.js.map +1 -1
  406. package/dist/pipeline/stages/ralplan.js.map +1 -1
  407. package/dist/pipeline/stages/team-exec.js.map +1 -1
  408. package/dist/pipeline/stages/ultragoal.js.map +1 -1
  409. package/dist/pipeline/stages/ultraqa.js.map +1 -1
  410. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
  411. package/dist/planning/artifact-names.js.map +1 -1
  412. package/dist/planning/artifacts.js.map +1 -1
  413. package/dist/question/__tests__/state.test.js.map +1 -1
  414. package/dist/question/__tests__/ui.test.js.map +1 -1
  415. package/dist/question/autopilot-wait.js.map +1 -1
  416. package/dist/question/client.d.ts.map +1 -1
  417. package/dist/question/client.js.map +1 -1
  418. package/dist/question/deep-interview.js.map +1 -1
  419. package/dist/question/events.js.map +1 -1
  420. package/dist/question/renderer.js.map +1 -1
  421. package/dist/question/state.d.ts.map +1 -1
  422. package/dist/question/state.js.map +1 -1
  423. package/dist/question/ui.js.map +1 -1
  424. package/dist/ralph/contract.d.ts +1 -1
  425. package/dist/ralph/contract.d.ts.map +1 -1
  426. package/dist/ralplan/__tests__/consensus-gate.test.js +527 -8
  427. package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
  428. package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts +2 -0
  429. package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts.map +1 -0
  430. package/dist/ralplan/__tests__/documented-leader-preflight.test.js +46 -0
  431. package/dist/ralplan/__tests__/documented-leader-preflight.test.js.map +1 -0
  432. package/dist/ralplan/__tests__/runtime.test.js +116 -14
  433. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  434. package/dist/ralplan/consensus-gate.d.ts +3 -3
  435. package/dist/ralplan/consensus-gate.d.ts.map +1 -1
  436. package/dist/ralplan/consensus-gate.js +173 -70
  437. package/dist/ralplan/consensus-gate.js.map +1 -1
  438. package/dist/ralplan/documented-leader-preflight.d.ts +34 -0
  439. package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -0
  440. package/dist/ralplan/documented-leader-preflight.js +58 -0
  441. package/dist/ralplan/documented-leader-preflight.js.map +1 -0
  442. package/dist/ralplan/runtime.d.ts +3 -2
  443. package/dist/ralplan/runtime.d.ts.map +1 -1
  444. package/dist/ralplan/runtime.js +12 -9
  445. package/dist/ralplan/runtime.js.map +1 -1
  446. package/dist/runtime/__tests__/bridge.test.js +42 -1
  447. package/dist/runtime/__tests__/bridge.test.js.map +1 -1
  448. package/dist/runtime/bridge.d.ts +12 -0
  449. package/dist/runtime/bridge.d.ts.map +1 -1
  450. package/dist/runtime/bridge.js +52 -1
  451. package/dist/runtime/bridge.js.map +1 -1
  452. package/dist/runtime/process-tree.js.map +1 -1
  453. package/dist/runtime/run-loop.js.map +1 -1
  454. package/dist/runtime/run-outcome.d.ts +3 -3
  455. package/dist/runtime/run-outcome.d.ts.map +1 -1
  456. package/dist/runtime/run-outcome.js.map +1 -1
  457. package/dist/runtime/run-state.js.map +1 -1
  458. package/dist/scripts/__tests__/codex-native-hook.test.js +6657 -995
  459. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  460. package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.d.ts +2 -0
  461. package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.d.ts.map +1 -0
  462. package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.js +634 -0
  463. package/dist/scripts/__tests__/fixtures/issue-3138-installed-smoke.js.map +1 -0
  464. package/dist/scripts/__tests__/generate-release-body.test.js.map +1 -1
  465. package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +1 -1
  466. package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
  467. package/dist/scripts/__tests__/notify-fallback-delivery.test.d.ts +2 -0
  468. package/dist/scripts/__tests__/notify-fallback-delivery.test.d.ts.map +1 -0
  469. package/dist/scripts/__tests__/notify-fallback-delivery.test.js +174 -0
  470. package/dist/scripts/__tests__/notify-fallback-delivery.test.js.map +1 -0
  471. package/dist/scripts/__tests__/notify-state-io.test.js +57 -1
  472. package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -1
  473. package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts +2 -0
  474. package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts.map +1 -0
  475. package/dist/scripts/__tests__/reasoning-artifact-contract.test.js +108 -0
  476. package/dist/scripts/__tests__/reasoning-artifact-contract.test.js.map +1 -0
  477. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.d.ts +2 -0
  478. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.d.ts.map +1 -0
  479. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js +78 -0
  480. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js.map +1 -0
  481. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.d.ts +2 -0
  482. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.d.ts.map +1 -0
  483. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js +55 -0
  484. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js.map +1 -0
  485. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  486. package/dist/scripts/__tests__/smoke-packed-install.test.js +1100 -4
  487. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  488. package/dist/scripts/__tests__/test-reply-listener-live.test.js.map +1 -1
  489. package/dist/scripts/build-api.js.map +1 -1
  490. package/dist/scripts/build-explore-harness.js.map +1 -1
  491. package/dist/scripts/build-sparkshell.js.map +1 -1
  492. package/dist/scripts/cleanup-explore-harness.js.map +1 -1
  493. package/dist/scripts/codex-execution-surface.js.map +1 -1
  494. package/dist/scripts/codex-native-hook.d.ts +4 -1
  495. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  496. package/dist/scripts/codex-native-hook.js +11577 -1184
  497. package/dist/scripts/codex-native-hook.js.map +1 -1
  498. package/dist/scripts/generate-native-release-manifest.js.map +1 -1
  499. package/dist/scripts/generate-release-body.js.map +1 -1
  500. package/dist/scripts/hook-payload-guard.d.ts.map +1 -1
  501. package/dist/scripts/hook-payload-guard.js.map +1 -1
  502. package/dist/scripts/notify-fallback-delivery.d.ts +48 -0
  503. package/dist/scripts/notify-fallback-delivery.d.ts.map +1 -0
  504. package/dist/scripts/notify-fallback-delivery.js +419 -0
  505. package/dist/scripts/notify-fallback-delivery.js.map +1 -0
  506. package/dist/scripts/notify-fallback-watcher.js +218 -138
  507. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  508. package/dist/scripts/notify-hook/auto-nudge.d.ts +18 -9
  509. package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
  510. package/dist/scripts/notify-hook/auto-nudge.js +112 -15
  511. package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
  512. package/dist/scripts/notify-hook/managed-tmux.d.ts +23 -0
  513. package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
  514. package/dist/scripts/notify-hook/managed-tmux.js +122 -12
  515. package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
  516. package/dist/scripts/notify-hook/orchestration-intent.d.ts +7 -7
  517. package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -1
  518. package/dist/scripts/notify-hook/ralph-session-resume.d.ts +5 -2
  519. package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
  520. package/dist/scripts/notify-hook/ralph-session-resume.js +33 -37
  521. package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
  522. package/dist/scripts/notify-hook/state-io.d.ts +17 -0
  523. package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
  524. package/dist/scripts/notify-hook/state-io.js +73 -11
  525. package/dist/scripts/notify-hook/state-io.js.map +1 -1
  526. package/dist/scripts/notify-hook/team-dispatch.d.ts +10 -1
  527. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  528. package/dist/scripts/notify-hook/team-dispatch.js +234 -79
  529. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  530. package/dist/scripts/notify-hook/team-leader-nudge.d.ts +2 -2
  531. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  532. package/dist/scripts/notify-hook/team-leader-nudge.js +39 -13
  533. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  534. package/dist/scripts/notify-hook/team-tmux-guard.d.ts +16 -8
  535. package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
  536. package/dist/scripts/notify-hook/team-tmux-guard.js +365 -44
  537. package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
  538. package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -1
  539. package/dist/scripts/notify-hook/team-worker-stop.d.ts +1 -1
  540. package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
  541. package/dist/scripts/notify-hook/team-worker-stop.js +19 -18
  542. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
  543. package/dist/scripts/notify-hook/team-worker.d.ts +5 -2
  544. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  545. package/dist/scripts/notify-hook/team-worker.js +37 -28
  546. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  547. package/dist/scripts/notify-hook/tmux-injection.d.ts +8 -1
  548. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  549. package/dist/scripts/notify-hook/tmux-injection.js +53 -18
  550. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  551. package/dist/scripts/notify-hook/visual-verdict.d.ts +1 -1
  552. package/dist/scripts/notify-hook/visual-verdict.d.ts.map +1 -1
  553. package/dist/scripts/notify-hook/visual-verdict.js +15 -13
  554. package/dist/scripts/notify-hook/visual-verdict.js.map +1 -1
  555. package/dist/scripts/notify-hook.d.ts +24 -1
  556. package/dist/scripts/notify-hook.d.ts.map +1 -1
  557. package/dist/scripts/notify-hook.js +267 -90
  558. package/dist/scripts/notify-hook.js.map +1 -1
  559. package/dist/scripts/postinstall.js.map +1 -1
  560. package/dist/scripts/prompt-inventory.js.map +1 -1
  561. package/dist/scripts/smoke-packed-install.d.ts +927 -5
  562. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  563. package/dist/scripts/smoke-packed-install.js +4317 -13
  564. package/dist/scripts/smoke-packed-install.js.map +1 -1
  565. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  566. package/dist/scripts/test-reply-listener-live.js.map +1 -1
  567. package/dist/scripts/test-sparkshell.js.map +1 -1
  568. package/dist/scripts/verify-native-agents.js.map +1 -1
  569. package/dist/session-history/friction.js.map +1 -1
  570. package/dist/session-history/search.js.map +1 -1
  571. package/dist/sidecar/__tests__/boundary.test.js.map +1 -1
  572. package/dist/sidecar/collector.js.map +1 -1
  573. package/dist/sidecar/index.js.map +1 -1
  574. package/dist/sidecar/render.js.map +1 -1
  575. package/dist/sidecar/tmux.js.map +1 -1
  576. package/dist/state/__tests__/mode-state-context.test.js +54 -0
  577. package/dist/state/__tests__/mode-state-context.test.js.map +1 -1
  578. package/dist/state/__tests__/operations.test.js +66 -15
  579. package/dist/state/__tests__/operations.test.js.map +1 -1
  580. package/dist/state/__tests__/skill-active.test.js +19 -1
  581. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  582. package/dist/state/__tests__/workflow-transition.test.js +61 -0
  583. package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
  584. package/dist/state/mode-state-context.d.ts +5 -0
  585. package/dist/state/mode-state-context.d.ts.map +1 -1
  586. package/dist/state/mode-state-context.js +59 -0
  587. package/dist/state/mode-state-context.js.map +1 -1
  588. package/dist/state/operations.d.ts +1 -1
  589. package/dist/state/operations.d.ts.map +1 -1
  590. package/dist/state/operations.js +49 -55
  591. package/dist/state/operations.js.map +1 -1
  592. package/dist/state/paths.d.ts +1 -1
  593. package/dist/state/paths.d.ts.map +1 -1
  594. package/dist/state/paths.js +1 -1
  595. package/dist/state/paths.js.map +1 -1
  596. package/dist/state/skill-active.d.ts +13 -1
  597. package/dist/state/skill-active.d.ts.map +1 -1
  598. package/dist/state/skill-active.js +43 -4
  599. package/dist/state/skill-active.js.map +1 -1
  600. package/dist/state/terminal-normalization.js.map +1 -1
  601. package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
  602. package/dist/state/workflow-transition-reconcile.js +20 -4
  603. package/dist/state/workflow-transition-reconcile.js.map +1 -1
  604. package/dist/state/workflow-transition.d.ts +1 -1
  605. package/dist/state/workflow-transition.d.ts.map +1 -1
  606. package/dist/state/workflow-transition.js.map +1 -1
  607. package/dist/subagents/__tests__/leader-bootstrap-3181.test.d.ts +2 -0
  608. package/dist/subagents/__tests__/leader-bootstrap-3181.test.d.ts.map +1 -0
  609. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js +52 -0
  610. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js.map +1 -0
  611. package/dist/subagents/__tests__/tracker.test.js +1550 -10
  612. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  613. package/dist/subagents/role-routing-marker.d.ts +10 -0
  614. package/dist/subagents/role-routing-marker.d.ts.map +1 -0
  615. package/dist/subagents/role-routing-marker.js +136 -0
  616. package/dist/subagents/role-routing-marker.js.map +1 -0
  617. package/dist/subagents/tracker.d.ts +91 -0
  618. package/dist/subagents/tracker.d.ts.map +1 -1
  619. package/dist/subagents/tracker.js +806 -62
  620. package/dist/subagents/tracker.js.map +1 -1
  621. package/dist/team/__tests__/api-interop.test.js +91 -1
  622. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  623. package/dist/team/__tests__/approved-execution.test.js.map +1 -1
  624. package/dist/team/__tests__/delivery-e2e-smoke.test.js +52 -10
  625. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
  626. package/dist/team/__tests__/idle-nudge.test.js +45 -15
  627. package/dist/team/__tests__/idle-nudge.test.js.map +1 -1
  628. package/dist/team/__tests__/mcp-comm.test.js +93 -27
  629. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  630. package/dist/team/__tests__/model-contract.test.js +341 -4
  631. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  632. package/dist/team/__tests__/role-router.test.js.map +1 -1
  633. package/dist/team/__tests__/runtime-cli.test.js +9 -0
  634. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  635. package/dist/team/__tests__/runtime.test.js +3624 -355
  636. package/dist/team/__tests__/runtime.test.js.map +1 -1
  637. package/dist/team/__tests__/scaling.test.js +2516 -118
  638. package/dist/team/__tests__/scaling.test.js.map +1 -1
  639. package/dist/team/__tests__/state-root.test.js.map +1 -1
  640. package/dist/team/__tests__/state.test.js +804 -36
  641. package/dist/team/__tests__/state.test.js.map +1 -1
  642. package/dist/team/__tests__/team-ops-contract.test.js +6 -0
  643. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -1
  644. package/dist/team/__tests__/tmux-session.test.js +3664 -969
  645. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  646. package/dist/team/__tests__/tmux-test-fixture.js.map +1 -1
  647. package/dist/team/__tests__/worker-runtime-identity.test.js +38 -2
  648. package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
  649. package/dist/team/__tests__/worktree.test.js +6 -0
  650. package/dist/team/__tests__/worktree.test.js.map +1 -1
  651. package/dist/team/api-interop.d.ts +2 -2
  652. package/dist/team/api-interop.d.ts.map +1 -1
  653. package/dist/team/api-interop.js +15 -9
  654. package/dist/team/api-interop.js.map +1 -1
  655. package/dist/team/commit-hygiene.js.map +1 -1
  656. package/dist/team/contracts.d.ts +5 -5
  657. package/dist/team/contracts.d.ts.map +1 -1
  658. package/dist/team/delivery-log.js.map +1 -1
  659. package/dist/team/exact-pane.d.ts +23 -0
  660. package/dist/team/exact-pane.d.ts.map +1 -0
  661. package/dist/team/exact-pane.js +133 -0
  662. package/dist/team/exact-pane.js.map +1 -0
  663. package/dist/team/followup-planner.js.map +1 -1
  664. package/dist/team/goal-workflow.js.map +1 -1
  665. package/dist/team/idle-nudge.d.ts +12 -1
  666. package/dist/team/idle-nudge.d.ts.map +1 -1
  667. package/dist/team/idle-nudge.js +41 -14
  668. package/dist/team/idle-nudge.js.map +1 -1
  669. package/dist/team/model-contract.d.ts +18 -2
  670. package/dist/team/model-contract.d.ts.map +1 -1
  671. package/dist/team/model-contract.js +314 -35
  672. package/dist/team/model-contract.js.map +1 -1
  673. package/dist/team/orchestrator.js.map +1 -1
  674. package/dist/team/pane-status.js.map +1 -1
  675. package/dist/team/phase-controller.js.map +1 -1
  676. package/dist/team/reminder-intents.d.ts +1 -1
  677. package/dist/team/reminder-intents.d.ts.map +1 -1
  678. package/dist/team/reminder-intents.js.map +1 -1
  679. package/dist/team/runtime-cli.js.map +1 -1
  680. package/dist/team/runtime.d.ts +1 -0
  681. package/dist/team/runtime.d.ts.map +1 -1
  682. package/dist/team/runtime.js +1326 -231
  683. package/dist/team/runtime.js.map +1 -1
  684. package/dist/team/scaling.d.ts +22 -8
  685. package/dist/team/scaling.d.ts.map +1 -1
  686. package/dist/team/scaling.js +1463 -376
  687. package/dist/team/scaling.js.map +1 -1
  688. package/dist/team/state/dispatch-lock.js.map +1 -1
  689. package/dist/team/state/dispatch.d.ts.map +1 -1
  690. package/dist/team/state/dispatch.js +26 -8
  691. package/dist/team/state/dispatch.js.map +1 -1
  692. package/dist/team/state/events.js.map +1 -1
  693. package/dist/team/state/locks.d.ts.map +1 -1
  694. package/dist/team/state/locks.js +61 -13
  695. package/dist/team/state/locks.js.map +1 -1
  696. package/dist/team/state/tasks.d.ts.map +1 -1
  697. package/dist/team/state/tasks.js +4 -3
  698. package/dist/team/state/tasks.js.map +1 -1
  699. package/dist/team/state-root.js.map +1 -1
  700. package/dist/team/state.d.ts +67 -1
  701. package/dist/team/state.d.ts.map +1 -1
  702. package/dist/team/state.js +636 -129
  703. package/dist/team/state.js.map +1 -1
  704. package/dist/team/team-identity.d.ts.map +1 -1
  705. package/dist/team/team-identity.js.map +1 -1
  706. package/dist/team/team-ops.d.ts +5 -0
  707. package/dist/team/team-ops.d.ts.map +1 -1
  708. package/dist/team/team-ops.js +4 -0
  709. package/dist/team/team-ops.js.map +1 -1
  710. package/dist/team/tmux-session.d.ts +125 -23
  711. package/dist/team/tmux-session.d.ts.map +1 -1
  712. package/dist/team/tmux-session.js +1340 -333
  713. package/dist/team/tmux-session.js.map +1 -1
  714. package/dist/team/worker-bootstrap.js.map +1 -1
  715. package/dist/team/worktree.d.ts.map +1 -1
  716. package/dist/team/worktree.js +4 -0
  717. package/dist/team/worktree.js.map +1 -1
  718. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  719. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  720. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  721. package/dist/ultragoal/artifacts.js +4 -1
  722. package/dist/ultragoal/artifacts.js.map +1 -1
  723. package/dist/url-reader/index.js.map +1 -1
  724. package/dist/utils/__tests__/file-durability.test.d.ts +2 -0
  725. package/dist/utils/__tests__/file-durability.test.d.ts.map +1 -0
  726. package/dist/utils/__tests__/file-durability.test.js +57 -0
  727. package/dist/utils/__tests__/file-durability.test.js.map +1 -0
  728. package/dist/utils/agents-model-table.js.map +1 -1
  729. package/dist/utils/file-durability.d.ts +15 -0
  730. package/dist/utils/file-durability.d.ts.map +1 -0
  731. package/dist/utils/file-durability.js +37 -0
  732. package/dist/utils/file-durability.js.map +1 -0
  733. package/dist/utils/package.js.map +1 -1
  734. package/dist/utils/paths.js.map +1 -1
  735. package/dist/utils/platform-command.js.map +1 -1
  736. package/dist/utils/repo-deps.js.map +1 -1
  737. package/dist/utils/version.js.map +1 -1
  738. package/dist/verification/__tests__/ci-rust-gates.test.js +1 -1
  739. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +3 -0
  740. package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +1 -1
  741. package/dist/verification/verifier.js.map +1 -1
  742. package/dist/visual/constants.d.ts +1 -1
  743. package/dist/visual/constants.d.ts.map +1 -1
  744. package/dist/vscode/__tests__/index.test.js.map +1 -1
  745. package/dist/vscode/index.js.map +1 -1
  746. package/dist/wiki/__tests__/cjk-tokenize.test.js.map +1 -1
  747. package/dist/wiki/__tests__/lint.test.js.map +1 -1
  748. package/dist/wiki/__tests__/query.test.js.map +1 -1
  749. package/dist/wiki/__tests__/storage.test.js.map +1 -1
  750. package/dist/wiki/__tests__/test-helpers.d.ts.map +1 -1
  751. package/dist/wiki/lint.d.ts +4 -1
  752. package/dist/wiki/lint.d.ts.map +1 -1
  753. package/dist/wiki/lint.js +3 -2
  754. package/dist/wiki/lint.js.map +1 -1
  755. package/dist/wiki/query.js.map +1 -1
  756. package/dist/wiki/storage.js.map +1 -1
  757. package/package.json +2 -2
  758. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  759. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +24 -0
  760. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +10 -5
  761. package/plugins/oh-my-codex/skills/ralph/SKILL.md +6 -2
  762. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +6 -2
  763. package/plugins/oh-my-codex/skills/team/SKILL.md +13 -9
  764. package/skills/omx-setup/SKILL.md +10 -5
  765. package/skills/ralph/SKILL.md +6 -2
  766. package/skills/ralplan/SKILL.md +6 -2
  767. package/skills/team/SKILL.md +13 -9
  768. package/src/scripts/__tests__/codex-native-hook.test.ts +20048 -10827
  769. package/src/scripts/__tests__/fixtures/issue-3138-installed-smoke.ts +734 -0
  770. package/src/scripts/__tests__/notify-fallback-delivery.test.ts +177 -0
  771. package/src/scripts/__tests__/notify-state-io.test.ts +73 -0
  772. package/src/scripts/__tests__/reasoning-artifact-contract.test.ts +129 -0
  773. package/src/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.ts +78 -0
  774. package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +60 -0
  775. package/src/scripts/__tests__/smoke-packed-install.test.ts +1309 -4
  776. package/src/scripts/codex-native-hook.ts +11429 -1163
  777. package/src/scripts/notify-fallback-delivery.ts +416 -0
  778. package/src/scripts/notify-fallback-watcher.ts +216 -155
  779. package/src/scripts/notify-hook/auto-nudge.ts +113 -14
  780. package/src/scripts/notify-hook/managed-tmux.ts +149 -12
  781. package/src/scripts/notify-hook/ralph-session-resume.ts +37 -36
  782. package/src/scripts/notify-hook/state-io.ts +100 -13
  783. package/src/scripts/notify-hook/team-dispatch.ts +242 -75
  784. package/src/scripts/notify-hook/team-leader-nudge.ts +40 -18
  785. package/src/scripts/notify-hook/team-tmux-guard.ts +366 -39
  786. package/src/scripts/notify-hook/team-worker-stop.ts +20 -16
  787. package/src/scripts/notify-hook/team-worker.ts +39 -26
  788. package/src/scripts/notify-hook/tmux-injection.ts +66 -23
  789. package/src/scripts/notify-hook/visual-verdict.ts +22 -12
  790. package/src/scripts/notify-hook.ts +336 -90
  791. package/src/scripts/smoke-packed-install.ts +5154 -149
package/dist/cli/index.js CHANGED
@@ -17,6 +17,7 @@ import { hudCommand } from "../hud/index.js";
17
17
  import { sidecarCommand } from "../sidecar/index.js";
18
18
  import { teamCommand } from "./team.js";
19
19
  import { ralphCommand } from "./ralph.js";
20
+ import { ralplanCommand } from "./ralplan.js";
20
21
  import { ultragoalCommand } from "./ultragoal.js";
21
22
  import { performanceGoalCommand } from "./performance-goal.js";
22
23
  import { askCommand } from "./ask.js";
@@ -38,23 +39,24 @@ import { adaptCommand } from "./adapt.js";
38
39
  import { listCommand } from "./list.js";
39
40
  import { authCommand } from "./auth.js";
40
41
  import { missionCommand } from "./mission.js";
41
- import { runAuthHotswap } from "../auth/hotswap.js";
42
+ import { resolveCodexGlobalOptionValue, runAuthHotswap, } from "../auth/hotswap.js";
42
43
  import { MADMAX_FLAG, CODEX_BYPASS_FLAG, HIGH_REASONING_FLAG, XHIGH_REASONING_FLAG, SPARK_FLAG, MADMAX_SPARK_FLAG, CONFIG_FLAG, LONG_CONFIG_FLAG, } from "./constants.js";
43
- import { getBaseStateDir, getStateDir, listModeStateFilesWithScopePreference, } from "../mcp/state-paths.js";
44
+ import { getBaseStateDir, getBaseStateDirWithSource, getStateDir, listModeStateFilesWithScopePreference, resolveWritableStateScope, } from "../mcp/state-paths.js";
44
45
  import { evaluateRalphCompletionAuditEvidence, isRalphCompletePhase } from "../ralph/completion-audit.js";
45
46
  import { normalizeTerminalWorkflowState } from "../state/terminal-normalization.js";
46
47
  import { readPersistedSetupPreferences, resolveCodexConfigPathForLaunch, resolveCodexHomeForLaunch, resolveProjectLocalCodexHomeForLaunch, } from "./codex-home.js";
47
48
  import { discoverProjectRuntimeCodexHomes } from "./project-runtime-codex-homes.js";
48
49
  import { discoverOmxPluginCacheDirs, hasLocalOmxPluginEnablement, materializePackagedOmxPluginCache, packagedOmxPluginVersion, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, } from "./plugin-marketplace.js";
49
50
  import { escapeTomlString, readTopLevelTomlString, upsertTopLevelTomlString } from "../utils/toml.js";
50
- import { CANONICAL_REASONING_EFFORTS, isAmbiguousUnsupportedReasoningEffort, } from "../config/models.js";
51
+ import { ROOT_REASONING_EFFORTS, isUnsupportedRootReasoningEffort, normalizeUnsupportedRootReasoningEffort, } from "../config/models.js";
51
52
  export { readPersistedSetupPreferences, readPersistedSetupScope, resolveCodexConfigPathForLaunch, resolveCodexHomeForLaunch, resolveProjectLocalCodexHomeForLaunch, } from "./codex-home.js";
52
53
  import { SKILL_ACTIVE_STATE_MODE, extractSessionIdFromInitializedStatePath, getSkillActiveStatePathsForStateDir, listActiveSkills, readSkillActiveState, syncCanonicalSkillStateForMode, } from "../state/skill-active.js";
53
54
  import { isTrackedWorkflowMode } from "../state/workflow-transition.js";
54
55
  import { maybeCheckAndPromptUpdate, runImmediateUpdate } from "./update.js";
55
56
  import { maybePromptGithubStar } from "./star-prompt.js";
56
57
  import { generateOverlay, removeSessionModelInstructionsFile, resolveSessionOrchestrationMode, sessionModelInstructionsPath, writeSessionModelInstructionsFile, } from "../hooks/agents-overlay.js";
57
- import { readSessionState, writeSessionStart, writeSessionEnd, resetSessionMetrics, } from "../hooks/session.js";
58
+ import { isSessionPointerLaunchAbort, normalizeSessionId, readSessionState, writeSessionStart, writeSessionEnd, resetSessionMetrics, } from "../hooks/session.js";
59
+ import { probeActualTmuxInstanceEvidence, tmuxEvidenceBindsCandidate } from "../scripts/notify-hook/managed-tmux.js";
58
60
  import { buildClientAttachedReconcileHookName, buildReconcileHudResizeArgs, buildRegisterClientAttachedReconcileArgs, buildRegisterResizeHookArgs, buildResizeHookName, buildResizeHookTarget, buildScheduleDelayedHudResizeArgs, buildUnregisterClientAttachedReconcileArgs, buildUnregisterResizeHookArgs, enableMouseScrolling, isMsysOrGitBash, isNativeWindows, isTmuxAvailable, mitigateCopyModeUnderlineArtifacts, } from "../team/tmux-session.js";
59
61
  import { getPackageRoot } from "../utils/package.js";
60
62
  import { codexConfigPath, omxRoot, rememberOmxLaunchContext, resolveOmxCliEntryPath } from "../utils/paths.js";
@@ -69,7 +71,7 @@ rememberOmxLaunchContext({ argv1: process.argv[1], cwd: process.cwd(), env: proc
69
71
  import { classifySpawnError, resolveTmuxBinaryForPlatform, spawnPlatformCommandSync, } from "../utils/platform-command.js";
70
72
  import { buildHookEvent } from "../hooks/extensibility/events.js";
71
73
  import { dispatchHookEvent } from "../hooks/extensibility/dispatcher.js";
72
- import { collectInheritableTeamWorkerArgs as collectInheritableTeamWorkerArgsShared, parseTeamWorkerLaunchArgs, resolveTeamWorkerLaunchArgs, resolveTeamLowComplexityDefaultModel, TEAM_WORKER_INHERITED_MODEL_ENV, } from "../team/model-contract.js";
74
+ import { collectInheritableTeamWorkerArgs as collectInheritableTeamWorkerArgsShared, parseTeamWorkerLaunchArgs, resolveTeamWorkerLaunchArgs, resolveTeamLowComplexityDefaultModel, serializeTeamWorkerLaunchArgs, TEAM_WORKER_INHERITED_MODEL_ENV, } from "../team/model-contract.js";
73
75
  import { parseWorktreeMode, planWorktreeTarget, ensureWorktree, } from "../team/worktree.js";
74
76
  import { ensureReusableNodeModules } from "../utils/repo-deps.js";
75
77
  import { resolveWorktreeToolContext, worktreeToolContextEnv } from "../utils/worktree-tool-context.js";
@@ -121,6 +123,7 @@ Usage:
121
123
  omx explore DEPRECATED compatibility command; use normal repo inspection or omx sparkshell
122
124
  omx api Run native omx-api localhost gateway commands (serve|status|stop|generate)
123
125
  omx session Search and summarize local session history (--codex-home <path> escape hatch)
126
+ Includes session lock inspect/recover diagnostics
124
127
  omx url Passive URL reader (read <url> --json)
125
128
  omx capabilities
126
129
  Lock/check deterministic configured tool, skill, agent, and observation surfaces
@@ -131,6 +134,7 @@ Usage:
131
134
  Alias for agents-init (lightweight AGENTS bootstrap only)
132
135
  omx team Spawn parallel worker panes in tmux and bootstrap inbox/task state
133
136
  omx ralph Launch Codex with ralph persistence mode active
137
+ omx ralplan Record validated role intents for adapted native subagent spawns
134
138
  omx ultragoal Create, resume, and checkpoint durable multi-goal plans over Codex goal mode
135
139
  omx performance-goal
136
140
  Create, hand off, and gate evaluator-backed performance goals
@@ -185,8 +189,11 @@ Options:
185
189
  Launch Codex in a git worktree (detached when no name is given)
186
190
  --force Force reinstall (overwrite existing files)
187
191
  --merge-agents
188
- Merge OMX-managed AGENTS.md sections into an existing AGENTS.md
189
- instead of overwriting user-authored content
192
+ Merge OMX-managed AGENTS.md sections and persist that explicit policy for this project root
193
+ --no-merge-agents
194
+ Persist an explicit non-merge policy; current non-merge behavior remains contextual
195
+ --clear-merge-agents-policy
196
+ Clear the persisted AGENTS merge policy for this project root
190
197
  --dry-run Show what would be done without doing it
191
198
  --plugin Use Codex plugin delivery for omx setup and remove legacy OMX-managed user/project components
192
199
  --legacy Use legacy setup delivery for omx setup, overriding persisted plugin mode
@@ -229,10 +236,15 @@ const OMX_MODEL_INSTRUCTIONS_FILE_ENV = "OMX_MODEL_INSTRUCTIONS_FILE";
229
236
  const OMX_INSTANCE_OPTION = "@omx_instance_id";
230
237
  const OMX_RALPH_APPEND_INSTRUCTIONS_FILE_ENV = "OMX_RALPH_APPEND_INSTRUCTIONS_FILE";
231
238
  const OMX_AUTORESEARCH_APPEND_INSTRUCTIONS_FILE_ENV = "OMX_AUTORESEARCH_APPEND_INSTRUCTIONS_FILE";
232
- const REASONING_MODES = CANONICAL_REASONING_EFFORTS;
239
+ const REASONING_MODES = ROOT_REASONING_EFFORTS;
233
240
  const REASONING_MODE_SET = new Set(REASONING_MODES);
234
241
  const REASONING_USAGE = "Usage: omx reasoning <low|medium|high|xhigh>";
235
- const AMBIGUOUS_REASONING_MESSAGE = 'Codex/OMX canonical highest reasoning effort is "xhigh"; "max" and "ultra" are not accepted aliases.';
242
+ function unsupportedLaunchShorthandError(flag) {
243
+ const guidance = flag === "--max"
244
+ ? 'No --max shorthand exists; use agentReasoning for per-agent "max" or pass -c model_reasoning_effort=... directly to Codex.'
245
+ : '"ultra" is not an OMX root or per-agent reasoning value and is not an alias for "max".';
246
+ return new Error(`Unsupported OMX launch shorthand "${flag}".\n${guidance}\nRun "omx help" for usage.`);
247
+ }
236
248
  const ALLOWED_SHELLS = new Set([
237
249
  "/bin/sh",
238
250
  "/bin/bash",
@@ -258,6 +270,9 @@ const TMUX_EXTENDED_KEYS_LEASE_DIR = "tmux-extended-keys";
258
270
  const TMUX_EXTENDED_KEYS_LOCK_RETRY_MS = 20;
259
271
  const TMUX_EXTENDED_KEYS_LOCK_MAX_ATTEMPTS = 100;
260
272
  const TMUX_EXTENDED_KEYS_LOCK_STALE_MS = 30_000;
273
+ const RESUME_HELP = `Usage: omx resume [--project] [--codex-home <path>] [codex resume options]
274
+
275
+ Read-only help does not prepare or launch a Codex session.`;
261
276
  const NESTED_HELP_COMMANDS = new Set([
262
277
  "ask",
263
278
  "question",
@@ -286,6 +301,7 @@ const NESTED_HELP_COMMANDS = new Set([
286
301
  "wiki",
287
302
  "mcp-serve",
288
303
  "ralph",
304
+ "ralplan",
289
305
  "ultragoal",
290
306
  "performance-goal",
291
307
  "resume",
@@ -296,6 +312,43 @@ const NESTED_HELP_COMMANDS = new Set([
296
312
  "team",
297
313
  "tmux-hook",
298
314
  ]);
315
+ export function resolveSetupAgentsMergePolicyArg(args) {
316
+ let policy;
317
+ const setPolicy = (next, source) => {
318
+ if (policy && (policy.kind !== next.kind || (policy.kind === "set" && next.kind === "set" && policy.value !== next.value))) {
319
+ throw new Error(`Conflicting setup AGENTS merge policy flags: ${source} conflicts with another merge policy selector.`);
320
+ }
321
+ policy = next;
322
+ };
323
+ for (let index = 0; index < args.length; index += 1) {
324
+ const arg = args[index];
325
+ if (arg === "--merge-agents" || arg === "--no-merge-agents" || arg === "--clear-merge-agents-policy") {
326
+ const next = args[index + 1];
327
+ if (next && !next.startsWith("--")) {
328
+ throw new Error(`Setup AGENTS merge policy flags do not accept values: ${arg} ${next}`);
329
+ }
330
+ if (arg === "--merge-agents") {
331
+ setPolicy({ kind: "set", value: true }, arg);
332
+ }
333
+ else if (arg === "--no-merge-agents") {
334
+ setPolicy({ kind: "set", value: false }, arg);
335
+ }
336
+ else {
337
+ setPolicy({ kind: "clear" }, arg);
338
+ }
339
+ }
340
+ else if (arg.startsWith("--merge-agents=") ||
341
+ arg.startsWith("--no-merge-agents=") ||
342
+ arg.startsWith("--clear-merge-agents-policy=")) {
343
+ throw new Error(`Setup AGENTS merge policy flags do not accept values: ${arg}`);
344
+ }
345
+ }
346
+ return policy;
347
+ }
348
+ export function resolveSetupMergeAgentsArg(args) {
349
+ const policy = resolveSetupAgentsMergePolicyArg(args);
350
+ return policy?.kind === "set" ? policy.value : undefined;
351
+ }
299
352
  export function resolveSetupInstallModeArg(args) {
300
353
  let value;
301
354
  const setValue = (next, source) => {
@@ -438,6 +491,15 @@ export function resolveSetupTeamModeArg(args) {
438
491
  }
439
492
  return value;
440
493
  }
494
+ function splitOmxArgsAtEndOfOptions(args) {
495
+ const endOfOptionsIndex = args.indexOf("--");
496
+ if (endOfOptionsIndex === -1)
497
+ return { omxArgs: args, suffix: [] };
498
+ return {
499
+ omxArgs: args.slice(0, endOfOptionsIndex),
500
+ suffix: args.slice(endOfOptionsIndex),
501
+ };
502
+ }
441
503
  export function resolveCliInvocation(args) {
442
504
  const firstArg = args[0];
443
505
  if (firstArg === "--help" || firstArg === "-h") {
@@ -801,13 +863,14 @@ export async function prepareCodexHomeForLaunch(cwd, sessionId, env = process.en
801
863
  };
802
864
  }
803
865
  export function parseResumeCodexHomeSelection(args) {
866
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
804
867
  const nextArgs = [];
805
868
  let explicitCodexHome;
806
869
  let projectOnly = false;
807
- for (let index = 0; index < args.length; index += 1) {
808
- const arg = args[index];
870
+ for (let index = 0; index < omxArgs.length; index += 1) {
871
+ const arg = omxArgs[index];
809
872
  if (arg === "--codex-home") {
810
- const value = args[index + 1];
873
+ const value = omxArgs[index + 1];
811
874
  if (!value || value.startsWith("-")) {
812
875
  throw new Error("Missing value after --codex-home.");
813
876
  }
@@ -829,7 +892,7 @@ export function parseResumeCodexHomeSelection(args) {
829
892
  nextArgs.push(arg);
830
893
  }
831
894
  return {
832
- args: nextArgs,
895
+ args: [...nextArgs, ...suffix],
833
896
  explicitCodexHome,
834
897
  projectOnly,
835
898
  };
@@ -874,8 +937,32 @@ export async function preflightResumeOmxPluginState(codexHomeDir, pkgRoot = getP
874
937
  configUpdated,
875
938
  };
876
939
  }
877
- function isResumeCodexLaunch(args) {
878
- return args.includes("resume");
940
+ export { CODEX_GLOBAL_OPTIONS_WITH_SPLIT_VALUE } from "../auth/hotswap.js";
941
+ export function isResumeCodexLaunch(args) {
942
+ const { omxArgs } = splitOmxArgsAtEndOfOptions(args);
943
+ for (let index = 0; index < omxArgs.length; index += 1) {
944
+ const arg = omxArgs[index];
945
+ const optionValue = resolveCodexGlobalOptionValue(arg);
946
+ if (optionValue?.valueArity === "single") {
947
+ if (!optionValue.attached)
948
+ index += 1;
949
+ continue;
950
+ }
951
+ if (optionValue?.valueArity === "variadic") {
952
+ if (optionValue.attached)
953
+ continue;
954
+ let nextIndex = index + 1;
955
+ while (nextIndex < omxArgs.length && !omxArgs[nextIndex].startsWith("-")) {
956
+ nextIndex += 1;
957
+ }
958
+ index = nextIndex - 1;
959
+ continue;
960
+ }
961
+ if (arg.startsWith("-"))
962
+ continue;
963
+ return arg === "resume";
964
+ }
965
+ return false;
879
966
  }
880
967
  async function prepareResumeCodexHomeForLaunch(cwd, sessionId, args, env = process.env) {
881
968
  const selection = parseResumeCodexHomeSelection(args);
@@ -1088,6 +1175,18 @@ function hasErrnoCode(error, code) {
1088
1175
  function isMissingTmuxLaunchNoise(error) {
1089
1176
  return error instanceof Error && /spawnSync tmux ENOENT/i.test(error.message);
1090
1177
  }
1178
+ function reportOrdinaryLaunchRootConflict(error, cwd, ordinaryLaunch) {
1179
+ if (!ordinaryLaunch || !isSessionPointerLaunchAbort(error)
1180
+ || error.code !== "session_pointer_owner_conflict"
1181
+ || getBaseStateDirWithSource(cwd).rootSource !== "cwd-default")
1182
+ return;
1183
+ console.error("[omx] concurrent conversations in this checkout require distinct user-specified OMX_ROOT values.\n" +
1184
+ "[omx] Choose a distinct directory and set OMX_ROOT before launching the additional conversation.\n" +
1185
+ "[omx] POSIX: OMX_ROOT=\"$HOME/.omx/instances/second-conversation\" omx\n" +
1186
+ "[omx] PowerShell: $env:OMX_ROOT = \"$HOME/.omx/instances/second-conversation\"; omx\n" +
1187
+ "[omx] cmd.exe: set \"OMX_ROOT=%USERPROFILE%\\.omx\\instances\\second-conversation\" && omx\n" +
1188
+ "[omx] The selected OMX_ROOT is used literally; OMX does not reroute or allocate one automatically.");
1189
+ }
1091
1190
  function logCliOperationFailure(error) {
1092
1191
  if (isMissingTmuxLaunchNoise(error))
1093
1192
  return;
@@ -1513,10 +1612,31 @@ function launchArgRequestsDisposableWorktree(arg) {
1513
1612
  (arg.startsWith("-w") && arg.length > 2);
1514
1613
  }
1515
1614
  function launchArgsRequestMadmaxIsolation(launchArgs) {
1516
- return launchArgs.some((arg) => arg === MADMAX_FLAG || arg === MADMAX_SPARK_FLAG);
1615
+ for (const arg of launchArgs) {
1616
+ if (arg === "--")
1617
+ break;
1618
+ if (arg === MADMAX_FLAG || arg === MADMAX_SPARK_FLAG)
1619
+ return true;
1620
+ }
1621
+ return false;
1622
+ }
1623
+ function launchArgsRequestAuthHotswap(launchArgs) {
1624
+ for (const arg of launchArgs) {
1625
+ if (arg === "--")
1626
+ break;
1627
+ if (arg === "--hotswap")
1628
+ return true;
1629
+ }
1630
+ return false;
1517
1631
  }
1518
1632
  function launchArgsRequestDisposableWorktree(launchArgs) {
1519
- return launchArgs.some((arg) => launchArgRequestsDisposableWorktree(arg));
1633
+ for (const arg of launchArgs) {
1634
+ if (arg === "--")
1635
+ break;
1636
+ if (launchArgRequestsDisposableWorktree(arg))
1637
+ return true;
1638
+ }
1639
+ return false;
1520
1640
  }
1521
1641
  function clearInheritedMadmaxRootForDisposableWorktreeLaunch(launchArgs, env = process.env) {
1522
1642
  if (!launchArgsRequestDisposableWorktree(launchArgs))
@@ -1890,6 +2010,7 @@ export async function main(args) {
1890
2010
  "sparkshell",
1891
2011
  "team",
1892
2012
  "ralph",
2013
+ "ralplan",
1893
2014
  "ultragoal",
1894
2015
  "performance-goal",
1895
2016
  "session",
@@ -1909,10 +2030,11 @@ export async function main(args) {
1909
2030
  ]);
1910
2031
  const firstArg = args[0];
1911
2032
  const { command, launchArgs } = resolveCliInvocation(args);
1912
- const flags = new Set(args.filter((a) => a.startsWith("--")));
2033
+ const { omxArgs } = splitOmxArgsAtEndOfOptions(args);
2034
+ const flags = new Set(omxArgs.filter((arg) => arg.startsWith("--")));
1913
2035
  const options = {
1914
2036
  force: flags.has("--force"),
1915
- mergeAgents: flags.has("--merge-agents"),
2037
+ mergeAgents: undefined,
1916
2038
  dryRun: flags.has("--dry-run"),
1917
2039
  verbose: flags.has("--verbose"),
1918
2040
  team: flags.has("--team"),
@@ -1921,11 +2043,19 @@ export async function main(args) {
1921
2043
  console.log(HELP);
1922
2044
  return;
1923
2045
  }
1924
- activateMadmaxIsolationIfNeeded(command, launchArgs, process.cwd(), process.env);
1925
2046
  try {
2047
+ if (command === "session") {
2048
+ await sessionCommand(args.slice(1));
2049
+ return;
2050
+ }
2051
+ if (command === "resume" && launchArgs.some((arg) => arg === "--help" || arg === "-h")) {
2052
+ console.log(RESUME_HELP);
2053
+ return;
2054
+ }
2055
+ activateMadmaxIsolationIfNeeded(command, launchArgs, process.cwd(), process.env);
1926
2056
  switch (command) {
1927
2057
  case "launch":
1928
- if (launchArgs.includes("--hotswap")) {
2058
+ if (launchArgsRequestAuthHotswap(launchArgs)) {
1929
2059
  await launchWithAuthHotswap(launchArgs);
1930
2060
  }
1931
2061
  else {
@@ -1939,6 +2069,7 @@ export async function main(args) {
1939
2069
  await setup({
1940
2070
  force: options.force,
1941
2071
  mergeAgents: options.mergeAgents,
2072
+ mergeAgentsPolicy: resolveSetupAgentsMergePolicyArg(args.slice(1)),
1942
2073
  dryRun: options.dryRun,
1943
2074
  verbose: options.verbose,
1944
2075
  scope: resolveSetupScopeArg(args.slice(1)),
@@ -2035,15 +2166,15 @@ export async function main(args) {
2035
2166
  case "team":
2036
2167
  await teamCommand(args.slice(1), options);
2037
2168
  break;
2038
- case "session":
2039
- await sessionCommand(args.slice(1));
2040
- break;
2041
2169
  case "url":
2042
2170
  await urlCommand(args.slice(1));
2043
2171
  break;
2044
2172
  case "ralph":
2045
2173
  await ralphCommand(args.slice(1));
2046
2174
  break;
2175
+ case "ralplan":
2176
+ await ralplanCommand(args.slice(1));
2177
+ break;
2047
2178
  case "ultragoal":
2048
2179
  await ultragoalCommand(args.slice(1));
2049
2180
  break;
@@ -2256,9 +2387,14 @@ async function reasoningCommand(args) {
2256
2387
  return;
2257
2388
  }
2258
2389
  if (!REASONING_MODE_SET.has(mode)) {
2259
- const guidance = isAmbiguousUnsupportedReasoningEffort(mode)
2260
- ? `${AMBIGUOUS_REASONING_MESSAGE}\n`
2261
- : "";
2390
+ const unsupportedMode = isUnsupportedRootReasoningEffort(mode)
2391
+ ? normalizeUnsupportedRootReasoningEffort(mode)
2392
+ : undefined;
2393
+ const guidance = unsupportedMode === "max"
2394
+ ? `Reasoning mode "${mode}" is not supported by "omx reasoning".\nPer-agent "max" is configured with agentReasoning; direct -c model_reasoning_effort=... is passed to Codex and remains capability-dependent.\n`
2395
+ : unsupportedMode === "ultra"
2396
+ ? `Reasoning mode "${mode}" is not supported by OMX root or per-agent reasoning and is not an alias for "max".\nDirect -c model_reasoning_effort=... remains opaque Codex passthrough.\n`
2397
+ : "";
2262
2398
  throw new Error(`${guidance}Invalid reasoning mode "${mode}". Expected one of: ${REASONING_MODES.join(", ")}.\n${REASONING_USAGE}`);
2263
2399
  }
2264
2400
  const { mkdir, readFile, writeFile } = await import("fs/promises");
@@ -2272,7 +2408,9 @@ async function reasoningCommand(args) {
2272
2408
  }
2273
2409
  export async function launchWithAuthHotswap(args) {
2274
2410
  const launchCwd = process.cwd();
2275
- const parsedWorktree = parseWorktreeMode(args);
2411
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
2412
+ const parsedWorktree = parseWorktreeMode(omxArgs);
2413
+ const hotswapArgs = [...parsedWorktree.remainingArgs, ...suffix];
2276
2414
  let cwd = launchCwd;
2277
2415
  let worktreeDirty = false;
2278
2416
  let ensuredLaunchWorktree;
@@ -2326,7 +2464,7 @@ export async function launchWithAuthHotswap(args) {
2326
2464
  }
2327
2465
  const status = await runAuthHotswap({
2328
2466
  cwd,
2329
- argv: parsedWorktree.remainingArgs,
2467
+ argv: hotswapArgs,
2330
2468
  lifecycle: {
2331
2469
  prepareCodexHomeForLaunch,
2332
2470
  preLaunch: (launchPath, sessionId, notifyTempContract, codexHomeOverride, enableAuthority) => preLaunch(launchPath, sessionId, notifyTempContract, codexHomeOverride, enableAuthority, worktreeDirty),
@@ -2366,14 +2504,16 @@ export async function launchWithHud(args) {
2366
2504
  }
2367
2505
  }
2368
2506
  const launchCwd = process.cwd();
2369
- const parsedWorktree = parseWorktreeMode(args);
2507
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
2508
+ const parsedWorktree = parseWorktreeMode(omxArgs);
2370
2509
  const notifyTempResult = resolveNotifyTempContract(parsedWorktree.remainingArgs, process.env);
2371
- const explicitLaunchPolicy = resolveEffectiveLeaderLaunchPolicyOverride(notifyTempResult.passthroughArgs, process.env);
2510
+ const passthroughArgs = [...notifyTempResult.passthroughArgs, ...suffix];
2511
+ const explicitLaunchPolicy = resolveEffectiveLeaderLaunchPolicyOverride(passthroughArgs, process.env);
2372
2512
  const persistentCodexHomeForLaunch = resolveCodexHomeForLaunch(launchCwd, process.env);
2373
2513
  const { launchPolicy, effectiveExplicitLaunchPolicy } = resolveTmuxAwareLaunchPolicy(explicitLaunchPolicy, isNativeWindows());
2374
2514
  const enableNotifyFallbackAuthority = launchPolicy === "direct";
2375
- const workerSparkModel = resolveWorkerSparkModel(notifyTempResult.passthroughArgs, persistentCodexHomeForLaunch);
2376
- let normalizedArgs = normalizeCodexLaunchArgs(notifyTempResult.passthroughArgs);
2515
+ const workerSparkModel = resolveWorkerSparkModel(passthroughArgs, persistentCodexHomeForLaunch);
2516
+ let normalizedArgs = normalizeCodexLaunchArgs(passthroughArgs);
2377
2517
  let cwd = launchCwd;
2378
2518
  let worktreeDirty = false;
2379
2519
  let ensuredLaunchWorktree;
@@ -2402,7 +2542,7 @@ export async function launchWithHud(args) {
2402
2542
  }
2403
2543
  }
2404
2544
  const madmaxWorktreeRuntimeContext = captureMadmaxWorktreeRuntimeContext({
2405
- originalLaunchArgs: args,
2545
+ originalLaunchArgs: omxArgs,
2406
2546
  worktreeEnabled: Boolean(parsedWorktree.mode.enabled && ensuredLaunchWorktree?.enabled),
2407
2547
  sourceCwd: launchCwd,
2408
2548
  worktreeCwd: ensuredLaunchWorktree?.enabled ? ensuredLaunchWorktree.worktreePath : undefined,
@@ -2457,7 +2597,15 @@ export async function launchWithHud(args) {
2457
2597
  await preLaunch(cwd, sessionId, notifyTempResult.contract, codexHomeOverride, enableNotifyFallbackAuthority, worktreeDirty);
2458
2598
  }
2459
2599
  catch (err) {
2460
- // preLaunch errors must NOT prevent Codex from starting
2600
+ if (isSessionPointerLaunchAbort(err)) {
2601
+ console.error(`[omx] session pointer launch aborted: ${err.code}`);
2602
+ reportOrdinaryLaunchRootConflict(err, cwd, cwd === launchCwd && !parsedWorktree.mode.enabled && !isResumeCodexLaunch(normalizedArgs));
2603
+ await cleanupRuntimeCodexHome(preparedCodexHome.runtimeCodexHomeForCleanup, projectLocalCodexHomeForCleanup).catch((cleanupErr) => {
2604
+ console.error(`[omx] preLaunch abort cleanup warning: ${cleanupErr instanceof Error ? cleanupErr.message : cleanupErr}`);
2605
+ });
2606
+ throw err;
2607
+ }
2608
+ // preLaunch errors after pointer commit must not prevent Codex from starting.
2461
2609
  console.error(`[omx] preLaunch warning: ${err instanceof Error ? err.message : err}`);
2462
2610
  }
2463
2611
  // ── Phase 2: run ────────────────────────────────────────────────────────
@@ -2479,9 +2627,11 @@ export async function launchWithHud(args) {
2479
2627
  }
2480
2628
  export async function execWithOverlay(args) {
2481
2629
  const launchCwd = process.cwd();
2482
- const parsedWorktree = parseWorktreeMode(args);
2630
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
2631
+ const parsedWorktree = parseWorktreeMode(omxArgs);
2483
2632
  const notifyTempResult = resolveNotifyTempContract(parsedWorktree.remainingArgs, process.env);
2484
- const normalizedArgs = normalizeCodexLaunchArgs(notifyTempResult.passthroughArgs);
2633
+ const passthroughArgs = [...notifyTempResult.passthroughArgs, ...suffix];
2634
+ const normalizedArgs = normalizeCodexLaunchArgs(passthroughArgs);
2485
2635
  let cwd = launchCwd;
2486
2636
  let worktreeDirty = false;
2487
2637
  let ensuredLaunchWorktree;
@@ -2543,6 +2693,13 @@ export async function execWithOverlay(args) {
2543
2693
  await preLaunch(cwd, sessionId, notifyTempResult.contract, codexHomeOverride, true, worktreeDirty);
2544
2694
  }
2545
2695
  catch (err) {
2696
+ if (isSessionPointerLaunchAbort(err)) {
2697
+ console.error(`[omx] session pointer launch aborted: ${err.code}`);
2698
+ await cleanupRuntimeCodexHome(preparedCodexHome.runtimeCodexHomeForCleanup, projectLocalCodexHomeForCleanup).catch((cleanupErr) => {
2699
+ console.error(`[omx] preLaunch abort cleanup warning: ${cleanupErr instanceof Error ? cleanupErr.message : cleanupErr}`);
2700
+ });
2701
+ throw err;
2702
+ }
2546
2703
  console.error(`[omx] preLaunch warning: ${err instanceof Error ? err.message : err}`);
2547
2704
  }
2548
2705
  try {
@@ -2571,7 +2728,8 @@ export async function execWithOverlay(args) {
2571
2728
  }
2572
2729
  }
2573
2730
  export function normalizeCodexLaunchArgs(args) {
2574
- const parsed = parseWorktreeMode(args);
2731
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
2732
+ const parsed = parseWorktreeMode(omxArgs);
2575
2733
  const launchPolicyParsed = splitLeaderLaunchPolicyArgs(parsed.remainingArgs);
2576
2734
  const normalized = [];
2577
2735
  let wantsBypass = false;
@@ -2599,7 +2757,7 @@ export function normalizeCodexLaunchArgs(args) {
2599
2757
  continue;
2600
2758
  }
2601
2759
  if (arg === "--max" || arg === "--ultra") {
2602
- throw new Error(AMBIGUOUS_REASONING_MESSAGE);
2760
+ throw unsupportedLaunchShorthandError(arg);
2603
2761
  }
2604
2762
  if (arg === SPARK_FLAG) {
2605
2763
  // Spark model is injected into worker env only (not the leader). Consume flag.
@@ -2618,7 +2776,7 @@ export function normalizeCodexLaunchArgs(args) {
2618
2776
  if (reasoningMode) {
2619
2777
  normalized.push(CONFIG_FLAG, `${REASONING_KEY}="${reasoningMode}"`);
2620
2778
  }
2621
- return normalized;
2779
+ return [...normalized, ...suffix];
2622
2780
  }
2623
2781
  /**
2624
2782
  * Returns the spark model string if --spark or --madmax-spark appears in the
@@ -2627,6 +2785,8 @@ export function normalizeCodexLaunchArgs(args) {
2627
2785
  */
2628
2786
  export function resolveWorkerSparkModel(args, codexHomeOverride) {
2629
2787
  for (const arg of args) {
2788
+ if (arg === "--")
2789
+ break;
2630
2790
  if (arg === SPARK_FLAG || arg === MADMAX_SPARK_FLAG) {
2631
2791
  return resolveTeamLowComplexityDefaultModel(codexHomeOverride);
2632
2792
  }
@@ -2706,6 +2866,19 @@ export function resolveNativeSessionName(cwd, sessionId, env = process.env) {
2706
2866
  }
2707
2867
  return buildTmuxSessionName(cwd, sessionId);
2708
2868
  }
2869
+ async function resolvePreLaunchSessionPointerOptions() {
2870
+ const ownerCandidate = normalizeSessionId(process.env.OMX_SESSION_ID);
2871
+ if (!ownerCandidate)
2872
+ return {};
2873
+ const evidence = await probeActualTmuxInstanceEvidence(process.env.TMUX_PANE);
2874
+ if (!tmuxEvidenceBindsCandidate(evidence, ownerCandidate))
2875
+ return {};
2876
+ return {
2877
+ ownerAliasVerified: true,
2878
+ ...(evidence.sessionName ? { tmuxSessionName: evidence.sessionName } : {}),
2879
+ ...(evidence.paneTarget ? { tmuxPaneId: evidence.paneTarget } : {}),
2880
+ };
2881
+ }
2709
2882
  function tagTmuxSessionWithInstance(sessionName, sessionId) {
2710
2883
  const target = sessionName.trim();
2711
2884
  const instanceId = sessionId.trim();
@@ -2754,12 +2927,14 @@ function buildNativeHookBaseContext(cwd, sessionId, normalizedEvent, extra = {})
2754
2927
  export function injectModelInstructionsBypassArgs(cwd, args, env = process.env, defaultFilePath) {
2755
2928
  if (!shouldBypassDefaultSystemPrompt(env))
2756
2929
  return [...args];
2757
- if (hasModelInstructionsOverride(args))
2930
+ const { omxArgs, suffix } = splitOmxArgsAtEndOfOptions(args);
2931
+ if (hasModelInstructionsOverride(omxArgs))
2758
2932
  return [...args];
2759
2933
  return [
2760
- ...args,
2934
+ ...omxArgs,
2761
2935
  CONFIG_FLAG,
2762
2936
  buildModelInstructionsOverride(cwd, env, defaultFilePath),
2937
+ ...suffix,
2763
2938
  ];
2764
2939
  }
2765
2940
  export function collectInheritableTeamWorkerArgs(codexArgs) {
@@ -2776,7 +2951,7 @@ export function resolveTeamWorkerLaunchArgsEnv(existingRaw, codexArgs, inheritLe
2776
2951
  });
2777
2952
  if (normalized.length === 0)
2778
2953
  return null;
2779
- return normalized.join(" ");
2954
+ return serializeTeamWorkerLaunchArgs(normalized);
2780
2955
  }
2781
2956
  export { readTopLevelTomlString, upsertTopLevelTomlString } from "../utils/toml.js";
2782
2957
  function sanitizeTmuxToken(value) {
@@ -3192,11 +3367,22 @@ function buildTmuxExtendedKeysReleaseShellSnippet(cwd) {
3192
3367
  return `if [ -n "\${OMX_TMUX_EXTENDED_KEYS_LEASE:-}" ]; then ${buildTmuxExtendedKeysHelperCommand(cwd, "release")} "\${OMX_TMUX_EXTENDED_KEYS_LEASE}" >/dev/null 2>&1 || true; fi;`;
3193
3368
  }
3194
3369
  const SHELL_ENV_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
3370
+ const DETACHED_SESSION_PANE_ENV_KEYS = new Set([
3371
+ "TERM",
3372
+ "TERM_PROGRAM",
3373
+ "TERM_PROGRAM_VERSION",
3374
+ "TMUX",
3375
+ "TMUX_PANE",
3376
+ "COLUMNS",
3377
+ "LINES",
3378
+ ]);
3195
3379
  export function serializeDetachedSessionParentEnv(env) {
3196
3380
  const lines = [];
3197
3381
  for (const key of Object.keys(env).sort()) {
3198
3382
  if (!SHELL_ENV_NAME_PATTERN.test(key))
3199
3383
  continue;
3384
+ if (DETACHED_SESSION_PANE_ENV_KEYS.has(key))
3385
+ continue;
3200
3386
  const value = env[key];
3201
3387
  if (typeof value !== "string")
3202
3388
  continue;
@@ -3763,8 +3949,8 @@ export async function reapPostLaunchOrphanedMcpProcesses(dependencies = {}) {
3763
3949
  /**
3764
3950
  * preLaunch: Prepare environment before Codex starts.
3765
3951
  * 1. Best-effort launch-safe orphan cleanup for detached OMX MCP processes
3766
- * 2. Generate runtime overlay + write session-scoped model instructions file
3767
- * 3. Write session.json
3952
+ * 2. Establish the canonical session pointer
3953
+ * 3. Generate session-scoped launch artifacts and start best-effort helpers
3768
3954
  *
3769
3955
  * Automatic broad stale-session cleanup remains disabled here. Only detached
3770
3956
  * OMX MCP processes without a live Codex ancestor are reaped so new launches
@@ -3785,7 +3971,9 @@ export async function preLaunch(cwd, sessionId, notifyTempContract, codexHomeOve
3785
3971
  logCliOperationFailure(err);
3786
3972
  // Non-fatal
3787
3973
  }
3788
- // 2. Generate runtime overlay + write session-scoped model instructions file
3974
+ // 2. Establish the canonical pointer before any session-scoped launch artifact.
3975
+ await writeSessionStart(cwd, sessionId, await resolvePreLaunchSessionPointerOptions());
3976
+ // 3. Generate runtime overlay + write session-scoped model instructions file
3789
3977
  const orchestrationMode = await resolveSessionOrchestrationMode(cwd, sessionId);
3790
3978
  const overlay = await generateOverlay(cwd, sessionId, { orchestrationMode });
3791
3979
  const launchAppendix = await readLaunchAppendInstructions();
@@ -3798,11 +3986,10 @@ export async function preLaunch(cwd, sessionId, notifyTempContract, codexHomeOve
3798
3986
  ${launchAppendix}${dirtyWorktreeGuidance}`
3799
3987
  : `${overlay}${dirtyWorktreeGuidance}`;
3800
3988
  await writeSessionModelInstructionsFile(cwd, sessionId, sessionInstructions);
3801
- // 3. Write session state
3989
+ // 4. Reset session metrics and tag the established session.
3802
3990
  await resetSessionMetrics(cwd, sessionId);
3803
- await writeSessionStart(cwd, sessionId);
3804
3991
  tagCurrentTmuxSessionWithInstance(sessionId);
3805
- // 4. Start notify fallback watcher (best effort)
3992
+ // 5. Start notify fallback watcher (best effort)
3806
3993
  try {
3807
3994
  await startNotifyFallbackWatcher(cwd, { codexHomeOverride, enableAuthority: enableNotifyFallbackAuthority, sessionId });
3808
3995
  }
@@ -3810,7 +3997,7 @@ ${launchAppendix}${dirtyWorktreeGuidance}`
3810
3997
  logCliOperationFailure(err);
3811
3998
  // Non-fatal
3812
3999
  }
3813
- // 5. Start derived watcher (best effort, opt-in)
4000
+ // 6. Start derived watcher (best effort, opt-in)
3814
4001
  try {
3815
4002
  await startHookDerivedWatcher(cwd);
3816
4003
  }
@@ -3818,7 +4005,7 @@ ${launchAppendix}${dirtyWorktreeGuidance}`
3818
4005
  logCliOperationFailure(err);
3819
4006
  // Non-fatal
3820
4007
  }
3821
- // 6. Emit temp notification startup summary + warnings, then send session-start lifecycle notification (best effort)
4008
+ // 7. Emit temp notification startup summary + warnings, then send session-start lifecycle notification (best effort)
3822
4009
  try {
3823
4010
  if (notifyTempContract?.active) {
3824
4011
  process.env[OMX_NOTIFY_TEMP_CONTRACT_ENV] =
@@ -3847,7 +4034,7 @@ ${launchAppendix}${dirtyWorktreeGuidance}`
3847
4034
  logCliOperationFailure(err);
3848
4035
  // Non-fatal: notification failures must never block launch
3849
4036
  }
3850
- // 7. Dispatch native hook event (best effort)
4037
+ // 8. Dispatch native hook event (best effort)
3851
4038
  try {
3852
4039
  await emitNativeHookEvent(cwd, "session-start", {
3853
4040
  session_id: sessionId,
@@ -4295,8 +4482,9 @@ export function buildTmuxShellCommand(command, args) {
4295
4482
  function encodePowerShellCommand(commandText) {
4296
4483
  return Buffer.from(commandText, "utf16le").toString("base64");
4297
4484
  }
4298
- function isCodexVersionRequest(args) {
4299
- return args.some((arg) => CODEX_VERSION_FLAGS.has(arg));
4485
+ export function isCodexVersionRequest(args) {
4486
+ const { omxArgs } = splitOmxArgsAtEndOfOptions(args);
4487
+ return omxArgs.some((arg) => CODEX_VERSION_FLAGS.has(arg));
4300
4488
  }
4301
4489
  export function buildWindowsPromptCommand(command, args) {
4302
4490
  const invocation = [
@@ -4894,7 +5082,7 @@ async function flushNotifyFallbackOnce(cwd, options = {}) {
4894
5082
  spawnSync(process.execPath, [watcherScript, "--once", "--cwd", cwd, "--notify-script", notifyScript], {
4895
5083
  cwd,
4896
5084
  stdio: "ignore",
4897
- timeout: 3000,
5085
+ timeout: 45_000,
4898
5086
  windowsHide: true,
4899
5087
  env: buildNotifyFallbackWatcherEnv(process.env, {
4900
5088
  codexHomeOverride: options.codexHomeOverride,
@@ -5037,6 +5225,7 @@ async function cancelModes(args = []) {
5037
5225
  const nowIso = new Date().toISOString();
5038
5226
  const force = args.includes("--force");
5039
5227
  try {
5228
+ const writableScope = await resolveWritableStateScope(cwd);
5040
5229
  const loadStates = async (refs) => {
5041
5230
  const loaded = new Map();
5042
5231
  for (const ref of refs) {
@@ -5064,8 +5253,7 @@ async function cancelModes(args = []) {
5064
5253
  if (hasActiveWorkflowMode(runDirStates))
5065
5254
  states = runDirStates;
5066
5255
  }
5067
- const currentSession = await readSessionState(cwd).catch(() => null);
5068
- const currentSessionId = typeof currentSession?.session_id === "string" ? currentSession.session_id.trim() : "";
5256
+ const currentSessionId = writableScope.sessionId ?? "";
5069
5257
  const changed = new Set();
5070
5258
  const reported = new Set();
5071
5259
  const cancelMode = (mode, phase = "cancelled", reportIfWasActive = true) => {