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
@@ -11,8 +11,7 @@ import { asNumber, safeString, isTerminalPhase } from './utils.js';
11
11
  import { readJsonIfExists, getScopedStateDirsForCurrentSession } from './state-io.js';
12
12
  import { runProcess } from './process-runner.js';
13
13
  import { logTmuxHookEvent } from './log.js';
14
- import { evaluatePaneInjectionReadiness, queuePaneInput, sendPaneInput } from './team-tmux-guard.js';
15
- import { resolvePaneTarget } from './tmux-injection.js';
14
+ import { evaluatePaneInjectionReadiness, normalizeExactPaneId, sendPaneInput } from './team-tmux-guard.js';
16
15
  import { listNotifyCanonicalActiveTeams } from './active-team.js';
17
16
  import {
18
17
  classifyLeaderActionState,
@@ -28,6 +27,7 @@ import { isDeepInterviewStateActive } from './auto-nudge.js';
28
27
  const LEADER_PANE_MISSING_NO_INJECTION_REASON = 'leader_pane_missing_no_injection';
29
28
  const LEADER_PANE_SHELL_NO_INJECTION_REASON = 'leader_pane_shell_no_injection';
30
29
  const TEAM_SHUTDOWN_NO_INJECTION_REASON = 'team_state_gone_or_shutdown';
30
+ const LEADER_PANE_OWNER_MISSING_NO_INJECTION_REASON = 'leader_pane_owner_missing_no_injection';
31
31
  const LEADER_PANE_SAME_CLASSIFIED_STATE_SUPPRESSED_REASON = 'pane_already_shows_same_classified_state';
32
32
  const LEADER_NOTIFICATION_DEFERRED_TYPE = 'leader_notification_deferred';
33
33
  const ACK_WITHOUT_START_EVIDENCE_REASON = 'ack_without_start_evidence';
@@ -37,6 +37,10 @@ const ACK_LIKE_PATTERNS = [
37
37
  /^(?:on it|will do|i(?:'|')ll do it|working on it)[.!]*$/i,
38
38
  ];
39
39
 
40
+ function positivePanePid(value) {
41
+ return Number.isInteger(value) && Number(value) > 0 ? Number(value) : undefined;
42
+ }
43
+
40
44
  let atomicJsonWriteCounter = 0;
41
45
 
42
46
  // Synchronous test-only callbacks let regression tests emulate filesystem races
@@ -729,6 +733,9 @@ export async function maybeNudgeTeamLeader({
729
733
  let leaderPaneId = '';
730
734
  let ownerSessionId = '';
731
735
  let workers = [];
736
+ let hudPaneId = '';
737
+ let leaderPanePid;
738
+ let tmuxPaneOwnerId = '';
732
739
  try {
733
740
  const manifestPath = join(omxDir, 'state', 'team', teamName, 'manifest.v2.json');
734
741
  const configPath = join(omxDir, 'state', 'team', teamName, 'config.json');
@@ -737,6 +744,9 @@ export async function maybeNudgeTeamLeader({
737
744
  const raw = JSON.parse(await readFile(srcPath, 'utf-8'));
738
745
  tmuxSession = safeString(raw && raw.tmux_session ? raw.tmux_session : '').trim();
739
746
  leaderPaneId = safeString(raw && raw.leader_pane_id ? raw.leader_pane_id : '').trim();
747
+ hudPaneId = safeString(raw && raw.hud_pane_id ? raw.hud_pane_id : '').trim();
748
+ leaderPanePid = positivePanePid(raw && raw.leader_pane_pid);
749
+ tmuxPaneOwnerId = typeof raw?.tmux_pane_owner_id === 'string' ? raw.tmux_pane_owner_id.trim() : '';
740
750
  ownerSessionId = safeString(raw && raw.leader && raw.leader.session_id ? raw.leader.session_id : '').trim();
741
751
  if (Array.isArray(raw && raw.workers)) workers = raw.workers;
742
752
  }
@@ -761,23 +771,20 @@ export async function maybeNudgeTeamLeader({
761
771
  const workerPaneIds = Array.isArray(workers)
762
772
  ? workers.map((w) => safeString(w && w.pane_id ? w.pane_id : '')).filter(Boolean)
763
773
  : [];
764
- const canonicalLeaderPaneId = safeString(leaderPaneId).trim();
774
+ const normalizedLeaderPaneId = normalizeExactPaneId(leaderPaneId);
775
+ const canonicalLeaderPaneId = normalizedLeaderPaneId && normalizedLeaderPaneId !== normalizeExactPaneId(hudPaneId)
776
+ ? normalizedLeaderPaneId
777
+ : '';
765
778
  if (!tmuxSession && !canonicalLeaderPaneId) continue;
766
- let tmuxTarget = canonicalLeaderPaneId;
767
- if (canonicalLeaderPaneId) {
768
- const resolvedLeaderTarget = await resolvePaneTarget(
769
- { type: 'pane', value: canonicalLeaderPaneId },
770
- '',
771
- canonicalLeaderPaneId,
772
- '',
773
- {},
774
- ).catch(() => null);
775
- if (resolvedLeaderTarget?.paneTarget) {
776
- tmuxTarget = safeString(resolvedLeaderTarget.paneTarget).trim();
777
- } else if (resolvedLeaderTarget && ['target_is_hud_pane', 'pane_cwd_mismatch'].includes(safeString(resolvedLeaderTarget.reason).trim())) {
778
- tmuxTarget = '';
779
- }
779
+ if (!tmuxPaneOwnerId) {
780
+ await recordSuppressedLeaderNudge({ logsDir, source, teamName, reason: LEADER_PANE_OWNER_MISSING_NO_INJECTION_REASON });
781
+ continue;
780
782
  }
783
+ if (canonicalLeaderPaneId && !leaderPanePid) {
784
+ await recordSuppressedLeaderNudge({ logsDir, source, teamName, reason: 'leader_pane_pid_missing' });
785
+ continue;
786
+ }
787
+ const tmuxTarget = canonicalLeaderPaneId;
781
788
  const paneStatus = tmuxSession
782
789
  ? await checkWorkerPanesAlive(tmuxSession, workerPaneIds)
783
790
  : { alive: false, paneCount: 0 };
@@ -1087,6 +1094,10 @@ export async function maybeNudgeTeamLeader({
1087
1094
  requireRunningAgent: true,
1088
1095
  requireReady: false,
1089
1096
  requireIdle: false,
1097
+ exactPaneId: canonicalLeaderPaneId,
1098
+ expectedPanePid: leaderPanePid,
1099
+ expectedPaneOwnerId: tmuxPaneOwnerId,
1100
+ expectedHudPaneId: hudPaneId,
1090
1101
  });
1091
1102
  if (!paneGuard.ok) {
1092
1103
  const deferredReason = paneGuard.reason === 'pane_running_shell'
@@ -1188,9 +1199,16 @@ export async function maybeNudgeTeamLeader({
1188
1199
  const leaderHasActiveTask = paneHasActiveTask(paneGuard.paneCapture);
1189
1200
  let deliveryMode = 'sent';
1190
1201
  if (leaderHasActiveTask) {
1191
- const sendResult = await queuePaneInput({
1202
+ const sendResult = await sendPaneInput({
1192
1203
  paneTarget: tmuxTarget,
1193
1204
  prompt: markedText,
1205
+ submitKeyPresses: 1,
1206
+ submitDelayMs: 80,
1207
+ queueFirstSubmit: true,
1208
+ exactPaneId: canonicalLeaderPaneId,
1209
+ expectedPanePid: leaderPanePid,
1210
+ expectedPaneOwnerId: tmuxPaneOwnerId,
1211
+ expectedHudPaneId: hudPaneId,
1194
1212
  });
1195
1213
  if (!sendResult.ok) {
1196
1214
  throw new Error(sendResult.error || sendResult.reason);
@@ -1202,6 +1220,10 @@ export async function maybeNudgeTeamLeader({
1202
1220
  prompt: markedText,
1203
1221
  submitKeyPresses: 2,
1204
1222
  submitDelayMs: 100,
1223
+ exactPaneId: canonicalLeaderPaneId,
1224
+ expectedPanePid: leaderPanePid,
1225
+ expectedPaneOwnerId: tmuxPaneOwnerId,
1226
+ expectedHudPaneId: hudPaneId,
1205
1227
  });
1206
1228
  if (!sendResult.ok) {
1207
1229
  throw new Error(sendResult.error || sendResult.reason);
@@ -9,6 +9,158 @@ import {
9
9
  paneHasActiveTask,
10
10
  paneLooksReady,
11
11
  } from '../tmux-hook-engine.js';
12
+ import { readExactPaneProof } from '../../team/exact-pane.js';
13
+
14
+ export const EXACT_PANE_UNAVAILABLE_REASON = 'exact_pane_unavailable';
15
+ const EXACT_PANE_ID_RE = /^%\d+$/;
16
+
17
+ function explicitPaneIdentity(value: any): { provided: boolean; paneId: string } {
18
+ const paneId = safeString(value).trim();
19
+ return { provided: paneId !== '', paneId: EXACT_PANE_ID_RE.test(paneId) ? paneId : '' };
20
+ }
21
+
22
+ export function normalizeExactPaneId(value: any): string {
23
+ return explicitPaneIdentity(value).paneId;
24
+ }
25
+
26
+ function exactPaneBindingFailure(target: string, exactPaneId: any): any | null {
27
+ const identity = explicitPaneIdentity(exactPaneId);
28
+ const targetIsExactPane = EXACT_PANE_ID_RE.test(target);
29
+ if (targetIsExactPane && !identity.provided) {
30
+ return {
31
+ ok: false,
32
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
33
+ paneId: target,
34
+ proof: { status: 'unavailable', paneId: target, reason: 'missing_exact_pane_id' },
35
+ };
36
+ }
37
+ if (identity.provided && !identity.paneId) {
38
+ return {
39
+ ok: false,
40
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
41
+ paneId: '',
42
+ proof: { status: 'unavailable', paneId: safeString(exactPaneId).trim(), reason: 'invalid_pane_id' },
43
+ };
44
+ }
45
+ if (identity.paneId && identity.paneId !== target) {
46
+ return {
47
+ ok: false,
48
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
49
+ paneId: identity.paneId,
50
+ proof: { status: 'unavailable', paneId: identity.paneId, reason: 'pane_target_mismatch' },
51
+ };
52
+ }
53
+ return null;
54
+ }
55
+
56
+ export async function verifyExactPaneLive(exactPaneId: any, expectedPanePid?: number): Promise<any> {
57
+ const identity = explicitPaneIdentity(exactPaneId);
58
+ if (!identity.provided) return { ok: true, paneId: '', proof: null };
59
+ if (!identity.paneId) {
60
+ return {
61
+ ok: false,
62
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
63
+ paneId: '',
64
+ proof: {
65
+ status: 'unavailable',
66
+ paneId: safeString(exactPaneId).trim(),
67
+ reason: 'invalid_pane_id',
68
+ },
69
+ };
70
+ }
71
+
72
+ try {
73
+ const proof = await readExactPaneProof(identity.paneId);
74
+ if (proof.status === 'live' && proof.paneId === identity.paneId) {
75
+ if (typeof expectedPanePid === 'number' && proof.pid !== expectedPanePid) {
76
+ return {
77
+ ok: false,
78
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
79
+ paneId: identity.paneId,
80
+ proof: { ...proof, status: 'unavailable', reason: 'pane_pid_changed', expectedPid: expectedPanePid },
81
+ };
82
+ }
83
+ return { ok: true, paneId: identity.paneId, proof };
84
+ }
85
+ return { ok: false, reason: EXACT_PANE_UNAVAILABLE_REASON, paneId: identity.paneId, proof };
86
+ } catch (error) {
87
+ return {
88
+ ok: false,
89
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
90
+ paneId: identity.paneId,
91
+ proof: {
92
+ status: 'unavailable',
93
+ paneId: identity.paneId,
94
+ reason: 'query_failed',
95
+ detail: error instanceof Error ? error.message : safeString(error),
96
+ },
97
+ };
98
+ }
99
+ }
100
+
101
+ export async function verifyExactPaneOwnerLive(exactPaneId: any, expectedPanePid: number | undefined, expectedPaneOwnerId: any): Promise<any> {
102
+ const expectedOwner = safeString(expectedPaneOwnerId).trim();
103
+ if (!expectedOwner || !Number.isInteger(expectedPanePid) || Number(expectedPanePid) <= 0) {
104
+ return {
105
+ ok: false,
106
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
107
+ paneId: normalizeExactPaneId(exactPaneId),
108
+ proof: {
109
+ status: 'unavailable',
110
+ paneId: normalizeExactPaneId(exactPaneId),
111
+ reason: !expectedOwner ? 'missing_expected_pane_owner' : 'missing_expected_pane_pid',
112
+ },
113
+ };
114
+ }
115
+ const beforeOwner = await verifyExactPaneLive(exactPaneId, expectedPanePid);
116
+ if (!beforeOwner.ok) return beforeOwner;
117
+ try {
118
+ const ownerResult = await runProcess(
119
+ 'tmux',
120
+ ['show-option', '-qv', '-p', '-t', beforeOwner.paneId, '@omx_team_pane_owner_id'],
121
+ 3000,
122
+ );
123
+ const actualOwner = safeString(ownerResult.stdout).trim();
124
+ if (actualOwner !== expectedOwner) {
125
+ return {
126
+ ok: false,
127
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
128
+ paneId: beforeOwner.paneId,
129
+ proof: {
130
+ status: 'unavailable',
131
+ paneId: beforeOwner.paneId,
132
+ reason: actualOwner ? 'pane_owner_changed' : 'pane_owner_unavailable',
133
+ expectedOwner,
134
+ actualOwner: actualOwner || undefined,
135
+ },
136
+ };
137
+ }
138
+ } catch (error) {
139
+ return {
140
+ ok: false,
141
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
142
+ paneId: beforeOwner.paneId,
143
+ proof: {
144
+ status: 'unavailable',
145
+ paneId: beforeOwner.paneId,
146
+ reason: 'pane_owner_unavailable',
147
+ detail: error instanceof Error ? error.message : safeString(error),
148
+ },
149
+ };
150
+ }
151
+ return verifyExactPaneLive(exactPaneId, expectedPanePid);
152
+ }
153
+
154
+ function exactPaneUnavailableResult(target: string, paneProof: any, extra: any = {}): any {
155
+ return {
156
+ ok: false,
157
+ sent: false,
158
+ reason: EXACT_PANE_UNAVAILABLE_REASON,
159
+ paneTarget: target,
160
+ exactPaneProof: paneProof.proof || null,
161
+ ...extra,
162
+ };
163
+ }
12
164
 
13
165
  export const PANE_READINESS_UNVERIFIED_REASON = 'pane_readiness_unverified';
14
166
  let nextTmuxBufferId = 0;
@@ -46,6 +198,10 @@ export async function evaluatePaneInjectionReadiness(paneTarget: any, {
46
198
  requireIdle = true,
47
199
  requireObservableState = false,
48
200
  requireCaptureEvidence = undefined,
201
+ exactPaneId = undefined,
202
+ expectedPanePid = undefined,
203
+ expectedPaneOwnerId = undefined,
204
+ expectedHudPaneId = undefined,
49
205
  } = {}): Promise<any> {
50
206
  const normalizedRequireObservableState = typeof requireCaptureEvidence === 'boolean' ? requireCaptureEvidence : requireObservableState;
51
207
  const target = safeString(paneTarget).trim();
@@ -59,24 +215,26 @@ export async function evaluatePaneInjectionReadiness(paneTarget: any, {
59
215
  paneCapture: '',
60
216
  };
61
217
  }
62
- if (skipIfScrolling) {
63
- try {
64
- const modeResult = await runProcess('tmux', buildPaneInModeArgv(target), 3000);
65
- if (safeString(modeResult.stdout).trim() === '1') {
66
- return {
67
- ok: false,
68
- sent: false,
69
- reason: 'scroll_active',
70
- paneTarget: target,
71
- paneCurrentCommand: '',
72
- paneCapture: '',
73
- };
74
- }
75
- } catch {
76
- // Non-fatal: continue with remaining preflight checks.
77
- }
78
- }
218
+ const bindingFailure = exactPaneBindingFailure(target, exactPaneId);
219
+ if (bindingFailure) return exactPaneUnavailableResult(target, bindingFailure);
79
220
 
221
+ const exactPaneIdentity = safeString(exactPaneId).trim();
222
+ const exactPaneIdentityProvided = explicitPaneIdentity(exactPaneId).provided;
223
+ const expectedOwner = safeString(expectedPaneOwnerId).trim();
224
+ const expectedHudPane = normalizeExactPaneId(expectedHudPaneId);
225
+ const requiresTeamReadAuthority = exactPaneIdentityProvided && (
226
+ expectedPanePid !== undefined || expectedOwner || expectedHudPane
227
+ );
228
+ let exactPaneProof: any = null;
229
+ let pinnedPanePid = typeof expectedPanePid === 'number' ? expectedPanePid : undefined;
230
+ const verifyExplicitPane = async () => {
231
+ const paneProof = requiresTeamReadAuthority
232
+ ? await verifyExactPaneOwnerLive(exactPaneIdentity, pinnedPanePid, expectedOwner)
233
+ : await verifyExactPaneLive(exactPaneIdentity, pinnedPanePid);
234
+ exactPaneProof = paneProof.proof || null;
235
+ if (paneProof.ok && typeof paneProof.proof?.pid === 'number') pinnedPanePid ??= paneProof.proof.pid;
236
+ return paneProof;
237
+ };
80
238
  let paneCurrentCommand = '';
81
239
  let paneRunningShell = false;
82
240
  const buildReadinessResult = (ok: boolean, reason: string, paneCapture: string, readinessEvidence: string) => ({
@@ -87,18 +245,91 @@ export async function evaluatePaneInjectionReadiness(paneTarget: any, {
87
245
  paneCurrentCommand,
88
246
  paneCapture,
89
247
  readinessEvidence,
248
+ exactPaneProof,
90
249
  });
91
- try {
92
- const result = await runProcess('tmux', buildPaneCurrentCommandArgv(target), 3000);
93
- paneCurrentCommand = safeString(result.stdout).trim();
94
- paneRunningShell = requireRunningAgent && isPaneRunningShell(paneCurrentCommand);
95
- } catch {
96
- paneCurrentCommand = '';
250
+ const exactPaneFailure = (paneProof: any, paneCapture = '') => exactPaneUnavailableResult(target, paneProof, {
251
+ paneCurrentCommand,
252
+ paneCapture,
253
+ readinessEvidence: 'exact_pane_unavailable',
254
+ });
255
+ if (expectedHudPane && expectedHudPane === exactPaneIdentity) {
256
+ return buildReadinessResult(false, 'hud_pane_target', '', 'hud_pane_rejected');
97
257
  }
98
258
 
99
- try {
100
- const capture = await runProcess('tmux', buildCapturePaneArgv(target, captureLines), 3000);
101
- const paneCapture = safeString(capture.stdout);
259
+ const readExplicitPane = async (argv: string[]) => {
260
+ const beforeRead = await verifyExplicitPane();
261
+ if (!beforeRead.ok) return { ok: false, paneProof: beforeRead, result: null };
262
+ try {
263
+ const result = await runProcess('tmux', argv, 3000);
264
+ if (requiresTeamReadAuthority) {
265
+ const afterRead = await verifyExplicitPane();
266
+ if (!afterRead.ok) return { ok: false, paneProof: afterRead, result: null };
267
+ }
268
+ return { ok: true, paneProof: beforeRead, result };
269
+ } catch (error) {
270
+ return { ok: false, paneProof: null, result: null, error };
271
+ }
272
+ };
273
+
274
+ if (skipIfScrolling) {
275
+ const read = await readExplicitPane(buildPaneInModeArgv(target));
276
+ if (!read.ok) {
277
+ if (read.paneProof) return exactPaneFailure(read.paneProof);
278
+ // Non-fatal: continue with remaining preflight checks.
279
+ } else if (safeString(read.result?.stdout).trim() === '1') {
280
+ return {
281
+ ok: false,
282
+ sent: false,
283
+ reason: 'scroll_active',
284
+ paneTarget: target,
285
+ paneCurrentCommand: '',
286
+ paneCapture: '',
287
+ exactPaneProof,
288
+ };
289
+ }
290
+ }
291
+
292
+ if (exactPaneIdentityProvided) {
293
+ const read = await readExplicitPane(['display-message', '-p', '-t', target, '#{pane_start_command}']);
294
+ if (!read.ok) {
295
+ if (read.paneProof) return exactPaneFailure(read.paneProof);
296
+ return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, '', 'start_command_failed');
297
+ }
298
+ if (/\bomx\b.*\bhud\b.*--watch/i.test(safeString(read.result?.stdout))) {
299
+ return buildReadinessResult(false, 'hud_pane_target', '', 'hud_pane_rejected');
300
+ }
301
+ }
302
+
303
+ {
304
+ const read = await readExplicitPane(buildPaneCurrentCommandArgv(target));
305
+ if (!read.ok) {
306
+ if (read.paneProof) return exactPaneFailure(read.paneProof);
307
+ if (exactPaneIdentityProvided) {
308
+ return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, '', 'command_failed');
309
+ }
310
+ paneCurrentCommand = '';
311
+ } else {
312
+ paneCurrentCommand = safeString(read.result?.stdout).trim();
313
+ paneRunningShell = requireRunningAgent && isPaneRunningShell(paneCurrentCommand);
314
+ }
315
+ }
316
+
317
+ {
318
+ const read = await readExplicitPane(buildCapturePaneArgv(target, captureLines));
319
+ if (!read.ok) {
320
+ if (read.paneProof) return exactPaneFailure(read.paneProof);
321
+ if (exactPaneIdentityProvided) {
322
+ return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, '', 'capture_failed');
323
+ }
324
+ if (paneRunningShell) {
325
+ return buildReadinessResult(false, 'pane_running_shell', '', 'capture_failed');
326
+ }
327
+ if (normalizedRequireObservableState) {
328
+ return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, '', 'capture_failed');
329
+ }
330
+ return buildReadinessResult(true, 'ok', '', paneCurrentCommand ? 'command_only' : 'none');
331
+ }
332
+ const paneCapture = safeString(read.result?.stdout);
102
333
  const hasCaptureEvidence = paneCapture.trim() !== '';
103
334
  if (hasCaptureEvidence) {
104
335
  const paneShowsLiveAgent = paneLooksReady(paneCapture) || paneHasActiveTask(paneCapture);
@@ -122,6 +353,7 @@ export async function evaluatePaneInjectionReadiness(paneTarget: any, {
122
353
  paneTarget: target,
123
354
  paneCurrentCommand,
124
355
  paneCapture,
356
+ exactPaneProof,
125
357
  };
126
358
  }
127
359
  }
@@ -133,20 +365,13 @@ export async function evaluatePaneInjectionReadiness(paneTarget: any, {
133
365
  paneTarget: target,
134
366
  paneCurrentCommand,
135
367
  paneCapture,
368
+ exactPaneProof,
136
369
  };
137
370
  }
138
371
  if (normalizedRequireObservableState && !hasCaptureEvidence && !paneCurrentCommand) {
139
372
  return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, paneCapture, 'capture_empty');
140
373
  }
141
374
  return buildReadinessResult(true, 'ok', paneCapture, hasCaptureEvidence ? 'captured' : (paneCurrentCommand ? 'command_only' : 'none'));
142
- } catch {
143
- if (paneRunningShell) {
144
- return buildReadinessResult(false, 'pane_running_shell', '', 'capture_failed');
145
- }
146
- if (normalizedRequireObservableState) {
147
- return buildReadinessResult(false, PANE_READINESS_UNVERIFIED_REASON, '', 'capture_failed');
148
- }
149
- return buildReadinessResult(true, 'ok', '', paneCurrentCommand ? 'command_only' : 'none');
150
375
  }
151
376
  }
152
377
 
@@ -157,11 +382,59 @@ export async function sendPaneInput({
157
382
  submitDelayMs = 0,
158
383
  typePrompt = true,
159
384
  queueFirstSubmit = false,
385
+ exactPaneId = undefined,
386
+ expectedPanePid = undefined,
387
+ expectedPaneOwnerId = undefined,
388
+ expectedHudPaneId = undefined,
160
389
  }: any): Promise<any> {
161
390
  const target = safeString(paneTarget).trim();
162
391
  if (!target) {
163
392
  return { ok: false, sent: false, reason: 'missing_pane_target', paneTarget: '' };
164
393
  }
394
+ const bindingFailure = exactPaneBindingFailure(target, exactPaneId);
395
+ if (bindingFailure) return exactPaneUnavailableResult(target, bindingFailure);
396
+
397
+ const exactPaneIdentity = safeString(exactPaneId).trim();
398
+ let exactPaneProof: any = null;
399
+ let pinnedPanePid = typeof expectedPanePid === 'number' ? expectedPanePid : undefined;
400
+ const verifyExplicitPane = async () => {
401
+ const paneProof = await verifyExactPaneLive(exactPaneIdentity, pinnedPanePid);
402
+ exactPaneProof = paneProof.proof || null;
403
+ if (paneProof.ok && typeof paneProof.proof?.pid === 'number') pinnedPanePid ??= paneProof.proof.pid;
404
+ return paneProof;
405
+ };
406
+ const expectedOwner = safeString(expectedPaneOwnerId).trim();
407
+ const expectedHudPane = normalizeExactPaneId(expectedHudPaneId);
408
+ if (expectedHudPane && expectedHudPane === exactPaneIdentity) {
409
+ return { ok: false, sent: false, reason: 'hud_pane_target', paneTarget: target };
410
+ }
411
+ const verifyForEffect = async () => {
412
+ if (expectedOwner) {
413
+ const paneProof = await verifyExactPaneOwnerLive(exactPaneIdentity, pinnedPanePid, expectedOwner);
414
+ exactPaneProof = paneProof.proof || null;
415
+ return paneProof;
416
+ }
417
+ return verifyExplicitPane();
418
+ };
419
+ const initialProof = await verifyForEffect();
420
+ if (!initialProof.ok) return exactPaneUnavailableResult(target, initialProof);
421
+ try {
422
+ const startCommandResult = await runProcess('tmux', ['display-message', '-p', '-t', target, '#{pane_start_command}'], 3000);
423
+ if (/\bomx\b.*\bhud\b.*--watch/i.test(safeString(startCommandResult.stdout))) {
424
+ return { ok: false, sent: false, reason: 'hud_pane_target', paneTarget: target, exactPaneProof };
425
+ }
426
+ } catch {
427
+ return {
428
+ ok: false,
429
+ sent: false,
430
+ reason: PANE_READINESS_UNVERIFIED_REASON,
431
+ paneTarget: target,
432
+ exactPaneProof,
433
+ readinessEvidence: 'start_command_failed',
434
+ };
435
+ }
436
+ const postHudProof = await verifyForEffect();
437
+ if (!postHudProof.ok) return exactPaneUnavailableResult(target, postHudProof);
165
438
 
166
439
  const normalizedSubmitKeyPresses = Number.isFinite(submitKeyPresses)
167
440
  ? Math.max(0, Math.floor(submitKeyPresses))
@@ -176,7 +449,7 @@ export async function sendPaneInput({
176
449
  submitKeyPresses: normalizedSubmitKeyPresses,
177
450
  })?.submitArgv;
178
451
  if (!submitArgv) {
179
- return { ok: false, sent: false, reason: 'send_failed', paneTarget: target };
452
+ return { ok: false, sent: false, reason: 'send_failed', paneTarget: target, exactPaneProof };
180
453
  }
181
454
  const pasteArgv = buildSafePasteArgv(target, literalPrompt);
182
455
  const argv = {
@@ -203,6 +476,7 @@ export async function sendPaneInput({
203
476
  reason: 'buffer_set_failed',
204
477
  paneTarget: target,
205
478
  argv,
479
+ exactPaneProof,
206
480
  error: error instanceof Error ? error.message : safeString(error),
207
481
  };
208
482
  }
@@ -216,6 +490,7 @@ export async function sendPaneInput({
216
490
  reason: 'buffer_show_failed',
217
491
  paneTarget: target,
218
492
  argv,
493
+ exactPaneProof,
219
494
  error: error instanceof Error ? error.message : safeString(error),
220
495
  };
221
496
  }
@@ -226,12 +501,31 @@ export async function sendPaneInput({
226
501
  reason: 'buffer_verify_failed',
227
502
  paneTarget: target,
228
503
  argv,
504
+ exactPaneProof,
229
505
  expectedBytes: literalPrompt.length,
230
506
  actualBytes: verifiedBuffer.stdout.length,
231
507
  };
232
508
  }
509
+
510
+ const clearProof = await verifyForEffect();
511
+ if (!clearProof.ok) return exactPaneUnavailableResult(target, clearProof, { argv });
233
512
  try {
234
513
  await runProcess('tmux', pasteArgv.clearComposerArgv, 3000);
514
+ } catch (error) {
515
+ return {
516
+ ok: false,
517
+ sent: false,
518
+ reason: 'buffer_paste_failed',
519
+ paneTarget: target,
520
+ argv,
521
+ exactPaneProof,
522
+ error: error instanceof Error ? error.message : safeString(error),
523
+ };
524
+ }
525
+
526
+ const pasteProof = await verifyForEffect();
527
+ if (!pasteProof.ok) return exactPaneUnavailableResult(target, pasteProof, { argv });
528
+ try {
235
529
  await runProcess('tmux', pasteArgv.pasteBufferArgv, 3000);
236
530
  } catch (error) {
237
531
  return {
@@ -240,11 +534,14 @@ export async function sendPaneInput({
240
534
  reason: 'buffer_paste_failed',
241
535
  paneTarget: target,
242
536
  argv,
537
+ exactPaneProof,
243
538
  error: error instanceof Error ? error.message : safeString(error),
244
539
  };
245
540
  }
246
541
  }
247
542
  if (queueFirstSubmit && argv.submitArgv.length > 0) {
543
+ const queueProof = await verifyForEffect();
544
+ if (!queueProof.ok) return exactPaneUnavailableResult(target, queueProof, { argv });
248
545
  await runProcess('tmux', ['send-keys', '-t', target, 'Tab'], 3000);
249
546
  if (submitDelayMs > 0) {
250
547
  await new Promise((resolve) => setTimeout(resolve, submitDelayMs));
@@ -254,9 +551,11 @@ export async function sendPaneInput({
254
551
  if (submitDelayMs > 0) {
255
552
  await new Promise((resolve) => setTimeout(resolve, submitDelayMs));
256
553
  }
554
+ const submitProof = await verifyForEffect();
555
+ if (!submitProof.ok) return exactPaneUnavailableResult(target, submitProof, { argv });
257
556
  await runProcess('tmux', submit, 3000);
258
557
  }
259
- return { ok: true, sent: true, reason: 'sent', paneTarget: target, argv };
558
+ return { ok: true, sent: true, reason: 'sent', paneTarget: target, argv, exactPaneProof };
260
559
  } catch (error) {
261
560
  return {
262
561
  ok: false,
@@ -264,6 +563,7 @@ export async function sendPaneInput({
264
563
  reason: 'send_failed',
265
564
  paneTarget: target,
266
565
  argv,
566
+ exactPaneProof,
267
567
  error: error instanceof Error ? error.message : safeString(error),
268
568
  };
269
569
  } finally {
@@ -277,24 +577,49 @@ export async function queuePaneInput({
277
577
  paneTarget,
278
578
  prompt,
279
579
  submitDelayMs = 80,
580
+ exactPaneId = undefined,
280
581
  }: any): Promise<any> {
582
+ const target = safeString(paneTarget).trim();
583
+ const exactPaneIdentity = safeString(exactPaneId).trim();
584
+ const bindingFailure = exactPaneBindingFailure(target, exactPaneId);
585
+ if (bindingFailure) return exactPaneUnavailableResult(target, bindingFailure);
281
586
  const sendResult = await sendPaneInput({
282
587
  paneTarget,
283
588
  prompt,
284
589
  submitKeyPresses: 0,
590
+ exactPaneId: exactPaneIdentity,
285
591
  });
286
592
  if (!sendResult.ok) return sendResult;
287
593
 
288
- const target = safeString(paneTarget).trim();
594
+ let exactPaneProof = sendResult.exactPaneProof || null;
595
+ let expectedPanePid = typeof sendResult.exactPaneProof?.pid === 'number' ? sendResult.exactPaneProof.pid : undefined;
596
+ const verifyExplicitPane = async () => {
597
+ const paneProof = await verifyExactPaneLive(exactPaneIdentity, expectedPanePid);
598
+ exactPaneProof = paneProof.proof || null;
599
+ if (paneProof.ok && typeof paneProof.proof?.pid === 'number') expectedPanePid ??= paneProof.proof.pid;
600
+ return paneProof;
601
+ };
289
602
  const submitArgv = [
290
603
  ['send-keys', '-t', target, 'Tab'],
291
604
  ['send-keys', '-t', target, 'C-m'],
292
605
  ];
606
+ const firstSubmitProof = await verifyExplicitPane();
607
+ if (!firstSubmitProof.ok) {
608
+ return exactPaneUnavailableResult(target, firstSubmitProof, {
609
+ argv: { typeArgv: sendResult.argv?.typeArgv || null, submitArgv },
610
+ });
611
+ }
293
612
  try {
294
613
  await runProcess('tmux', submitArgv[0], 3000);
295
614
  if (submitDelayMs > 0) {
296
615
  await new Promise((resolve) => setTimeout(resolve, submitDelayMs));
297
616
  }
617
+ const secondSubmitProof = await verifyExplicitPane();
618
+ if (!secondSubmitProof.ok) {
619
+ return exactPaneUnavailableResult(target, secondSubmitProof, {
620
+ argv: { typeArgv: sendResult.argv?.typeArgv || null, submitArgv },
621
+ });
622
+ }
298
623
  await runProcess('tmux', submitArgv[1], 3000);
299
624
  return {
300
625
  ok: true,
@@ -302,6 +627,7 @@ export async function queuePaneInput({
302
627
  reason: 'queued',
303
628
  paneTarget: target,
304
629
  argv: { typeArgv: sendResult.argv?.typeArgv || null, submitArgv },
630
+ exactPaneProof,
305
631
  };
306
632
  } catch (error) {
307
633
  return {
@@ -310,11 +636,12 @@ export async function queuePaneInput({
310
636
  reason: 'queue_failed',
311
637
  paneTarget: target,
312
638
  argv: { typeArgv: sendResult.argv?.typeArgv || null, submitArgv },
639
+ exactPaneProof,
313
640
  error: error instanceof Error ? error.message : safeString(error),
314
641
  };
315
642
  }
316
643
  }
317
644
 
318
- export async function checkPaneReadyForTeamSendKeys(paneTarget: any): Promise<any> {
319
- return evaluatePaneInjectionReadiness(paneTarget);
645
+ export async function checkPaneReadyForTeamSendKeys(paneTarget: any, exactPaneId: any): Promise<any> {
646
+ return evaluatePaneInjectionReadiness(paneTarget, { exactPaneId });
320
647
  }