oh-my-codex 0.20.2 → 0.20.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/Cargo.lock +36 -18
  2. package/Cargo.toml +1 -1
  3. package/README.md +28 -2
  4. package/crates/omx-runtime/Cargo.toml +4 -0
  5. package/crates/omx-runtime/src/main.rs +415 -2
  6. package/crates/omx-runtime/tests/execution.rs +483 -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__/herdr-target.test.d.ts +2 -0
  11. package/dist/adapt/__tests__/herdr-target.test.d.ts.map +1 -0
  12. package/dist/adapt/__tests__/herdr-target.test.js +72 -0
  13. package/dist/adapt/__tests__/herdr-target.test.js.map +1 -0
  14. package/dist/adapt/contracts.d.ts +1 -1
  15. package/dist/adapt/contracts.d.ts.map +1 -1
  16. package/dist/adapt/contracts.js +1 -1
  17. package/dist/adapt/contracts.js.map +1 -1
  18. package/dist/adapt/herdr/__tests__/authority.test.d.ts +2 -0
  19. package/dist/adapt/herdr/__tests__/authority.test.d.ts.map +1 -0
  20. package/dist/adapt/herdr/__tests__/authority.test.js +49 -0
  21. package/dist/adapt/herdr/__tests__/authority.test.js.map +1 -0
  22. package/dist/adapt/herdr/__tests__/bridge.test.d.ts +2 -0
  23. package/dist/adapt/herdr/__tests__/bridge.test.d.ts.map +1 -0
  24. package/dist/adapt/herdr/__tests__/bridge.test.js +176 -0
  25. package/dist/adapt/herdr/__tests__/bridge.test.js.map +1 -0
  26. package/dist/adapt/herdr/__tests__/sanitize.test.d.ts +2 -0
  27. package/dist/adapt/herdr/__tests__/sanitize.test.d.ts.map +1 -0
  28. package/dist/adapt/herdr/__tests__/sanitize.test.js +45 -0
  29. package/dist/adapt/herdr/__tests__/sanitize.test.js.map +1 -0
  30. package/dist/adapt/herdr/__tests__/semantic.test.d.ts +2 -0
  31. package/dist/adapt/herdr/__tests__/semantic.test.d.ts.map +1 -0
  32. package/dist/adapt/herdr/__tests__/semantic.test.js +130 -0
  33. package/dist/adapt/herdr/__tests__/semantic.test.js.map +1 -0
  34. package/dist/adapt/herdr/__tests__/seq-store.test.d.ts +2 -0
  35. package/dist/adapt/herdr/__tests__/seq-store.test.d.ts.map +1 -0
  36. package/dist/adapt/herdr/__tests__/seq-store.test.js +54 -0
  37. package/dist/adapt/herdr/__tests__/seq-store.test.js.map +1 -0
  38. package/dist/adapt/herdr/__tests__/socket-live.test.d.ts +2 -0
  39. package/dist/adapt/herdr/__tests__/socket-live.test.d.ts.map +1 -0
  40. package/dist/adapt/herdr/__tests__/socket-live.test.js +104 -0
  41. package/dist/adapt/herdr/__tests__/socket-live.test.js.map +1 -0
  42. package/dist/adapt/herdr/__tests__/team-map.test.d.ts +2 -0
  43. package/dist/adapt/herdr/__tests__/team-map.test.d.ts.map +1 -0
  44. package/dist/adapt/herdr/__tests__/team-map.test.js +46 -0
  45. package/dist/adapt/herdr/__tests__/team-map.test.js.map +1 -0
  46. package/dist/adapt/herdr/__tests__/transport.test.d.ts +2 -0
  47. package/dist/adapt/herdr/__tests__/transport.test.d.ts.map +1 -0
  48. package/dist/adapt/herdr/__tests__/transport.test.js +160 -0
  49. package/dist/adapt/herdr/__tests__/transport.test.js.map +1 -0
  50. package/dist/adapt/herdr/__tests__/wiring.test.d.ts +2 -0
  51. package/dist/adapt/herdr/__tests__/wiring.test.d.ts.map +1 -0
  52. package/dist/adapt/herdr/__tests__/wiring.test.js +118 -0
  53. package/dist/adapt/herdr/__tests__/wiring.test.js.map +1 -0
  54. package/dist/adapt/herdr/authority.d.ts +34 -0
  55. package/dist/adapt/herdr/authority.d.ts.map +1 -0
  56. package/dist/adapt/herdr/authority.js +71 -0
  57. package/dist/adapt/herdr/authority.js.map +1 -0
  58. package/dist/adapt/herdr/bridge.d.ts +84 -0
  59. package/dist/adapt/herdr/bridge.d.ts.map +1 -0
  60. package/dist/adapt/herdr/bridge.js +222 -0
  61. package/dist/adapt/herdr/bridge.js.map +1 -0
  62. package/dist/adapt/herdr/sanitize.d.ts +20 -0
  63. package/dist/adapt/herdr/sanitize.d.ts.map +1 -0
  64. package/dist/adapt/herdr/sanitize.js +70 -0
  65. package/dist/adapt/herdr/sanitize.js.map +1 -0
  66. package/dist/adapt/herdr/semantic.d.ts +67 -0
  67. package/dist/adapt/herdr/semantic.d.ts.map +1 -0
  68. package/dist/adapt/herdr/semantic.js +170 -0
  69. package/dist/adapt/herdr/semantic.js.map +1 -0
  70. package/dist/adapt/herdr/seq-store.d.ts +32 -0
  71. package/dist/adapt/herdr/seq-store.d.ts.map +1 -0
  72. package/dist/adapt/herdr/seq-store.js +126 -0
  73. package/dist/adapt/herdr/seq-store.js.map +1 -0
  74. package/dist/adapt/herdr/team-map.d.ts +30 -0
  75. package/dist/adapt/herdr/team-map.d.ts.map +1 -0
  76. package/dist/adapt/herdr/team-map.js +37 -0
  77. package/dist/adapt/herdr/team-map.js.map +1 -0
  78. package/dist/adapt/herdr/transport.d.ts +115 -0
  79. package/dist/adapt/herdr/transport.d.ts.map +1 -0
  80. package/dist/adapt/herdr/transport.js +260 -0
  81. package/dist/adapt/herdr/transport.js.map +1 -0
  82. package/dist/adapt/herdr/wiring.d.ts +24 -0
  83. package/dist/adapt/herdr/wiring.d.ts.map +1 -0
  84. package/dist/adapt/herdr/wiring.js +62 -0
  85. package/dist/adapt/herdr/wiring.js.map +1 -0
  86. package/dist/adapt/herdr.d.ts +19 -0
  87. package/dist/adapt/herdr.d.ts.map +1 -0
  88. package/dist/adapt/herdr.js +115 -0
  89. package/dist/adapt/herdr.js.map +1 -0
  90. package/dist/adapt/index.d.ts +4 -0
  91. package/dist/adapt/index.d.ts.map +1 -1
  92. package/dist/adapt/index.js +48 -0
  93. package/dist/adapt/index.js.map +1 -1
  94. package/dist/adapt/registry.d.ts.map +1 -1
  95. package/dist/adapt/registry.js +11 -0
  96. package/dist/adapt/registry.js.map +1 -1
  97. package/dist/agents/__tests__/definitions.test.js +81 -0
  98. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  99. package/dist/agents/__tests__/native-config.test.js +25 -0
  100. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  101. package/dist/agents/native-config.d.ts +2 -1
  102. package/dist/agents/native-config.d.ts.map +1 -1
  103. package/dist/agents/native-config.js.map +1 -1
  104. package/dist/auth/__tests__/hotswap.test.js +60 -1
  105. package/dist/auth/__tests__/hotswap.test.js.map +1 -1
  106. package/dist/auth/__tests__/storage.test.js +33 -1
  107. package/dist/auth/__tests__/storage.test.js.map +1 -1
  108. package/dist/auth/hotswap.d.ts +22 -2
  109. package/dist/auth/hotswap.d.ts.map +1 -1
  110. package/dist/auth/hotswap.js +107 -22
  111. package/dist/auth/hotswap.js.map +1 -1
  112. package/dist/auth/storage.js +1 -1
  113. package/dist/auth/storage.js.map +1 -1
  114. package/dist/autopilot/__tests__/ralplan-gate.test.js +86 -1333
  115. package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
  116. package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
  117. package/dist/autopilot/ralplan-gate.js +7 -6
  118. package/dist/autopilot/ralplan-gate.js.map +1 -1
  119. package/dist/cli/__tests__/agents-init.test.js +4 -23
  120. package/dist/cli/__tests__/agents-init.test.js.map +1 -1
  121. package/dist/cli/__tests__/api.test.js +61 -24
  122. package/dist/cli/__tests__/api.test.js.map +1 -1
  123. package/dist/cli/__tests__/auth.test.js +63 -7
  124. package/dist/cli/__tests__/auth.test.js.map +1 -1
  125. package/dist/cli/__tests__/codex-feature-probe.test.js +66 -1
  126. package/dist/cli/__tests__/codex-feature-probe.test.js.map +1 -1
  127. package/dist/cli/__tests__/codex-plugin-layout.test.js +150 -2
  128. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  129. package/dist/cli/__tests__/detached-leader-teardown.test.d.ts +2 -0
  130. package/dist/cli/__tests__/detached-leader-teardown.test.d.ts.map +1 -0
  131. package/dist/cli/__tests__/detached-leader-teardown.test.js +473 -0
  132. package/dist/cli/__tests__/detached-leader-teardown.test.js.map +1 -0
  133. package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts +2 -0
  134. package/dist/cli/__tests__/doctor-process-identity-readiness.test.d.ts.map +1 -0
  135. package/dist/cli/__tests__/doctor-process-identity-readiness.test.js +103 -0
  136. package/dist/cli/__tests__/doctor-process-identity-readiness.test.js.map +1 -0
  137. package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts +2 -0
  138. package/dist/cli/__tests__/doctor-state-root-binding.test.d.ts.map +1 -0
  139. package/dist/cli/__tests__/doctor-state-root-binding.test.js +139 -0
  140. package/dist/cli/__tests__/doctor-state-root-binding.test.js.map +1 -0
  141. package/dist/cli/__tests__/doctor-warning-copy.test.js +135 -1
  142. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  143. package/dist/cli/__tests__/exec.test.js +211 -0
  144. package/dist/cli/__tests__/exec.test.js.map +1 -1
  145. package/dist/cli/__tests__/index.test.js +878 -463
  146. package/dist/cli/__tests__/index.test.js.map +1 -1
  147. package/dist/cli/__tests__/launch-fallback.test.js +1290 -127
  148. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  149. package/dist/cli/__tests__/mcp-parity.test.js +8 -4
  150. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  151. package/dist/cli/__tests__/native-assets.test.js +398 -16
  152. package/dist/cli/__tests__/native-assets.test.js.map +1 -1
  153. package/dist/cli/__tests__/native-hook-claim-journal.test.js +132 -6
  154. package/dist/cli/__tests__/native-hook-claim-journal.test.js.map +1 -1
  155. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -3
  156. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  157. package/dist/cli/__tests__/ralph.test.js +3 -3
  158. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  159. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js +49 -164
  160. package/dist/cli/__tests__/ralplan-bootstrap-3181.test.js.map +1 -1
  161. package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts +2 -0
  162. package/dist/cli/__tests__/ralplan-child-binding-3212.test.d.ts.map +1 -0
  163. package/dist/cli/__tests__/ralplan-child-binding-3212.test.js +56 -0
  164. package/dist/cli/__tests__/ralplan-child-binding-3212.test.js.map +1 -0
  165. package/dist/cli/__tests__/ralplan.test.js +107 -109
  166. package/dist/cli/__tests__/ralplan.test.js.map +1 -1
  167. package/dist/cli/__tests__/resume.test.js +11 -10
  168. package/dist/cli/__tests__/resume.test.js.map +1 -1
  169. package/dist/cli/__tests__/session-scoped-runtime.test.js +1118 -43
  170. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  171. package/dist/cli/__tests__/session-search-help.test.js +25 -1
  172. package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
  173. package/dist/cli/__tests__/setup-agents-overwrite.test.js +8 -55
  174. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  175. package/dist/cli/__tests__/setup-install-mode.test.js +224 -7
  176. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  177. package/dist/cli/__tests__/sparkshell-cli.test.js +93 -41
  178. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  179. package/dist/cli/__tests__/team.test.js +150 -8
  180. package/dist/cli/__tests__/team.test.js.map +1 -1
  181. package/dist/cli/__tests__/ultragoal.test.js +117 -2
  182. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  183. package/dist/cli/__tests__/uninstall.test.js +95 -4
  184. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  185. package/dist/cli/__tests__/update.test.js +669 -177
  186. package/dist/cli/__tests__/update.test.js.map +1 -1
  187. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +33 -2
  188. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  189. package/dist/cli/api.d.ts.map +1 -1
  190. package/dist/cli/api.js +9 -10
  191. package/dist/cli/api.js.map +1 -1
  192. package/dist/cli/codex-feature-probe.d.ts +16 -0
  193. package/dist/cli/codex-feature-probe.d.ts.map +1 -1
  194. package/dist/cli/codex-feature-probe.js +44 -0
  195. package/dist/cli/codex-feature-probe.js.map +1 -1
  196. package/dist/cli/codex-home.d.ts.map +1 -1
  197. package/dist/cli/codex-home.js +7 -4
  198. package/dist/cli/codex-home.js.map +1 -1
  199. package/dist/cli/doctor.d.ts +20 -0
  200. package/dist/cli/doctor.d.ts.map +1 -1
  201. package/dist/cli/doctor.js +290 -3
  202. package/dist/cli/doctor.js.map +1 -1
  203. package/dist/cli/index.d.ts +234 -12
  204. package/dist/cli/index.d.ts.map +1 -1
  205. package/dist/cli/index.js +2409 -746
  206. package/dist/cli/index.js.map +1 -1
  207. package/dist/cli/mcp-parity.js +2 -2
  208. package/dist/cli/mcp-parity.js.map +1 -1
  209. package/dist/cli/native-assets.d.ts +25 -0
  210. package/dist/cli/native-assets.d.ts.map +1 -1
  211. package/dist/cli/native-assets.js +448 -51
  212. package/dist/cli/native-assets.js.map +1 -1
  213. package/dist/cli/native-hook-claim-journal.d.ts +20 -5
  214. package/dist/cli/native-hook-claim-journal.d.ts.map +1 -1
  215. package/dist/cli/native-hook-claim-journal.js +67 -32
  216. package/dist/cli/native-hook-claim-journal.js.map +1 -1
  217. package/dist/cli/package-manager-ownership.d.ts +63 -0
  218. package/dist/cli/package-manager-ownership.d.ts.map +1 -0
  219. package/dist/cli/package-manager-ownership.js +323 -0
  220. package/dist/cli/package-manager-ownership.js.map +1 -0
  221. package/dist/cli/ralph.js +2 -2
  222. package/dist/cli/ralph.js.map +1 -1
  223. package/dist/cli/ralplan.d.ts +5 -7
  224. package/dist/cli/ralplan.d.ts.map +1 -1
  225. package/dist/cli/ralplan.js +83 -134
  226. package/dist/cli/ralplan.js.map +1 -1
  227. package/dist/cli/session-search.d.ts +5 -0
  228. package/dist/cli/session-search.d.ts.map +1 -1
  229. package/dist/cli/session-search.js +87 -0
  230. package/dist/cli/session-search.js.map +1 -1
  231. package/dist/cli/setup-preferences.d.ts +15 -0
  232. package/dist/cli/setup-preferences.d.ts.map +1 -1
  233. package/dist/cli/setup-preferences.js +27 -1
  234. package/dist/cli/setup-preferences.js.map +1 -1
  235. package/dist/cli/setup.d.ts +8 -0
  236. package/dist/cli/setup.d.ts.map +1 -1
  237. package/dist/cli/setup.js +119 -47
  238. package/dist/cli/setup.js.map +1 -1
  239. package/dist/cli/sparkshell.d.ts.map +1 -1
  240. package/dist/cli/sparkshell.js +52 -9
  241. package/dist/cli/sparkshell.js.map +1 -1
  242. package/dist/cli/ultragoal.d.ts.map +1 -1
  243. package/dist/cli/ultragoal.js +2 -2
  244. package/dist/cli/ultragoal.js.map +1 -1
  245. package/dist/cli/uninstall.d.ts +9 -0
  246. package/dist/cli/uninstall.d.ts.map +1 -1
  247. package/dist/cli/uninstall.js +71 -30
  248. package/dist/cli/uninstall.js.map +1 -1
  249. package/dist/cli/update-worker.d.ts +2 -0
  250. package/dist/cli/update-worker.d.ts.map +1 -0
  251. package/dist/cli/update-worker.js +142 -0
  252. package/dist/cli/update-worker.js.map +1 -0
  253. package/dist/cli/update.d.ts +14 -22
  254. package/dist/cli/update.d.ts.map +1 -1
  255. package/dist/cli/update.js +192 -241
  256. package/dist/cli/update.js.map +1 -1
  257. package/dist/compat/__tests__/rust-runtime-compat.test.js +1 -1
  258. package/dist/config/__tests__/generator-idempotent.test.js +503 -30
  259. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  260. package/dist/config/__tests__/generator-notify.test.js +5 -3
  261. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  262. package/dist/config/__tests__/models.test.js +67 -3
  263. package/dist/config/__tests__/models.test.js.map +1 -1
  264. package/dist/config/generator.d.ts +27 -21
  265. package/dist/config/generator.d.ts.map +1 -1
  266. package/dist/config/generator.js +610 -152
  267. package/dist/config/generator.js.map +1 -1
  268. package/dist/config/models.d.ts +12 -2
  269. package/dist/config/models.d.ts.map +1 -1
  270. package/dist/config/models.js +15 -1
  271. package/dist/config/models.js.map +1 -1
  272. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +25 -0
  273. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
  274. package/dist/goal-workflows/codex-goal-snapshot.d.ts +1 -1
  275. package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
  276. package/dist/goal-workflows/codex-goal-snapshot.js +2 -0
  277. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  278. package/dist/hooks/__tests__/agents-overlay.test.js +5 -3
  279. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  280. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +27 -4
  281. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  282. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts +2 -0
  283. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.d.ts.map +1 -0
  284. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js +172 -0
  285. package/dist/hooks/__tests__/issue-3293-autopilot-handoff.test.js.map +1 -0
  286. package/dist/hooks/__tests__/keyword-detector.test.js +176 -37
  287. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  288. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +402 -545
  289. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  290. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +39 -4
  291. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  292. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +161 -26
  293. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  294. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +27 -0
  295. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  296. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +10 -118
  297. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  298. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +7 -0
  299. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  300. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +533 -14
  301. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  302. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +159 -24
  303. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  304. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +482 -32
  305. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  306. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +2 -1
  307. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -1
  308. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +68 -1
  309. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
  310. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +7 -1
  311. package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +1 -1
  312. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +44 -4
  313. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  314. package/dist/hooks/__tests__/prompt-guidance-contract.test.js +9 -0
  315. package/dist/hooks/__tests__/prompt-guidance-contract.test.js.map +1 -1
  316. package/dist/hooks/__tests__/session.test.js +3130 -365
  317. package/dist/hooks/__tests__/session.test.js.map +1 -1
  318. package/dist/hooks/agents-overlay.js +1 -1
  319. package/dist/hooks/agents-overlay.js.map +1 -1
  320. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +108 -2
  321. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
  322. package/dist/hooks/extensibility/__tests__/sdk.test.js +151 -1
  323. package/dist/hooks/extensibility/__tests__/sdk.test.js.map +1 -1
  324. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  325. package/dist/hooks/extensibility/dispatcher.js +20 -3
  326. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  327. package/dist/hooks/extensibility/plugin-runner.js +1 -0
  328. package/dist/hooks/extensibility/plugin-runner.js.map +1 -1
  329. package/dist/hooks/extensibility/runtime.d.ts.map +1 -1
  330. package/dist/hooks/extensibility/runtime.js.map +1 -1
  331. package/dist/hooks/extensibility/sdk/paths.d.ts +1 -1
  332. package/dist/hooks/extensibility/sdk/paths.d.ts.map +1 -1
  333. package/dist/hooks/extensibility/sdk/paths.js +2 -2
  334. package/dist/hooks/extensibility/sdk/paths.js.map +1 -1
  335. package/dist/hooks/extensibility/sdk/runtime-state.d.ts +1 -1
  336. package/dist/hooks/extensibility/sdk/runtime-state.d.ts.map +1 -1
  337. package/dist/hooks/extensibility/sdk/runtime-state.js +55 -15
  338. package/dist/hooks/extensibility/sdk/runtime-state.js.map +1 -1
  339. package/dist/hooks/extensibility/sdk.d.ts +1 -0
  340. package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
  341. package/dist/hooks/extensibility/sdk.js +1 -1
  342. package/dist/hooks/extensibility/sdk.js.map +1 -1
  343. package/dist/hooks/extensibility/types.d.ts +7 -0
  344. package/dist/hooks/extensibility/types.d.ts.map +1 -1
  345. package/dist/hooks/keyword-detector.d.ts +10 -3
  346. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  347. package/dist/hooks/keyword-detector.js +116 -20
  348. package/dist/hooks/keyword-detector.js.map +1 -1
  349. package/dist/hooks/session.d.ts +204 -14
  350. package/dist/hooks/session.d.ts.map +1 -1
  351. package/dist/hooks/session.js +1500 -223
  352. package/dist/hooks/session.js.map +1 -1
  353. package/dist/hud/__tests__/hud-tmux-injection.test.js +6 -6
  354. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
  355. package/dist/hud/__tests__/index.test.js +26 -16
  356. package/dist/hud/__tests__/index.test.js.map +1 -1
  357. package/dist/hud/__tests__/reconcile.test.js +83 -78
  358. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  359. package/dist/hud/__tests__/state.test.js +36 -31
  360. package/dist/hud/__tests__/state.test.js.map +1 -1
  361. package/dist/hud/__tests__/tmux.test.js +155 -198
  362. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  363. package/dist/hud/tmux.d.ts +42 -4
  364. package/dist/hud/tmux.d.ts.map +1 -1
  365. package/dist/hud/tmux.js +1017 -139
  366. package/dist/hud/tmux.js.map +1 -1
  367. package/dist/leader/__tests__/contract.test.js +124 -37
  368. package/dist/leader/__tests__/contract.test.js.map +1 -1
  369. package/dist/leader/contract.d.ts +17 -6
  370. package/dist/leader/contract.d.ts.map +1 -1
  371. package/dist/leader/contract.js +102 -26
  372. package/dist/leader/contract.js.map +1 -1
  373. package/dist/mcp/__tests__/code-intel-server.test.js +31 -3
  374. package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -1
  375. package/dist/mcp/__tests__/hermes-bridge.test.js +17 -0
  376. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
  377. package/dist/mcp/__tests__/server-lifecycle.test.js +4 -4
  378. package/dist/mcp/__tests__/state-paths.test.js +735 -4
  379. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  380. package/dist/mcp/__tests__/state-server.test.js +1 -1
  381. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  382. package/dist/mcp/__tests__/trace-server.test.js +2 -2
  383. package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
  384. package/dist/mcp/__tests__/wiki-server.test.js +18 -0
  385. package/dist/mcp/__tests__/wiki-server.test.js.map +1 -1
  386. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  387. package/dist/mcp/code-intel-server.js +13 -3
  388. package/dist/mcp/code-intel-server.js.map +1 -1
  389. package/dist/mcp/hermes-bridge.d.ts.map +1 -1
  390. package/dist/mcp/hermes-bridge.js +2 -2
  391. package/dist/mcp/hermes-bridge.js.map +1 -1
  392. package/dist/mcp/state-paths.d.ts +78 -4
  393. package/dist/mcp/state-paths.d.ts.map +1 -1
  394. package/dist/mcp/state-paths.js +543 -40
  395. package/dist/mcp/state-paths.js.map +1 -1
  396. package/dist/mcp/state-server.d.ts +4 -4
  397. package/dist/mcp/state-server.d.ts.map +1 -1
  398. package/dist/mcp/wiki-server.d.ts +11 -0
  399. package/dist/mcp/wiki-server.d.ts.map +1 -1
  400. package/dist/mcp/wiki-server.js +9 -2
  401. package/dist/mcp/wiki-server.js.map +1 -1
  402. package/dist/modes/__tests__/base-autopilot-gates.test.js +36 -7
  403. package/dist/modes/__tests__/base-autopilot-gates.test.js.map +1 -1
  404. package/dist/modes/__tests__/base-multi-state-compat.test.js +1 -1
  405. package/dist/modes/__tests__/base-multi-state-compat.test.js.map +1 -1
  406. package/dist/modes/__tests__/base-session-scope.test.js +17 -8
  407. package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
  408. package/dist/modes/__tests__/base-tmux-pane.test.js +4 -4
  409. package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
  410. package/dist/modes/base.d.ts +5 -5
  411. package/dist/modes/base.d.ts.map +1 -1
  412. package/dist/modes/base.js +76 -21
  413. package/dist/modes/base.js.map +1 -1
  414. package/dist/native-assets/archive.d.ts +17 -0
  415. package/dist/native-assets/archive.d.ts.map +1 -0
  416. package/dist/native-assets/archive.js +238 -0
  417. package/dist/native-assets/archive.js.map +1 -0
  418. package/dist/native-assets/policy.d.ts +42 -0
  419. package/dist/native-assets/policy.d.ts.map +1 -0
  420. package/dist/native-assets/policy.js +155 -0
  421. package/dist/native-assets/policy.js.map +1 -0
  422. package/dist/notifications/temp-contract.d.ts.map +1 -1
  423. package/dist/notifications/temp-contract.js +4 -0
  424. package/dist/notifications/temp-contract.js.map +1 -1
  425. package/dist/pipeline/__tests__/orchestrator.test.js +164 -42
  426. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  427. package/dist/pipeline/__tests__/stages.test.js +72 -155
  428. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  429. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  430. package/dist/pipeline/orchestrator.js +124 -18
  431. package/dist/pipeline/orchestrator.js.map +1 -1
  432. package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
  433. package/dist/pipeline/stages/ralplan.js +36 -8
  434. package/dist/pipeline/stages/ralplan.js.map +1 -1
  435. package/dist/ralplan/__tests__/consensus-gate.test.js +73 -1316
  436. package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
  437. package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts +2 -0
  438. package/dist/ralplan/__tests__/documented-leader-preflight.test.d.ts.map +1 -0
  439. package/dist/ralplan/__tests__/documented-leader-preflight.test.js +335 -0
  440. package/dist/ralplan/__tests__/documented-leader-preflight.test.js.map +1 -0
  441. package/dist/ralplan/__tests__/runtime.test.js +85 -101
  442. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  443. package/dist/ralplan/consensus-gate.d.ts +9 -1
  444. package/dist/ralplan/consensus-gate.d.ts.map +1 -1
  445. package/dist/ralplan/consensus-gate.js +82 -338
  446. package/dist/ralplan/consensus-gate.js.map +1 -1
  447. package/dist/ralplan/documented-leader-preflight.d.ts +41 -0
  448. package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -0
  449. package/dist/ralplan/documented-leader-preflight.js +360 -0
  450. package/dist/ralplan/documented-leader-preflight.js.map +1 -0
  451. package/dist/ralplan/runtime.d.ts +2 -1
  452. package/dist/ralplan/runtime.d.ts.map +1 -1
  453. package/dist/ralplan/runtime.js +67 -168
  454. package/dist/ralplan/runtime.js.map +1 -1
  455. package/dist/runtime/__tests__/bridge.test.js +42 -1
  456. package/dist/runtime/__tests__/bridge.test.js.map +1 -1
  457. package/dist/runtime/bridge.d.ts +12 -0
  458. package/dist/runtime/bridge.d.ts.map +1 -1
  459. package/dist/runtime/bridge.js +52 -1
  460. package/dist/runtime/bridge.js.map +1 -1
  461. package/dist/runtime/run-state.d.ts +5 -1
  462. package/dist/runtime/run-state.d.ts.map +1 -1
  463. package/dist/runtime/run-state.js +15 -8
  464. package/dist/runtime/run-state.js.map +1 -1
  465. package/dist/scripts/__tests__/codex-native-hook.test.js +16323 -8978
  466. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  467. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts +2 -0
  468. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.d.ts.map +1 -0
  469. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js +225 -0
  470. package/dist/scripts/__tests__/issue-3293-callsite-parity.test.js.map +1 -0
  471. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts +2 -0
  472. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.d.ts.map +1 -0
  473. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js +188 -0
  474. package/dist/scripts/__tests__/issue-3293-cancel-transaction.test.js.map +1 -0
  475. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts +2 -0
  476. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.d.ts.map +1 -0
  477. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js +259 -0
  478. package/dist/scripts/__tests__/issue-3293-hook-owned-cancel.test.js.map +1 -0
  479. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts +2 -0
  480. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.d.ts.map +1 -0
  481. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js +491 -0
  482. package/dist/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.js.map +1 -0
  483. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts +2 -0
  484. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.d.ts.map +1 -0
  485. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js +708 -0
  486. package/dist/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.js.map +1 -0
  487. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts +2 -0
  488. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.d.ts.map +1 -0
  489. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js +208 -0
  490. package/dist/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.js.map +1 -0
  491. package/dist/scripts/__tests__/notify-state-io.test.js +26 -0
  492. package/dist/scripts/__tests__/notify-state-io.test.js.map +1 -1
  493. package/dist/scripts/__tests__/notify-tmux-injection.test.js +23 -1
  494. package/dist/scripts/__tests__/notify-tmux-injection.test.js.map +1 -1
  495. package/dist/scripts/__tests__/postinstall.test.js +19 -1
  496. package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
  497. package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts +2 -0
  498. package/dist/scripts/__tests__/reasoning-artifact-contract.test.d.ts.map +1 -0
  499. package/dist/scripts/__tests__/reasoning-artifact-contract.test.js +108 -0
  500. package/dist/scripts/__tests__/reasoning-artifact-contract.test.js.map +1 -0
  501. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js +63 -173
  502. package/dist/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.js.map +1 -1
  503. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js +74 -159
  504. package/dist/scripts/__tests__/role-intent-durable-recovery-3181.test.js.map +1 -1
  505. package/dist/scripts/__tests__/smoke-packed-install.test.js +404 -13
  506. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  507. package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts +2 -0
  508. package/dist/scripts/__tests__/verify-native-release-assets.test.d.ts.map +1 -0
  509. package/dist/scripts/__tests__/verify-native-release-assets.test.js +235 -0
  510. package/dist/scripts/__tests__/verify-native-release-assets.test.js.map +1 -0
  511. package/dist/scripts/codex-native-hook.d.ts +53 -1
  512. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  513. package/dist/scripts/codex-native-hook.js +14448 -1480
  514. package/dist/scripts/codex-native-hook.js.map +1 -1
  515. package/dist/scripts/codex-native-pre-post.d.ts +9 -0
  516. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  517. package/dist/scripts/codex-native-pre-post.js +35 -12
  518. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  519. package/dist/scripts/generate-native-release-manifest.js +80 -51
  520. package/dist/scripts/generate-native-release-manifest.js.map +1 -1
  521. package/dist/scripts/notify-fallback-watcher.js +78 -115
  522. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  523. package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
  524. package/dist/scripts/notify-hook/auto-nudge.js +74 -3
  525. package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
  526. package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
  527. package/dist/scripts/notify-hook/state-io.js +5 -0
  528. package/dist/scripts/notify-hook/state-io.js.map +1 -1
  529. package/dist/scripts/notify-hook/team-dispatch.d.ts +9 -0
  530. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  531. package/dist/scripts/notify-hook/team-dispatch.js +234 -79
  532. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  533. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  534. package/dist/scripts/notify-hook/team-leader-nudge.js +71 -16
  535. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  536. package/dist/scripts/notify-hook/team-tmux-guard.d.ts +12 -4
  537. package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
  538. package/dist/scripts/notify-hook/team-tmux-guard.js +365 -44
  539. package/dist/scripts/notify-hook/team-tmux-guard.js.map +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 +42 -21
  542. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
  543. package/dist/scripts/notify-hook/team-worker.d.ts +3 -0
  544. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  545. package/dist/scripts/notify-hook/team-worker.js +82 -33
  546. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  547. package/dist/scripts/notify-hook/tmux-injection.d.ts +1 -0
  548. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  549. package/dist/scripts/notify-hook/tmux-injection.js +32 -3
  550. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  551. package/dist/scripts/notify-hook.js +79 -82
  552. package/dist/scripts/notify-hook.js.map +1 -1
  553. package/dist/scripts/postinstall-advisory.d.ts +14 -0
  554. package/dist/scripts/postinstall-advisory.d.ts.map +1 -0
  555. package/dist/scripts/postinstall-advisory.js +49 -0
  556. package/dist/scripts/postinstall-advisory.js.map +1 -0
  557. package/dist/scripts/postinstall.d.ts +1 -1
  558. package/dist/scripts/postinstall.d.ts.map +1 -1
  559. package/dist/scripts/postinstall.js +1 -1
  560. package/dist/scripts/postinstall.js.map +1 -1
  561. package/dist/scripts/smoke-packed-install.d.ts +80 -4
  562. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  563. package/dist/scripts/smoke-packed-install.js +3162 -26
  564. package/dist/scripts/smoke-packed-install.js.map +1 -1
  565. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
  566. package/dist/scripts/sync-plugin-mirror.js +16 -1
  567. package/dist/scripts/sync-plugin-mirror.js.map +1 -1
  568. package/dist/scripts/verify-native-release-assets.js +37 -23
  569. package/dist/scripts/verify-native-release-assets.js.map +1 -1
  570. package/dist/state/__tests__/mode-state-context.test.js +61 -0
  571. package/dist/state/__tests__/mode-state-context.test.js.map +1 -1
  572. package/dist/state/__tests__/operations.test.js +462 -850
  573. package/dist/state/__tests__/operations.test.js.map +1 -1
  574. package/dist/state/__tests__/skill-active.test.js +400 -2
  575. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  576. package/dist/state/mode-state-context.d.ts +8 -0
  577. package/dist/state/mode-state-context.d.ts.map +1 -1
  578. package/dist/state/mode-state-context.js +73 -0
  579. package/dist/state/mode-state-context.js.map +1 -1
  580. package/dist/state/operations.d.ts +3 -0
  581. package/dist/state/operations.d.ts.map +1 -1
  582. package/dist/state/operations.js +144 -40
  583. package/dist/state/operations.js.map +1 -1
  584. package/dist/state/skill-active.d.ts +18 -1
  585. package/dist/state/skill-active.d.ts.map +1 -1
  586. package/dist/state/skill-active.js +420 -23
  587. package/dist/state/skill-active.js.map +1 -1
  588. package/dist/state/workflow-transition-reconcile.d.ts +3 -0
  589. package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
  590. package/dist/state/workflow-transition-reconcile.js +10 -4
  591. package/dist/state/workflow-transition-reconcile.js.map +1 -1
  592. package/dist/state/workflow-transition.d.ts.map +1 -1
  593. package/dist/state/workflow-transition.js +3 -1
  594. package/dist/state/workflow-transition.js.map +1 -1
  595. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js +53 -247
  596. package/dist/subagents/__tests__/leader-bootstrap-3181.test.js.map +1 -1
  597. package/dist/subagents/__tests__/tracker.test.js +837 -1048
  598. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  599. package/dist/subagents/tracker.d.ts +58 -135
  600. package/dist/subagents/tracker.d.ts.map +1 -1
  601. package/dist/subagents/tracker.js +811 -632
  602. package/dist/subagents/tracker.js.map +1 -1
  603. package/dist/team/__tests__/api-interop.test.js +91 -1
  604. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  605. package/dist/team/__tests__/delivery-e2e-smoke.test.js +58 -17
  606. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
  607. package/dist/team/__tests__/idle-nudge.test.js +45 -15
  608. package/dist/team/__tests__/idle-nudge.test.js.map +1 -1
  609. package/dist/team/__tests__/mcp-comm.test.js +197 -30
  610. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  611. package/dist/team/__tests__/model-contract.test.js +110 -3
  612. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  613. package/dist/team/__tests__/notice-ledger.test.d.ts +2 -0
  614. package/dist/team/__tests__/notice-ledger.test.d.ts.map +1 -0
  615. package/dist/team/__tests__/notice-ledger.test.js +131 -0
  616. package/dist/team/__tests__/notice-ledger.test.js.map +1 -0
  617. package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts +2 -0
  618. package/dist/team/__tests__/pane-teardown-residue-e2e.test.d.ts.map +1 -0
  619. package/dist/team/__tests__/pane-teardown-residue-e2e.test.js +410 -0
  620. package/dist/team/__tests__/pane-teardown-residue-e2e.test.js.map +1 -0
  621. package/dist/team/__tests__/phase-controller.test.js +20 -0
  622. package/dist/team/__tests__/phase-controller.test.js.map +1 -1
  623. package/dist/team/__tests__/runtime-cli.test.js +9 -0
  624. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  625. package/dist/team/__tests__/runtime.test.js +3963 -428
  626. package/dist/team/__tests__/runtime.test.js.map +1 -1
  627. package/dist/team/__tests__/scaling.test.js +2405 -203
  628. package/dist/team/__tests__/scaling.test.js.map +1 -1
  629. package/dist/team/__tests__/state-root.test.js +117 -2
  630. package/dist/team/__tests__/state-root.test.js.map +1 -1
  631. package/dist/team/__tests__/state.test.js +804 -36
  632. package/dist/team/__tests__/state.test.js.map +1 -1
  633. package/dist/team/__tests__/team-ops-contract.test.js +6 -0
  634. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -1
  635. package/dist/team/__tests__/tmux-session.test.js +4099 -1039
  636. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  637. package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts +2 -0
  638. package/dist/team/__tests__/tmux-source-authority-realtmux.test.d.ts.map +1 -0
  639. package/dist/team/__tests__/tmux-source-authority-realtmux.test.js +149 -0
  640. package/dist/team/__tests__/tmux-source-authority-realtmux.test.js.map +1 -0
  641. package/dist/team/__tests__/tmux-test-fixture.d.ts +69 -0
  642. package/dist/team/__tests__/tmux-test-fixture.d.ts.map +1 -1
  643. package/dist/team/__tests__/tmux-test-fixture.js +242 -15
  644. package/dist/team/__tests__/tmux-test-fixture.js.map +1 -1
  645. package/dist/team/__tests__/tmux-test-fixture.test.js +177 -1
  646. package/dist/team/__tests__/tmux-test-fixture.test.js.map +1 -1
  647. package/dist/team/__tests__/worker-runtime-identity.test.js +53 -44
  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.map +1 -1
  652. package/dist/team/api-interop.js +15 -9
  653. package/dist/team/api-interop.js.map +1 -1
  654. package/dist/team/exact-pane.d.ts +23 -0
  655. package/dist/team/exact-pane.d.ts.map +1 -0
  656. package/dist/team/exact-pane.js +133 -0
  657. package/dist/team/exact-pane.js.map +1 -0
  658. package/dist/team/idle-nudge.d.ts +12 -1
  659. package/dist/team/idle-nudge.d.ts.map +1 -1
  660. package/dist/team/idle-nudge.js +41 -14
  661. package/dist/team/idle-nudge.js.map +1 -1
  662. package/dist/team/model-contract.d.ts +2 -5
  663. package/dist/team/model-contract.d.ts.map +1 -1
  664. package/dist/team/model-contract.js +59 -17
  665. package/dist/team/model-contract.js.map +1 -1
  666. package/dist/team/notice-ledger.d.ts +54 -0
  667. package/dist/team/notice-ledger.d.ts.map +1 -0
  668. package/dist/team/notice-ledger.js +259 -0
  669. package/dist/team/notice-ledger.js.map +1 -0
  670. package/dist/team/phase-controller.d.ts.map +1 -1
  671. package/dist/team/phase-controller.js +2 -0
  672. package/dist/team/phase-controller.js.map +1 -1
  673. package/dist/team/runtime.d.ts +4 -1
  674. package/dist/team/runtime.d.ts.map +1 -1
  675. package/dist/team/runtime.js +1527 -291
  676. package/dist/team/runtime.js.map +1 -1
  677. package/dist/team/scaling.d.ts +13 -1
  678. package/dist/team/scaling.d.ts.map +1 -1
  679. package/dist/team/scaling.js +1503 -387
  680. package/dist/team/scaling.js.map +1 -1
  681. package/dist/team/state/dispatch.d.ts.map +1 -1
  682. package/dist/team/state/dispatch.js +26 -8
  683. package/dist/team/state/dispatch.js.map +1 -1
  684. package/dist/team/state/locks.d.ts.map +1 -1
  685. package/dist/team/state/locks.js +61 -13
  686. package/dist/team/state/locks.js.map +1 -1
  687. package/dist/team/state/monitor.d.ts +10 -0
  688. package/dist/team/state/monitor.d.ts.map +1 -1
  689. package/dist/team/state/monitor.js +13 -0
  690. package/dist/team/state/monitor.js.map +1 -1
  691. package/dist/team/state/tasks.d.ts.map +1 -1
  692. package/dist/team/state/tasks.js +4 -3
  693. package/dist/team/state/tasks.js.map +1 -1
  694. package/dist/team/state/types.d.ts +15 -0
  695. package/dist/team/state/types.d.ts.map +1 -1
  696. package/dist/team/state/types.js.map +1 -1
  697. package/dist/team/state-root.d.ts +12 -0
  698. package/dist/team/state-root.d.ts.map +1 -1
  699. package/dist/team/state-root.js +177 -0
  700. package/dist/team/state-root.js.map +1 -1
  701. package/dist/team/state.d.ts +85 -1
  702. package/dist/team/state.d.ts.map +1 -1
  703. package/dist/team/state.js +672 -129
  704. package/dist/team/state.js.map +1 -1
  705. package/dist/team/team-ops.d.ts +5 -0
  706. package/dist/team/team-ops.d.ts.map +1 -1
  707. package/dist/team/team-ops.js +4 -0
  708. package/dist/team/team-ops.js.map +1 -1
  709. package/dist/team/tmux-session.d.ts +163 -27
  710. package/dist/team/tmux-session.d.ts.map +1 -1
  711. package/dist/team/tmux-session.js +1682 -376
  712. package/dist/team/tmux-session.js.map +1 -1
  713. package/dist/team/worktree.d.ts.map +1 -1
  714. package/dist/team/worktree.js +4 -0
  715. package/dist/team/worktree.js.map +1 -1
  716. package/dist/ultragoal/__tests__/artifacts.test.js +950 -2
  717. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  718. package/dist/ultragoal/__tests__/docs-contract.test.js +1 -0
  719. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  720. package/dist/ultragoal/artifacts.d.ts +35 -1
  721. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  722. package/dist/ultragoal/artifacts.js +232 -46
  723. package/dist/ultragoal/artifacts.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 +114 -0
  727. package/dist/utils/__tests__/file-durability.test.js.map +1 -0
  728. package/dist/utils/__tests__/paths.test.js +21 -1
  729. package/dist/utils/__tests__/paths.test.js.map +1 -1
  730. package/dist/utils/file-durability.d.ts +25 -0
  731. package/dist/utils/file-durability.d.ts.map +1 -0
  732. package/dist/utils/file-durability.js +67 -0
  733. package/dist/utils/file-durability.js.map +1 -0
  734. package/dist/utils/paths.d.ts.map +1 -1
  735. package/dist/utils/paths.js +14 -6
  736. package/dist/utils/paths.js.map +1 -1
  737. package/dist/verification/__tests__/ci-rust-gates.test.js +49 -4
  738. package/dist/verification/__tests__/ci-rust-gates.test.js.map +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/__tests__/explore-harness-release-workflow.test.js +60 -0
  742. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
  743. package/dist/verification/__tests__/native-release-manifest.test.js +157 -4
  744. package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -1
  745. package/dist/wiki/lint.d.ts +4 -1
  746. package/dist/wiki/lint.d.ts.map +1 -1
  747. package/dist/wiki/lint.js +3 -2
  748. package/dist/wiki/lint.js.map +1 -1
  749. package/package.json +13 -5
  750. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  751. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +105 -17
  752. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +13 -5
  753. package/plugins/oh-my-codex/skills/cancel/SKILL.md +30 -85
  754. package/plugins/oh-my-codex/skills/ralph/SKILL.md +6 -4
  755. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +16 -17
  756. package/plugins/oh-my-codex/skills/team/SKILL.md +13 -9
  757. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +3 -2
  758. package/skills/autopilot/SKILL.md +13 -5
  759. package/skills/cancel/SKILL.md +30 -85
  760. package/skills/ralph/SKILL.md +6 -4
  761. package/skills/ralplan/SKILL.md +16 -17
  762. package/skills/team/SKILL.md +13 -9
  763. package/skills/ultragoal/SKILL.md +3 -2
  764. package/src/scripts/__tests__/codex-native-hook.test.ts +8831 -951
  765. package/src/scripts/__tests__/issue-3293-callsite-parity.test.ts +187 -0
  766. package/src/scripts/__tests__/issue-3293-cancel-transaction.test.ts +189 -0
  767. package/src/scripts/__tests__/issue-3293-hook-owned-cancel.test.ts +187 -0
  768. package/src/scripts/__tests__/issue-3311-ultragoal-native-outside-tmux.test.ts +591 -0
  769. package/src/scripts/__tests__/issue-3358-ultragoal-cancel-lifecycle.test.ts +701 -0
  770. package/src/scripts/__tests__/issue-3369-autopilot-ralplan-state-machine.test.ts +211 -0
  771. package/src/scripts/__tests__/notify-state-io.test.ts +29 -0
  772. package/src/scripts/__tests__/notify-tmux-injection.test.ts +26 -1
  773. package/src/scripts/__tests__/postinstall.test.ts +23 -1
  774. package/src/scripts/__tests__/reasoning-artifact-contract.test.ts +129 -0
  775. package/src/scripts/__tests__/role-intent-bootstrap-e2e-3181.test.ts +67 -185
  776. package/src/scripts/__tests__/role-intent-durable-recovery-3181.test.ts +79 -178
  777. package/src/scripts/__tests__/smoke-packed-install.test.ts +525 -16
  778. package/src/scripts/__tests__/verify-native-release-assets.test.ts +240 -0
  779. package/src/scripts/codex-native-hook.ts +14238 -1429
  780. package/src/scripts/codex-native-pre-post.ts +43 -12
  781. package/src/scripts/generate-native-release-manifest.ts +83 -79
  782. package/src/scripts/notify-fallback-watcher.ts +91 -122
  783. package/src/scripts/notify-hook/auto-nudge.ts +71 -3
  784. package/src/scripts/notify-hook/state-io.ts +11 -0
  785. package/src/scripts/notify-hook/team-dispatch.ts +242 -75
  786. package/src/scripts/notify-hook/team-leader-nudge.ts +72 -22
  787. package/src/scripts/notify-hook/team-tmux-guard.ts +366 -39
  788. package/src/scripts/notify-hook/team-worker-stop.ts +43 -20
  789. package/src/scripts/notify-hook/team-worker.ts +82 -31
  790. package/src/scripts/notify-hook/tmux-injection.ts +33 -3
  791. package/src/scripts/notify-hook.ts +84 -82
  792. package/src/scripts/postinstall-advisory.ts +67 -0
  793. package/src/scripts/postinstall.ts +1 -1
  794. package/src/scripts/smoke-packed-install.ts +3608 -39
  795. package/src/scripts/sync-plugin-mirror.ts +17 -1
  796. package/src/scripts/verify-native-release-assets.ts +39 -31
  797. package/templates/AGENTS.md +1 -0
  798. package/dist/subagents/__tests__/adapted-role-binding.test.d.ts +0 -2
  799. package/dist/subagents/__tests__/adapted-role-binding.test.d.ts.map +0 -1
  800. package/dist/subagents/__tests__/adapted-role-binding.test.js +0 -988
  801. package/dist/subagents/__tests__/adapted-role-binding.test.js.map +0 -1
  802. package/dist/subagents/adapted-role-binding.d.ts +0 -17
  803. package/dist/subagents/adapted-role-binding.d.ts.map +0 -1
  804. package/dist/subagents/adapted-role-binding.js +0 -75
  805. package/dist/subagents/adapted-role-binding.js.map +0 -1
@@ -18,7 +18,15 @@ async function withTempWorkingDir(run) {
18
18
  }
19
19
  }
20
20
  async function writeJson(path, value) {
21
- await writeFile(path, JSON.stringify(value, null, 2));
21
+ let persisted = value;
22
+ if (path.endsWith('/config.json') && value && typeof value === 'object' && !Array.isArray(value)) {
23
+ const config = value;
24
+ if (!Object.prototype.hasOwnProperty.call(config, 'tmux_pane_owner_id')
25
+ && typeof config.name === 'string' && config.name.trim()) {
26
+ persisted = { ...config, tmux_pane_owner_id: `team:${config.name.trim()}` };
27
+ }
28
+ }
29
+ await writeFile(path, JSON.stringify(persisted, null, 2));
22
30
  }
23
31
  async function writeCanonicalTeamFixture(cwd, { teamName, sessionId, ownerSessionId, coarseState = 'missing', }) {
24
32
  const stateDir = join(cwd, '.omx', 'state');
@@ -69,6 +77,8 @@ async function writeCanonicalTeamFixture(cwd, { teamName, sessionId, ownerSessio
69
77
  },
70
78
  tmux_session: `${teamName}:0`,
71
79
  leader_pane_id: '%97',
80
+ leader_pane_pid: 12097,
81
+ tmux_pane_owner_id: `team:${teamName}`,
72
82
  hud_pane_id: null,
73
83
  resize_hook_name: null,
74
84
  resize_hook_target: null,
@@ -196,9 +206,21 @@ fi
196
206
  if [[ "$cmd" == "send-keys" ]]; then
197
207
  exit 0
198
208
  fi
209
+ if [[ "$cmd" == "show-option" ]]; then
210
+ target=""
211
+ while [[ "$#" -gt 0 ]]; do
212
+ case "$1" in
213
+ -t) target="$2"; shift 2 ;;
214
+ *) shift ;;
215
+ esac
216
+ done
217
+ node -e 'const fs=require("fs"),path=require("path"),root=process.argv[1],target=process.argv[2],teamRoot=path.join(root,".omx","state","team");for(const team of fs.readdirSync(teamRoot,{withFileTypes:true}).filter(entry=>entry.isDirectory()).map(entry=>entry.name)){const dir=path.join(teamRoot,team),manifest=path.join(dir,"manifest.v2.json"),config=path.join(dir,"config.json"),source=fs.existsSync(manifest)?manifest:config;if(!fs.existsSync(source))continue;try{const raw=JSON.parse(fs.readFileSync(source,"utf8"));if(raw.leader_pane_id===target){process.stdout.write(String(raw.tmux_pane_owner_id||"team:"+team));break;}}catch{}}' "$(dirname "$(dirname "$0")")" "$target"
218
+ exit 0
219
+ fi
199
220
  if [[ "$cmd" == "list-panes" ]]; then
200
- echo "%1 12345"
201
- echo "%2 12346"
221
+ for pane in $(seq 1 200); do
222
+ printf '%%%s\t0\t%s\n' "$pane" "$((12000 + pane))"
223
+ done
202
224
  exit 0
203
225
  fi
204
226
  exit 0
@@ -244,6 +266,17 @@ fi
244
266
  if [[ "$cmd" == "send-keys" ]]; then
245
267
  exit 0
246
268
  fi
269
+ if [[ "$cmd" == "show-option" ]]; then
270
+ target=""
271
+ while [[ "$#" -gt 0 ]]; do
272
+ case "$1" in
273
+ -t) target="$2"; shift 2 ;;
274
+ *) shift ;;
275
+ esac
276
+ done
277
+ node -e 'const fs=require("fs"),path=require("path"),root=process.argv[1],target=process.argv[2],teamRoot=path.join(root,".omx","state","team");for(const team of fs.readdirSync(teamRoot,{withFileTypes:true}).filter(entry=>entry.isDirectory()).map(entry=>entry.name)){const dir=path.join(teamRoot,team),manifest=path.join(dir,"manifest.v2.json"),config=path.join(dir,"config.json"),source=fs.existsSync(manifest)?manifest:config;if(!fs.existsSync(source))continue;try{const raw=JSON.parse(fs.readFileSync(source,"utf8"));if(raw.leader_pane_id===target){process.stdout.write(String(raw.tmux_pane_owner_id||"team:"+team));break;}}catch{}}' "$(dirname "$(dirname "$0")")" "$target"
278
+ exit 0
279
+ fi
247
280
  if [[ "$cmd" == "list-panes" ]]; then
248
281
  printf "%b\\n" "${escapedLines}"
249
282
  exit 0
@@ -251,6 +284,12 @@ fi
251
284
  exit 0
252
285
  `;
253
286
  }
287
+ function fakeTmuxOwnerOptionHandler(ownerId) {
288
+ return `if [[ "$cmd" == "show-option" ]]; then
289
+ echo "${ownerId}"
290
+ exit 0
291
+ fi`;
292
+ }
254
293
  function runNotifyHook(cwd, fakeBinDir, extraEnv = {}) {
255
294
  const sessionPath = join(cwd, '.omx', 'state', 'session.json');
256
295
  if (!existsSync(sessionPath)) {
@@ -308,6 +347,8 @@ describe('notify-hook leader-side authority handoff', () => {
308
347
  name: teamName,
309
348
  tmux_session: 'handoff-sess:0',
310
349
  leader_pane_id: '%91',
350
+ leader_pane_pid: 12091,
351
+ tmux_pane_owner_id: 'team:handoff-alpha',
311
352
  });
312
353
  await writeJson(join(stateDir, 'hud-state.json'), {
313
354
  last_turn_at: new Date(Date.now() - 300_000).toISOString(),
@@ -325,16 +366,51 @@ describe('notify-hook leader-side authority handoff', () => {
325
366
  },
326
367
  ],
327
368
  });
328
- await writeFile(fakeTmuxPath, buildFakeTmux(tmuxLogPath));
369
+ await writeFile(fakeTmuxPath, buildFakeTmux(tmuxLogPath).replace('if [[ "$cmd" == "show-option" ]]; then', 'if [[ "$cmd" == "show-option" ]]; then\n echo "team:foreign"\n exit 0\nfi\nif [[ "$cmd" == "show-option" ]]; then'));
329
370
  await chmod(fakeTmuxPath, 0o755);
330
371
  const result = runNotifyHook(cwd, fakeBinDir, {
331
372
  OMX_SESSION_ID: 'sess-canonical-missing',
332
373
  });
333
374
  assert.equal(result.status, 0, `notify-hook failed: ${result.stderr || result.stdout}`);
334
375
  const tmuxLog = await readFile(tmuxLogPath, 'utf-8').catch(() => '');
335
- assert.match(tmuxLog, /send-keys/, 'current implementation nudges the leader directly in this stale-leader path');
376
+ assert.doesNotMatch(tmuxLog, /send-keys/, 'a same-ID/PID foreign owner must not receive leader input');
336
377
  });
337
378
  });
379
+ it('defers leader nudges without tmux reads when the persisted owner token is missing or malformed', async () => {
380
+ for (const owner of [undefined, 17]) {
381
+ await withTempWorkingDir(async (cwd) => {
382
+ const stateDir = join(cwd, '.omx', 'state');
383
+ const logsDir = join(cwd, '.omx', 'logs');
384
+ const teamName = 'owner-required';
385
+ const teamDir = join(stateDir, 'team', teamName);
386
+ const fakeBinDir = join(cwd, 'fake-bin');
387
+ const tmuxLogPath = join(cwd, 'tmux.log');
388
+ await mkdir(logsDir, { recursive: true });
389
+ await mkdir(fakeBinDir, { recursive: true });
390
+ await mkdir(teamDir, { recursive: true });
391
+ await writeJson(join(stateDir, 'team-state.json'), {
392
+ active: true,
393
+ team_name: teamName,
394
+ current_phase: 'team-exec',
395
+ });
396
+ const config = {
397
+ name: teamName,
398
+ tmux_session: `${teamName}:0`,
399
+ leader_pane_id: '%91',
400
+ leader_pane_pid: 12091,
401
+ };
402
+ config.tmux_pane_owner_id = owner === undefined ? null : owner;
403
+ await writeJson(join(teamDir, 'config.json'), config);
404
+ await writeFile(join(fakeBinDir, 'tmux'), buildFakeTmux(tmuxLogPath));
405
+ await chmod(join(fakeBinDir, 'tmux'), 0o755);
406
+ const result = runNotifyHook(cwd, fakeBinDir, { OMX_SESSION_ID: 'sess-canonical-missing' });
407
+ assert.equal(result.status, 0, `notify-hook failed: ${result.stderr || result.stdout}`);
408
+ assert.equal(existsSync(tmuxLogPath), false, 'missing or malformed persisted owner must not capture or send tmux input');
409
+ const delivery = await readTeamDeliveryLog(cwd);
410
+ assert.ok(delivery.some((entry) => entry.reason === 'leader_pane_owner_missing_no_injection'), 'owner absence must be durably deferred');
411
+ });
412
+ }
413
+ });
338
414
  it('does not drain pending dispatch requests from notify-hook leader context', async () => {
339
415
  await withTempWorkingDir(async (cwd) => {
340
416
  const fakeBinDir = join(cwd, 'fake-bin');
@@ -382,6 +458,7 @@ describe('notify-hook leader-side authority handoff', () => {
382
458
  name: teamName,
383
459
  tmux_session: 'omx-team-beta-active-status',
384
460
  leader_pane_id: '%92',
461
+ leader_pane_pid: 12092,
385
462
  workers: [
386
463
  { name: 'worker-1', index: 1, pane_id: '%10' },
387
464
  ],
@@ -448,6 +525,7 @@ describe('notify-hook team leader nudge', () => {
448
525
  name: teamName,
449
526
  tmux_session: 'deep-interview-suppressed:0',
450
527
  leader_pane_id: '%97',
528
+ leader_pane_pid: 12097,
451
529
  });
452
530
  await writeJson(join(stateDir, 'hud-state.json'), {
453
531
  last_turn_at: new Date(Date.now() - 300_000).toISOString(),
@@ -490,6 +568,7 @@ describe('notify-hook team leader nudge', () => {
490
568
  name: teamName,
491
569
  tmux_session: 'idle-sess:0',
492
570
  leader_pane_id: '%99',
571
+ leader_pane_pid: 12099,
493
572
  workers: [
494
573
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: [] },
495
574
  { name: 'worker-2', index: 2, role: 'executor', assigned_tasks: [] },
@@ -560,6 +639,7 @@ describe('notify-hook team leader nudge', () => {
560
639
  name: teamName,
561
640
  tmux_session: 'idle-shutdown:0',
562
641
  leader_pane_id: '%96',
642
+ leader_pane_pid: 12096,
563
643
  workers: [
564
644
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },
565
645
  { name: 'worker-2', index: 2, pane_id: '%11', role: 'executor' },
@@ -584,7 +664,7 @@ describe('notify-hook team leader nudge', () => {
584
664
  updated_at: nowIso,
585
665
  });
586
666
  }
587
- await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%10 12345', '%11 12346']));
667
+ await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%96\t0\t12096', '%10\t0\t12010', '%11\t0\t12011']));
588
668
  await chmod(fakeTmuxPath, 0o755);
589
669
  const result = runNotifyHook(cwd, fakeBinDir, {
590
670
  OMX_SESSION_ID: 'sess-canonical-missing',
@@ -623,6 +703,7 @@ describe('notify-hook team leader nudge', () => {
623
703
  name: teamName,
624
704
  tmux_session: 'idle-followup-reuse:0',
625
705
  leader_pane_id: '%97',
706
+ leader_pane_pid: 12097,
626
707
  workers: [
627
708
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },
628
709
  { name: 'worker-2', index: 2, pane_id: '%11', role: 'executor' },
@@ -646,7 +727,7 @@ describe('notify-hook team leader nudge', () => {
646
727
  updated_at: nowIso,
647
728
  });
648
729
  }
649
- await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%10 12345', '%11 12346']));
730
+ await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%97\t0\t12097', '%10\t0\t12010', '%11\t0\t12011']));
650
731
  await chmod(fakeTmuxPath, 0o755);
651
732
  const result = runNotifyHook(cwd, fakeBinDir, {
652
733
  OMX_SESSION_ID: 'sess-canonical-inactive',
@@ -685,6 +766,7 @@ describe('notify-hook team leader nudge', () => {
685
766
  name: teamName,
686
767
  tmux_session: 'idle-followup-relaunch:0',
687
768
  leader_pane_id: '%98',
769
+ leader_pane_pid: 12098,
688
770
  workers: [
689
771
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },
690
772
  { name: 'worker-2', index: 2, pane_id: '%11', role: 'executor' },
@@ -708,7 +790,7 @@ describe('notify-hook team leader nudge', () => {
708
790
  updated_at: nowIso,
709
791
  });
710
792
  }
711
- await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%98 12349']));
793
+ await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%98\t0\t12098']));
712
794
  await chmod(fakeTmuxPath, 0o755);
713
795
  const result = runNotifyHook(cwd, fakeBinDir);
714
796
  assert.equal(result.status, 0, `notify-hook failed: ${result.stderr || result.stdout}`);
@@ -746,6 +828,7 @@ describe('notify-hook team leader nudge', () => {
746
828
  name: teamName,
747
829
  tmux_session: 'idle-global:0',
748
830
  leader_pane_id: '%97',
831
+ leader_pane_pid: 12097,
749
832
  workers: [
750
833
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: [] },
751
834
  { name: 'worker-2', index: 2, role: 'executor', assigned_tasks: [] },
@@ -869,6 +952,7 @@ describe('notify-hook team leader nudge', () => {
869
952
  leader: { session_id: 'sess-canonical-safe', worker_id: 'leader-fixed', role: 'coordinator' },
870
953
  tmux_session: 'bad:0',
871
954
  leader_pane_id: '%666',
955
+ leader_pane_pid: 12666,
872
956
  hud_pane_id: null,
873
957
  resize_hook_name: null,
874
958
  resize_hook_target: null,
@@ -936,6 +1020,7 @@ describe('notify-hook team leader nudge', () => {
936
1020
  name: teamName,
937
1021
  tmux_session: 'devsess:0',
938
1022
  leader_pane_id: '%91',
1023
+ leader_pane_pid: 12091,
939
1024
  });
940
1025
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
941
1026
  worker: 'leader-fixed',
@@ -991,6 +1076,7 @@ describe('notify-hook team leader nudge', () => {
991
1076
  name: teamName,
992
1077
  tmux_session: 'leader-nudge-teardown-race:0',
993
1078
  leader_pane_id: '%91',
1079
+ leader_pane_pid: 12091,
994
1080
  workers: [{ name: 'worker-1', index: 1, pane_id: '%11' }],
995
1081
  });
996
1082
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
@@ -1032,7 +1118,11 @@ if [[ "$cmd" == "display-message" ]]; then
1032
1118
  exit 0
1033
1119
  fi
1034
1120
  if [[ "$cmd" == "list-panes" ]]; then
1035
- echo "%11 12345"
1121
+ printf '%%91\t0\t12091\n'
1122
+ exit 0
1123
+ fi
1124
+ if [[ "$cmd" == "show-option" ]]; then
1125
+ echo "team:leader-nudge-teardown-race"
1036
1126
  exit 0
1037
1127
  fi
1038
1128
  if [[ "$cmd" == "capture-pane" ]]; then
@@ -1117,6 +1207,7 @@ exit 0
1117
1207
  name: teamName,
1118
1208
  tmux_session: 'leader-nudge-late-persist-race:0',
1119
1209
  leader_pane_id: '%91',
1210
+ leader_pane_pid: 12091,
1120
1211
  workers: [{ name: 'worker-1', index: 1, pane_id: '%11' }],
1121
1212
  });
1122
1213
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
@@ -1131,7 +1222,7 @@ exit 0
1131
1222
  },
1132
1223
  ],
1133
1224
  });
1134
- await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%11 12345']));
1225
+ await writeFile(fakeTmuxPath, buildFakeTmuxWithListPanes(tmuxLogPath, ['%91\t0\t12091', '%11\t0\t12345']));
1135
1226
  await chmod(fakeTmuxPath, 0o755);
1136
1227
  try {
1137
1228
  setLeaderNudgeTestHooksForTests({
@@ -1296,6 +1387,8 @@ exit 0
1296
1387
  name: teamName,
1297
1388
  tmux_session: 'busy-live-pane:0',
1298
1389
  leader_pane_id: '%93',
1390
+ leader_pane_pid: 12093,
1391
+ tmux_pane_owner_id: `team:${teamName}`,
1299
1392
  });
1300
1393
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
1301
1394
  worker: 'leader-fixed',
@@ -1314,6 +1407,7 @@ set -eu
1314
1407
  echo "$@" >> "${tmuxLogPath}"
1315
1408
  cmd="$1"
1316
1409
  shift || true
1410
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
1317
1411
  if [[ "$cmd" == "display-message" ]]; then
1318
1412
  target=""
1319
1413
  format=""
@@ -1371,7 +1465,7 @@ if [[ "$cmd" == "send-keys" ]]; then
1371
1465
  exit 0
1372
1466
  fi
1373
1467
  if [[ "$cmd" == "list-panes" ]]; then
1374
- echo "%1 12345"
1468
+ printf '%%93\t0\t12093\n'
1375
1469
  exit 0
1376
1470
  fi
1377
1471
  exit 0
@@ -1383,11 +1477,14 @@ exit 0
1383
1477
  const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
1384
1478
  assert.match(tmuxLog, /display-message -p -t %93 #\{pane_in_mode\}/);
1385
1479
  assert.match(tmuxLog, /capture-pane -t %93 -p -S -80/);
1386
- assert.match(tmuxLog, /send-keys -t %93 -l .*Team busy-live-pane:/);
1480
+ assert.match(tmuxLog, /send-keys -t %93 -l \[omx:team-notice-ledger:[a-f0-9]{24}\] Review current Team notices\./);
1387
1481
  assert.match(tmuxLog, /send-keys -t %93 Tab/);
1388
1482
  assert.match(tmuxLog, /send-keys -t %93 C-m/);
1389
1483
  assert.ok(tmuxLog.indexOf('send-keys -t %93 Tab') < tmuxLog.indexOf('send-keys -t %93 C-m'), 'busy leader queue path should press Tab before C-m');
1390
1484
  assert.match(tmuxLog, /\[OMX_TMUX_INJECT\]/, 'should keep the injection marker on busy-pane sends');
1485
+ assert.doesNotMatch(tmuxLog, /send-keys -t %93 -l .*busy-live-pane/, 'busy queued wake must not retain a Team reference in model-visible input');
1486
+ const ledger = JSON.parse(await readFile(join(stateDir, 'team', 'notice-ledger.json'), 'utf-8'));
1487
+ assert.ok(Object.values(ledger.notices ?? {}).some((notice) => notice.teamName === teamName && notice.noticeClass === 'mailbox' && notice.presentedAt === undefined));
1391
1488
  const eventsPath = join(teamDir, 'events', 'events.ndjson');
1392
1489
  assert.ok(existsSync(eventsPath), 'events.ndjson should exist');
1393
1490
  const events = (await readFile(eventsPath, 'utf-8')).trim().split('\n').filter(Boolean).map((line) => JSON.parse(line));
@@ -1420,6 +1517,7 @@ exit 0
1420
1517
  name: teamName,
1421
1518
  tmux_session: 'ack-sess:0',
1422
1519
  leader_pane_id: '%94',
1520
+ leader_pane_pid: 12094,
1423
1521
  workers: [
1424
1522
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: ['1'] },
1425
1523
  ],
@@ -1480,6 +1578,7 @@ exit 0
1480
1578
  name: teamName,
1481
1579
  tmux_session: 'ack-started:0',
1482
1580
  leader_pane_id: '%95',
1581
+ leader_pane_pid: 12095,
1483
1582
  workers: [
1484
1583
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: ['1'] },
1485
1584
  ],
@@ -1550,6 +1649,7 @@ exit 0
1550
1649
  name: teamName,
1551
1650
  tmux_session: 'fresh-mailbox-bounded:0',
1552
1651
  leader_pane_id: '%97',
1652
+ leader_pane_pid: 12097,
1553
1653
  workers: [
1554
1654
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: ['1'] },
1555
1655
  ],
@@ -1604,6 +1704,7 @@ exit 0
1604
1704
  name: teamName,
1605
1705
  tmux_session: 'shell-guard:0',
1606
1706
  leader_pane_id: '%71',
1707
+ leader_pane_pid: 12071,
1607
1708
  });
1608
1709
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
1609
1710
  worker: 'leader-fixed',
@@ -1622,6 +1723,7 @@ set -eu
1622
1723
  echo "$@" >> "${tmuxLogPath}"
1623
1724
  cmd="$1"
1624
1725
  shift || true
1726
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
1625
1727
  if [[ "$cmd" == "display-message" ]]; then
1626
1728
  target=""
1627
1729
  format=""
@@ -1666,7 +1768,7 @@ if [[ "$cmd" == "send-keys" ]]; then
1666
1768
  exit 0
1667
1769
  fi
1668
1770
  if [[ "$cmd" == "list-panes" ]]; then
1669
- echo "%1 12345"
1771
+ printf '%%71\t0\t12071\n'
1670
1772
  exit 0
1671
1773
  fi
1672
1774
  exit 0
@@ -1708,6 +1810,7 @@ exit 0
1708
1810
  name: teamName,
1709
1811
  tmux_session: 'busy-leader-queue:0',
1710
1812
  leader_pane_id: '%73',
1813
+ leader_pane_pid: 12073,
1711
1814
  });
1712
1815
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
1713
1816
  worker: 'leader-fixed',
@@ -1726,6 +1829,7 @@ set -eu
1726
1829
  echo "$@" >> "${tmuxLogPath}"
1727
1830
  cmd="$1"
1728
1831
  shift || true
1832
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
1729
1833
  if [[ "$cmd" == "display-message" ]]; then
1730
1834
  target=""
1731
1835
  format=""
@@ -1779,7 +1883,7 @@ if [[ "$cmd" == "send-keys" ]]; then
1779
1883
  exit 0
1780
1884
  fi
1781
1885
  if [[ "$cmd" == "list-panes" ]]; then
1782
- echo "%1 12345"
1886
+ printf '%%73\t0\t12073\n'
1783
1887
  exit 0
1784
1888
  fi
1785
1889
  exit 0
@@ -1802,7 +1906,7 @@ exit 0
1802
1906
  }
1803
1907
  });
1804
1908
  });
1805
- it('injects leader nudge when capture-pane fails but the leader pane is a live codex pane', async () => {
1909
+ it('defers leader nudge when capture-pane cannot verify readiness despite authoritative live-pane proof', async () => {
1806
1910
  await withTempWorkingDir(async (cwd) => {
1807
1911
  const omxDir = join(cwd, '.omx');
1808
1912
  const stateDir = join(omxDir, 'state');
@@ -1825,6 +1929,7 @@ exit 0
1825
1929
  name: teamName,
1826
1930
  tmux_session: 'capture-failure-live-leader:0',
1827
1931
  leader_pane_id: '%74',
1932
+ leader_pane_pid: 12074,
1828
1933
  });
1829
1934
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
1830
1935
  worker: 'leader-fixed',
@@ -1843,6 +1948,7 @@ set -eu
1843
1948
  echo "$@" >> "${tmuxLogPath}"
1844
1949
  cmd="$1"
1845
1950
  shift || true
1951
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
1846
1952
  if [[ "$cmd" == "display-message" ]]; then
1847
1953
  target=""
1848
1954
  format=""
@@ -1896,7 +2002,7 @@ if [[ "$cmd" == "send-keys" ]]; then
1896
2002
  exit 0
1897
2003
  fi
1898
2004
  if [[ "$cmd" == "list-panes" ]]; then
1899
- echo "%1 12345"
2005
+ printf '%%74\t0\t12074\n'
1900
2006
  exit 0
1901
2007
  fi
1902
2008
  exit 0
@@ -1906,14 +2012,23 @@ exit 0
1906
2012
  const result = runNotifyHook(cwd, fakeBinDir);
1907
2013
  assert.equal(result.status, 0, `notify-hook failed: ${result.stderr || result.stdout}`);
1908
2014
  const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
2015
+ assert.match(tmuxLog, /list-panes -a -F #\{pane_id\}\t#\{pane_dead\}\t#\{pane_pid\}/, 'should retain authoritative exact-pane live proof');
2016
+ assert.match(tmuxLog, /display-message -p -t %74 #\{pane_current_command\}/, 'should query the exact pane command before capture readiness');
1909
2017
  assert.match(tmuxLog, /capture-pane -t %74 -p -S -80/);
1910
- assert.match(tmuxLog, /send-keys -t %74/, 'capture failures should not suppress leader injection into a live codex pane');
2018
+ assert.doesNotMatch(tmuxLog, /(?:set-buffer|paste-buffer|send-keys)/, 'capture readiness failure must suppress all input-effect tmux commands');
1911
2019
  const eventsPath = join(teamDir, 'events', 'events.ndjson');
1912
- if (existsSync(eventsPath)) {
1913
- const events = (await readFile(eventsPath, 'utf-8')).trim().split('\n').filter(Boolean).map((line) => JSON.parse(line));
1914
- const deferred = events.find((entry) => entry.type === 'leader_notification_deferred');
1915
- assert.equal(deferred, undefined, 'capture failure alone should not defer a live codex leader pane');
1916
- }
2020
+ const events = (await readFile(eventsPath, 'utf-8')).trim().split('\n').filter(Boolean).map((line) => JSON.parse(line));
2021
+ const deferred = events.find((entry) => entry.type === 'leader_notification_deferred' && entry.reason === 'pane_readiness_unverified');
2022
+ assert.ok(deferred, 'capture readiness failure should emit a fail-closed deferred event');
2023
+ assert.equal(deferred.pane_current_command, 'codex');
2024
+ assert.equal(deferred.tmux_injection_attempted, false);
2025
+ const deliveryLog = await readTeamDeliveryLog(cwd);
2026
+ assert.ok(deliveryLog.some((entry) => entry.event === 'nudge_triggered'
2027
+ && entry.team === teamName
2028
+ && entry.to_worker === 'leader-fixed'
2029
+ && entry.transport === 'none'
2030
+ && entry.result === 'deferred'
2031
+ && entry.reason === 'pane_readiness_unverified'), 'capture readiness failure should record a fail-closed delivery receipt');
1917
2032
  });
1918
2033
  });
1919
2034
  it('suppresses duplicate visible leader injection when the pane already shows the same classified state', async () => {
@@ -1939,6 +2054,7 @@ exit 0
1939
2054
  name: teamName,
1940
2055
  tmux_session: 'same-classified-state:0',
1941
2056
  leader_pane_id: '%75',
2057
+ leader_pane_pid: 12075,
1942
2058
  });
1943
2059
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
1944
2060
  worker: 'leader-fixed',
@@ -1957,6 +2073,7 @@ set -eu
1957
2073
  echo "$@" >> "${tmuxLogPath}"
1958
2074
  cmd="$1"
1959
2075
  shift || true
2076
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
1960
2077
  if [[ "$cmd" == "display-message" ]]; then
1961
2078
  target=""
1962
2079
  format=""
@@ -2012,7 +2129,7 @@ if [[ "$cmd" == "send-keys" ]]; then
2012
2129
  exit 0
2013
2130
  fi
2014
2131
  if [[ "$cmd" == "list-panes" ]]; then
2015
- echo "%1 12345"
2132
+ printf '%%75\t0\t12075\n'
2016
2133
  exit 0
2017
2134
  fi
2018
2135
  exit 0
@@ -2061,6 +2178,7 @@ exit 0
2061
2178
  name: teamName,
2062
2179
  tmux_session: 'scroll-guard:0',
2063
2180
  leader_pane_id: '%72',
2181
+ leader_pane_pid: 12072,
2064
2182
  });
2065
2183
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
2066
2184
  worker: 'leader-fixed',
@@ -2079,6 +2197,7 @@ set -eu
2079
2197
  echo "$@" >> "${tmuxLogPath}"
2080
2198
  cmd="$1"
2081
2199
  shift || true
2200
+ ${fakeTmuxOwnerOptionHandler(`team:${teamName}`)}
2082
2201
  if [[ "$cmd" == "display-message" ]]; then
2083
2202
  target=""
2084
2203
  format=""
@@ -2128,7 +2247,7 @@ if [[ "$cmd" == "send-keys" ]]; then
2128
2247
  exit 0
2129
2248
  fi
2130
2249
  if [[ "$cmd" == "list-panes" ]]; then
2131
- echo "%1 12345"
2250
+ printf '%%72\t0\t12072\n'
2132
2251
  exit 0
2133
2252
  fi
2134
2253
  exit 0
@@ -2210,6 +2329,7 @@ exit 0
2210
2329
  name: teamName,
2211
2330
  tmux_session: 'completed-reopen:0',
2212
2331
  leader_pane_id: '%91',
2332
+ leader_pane_pid: 12091,
2213
2333
  workers: [
2214
2334
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },
2215
2335
  { name: 'worker-2', index: 2, pane_id: '%11', role: 'executor' },
@@ -2275,6 +2395,7 @@ exit 0
2275
2395
  },
2276
2396
  tmux_session: 'other-session-team:0',
2277
2397
  leader_pane_id: '%94',
2398
+ leader_pane_pid: 12094,
2278
2399
  worker_count: 2,
2279
2400
  workers: [
2280
2401
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },
@@ -2342,6 +2463,7 @@ exit 0
2342
2463
  name: teamName,
2343
2464
  tmux_session: 'omx-team-beta',
2344
2465
  leader_pane_id: '%92',
2466
+ leader_pane_pid: 12092,
2345
2467
  });
2346
2468
  // Leader HUD state is stale (last turn 5 minutes ago)
2347
2469
  await writeJson(join(stateDir, 'hud-state.json'), {
@@ -2388,6 +2510,7 @@ exit 0
2388
2510
  name: teamName,
2389
2511
  tmux_session: 'omx-team-stalled-progress',
2390
2512
  leader_pane_id: '%90',
2513
+ leader_pane_pid: 12090,
2391
2514
  workers: [
2392
2515
  { name: 'worker-1', index: 1, pane_id: '%10' },
2393
2516
  { name: 'worker-2', index: 2, pane_id: '%11' },
@@ -2505,6 +2628,7 @@ exit 0
2505
2628
  name: teamName,
2506
2629
  tmux_session: 'omx-team-stalled-before-stale',
2507
2630
  leader_pane_id: '%89',
2631
+ leader_pane_pid: 12089,
2508
2632
  workers: [
2509
2633
  { name: 'worker-1', index: 1, pane_id: '%10' },
2510
2634
  { name: 'worker-2', index: 2, pane_id: '%11' },
@@ -2623,6 +2747,7 @@ exit 0
2623
2747
  name: teamName,
2624
2748
  tmux_session: 'omx-team-worker-turn-stall-threshold',
2625
2749
  leader_pane_id: '%86',
2750
+ leader_pane_pid: 12086,
2626
2751
  workers: [
2627
2752
  { name: 'worker-1', index: 1, pane_id: '%10' },
2628
2753
  ],
@@ -2717,6 +2842,7 @@ exit 0
2717
2842
  name: teamName,
2718
2843
  tmux_session: 'omx-team-active-turns-no-stall',
2719
2844
  leader_pane_id: '%87',
2845
+ leader_pane_pid: 12087,
2720
2846
  workers: [
2721
2847
  { name: 'worker-1', index: 1, pane_id: '%10' },
2722
2848
  { name: 'worker-2', index: 2, pane_id: '%11' },
@@ -2828,6 +2954,7 @@ exit 0
2828
2954
  name: teamName,
2829
2955
  tmux_session: 'omx-team-stalled-before-stale-bounded',
2830
2956
  leader_pane_id: '%88',
2957
+ leader_pane_pid: 12088,
2831
2958
  workers: [
2832
2959
  { name: 'worker-1', index: 1, pane_id: '%10' },
2833
2960
  { name: 'worker-2', index: 2, pane_id: '%11' },
@@ -2934,6 +3061,7 @@ exit 0
2934
3061
  name: teamName,
2935
3062
  tmux_session: 'omx-team-stale-no-workers',
2936
3063
  leader_pane_id: '%92',
3064
+ leader_pane_pid: 12092,
2937
3065
  hud_pane_id: '%93',
2938
3066
  workers: [
2939
3067
  { name: 'worker-1', index: 1, pane_id: '%10' },
@@ -2974,6 +3102,7 @@ exit 0
2974
3102
  name: teamName,
2975
3103
  tmux_session: 'omx-team-fresh',
2976
3104
  leader_pane_id: '%95',
3105
+ leader_pane_pid: 12095,
2977
3106
  });
2978
3107
  await writeJson(join(stateDir, 'hud-state.json'), {
2979
3108
  last_turn_at: new Date().toISOString(),
@@ -3012,6 +3141,7 @@ exit 0
3012
3141
  name: teamName,
3013
3142
  tmux_session: 'omx-team-stale-cadence',
3014
3143
  leader_pane_id: '%96',
3144
+ leader_pane_pid: 12096,
3015
3145
  });
3016
3146
  const staleHud = {
3017
3147
  last_turn_at: new Date(now - 300_000).toISOString(),
@@ -3077,6 +3207,7 @@ exit 0
3077
3207
  name: teamName,
3078
3208
  tmux_session: 'omx-team-fresh-detached-progress',
3079
3209
  leader_pane_id: '%99',
3210
+ leader_pane_pid: 12099,
3080
3211
  workers: [
3081
3212
  { name: 'worker-1', index: 1, pane_id: '%10', worktree_path: workerWorktree },
3082
3213
  ],
@@ -3170,6 +3301,7 @@ exit 0
3170
3301
  name: teamName,
3171
3302
  tmux_session: 'omx-team-gamma',
3172
3303
  leader_pane_id: '%93',
3304
+ leader_pane_pid: 12093,
3173
3305
  });
3174
3306
  await writeJson(join(mailboxDir, 'leader-fixed.json'), {
3175
3307
  worker: 'leader-fixed',
@@ -3301,6 +3433,7 @@ exit 0
3301
3433
  name: teamName,
3302
3434
  tmux_session: 'idle-bounded:0',
3303
3435
  leader_pane_id: '%98',
3436
+ leader_pane_pid: 12098,
3304
3437
  workers: [
3305
3438
  { name: 'worker-1', index: 1, role: 'executor', assigned_tasks: [] },
3306
3439
  { name: 'worker-2', index: 2, role: 'executor', assigned_tasks: [] },
@@ -3378,6 +3511,7 @@ exit 0
3378
3511
  name: teamName,
3379
3512
  tmux_session: 'omx-team-delta',
3380
3513
  leader_pane_id: '%94',
3514
+ leader_pane_pid: 12094,
3381
3515
  });
3382
3516
  // Leader stale
3383
3517
  await writeJson(join(stateDir, 'hud-state.json'), {
@@ -3454,6 +3588,7 @@ exit 0
3454
3588
  },
3455
3589
  tmux_session: 'valid-team:0',
3456
3590
  leader_pane_id: '%94',
3591
+ leader_pane_pid: 12094,
3457
3592
  worker_count: 1,
3458
3593
  workers: [
3459
3594
  { name: 'worker-1', index: 1, pane_id: '%10', role: 'executor' },