oh-my-copilot 4.13.1 → 4.13.21

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 (507) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +3 -3
  4. package/bridge/cli.cjs +4709 -1961
  5. package/bridge/mcp-server.cjs +112 -11
  6. package/bridge/runtime-cli.cjs +4917 -2645
  7. package/bridge/team-bridge.cjs +6 -4
  8. package/bridge/team-mcp.cjs +19607 -0
  9. package/bridge/team.js +4895 -2215
  10. package/dist/__tests__/auto-slash-aliases.test.js +91 -0
  11. package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
  12. package/dist/__tests__/hooks/learner/bridge.test.js +25 -0
  13. package/dist/__tests__/hooks/learner/bridge.test.js.map +1 -1
  14. package/dist/__tests__/hooks/learner/parser.test.js +30 -0
  15. package/dist/__tests__/hooks/learner/parser.test.js.map +1 -1
  16. package/dist/__tests__/hud/extra-usage.test.js +42 -0
  17. package/dist/__tests__/hud/extra-usage.test.js.map +1 -1
  18. package/dist/__tests__/hud/labels.test.d.ts +2 -0
  19. package/dist/__tests__/hud/labels.test.d.ts.map +1 -0
  20. package/dist/__tests__/hud/labels.test.js +158 -0
  21. package/dist/__tests__/hud/labels.test.js.map +1 -0
  22. package/dist/__tests__/hud/render-enterprise.test.d.ts +5 -0
  23. package/dist/__tests__/hud/render-enterprise.test.d.ts.map +1 -0
  24. package/dist/__tests__/hud/render-enterprise.test.js +232 -0
  25. package/dist/__tests__/hud/render-enterprise.test.js.map +1 -0
  26. package/dist/__tests__/hud/render-rate-limits-priority.test.js +185 -0
  27. package/dist/__tests__/hud/render-rate-limits-priority.test.js.map +1 -1
  28. package/dist/__tests__/hud/stdin-session-scope.test.d.ts +2 -0
  29. package/dist/__tests__/hud/stdin-session-scope.test.d.ts.map +1 -0
  30. package/dist/__tests__/hud/stdin-session-scope.test.js +169 -0
  31. package/dist/__tests__/hud/stdin-session-scope.test.js.map +1 -0
  32. package/dist/__tests__/hud/usage-api.test.js +111 -1
  33. package/dist/__tests__/hud/usage-api.test.js.map +1 -1
  34. package/dist/__tests__/hud-marketplace-resolution.test.js +34 -0
  35. package/dist/__tests__/hud-marketplace-resolution.test.js.map +1 -1
  36. package/dist/__tests__/installer-hud-skip.test.js +6 -0
  37. package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
  38. package/dist/__tests__/installer-omc-reference.test.js +1 -1
  39. package/dist/__tests__/installer-omc-reference.test.js.map +1 -1
  40. package/dist/__tests__/keyword-detector-echo-guard.test.d.ts +2 -0
  41. package/dist/__tests__/keyword-detector-echo-guard.test.d.ts.map +1 -0
  42. package/dist/__tests__/keyword-detector-echo-guard.test.js +218 -0
  43. package/dist/__tests__/keyword-detector-echo-guard.test.js.map +1 -0
  44. package/dist/__tests__/mnemosyne/detector.test.js +2 -0
  45. package/dist/__tests__/mnemosyne/detector.test.js.map +1 -1
  46. package/dist/__tests__/notepad.test.js +2 -2
  47. package/dist/__tests__/notepad.test.js.map +1 -1
  48. package/dist/__tests__/pre-tool-enforcer.test.js +84 -1
  49. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  50. package/dist/__tests__/preemptive-compaction-hook.test.js +63 -0
  51. package/dist/__tests__/preemptive-compaction-hook.test.js.map +1 -1
  52. package/dist/__tests__/ralph-prd-mandatory.test.js +11 -1
  53. package/dist/__tests__/ralph-prd-mandatory.test.js.map +1 -1
  54. package/dist/__tests__/ralph-prd.test.js +40 -2
  55. package/dist/__tests__/ralph-prd.test.js.map +1 -1
  56. package/dist/__tests__/skills.test.js +363 -4
  57. package/dist/__tests__/skills.test.js.map +1 -1
  58. package/dist/__tests__/state-root-resolution.test.js +120 -6
  59. package/dist/__tests__/state-root-resolution.test.js.map +1 -1
  60. package/dist/autoresearch/__tests__/runtime.test.js +225 -28
  61. package/dist/autoresearch/__tests__/runtime.test.js.map +1 -1
  62. package/dist/autoresearch/runtime.d.ts.map +1 -1
  63. package/dist/autoresearch/runtime.js +9 -5
  64. package/dist/autoresearch/runtime.js.map +1 -1
  65. package/dist/cli/__tests__/team-status-worktree.test.d.ts +2 -0
  66. package/dist/cli/__tests__/team-status-worktree.test.d.ts.map +1 -0
  67. package/dist/cli/__tests__/team-status-worktree.test.js +96 -0
  68. package/dist/cli/__tests__/team-status-worktree.test.js.map +1 -0
  69. package/dist/cli/__tests__/team.test.js +164 -0
  70. package/dist/cli/__tests__/team.test.js.map +1 -1
  71. package/dist/cli/autoresearch.d.ts +1 -1
  72. package/dist/cli/autoresearch.d.ts.map +1 -1
  73. package/dist/cli/autoresearch.js +4 -4
  74. package/dist/cli/commands/team.d.ts +1 -0
  75. package/dist/cli/commands/team.d.ts.map +1 -1
  76. package/dist/cli/commands/team.js +15 -3
  77. package/dist/cli/commands/team.js.map +1 -1
  78. package/dist/cli/index.js +3 -0
  79. package/dist/cli/index.js.map +1 -1
  80. package/dist/cli/team.d.ts +6 -0
  81. package/dist/cli/team.d.ts.map +1 -1
  82. package/dist/cli/team.js +126 -5
  83. package/dist/cli/team.js.map +1 -1
  84. package/dist/cli/utils/formatting.d.ts +0 -10
  85. package/dist/cli/utils/formatting.d.ts.map +1 -1
  86. package/dist/cli/utils/formatting.js +0 -52
  87. package/dist/cli/utils/formatting.js.map +1 -1
  88. package/dist/config/__tests__/loader.test.js.map +1 -1
  89. package/dist/features/boulder-state/constants.d.ts +1 -1
  90. package/dist/features/boulder-state/constants.d.ts.map +1 -1
  91. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  92. package/dist/features/builtin-skills/skills.js +11 -3
  93. package/dist/features/builtin-skills/skills.js.map +1 -1
  94. package/dist/features/builtin-skills/types.d.ts +7 -0
  95. package/dist/features/builtin-skills/types.d.ts.map +1 -1
  96. package/dist/features/delegation-enforcer.d.ts +2 -0
  97. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  98. package/dist/features/delegation-enforcer.js +10 -0
  99. package/dist/features/delegation-enforcer.js.map +1 -1
  100. package/dist/features/magic-keywords.d.ts.map +1 -1
  101. package/dist/features/magic-keywords.js +30 -1
  102. package/dist/features/magic-keywords.js.map +1 -1
  103. package/dist/features/rate-limit-wait/tmux-detector.d.ts +4 -4
  104. package/dist/features/rate-limit-wait/tmux-detector.js +9 -9
  105. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -1
  106. package/dist/hooks/__tests__/bridge-routing.test.js +156 -0
  107. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  108. package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -1
  109. package/dist/hooks/auto-slash-command/constants.js +1 -0
  110. package/dist/hooks/auto-slash-command/constants.js.map +1 -1
  111. package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
  112. package/dist/hooks/auto-slash-command/executor.js +29 -0
  113. package/dist/hooks/auto-slash-command/executor.js.map +1 -1
  114. package/dist/hooks/bridge.d.ts.map +1 -1
  115. package/dist/hooks/bridge.js +184 -1
  116. package/dist/hooks/bridge.js.map +1 -1
  117. package/dist/hooks/learner/bridge.d.ts.map +1 -1
  118. package/dist/hooks/learner/bridge.js +4 -109
  119. package/dist/hooks/learner/bridge.js.map +1 -1
  120. package/dist/hooks/learner/detector.js +1 -1
  121. package/dist/hooks/learner/parser.d.ts +9 -0
  122. package/dist/hooks/learner/parser.d.ts.map +1 -1
  123. package/dist/hooks/learner/parser.js +18 -5
  124. package/dist/hooks/learner/parser.js.map +1 -1
  125. package/dist/hooks/learner/types.d.ts +6 -0
  126. package/dist/hooks/learner/types.d.ts.map +1 -1
  127. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js +16 -0
  128. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js.map +1 -1
  129. package/dist/hooks/notepad/index.d.ts +4 -1
  130. package/dist/hooks/notepad/index.d.ts.map +1 -1
  131. package/dist/hooks/notepad/index.js +7 -4
  132. package/dist/hooks/notepad/index.js.map +1 -1
  133. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js +70 -3
  134. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js.map +1 -1
  135. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  136. package/dist/hooks/persistent-mode/index.js +17 -13
  137. package/dist/hooks/persistent-mode/index.js.map +1 -1
  138. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +175 -3
  139. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  140. package/dist/hooks/project-memory/__tests__/integration.test.js +117 -3
  141. package/dist/hooks/project-memory/__tests__/integration.test.js.map +1 -1
  142. package/dist/hooks/project-memory/__tests__/storage.test.js +11 -11
  143. package/dist/hooks/project-memory/__tests__/storage.test.js.map +1 -1
  144. package/dist/hooks/project-memory/index.d.ts.map +1 -1
  145. package/dist/hooks/project-memory/index.js +24 -12
  146. package/dist/hooks/project-memory/index.js.map +1 -1
  147. package/dist/hooks/ralph/index.d.ts +1 -1
  148. package/dist/hooks/ralph/index.d.ts.map +1 -1
  149. package/dist/hooks/ralph/index.js +1 -1
  150. package/dist/hooks/ralph/index.js.map +1 -1
  151. package/dist/hooks/ralph/loop.d.ts +6 -6
  152. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  153. package/dist/hooks/ralph/loop.js +18 -18
  154. package/dist/hooks/ralph/loop.js.map +1 -1
  155. package/dist/hooks/ralph/prd.d.ts +23 -12
  156. package/dist/hooks/ralph/prd.d.ts.map +1 -1
  157. package/dist/hooks/ralph/prd.js +88 -42
  158. package/dist/hooks/ralph/prd.js.map +1 -1
  159. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js +20 -0
  160. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js.map +1 -1
  161. package/dist/hooks/session-end/index.d.ts +9 -0
  162. package/dist/hooks/session-end/index.d.ts.map +1 -1
  163. package/dist/hooks/session-end/index.js +110 -0
  164. package/dist/hooks/session-end/index.js.map +1 -1
  165. package/dist/hooks/skill-bridge.cjs +114 -92
  166. package/dist/hooks/skill-state/index.d.ts.map +1 -1
  167. package/dist/hooks/skill-state/index.js +1 -0
  168. package/dist/hooks/skill-state/index.js.map +1 -1
  169. package/dist/hud/__tests__/enterprise-cost.test.d.ts +5 -0
  170. package/dist/hud/__tests__/enterprise-cost.test.d.ts.map +1 -0
  171. package/dist/hud/__tests__/enterprise-cost.test.js +151 -0
  172. package/dist/hud/__tests__/enterprise-cost.test.js.map +1 -0
  173. package/dist/hud/__tests__/git-status.test.js +18 -0
  174. package/dist/hud/__tests__/git-status.test.js.map +1 -1
  175. package/dist/hud/__tests__/usage-api-enterprise.test.d.ts +5 -0
  176. package/dist/hud/__tests__/usage-api-enterprise.test.d.ts.map +1 -0
  177. package/dist/hud/__tests__/usage-api-enterprise.test.js +249 -0
  178. package/dist/hud/__tests__/usage-api-enterprise.test.js.map +1 -0
  179. package/dist/hud/elements/background.d.ts +3 -3
  180. package/dist/hud/elements/background.d.ts.map +1 -1
  181. package/dist/hud/elements/background.js +5 -4
  182. package/dist/hud/elements/background.js.map +1 -1
  183. package/dist/hud/elements/call-counts.d.ts +2 -2
  184. package/dist/hud/elements/call-counts.d.ts.map +1 -1
  185. package/dist/hud/elements/call-counts.js +7 -6
  186. package/dist/hud/elements/call-counts.js.map +1 -1
  187. package/dist/hud/elements/context.d.ts +3 -3
  188. package/dist/hud/elements/context.d.ts.map +1 -1
  189. package/dist/hud/elements/context.js +5 -4
  190. package/dist/hud/elements/context.js.map +1 -1
  191. package/dist/hud/elements/enterprise-cost.d.ts +16 -0
  192. package/dist/hud/elements/enterprise-cost.d.ts.map +1 -0
  193. package/dist/hud/elements/enterprise-cost.js +63 -0
  194. package/dist/hud/elements/enterprise-cost.js.map +1 -0
  195. package/dist/hud/elements/git.d.ts +2 -1
  196. package/dist/hud/elements/git.d.ts.map +1 -1
  197. package/dist/hud/elements/git.js +7 -6
  198. package/dist/hud/elements/git.js.map +1 -1
  199. package/dist/hud/elements/permission.d.ts.map +1 -1
  200. package/dist/hud/elements/permission.js +2 -5
  201. package/dist/hud/elements/permission.js.map +1 -1
  202. package/dist/hud/elements/ralph.d.ts +2 -2
  203. package/dist/hud/elements/ralph.d.ts.map +1 -1
  204. package/dist/hud/elements/ralph.js +3 -2
  205. package/dist/hud/elements/ralph.js.map +1 -1
  206. package/dist/hud/elements/session.d.ts.map +1 -1
  207. package/dist/hud/elements/session.js +5 -9
  208. package/dist/hud/elements/session.js.map +1 -1
  209. package/dist/hud/elements/thinking.d.ts +2 -2
  210. package/dist/hud/elements/thinking.d.ts.map +1 -1
  211. package/dist/hud/elements/thinking.js +3 -2
  212. package/dist/hud/elements/thinking.js.map +1 -1
  213. package/dist/hud/elements/token-usage.d.ts +2 -2
  214. package/dist/hud/elements/token-usage.d.ts.map +1 -1
  215. package/dist/hud/elements/token-usage.js +3 -2
  216. package/dist/hud/elements/token-usage.js.map +1 -1
  217. package/dist/hud/index.d.ts.map +1 -1
  218. package/dist/hud/index.js +5 -1
  219. package/dist/hud/index.js.map +1 -1
  220. package/dist/hud/render.d.ts.map +1 -1
  221. package/dist/hud/render.js +43 -10
  222. package/dist/hud/render.js.map +1 -1
  223. package/dist/hud/state.d.ts.map +1 -1
  224. package/dist/hud/state.js +18 -1
  225. package/dist/hud/state.js.map +1 -1
  226. package/dist/hud/stdin.d.ts.map +1 -1
  227. package/dist/hud/stdin.js +49 -5
  228. package/dist/hud/stdin.js.map +1 -1
  229. package/dist/hud/types.d.ts +42 -0
  230. package/dist/hud/types.d.ts.map +1 -1
  231. package/dist/hud/types.js +59 -1
  232. package/dist/hud/types.js.map +1 -1
  233. package/dist/hud/usage-api.d.ts +19 -1
  234. package/dist/hud/usage-api.d.ts.map +1 -1
  235. package/dist/hud/usage-api.js +101 -18
  236. package/dist/hud/usage-api.js.map +1 -1
  237. package/dist/installer/__tests__/hud-cache-wrapper.test.d.ts +2 -0
  238. package/dist/installer/__tests__/hud-cache-wrapper.test.d.ts.map +1 -0
  239. package/dist/installer/__tests__/hud-cache-wrapper.test.js +235 -0
  240. package/dist/installer/__tests__/hud-cache-wrapper.test.js.map +1 -0
  241. package/dist/installer/__tests__/standalone-hook-reconcile.test.js +2 -0
  242. package/dist/installer/__tests__/standalone-hook-reconcile.test.js.map +1 -1
  243. package/dist/installer/index.d.ts +1 -0
  244. package/dist/installer/index.d.ts.map +1 -1
  245. package/dist/installer/index.js +83 -31
  246. package/dist/installer/index.js.map +1 -1
  247. package/dist/lib/__tests__/worktree-paths.test.js +162 -39
  248. package/dist/lib/__tests__/worktree-paths.test.js.map +1 -1
  249. package/dist/lib/worktree-paths.d.ts +87 -9
  250. package/dist/lib/worktree-paths.d.ts.map +1 -1
  251. package/dist/lib/worktree-paths.js +209 -27
  252. package/dist/lib/worktree-paths.js.map +1 -1
  253. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js +156 -4
  254. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js.map +1 -1
  255. package/dist/mcp/omc-tools-server.d.ts +11 -17
  256. package/dist/mcp/omc-tools-server.d.ts.map +1 -1
  257. package/dist/mcp/omc-tools-server.js +22 -32
  258. package/dist/mcp/omc-tools-server.js.map +1 -1
  259. package/dist/mcp/team-job-convergence.d.ts +9 -2
  260. package/dist/mcp/team-job-convergence.d.ts.map +1 -1
  261. package/dist/mcp/team-job-convergence.js +35 -14
  262. package/dist/mcp/team-job-convergence.js.map +1 -1
  263. package/dist/mcp/team-server.d.ts.map +1 -1
  264. package/dist/mcp/team-server.js +93 -13
  265. package/dist/mcp/team-server.js.map +1 -1
  266. package/dist/ralphthon/prd.d.ts.map +1 -1
  267. package/dist/ralphthon/prd.js +13 -17
  268. package/dist/ralphthon/prd.js.map +1 -1
  269. package/dist/shared/types.d.ts +2 -0
  270. package/dist/shared/types.d.ts.map +1 -1
  271. package/dist/team/__tests__/api-interop.cleanup.test.d.ts +2 -0
  272. package/dist/team/__tests__/api-interop.cleanup.test.d.ts.map +1 -0
  273. package/dist/team/__tests__/api-interop.cleanup.test.js +234 -0
  274. package/dist/team/__tests__/api-interop.cleanup.test.js.map +1 -0
  275. package/dist/team/__tests__/api-interop.dispatch.test.js +2 -1
  276. package/dist/team/__tests__/api-interop.dispatch.test.js.map +1 -1
  277. package/dist/team/__tests__/auto-merge-restart.test.d.ts +2 -0
  278. package/dist/team/__tests__/auto-merge-restart.test.d.ts.map +1 -0
  279. package/dist/team/__tests__/auto-merge-restart.test.js +128 -0
  280. package/dist/team/__tests__/auto-merge-restart.test.js.map +1 -0
  281. package/dist/team/__tests__/auto-merge.perf.test.d.ts +2 -0
  282. package/dist/team/__tests__/auto-merge.perf.test.d.ts.map +1 -0
  283. package/dist/team/__tests__/auto-merge.perf.test.js +85 -0
  284. package/dist/team/__tests__/auto-merge.perf.test.js.map +1 -0
  285. package/dist/team/__tests__/conflict-mailbox.test.d.ts +2 -0
  286. package/dist/team/__tests__/conflict-mailbox.test.d.ts.map +1 -0
  287. package/dist/team/__tests__/conflict-mailbox.test.js +238 -0
  288. package/dist/team/__tests__/conflict-mailbox.test.js.map +1 -0
  289. package/dist/team/__tests__/git-worktree.test.js +164 -3
  290. package/dist/team/__tests__/git-worktree.test.js.map +1 -1
  291. package/dist/team/__tests__/helpers/git-fixture.d.ts +72 -0
  292. package/dist/team/__tests__/helpers/git-fixture.d.ts.map +1 -0
  293. package/dist/team/__tests__/helpers/git-fixture.js +252 -0
  294. package/dist/team/__tests__/helpers/git-fixture.js.map +1 -0
  295. package/dist/team/__tests__/leader-inbox.test.d.ts +2 -0
  296. package/dist/team/__tests__/leader-inbox.test.d.ts.map +1 -0
  297. package/dist/team/__tests__/leader-inbox.test.js +152 -0
  298. package/dist/team/__tests__/leader-inbox.test.js.map +1 -0
  299. package/dist/team/__tests__/merge-orchestrator.test.d.ts +2 -0
  300. package/dist/team/__tests__/merge-orchestrator.test.d.ts.map +1 -0
  301. package/dist/team/__tests__/merge-orchestrator.test.js +779 -0
  302. package/dist/team/__tests__/merge-orchestrator.test.js.map +1 -0
  303. package/dist/team/__tests__/model-contract.test.js +35 -21
  304. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  305. package/dist/team/__tests__/rebase-smoke.test.d.ts +2 -0
  306. package/dist/team/__tests__/rebase-smoke.test.d.ts.map +1 -0
  307. package/dist/team/__tests__/rebase-smoke.test.js +272 -0
  308. package/dist/team/__tests__/rebase-smoke.test.js.map +1 -0
  309. package/dist/team/__tests__/runtime-cli.test.js +11 -3
  310. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  311. package/dist/team/__tests__/runtime-prompt-mode.test.js +14 -16
  312. package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -1
  313. package/dist/team/__tests__/runtime-v2-role-routing.test.js +7 -1
  314. package/dist/team/__tests__/runtime-v2-role-routing.test.js.map +1 -1
  315. package/dist/team/__tests__/runtime-v2.dispatch.test.js +293 -15
  316. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -1
  317. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts +2 -0
  318. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts.map +1 -0
  319. package/dist/team/__tests__/runtime-v2.monitor.test.js +219 -0
  320. package/dist/team/__tests__/runtime-v2.monitor.test.js.map +1 -0
  321. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts +2 -0
  322. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts.map +1 -0
  323. package/dist/team/__tests__/runtime-v2.shutdown.test.js +292 -0
  324. package/dist/team/__tests__/runtime-v2.shutdown.test.js.map +1 -0
  325. package/dist/team/__tests__/scaling-launch-config.test.js +203 -3
  326. package/dist/team/__tests__/scaling-launch-config.test.js.map +1 -1
  327. package/dist/team/__tests__/team-summary-worktree.test.d.ts +2 -0
  328. package/dist/team/__tests__/team-summary-worktree.test.d.ts.map +1 -0
  329. package/dist/team/__tests__/team-summary-worktree.test.js +85 -0
  330. package/dist/team/__tests__/team-summary-worktree.test.js.map +1 -0
  331. package/dist/team/__tests__/teardown-invariant.test.d.ts +2 -0
  332. package/dist/team/__tests__/teardown-invariant.test.d.ts.map +1 -0
  333. package/dist/team/__tests__/teardown-invariant.test.js +176 -0
  334. package/dist/team/__tests__/teardown-invariant.test.js.map +1 -0
  335. package/dist/team/__tests__/tmux-session-liveness.test.d.ts +2 -0
  336. package/dist/team/__tests__/tmux-session-liveness.test.d.ts.map +1 -0
  337. package/dist/team/__tests__/tmux-session-liveness.test.js +37 -0
  338. package/dist/team/__tests__/tmux-session-liveness.test.js.map +1 -0
  339. package/dist/team/__tests__/worker-bootstrap.test.js +47 -1
  340. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  341. package/dist/team/__tests__/worker-commit-cadence.test.d.ts +2 -0
  342. package/dist/team/__tests__/worker-commit-cadence.test.d.ts.map +1 -0
  343. package/dist/team/__tests__/worker-commit-cadence.test.js +315 -0
  344. package/dist/team/__tests__/worker-commit-cadence.test.js.map +1 -0
  345. package/dist/team/__tests__/worktree-contract-fields.test.d.ts +2 -0
  346. package/dist/team/__tests__/worktree-contract-fields.test.d.ts.map +1 -0
  347. package/dist/team/__tests__/worktree-contract-fields.test.js +157 -0
  348. package/dist/team/__tests__/worktree-contract-fields.test.js.map +1 -0
  349. package/dist/team/__tests__/worktree-runtime-e2e.test.d.ts +2 -0
  350. package/dist/team/__tests__/worktree-runtime-e2e.test.d.ts.map +1 -0
  351. package/dist/team/__tests__/worktree-runtime-e2e.test.js +182 -0
  352. package/dist/team/__tests__/worktree-runtime-e2e.test.js.map +1 -0
  353. package/dist/team/api-interop.d.ts +2 -1
  354. package/dist/team/api-interop.d.ts.map +1 -1
  355. package/dist/team/api-interop.js +121 -14
  356. package/dist/team/api-interop.js.map +1 -1
  357. package/dist/team/capabilities.d.ts.map +1 -1
  358. package/dist/team/capabilities.js +2 -0
  359. package/dist/team/capabilities.js.map +1 -1
  360. package/dist/team/cli-worker-contract.d.ts +7 -6
  361. package/dist/team/cli-worker-contract.d.ts.map +1 -1
  362. package/dist/team/cli-worker-contract.js +7 -6
  363. package/dist/team/cli-worker-contract.js.map +1 -1
  364. package/dist/team/conflict-mailbox.d.ts +49 -0
  365. package/dist/team/conflict-mailbox.d.ts.map +1 -0
  366. package/dist/team/conflict-mailbox.js +98 -0
  367. package/dist/team/conflict-mailbox.js.map +1 -0
  368. package/dist/team/events.d.ts +3 -0
  369. package/dist/team/events.d.ts.map +1 -1
  370. package/dist/team/events.js +2 -1
  371. package/dist/team/events.js.map +1 -1
  372. package/dist/team/git-worktree.d.ts +78 -10
  373. package/dist/team/git-worktree.d.ts.map +1 -1
  374. package/dist/team/git-worktree.js +453 -97
  375. package/dist/team/git-worktree.js.map +1 -1
  376. package/dist/team/governance.d.ts +3 -2
  377. package/dist/team/governance.d.ts.map +1 -1
  378. package/dist/team/governance.js.map +1 -1
  379. package/dist/team/leader-inbox.d.ts +28 -0
  380. package/dist/team/leader-inbox.d.ts.map +1 -0
  381. package/dist/team/leader-inbox.js +68 -0
  382. package/dist/team/leader-inbox.js.map +1 -0
  383. package/dist/team/merge-coordinator.d.ts +6 -0
  384. package/dist/team/merge-coordinator.d.ts.map +1 -1
  385. package/dist/team/merge-coordinator.js +6 -2
  386. package/dist/team/merge-coordinator.js.map +1 -1
  387. package/dist/team/merge-orchestrator.d.ts +41 -0
  388. package/dist/team/merge-orchestrator.d.ts.map +1 -0
  389. package/dist/team/merge-orchestrator.js +736 -0
  390. package/dist/team/merge-orchestrator.js.map +1 -0
  391. package/dist/team/model-contract.d.ts +18 -2
  392. package/dist/team/model-contract.d.ts.map +1 -1
  393. package/dist/team/model-contract.js +55 -28
  394. package/dist/team/model-contract.js.map +1 -1
  395. package/dist/team/monitor.d.ts.map +1 -1
  396. package/dist/team/monitor.js +47 -3
  397. package/dist/team/monitor.js.map +1 -1
  398. package/dist/team/runtime-cli.d.ts +1 -0
  399. package/dist/team/runtime-cli.d.ts.map +1 -1
  400. package/dist/team/runtime-cli.js +15 -2
  401. package/dist/team/runtime-cli.js.map +1 -1
  402. package/dist/team/runtime-flags.d.ts +5 -0
  403. package/dist/team/runtime-flags.d.ts.map +1 -0
  404. package/dist/team/runtime-flags.js +12 -0
  405. package/dist/team/runtime-flags.js.map +1 -0
  406. package/dist/team/runtime-v2.d.ts +16 -1
  407. package/dist/team/runtime-v2.d.ts.map +1 -1
  408. package/dist/team/runtime-v2.js +531 -127
  409. package/dist/team/runtime-v2.js.map +1 -1
  410. package/dist/team/runtime.d.ts.map +1 -1
  411. package/dist/team/runtime.js +4 -1
  412. package/dist/team/runtime.js.map +1 -1
  413. package/dist/team/scaling.d.ts.map +1 -1
  414. package/dist/team/scaling.js +110 -13
  415. package/dist/team/scaling.js.map +1 -1
  416. package/dist/team/state/tasks.d.ts.map +1 -1
  417. package/dist/team/state/tasks.js +1 -0
  418. package/dist/team/state/tasks.js.map +1 -1
  419. package/dist/team/team-ops.d.ts.map +1 -1
  420. package/dist/team/team-ops.js +112 -16
  421. package/dist/team/team-ops.js.map +1 -1
  422. package/dist/team/tmux-session.d.ts +17 -29
  423. package/dist/team/tmux-session.d.ts.map +1 -1
  424. package/dist/team/tmux-session.js +117 -108
  425. package/dist/team/tmux-session.js.map +1 -1
  426. package/dist/team/types.d.ts +31 -17
  427. package/dist/team/types.d.ts.map +1 -1
  428. package/dist/team/types.js.map +1 -1
  429. package/dist/team/worker-bootstrap.d.ts +11 -0
  430. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  431. package/dist/team/worker-bootstrap.js +37 -14
  432. package/dist/team/worker-bootstrap.js.map +1 -1
  433. package/dist/team/worker-canonicalization.d.ts.map +1 -1
  434. package/dist/team/worker-canonicalization.js +2 -0
  435. package/dist/team/worker-canonicalization.js.map +1 -1
  436. package/dist/team/worker-commit-cadence.d.ts +70 -0
  437. package/dist/team/worker-commit-cadence.d.ts.map +1 -0
  438. package/dist/team/worker-commit-cadence.js +271 -0
  439. package/dist/team/worker-commit-cadence.js.map +1 -0
  440. package/dist/tools/__tests__/memory-tools.test.js +4 -4
  441. package/dist/tools/__tests__/memory-tools.test.js.map +1 -1
  442. package/dist/tools/__tests__/state-tools.test.js +13 -1
  443. package/dist/tools/__tests__/state-tools.test.js.map +1 -1
  444. package/dist/utils/frontmatter.d.ts.map +1 -1
  445. package/dist/utils/frontmatter.js +1 -16
  446. package/dist/utils/frontmatter.js.map +1 -1
  447. package/dist/utils/resolve-node.d.ts.map +1 -1
  448. package/dist/utils/resolve-node.js +22 -28
  449. package/dist/utils/resolve-node.js.map +1 -1
  450. package/docs/GETTING-STARTED.md +415 -0
  451. package/docs/MIGRATION.md +1003 -0
  452. package/docs/REFERENCE.md +21 -4
  453. package/docs/TEAM-WORKTREE-MODE.md +86 -0
  454. package/docs/company-context-interface.md +5 -16
  455. package/docs/copilot-instructions.md +1 -1
  456. package/package.json +1 -1
  457. package/scripts/keyword-detector.mjs +168 -20
  458. package/scripts/lib/hud-cache-wrapper.sh +122 -0
  459. package/scripts/persistent-mode.cjs +28 -2
  460. package/scripts/persistent-mode.mjs +28 -2
  461. package/scripts/plugin-setup.mjs +10 -1
  462. package/scripts/post-tool-verifier.mjs +153 -3
  463. package/scripts/pre-tool-enforcer.mjs +54 -6
  464. package/scripts/session-start.mjs +194 -2
  465. package/skills/AGENTS.md +22 -91
  466. package/skills/ai-slop-cleaner/SKILL.md +118 -120
  467. package/skills/ask/SKILL.md +6 -8
  468. package/skills/autopilot/SKILL.md +1 -28
  469. package/skills/autoresearch/SKILL.md +5 -5
  470. package/skills/cancel/SKILL.md +13 -13
  471. package/skills/cccg/SKILL.md +1 -0
  472. package/skills/configure-notifications/SKILL.md +80 -215
  473. package/skills/debug/SKILL.md +3 -2
  474. package/skills/deep-dive/SKILL.md +20 -9
  475. package/skills/deep-interview/SKILL.md +32 -4
  476. package/skills/deepinit/SKILL.md +1 -0
  477. package/skills/external-context/SKILL.md +2 -1
  478. package/skills/hud/SKILL.md +22 -52
  479. package/skills/learner/SKILL.md +90 -57
  480. package/skills/mcp-setup/SKILL.md +45 -60
  481. package/skills/omc-doctor/SKILL.md +1 -1
  482. package/skills/omc-reference/SKILL.md +6 -6
  483. package/skills/omc-setup/SKILL.md +30 -74
  484. package/skills/omc-setup/phases/01-install-claude-md.md +97 -0
  485. package/skills/omc-setup/phases/02-configure.md +25 -40
  486. package/skills/omc-setup/phases/03-integrations.md +100 -69
  487. package/skills/omc-setup/phases/04-welcome.md +102 -44
  488. package/skills/omc-teams/SKILL.md +63 -26
  489. package/skills/plan/SKILL.md +11 -9
  490. package/skills/ralph/SKILL.md +42 -41
  491. package/skills/ralplan/SKILL.md +3 -10
  492. package/skills/release/SKILL.md +168 -57
  493. package/skills/remember/SKILL.md +2 -1
  494. package/skills/sciomc/SKILL.md +12 -11
  495. package/skills/self-improve/SKILL.md +4 -4
  496. package/skills/setup/SKILL.md +1 -0
  497. package/skills/skill/SKILL.md +21 -20
  498. package/skills/skillify/SKILL.md +34 -3
  499. package/skills/team/SKILL.md +62 -44
  500. package/skills/ultraqa/SKILL.md +1 -2
  501. package/skills/ultrawork/SKILL.md +28 -21
  502. package/skills/verify/SKILL.md +2 -1
  503. package/skills/writer-memory/SKILL.md +2 -1
  504. package/templates/hooks/keyword-detector.mjs +129 -11
  505. package/templates/hooks/persistent-mode.mjs +28 -2
  506. package/templates/hooks/pre-tool-use.mjs +144 -45
  507. package/templates/hooks/session-start.mjs +25 -1
@@ -0,0 +1,182 @@
1
+ // src/team/__tests__/worktree-runtime-e2e.test.ts
2
+ //
3
+ // Acceptance #1: 3 workers × 10 commits → 30 merge_succeeded events.
4
+ // Uses real git via git-fixture helper.
5
+ import { afterEach, beforeAll, beforeEach, describe, expect, it } from 'vitest';
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { createGitFixture, orchestratorEventLogPath, readEventLog, waitForEventInLog, } from './helpers/git-fixture.js';
9
+ import { startMergeOrchestrator, } from '../merge-orchestrator.js';
10
+ beforeAll(() => {
11
+ process.env.OMC_RUNTIME_V2 = '1';
12
+ });
13
+ afterEach(() => {
14
+ process.env.OMC_RUNTIME_V2 = '1';
15
+ });
16
+ // ---------------------------------------------------------------------------
17
+ // Acceptance #1: 3 workers × 10 commits — all 30 merges succeed
18
+ // ---------------------------------------------------------------------------
19
+ // Windows: real-git fixture is too slow under Defender ASR — heavy 30-commit
20
+ // volume test gates on event-log polling that exceeds reasonable timeouts.
21
+ // Other tests in this describe block + smaller integration tests
22
+ // (rebase-smoke, teardown-invariant) validate the same code paths.
23
+ const describeIfNotWin = process.platform === 'win32' ? describe.skip : describe;
24
+ describeIfNotWin('worktree runtime e2e: 3 workers × 10 commits', () => {
25
+ let fixture;
26
+ let handle;
27
+ beforeEach(async () => {
28
+ fixture = await createGitFixture({
29
+ workerCount: 3,
30
+ leaderBranchName: 'omc-team-test-leader',
31
+ teamName: 'e2e-team',
32
+ });
33
+ process.env.OMC_RUNTIME_V2 = '1';
34
+ const config = {
35
+ teamName: fixture.teamName,
36
+ repoRoot: fixture.repoRoot,
37
+ leaderBranch: fixture.leaderBranch,
38
+ cwd: fixture.repoRoot,
39
+ pollIntervalMs: 100,
40
+ drainTimeoutMs: 20000,
41
+ };
42
+ handle = await startMergeOrchestrator(config);
43
+ await handle.registerWorker('worker-1');
44
+ await handle.registerWorker('worker-2');
45
+ await handle.registerWorker('worker-3');
46
+ });
47
+ afterEach(async () => {
48
+ try {
49
+ await handle.drainAndStop();
50
+ }
51
+ catch { /* ignore */ }
52
+ await fixture.cleanup();
53
+ });
54
+ it('all 30 commits across 3 workers produce merge_succeeded events', async () => {
55
+ // Each worker commits 10 files to disjoint paths (worker-N/file-X.ts)
56
+ // so there are NO conflicts. All merges should succeed.
57
+ //
58
+ // Use serialized commit→wait-for-merge loops to prevent burst-commit
59
+ // coalescing (the orchestrator merges latest HEAD per poll window, so
60
+ // 10 rapid commits → 1 merge event). By waiting for each merge before
61
+ // the next commit we guarantee at least 1 merge per commit.
62
+ //
63
+ // NOTE: rebase fan-out after each merge advances other workers' branch
64
+ // SHAs, which the orchestrator treats as new commits and also merges.
65
+ // So the total merge count may exceed 30 (each of the 30 user commits
66
+ // produces ≥1 merge, plus rebase-induced merges). We assert ≥30 total
67
+ // and ≥10 per worker.
68
+ const COMMITS_PER_WORKER = 10;
69
+ const eventLog = orchestratorEventLogPath(fixture.repoRoot, fixture.teamName);
70
+ const workers = ['worker-1', 'worker-2', 'worker-3'];
71
+ // Track total merges seen so far per worker (rebase-induced merges count too)
72
+ const mergeCountPerWorker = { 'worker-1': 0, 'worker-2': 0, 'worker-3': 0 };
73
+ for (const worker of workers) {
74
+ for (let i = 1; i <= COMMITS_PER_WORKER; i++) {
75
+ await fixture.commitFile(worker, `${worker}/file-${i}.ts`, `// ${worker} file ${i}\nexport const f${i} = ${i};\n`);
76
+ mergeCountPerWorker[worker] += 1;
77
+ // Wait for at least mergeCountPerWorker[worker] merges from this worker
78
+ // before issuing the next commit (prevents coalescing).
79
+ await waitForEventInLog({
80
+ eventLogPath: eventLog,
81
+ eventType: 'merge_succeeded',
82
+ worker,
83
+ count: mergeCountPerWorker[worker],
84
+ timeoutMs: process.platform === 'win32' ? 15000 : 5000,
85
+ });
86
+ // Re-read current count in case rebase-induced merges arrived
87
+ const currentEvents = readEventLog(eventLog);
88
+ mergeCountPerWorker[worker] = currentEvents.filter((e) => e.type === 'merge_succeeded' && e.worker === worker).length;
89
+ }
90
+ }
91
+ const events = readEventLog(eventLog);
92
+ const mergeSucceeded = events.filter((e) => e.type === 'merge_succeeded');
93
+ // At least 30 merges: one per user commit. May be more due to rebase fan-out.
94
+ expect(mergeSucceeded.length).toBeGreaterThanOrEqual(30);
95
+ // All three workers should have contributed at least COMMITS_PER_WORKER merges
96
+ for (const worker of workers) {
97
+ const wMerges = mergeSucceeded.filter((e) => e.worker === worker);
98
+ expect(wMerges.length).toBeGreaterThanOrEqual(COMMITS_PER_WORKER);
99
+ }
100
+ }, 120000);
101
+ it('leader branch has merge commits after all workers finish', async () => {
102
+ const COMMITS_PER_WORKER = 3; // smaller count for speed
103
+ const eventLog = orchestratorEventLogPath(fixture.repoRoot, fixture.teamName);
104
+ const workers = ['worker-1', 'worker-2', 'worker-3'];
105
+ const mergeCountPerWorker = { 'worker-1': 0, 'worker-2': 0, 'worker-3': 0 };
106
+ // Serialized commit→wait-for-merge per worker to prevent coalescing
107
+ for (const worker of workers) {
108
+ for (let i = 1; i <= COMMITS_PER_WORKER; i++) {
109
+ await fixture.commitFile(worker, `${worker}/f${i}.ts`, `// ${worker} f${i}\n`);
110
+ mergeCountPerWorker[worker] += 1;
111
+ await waitForEventInLog({
112
+ eventLogPath: eventLog,
113
+ eventType: 'merge_succeeded',
114
+ worker,
115
+ count: mergeCountPerWorker[worker],
116
+ timeoutMs: process.platform === 'win32' ? 15000 : 5000,
117
+ });
118
+ // Update count to include any rebase-induced merges
119
+ const currentEvents = readEventLog(eventLog);
120
+ mergeCountPerWorker[worker] = currentEvents.filter((e) => e.type === 'merge_succeeded' && e.worker === worker).length;
121
+ }
122
+ }
123
+ // Drain to ensure all merges are flushed
124
+ await handle.drainAndStop();
125
+ // Verify leader branch has merge commits via git log.
126
+ // Each worker's user commits produce ≥1 merge commit each.
127
+ // Rebase-induced merges may add more. Assert at least one worker's
128
+ // commits made it in as merge commits.
129
+ const { execFileSync } = await import('node:child_process');
130
+ const logOutput = execFileSync('git', ['log', '--merges', '--oneline', fixture.leaderBranch], {
131
+ cwd: fixture.repoRoot,
132
+ encoding: 'utf-8',
133
+ stdio: 'pipe',
134
+ }).trim();
135
+ const mergeCommitLines = logOutput.split('\n').filter((l) => l.trim().length > 0);
136
+ // At least one merge per worker (3 workers × 1 = 3 minimum)
137
+ expect(mergeCommitLines.length).toBeGreaterThanOrEqual(workers.length);
138
+ }, 60000);
139
+ it('leader inbox has merge notifications', async () => {
140
+ await fixture.commitFile('worker-1', 'worker-1/notify.ts', '// notify test\n');
141
+ const eventLog = orchestratorEventLogPath(fixture.repoRoot, fixture.teamName);
142
+ await waitForEventInLog({ eventLogPath: eventLog, eventType: 'merge_succeeded', worker: 'worker-1', timeoutMs: 8000 });
143
+ // Leader inbox should have been created and seeded by orchestrator startup
144
+ const leaderInboxPath = join(fixture.repoRoot, '.omcp', 'state', 'team', fixture.teamName, 'leader', 'inbox.md');
145
+ expect(existsSync(leaderInboxPath)).toBe(true);
146
+ });
147
+ it('orchestrator state is consistent across registerWorker calls', async () => {
148
+ const state = handle.getState();
149
+ expect(state.workers).toContain('worker-1');
150
+ expect(state.workers).toContain('worker-2');
151
+ expect(state.workers).toContain('worker-3');
152
+ expect(state.workers.length).toBe(3);
153
+ });
154
+ });
155
+ // ---------------------------------------------------------------------------
156
+ // Leader branch name guard — never main/master (M3 compliance check)
157
+ // ---------------------------------------------------------------------------
158
+ describe('M3 compliance: fixture never uses main/master', () => {
159
+ it('fixture rejects main as leader branch', async () => {
160
+ await expect(createGitFixture({ workerCount: 1, leaderBranchName: 'main' })).rejects.toThrow(/main\/master/);
161
+ });
162
+ it('fixture rejects master as leader branch', async () => {
163
+ await expect(createGitFixture({ workerCount: 1, leaderBranchName: 'master' })).rejects.toThrow(/main\/master/);
164
+ });
165
+ it('orchestrator rejects main leader branch', async () => {
166
+ const fixture = await createGitFixture({ workerCount: 1 });
167
+ try {
168
+ process.env.OMC_RUNTIME_V2 = '1';
169
+ const config = {
170
+ teamName: fixture.teamName,
171
+ repoRoot: fixture.repoRoot,
172
+ leaderBranch: 'main', // should be rejected
173
+ cwd: fixture.repoRoot,
174
+ };
175
+ await expect(startMergeOrchestrator(config)).rejects.toThrow(/main\/master/);
176
+ }
177
+ finally {
178
+ await fixture.cleanup();
179
+ }
180
+ });
181
+ });
182
+ //# sourceMappingURL=worktree-runtime-e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-runtime-e2e.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/worktree-runtime-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export declare const LEGACY_TEAM_MCP_TOOLS: readonly ["team_send_message", "team_broadcast", "team_mailbox_list", "team_mailbox_mark_delivered", "team_mailbox_mark_notified", "team_create_task", "team_read_task", "team_list_tasks", "team_update_task", "team_claim_task", "team_transition_task_status", "team_release_task_claim", "team_read_config", "team_read_manifest", "team_read_worker_status", "team_read_worker_heartbeat", "team_update_worker_heartbeat", "team_write_worker_inbox", "team_write_worker_identity", "team_append_event", "team_get_summary", "team_cleanup", "team_write_shutdown_request", "team_read_shutdown_ack", "team_read_monitor_snapshot", "team_write_monitor_snapshot", "team_read_task_approval", "team_write_task_approval"];
1
2
  export declare const TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "read-worker-heartbeat", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "get-summary", "cleanup", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval", "orphan-cleanup"];
2
3
  export type TeamApiOperation = typeof TEAM_API_OPERATIONS[number];
3
4
  export type TeamApiEnvelope = {
@@ -12,7 +13,7 @@ export type TeamApiEnvelope = {
12
13
  message: string;
13
14
  };
14
15
  };
15
- export declare function resolveTeamApiCliCommand(_env?: NodeJS.ProcessEnv): 'omcp team api';
16
+ export declare function resolveTeamApiCliCommand(env?: NodeJS.ProcessEnv): 'omcp team api' | 'omx team api';
16
17
  export declare function resolveTeamApiOperation(name: string): TeamApiOperation | null;
17
18
  export declare function buildLegacyTeamDeprecationHint(legacyName: string, originalArgs?: Record<string, unknown>, env?: NodeJS.ProcessEnv): string;
18
19
  export declare function executeTeamApiOperation(operation: TeamApiOperation, args: Record<string, unknown>, fallbackCwd: string): Promise<TeamApiEnvelope>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-interop.d.ts","sourceRoot":"","sources":["../../src/team/api-interop.ts"],"names":[],"mappings":"AAsDA,eAAO,MAAM,mBAAmB,skBA8BtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAgDrG,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CAE/F;AAoHD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAG7E;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAQR;AA4ID,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAkb1B"}
1
+ {"version":3,"file":"api-interop.d.ts","sourceRoot":"","sources":["../../src/team/api-interop.ts"],"names":[],"mappings":"AAwDA,eAAO,MAAM,qBAAqB,gsBA6BxB,CAAC;AAEX,eAAO,MAAM,mBAAmB,skBA8BtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAkDrG,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,GAAG,cAAc,CAc/G;AA4JD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAG7E;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAQR;AAwJD,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CA2c1B"}
@@ -6,9 +6,42 @@ import { queueBroadcastMailboxMessage, queueDirectMailboxMessage } from './mcp-c
6
6
  import { injectToLeaderPane, sendToWorker } from './tmux-session.js';
7
7
  import { listDispatchRequests, markDispatchRequestDelivered, markDispatchRequestNotified } from './dispatch-queue.js';
8
8
  import { generateMailboxTriggerMessage } from './worker-bootstrap.js';
9
+ import { shutdownTeam } from './runtime.js';
9
10
  import { shutdownTeamV2 } from './runtime-v2.js';
11
+ import { inspectTeamWorktreeCleanupSafety } from './git-worktree.js';
12
+ import { createSwallowedErrorLogger } from '../lib/swallowed-error.js';
10
13
  const TEAM_UPDATE_TASK_MUTABLE_FIELDS = new Set(['subject', 'description', 'blocked_by', 'requires_code_change']);
11
14
  const TEAM_UPDATE_TASK_REQUEST_FIELDS = new Set(['team_name', 'task_id', 'workingDirectory', ...TEAM_UPDATE_TASK_MUTABLE_FIELDS]);
15
+ export const LEGACY_TEAM_MCP_TOOLS = [
16
+ 'team_send_message',
17
+ 'team_broadcast',
18
+ 'team_mailbox_list',
19
+ 'team_mailbox_mark_delivered',
20
+ 'team_mailbox_mark_notified',
21
+ 'team_create_task',
22
+ 'team_read_task',
23
+ 'team_list_tasks',
24
+ 'team_update_task',
25
+ 'team_claim_task',
26
+ 'team_transition_task_status',
27
+ 'team_release_task_claim',
28
+ 'team_read_config',
29
+ 'team_read_manifest',
30
+ 'team_read_worker_status',
31
+ 'team_read_worker_heartbeat',
32
+ 'team_update_worker_heartbeat',
33
+ 'team_write_worker_inbox',
34
+ 'team_write_worker_identity',
35
+ 'team_append_event',
36
+ 'team_get_summary',
37
+ 'team_cleanup',
38
+ 'team_write_shutdown_request',
39
+ 'team_read_shutdown_ack',
40
+ 'team_read_monitor_snapshot',
41
+ 'team_write_monitor_snapshot',
42
+ 'team_read_task_approval',
43
+ 'team_write_task_approval',
44
+ ];
12
45
  export const TEAM_API_OPERATIONS = [
13
46
  'send-message',
14
47
  'broadcast',
@@ -75,23 +108,53 @@ function parseTeamWorkerEnv(raw) {
75
108
  return { teamName: match[1], workerName: match[2] };
76
109
  }
77
110
  function parseTeamWorkerContextFromEnv(env = process.env) {
78
- return parseTeamWorkerEnv(env.OMC_TEAM_WORKER);
111
+ return parseTeamWorkerEnv(env.OMC_TEAM_WORKER) ?? parseTeamWorkerEnv(env.OMX_TEAM_WORKER);
79
112
  }
80
113
  function readTeamStateRootFromEnv(env = process.env) {
81
114
  const candidate = typeof env.OMC_TEAM_STATE_ROOT === 'string' && env.OMC_TEAM_STATE_ROOT.trim() !== ''
82
115
  ? env.OMC_TEAM_STATE_ROOT.trim()
83
- : '';
116
+ : (typeof env.OMX_TEAM_STATE_ROOT === 'string' && env.OMX_TEAM_STATE_ROOT.trim() !== ''
117
+ ? env.OMX_TEAM_STATE_ROOT.trim()
118
+ : '');
84
119
  return candidate || null;
85
120
  }
86
- export function resolveTeamApiCliCommand(_env = process.env) {
121
+ export function resolveTeamApiCliCommand(env = process.env) {
122
+ const hasOmcContext = ((typeof env.OMC_TEAM_WORKER === 'string' && env.OMC_TEAM_WORKER.trim() !== '')
123
+ || (typeof env.OMC_TEAM_STATE_ROOT === 'string' && env.OMC_TEAM_STATE_ROOT.trim() !== ''));
124
+ if (hasOmcContext)
125
+ return 'omcp team api';
126
+ const hasOmxContext = ((typeof env.OMX_TEAM_WORKER === 'string' && env.OMX_TEAM_WORKER.trim() !== '')
127
+ || (typeof env.OMX_TEAM_STATE_ROOT === 'string' && env.OMX_TEAM_STATE_ROOT.trim() !== ''));
128
+ if (hasOmxContext)
129
+ return 'omx team api';
87
130
  return 'omcp team api';
88
131
  }
89
132
  function isRuntimeV2Config(config) {
90
133
  return !!config && typeof config === 'object' && Array.isArray(config.workers);
91
134
  }
135
+ function isLegacyRuntimeConfig(config) {
136
+ return !!config && typeof config === 'object' && Array.isArray(config.agentTypes);
137
+ }
138
+ function assertNoNativeWorktreeCleanupEvidence(teamName, cwd) {
139
+ const safety = inspectTeamWorktreeCleanupSafety(teamName, cwd);
140
+ if (!safety.hasEvidence)
141
+ return;
142
+ const evidence = safety.blockers.length > 0
143
+ ? safety.blockers
144
+ : safety.entries.map((entry) => ({
145
+ workerName: entry.workerName,
146
+ path: entry.path,
147
+ reason: 'worktree_cleanup_evidence_present',
148
+ }));
149
+ const details = evidence
150
+ .map((item) => `${item.workerName}:${item.reason}:${item.path}`)
151
+ .join(';');
152
+ throw new Error(`cleanup_blocked:worktree_cleanup_evidence_present:${details}`);
153
+ }
92
154
  async function executeTeamCleanupViaRuntime(teamName, cwd) {
93
155
  const config = await teamReadConfig(teamName, cwd);
94
156
  if (!config) {
157
+ assertNoNativeWorktreeCleanupEvidence(teamName, cwd);
95
158
  await teamCleanup(teamName, cwd);
96
159
  return;
97
160
  }
@@ -99,6 +162,18 @@ async function executeTeamCleanupViaRuntime(teamName, cwd) {
99
162
  await shutdownTeamV2(teamName, cwd);
100
163
  return;
101
164
  }
165
+ if (isLegacyRuntimeConfig(config)) {
166
+ const legacyConfig = config;
167
+ const sessionName = typeof legacyConfig.tmuxSession === 'string' && legacyConfig.tmuxSession.trim() !== ''
168
+ ? legacyConfig.tmuxSession.trim()
169
+ : `omc-team-${teamName}`;
170
+ const leaderPaneId = typeof legacyConfig.leaderPaneId === 'string' && legacyConfig.leaderPaneId.trim() !== ''
171
+ ? legacyConfig.leaderPaneId.trim()
172
+ : undefined;
173
+ await shutdownTeam(teamName, sessionName, cwd, 30_000, undefined, leaderPaneId, legacyConfig.tmuxOwnsWindow === true);
174
+ return;
175
+ }
176
+ assertNoNativeWorktreeCleanupEvidence(teamName, cwd);
102
177
  await teamCleanup(teamName, cwd);
103
178
  }
104
179
  function readTeamStateRootFromFile(path) {
@@ -149,9 +224,11 @@ function resolveTeamWorkingDirectoryFromMetadata(teamName, candidateCwd, workerC
149
224
  const fromConfig = readTeamStateRootFromFile(join(teamRoot, 'config.json'));
150
225
  if (fromConfig)
151
226
  return stateRootToWorkingDirectory(fromConfig);
152
- const fromManifest = readTeamStateRootFromFile(join(teamRoot, 'manifest.v2.json'));
153
- if (fromManifest)
154
- return stateRootToWorkingDirectory(fromManifest);
227
+ for (const manifestName of ['manifest.json', 'manifest.v2.json']) {
228
+ const fromManifest = readTeamStateRootFromFile(join(teamRoot, manifestName));
229
+ if (fromManifest)
230
+ return stateRootToWorkingDirectory(fromManifest);
231
+ }
155
232
  return null;
156
233
  }
157
234
  function resolveTeamWorkingDirectory(teamName, preferredCwd) {
@@ -160,7 +237,10 @@ function resolveTeamWorkingDirectory(teamName, preferredCwd) {
160
237
  return preferredCwd;
161
238
  const envTeamStateRoot = readTeamStateRootFromEnv();
162
239
  if (typeof envTeamStateRoot === 'string' && envTeamStateRoot.trim() !== '') {
163
- return stateRootToWorkingDirectory(envTeamStateRoot.trim());
240
+ const envWorkingDirectory = stateRootToWorkingDirectory(envTeamStateRoot.trim());
241
+ if (teamStateExists(normalizedTeamName, envWorkingDirectory)) {
242
+ return envWorkingDirectory;
243
+ }
164
244
  }
165
245
  const seeds = [];
166
246
  for (const seed of [preferredCwd, process.cwd()]) {
@@ -204,6 +284,10 @@ export function buildLegacyTeamDeprecationHint(legacyName, originalArgs, env = p
204
284
  }
205
285
  const QUEUED_FOR_HOOK_DISPATCH_REASON = 'queued_for_hook_dispatch';
206
286
  const LEADER_PANE_MISSING_MAILBOX_PERSISTED_REASON = 'leader_pane_missing_mailbox_persisted';
287
+ const WORKTREE_TRIGGER_STATE_ROOT = '$OMC_TEAM_STATE_ROOT';
288
+ function resolveInstructionStateRoot(worktreePath) {
289
+ return worktreePath ? WORKTREE_TRIGGER_STATE_ROOT : undefined;
290
+ }
207
291
  function queuedForHookDispatch() {
208
292
  return {
209
293
  ok: true,
@@ -246,6 +330,7 @@ function findWorkerDispatchTarget(teamName, toWorker, cwd) {
246
330
  return {
247
331
  paneId: recipient?.pane_id,
248
332
  workerIndex: recipient?.index,
333
+ instructionStateRoot: resolveInstructionStateRoot(recipient?.worktree_path),
249
334
  };
250
335
  });
251
336
  }
@@ -257,17 +342,19 @@ async function findMailboxDispatchRequestId(teamName, workerName, messageId, cwd
257
342
  return matching[0]?.request_id ?? null;
258
343
  }
259
344
  async function syncMailboxDispatchNotified(teamName, workerName, messageId, cwd) {
345
+ const logDispatchSyncFailure = createSwallowedErrorLogger('team.api-interop syncMailboxDispatchNotified dispatch state sync failed');
260
346
  const requestId = await findMailboxDispatchRequestId(teamName, workerName, messageId, cwd);
261
347
  if (!requestId)
262
348
  return;
263
- await markDispatchRequestNotified(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_notified' }, cwd).catch(() => { });
349
+ await markDispatchRequestNotified(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_notified' }, cwd).catch(logDispatchSyncFailure);
264
350
  }
265
351
  async function syncMailboxDispatchDelivered(teamName, workerName, messageId, cwd) {
352
+ const logDispatchSyncFailure = createSwallowedErrorLogger('team.api-interop syncMailboxDispatchDelivered dispatch state sync failed');
266
353
  const requestId = await findMailboxDispatchRequestId(teamName, workerName, messageId, cwd);
267
354
  if (!requestId)
268
355
  return;
269
- await markDispatchRequestNotified(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_delivered' }, cwd).catch(() => { });
270
- await markDispatchRequestDelivered(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_delivered' }, cwd).catch(() => { });
356
+ await markDispatchRequestNotified(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_delivered' }, cwd).catch(logDispatchSyncFailure);
357
+ await markDispatchRequestDelivered(teamName, requestId, { message_id: messageId, last_reason: 'mailbox_mark_delivered' }, cwd).catch(logDispatchSyncFailure);
271
358
  }
272
359
  function validateCommonFields(args) {
273
360
  const teamName = String(args.team_name || '').trim();
@@ -311,7 +398,7 @@ export async function executeTeamApiOperation(operation, args, fallbackCwd) {
311
398
  toWorkerIndex: target.workerIndex,
312
399
  toPaneId: target.paneId,
313
400
  body,
314
- triggerMessage: generateMailboxTriggerMessage(teamName, toWorker),
401
+ triggerMessage: generateMailboxTriggerMessage(teamName, toWorker, 1, target.instructionStateRoot),
315
402
  cwd,
316
403
  notify: ({ workerName }, triggerMessage) => notifyMailboxTarget(teamName, workerName, triggerMessage, cwd),
317
404
  deps: {
@@ -338,14 +425,19 @@ export async function executeTeamApiOperation(operation, args, fallbackCwd) {
338
425
  const config = await teamReadConfig(teamName, cwd);
339
426
  const recipients = (config?.workers ?? [])
340
427
  .filter((worker) => worker.name !== fromWorker)
341
- .map((worker) => ({ workerName: worker.name, workerIndex: worker.index, paneId: worker.pane_id }));
428
+ .map((worker) => ({
429
+ workerName: worker.name,
430
+ workerIndex: worker.index,
431
+ paneId: worker.pane_id,
432
+ instructionStateRoot: resolveInstructionStateRoot(worker.worktree_path),
433
+ }));
342
434
  await queueBroadcastMailboxMessage({
343
435
  teamName,
344
436
  fromWorker,
345
437
  recipients,
346
438
  body,
347
439
  cwd,
348
- triggerFor: (workerName) => generateMailboxTriggerMessage(teamName, workerName),
440
+ triggerFor: (workerName) => generateMailboxTriggerMessage(teamName, workerName, 1, recipients.find((recipient) => recipient.workerName === workerName)?.instructionStateRoot),
349
441
  notify: ({ workerName }, triggerMessage) => notifyMailboxTarget(teamName, workerName, triggerMessage, cwd),
350
442
  deps: {
351
443
  sendDirectMessage,
@@ -591,9 +683,11 @@ export async function executeTeamApiOperation(operation, args, fallbackCwd) {
591
683
  pid: args.pid,
592
684
  pane_id: args.pane_id,
593
685
  working_dir: args.working_dir,
686
+ worktree_repo_root: args.worktree_repo_root,
594
687
  worktree_path: args.worktree_path,
595
688
  worktree_branch: args.worktree_branch,
596
689
  worktree_detached: args.worktree_detached,
690
+ worktree_created: args.worktree_created,
597
691
  team_state_root: args.team_state_root,
598
692
  }, cwd);
599
693
  return { ok: true, operation, data: { worker } };
@@ -634,10 +728,23 @@ export async function executeTeamApiOperation(operation, args, fallbackCwd) {
634
728
  return { ok: true, operation, data: { team_name: teamName } };
635
729
  }
636
730
  case 'orphan-cleanup': {
637
- // Destructive escape hatch: always calls teamCleanup directly, bypasses shutdown orchestration
731
+ // Destructive escape hatch: calls teamCleanup directly, bypassing shutdown orchestration.
732
+ // Native worktree recovery metadata/root AGENTS backups are protected unless callers
733
+ // explicitly acknowledge that this force path may delete those recovery records.
638
734
  const teamName = String(args.team_name || '').trim();
639
735
  if (!teamName)
640
736
  return { ok: false, operation, error: { code: 'invalid_input', message: 'team_name is required' } };
737
+ const safety = inspectTeamWorktreeCleanupSafety(teamName, cwd);
738
+ if (safety.hasEvidence && args.acknowledge_lost_worktree_recovery !== true) {
739
+ return {
740
+ ok: false,
741
+ operation,
742
+ error: {
743
+ code: 'invalid_input',
744
+ message: 'orphan_cleanup_blocked:worktree_recovery_evidence_present; pass acknowledge_lost_worktree_recovery=true only after manually preserving or intentionally discarding worker worktrees and root AGENTS backups',
745
+ },
746
+ };
747
+ }
641
748
  await teamCleanup(teamName, cwd);
642
749
  return { ok: true, operation, data: { team_name: teamName } };
643
750
  }