oh-my-codex 0.15.0 → 0.15.2

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 (533) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/README.md +36 -5
  4. package/crates/omx-explore/src/main.rs +222 -12
  5. package/dist/agents/__tests__/native-config.test.js +40 -0
  6. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  7. package/dist/agents/native-config.d.ts +1 -0
  8. package/dist/agents/native-config.d.ts.map +1 -1
  9. package/dist/agents/native-config.js +6 -1
  10. package/dist/agents/native-config.js.map +1 -1
  11. package/dist/agents/policy.d.ts +1 -0
  12. package/dist/agents/policy.d.ts.map +1 -1
  13. package/dist/agents/policy.js +4 -0
  14. package/dist/agents/policy.js.map +1 -1
  15. package/dist/cli/__tests__/autoresearch-guided.test.js +37 -13
  16. package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
  17. package/dist/cli/__tests__/codex-plugin-layout.test.js +1 -1
  18. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  19. package/dist/cli/__tests__/doctor-team.test.js +46 -1
  20. package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
  21. package/dist/cli/__tests__/doctor-warning-copy.test.js +225 -111
  22. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  23. package/dist/cli/__tests__/exec.test.js +96 -1
  24. package/dist/cli/__tests__/exec.test.js.map +1 -1
  25. package/dist/cli/__tests__/explore.test.js +15 -2
  26. package/dist/cli/__tests__/explore.test.js.map +1 -1
  27. package/dist/cli/__tests__/index.test.js +292 -3
  28. package/dist/cli/__tests__/index.test.js.map +1 -1
  29. package/dist/cli/__tests__/launch-fallback.test.js +223 -0
  30. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  31. package/dist/cli/__tests__/mcp-parity.test.js +86 -0
  32. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  33. package/dist/cli/__tests__/package-bin-contract.test.js +23 -0
  34. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  35. package/dist/cli/__tests__/question.test.js +76 -11
  36. package/dist/cli/__tests__/question.test.js.map +1 -1
  37. package/dist/cli/__tests__/setup-agents-overwrite.test.js +140 -1
  38. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  39. package/dist/cli/__tests__/setup-install-mode.test.js +310 -4
  40. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  41. package/dist/cli/__tests__/setup-prompts-overwrite.test.js +78 -19
  42. package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
  43. package/dist/cli/__tests__/setup-refresh.test.js +79 -2
  44. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  45. package/dist/cli/__tests__/sidecar.test.d.ts +2 -0
  46. package/dist/cli/__tests__/sidecar.test.d.ts.map +1 -0
  47. package/dist/cli/__tests__/sidecar.test.js +24 -0
  48. package/dist/cli/__tests__/sidecar.test.js.map +1 -0
  49. package/dist/cli/__tests__/team.test.js +54 -7
  50. package/dist/cli/__tests__/team.test.js.map +1 -1
  51. package/dist/cli/autoresearch-guided.d.ts.map +1 -1
  52. package/dist/cli/autoresearch-guided.js +12 -4
  53. package/dist/cli/autoresearch-guided.js.map +1 -1
  54. package/dist/cli/codex-home.d.ts +4 -6
  55. package/dist/cli/codex-home.d.ts.map +1 -1
  56. package/dist/cli/codex-home.js +9 -41
  57. package/dist/cli/codex-home.js.map +1 -1
  58. package/dist/cli/doctor.d.ts +1 -1
  59. package/dist/cli/doctor.d.ts.map +1 -1
  60. package/dist/cli/doctor.js +509 -279
  61. package/dist/cli/doctor.js.map +1 -1
  62. package/dist/cli/index.d.ts +6 -4
  63. package/dist/cli/index.d.ts.map +1 -1
  64. package/dist/cli/index.js +284 -25
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/cli/omx.js +3 -1
  67. package/dist/cli/omx.js.map +1 -1
  68. package/dist/cli/plugin-marketplace.d.ts +13 -0
  69. package/dist/cli/plugin-marketplace.d.ts.map +1 -0
  70. package/dist/cli/plugin-marketplace.js +77 -0
  71. package/dist/cli/plugin-marketplace.js.map +1 -0
  72. package/dist/cli/question.d.ts +1 -1
  73. package/dist/cli/question.d.ts.map +1 -1
  74. package/dist/cli/question.js +26 -12
  75. package/dist/cli/question.js.map +1 -1
  76. package/dist/cli/setup-preferences.d.ts +20 -0
  77. package/dist/cli/setup-preferences.d.ts.map +1 -0
  78. package/dist/cli/setup-preferences.js +71 -0
  79. package/dist/cli/setup-preferences.js.map +1 -0
  80. package/dist/cli/setup.d.ts +7 -5
  81. package/dist/cli/setup.d.ts.map +1 -1
  82. package/dist/cli/setup.js +271 -152
  83. package/dist/cli/setup.js.map +1 -1
  84. package/dist/cli/team.d.ts +1 -0
  85. package/dist/cli/team.d.ts.map +1 -1
  86. package/dist/cli/team.js +70 -15
  87. package/dist/cli/team.js.map +1 -1
  88. package/dist/config/__tests__/generator-idempotent.test.js +100 -3
  89. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  90. package/dist/config/__tests__/generator-notify.test.js +6 -5
  91. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  92. package/dist/config/__tests__/generator-status-line-presets.test.d.ts +2 -0
  93. package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +1 -0
  94. package/dist/config/__tests__/generator-status-line-presets.test.js +203 -0
  95. package/dist/config/__tests__/generator-status-line-presets.test.js.map +1 -0
  96. package/dist/config/__tests__/models.test.js +23 -1
  97. package/dist/config/__tests__/models.test.js.map +1 -1
  98. package/dist/config/generator.d.ts +9 -1
  99. package/dist/config/generator.d.ts.map +1 -1
  100. package/dist/config/generator.js +184 -16
  101. package/dist/config/generator.js.map +1 -1
  102. package/dist/config/models.d.ts +5 -1
  103. package/dist/config/models.d.ts.map +1 -1
  104. package/dist/config/models.js +12 -2
  105. package/dist/config/models.js.map +1 -1
  106. package/dist/exec/followup.d.ts +44 -0
  107. package/dist/exec/followup.d.ts.map +1 -0
  108. package/dist/exec/followup.js +349 -0
  109. package/dist/exec/followup.js.map +1 -0
  110. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts +2 -0
  111. package/dist/hooks/__tests__/autopilot-skill-contract.test.d.ts.map +1 -0
  112. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +37 -0
  113. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -0
  114. package/dist/hooks/__tests__/codebase-map.test.js +63 -1
  115. package/dist/hooks/__tests__/codebase-map.test.js.map +1 -1
  116. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +1 -1
  117. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +5 -5
  118. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
  119. package/dist/hooks/__tests__/deep-interview-contract.test.js +12 -9
  120. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  121. package/dist/hooks/__tests__/keyword-detector.test.js +25 -18
  122. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  123. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -2
  124. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  125. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +45 -2
  126. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  127. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +17 -0
  128. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  129. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +121 -0
  130. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  131. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +4 -4
  132. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  133. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +103 -0
  134. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  135. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +2 -2
  136. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  137. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +27 -13
  138. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  139. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +2 -0
  140. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +1 -0
  141. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +35 -0
  142. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -0
  143. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +215 -0
  144. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
  145. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +70 -3
  146. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  147. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +5 -0
  148. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
  149. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +3 -2
  150. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +1 -1
  151. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +9 -0
  152. package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
  153. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +2 -0
  154. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +1 -0
  155. package/dist/hooks/__tests__/prompt-refactor-contract.test.js +22 -0
  156. package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +1 -0
  157. package/dist/hooks/codebase-map.d.ts.map +1 -1
  158. package/dist/hooks/codebase-map.js +83 -6
  159. package/dist/hooks/codebase-map.js.map +1 -1
  160. package/dist/hooks/keyword-detector.d.ts +1 -1
  161. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  162. package/dist/hooks/keyword-detector.js +35 -4
  163. package/dist/hooks/keyword-detector.js.map +1 -1
  164. package/dist/hooks/prompt-guidance-contract.d.ts +6 -0
  165. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  166. package/dist/hooks/prompt-guidance-contract.js +117 -13
  167. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  168. package/dist/hooks/session.d.ts +2 -0
  169. package/dist/hooks/session.d.ts.map +1 -1
  170. package/dist/hooks/session.js +6 -0
  171. package/dist/hooks/session.js.map +1 -1
  172. package/dist/hud/__tests__/index.test.js +4 -4
  173. package/dist/hud/__tests__/index.test.js.map +1 -1
  174. package/dist/hud/__tests__/state.test.js +4 -0
  175. package/dist/hud/__tests__/state.test.js.map +1 -1
  176. package/dist/hud/__tests__/types.test.js +27 -0
  177. package/dist/hud/__tests__/types.test.js.map +1 -1
  178. package/dist/hud/state.d.ts.map +1 -1
  179. package/dist/hud/state.js +8 -0
  180. package/dist/hud/state.js.map +1 -1
  181. package/dist/hud/types.d.ts +9 -0
  182. package/dist/hud/types.d.ts.map +1 -1
  183. package/dist/hud/types.js +3 -0
  184. package/dist/hud/types.js.map +1 -1
  185. package/dist/mcp/__tests__/bootstrap.test.js +23 -5
  186. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  187. package/dist/mcp/__tests__/server-lifecycle.test.js +50 -7
  188. package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
  189. package/dist/mcp/__tests__/state-server.test.js +70 -12
  190. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  191. package/dist/mcp/bootstrap.d.ts +10 -1
  192. package/dist/mcp/bootstrap.d.ts.map +1 -1
  193. package/dist/mcp/bootstrap.js +71 -26
  194. package/dist/mcp/bootstrap.js.map +1 -1
  195. package/dist/mcp/state-server.d.ts +5 -11
  196. package/dist/mcp/state-server.d.ts.map +1 -1
  197. package/dist/mcp/state-server.js +16 -432
  198. package/dist/mcp/state-server.js.map +1 -1
  199. package/dist/modes/__tests__/base-autoresearch-contract.test.js +1 -1
  200. package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +1 -1
  201. package/dist/pipeline/__tests__/orchestrator.test.js +89 -5
  202. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
  203. package/dist/pipeline/__tests__/stages.test.js +98 -1
  204. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  205. package/dist/pipeline/index.d.ts +5 -3
  206. package/dist/pipeline/index.d.ts.map +1 -1
  207. package/dist/pipeline/index.js +4 -3
  208. package/dist/pipeline/index.js.map +1 -1
  209. package/dist/pipeline/orchestrator.d.ts +7 -6
  210. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  211. package/dist/pipeline/orchestrator.js +90 -11
  212. package/dist/pipeline/orchestrator.js.map +1 -1
  213. package/dist/pipeline/review-verdict.d.ts +3 -0
  214. package/dist/pipeline/review-verdict.d.ts.map +1 -0
  215. package/dist/pipeline/review-verdict.js +14 -0
  216. package/dist/pipeline/review-verdict.js.map +1 -0
  217. package/dist/pipeline/stages/code-review.d.ts +33 -0
  218. package/dist/pipeline/stages/code-review.d.ts.map +1 -0
  219. package/dist/pipeline/stages/code-review.js +51 -0
  220. package/dist/pipeline/stages/code-review.js.map +1 -0
  221. package/dist/pipeline/stages/ralph-verify.d.ts +12 -2
  222. package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -1
  223. package/dist/pipeline/stages/ralph-verify.js +24 -6
  224. package/dist/pipeline/stages/ralph-verify.js.map +1 -1
  225. package/dist/pipeline/stages/ralplan.d.ts +1 -1
  226. package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
  227. package/dist/pipeline/stages/ralplan.js +21 -1
  228. package/dist/pipeline/stages/ralplan.js.map +1 -1
  229. package/dist/pipeline/types.d.ts +14 -7
  230. package/dist/pipeline/types.d.ts.map +1 -1
  231. package/dist/pipeline/types.js +2 -2
  232. package/dist/planning/__tests__/artifacts.test.js +152 -1
  233. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  234. package/dist/planning/artifacts.d.ts +9 -0
  235. package/dist/planning/artifacts.d.ts.map +1 -1
  236. package/dist/planning/artifacts.js +60 -1
  237. package/dist/planning/artifacts.js.map +1 -1
  238. package/dist/question/__tests__/client.test.js +23 -3
  239. package/dist/question/__tests__/client.test.js.map +1 -1
  240. package/dist/question/__tests__/renderer.test.js +148 -37
  241. package/dist/question/__tests__/renderer.test.js.map +1 -1
  242. package/dist/question/__tests__/types.test.js +21 -0
  243. package/dist/question/__tests__/types.test.js.map +1 -1
  244. package/dist/question/__tests__/ui.test.js +155 -7
  245. package/dist/question/__tests__/ui.test.js.map +1 -1
  246. package/dist/question/client.d.ts +14 -4
  247. package/dist/question/client.d.ts.map +1 -1
  248. package/dist/question/client.js.map +1 -1
  249. package/dist/question/renderer.d.ts +11 -1
  250. package/dist/question/renderer.d.ts.map +1 -1
  251. package/dist/question/renderer.js +102 -7
  252. package/dist/question/renderer.js.map +1 -1
  253. package/dist/question/state.d.ts +2 -2
  254. package/dist/question/state.d.ts.map +1 -1
  255. package/dist/question/state.js +26 -17
  256. package/dist/question/state.js.map +1 -1
  257. package/dist/question/types.d.ts +25 -1
  258. package/dist/question/types.d.ts.map +1 -1
  259. package/dist/question/types.js +48 -13
  260. package/dist/question/types.js.map +1 -1
  261. package/dist/question/ui.d.ts +15 -2
  262. package/dist/question/ui.d.ts.map +1 -1
  263. package/dist/question/ui.js +268 -162
  264. package/dist/question/ui.js.map +1 -1
  265. package/dist/scripts/__tests__/codex-native-hook.test.js +415 -94
  266. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  267. package/dist/scripts/__tests__/generate-release-body.test.js +36 -0
  268. package/dist/scripts/__tests__/generate-release-body.test.js.map +1 -1
  269. package/dist/scripts/__tests__/prompt-inventory.test.d.ts +2 -0
  270. package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +1 -0
  271. package/dist/scripts/__tests__/prompt-inventory.test.js +56 -0
  272. package/dist/scripts/__tests__/prompt-inventory.test.js.map +1 -0
  273. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  274. package/dist/scripts/codex-native-hook.js +232 -54
  275. package/dist/scripts/codex-native-hook.js.map +1 -1
  276. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  277. package/dist/scripts/codex-native-pre-post.js +12 -9
  278. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  279. package/dist/scripts/generate-release-body.d.ts.map +1 -1
  280. package/dist/scripts/generate-release-body.js +12 -3
  281. package/dist/scripts/generate-release-body.js.map +1 -1
  282. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +2 -0
  283. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +1 -0
  284. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +153 -0
  285. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +1 -0
  286. package/dist/scripts/notify-hook/managed-tmux.d.ts +4 -2
  287. package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
  288. package/dist/scripts/notify-hook/managed-tmux.js +188 -6
  289. package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
  290. package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
  291. package/dist/scripts/notify-hook/process-runner.js +7 -3
  292. package/dist/scripts/notify-hook/process-runner.js.map +1 -1
  293. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  294. package/dist/scripts/notify-hook/team-dispatch.js +96 -11
  295. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  296. package/dist/scripts/notify-hook/team-tmux-guard.js +3 -3
  297. package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts +34 -0
  298. package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts.map +1 -0
  299. package/dist/scripts/notify-hook/team-worker-posttooluse.js +434 -0
  300. package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -0
  301. package/dist/scripts/notify-hook/team-worker.d.ts +1 -1
  302. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  303. package/dist/scripts/notify-hook/team-worker.js +3 -43
  304. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  305. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  306. package/dist/scripts/notify-hook/tmux-injection.js +25 -4
  307. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  308. package/dist/scripts/notify-hook.js +36 -5
  309. package/dist/scripts/notify-hook.js.map +1 -1
  310. package/dist/scripts/prompt-inventory.d.ts +29 -0
  311. package/dist/scripts/prompt-inventory.d.ts.map +1 -0
  312. package/dist/scripts/prompt-inventory.js +178 -0
  313. package/dist/scripts/prompt-inventory.js.map +1 -0
  314. package/dist/scripts/run-test-files.js +1 -0
  315. package/dist/scripts/run-test-files.js.map +1 -1
  316. package/dist/sidecar/__tests__/boundary.test.d.ts +2 -0
  317. package/dist/sidecar/__tests__/boundary.test.d.ts.map +1 -0
  318. package/dist/sidecar/__tests__/boundary.test.js +48 -0
  319. package/dist/sidecar/__tests__/boundary.test.js.map +1 -0
  320. package/dist/sidecar/__tests__/collector.test.d.ts +2 -0
  321. package/dist/sidecar/__tests__/collector.test.d.ts.map +1 -0
  322. package/dist/sidecar/__tests__/collector.test.js +162 -0
  323. package/dist/sidecar/__tests__/collector.test.js.map +1 -0
  324. package/dist/sidecar/__tests__/render.test.d.ts +2 -0
  325. package/dist/sidecar/__tests__/render.test.d.ts.map +1 -0
  326. package/dist/sidecar/__tests__/render.test.js +67 -0
  327. package/dist/sidecar/__tests__/render.test.js.map +1 -0
  328. package/dist/sidecar/__tests__/tmux.test.d.ts +2 -0
  329. package/dist/sidecar/__tests__/tmux.test.d.ts.map +1 -0
  330. package/dist/sidecar/__tests__/tmux.test.js +30 -0
  331. package/dist/sidecar/__tests__/tmux.test.js.map +1 -0
  332. package/dist/sidecar/__tests__/watch.test.d.ts +2 -0
  333. package/dist/sidecar/__tests__/watch.test.d.ts.map +1 -0
  334. package/dist/sidecar/__tests__/watch.test.js +42 -0
  335. package/dist/sidecar/__tests__/watch.test.js.map +1 -0
  336. package/dist/sidecar/collector.d.ts +4 -0
  337. package/dist/sidecar/collector.d.ts.map +1 -0
  338. package/dist/sidecar/collector.js +377 -0
  339. package/dist/sidecar/collector.js.map +1 -0
  340. package/dist/sidecar/index.d.ts +25 -0
  341. package/dist/sidecar/index.d.ts.map +1 -0
  342. package/dist/sidecar/index.js +165 -0
  343. package/dist/sidecar/index.js.map +1 -0
  344. package/dist/sidecar/render.d.ts +3 -0
  345. package/dist/sidecar/render.d.ts.map +1 -0
  346. package/dist/sidecar/render.js +72 -0
  347. package/dist/sidecar/render.js.map +1 -0
  348. package/dist/sidecar/tmux.d.ts +13 -0
  349. package/dist/sidecar/tmux.d.ts.map +1 -0
  350. package/dist/sidecar/tmux.js +44 -0
  351. package/dist/sidecar/tmux.js.map +1 -0
  352. package/dist/sidecar/types.d.ts +125 -0
  353. package/dist/sidecar/types.d.ts.map +1 -0
  354. package/dist/sidecar/types.js +2 -0
  355. package/dist/sidecar/types.js.map +1 -0
  356. package/dist/state/__tests__/operations.test.js +50 -22
  357. package/dist/state/__tests__/operations.test.js.map +1 -1
  358. package/dist/state/__tests__/workflow-transition.test.js +9 -1
  359. package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
  360. package/dist/state/operations.d.ts +1 -1
  361. package/dist/state/operations.d.ts.map +1 -1
  362. package/dist/state/operations.js +19 -7
  363. package/dist/state/operations.js.map +1 -1
  364. package/dist/state/workflow-transition.d.ts.map +1 -1
  365. package/dist/state/workflow-transition.js +1 -0
  366. package/dist/state/workflow-transition.js.map +1 -1
  367. package/dist/team/__tests__/commit-hygiene.test.d.ts +2 -0
  368. package/dist/team/__tests__/commit-hygiene.test.d.ts.map +1 -0
  369. package/dist/team/__tests__/commit-hygiene.test.js +93 -0
  370. package/dist/team/__tests__/commit-hygiene.test.js.map +1 -0
  371. package/dist/team/__tests__/delegation-policy.test.d.ts +2 -0
  372. package/dist/team/__tests__/delegation-policy.test.d.ts.map +1 -0
  373. package/dist/team/__tests__/delegation-policy.test.js +69 -0
  374. package/dist/team/__tests__/delegation-policy.test.js.map +1 -0
  375. package/dist/team/__tests__/events.test.js +54 -4
  376. package/dist/team/__tests__/events.test.js.map +1 -1
  377. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +2 -0
  378. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +1 -0
  379. package/dist/team/__tests__/hook-primary-e2e-contract.test.js +78 -0
  380. package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +1 -0
  381. package/dist/team/__tests__/model-contract.test.js +16 -0
  382. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  383. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +2 -0
  384. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +1 -0
  385. package/dist/team/__tests__/repo-aware-decomposition.test.js +95 -0
  386. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -0
  387. package/dist/team/__tests__/runtime.test.js +623 -14
  388. package/dist/team/__tests__/runtime.test.js.map +1 -1
  389. package/dist/team/__tests__/state-root.test.js +177 -1
  390. package/dist/team/__tests__/state-root.test.js.map +1 -1
  391. package/dist/team/__tests__/state.test.js +110 -0
  392. package/dist/team/__tests__/state.test.js.map +1 -1
  393. package/dist/team/__tests__/tmux-session.test.js +399 -2
  394. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  395. package/dist/team/__tests__/worker-bootstrap.test.js +94 -0
  396. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  397. package/dist/team/commit-hygiene.d.ts +22 -3
  398. package/dist/team/commit-hygiene.d.ts.map +1 -1
  399. package/dist/team/commit-hygiene.js +134 -2
  400. package/dist/team/commit-hygiene.js.map +1 -1
  401. package/dist/team/contracts.d.ts +1 -1
  402. package/dist/team/contracts.d.ts.map +1 -1
  403. package/dist/team/contracts.js +2 -0
  404. package/dist/team/contracts.js.map +1 -1
  405. package/dist/team/dag-schema.d.ts +38 -0
  406. package/dist/team/dag-schema.d.ts.map +1 -0
  407. package/dist/team/dag-schema.js +221 -0
  408. package/dist/team/dag-schema.js.map +1 -0
  409. package/dist/team/delegation-policy.d.ts +3 -0
  410. package/dist/team/delegation-policy.d.ts.map +1 -0
  411. package/dist/team/delegation-policy.js +82 -0
  412. package/dist/team/delegation-policy.js.map +1 -0
  413. package/dist/team/model-contract.d.ts +3 -1
  414. package/dist/team/model-contract.d.ts.map +1 -1
  415. package/dist/team/model-contract.js +44 -5
  416. package/dist/team/model-contract.js.map +1 -1
  417. package/dist/team/repo-aware-decomposition.d.ts +60 -0
  418. package/dist/team/repo-aware-decomposition.d.ts.map +1 -0
  419. package/dist/team/repo-aware-decomposition.js +229 -0
  420. package/dist/team/repo-aware-decomposition.js.map +1 -0
  421. package/dist/team/runtime.d.ts +27 -0
  422. package/dist/team/runtime.d.ts.map +1 -1
  423. package/dist/team/runtime.js +172 -52
  424. package/dist/team/runtime.js.map +1 -1
  425. package/dist/team/state/tasks.d.ts.map +1 -1
  426. package/dist/team/state/tasks.js +33 -0
  427. package/dist/team/state/tasks.js.map +1 -1
  428. package/dist/team/state/types.d.ts +23 -1
  429. package/dist/team/state/types.d.ts.map +1 -1
  430. package/dist/team/state/types.js.map +1 -1
  431. package/dist/team/state-root.d.ts +35 -0
  432. package/dist/team/state-root.d.ts.map +1 -1
  433. package/dist/team/state-root.js +281 -1
  434. package/dist/team/state-root.js.map +1 -1
  435. package/dist/team/state.d.ts +27 -1
  436. package/dist/team/state.d.ts.map +1 -1
  437. package/dist/team/state.js +6 -0
  438. package/dist/team/state.js.map +1 -1
  439. package/dist/team/tmux-session.d.ts +1 -0
  440. package/dist/team/tmux-session.d.ts.map +1 -1
  441. package/dist/team/tmux-session.js +105 -6
  442. package/dist/team/tmux-session.js.map +1 -1
  443. package/dist/team/worker-bootstrap.d.ts +3 -0
  444. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  445. package/dist/team/worker-bootstrap.js +77 -4
  446. package/dist/team/worker-bootstrap.js.map +1 -1
  447. package/dist/utils/agents-md.d.ts +3 -0
  448. package/dist/utils/agents-md.d.ts.map +1 -1
  449. package/dist/utils/agents-md.js +25 -0
  450. package/dist/utils/agents-md.js.map +1 -1
  451. package/package.json +3 -2
  452. package/plugins/oh-my-codex/.codex-plugin/plugin.json +2 -2
  453. package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +1 -1
  454. package/plugins/oh-my-codex/skills/analyze/SKILL.md +1 -1
  455. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +134 -205
  456. package/plugins/oh-my-codex/skills/code-review/SKILL.md +4 -4
  457. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +14 -7
  458. package/plugins/oh-my-codex/skills/doctor/SKILL.md +1 -1
  459. package/plugins/oh-my-codex/skills/help/SKILL.md +1 -1
  460. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +41 -10
  461. package/plugins/oh-my-codex/skills/plan/SKILL.md +12 -14
  462. package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -4
  463. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -9
  464. package/plugins/oh-my-codex/skills/security-review/SKILL.md +4 -4
  465. package/plugins/oh-my-codex/skills/team/SKILL.md +2 -5
  466. package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +2 -5
  467. package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +2 -3
  468. package/prompts/analyst.md +2 -2
  469. package/prompts/api-reviewer.md +2 -2
  470. package/prompts/architect.md +2 -2
  471. package/prompts/build-fixer.md +2 -2
  472. package/prompts/code-reviewer.md +15 -5
  473. package/prompts/code-simplifier.md +1 -1
  474. package/prompts/critic.md +35 -83
  475. package/prompts/debugger.md +2 -2
  476. package/prompts/dependency-expert.md +2 -2
  477. package/prompts/designer.md +2 -2
  478. package/prompts/executor.md +40 -114
  479. package/prompts/explore-harness.md +1 -1
  480. package/prompts/explore.md +37 -90
  481. package/prompts/git-master.md +2 -2
  482. package/prompts/information-architect.md +1 -1
  483. package/prompts/performance-reviewer.md +2 -2
  484. package/prompts/planner.md +35 -62
  485. package/prompts/product-analyst.md +2 -2
  486. package/prompts/product-manager.md +2 -2
  487. package/prompts/qa-tester.md +2 -2
  488. package/prompts/quality-reviewer.md +2 -2
  489. package/prompts/quality-strategist.md +2 -2
  490. package/prompts/researcher.md +46 -78
  491. package/prompts/security-reviewer.md +2 -2
  492. package/prompts/sisyphus-lite.md +2 -2
  493. package/prompts/style-reviewer.md +2 -2
  494. package/prompts/team-executor.md +1 -1
  495. package/prompts/test-engineer.md +2 -2
  496. package/prompts/ux-researcher.md +2 -2
  497. package/prompts/verifier.md +29 -34
  498. package/prompts/vision.md +2 -2
  499. package/prompts/writer.md +2 -2
  500. package/skills/ai-slop-cleaner/SKILL.md +1 -1
  501. package/skills/analyze/SKILL.md +1 -1
  502. package/skills/autopilot/SKILL.md +134 -205
  503. package/skills/build-fix/SKILL.md +4 -4
  504. package/skills/code-review/SKILL.md +4 -4
  505. package/skills/deep-interview/SKILL.md +14 -7
  506. package/skills/doctor/SKILL.md +1 -1
  507. package/skills/help/SKILL.md +1 -1
  508. package/skills/omx-setup/SKILL.md +41 -10
  509. package/skills/plan/SKILL.md +12 -14
  510. package/skills/ralph/SKILL.md +2 -4
  511. package/skills/ralplan/SKILL.md +5 -9
  512. package/skills/security-review/SKILL.md +4 -4
  513. package/skills/team/SKILL.md +2 -5
  514. package/skills/ultraqa/SKILL.md +2 -5
  515. package/skills/ultrawork/SKILL.md +2 -3
  516. package/src/scripts/__tests__/codex-native-hook.test.ts +502 -94
  517. package/src/scripts/__tests__/generate-release-body.test.ts +41 -0
  518. package/src/scripts/__tests__/prompt-inventory.test.ts +64 -0
  519. package/src/scripts/codex-native-hook.ts +293 -61
  520. package/src/scripts/codex-native-pre-post.ts +10 -8
  521. package/src/scripts/generate-release-body.ts +13 -2
  522. package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +180 -0
  523. package/src/scripts/notify-hook/managed-tmux.ts +196 -9
  524. package/src/scripts/notify-hook/process-runner.ts +7 -3
  525. package/src/scripts/notify-hook/team-dispatch.ts +103 -11
  526. package/src/scripts/notify-hook/team-tmux-guard.ts +3 -3
  527. package/src/scripts/notify-hook/team-worker-posttooluse.ts +536 -0
  528. package/src/scripts/notify-hook/team-worker.ts +4 -48
  529. package/src/scripts/notify-hook/tmux-injection.ts +24 -6
  530. package/src/scripts/notify-hook.ts +36 -5
  531. package/src/scripts/prompt-inventory.ts +218 -0
  532. package/src/scripts/run-test-files.ts +1 -0
  533. package/templates/AGENTS.md +34 -95
@@ -0,0 +1,434 @@
1
+ import { execFile } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import { mkdir, readFile, writeFile } from 'fs/promises';
4
+ import { join, resolve } from 'path';
5
+ import { promisify } from 'util';
6
+ import { appendTeamCommitHygieneEntries } from '../../team/commit-hygiene.js';
7
+ import { appendTeamEvent } from '../../team/state.js';
8
+ import { resolveWorkerTeamStateRoot } from '../../team/state-root.js';
9
+ const execFileAsync = promisify(execFile);
10
+ const PROTECTED_PATH_PREFIXES = [
11
+ '.omx/state/',
12
+ '.omx/logs/',
13
+ '.omx/reports/',
14
+ ];
15
+ const PROTECTED_PATH_SUFFIXES = [
16
+ '.pid',
17
+ '.lock',
18
+ '.tmp',
19
+ ];
20
+ const PROTECTED_PATH_EXACT = new Set([
21
+ 'AGENTS.md',
22
+ ]);
23
+ function safeString(value) {
24
+ return typeof value === 'string' ? value : '';
25
+ }
26
+ function safeRecord(value) {
27
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
28
+ }
29
+ function parseTeamWorkerEnv(raw) {
30
+ const value = safeString(raw).trim();
31
+ const match = /^([a-z0-9][a-z0-9-]{0,29})\/(worker-\d+)$/.exec(value);
32
+ return match ? { teamName: match[1], workerName: match[2] } : null;
33
+ }
34
+ function readHookEvent(payload) {
35
+ return safeString(payload.hook_event_name ?? payload.hookEventName ?? payload.event ?? payload.name).trim();
36
+ }
37
+ function readToolName(payload) {
38
+ return safeString(payload.tool_name ?? payload.toolName ?? payload.tool).trim();
39
+ }
40
+ function readExitCode(payload) {
41
+ const response = safeRecord(payload.tool_response ?? payload.toolResponse ?? payload.result);
42
+ for (const source of [payload, response]) {
43
+ for (const key of ['exit_code', 'exitCode', 'code', 'status']) {
44
+ const value = source[key];
45
+ if (typeof value === 'number' && Number.isInteger(value))
46
+ return value;
47
+ if (typeof value === 'string' && /^-?\d+$/.test(value.trim()))
48
+ return Number.parseInt(value.trim(), 10);
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ function readToolUseId(payload) {
54
+ const value = safeString(payload.tool_use_id ?? payload.toolUseId ?? payload.id).trim();
55
+ return value || undefined;
56
+ }
57
+ async function readJsonIfExists(path) {
58
+ try {
59
+ if (!existsSync(path))
60
+ return null;
61
+ const parsed = JSON.parse(await readFile(path, 'utf-8'));
62
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ async function git(cwd, args) {
69
+ const { stdout } = await execFileAsync('git', args, { cwd, encoding: 'utf-8', maxBuffer: 1024 * 1024 });
70
+ return stdout.trim();
71
+ }
72
+ async function gitMaybe(cwd, args) {
73
+ try {
74
+ return { ok: true, stdout: await git(cwd, args) };
75
+ }
76
+ catch (error) {
77
+ const err = error;
78
+ return { ok: false, stderr: safeString(err.stderr) || safeString(err.message) };
79
+ }
80
+ }
81
+ async function gitHead(cwd) {
82
+ const result = await gitMaybe(cwd, ['rev-parse', '--verify', 'HEAD']);
83
+ return result.ok ? result.stdout : null;
84
+ }
85
+ async function hasGitOperationInProgress(cwd) {
86
+ const gitDirResult = await gitMaybe(cwd, ['rev-parse', '--git-dir']);
87
+ if (!gitDirResult.ok)
88
+ return 'not_git_repository';
89
+ const gitDir = resolve(cwd, gitDirResult.stdout);
90
+ const paths = [
91
+ 'MERGE_HEAD',
92
+ 'CHERRY_PICK_HEAD',
93
+ 'REVERT_HEAD',
94
+ 'BISECT_LOG',
95
+ 'rebase-merge',
96
+ 'rebase-apply',
97
+ ];
98
+ for (const path of paths) {
99
+ if (existsSync(join(gitDir, path)))
100
+ return path;
101
+ }
102
+ return null;
103
+ }
104
+ function parsePorcelainPaths(status) {
105
+ return status
106
+ .split('\n')
107
+ .map((line) => line.trimEnd())
108
+ .filter(Boolean)
109
+ .map((line) => {
110
+ const raw = line.slice(3).trim();
111
+ const renameTarget = raw.includes(' -> ') ? raw.split(' -> ').at(-1) : raw;
112
+ return renameTarget.replace(/^"|"$/g, '');
113
+ })
114
+ .filter(Boolean);
115
+ }
116
+ function isProtectedCheckpointPath(path) {
117
+ const normalized = path.replace(/\\/g, '/');
118
+ if (PROTECTED_PATH_EXACT.has(normalized))
119
+ return true;
120
+ if (normalized.includes('/posttooluse-dedupe.json') || normalized.endsWith('/posttooluse-dedupe.json'))
121
+ return true;
122
+ if (PROTECTED_PATH_PREFIXES.some((prefix) => normalized.startsWith(prefix)))
123
+ return true;
124
+ if (PROTECTED_PATH_SUFFIXES.some((suffix) => normalized.endsWith(suffix)))
125
+ return true;
126
+ return false;
127
+ }
128
+ async function readTeamConfig(stateRoot, teamName) {
129
+ return readJsonIfExists(join(stateRoot, 'team', teamName, 'config.json'));
130
+ }
131
+ function readLeaderArtifactCwd(config, fallbackCwd) {
132
+ const leaderCwd = safeString(config?.leader_cwd ?? config?.leaderCwd).trim();
133
+ return leaderCwd ? resolve(fallbackCwd, leaderCwd) : fallbackCwd;
134
+ }
135
+ async function readLeaderHeadObserved(config, fallbackCwd) {
136
+ const leaderCwd = safeString(config?.leader_cwd ?? config?.leaderCwd).trim();
137
+ if (leaderCwd) {
138
+ const head = await gitMaybe(resolve(fallbackCwd, leaderCwd), ['rev-parse', '--verify', 'HEAD']);
139
+ if (head.ok && head.stdout)
140
+ return head.stdout;
141
+ }
142
+ const value = safeString(config?.leader_head ?? config?.leaderHead ?? config?.leader_head_observed).trim();
143
+ return value || null;
144
+ }
145
+ async function readTeamPhaseTerminal(stateRoot, teamName) {
146
+ const phase = await readJsonIfExists(join(stateRoot, 'team', teamName, 'phase.json'));
147
+ const current = safeString(phase?.current_phase ?? phase?.phase).trim();
148
+ return current === 'complete' || current === 'failed' || current === 'cancelled';
149
+ }
150
+ async function writeHeartbeat(stateRoot, teamName, workerName, nowIso) {
151
+ const dir = join(stateRoot, 'team', teamName, 'workers', workerName);
152
+ await mkdir(dir, { recursive: true });
153
+ await writeFile(join(dir, 'heartbeat.json'), JSON.stringify({ last_turn_at: nowIso, source: 'posttooluse' }, null, 2));
154
+ }
155
+ async function readDedupeMarker(path) {
156
+ const parsed = await readJsonIfExists(path);
157
+ const keys = Array.isArray(parsed?.keys) ? parsed.keys.filter((key) => typeof key === 'string') : [];
158
+ const entries = Array.isArray(parsed?.entries)
159
+ ? parsed.entries.filter((entry) => !!entry && typeof entry === 'object' && typeof entry.dedupe_key === 'string')
160
+ : [];
161
+ return {
162
+ version: 1,
163
+ updated_at: safeString(parsed?.updated_at) || new Date(0).toISOString(),
164
+ latest_key: safeString(parsed?.latest_key) || undefined,
165
+ keys,
166
+ entries,
167
+ };
168
+ }
169
+ function buildDedupeKey(params) {
170
+ return [
171
+ params.teamName,
172
+ params.workerName,
173
+ params.workerHeadAfter ?? '',
174
+ params.operationKind,
175
+ ].join('|');
176
+ }
177
+ async function appendLeaderSignal(params) {
178
+ await appendTeamEvent(params.teamName, {
179
+ type: 'worker_integration_attempt_requested',
180
+ worker: params.workerName,
181
+ metadata: {
182
+ worker_head_before: params.workerHeadBefore,
183
+ worker_head_after: params.workerHeadAfter,
184
+ checkpoint_commit: params.checkpointCommit,
185
+ leader_head_observed: params.leaderHeadObserved,
186
+ operation_kind: 'leader_integration_attempt',
187
+ outcome_status: params.outcomeStatus,
188
+ tool_use_id: params.toolUseId,
189
+ dedupe_key: params.dedupeKey,
190
+ worktree_path: params.worktreePath,
191
+ source: 'posttooluse',
192
+ },
193
+ }, params.leaderArtifactCwd);
194
+ }
195
+ async function appendLedger(params) {
196
+ const entry = {
197
+ recorded_at: new Date().toISOString(),
198
+ operation: params.operation,
199
+ worker_name: params.workerName,
200
+ status: params.status,
201
+ operational_commit: params.operationalCommit ?? null,
202
+ source_commit: params.sourceCommit ?? null,
203
+ leader_head_before: params.leaderHeadObserved,
204
+ leader_head_after: params.leaderHeadObserved,
205
+ worker_head_before: params.workerHeadBefore,
206
+ worker_head_after: params.workerHeadAfter,
207
+ worktree_path: params.cwd,
208
+ detail: params.detail,
209
+ };
210
+ await appendTeamCommitHygieneEntries(params.teamName, [entry], params.leaderArtifactCwd);
211
+ }
212
+ async function writeDedupeMarker(path, params) {
213
+ await mkdir(resolve(path, '..'), { recursive: true });
214
+ const marker = await readDedupeMarker(path);
215
+ const keys = marker.keys.includes(params.dedupeKey) ? marker.keys : [...marker.keys, params.dedupeKey].slice(-100);
216
+ const entries = [
217
+ ...marker.entries.filter((entry) => entry.dedupe_key !== params.dedupeKey),
218
+ {
219
+ dedupe_key: params.dedupeKey,
220
+ created_at: params.createdAt,
221
+ tool_use_id: params.toolUseId,
222
+ status: params.status,
223
+ },
224
+ ].slice(-100);
225
+ await writeFile(path, JSON.stringify({
226
+ version: 1,
227
+ updated_at: params.createdAt,
228
+ latest_key: params.dedupeKey,
229
+ keys,
230
+ entries,
231
+ }, null, 2));
232
+ }
233
+ async function classifyCleanScaffolding(cwd, leaderHeadObserved, workerHeadAfter) {
234
+ if (!leaderHeadObserved)
235
+ return { status: 'skipped', reason: 'no_leader_head_observed' };
236
+ if (!workerHeadAfter)
237
+ return { status: 'skipped', reason: 'no_worker_head' };
238
+ if (leaderHeadObserved === workerHeadAfter)
239
+ return { status: 'noop', reason: 'worker_already_at_leader' };
240
+ const leaderAncestor = await gitMaybe(cwd, ['merge-base', '--is-ancestor', leaderHeadObserved, workerHeadAfter]);
241
+ if (leaderAncestor.ok)
242
+ return { status: 'noop', reason: 'leader_is_worker_ancestor' };
243
+ const workerAncestor = await gitMaybe(cwd, ['merge-base', '--is-ancestor', workerHeadAfter, leaderHeadObserved]);
244
+ if (workerAncestor.ok)
245
+ return { status: 'skipped', reason: 'worker_behind_leader_defer_to_leader_integration' };
246
+ return { status: 'skipped', reason: 'non_fast_forward_defer_to_leader_integration' };
247
+ }
248
+ async function unstageCheckpointablePaths(cwd, paths) {
249
+ if (paths.length === 0)
250
+ return;
251
+ const restore = await gitMaybe(cwd, ['restore', '--staged', '--', ...paths]);
252
+ if (restore.ok)
253
+ return;
254
+ await gitMaybe(cwd, ['reset', '-q', '--', ...paths]);
255
+ }
256
+ async function checkpointIfEligible(cwd, workerName) {
257
+ const inProgress = await hasGitOperationInProgress(cwd);
258
+ if (inProgress) {
259
+ return { status: inProgress === 'not_git_repository' ? 'skipped' : 'skipped', reason: inProgress, checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
260
+ }
261
+ const unmerged = await git(cwd, ['diff', '--name-only', '--diff-filter=U']);
262
+ if (unmerged.trim()) {
263
+ return { status: 'conflict', reason: 'unmerged_paths', checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
264
+ }
265
+ const staged = await git(cwd, ['diff', '--name-only', '--cached']);
266
+ if (staged.trim()) {
267
+ return { status: 'skipped', reason: 'index_not_clean', checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
268
+ }
269
+ const status = await git(cwd, ['status', '--porcelain=v1', '-uall']);
270
+ const paths = parsePorcelainPaths(status);
271
+ if (paths.length === 0) {
272
+ return { status: 'noop', checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
273
+ }
274
+ const checkpointable = paths.filter((path) => !isProtectedCheckpointPath(path));
275
+ if (checkpointable.length === 0) {
276
+ const onlyRuntimeArtifacts = paths.every((path) => {
277
+ const normalized = path.replace(/\\/g, '/');
278
+ return normalized.startsWith('.omx/state/') || normalized.startsWith('.omx/logs/') || normalized.startsWith('.omx/reports/');
279
+ });
280
+ return onlyRuntimeArtifacts
281
+ ? { status: 'noop', checkpointCommit: null, workerHeadAfter: await gitHead(cwd) }
282
+ : { status: 'skipped', reason: 'only_protected_paths_changed', checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
283
+ }
284
+ const addResult = await gitMaybe(cwd, ['add', '--', ...checkpointable]);
285
+ if (!addResult.ok) {
286
+ await unstageCheckpointablePaths(cwd, checkpointable);
287
+ return { status: 'skipped', reason: `git_add_failed:${addResult.stderr.slice(0, 120)}`, checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
288
+ }
289
+ const commitResult = await gitMaybe(cwd, ['commit', '--no-verify', '-m', `omx(team): auto-checkpoint ${workerName}`]);
290
+ if (!commitResult.ok) {
291
+ await unstageCheckpointablePaths(cwd, checkpointable);
292
+ const reason = commitResult.stderr.includes('conflict') ? 'git_commit_conflict' : `git_commit_failed:${commitResult.stderr.slice(0, 120)}`;
293
+ return { status: reason.includes('conflict') ? 'conflict' : 'skipped', reason, checkpointCommit: null, workerHeadAfter: await gitHead(cwd) };
294
+ }
295
+ const head = await gitHead(cwd);
296
+ return { status: 'applied', checkpointCommit: head, workerHeadAfter: head };
297
+ }
298
+ export async function handleTeamWorkerPostToolUseSuccess(payload, cwd, env = process.env) {
299
+ try {
300
+ if (readHookEvent(payload) !== 'PostToolUse')
301
+ return { handled: false, status: 'skipped', reason: 'not_posttooluse', operationKinds: [] };
302
+ if (readToolName(payload) !== 'Bash')
303
+ return { handled: false, status: 'skipped', reason: 'not_bash', operationKinds: [] };
304
+ if (readExitCode(payload) !== 0)
305
+ return { handled: false, status: 'skipped', reason: 'nonzero_exit', operationKinds: [] };
306
+ const parsedWorker = parseTeamWorkerEnv(env.OMX_TEAM_WORKER);
307
+ if (!parsedWorker)
308
+ return { handled: false, status: 'skipped', reason: 'missing_worker_env', operationKinds: [] };
309
+ const resolvedStateRoot = await resolveWorkerTeamStateRoot(cwd, parsedWorker, env);
310
+ if (!resolvedStateRoot.ok || !resolvedStateRoot.stateRoot) {
311
+ return {
312
+ handled: false,
313
+ status: 'skipped',
314
+ reason: resolvedStateRoot.reason || 'missing_team_root',
315
+ teamName: parsedWorker.teamName,
316
+ workerName: parsedWorker.workerName,
317
+ operationKinds: [],
318
+ };
319
+ }
320
+ const { teamName, workerName } = parsedWorker;
321
+ const stateRoot = resolvedStateRoot.stateRoot;
322
+ const worktreePath = resolvedStateRoot.worktreePath || resolve(cwd);
323
+ if (await readTeamPhaseTerminal(stateRoot, teamName)) {
324
+ return { handled: false, status: 'skipped', reason: 'terminal_phase', teamName, workerName, stateRoot, worktreePath, operationKinds: [] };
325
+ }
326
+ const nowIso = new Date().toISOString();
327
+ await writeHeartbeat(stateRoot, teamName, workerName, nowIso);
328
+ const config = await readTeamConfig(stateRoot, teamName);
329
+ const leaderArtifactCwd = readLeaderArtifactCwd(config, cwd);
330
+ const workerHeadBefore = await gitHead(cwd);
331
+ const leaderHeadObserved = await readLeaderHeadObserved(config, cwd);
332
+ const checkpoint = await checkpointIfEligible(cwd, workerName);
333
+ const workerHeadAfter = checkpoint.workerHeadAfter;
334
+ const operationKinds = ['auto_checkpoint'];
335
+ await appendLedger({
336
+ teamName,
337
+ workerName,
338
+ cwd,
339
+ leaderArtifactCwd,
340
+ operation: 'auto_checkpoint',
341
+ status: checkpoint.status,
342
+ workerHeadBefore,
343
+ workerHeadAfter,
344
+ leaderHeadObserved,
345
+ operationalCommit: checkpoint.checkpointCommit,
346
+ sourceCommit: workerHeadBefore,
347
+ detail: checkpoint.reason ? `posttooluse:${checkpoint.reason}` : 'posttooluse',
348
+ });
349
+ const cleanScaffolding = await classifyCleanScaffolding(cwd, leaderHeadObserved, workerHeadAfter);
350
+ operationKinds.push('worker_clean_rebase');
351
+ await appendLedger({
352
+ teamName,
353
+ workerName,
354
+ cwd,
355
+ leaderArtifactCwd,
356
+ operation: 'worker_clean_rebase',
357
+ status: cleanScaffolding.status,
358
+ workerHeadBefore,
359
+ workerHeadAfter,
360
+ leaderHeadObserved,
361
+ sourceCommit: workerHeadAfter,
362
+ detail: `posttooluse:${cleanScaffolding.reason}`,
363
+ });
364
+ if (workerHeadAfter)
365
+ operationKinds.push('leader_integration_attempt');
366
+ const dedupeKey = buildDedupeKey({
367
+ teamName,
368
+ workerName,
369
+ workerHeadAfter,
370
+ operationKind: 'leader_integration_attempt',
371
+ });
372
+ const dedupePath = join(stateRoot, 'team', teamName, 'workers', workerName, 'posttooluse-dedupe.json');
373
+ const marker = await readDedupeMarker(dedupePath);
374
+ if (workerHeadAfter && !marker.keys.includes(dedupeKey)) {
375
+ await appendLeaderSignal({
376
+ teamName,
377
+ workerName,
378
+ workerHeadBefore,
379
+ workerHeadAfter,
380
+ checkpointCommit: checkpoint.checkpointCommit,
381
+ leaderHeadObserved,
382
+ outcomeStatus: checkpoint.status,
383
+ toolUseId: readToolUseId(payload),
384
+ dedupeKey,
385
+ worktreePath,
386
+ leaderArtifactCwd,
387
+ });
388
+ await appendLedger({
389
+ teamName,
390
+ workerName,
391
+ cwd,
392
+ leaderArtifactCwd,
393
+ operation: 'leader_integration_attempt',
394
+ status: checkpoint.status,
395
+ workerHeadBefore,
396
+ workerHeadAfter,
397
+ leaderHeadObserved,
398
+ sourceCommit: workerHeadAfter,
399
+ detail: `posttooluse:${dedupeKey}`,
400
+ });
401
+ await writeDedupeMarker(dedupePath, {
402
+ dedupeKey,
403
+ createdAt: nowIso,
404
+ toolUseId: readToolUseId(payload),
405
+ status: checkpoint.status,
406
+ });
407
+ }
408
+ return {
409
+ handled: true,
410
+ status: checkpoint.status,
411
+ reason: checkpoint.reason,
412
+ teamName,
413
+ workerName,
414
+ stateRoot,
415
+ worktreePath,
416
+ workerHeadBefore,
417
+ workerHeadAfter,
418
+ checkpointCommit: checkpoint.checkpointCommit,
419
+ leaderHeadObserved,
420
+ operationKinds,
421
+ dedupeKey,
422
+ };
423
+ }
424
+ catch (error) {
425
+ const reason = error instanceof Error ? error.message : String(error);
426
+ return { handled: false, status: 'skipped', reason: `bridge_error:${reason}`, operationKinds: [] };
427
+ }
428
+ }
429
+ export const teamWorkerPostToolUseInternals = {
430
+ buildDedupeKey,
431
+ isProtectedCheckpointPath,
432
+ parsePorcelainPaths,
433
+ };
434
+ //# sourceMappingURL=team-worker-posttooluse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-worker-posttooluse.js","sourceRoot":"","sources":["../../../src/scripts/notify-hook/team-worker-posttooluse.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Team worker: heartbeat, idle detection, and leader notification.
3
3
  */
4
- export declare function resolveTeamStateDirForWorker(cwd: any, parsedTeamWorker: any): Promise<string>;
4
+ export declare function resolveTeamStateDirForWorker(cwd: any, parsedTeamWorker: any): Promise<string | null>;
5
5
  export declare function parseTeamWorkerEnv(rawValue: any): {
6
6
  teamName: string;
7
7
  workerName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"team-worker.d.ts","sourceRoot":"","sources":["../../../src/scripts/notify-hook/team-worker.ts"],"names":[],"mappings":"AACA;;GAEG;AA+BH,wBAAsB,4BAA4B,CAAC,GAAG,KAAA,EAAE,gBAAgB,KAAA,mBAmCvE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,KAAA;;;SAK1C;AAED,wBAAgB,8BAA8B,YAK7C;AAED,wBAAgB,2BAA2B,WAM1C;AAED,wBAAgB,+BAA+B,WAM9C;AAED,wBAAgB,oBAAoB,WAKnC;AAED,wBAAgB,uBAAuB,WAKtC;AAqHD,wBAAsB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,KAAA,gBAYzE;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA;;;;UAmBnE;AAuGD,wBAAsB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,KAAA,iBAiBzE;AAED,wBAAsB,+BAA+B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;;;;;CAAA,iBA+JjG;AAED,wBAAsB,2BAA2B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;;;;;CAAA,iBAqM7F"}
1
+ {"version":3,"file":"team-worker.d.ts","sourceRoot":"","sources":["../../../src/scripts/notify-hook/team-worker.ts"],"names":[],"mappings":"AACA;;GAEG;AAmBH,wBAAsB,4BAA4B,CAAC,GAAG,KAAA,EAAE,gBAAgB,KAAA,0BAEvE;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,KAAA;;;SAK1C;AAED,wBAAgB,8BAA8B,YAK7C;AAED,wBAAgB,2BAA2B,WAM1C;AAED,wBAAgB,+BAA+B,WAM9C;AAED,wBAAgB,oBAAoB,WAKnC;AAED,wBAAgB,uBAAuB,WAKtC;AAqHD,wBAAsB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,KAAA,gBAYzE;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA;;;;UAmBnE;AAuGD,wBAAsB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,KAAA,iBAiBzE;AAED,wBAAsB,+BAA+B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;;;;;CAAA,iBA+JjG;AAED,wBAAsB,2BAA2B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;;;;;CAAA,iBAqM7F"}
@@ -4,7 +4,8 @@
4
4
  */
5
5
  import { readFile, writeFile, mkdir, appendFile, rename, stat, readdir } from 'fs/promises';
6
6
  import { existsSync } from 'fs';
7
- import { join, resolve as resolvePath } from 'path';
7
+ import { join } from 'path';
8
+ import { resolveWorkerNotifyTeamStateRootPath } from '../../team/state-root.js';
8
9
  import { asNumber, safeString, isTerminalPhase } from './utils.js';
9
10
  import { readJsonIfExists } from './state-io.js';
10
11
  import { logTmuxHookEvent } from './log.js';
@@ -13,49 +14,8 @@ import { resolvePaneTarget } from './tmux-injection.js';
13
14
  import { classifyLeaderActionState, resolveAllWorkersIdleIntent, resolveWorkerIdleIntent, } from './orchestration-intent.js';
14
15
  import { DEFAULT_MARKER } from '../tmux-hook-engine.js';
15
16
  const LEADER_PANE_SHELL_NO_INJECTION_REASON = 'leader_pane_shell_no_injection';
16
- async function readTeamStateRootFromJson(path) {
17
- try {
18
- if (!existsSync(path))
19
- return null;
20
- const parsed = JSON.parse(await readFile(path, 'utf-8'));
21
- const value = parsed && typeof parsed.team_state_root === 'string'
22
- ? parsed.team_state_root.trim()
23
- : '';
24
- return value ? value : null;
25
- }
26
- catch {
27
- return null;
28
- }
29
- }
30
17
  export async function resolveTeamStateDirForWorker(cwd, parsedTeamWorker) {
31
- const explicitStateRoot = safeString(process.env.OMX_TEAM_STATE_ROOT || '').trim();
32
- if (explicitStateRoot) {
33
- return resolvePath(cwd, explicitStateRoot);
34
- }
35
- const teamName = parsedTeamWorker.teamName;
36
- const workerName = parsedTeamWorker.workerName;
37
- const leaderCwd = safeString(process.env.OMX_TEAM_LEADER_CWD || '').trim();
38
- const candidateStateDirs = [];
39
- if (leaderCwd) {
40
- candidateStateDirs.push(join(resolvePath(leaderCwd), '.omx', 'state'));
41
- }
42
- candidateStateDirs.push(join(cwd, '.omx', 'state'));
43
- for (const candidateStateDir of candidateStateDirs) {
44
- const teamRoot = join(candidateStateDir, 'team', teamName);
45
- if (!existsSync(teamRoot))
46
- continue;
47
- const identityRoot = await readTeamStateRootFromJson(join(teamRoot, 'workers', workerName, 'identity.json'));
48
- if (identityRoot)
49
- return resolvePath(cwd, identityRoot);
50
- const manifestRoot = await readTeamStateRootFromJson(join(teamRoot, 'manifest.v2.json'));
51
- if (manifestRoot)
52
- return resolvePath(cwd, manifestRoot);
53
- const configRoot = await readTeamStateRootFromJson(join(teamRoot, 'config.json'));
54
- if (configRoot)
55
- return resolvePath(cwd, configRoot);
56
- return candidateStateDir;
57
- }
58
- return join(cwd, '.omx', 'state');
18
+ return resolveWorkerNotifyTeamStateRootPath(cwd, parsedTeamWorker, process.env);
59
19
  }
60
20
  export function parseTeamWorkerEnv(rawValue) {
61
21
  if (typeof rawValue !== 'string')