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
@@ -1,11 +1,114 @@
1
1
  import assert from 'node:assert/strict';
2
- import { describe, it } from 'node:test';
3
- import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
2
+ import { describe, it, mock } from 'node:test';
3
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
4
+ import fs from 'node:fs';
5
+ import { syncBuiltinESMExports } from 'node:module';
4
6
  import { join } from 'node:path';
5
7
  import { tmpdir } from 'node:os';
6
8
  import { getBaseStateDir } from '../../state/paths.js';
9
+ import { writeRoleRoutingMarker } from '../../subagents/role-routing-marker.js';
7
10
  import { subagentTrackingPath } from '../../subagents/tracker.js';
8
11
  import { buildRalplanConsensusGateForCwd, buildRalplanConsensusGateFromSources } from '../consensus-gate.js';
12
+ function trackerBackedConsensus(sessionId, provenanceKind, overrides = {}) {
13
+ return {
14
+ ralplan_consensus_gate: {
15
+ complete: true,
16
+ sequence: ['architect-review', 'critic-review'],
17
+ ralplan_architect_review: {
18
+ agent_role: 'architect',
19
+ provenance_kind: provenanceKind,
20
+ verdict: 'approve',
21
+ session_id: sessionId,
22
+ thread_id: 'thread-architect',
23
+ tracker_path: '.omx/state/subagent-tracking.json',
24
+ completed_at: '2026-07-13T10:00:00.000Z',
25
+ ...overrides.architect,
26
+ },
27
+ ralplan_critic_review: {
28
+ agent_role: 'critic',
29
+ provenance_kind: provenanceKind,
30
+ verdict: 'approve',
31
+ session_id: sessionId,
32
+ thread_id: 'thread-critic',
33
+ tracker_path: '.omx/state/subagent-tracking.json',
34
+ completed_at: '2026-07-13T10:05:00.000Z',
35
+ ...overrides.critic,
36
+ },
37
+ },
38
+ };
39
+ }
40
+ function adaptedConsensus(sessionId, overrides = {}) {
41
+ return trackerBackedConsensus(sessionId, 'omx_adapted', overrides);
42
+ }
43
+ function nativeConsensus(sessionId, overrides = {}) {
44
+ return trackerBackedConsensus(sessionId, 'native_subagent', overrides);
45
+ }
46
+ async function writeTrackerBackedSubagentTracking(cwd, sessionId, provenanceKind, options = {}) {
47
+ const trackingPath = subagentTrackingPath(cwd);
48
+ const architectCompletedAt = options.architectCompletedAt ?? '2026-07-13T10:00:00.000Z';
49
+ const criticFirstSeenAt = options.criticFirstSeenAt === undefined
50
+ ? '2026-07-13T10:05:00.000Z'
51
+ : options.criticFirstSeenAt;
52
+ const criticCompletedAt = options.criticCompletedAt ?? '2026-07-13T10:10:00.000Z';
53
+ await mkdir(join(trackingPath, '..'), { recursive: true });
54
+ await writeFile(trackingPath, JSON.stringify({
55
+ schemaVersion: 1,
56
+ sessions: {
57
+ [sessionId]: {
58
+ session_id: sessionId,
59
+ leader_thread_id: 'thread-leader',
60
+ updated_at: architectCompletedAt,
61
+ threads: {
62
+ 'thread-leader': {
63
+ thread_id: 'thread-leader',
64
+ kind: 'leader',
65
+ first_seen_at: architectCompletedAt,
66
+ last_seen_at: architectCompletedAt,
67
+ turn_count: 1,
68
+ },
69
+ 'thread-architect': {
70
+ thread_id: 'thread-architect',
71
+ kind: 'subagent',
72
+ first_seen_at: architectCompletedAt,
73
+ last_seen_at: architectCompletedAt,
74
+ completed_at: architectCompletedAt,
75
+ turn_count: 1,
76
+ role: options.architectRole ?? 'architect',
77
+ provenance_kind: provenanceKind,
78
+ },
79
+ 'thread-critic': {
80
+ thread_id: 'thread-critic',
81
+ kind: 'subagent',
82
+ ...(criticFirstSeenAt === null ? {} : { first_seen_at: criticFirstSeenAt }),
83
+ last_seen_at: criticCompletedAt,
84
+ completed_at: criticCompletedAt,
85
+ turn_count: 1,
86
+ role: options.criticRole ?? 'critic',
87
+ provenance_kind: provenanceKind,
88
+ },
89
+ },
90
+ },
91
+ },
92
+ pending_role_intents: [],
93
+ }, null, 2));
94
+ if (provenanceKind !== 'omx_adapted' || options.writeRoleRoutingMarker === false)
95
+ return;
96
+ writeRoleRoutingMarker(getBaseStateDir(cwd), {
97
+ schema_version: 1,
98
+ cwd,
99
+ session_id: sessionId,
100
+ parent_thread_id: 'thread-leader',
101
+ observed_at: architectCompletedAt,
102
+ expires_at: new Date(Date.now() + 60_000).toISOString(),
103
+ evidence: 'OMX adapted role intent consumed for native child SessionStart',
104
+ });
105
+ }
106
+ async function writeAdaptedSubagentTracking(cwd, sessionId, options = {}) {
107
+ await writeTrackerBackedSubagentTracking(cwd, sessionId, 'omx_adapted', options);
108
+ }
109
+ async function writeNativeSubagentTracking(cwd, sessionId, options = {}) {
110
+ await writeTrackerBackedSubagentTracking(cwd, sessionId, 'native_subagent', options);
111
+ }
9
112
  describe('ralplan consensus gate state roots', () => {
10
113
  it('rejects invalid complete consensus even when it appears after a valid source', () => {
11
114
  const validConsensus = {
@@ -49,6 +152,121 @@ describe('ralplan consensus gate state roots', () => {
49
152
  assert.equal(gate.blockedReason, 'non_approving_ralplan_consensus_review');
50
153
  assert.match(gate.blockedDetails?.join(' ') ?? '', /architect.*verdict=iterate/i);
51
154
  });
155
+ it('requires strict direct Architect-before-Critic order evidence', () => {
156
+ const buildGate = (form, architectOrder, criticOrder) => {
157
+ const architectReview = {
158
+ agent_role: 'architect',
159
+ verdict: 'approve',
160
+ ...(architectOrder ? { completed_at: architectOrder } : {}),
161
+ };
162
+ const criticReview = {
163
+ agent_role: 'critic',
164
+ verdict: 'approve',
165
+ ...(criticOrder ? { completed_at: criticOrder } : {}),
166
+ };
167
+ return buildRalplanConsensusGateFromSources([{
168
+ source: `direct-order-${form}`,
169
+ value: form === 'explicit'
170
+ ? {
171
+ ralplan_consensus_gate: {
172
+ complete: true,
173
+ sequence: ['architect-review', 'critic-review'],
174
+ ralplan_architect_review: architectReview,
175
+ ralplan_critic_review: criticReview,
176
+ },
177
+ }
178
+ : {
179
+ sequence: ['architect-review', 'critic-review'],
180
+ ralplan_architect_review: architectReview,
181
+ ralplan_critic_review: criticReview,
182
+ },
183
+ }]);
184
+ };
185
+ for (const form of ['explicit', 'fallback']) {
186
+ const valid = buildGate(form, '2026-06-12T10:00:00.000Z', '2026-06-12T10:05:00.000Z');
187
+ assert.equal(valid.complete, true);
188
+ for (const gate of [
189
+ buildGate(form, '2026-06-12T10:00:00.000Z', '2026-06-12T10:00:00.000Z'),
190
+ buildGate(form, '2026-06-12T10:05:00.000Z', '2026-06-12T10:00:00.000Z'),
191
+ buildGate(form, undefined, '2026-06-12T10:05:00.000Z'),
192
+ buildGate(form, '2026-06-12T10:00:00.000Z', undefined),
193
+ ]) {
194
+ assert.equal(gate.complete, false);
195
+ assert.equal(gate.blockedReason, form === 'explicit'
196
+ ? 'non_approving_ralplan_consensus_review'
197
+ : 'missing_sequential_architect_then_critic_approval');
198
+ if (form === 'explicit') {
199
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /direct review order is not proven strictly architect-before-critic/i);
200
+ }
201
+ }
202
+ }
203
+ });
204
+ it('uses sequence order authoritatively and rejects contradictory timestamps', () => {
205
+ const buildGate = (architectSequence, criticSequence, architectCompletedAt, criticCompletedAt) => buildRalplanConsensusGateFromSources([{
206
+ source: 'sequence-order',
207
+ value: {
208
+ ralplan_consensus_gate: {
209
+ complete: true,
210
+ sequence: ['architect-review', 'critic-review'],
211
+ ralplan_architect_review: {
212
+ agent_role: 'architect',
213
+ verdict: 'approve',
214
+ ...(architectSequence === undefined ? {} : { sequence_index: architectSequence }),
215
+ ...(architectCompletedAt ? { completed_at: architectCompletedAt } : {}),
216
+ },
217
+ ralplan_critic_review: {
218
+ agent_role: 'critic',
219
+ verdict: 'approve',
220
+ ...(criticSequence === undefined ? {} : { sequence_index: criticSequence }),
221
+ ...(criticCompletedAt ? { completed_at: criticCompletedAt } : {}),
222
+ },
223
+ },
224
+ },
225
+ }]);
226
+ assert.equal(buildGate(1, 2).complete, true);
227
+ assert.equal(buildGate(2, 1).complete, false);
228
+ assert.equal(buildGate(1, 1).complete, false);
229
+ assert.equal(buildGate(1, undefined).complete, false);
230
+ assert.equal(buildGate(undefined, 2).complete, false);
231
+ assert.equal(buildGate(1, 2, '2026-06-12T10:05:00.000Z', '2026-06-12T10:00:00.000Z').complete, false);
232
+ assert.equal(buildGate(2, 1, '2026-06-12T10:00:00.000Z', '2026-06-12T10:05:00.000Z').complete, false);
233
+ });
234
+ it('does not compare timestamp and sequence freshness domains', () => {
235
+ const timestampConsensus = {
236
+ ralplan_consensus_gate: {
237
+ complete: true,
238
+ sequence: ['architect-review', 'critic-review'],
239
+ ralplan_architect_review: {
240
+ agent_role: 'architect',
241
+ verdict: 'approve',
242
+ completed_at: '2026-06-12T10:00:00.000Z',
243
+ },
244
+ ralplan_critic_review: {
245
+ agent_role: 'critic',
246
+ verdict: 'approve',
247
+ completed_at: '2026-06-12T10:05:00.000Z',
248
+ },
249
+ },
250
+ };
251
+ const sequenceConsensus = {
252
+ ralplan_consensus_gate: {
253
+ complete: true,
254
+ sequence: ['architect-review', 'critic-review'],
255
+ ralplan_architect_review: { agent_role: 'architect', verdict: 'approve', sequence_index: 3 },
256
+ ralplan_critic_review: { agent_role: 'critic', verdict: 'approve', sequence_index: 4 },
257
+ },
258
+ };
259
+ const timestampFirst = buildRalplanConsensusGateFromSources([
260
+ { source: 'timestamp-first', value: timestampConsensus },
261
+ { source: 'sequence-second', value: sequenceConsensus },
262
+ ]);
263
+ assert.equal(timestampFirst.source, 'timestamp-first');
264
+ const sequenceFirst = buildRalplanConsensusGateFromSources([
265
+ { source: 'sequence-first', value: sequenceConsensus },
266
+ { source: 'timestamp-second', value: timestampConsensus },
267
+ ]);
268
+ assert.equal(sequenceFirst.source, 'sequence-first');
269
+ });
52
270
  it('rejects malformed complete consensus even when it appears after a valid source', () => {
53
271
  const validConsensus = {
54
272
  ralplan_consensus_gate: {
@@ -216,6 +434,7 @@ describe('ralplan consensus gate state roots', () => {
216
434
  last_seen_at: '2026-06-11T16:29:30.000Z',
217
435
  completed_at: '2026-06-11T16:29:30.000Z',
218
436
  turn_count: 1,
437
+ role: 'architect',
219
438
  },
220
439
  'thread-critic': {
221
440
  thread_id: 'thread-critic',
@@ -224,6 +443,7 @@ describe('ralplan consensus gate state roots', () => {
224
443
  last_seen_at: '2026-06-11T16:30:00.000Z',
225
444
  completed_at: '2026-06-11T16:30:00.000Z',
226
445
  turn_count: 1,
446
+ role: 'critic',
227
447
  },
228
448
  },
229
449
  },
@@ -314,8 +534,8 @@ describe('ralplan consensus gate state roots', () => {
314
534
  updated_at: '2026-07-07T04:31:00.000Z',
315
535
  threads: {
316
536
  'thread-leader': { thread_id: 'thread-leader', kind: 'leader', first_seen_at: '2026-07-07T04:29:00.000Z', last_seen_at: '2026-07-07T04:29:00.000Z', turn_count: 1 },
317
- 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', turn_count: 1 },
318
- 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', turn_count: 1 },
537
+ 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', turn_count: 1, role: 'architect' },
538
+ 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', turn_count: 1, role: 'critic' },
319
539
  },
320
540
  },
321
541
  },
@@ -329,8 +549,8 @@ describe('ralplan consensus gate state roots', () => {
329
549
  updated_at: '2026-07-07T04:33:00.000Z',
330
550
  threads: {
331
551
  'thread-leader': { thread_id: 'thread-leader', kind: 'leader', first_seen_at: '2026-07-07T04:29:00.000Z', last_seen_at: '2026-07-07T04:29:00.000Z', turn_count: 1 },
332
- 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', completed_at: '2026-07-07T04:30:00.000Z', turn_count: 1 },
333
- 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', completed_at: '2026-07-07T04:31:00.000Z', turn_count: 1 },
552
+ 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', completed_at: '2026-07-07T04:30:00.000Z', turn_count: 1, role: 'architect' },
553
+ 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', completed_at: '2026-07-07T04:31:00.000Z', turn_count: 1, role: 'critic' },
334
554
  },
335
555
  },
336
556
  },
@@ -419,8 +639,8 @@ describe('ralplan consensus gate state roots', () => {
419
639
  updated_at: '2026-07-07T04:31:00.000Z',
420
640
  threads: {
421
641
  'thread-leader': { thread_id: 'thread-leader', kind: 'leader', first_seen_at: '2026-07-07T04:29:00.000Z', last_seen_at: '2026-07-07T04:29:00.000Z', turn_count: 1 },
422
- 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', turn_count: 1 },
423
- 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', turn_count: 1 },
642
+ 'thread-architect': { thread_id: 'thread-architect', kind: 'subagent', first_seen_at: '2026-07-07T04:30:00.000Z', last_seen_at: '2026-07-07T04:30:00.000Z', turn_count: 1, role: 'architect' },
643
+ 'thread-critic': { thread_id: 'thread-critic', kind: 'subagent', first_seen_at: '2026-07-07T04:31:00.000Z', last_seen_at: '2026-07-07T04:31:00.000Z', turn_count: 1, role: 'critic' },
424
644
  },
425
645
  },
426
646
  },
@@ -517,6 +737,7 @@ describe('ralplan consensus gate state roots', () => {
517
737
  last_seen_at: '2026-06-12T10:02:00.000Z',
518
738
  completed_at: '2026-06-12T10:02:00.000Z',
519
739
  turn_count: 1,
740
+ role: 'architect',
520
741
  },
521
742
  'thread-critic': {
522
743
  thread_id: 'thread-critic',
@@ -525,6 +746,7 @@ describe('ralplan consensus gate state roots', () => {
525
746
  last_seen_at: '2026-06-12T10:03:00.000Z',
526
747
  completed_at: '2026-06-12T10:03:00.000Z',
527
748
  turn_count: 1,
749
+ role: 'critic',
528
750
  },
529
751
  },
530
752
  },
@@ -932,5 +1154,302 @@ describe('ralplan consensus gate state roots', () => {
932
1154
  await rm(cwd, { recursive: true, force: true });
933
1155
  }
934
1156
  });
1157
+ it('accepts tracker-backed native Architect and Critic lanes with exact ledger role identities and strict order', async () => {
1158
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-ok-'));
1159
+ const sessionId = 'sess-native-consensus-ok';
1160
+ try {
1161
+ await writeNativeSubagentTracking(cwd, sessionId);
1162
+ const consensus = nativeConsensus(sessionId);
1163
+ const reviews = consensus.ralplan_consensus_gate;
1164
+ delete reviews.ralplan_architect_review.completed_at;
1165
+ delete reviews.ralplan_critic_review.completed_at;
1166
+ const gate = buildRalplanConsensusGateFromSources([{
1167
+ source: 'native-consensus',
1168
+ value: consensus,
1169
+ }], { cwd, sessionId });
1170
+ assert.equal(gate.complete, true);
1171
+ assert.equal(gate.blockedReason, null);
1172
+ }
1173
+ finally {
1174
+ await rm(cwd, { recursive: true, force: true });
1175
+ }
1176
+ });
1177
+ it('uses native mode as the role identity and permits truly roleless legacy native lanes', async () => {
1178
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-mode-'));
1179
+ const sessionId = 'sess-native-consensus-mode';
1180
+ try {
1181
+ await writeNativeSubagentTracking(cwd, sessionId);
1182
+ const trackingPath = subagentTrackingPath(cwd);
1183
+ const tracking = JSON.parse(await readFile(trackingPath, 'utf-8'));
1184
+ const threads = tracking.sessions[sessionId].threads;
1185
+ for (const [threadId, mode] of [['thread-architect', 'architect'], ['thread-critic', 'critic']]) {
1186
+ delete threads[threadId].role;
1187
+ threads[threadId].mode = mode;
1188
+ }
1189
+ await writeFile(trackingPath, JSON.stringify(tracking, null, 2));
1190
+ const modeIdentityGate = buildRalplanConsensusGateFromSources([{
1191
+ source: 'native-mode-identity',
1192
+ value: nativeConsensus(sessionId),
1193
+ }], { cwd, sessionId });
1194
+ assert.equal(modeIdentityGate.complete, true);
1195
+ threads['thread-architect'].mode = 'planner';
1196
+ await writeFile(trackingPath, JSON.stringify(tracking, null, 2));
1197
+ const mismatchedModeGate = buildRalplanConsensusGateFromSources([{
1198
+ source: 'native-mode-mismatch',
1199
+ value: nativeConsensus(sessionId),
1200
+ }], { cwd, sessionId });
1201
+ assert.equal(mismatchedModeGate.complete, false);
1202
+ assert.match(mismatchedModeGate.blockedDetails?.join(' ') ?? '', /thread-architect has mode=planner, expected architect/);
1203
+ delete threads['thread-architect'].mode;
1204
+ delete threads['thread-critic'].mode;
1205
+ await writeFile(trackingPath, JSON.stringify(tracking, null, 2));
1206
+ const rolelessLegacyGate = buildRalplanConsensusGateFromSources([{
1207
+ source: 'native-roleless-legacy',
1208
+ value: nativeConsensus(sessionId),
1209
+ }], { cwd, sessionId });
1210
+ assert.equal(rolelessLegacyGate.complete, true);
1211
+ }
1212
+ finally {
1213
+ await rm(cwd, { recursive: true, force: true });
1214
+ }
1215
+ });
1216
+ it('reads a tracker candidate once before evaluating native pair and individual evidence', async () => {
1217
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-read-once-'));
1218
+ const sessionId = 'sess-native-consensus-read-once';
1219
+ try {
1220
+ await writeNativeSubagentTracking(cwd, sessionId);
1221
+ const trackerPath = subagentTrackingPath(cwd);
1222
+ const originalReadFileSync = fs.readFileSync;
1223
+ let trackerReadCount = 0;
1224
+ const readFileSync = mock.method(fs, 'readFileSync', ((...args) => {
1225
+ if (args[0] === trackerPath)
1226
+ trackerReadCount += 1;
1227
+ return Reflect.apply(originalReadFileSync, fs, args);
1228
+ }));
1229
+ syncBuiltinESMExports();
1230
+ try {
1231
+ const gate = buildRalplanConsensusGateFromSources([
1232
+ { source: 'native-read-once-first', value: nativeConsensus(sessionId) },
1233
+ { source: 'native-read-once-second', value: nativeConsensus(sessionId) },
1234
+ ], { cwd, sessionId });
1235
+ assert.equal(gate.complete, true);
1236
+ assert.equal(trackerReadCount, 1);
1237
+ }
1238
+ finally {
1239
+ readFileSync.mock.restore();
1240
+ syncBuiltinESMExports();
1241
+ }
1242
+ }
1243
+ finally {
1244
+ await rm(cwd, { recursive: true, force: true });
1245
+ }
1246
+ });
1247
+ it('rejects a native lane when the ledger role does not match its review role', async () => {
1248
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-role-'));
1249
+ const sessionId = 'sess-native-consensus-role';
1250
+ try {
1251
+ await writeNativeSubagentTracking(cwd, sessionId, { architectRole: 'planner' });
1252
+ const gate = buildRalplanConsensusGateFromSources([{
1253
+ source: 'native-role-mismatch',
1254
+ value: nativeConsensus(sessionId),
1255
+ }], { cwd, sessionId });
1256
+ assert.equal(gate.complete, false);
1257
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1258
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /thread-architect has role=planner, expected architect/);
1259
+ }
1260
+ finally {
1261
+ await rm(cwd, { recursive: true, force: true });
1262
+ }
1263
+ });
1264
+ it('rejects a native lane when strict tracker order is missing or reversed', async () => {
1265
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-order-'));
1266
+ const missingSessionId = 'sess-native-consensus-missing-order';
1267
+ const reversedSessionId = 'sess-native-consensus-reversed-order';
1268
+ try {
1269
+ await writeNativeSubagentTracking(cwd, missingSessionId, { criticFirstSeenAt: null });
1270
+ const missingOrderGate = buildRalplanConsensusGateFromSources([{
1271
+ source: 'native-missing-order',
1272
+ value: nativeConsensus(missingSessionId),
1273
+ }], { cwd, sessionId: missingSessionId });
1274
+ assert.equal(missingOrderGate.complete, false);
1275
+ assert.match(missingOrderGate.blockedDetails?.join(' ') ?? '', /tracker review order is missing.*critic first_seen_at/i);
1276
+ await writeNativeSubagentTracking(cwd, reversedSessionId, {
1277
+ architectCompletedAt: '2026-07-13T10:10:00.000Z',
1278
+ criticFirstSeenAt: '2026-07-13T10:05:00.000Z',
1279
+ criticCompletedAt: '2026-07-13T10:15:00.000Z',
1280
+ });
1281
+ const reversedOrderGate = buildRalplanConsensusGateFromSources([{
1282
+ source: 'native-reversed-order',
1283
+ value: nativeConsensus(reversedSessionId),
1284
+ }], { cwd, sessionId: reversedSessionId });
1285
+ assert.equal(reversedOrderGate.complete, false);
1286
+ assert.match(reversedOrderGate.blockedDetails?.join(' ') ?? '', /tracker review order is reversed/i);
1287
+ }
1288
+ finally {
1289
+ await rm(cwd, { recursive: true, force: true });
1290
+ }
1291
+ });
1292
+ it('does not combine pair and individual native evidence from different tracker snapshots', async () => {
1293
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-snapshot-'));
1294
+ const boxedRoot = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-native-snapshot-root-'));
1295
+ const previousOmxStateRoot = process.env.OMX_STATE_ROOT;
1296
+ const sessionId = 'sess-native-consensus-snapshot';
1297
+ try {
1298
+ process.env.OMX_STATE_ROOT = boxedRoot;
1299
+ await writeNativeSubagentTracking(cwd, sessionId, { criticRole: 'planner' });
1300
+ delete process.env.OMX_STATE_ROOT;
1301
+ await writeNativeSubagentTracking(cwd, sessionId, { architectRole: 'planner' });
1302
+ process.env.OMX_STATE_ROOT = boxedRoot;
1303
+ const gate = buildRalplanConsensusGateFromSources([{
1304
+ source: 'native-snapshot-mismatch',
1305
+ value: nativeConsensus(sessionId),
1306
+ }], { cwd, sessionId });
1307
+ assert.equal(gate.complete, false);
1308
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1309
+ }
1310
+ finally {
1311
+ if (previousOmxStateRoot === undefined)
1312
+ delete process.env.OMX_STATE_ROOT;
1313
+ else
1314
+ process.env.OMX_STATE_ROOT = previousOmxStateRoot;
1315
+ await rm(cwd, { recursive: true, force: true });
1316
+ await rm(boxedRoot, { recursive: true, force: true });
1317
+ }
1318
+ });
1319
+ it('rejects tracker-backed OMX-adapted Architect and Critic lanes even with valid legacy marker evidence', async () => {
1320
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-ok-'));
1321
+ const sessionId = 'sess-adapted-consensus-ok';
1322
+ try {
1323
+ await writeAdaptedSubagentTracking(cwd, sessionId);
1324
+ const consensus = adaptedConsensus(sessionId);
1325
+ const reviews = consensus.ralplan_consensus_gate;
1326
+ delete reviews.ralplan_architect_review.completed_at;
1327
+ delete reviews.ralplan_critic_review.completed_at;
1328
+ const gate = buildRalplanConsensusGateFromSources([{
1329
+ source: 'adapted-consensus',
1330
+ value: consensus,
1331
+ }], { cwd, sessionId });
1332
+ assert.equal(gate.complete, false);
1333
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1334
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1335
+ }
1336
+ finally {
1337
+ await rm(cwd, { recursive: true, force: true });
1338
+ }
1339
+ });
1340
+ it('rejects an OMX-adapted lane when tracker order evidence is missing', async () => {
1341
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-no-order-'));
1342
+ const sessionId = 'sess-adapted-consensus-no-order';
1343
+ try {
1344
+ await writeAdaptedSubagentTracking(cwd, sessionId, { criticFirstSeenAt: null });
1345
+ const gate = buildRalplanConsensusGateFromSources([{
1346
+ source: 'adapted-missing-order',
1347
+ value: adaptedConsensus(sessionId),
1348
+ }], { cwd, sessionId });
1349
+ assert.equal(gate.complete, false);
1350
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1351
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1352
+ }
1353
+ finally {
1354
+ await rm(cwd, { recursive: true, force: true });
1355
+ }
1356
+ });
1357
+ it('rejects forged OMX-adapted artifact timestamps when tracker ledger order is reversed', async () => {
1358
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-reversed-order-'));
1359
+ const sessionId = 'sess-adapted-consensus-reversed-order';
1360
+ try {
1361
+ await writeAdaptedSubagentTracking(cwd, sessionId, {
1362
+ architectCompletedAt: '2026-07-13T10:10:00.000Z',
1363
+ criticFirstSeenAt: '2026-07-13T10:05:00.000Z',
1364
+ criticCompletedAt: '2026-07-13T10:15:00.000Z',
1365
+ });
1366
+ const gate = buildRalplanConsensusGateFromSources([{
1367
+ source: 'adapted-forged-artifact-order',
1368
+ value: adaptedConsensus(sessionId, {
1369
+ architect: { completed_at: '2026-07-13T09:00:00.000Z' },
1370
+ critic: { completed_at: '2026-07-13T09:05:00.000Z' },
1371
+ }),
1372
+ }], { cwd, sessionId, requireNativeSubagents: true });
1373
+ assert.equal(gate.complete, false);
1374
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1375
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1376
+ }
1377
+ finally {
1378
+ await rm(cwd, { recursive: true, force: true });
1379
+ }
1380
+ });
1381
+ it('rejects an OMX-adapted lane when the ledger role does not match its review role', async () => {
1382
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-role-'));
1383
+ const sessionId = 'sess-adapted-consensus-role';
1384
+ try {
1385
+ await writeAdaptedSubagentTracking(cwd, sessionId, { architectRole: 'critic' });
1386
+ const gate = buildRalplanConsensusGateFromSources([{
1387
+ source: 'adapted-role-mismatch',
1388
+ value: adaptedConsensus(sessionId),
1389
+ }], { cwd, sessionId, requireNativeSubagents: true });
1390
+ assert.equal(gate.complete, false);
1391
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1392
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1393
+ }
1394
+ finally {
1395
+ await rm(cwd, { recursive: true, force: true });
1396
+ }
1397
+ });
1398
+ it('rejects OMX-adapted reviews that reuse one tracker thread', async () => {
1399
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-reused-thread-'));
1400
+ const sessionId = 'sess-adapted-consensus-reused-thread';
1401
+ try {
1402
+ await writeAdaptedSubagentTracking(cwd, sessionId);
1403
+ const gate = buildRalplanConsensusGateFromSources([{
1404
+ source: 'adapted-reused-thread',
1405
+ value: adaptedConsensus(sessionId, {
1406
+ critic: { thread_id: 'thread-architect' },
1407
+ }),
1408
+ }], { cwd, sessionId, requireNativeSubagents: true });
1409
+ assert.equal(gate.complete, false);
1410
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1411
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1412
+ }
1413
+ finally {
1414
+ await rm(cwd, { recursive: true, force: true });
1415
+ }
1416
+ });
1417
+ it('rejects OMX-adapted lanes without scoped role-routing-unavailable evidence', async () => {
1418
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-no-marker-'));
1419
+ const sessionId = 'sess-adapted-consensus-no-marker';
1420
+ try {
1421
+ await writeAdaptedSubagentTracking(cwd, sessionId, { writeRoleRoutingMarker: false });
1422
+ const gate = buildRalplanConsensusGateFromSources([{
1423
+ source: 'adapted-missing-marker',
1424
+ value: adaptedConsensus(sessionId),
1425
+ }], { cwd, sessionId, requireNativeSubagents: true });
1426
+ assert.equal(gate.complete, false);
1427
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1428
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /unsupported omx_adapted provenance/);
1429
+ }
1430
+ finally {
1431
+ await rm(cwd, { recursive: true, force: true });
1432
+ }
1433
+ });
1434
+ it('rejects a native-provenance artifact that points to OMX-adapted ledger threads', async () => {
1435
+ const cwd = await mkdtemp(join(tmpdir(), 'omx-ralplan-consensus-adapted-native-claim-'));
1436
+ const sessionId = 'sess-adapted-consensus-native-claim';
1437
+ try {
1438
+ await writeAdaptedSubagentTracking(cwd, sessionId);
1439
+ const gate = buildRalplanConsensusGateFromSources([{
1440
+ source: 'adapted-native-claim',
1441
+ value: adaptedConsensus(sessionId, {
1442
+ architect: { provenance_kind: 'native_subagent' },
1443
+ critic: { provenance_kind: 'native_subagent' },
1444
+ }),
1445
+ }], { cwd, sessionId, requireNativeSubagents: true });
1446
+ assert.equal(gate.complete, false);
1447
+ assert.equal(gate.blockedReason, 'native_subagent_consensus_evidence_missing');
1448
+ assert.match(gate.blockedDetails?.join(' ') ?? '', /conflicting with native_subagent review provenance/);
1449
+ }
1450
+ finally {
1451
+ await rm(cwd, { recursive: true, force: true });
1452
+ }
1453
+ });
935
1454
  });
936
1455
  //# sourceMappingURL=consensus-gate.test.js.map