macro-agent 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1339) hide show
  1. package/.gitattributes +3 -0
  2. package/.opentasks/config.json +9 -0
  3. package/.sudocode/issues.jsonl +28 -0
  4. package/.sudocode/specs.jsonl +4 -0
  5. package/CLAUDE.md +433 -201
  6. package/README.md +129 -371
  7. package/dist/acp/index.d.ts +9 -51
  8. package/dist/acp/index.d.ts.map +1 -1
  9. package/dist/acp/index.js +5 -46
  10. package/dist/acp/index.js.map +1 -1
  11. package/dist/acp/macro-agent.d.ts +28 -255
  12. package/dist/acp/macro-agent.d.ts.map +1 -1
  13. package/dist/acp/macro-agent.js +593 -1231
  14. package/dist/acp/macro-agent.js.map +1 -1
  15. package/dist/acp/map-bridge.d.ts +62 -0
  16. package/dist/acp/map-bridge.d.ts.map +1 -0
  17. package/dist/acp/map-bridge.js +123 -0
  18. package/dist/acp/map-bridge.js.map +1 -0
  19. package/dist/acp/session-mapper.d.ts +29 -126
  20. package/dist/acp/session-mapper.d.ts.map +1 -1
  21. package/dist/acp/session-mapper.js +36 -234
  22. package/dist/acp/session-mapper.js.map +1 -1
  23. package/dist/acp/types.d.ts +24 -535
  24. package/dist/acp/types.d.ts.map +1 -1
  25. package/dist/acp/types.js +7 -7
  26. package/dist/acp/types.js.map +1 -1
  27. package/dist/acp/websocket-server.d.ts +16 -136
  28. package/dist/acp/websocket-server.d.ts.map +1 -1
  29. package/dist/acp/websocket-server.js +131 -371
  30. package/dist/acp/websocket-server.js.map +1 -1
  31. package/dist/adapters/federation.d.ts +76 -0
  32. package/dist/adapters/federation.d.ts.map +1 -0
  33. package/dist/adapters/federation.js +120 -0
  34. package/dist/adapters/federation.js.map +1 -0
  35. package/dist/adapters/inbox-adapter.d.ts +72 -0
  36. package/dist/adapters/inbox-adapter.d.ts.map +1 -0
  37. package/dist/adapters/inbox-adapter.js +196 -0
  38. package/dist/adapters/inbox-adapter.js.map +1 -0
  39. package/dist/adapters/inbox-client-adapter.d.ts +40 -0
  40. package/dist/adapters/inbox-client-adapter.d.ts.map +1 -0
  41. package/dist/adapters/inbox-client-adapter.js +135 -0
  42. package/dist/adapters/inbox-client-adapter.js.map +1 -0
  43. package/dist/adapters/index.d.ts +11 -0
  44. package/dist/adapters/index.d.ts.map +1 -0
  45. package/dist/adapters/index.js +10 -0
  46. package/dist/adapters/index.js.map +1 -0
  47. package/dist/adapters/opentasks-daemon.d.ts +32 -0
  48. package/dist/adapters/opentasks-daemon.d.ts.map +1 -0
  49. package/dist/adapters/opentasks-daemon.js +190 -0
  50. package/dist/adapters/opentasks-daemon.js.map +1 -0
  51. package/dist/adapters/tasks-adapter.d.ts +49 -0
  52. package/dist/adapters/tasks-adapter.d.ts.map +1 -0
  53. package/dist/adapters/tasks-adapter.js +209 -0
  54. package/dist/adapters/tasks-adapter.js.map +1 -0
  55. package/dist/adapters/types.d.ts +198 -0
  56. package/dist/adapters/types.d.ts.map +1 -0
  57. package/dist/adapters/types.js +13 -0
  58. package/dist/adapters/types.js.map +1 -0
  59. package/dist/agent/agent-manager-v2.d.ts +38 -0
  60. package/dist/agent/agent-manager-v2.d.ts.map +1 -0
  61. package/dist/agent/agent-manager-v2.js +1097 -0
  62. package/dist/agent/agent-manager-v2.js.map +1 -0
  63. package/dist/agent/agent-manager.d.ts +52 -42
  64. package/dist/agent/agent-manager.d.ts.map +1 -1
  65. package/dist/agent/agent-manager.js +11 -1255
  66. package/dist/agent/agent-manager.js.map +1 -1
  67. package/dist/agent/agent-store.d.ts +89 -0
  68. package/dist/agent/agent-store.d.ts.map +1 -0
  69. package/dist/agent/agent-store.js +279 -0
  70. package/dist/agent/agent-store.js.map +1 -0
  71. package/dist/agent/types.d.ts +7 -0
  72. package/dist/agent/types.d.ts.map +1 -1
  73. package/dist/agent/types.js.map +1 -1
  74. package/dist/api/index.d.ts +5 -3
  75. package/dist/api/index.d.ts.map +1 -1
  76. package/dist/api/index.js +4 -3
  77. package/dist/api/index.js.map +1 -1
  78. package/dist/api/server.d.ts +6 -123
  79. package/dist/api/server.d.ts.map +1 -1
  80. package/dist/api/server.js +247 -1489
  81. package/dist/api/server.js.map +1 -1
  82. package/dist/api/types.d.ts +20 -248
  83. package/dist/api/types.d.ts.map +1 -1
  84. package/dist/api/types.js +3 -1
  85. package/dist/api/types.js.map +1 -1
  86. package/dist/boot-v2.d.ts +165 -0
  87. package/dist/boot-v2.d.ts.map +1 -0
  88. package/dist/boot-v2.js +315 -0
  89. package/dist/boot-v2.js.map +1 -0
  90. package/dist/cli/acp.d.ts +6 -28
  91. package/dist/cli/acp.d.ts.map +1 -1
  92. package/dist/cli/acp.js +39 -373
  93. package/dist/cli/acp.js.map +1 -1
  94. package/dist/cli/index.d.ts +1 -2
  95. package/dist/cli/index.d.ts.map +1 -1
  96. package/dist/cli/index.js +65 -449
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/mcp.d.ts +18 -8
  99. package/dist/cli/mcp.d.ts.map +1 -1
  100. package/dist/cli/mcp.js +231 -282
  101. package/dist/cli/mcp.js.map +1 -1
  102. package/dist/cognitive/analyst-role.d.ts +13 -0
  103. package/dist/cognitive/analyst-role.d.ts.map +1 -0
  104. package/dist/cognitive/analyst-role.js +48 -0
  105. package/dist/cognitive/analyst-role.js.map +1 -0
  106. package/dist/cognitive/index.d.ts +18 -0
  107. package/dist/cognitive/index.d.ts.map +1 -0
  108. package/dist/cognitive/index.js +21 -0
  109. package/dist/cognitive/index.js.map +1 -0
  110. package/dist/cognitive/macro-agent-backend.d.ts +40 -0
  111. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -0
  112. package/dist/cognitive/macro-agent-backend.js +290 -0
  113. package/dist/cognitive/macro-agent-backend.js.map +1 -0
  114. package/dist/cognitive/session-converter.d.ts +30 -0
  115. package/dist/cognitive/session-converter.d.ts.map +1 -0
  116. package/dist/cognitive/session-converter.js +119 -0
  117. package/dist/cognitive/session-converter.js.map +1 -0
  118. package/dist/cognitive/types.d.ts +129 -0
  119. package/dist/cognitive/types.d.ts.map +1 -0
  120. package/dist/cognitive/types.js +12 -0
  121. package/dist/cognitive/types.js.map +1 -0
  122. package/dist/cognitive/workspace-handler.d.ts +46 -0
  123. package/dist/cognitive/workspace-handler.d.ts.map +1 -0
  124. package/dist/cognitive/workspace-handler.js +135 -0
  125. package/dist/cognitive/workspace-handler.js.map +1 -0
  126. package/dist/config/project-config.d.ts +13 -2
  127. package/dist/config/project-config.d.ts.map +1 -1
  128. package/dist/config/project-config.js +12 -2
  129. package/dist/config/project-config.js.map +1 -1
  130. package/dist/control/control-client.d.ts +63 -0
  131. package/dist/control/control-client.d.ts.map +1 -0
  132. package/dist/control/control-client.js +276 -0
  133. package/dist/control/control-client.js.map +1 -0
  134. package/dist/control/control-server.d.ts +46 -0
  135. package/dist/control/control-server.d.ts.map +1 -0
  136. package/dist/control/control-server.js +237 -0
  137. package/dist/control/control-server.js.map +1 -0
  138. package/dist/control/index.d.ts +9 -0
  139. package/dist/control/index.d.ts.map +1 -0
  140. package/dist/control/index.js +8 -0
  141. package/dist/control/index.js.map +1 -0
  142. package/dist/control/types.d.ts +64 -0
  143. package/dist/control/types.d.ts.map +1 -0
  144. package/dist/control/types.js +10 -0
  145. package/dist/control/types.js.map +1 -0
  146. package/dist/index.d.ts +15 -16
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +17 -34
  149. package/dist/index.js.map +1 -1
  150. package/dist/integrations/context-builder.d.ts +49 -0
  151. package/dist/integrations/context-builder.d.ts.map +1 -0
  152. package/dist/integrations/context-builder.js +160 -0
  153. package/dist/integrations/context-builder.js.map +1 -0
  154. package/dist/integrations/sessionlog.d.ts +58 -0
  155. package/dist/integrations/sessionlog.d.ts.map +1 -0
  156. package/dist/integrations/sessionlog.js +152 -0
  157. package/dist/integrations/sessionlog.js.map +1 -0
  158. package/dist/integrations/skilltree.d.ts +53 -0
  159. package/dist/integrations/skilltree.d.ts.map +1 -0
  160. package/dist/integrations/skilltree.js +140 -0
  161. package/dist/integrations/skilltree.js.map +1 -0
  162. package/dist/lifecycle/cleanup.d.ts +5 -14
  163. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  164. package/dist/lifecycle/cleanup.js +4 -34
  165. package/dist/lifecycle/cleanup.js.map +1 -1
  166. package/dist/lifecycle/handlers-v2.d.ts +33 -0
  167. package/dist/lifecycle/handlers-v2.d.ts.map +1 -0
  168. package/dist/lifecycle/handlers-v2.js +319 -0
  169. package/dist/lifecycle/handlers-v2.js.map +1 -0
  170. package/dist/lifecycle/index.d.ts +3 -5
  171. package/dist/lifecycle/index.d.ts.map +1 -1
  172. package/dist/lifecycle/index.js +3 -12
  173. package/dist/lifecycle/index.js.map +1 -1
  174. package/dist/lifecycle/types.d.ts +2 -0
  175. package/dist/lifecycle/types.d.ts.map +1 -1
  176. package/dist/lifecycle/types.js.map +1 -1
  177. package/dist/map/acp-bridge.d.ts +39 -0
  178. package/dist/map/acp-bridge.d.ts.map +1 -0
  179. package/dist/map/acp-bridge.js +180 -0
  180. package/dist/map/acp-bridge.js.map +1 -0
  181. package/dist/map/cc-swarm-hooks.d.ts +36 -0
  182. package/dist/map/cc-swarm-hooks.d.ts.map +1 -0
  183. package/dist/map/cc-swarm-hooks.js +218 -0
  184. package/dist/map/cc-swarm-hooks.js.map +1 -0
  185. package/dist/map/coordination-handler.d.ts +36 -0
  186. package/dist/map/coordination-handler.d.ts.map +1 -0
  187. package/dist/map/coordination-handler.js +166 -0
  188. package/dist/map/coordination-handler.js.map +1 -0
  189. package/dist/map/index.d.ts +5 -10
  190. package/dist/map/index.d.ts.map +1 -1
  191. package/dist/map/index.js +4 -13
  192. package/dist/map/index.js.map +1 -1
  193. package/dist/map/lifecycle-bridge.d.ts +34 -0
  194. package/dist/map/lifecycle-bridge.d.ts.map +1 -0
  195. package/dist/map/lifecycle-bridge.js +96 -0
  196. package/dist/map/lifecycle-bridge.js.map +1 -0
  197. package/dist/map/server.d.ts +38 -0
  198. package/dist/map/server.d.ts.map +1 -0
  199. package/dist/map/server.js +461 -0
  200. package/dist/map/server.js.map +1 -0
  201. package/dist/map/sidecar.d.ts +24 -0
  202. package/dist/map/sidecar.d.ts.map +1 -0
  203. package/dist/map/sidecar.js +263 -0
  204. package/dist/map/sidecar.js.map +1 -0
  205. package/dist/map/task-bridge.d.ts +22 -0
  206. package/dist/map/task-bridge.d.ts.map +1 -0
  207. package/dist/map/task-bridge.js +67 -0
  208. package/dist/map/task-bridge.js.map +1 -0
  209. package/dist/map/trajectory-reporter.d.ts +24 -0
  210. package/dist/map/trajectory-reporter.d.ts.map +1 -0
  211. package/dist/map/trajectory-reporter.js +86 -0
  212. package/dist/map/trajectory-reporter.js.map +1 -0
  213. package/dist/map/types.d.ts +162 -226
  214. package/dist/map/types.d.ts.map +1 -1
  215. package/dist/map/types.js +6 -165
  216. package/dist/map/types.js.map +1 -1
  217. package/dist/mcp/index.d.ts +2 -2
  218. package/dist/mcp/index.d.ts.map +1 -1
  219. package/dist/mcp/index.js +2 -2
  220. package/dist/mcp/index.js.map +1 -1
  221. package/dist/mcp/mcp-server-v2.d.ts +44 -0
  222. package/dist/mcp/mcp-server-v2.d.ts.map +1 -0
  223. package/dist/mcp/mcp-server-v2.js +376 -0
  224. package/dist/mcp/mcp-server-v2.js.map +1 -0
  225. package/dist/mcp/tools/done-v2.d.ts +57 -0
  226. package/dist/mcp/tools/done-v2.d.ts.map +1 -0
  227. package/dist/mcp/tools/done-v2.js +129 -0
  228. package/dist/mcp/tools/done-v2.js.map +1 -0
  229. package/dist/metrics/index.d.ts +7 -1
  230. package/dist/metrics/index.d.ts.map +1 -1
  231. package/dist/metrics/index.js +6 -1
  232. package/dist/metrics/index.js.map +1 -1
  233. package/dist/metrics/metrics.d.ts +9 -70
  234. package/dist/metrics/metrics.d.ts.map +1 -1
  235. package/dist/metrics/metrics.js +89 -145
  236. package/dist/metrics/metrics.js.map +1 -1
  237. package/dist/metrics/types.d.ts +44 -0
  238. package/dist/metrics/types.d.ts.map +1 -0
  239. package/dist/metrics/types.js +7 -0
  240. package/dist/metrics/types.js.map +1 -0
  241. package/dist/roles/builtin/coordinator.d.ts.map +1 -1
  242. package/dist/roles/builtin/coordinator.js +2 -1
  243. package/dist/roles/builtin/coordinator.js.map +1 -1
  244. package/dist/roles/builtin/integrator.d.ts.map +1 -1
  245. package/dist/roles/builtin/integrator.js +2 -1
  246. package/dist/roles/builtin/integrator.js.map +1 -1
  247. package/dist/roles/builtin/worker.d.ts.map +1 -1
  248. package/dist/roles/builtin/worker.js +3 -1
  249. package/dist/roles/builtin/worker.js.map +1 -1
  250. package/dist/roles/capabilities.d.ts +6 -0
  251. package/dist/roles/capabilities.d.ts.map +1 -1
  252. package/dist/roles/capabilities.js +10 -0
  253. package/dist/roles/capabilities.js.map +1 -1
  254. package/dist/roles/config-loader.d.ts +1 -1
  255. package/dist/roles/config-loader.d.ts.map +1 -1
  256. package/dist/roles/config-loader.js +3 -2
  257. package/dist/roles/config-loader.js.map +1 -1
  258. package/dist/roles/types.d.ts +3 -1
  259. package/dist/roles/types.d.ts.map +1 -1
  260. package/dist/store/index.d.ts +3 -6
  261. package/dist/store/index.d.ts.map +1 -1
  262. package/dist/store/index.js +3 -21
  263. package/dist/store/index.js.map +1 -1
  264. package/dist/store/types/agents.d.ts +5 -0
  265. package/dist/store/types/agents.d.ts.map +1 -1
  266. package/dist/store/types/events.d.ts +3 -60
  267. package/dist/store/types/events.d.ts.map +1 -1
  268. package/dist/store/types/events.js +3 -46
  269. package/dist/store/types/events.js.map +1 -1
  270. package/dist/store/types/index.d.ts +0 -3
  271. package/dist/store/types/index.d.ts.map +1 -1
  272. package/dist/store/types/index.js +0 -3
  273. package/dist/store/types/index.js.map +1 -1
  274. package/dist/teams/index.d.ts +2 -2
  275. package/dist/teams/index.d.ts.map +1 -1
  276. package/dist/teams/index.js +1 -1
  277. package/dist/teams/index.js.map +1 -1
  278. package/dist/teams/seed-defaults.d.ts +20 -0
  279. package/dist/teams/seed-defaults.d.ts.map +1 -0
  280. package/dist/teams/seed-defaults.js +71 -0
  281. package/dist/teams/seed-defaults.js.map +1 -0
  282. package/dist/teams/team-loader.d.ts +6 -2
  283. package/dist/teams/team-loader.d.ts.map +1 -1
  284. package/dist/teams/team-loader.js +154 -162
  285. package/dist/teams/team-loader.js.map +1 -1
  286. package/dist/teams/team-manager-v2.d.ts +87 -0
  287. package/dist/teams/team-manager-v2.d.ts.map +1 -0
  288. package/dist/teams/team-manager-v2.js +203 -0
  289. package/dist/teams/team-manager-v2.js.map +1 -0
  290. package/dist/teams/team-runtime-v2.d.ts +149 -0
  291. package/dist/teams/team-runtime-v2.d.ts.map +1 -0
  292. package/dist/teams/team-runtime-v2.js +741 -0
  293. package/dist/teams/team-runtime-v2.js.map +1 -0
  294. package/dist/teams/types.d.ts +41 -151
  295. package/dist/teams/types.d.ts.map +1 -1
  296. package/dist/teams/types.js +2 -3
  297. package/dist/teams/types.js.map +1 -1
  298. package/dist/trigger/index.d.ts +2 -2
  299. package/dist/trigger/index.d.ts.map +1 -1
  300. package/dist/trigger/index.js +4 -4
  301. package/dist/trigger/index.js.map +1 -1
  302. package/dist/trigger/sources/cron/cron-service.d.ts +1 -1
  303. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  304. package/dist/trigger/sources/webhook/webhook-handler.d.ts +1 -1
  305. package/dist/trigger/sources/webhook/webhook-handler.d.ts.map +1 -1
  306. package/dist/trigger/strategies/ai-router.d.ts +31 -0
  307. package/dist/trigger/strategies/ai-router.d.ts.map +1 -0
  308. package/dist/trigger/strategies/ai-router.js +132 -0
  309. package/dist/trigger/strategies/ai-router.js.map +1 -0
  310. package/dist/trigger/trigger-system-v2.d.ts +106 -0
  311. package/dist/trigger/trigger-system-v2.d.ts.map +1 -0
  312. package/dist/trigger/trigger-system-v2.js +347 -0
  313. package/dist/trigger/trigger-system-v2.js.map +1 -0
  314. package/dist/trigger/types.d.ts +8 -0
  315. package/dist/trigger/types.d.ts.map +1 -1
  316. package/dist/trigger/types.js.map +1 -1
  317. package/dist/workspace/strategies/optimistic.d.ts +13 -3
  318. package/dist/workspace/strategies/optimistic.d.ts.map +1 -1
  319. package/dist/workspace/strategies/optimistic.js +4 -4
  320. package/dist/workspace/strategies/optimistic.js.map +1 -1
  321. package/docs/design-subsystem-extraction.md +627 -0
  322. package/docs/lifecycle-events-design.md +111 -0
  323. package/docs/openhive-capability-summary.md +415 -0
  324. package/docs/openhive-integration.md +415 -0
  325. package/docs/roadmap-v2-gaps.md +216 -0
  326. package/docs/teams.md +73 -0
  327. package/package.json +26 -6
  328. package/src/__tests__/boot-v2.test.ts +196 -0
  329. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +496 -0
  330. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +365 -0
  331. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +770 -0
  332. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +253 -0
  333. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +282 -0
  334. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +322 -0
  335. package/src/__tests__/e2e/live-agent.e2e.test.ts +1330 -0
  336. package/src/__tests__/e2e/map-server.e2e.test.ts +128 -0
  337. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +139 -0
  338. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +280 -0
  339. package/src/__tests__/e2e/pull-mode.e2e.test.ts +632 -0
  340. package/src/__tests__/e2e/resume-continue.e2e.test.ts +312 -0
  341. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +562 -0
  342. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +1049 -0
  343. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +258 -0
  344. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +257 -0
  345. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +375 -0
  346. package/src/acp/__tests__/macro-agent.test.ts +234 -945
  347. package/src/acp/__tests__/session-mapper.test.ts +82 -155
  348. package/src/acp/__tests__/websocket-server.test.ts +121 -270
  349. package/src/acp/index.ts +18 -118
  350. package/src/acp/macro-agent.ts +692 -1752
  351. package/src/acp/map-bridge.ts +193 -0
  352. package/src/acp/session-mapper.ts +43 -276
  353. package/src/acp/types.ts +39 -767
  354. package/src/acp/websocket-server.ts +152 -588
  355. package/src/adapters/__tests__/federation.test.ts +256 -0
  356. package/src/adapters/__tests__/inbox-adapter.test.ts +316 -0
  357. package/src/adapters/__tests__/tasks-adapter.test.ts +269 -0
  358. package/src/adapters/federation.ts +185 -0
  359. package/src/adapters/inbox-adapter.ts +292 -0
  360. package/src/adapters/inbox-client-adapter.ts +173 -0
  361. package/src/adapters/index.ts +44 -0
  362. package/src/adapters/opentasks-daemon.ts +252 -0
  363. package/src/adapters/tasks-adapter.ts +327 -0
  364. package/src/adapters/types.ts +285 -0
  365. package/src/agent/__tests__/agent-manager-v2.test.ts +554 -0
  366. package/src/agent/__tests__/agent-store.test.ts +413 -0
  367. package/src/agent/agent-manager-v2.ts +1476 -0
  368. package/src/agent/agent-manager.ts +41 -1723
  369. package/src/agent/agent-store.ts +385 -0
  370. package/src/agent/types.ts +9 -0
  371. package/src/api/__tests__/server.test.ts +238 -961
  372. package/src/api/index.ts +5 -3
  373. package/src/api/server.ts +276 -1870
  374. package/src/api/types.ts +25 -337
  375. package/src/boot-v2.ts +527 -0
  376. package/src/cli/acp.ts +40 -435
  377. package/src/cli/index.ts +68 -466
  378. package/src/cli/mcp.ts +260 -326
  379. package/src/cognitive/__tests__/macro-agent-backend.test.ts +478 -0
  380. package/src/cognitive/__tests__/session-converter.test.ts +423 -0
  381. package/src/cognitive/__tests__/workspace-handler.test.ts +221 -0
  382. package/src/cognitive/analyst-role.ts +59 -0
  383. package/src/cognitive/index.ts +49 -0
  384. package/src/cognitive/macro-agent-backend.ts +354 -0
  385. package/src/cognitive/session-converter.ts +151 -0
  386. package/src/cognitive/types.ts +163 -0
  387. package/src/cognitive/workspace-handler.ts +163 -0
  388. package/src/config/project-config.ts +27 -3
  389. package/src/control/__tests__/control-resilience.test.ts +251 -0
  390. package/src/control/__tests__/control-socket.test.ts +240 -0
  391. package/src/control/control-client.ts +337 -0
  392. package/src/control/control-server.ts +298 -0
  393. package/src/control/index.ts +17 -0
  394. package/src/control/types.ts +95 -0
  395. package/src/index.ts +43 -222
  396. package/src/integrations/__tests__/context-builder.test.ts +218 -0
  397. package/src/integrations/__tests__/sessionlog.test.ts +498 -0
  398. package/src/integrations/__tests__/skilltree.test.ts +136 -0
  399. package/src/integrations/context-builder.ts +280 -0
  400. package/src/integrations/sessionlog.ts +194 -0
  401. package/src/integrations/skilltree.ts +183 -0
  402. package/src/lifecycle/__tests__/handlers-v2.test.ts +565 -0
  403. package/src/lifecycle/cleanup.ts +6 -46
  404. package/src/lifecycle/handlers-v2.ts +437 -0
  405. package/src/lifecycle/index.ts +2 -28
  406. package/src/lifecycle/types.ts +3 -0
  407. package/src/map/__tests__/lifecycle-bridge.test.ts +223 -0
  408. package/src/map/__tests__/permission-forwarding.test.ts +143 -0
  409. package/src/map/__tests__/sidecar-integration.test.ts +190 -0
  410. package/src/map/__tests__/task-bridge.test.ts +153 -0
  411. package/src/map/__tests__/trajectory-reporter.test.ts +173 -0
  412. package/src/map/acp-bridge.ts +270 -0
  413. package/src/map/cc-swarm-hooks.ts +242 -0
  414. package/src/map/coordination-handler.ts +220 -0
  415. package/src/map/index.ts +13 -14
  416. package/src/map/lifecycle-bridge.ts +140 -0
  417. package/src/map/server.ts +527 -0
  418. package/src/map/sidecar.ts +312 -0
  419. package/src/map/task-bridge.ts +89 -0
  420. package/src/map/trajectory-reporter.ts +124 -0
  421. package/src/map/types.ts +195 -367
  422. package/src/mcp/__tests__/mcp-server-v2.test.ts +236 -0
  423. package/src/mcp/index.ts +2 -2
  424. package/src/mcp/mcp-server-v2.ts +485 -0
  425. package/src/mcp/tools/done-v2.ts +203 -0
  426. package/src/metrics/__tests__/metrics.test.ts +205 -0
  427. package/src/metrics/index.ts +13 -9
  428. package/src/metrics/metrics.ts +110 -239
  429. package/src/metrics/types.ts +63 -0
  430. package/src/roles/builtin/coordinator.ts +2 -0
  431. package/src/roles/builtin/integrator.ts +2 -0
  432. package/src/roles/builtin/worker.ts +3 -0
  433. package/src/roles/capabilities.ts +11 -0
  434. package/src/roles/config-loader.ts +3 -2
  435. package/src/roles/types.ts +7 -0
  436. package/src/store/index.ts +3 -64
  437. package/src/store/types/agents.ts +5 -0
  438. package/src/store/types/events.ts +5 -100
  439. package/src/store/types/index.ts +0 -3
  440. package/src/teams/__tests__/team-manager-v2.test.ts +425 -0
  441. package/src/teams/__tests__/team-runtime-v2.test.ts +402 -0
  442. package/src/teams/index.ts +20 -4
  443. package/src/teams/seed-defaults.ts +79 -0
  444. package/src/teams/team-loader.ts +200 -234
  445. package/src/teams/team-manager-v2.ts +268 -0
  446. package/src/teams/team-runtime-v2.ts +898 -0
  447. package/src/teams/types.ts +99 -200
  448. package/src/trigger/__tests__/trigger-system-v2.test.ts +257 -0
  449. package/src/trigger/index.ts +16 -31
  450. package/src/trigger/sources/cron/cron-service.ts +1 -1
  451. package/src/trigger/sources/webhook/webhook-handler.ts +1 -1
  452. package/src/trigger/strategies/ai-router.ts +170 -0
  453. package/src/trigger/trigger-system-v2.ts +536 -0
  454. package/src/trigger/types.ts +13 -0
  455. package/src/workspace/strategies/optimistic.ts +9 -6
  456. package/.claude/settings.local.json +0 -61
  457. package/dist/acp/websocket-stream.d.ts +0 -30
  458. package/dist/acp/websocket-stream.d.ts.map +0 -1
  459. package/dist/acp/websocket-stream.js +0 -118
  460. package/dist/acp/websocket-stream.js.map +0 -1
  461. package/dist/activity/deduplication.d.ts +0 -85
  462. package/dist/activity/deduplication.d.ts.map +0 -1
  463. package/dist/activity/deduplication.js +0 -149
  464. package/dist/activity/deduplication.js.map +0 -1
  465. package/dist/activity/index.d.ts +0 -16
  466. package/dist/activity/index.d.ts.map +0 -1
  467. package/dist/activity/index.js +0 -17
  468. package/dist/activity/index.js.map +0 -1
  469. package/dist/activity/relevance.d.ts +0 -81
  470. package/dist/activity/relevance.d.ts.map +0 -1
  471. package/dist/activity/relevance.js +0 -161
  472. package/dist/activity/relevance.js.map +0 -1
  473. package/dist/activity/types.d.ts +0 -169
  474. package/dist/activity/types.d.ts.map +0 -1
  475. package/dist/activity/types.js +0 -33
  476. package/dist/activity/types.js.map +0 -1
  477. package/dist/activity/watcher.d.ts +0 -64
  478. package/dist/activity/watcher.d.ts.map +0 -1
  479. package/dist/activity/watcher.js +0 -212
  480. package/dist/activity/watcher.js.map +0 -1
  481. package/dist/agent/wake.d.ts +0 -85
  482. package/dist/agent/wake.d.ts.map +0 -1
  483. package/dist/agent/wake.js +0 -278
  484. package/dist/agent/wake.js.map +0 -1
  485. package/dist/lifecycle/handlers/generic.d.ts +0 -27
  486. package/dist/lifecycle/handlers/generic.d.ts.map +0 -1
  487. package/dist/lifecycle/handlers/generic.js +0 -56
  488. package/dist/lifecycle/handlers/generic.js.map +0 -1
  489. package/dist/lifecycle/handlers/index.d.ts +0 -47
  490. package/dist/lifecycle/handlers/index.d.ts.map +0 -1
  491. package/dist/lifecycle/handlers/index.js +0 -93
  492. package/dist/lifecycle/handlers/index.js.map +0 -1
  493. package/dist/lifecycle/handlers/integrator.d.ts +0 -81
  494. package/dist/lifecycle/handlers/integrator.d.ts.map +0 -1
  495. package/dist/lifecycle/handlers/integrator.js +0 -451
  496. package/dist/lifecycle/handlers/integrator.js.map +0 -1
  497. package/dist/lifecycle/handlers/monitor.d.ts +0 -29
  498. package/dist/lifecycle/handlers/monitor.d.ts.map +0 -1
  499. package/dist/lifecycle/handlers/monitor.js +0 -79
  500. package/dist/lifecycle/handlers/monitor.js.map +0 -1
  501. package/dist/lifecycle/handlers/worker.d.ts +0 -56
  502. package/dist/lifecycle/handlers/worker.d.ts.map +0 -1
  503. package/dist/lifecycle/handlers/worker.js +0 -381
  504. package/dist/lifecycle/handlers/worker.js.map +0 -1
  505. package/dist/mail/conversation-map.d.ts +0 -33
  506. package/dist/mail/conversation-map.d.ts.map +0 -1
  507. package/dist/mail/conversation-map.js +0 -61
  508. package/dist/mail/conversation-map.js.map +0 -1
  509. package/dist/mail/index.d.ts +0 -11
  510. package/dist/mail/index.d.ts.map +0 -1
  511. package/dist/mail/index.js +0 -11
  512. package/dist/mail/index.js.map +0 -1
  513. package/dist/mail/mail-service.d.ts +0 -85
  514. package/dist/mail/mail-service.d.ts.map +0 -1
  515. package/dist/mail/mail-service.js +0 -121
  516. package/dist/mail/mail-service.js.map +0 -1
  517. package/dist/mail/stores/eventstore-conversation-store.d.ts +0 -40
  518. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +0 -1
  519. package/dist/mail/stores/eventstore-conversation-store.js +0 -131
  520. package/dist/mail/stores/eventstore-conversation-store.js.map +0 -1
  521. package/dist/mail/stores/eventstore-participant-store.d.ts +0 -43
  522. package/dist/mail/stores/eventstore-participant-store.d.ts.map +0 -1
  523. package/dist/mail/stores/eventstore-participant-store.js +0 -145
  524. package/dist/mail/stores/eventstore-participant-store.js.map +0 -1
  525. package/dist/mail/stores/eventstore-thread-store.d.ts +0 -46
  526. package/dist/mail/stores/eventstore-thread-store.d.ts.map +0 -1
  527. package/dist/mail/stores/eventstore-thread-store.js +0 -118
  528. package/dist/mail/stores/eventstore-thread-store.js.map +0 -1
  529. package/dist/mail/stores/eventstore-turn-store.d.ts +0 -47
  530. package/dist/mail/stores/eventstore-turn-store.d.ts.map +0 -1
  531. package/dist/mail/stores/eventstore-turn-store.js +0 -153
  532. package/dist/mail/stores/eventstore-turn-store.js.map +0 -1
  533. package/dist/mail/stores/index.d.ts +0 -12
  534. package/dist/mail/stores/index.d.ts.map +0 -1
  535. package/dist/mail/stores/index.js +0 -12
  536. package/dist/mail/stores/index.js.map +0 -1
  537. package/dist/mail/stores/types.d.ts +0 -146
  538. package/dist/mail/stores/types.d.ts.map +0 -1
  539. package/dist/mail/stores/types.js +0 -13
  540. package/dist/mail/stores/types.js.map +0 -1
  541. package/dist/mail/turn-recorder.d.ts +0 -30
  542. package/dist/mail/turn-recorder.d.ts.map +0 -1
  543. package/dist/mail/turn-recorder.js +0 -98
  544. package/dist/mail/turn-recorder.js.map +0 -1
  545. package/dist/map/adapter/acp-over-map.d.ts +0 -115
  546. package/dist/map/adapter/acp-over-map.d.ts.map +0 -1
  547. package/dist/map/adapter/acp-over-map.js +0 -1024
  548. package/dist/map/adapter/acp-over-map.js.map +0 -1
  549. package/dist/map/adapter/connection-manager.d.ts +0 -150
  550. package/dist/map/adapter/connection-manager.d.ts.map +0 -1
  551. package/dist/map/adapter/connection-manager.js +0 -207
  552. package/dist/map/adapter/connection-manager.js.map +0 -1
  553. package/dist/map/adapter/event-log.d.ts +0 -87
  554. package/dist/map/adapter/event-log.d.ts.map +0 -1
  555. package/dist/map/adapter/event-log.js +0 -122
  556. package/dist/map/adapter/event-log.js.map +0 -1
  557. package/dist/map/adapter/event-translator.d.ts +0 -85
  558. package/dist/map/adapter/event-translator.d.ts.map +0 -1
  559. package/dist/map/adapter/event-translator.js +0 -295
  560. package/dist/map/adapter/event-translator.js.map +0 -1
  561. package/dist/map/adapter/extensions/agent-detection.d.ts +0 -49
  562. package/dist/map/adapter/extensions/agent-detection.d.ts.map +0 -1
  563. package/dist/map/adapter/extensions/agent-detection.js +0 -91
  564. package/dist/map/adapter/extensions/agent-detection.js.map +0 -1
  565. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +0 -82
  566. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +0 -1
  567. package/dist/map/adapter/extensions/agent-lifecycle.js +0 -164
  568. package/dist/map/adapter/extensions/agent-lifecycle.js.map +0 -1
  569. package/dist/map/adapter/extensions/index.d.ts +0 -89
  570. package/dist/map/adapter/extensions/index.d.ts.map +0 -1
  571. package/dist/map/adapter/extensions/index.js +0 -187
  572. package/dist/map/adapter/extensions/index.js.map +0 -1
  573. package/dist/map/adapter/extensions/mcp-bridge.d.ts +0 -57
  574. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +0 -1
  575. package/dist/map/adapter/extensions/mcp-bridge.js +0 -745
  576. package/dist/map/adapter/extensions/mcp-bridge.js.map +0 -1
  577. package/dist/map/adapter/extensions/rename.d.ts +0 -29
  578. package/dist/map/adapter/extensions/rename.d.ts.map +0 -1
  579. package/dist/map/adapter/extensions/rename.js +0 -49
  580. package/dist/map/adapter/extensions/rename.js.map +0 -1
  581. package/dist/map/adapter/extensions/resume.d.ts +0 -47
  582. package/dist/map/adapter/extensions/resume.d.ts.map +0 -1
  583. package/dist/map/adapter/extensions/resume.js +0 -59
  584. package/dist/map/adapter/extensions/resume.js.map +0 -1
  585. package/dist/map/adapter/extensions/task.d.ts +0 -40
  586. package/dist/map/adapter/extensions/task.d.ts.map +0 -1
  587. package/dist/map/adapter/extensions/task.js +0 -197
  588. package/dist/map/adapter/extensions/task.js.map +0 -1
  589. package/dist/map/adapter/extensions/update-metadata.d.ts +0 -29
  590. package/dist/map/adapter/extensions/update-metadata.d.ts.map +0 -1
  591. package/dist/map/adapter/extensions/update-metadata.js +0 -67
  592. package/dist/map/adapter/extensions/update-metadata.js.map +0 -1
  593. package/dist/map/adapter/extensions/wake.d.ts +0 -60
  594. package/dist/map/adapter/extensions/wake.d.ts.map +0 -1
  595. package/dist/map/adapter/extensions/wake.js +0 -144
  596. package/dist/map/adapter/extensions/wake.js.map +0 -1
  597. package/dist/map/adapter/extensions/workspace-files.d.ts +0 -42
  598. package/dist/map/adapter/extensions/workspace-files.d.ts.map +0 -1
  599. package/dist/map/adapter/extensions/workspace-files.js +0 -338
  600. package/dist/map/adapter/extensions/workspace-files.js.map +0 -1
  601. package/dist/map/adapter/extensions/workspace.d.ts +0 -57
  602. package/dist/map/adapter/extensions/workspace.d.ts.map +0 -1
  603. package/dist/map/adapter/extensions/workspace.js +0 -81
  604. package/dist/map/adapter/extensions/workspace.js.map +0 -1
  605. package/dist/map/adapter/index.d.ts +0 -20
  606. package/dist/map/adapter/index.d.ts.map +0 -1
  607. package/dist/map/adapter/index.js +0 -38
  608. package/dist/map/adapter/index.js.map +0 -1
  609. package/dist/map/adapter/interface.d.ts +0 -450
  610. package/dist/map/adapter/interface.d.ts.map +0 -1
  611. package/dist/map/adapter/interface.js +0 -24
  612. package/dist/map/adapter/interface.js.map +0 -1
  613. package/dist/map/adapter/mail-handler-adapter.d.ts +0 -27
  614. package/dist/map/adapter/mail-handler-adapter.d.ts.map +0 -1
  615. package/dist/map/adapter/mail-handler-adapter.js +0 -292
  616. package/dist/map/adapter/mail-handler-adapter.js.map +0 -1
  617. package/dist/map/adapter/map-adapter.d.ts +0 -200
  618. package/dist/map/adapter/map-adapter.d.ts.map +0 -1
  619. package/dist/map/adapter/map-adapter.js +0 -1199
  620. package/dist/map/adapter/map-adapter.js.map +0 -1
  621. package/dist/map/adapter/rpc-handler.d.ts +0 -263
  622. package/dist/map/adapter/rpc-handler.d.ts.map +0 -1
  623. package/dist/map/adapter/rpc-handler.js +0 -365
  624. package/dist/map/adapter/rpc-handler.js.map +0 -1
  625. package/dist/map/adapter/subscription-manager.d.ts +0 -174
  626. package/dist/map/adapter/subscription-manager.d.ts.map +0 -1
  627. package/dist/map/adapter/subscription-manager.js +0 -248
  628. package/dist/map/adapter/subscription-manager.js.map +0 -1
  629. package/dist/map/adapter/types.d.ts +0 -194
  630. package/dist/map/adapter/types.d.ts.map +0 -1
  631. package/dist/map/adapter/types.js +0 -27
  632. package/dist/map/adapter/types.js.map +0 -1
  633. package/dist/map/adapter/websocket-integration.d.ts +0 -113
  634. package/dist/map/adapter/websocket-integration.d.ts.map +0 -1
  635. package/dist/map/adapter/websocket-integration.js +0 -134
  636. package/dist/map/adapter/websocket-integration.js.map +0 -1
  637. package/dist/map/federation/envelope.d.ts +0 -98
  638. package/dist/map/federation/envelope.d.ts.map +0 -1
  639. package/dist/map/federation/envelope.js +0 -160
  640. package/dist/map/federation/envelope.js.map +0 -1
  641. package/dist/map/federation/federation-handler.d.ts +0 -50
  642. package/dist/map/federation/federation-handler.d.ts.map +0 -1
  643. package/dist/map/federation/federation-handler.js +0 -306
  644. package/dist/map/federation/federation-handler.js.map +0 -1
  645. package/dist/map/federation/index.d.ts +0 -14
  646. package/dist/map/federation/index.d.ts.map +0 -1
  647. package/dist/map/federation/index.js +0 -13
  648. package/dist/map/federation/index.js.map +0 -1
  649. package/dist/map/federation/types.d.ts +0 -239
  650. package/dist/map/federation/types.d.ts.map +0 -1
  651. package/dist/map/federation/types.js +0 -23
  652. package/dist/map/federation/types.js.map +0 -1
  653. package/dist/map/utils/address-translation.d.ts +0 -99
  654. package/dist/map/utils/address-translation.d.ts.map +0 -1
  655. package/dist/map/utils/address-translation.js +0 -285
  656. package/dist/map/utils/address-translation.js.map +0 -1
  657. package/dist/map/utils/index.d.ts +0 -7
  658. package/dist/map/utils/index.d.ts.map +0 -1
  659. package/dist/map/utils/index.js +0 -7
  660. package/dist/map/utils/index.js.map +0 -1
  661. package/dist/mcp/map-client.d.ts +0 -39
  662. package/dist/mcp/map-client.d.ts.map +0 -1
  663. package/dist/mcp/map-client.js +0 -129
  664. package/dist/mcp/map-client.js.map +0 -1
  665. package/dist/mcp/mcp-server.d.ts +0 -70
  666. package/dist/mcp/mcp-server.d.ts.map +0 -1
  667. package/dist/mcp/mcp-server.js +0 -1015
  668. package/dist/mcp/mcp-server.js.map +0 -1
  669. package/dist/mcp/tools/claim_task.d.ts +0 -35
  670. package/dist/mcp/tools/claim_task.d.ts.map +0 -1
  671. package/dist/mcp/tools/claim_task.js +0 -58
  672. package/dist/mcp/tools/claim_task.js.map +0 -1
  673. package/dist/mcp/tools/done.d.ts +0 -102
  674. package/dist/mcp/tools/done.d.ts.map +0 -1
  675. package/dist/mcp/tools/done.js +0 -234
  676. package/dist/mcp/tools/done.js.map +0 -1
  677. package/dist/mcp/tools/inject_context.d.ts +0 -61
  678. package/dist/mcp/tools/inject_context.d.ts.map +0 -1
  679. package/dist/mcp/tools/inject_context.js +0 -123
  680. package/dist/mcp/tools/inject_context.js.map +0 -1
  681. package/dist/mcp/tools/list_claimable_tasks.d.ts +0 -38
  682. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +0 -1
  683. package/dist/mcp/tools/list_claimable_tasks.js +0 -63
  684. package/dist/mcp/tools/list_claimable_tasks.js.map +0 -1
  685. package/dist/mcp/tools/unclaim_task.d.ts +0 -31
  686. package/dist/mcp/tools/unclaim_task.d.ts.map +0 -1
  687. package/dist/mcp/tools/unclaim_task.js +0 -47
  688. package/dist/mcp/tools/unclaim_task.js.map +0 -1
  689. package/dist/mcp/tools/wait_for_activity.d.ts +0 -60
  690. package/dist/mcp/tools/wait_for_activity.d.ts.map +0 -1
  691. package/dist/mcp/tools/wait_for_activity.js +0 -135
  692. package/dist/mcp/tools/wait_for_activity.js.map +0 -1
  693. package/dist/monitor/health-check-service.d.ts +0 -143
  694. package/dist/monitor/health-check-service.d.ts.map +0 -1
  695. package/dist/monitor/health-check-service.js +0 -240
  696. package/dist/monitor/health-check-service.js.map +0 -1
  697. package/dist/monitor/index.d.ts +0 -14
  698. package/dist/monitor/index.d.ts.map +0 -1
  699. package/dist/monitor/index.js +0 -14
  700. package/dist/monitor/index.js.map +0 -1
  701. package/dist/monitor/stall-detector.d.ts +0 -109
  702. package/dist/monitor/stall-detector.d.ts.map +0 -1
  703. package/dist/monitor/stall-detector.js +0 -152
  704. package/dist/monitor/stall-detector.js.map +0 -1
  705. package/dist/peer/capability-manager.d.ts +0 -56
  706. package/dist/peer/capability-manager.d.ts.map +0 -1
  707. package/dist/peer/capability-manager.js +0 -186
  708. package/dist/peer/capability-manager.js.map +0 -1
  709. package/dist/peer/encapsulation-manager.d.ts +0 -190
  710. package/dist/peer/encapsulation-manager.d.ts.map +0 -1
  711. package/dist/peer/encapsulation-manager.js +0 -486
  712. package/dist/peer/encapsulation-manager.js.map +0 -1
  713. package/dist/peer/federation-manager.d.ts +0 -223
  714. package/dist/peer/federation-manager.d.ts.map +0 -1
  715. package/dist/peer/federation-manager.js +0 -528
  716. package/dist/peer/federation-manager.js.map +0 -1
  717. package/dist/peer/hierarchy-errors.d.ts +0 -208
  718. package/dist/peer/hierarchy-errors.d.ts.map +0 -1
  719. package/dist/peer/hierarchy-errors.js +0 -268
  720. package/dist/peer/hierarchy-errors.js.map +0 -1
  721. package/dist/peer/hierarchy-protocol.d.ts +0 -159
  722. package/dist/peer/hierarchy-protocol.d.ts.map +0 -1
  723. package/dist/peer/hierarchy-protocol.js +0 -142
  724. package/dist/peer/hierarchy-protocol.js.map +0 -1
  725. package/dist/peer/index.d.ts +0 -15
  726. package/dist/peer/index.d.ts.map +0 -1
  727. package/dist/peer/index.js +0 -15
  728. package/dist/peer/index.js.map +0 -1
  729. package/dist/peer/peer-manager.d.ts +0 -99
  730. package/dist/peer/peer-manager.d.ts.map +0 -1
  731. package/dist/peer/peer-manager.js +0 -333
  732. package/dist/peer/peer-manager.js.map +0 -1
  733. package/dist/peer/task-delegation.d.ts +0 -189
  734. package/dist/peer/task-delegation.d.ts.map +0 -1
  735. package/dist/peer/task-delegation.js +0 -303
  736. package/dist/peer/task-delegation.js.map +0 -1
  737. package/dist/peer/transports/index.d.ts +0 -8
  738. package/dist/peer/transports/index.d.ts.map +0 -1
  739. package/dist/peer/transports/index.js +0 -8
  740. package/dist/peer/transports/index.js.map +0 -1
  741. package/dist/peer/transports/local-transport.d.ts +0 -56
  742. package/dist/peer/transports/local-transport.d.ts.map +0 -1
  743. package/dist/peer/transports/local-transport.js +0 -263
  744. package/dist/peer/transports/local-transport.js.map +0 -1
  745. package/dist/peer/transports/websocket-transport.d.ts +0 -86
  746. package/dist/peer/transports/websocket-transport.d.ts.map +0 -1
  747. package/dist/peer/transports/websocket-transport.js +0 -338
  748. package/dist/peer/transports/websocket-transport.js.map +0 -1
  749. package/dist/peer/types.d.ts +0 -268
  750. package/dist/peer/types.d.ts.map +0 -1
  751. package/dist/peer/types.js +0 -36
  752. package/dist/peer/types.js.map +0 -1
  753. package/dist/router/address-resolver.d.ts +0 -102
  754. package/dist/router/address-resolver.d.ts.map +0 -1
  755. package/dist/router/address-resolver.js +0 -198
  756. package/dist/router/address-resolver.js.map +0 -1
  757. package/dist/router/broadcast.d.ts +0 -53
  758. package/dist/router/broadcast.d.ts.map +0 -1
  759. package/dist/router/broadcast.js +0 -75
  760. package/dist/router/broadcast.js.map +0 -1
  761. package/dist/router/channels.d.ts +0 -148
  762. package/dist/router/channels.d.ts.map +0 -1
  763. package/dist/router/channels.js +0 -126
  764. package/dist/router/channels.js.map +0 -1
  765. package/dist/router/index.d.ts +0 -21
  766. package/dist/router/index.d.ts.map +0 -1
  767. package/dist/router/index.js +0 -18
  768. package/dist/router/index.js.map +0 -1
  769. package/dist/router/message-router.d.ts +0 -197
  770. package/dist/router/message-router.d.ts.map +0 -1
  771. package/dist/router/message-router.js +0 -903
  772. package/dist/router/message-router.js.map +0 -1
  773. package/dist/router/message-types.d.ts +0 -183
  774. package/dist/router/message-types.d.ts.map +0 -1
  775. package/dist/router/message-types.js +0 -79
  776. package/dist/router/message-types.js.map +0 -1
  777. package/dist/router/role-resolver.d.ts +0 -67
  778. package/dist/router/role-resolver.d.ts.map +0 -1
  779. package/dist/router/role-resolver.js +0 -106
  780. package/dist/router/role-resolver.js.map +0 -1
  781. package/dist/router/signals.d.ts +0 -253
  782. package/dist/router/signals.d.ts.map +0 -1
  783. package/dist/router/signals.js +0 -53
  784. package/dist/router/signals.js.map +0 -1
  785. package/dist/router/types.d.ts +0 -191
  786. package/dist/router/types.d.ts.map +0 -1
  787. package/dist/router/types.js +0 -34
  788. package/dist/router/types.js.map +0 -1
  789. package/dist/router/wake.d.ts +0 -111
  790. package/dist/router/wake.d.ts.map +0 -1
  791. package/dist/router/wake.js +0 -180
  792. package/dist/router/wake.js.map +0 -1
  793. package/dist/server/combined-server.d.ts +0 -88
  794. package/dist/server/combined-server.d.ts.map +0 -1
  795. package/dist/server/combined-server.js +0 -331
  796. package/dist/server/combined-server.js.map +0 -1
  797. package/dist/steering/index.d.ts +0 -11
  798. package/dist/steering/index.d.ts.map +0 -1
  799. package/dist/steering/index.js +0 -11
  800. package/dist/steering/index.js.map +0 -1
  801. package/dist/steering/inject.d.ts +0 -39
  802. package/dist/steering/inject.d.ts.map +0 -1
  803. package/dist/steering/inject.js +0 -197
  804. package/dist/steering/inject.js.map +0 -1
  805. package/dist/steering/types.d.ts +0 -100
  806. package/dist/steering/types.d.ts.map +0 -1
  807. package/dist/steering/types.js +0 -11
  808. package/dist/steering/types.js.map +0 -1
  809. package/dist/store/backends/index.d.ts +0 -11
  810. package/dist/store/backends/index.d.ts.map +0 -1
  811. package/dist/store/backends/index.js +0 -15
  812. package/dist/store/backends/index.js.map +0 -1
  813. package/dist/store/backends/json-backend.d.ts +0 -23
  814. package/dist/store/backends/json-backend.d.ts.map +0 -1
  815. package/dist/store/backends/json-backend.js +0 -220
  816. package/dist/store/backends/json-backend.js.map +0 -1
  817. package/dist/store/backends/memory-backend.d.ts +0 -12
  818. package/dist/store/backends/memory-backend.d.ts.map +0 -1
  819. package/dist/store/backends/memory-backend.js +0 -205
  820. package/dist/store/backends/memory-backend.js.map +0 -1
  821. package/dist/store/backends/sqlite-backend.d.ts +0 -27
  822. package/dist/store/backends/sqlite-backend.d.ts.map +0 -1
  823. package/dist/store/backends/sqlite-backend.js +0 -231
  824. package/dist/store/backends/sqlite-backend.js.map +0 -1
  825. package/dist/store/backends/tinybase-backend.d.ts +0 -22
  826. package/dist/store/backends/tinybase-backend.d.ts.map +0 -1
  827. package/dist/store/backends/tinybase-backend.js +0 -203
  828. package/dist/store/backends/tinybase-backend.js.map +0 -1
  829. package/dist/store/backends/types.d.ts +0 -175
  830. package/dist/store/backends/types.d.ts.map +0 -1
  831. package/dist/store/backends/types.js +0 -28
  832. package/dist/store/backends/types.js.map +0 -1
  833. package/dist/store/event-store.d.ts +0 -128
  834. package/dist/store/event-store.d.ts.map +0 -1
  835. package/dist/store/event-store.js +0 -1739
  836. package/dist/store/event-store.js.map +0 -1
  837. package/dist/store/instance.d.ts +0 -283
  838. package/dist/store/instance.d.ts.map +0 -1
  839. package/dist/store/instance.js +0 -363
  840. package/dist/store/instance.js.map +0 -1
  841. package/dist/store/migrations.d.ts +0 -41
  842. package/dist/store/migrations.d.ts.map +0 -1
  843. package/dist/store/migrations.js +0 -79
  844. package/dist/store/migrations.js.map +0 -1
  845. package/dist/store/types/config.d.ts +0 -16
  846. package/dist/store/types/config.d.ts.map +0 -1
  847. package/dist/store/types/config.js +0 -8
  848. package/dist/store/types/config.js.map +0 -1
  849. package/dist/store/types/conversations.d.ts +0 -91
  850. package/dist/store/types/conversations.d.ts.map +0 -1
  851. package/dist/store/types/conversations.js +0 -8
  852. package/dist/store/types/conversations.js.map +0 -1
  853. package/dist/store/types/sessions.d.ts +0 -44
  854. package/dist/store/types/sessions.d.ts.map +0 -1
  855. package/dist/store/types/sessions.js +0 -9
  856. package/dist/store/types/sessions.js.map +0 -1
  857. package/dist/task/backend/index.d.ts +0 -93
  858. package/dist/task/backend/index.d.ts.map +0 -1
  859. package/dist/task/backend/index.js +0 -178
  860. package/dist/task/backend/index.js.map +0 -1
  861. package/dist/task/backend/memory.d.ts +0 -70
  862. package/dist/task/backend/memory.d.ts.map +0 -1
  863. package/dist/task/backend/memory.js +0 -621
  864. package/dist/task/backend/memory.js.map +0 -1
  865. package/dist/task/backend/opentasks/backend.d.ts +0 -140
  866. package/dist/task/backend/opentasks/backend.d.ts.map +0 -1
  867. package/dist/task/backend/opentasks/backend.js +0 -1023
  868. package/dist/task/backend/opentasks/backend.js.map +0 -1
  869. package/dist/task/backend/opentasks/client.d.ts +0 -337
  870. package/dist/task/backend/opentasks/client.d.ts.map +0 -1
  871. package/dist/task/backend/opentasks/client.js +0 -225
  872. package/dist/task/backend/opentasks/client.js.map +0 -1
  873. package/dist/task/backend/opentasks/daemon-manager.d.ts +0 -89
  874. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +0 -1
  875. package/dist/task/backend/opentasks/daemon-manager.js +0 -195
  876. package/dist/task/backend/opentasks/daemon-manager.js.map +0 -1
  877. package/dist/task/backend/opentasks/index.d.ts +0 -21
  878. package/dist/task/backend/opentasks/index.d.ts.map +0 -1
  879. package/dist/task/backend/opentasks/index.js +0 -21
  880. package/dist/task/backend/opentasks/index.js.map +0 -1
  881. package/dist/task/backend/opentasks/mapping.d.ts +0 -48
  882. package/dist/task/backend/opentasks/mapping.d.ts.map +0 -1
  883. package/dist/task/backend/opentasks/mapping.js +0 -77
  884. package/dist/task/backend/opentasks/mapping.js.map +0 -1
  885. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +0 -54
  886. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +0 -1
  887. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +0 -88
  888. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +0 -1
  889. package/dist/task/backend/sudocode/backend.d.ts +0 -155
  890. package/dist/task/backend/sudocode/backend.d.ts.map +0 -1
  891. package/dist/task/backend/sudocode/backend.js +0 -942
  892. package/dist/task/backend/sudocode/backend.js.map +0 -1
  893. package/dist/task/backend/sudocode/client.d.ts +0 -303
  894. package/dist/task/backend/sudocode/client.d.ts.map +0 -1
  895. package/dist/task/backend/sudocode/client.js +0 -101
  896. package/dist/task/backend/sudocode/client.js.map +0 -1
  897. package/dist/task/backend/sudocode/index.d.ts +0 -19
  898. package/dist/task/backend/sudocode/index.d.ts.map +0 -1
  899. package/dist/task/backend/sudocode/index.js +0 -17
  900. package/dist/task/backend/sudocode/index.js.map +0 -1
  901. package/dist/task/backend/sudocode/mapping.d.ts +0 -51
  902. package/dist/task/backend/sudocode/mapping.d.ts.map +0 -1
  903. package/dist/task/backend/sudocode/mapping.js +0 -86
  904. package/dist/task/backend/sudocode/mapping.js.map +0 -1
  905. package/dist/task/backend/sudocode/server-client.d.ts +0 -56
  906. package/dist/task/backend/sudocode/server-client.d.ts.map +0 -1
  907. package/dist/task/backend/sudocode/server-client.js +0 -367
  908. package/dist/task/backend/sudocode/server-client.js.map +0 -1
  909. package/dist/task/backend/sudocode/standalone-client.d.ts +0 -91
  910. package/dist/task/backend/sudocode/standalone-client.d.ts.map +0 -1
  911. package/dist/task/backend/sudocode/standalone-client.js +0 -476
  912. package/dist/task/backend/sudocode/standalone-client.js.map +0 -1
  913. package/dist/task/backend/sudocode/sync-policy.d.ts +0 -166
  914. package/dist/task/backend/sudocode/sync-policy.d.ts.map +0 -1
  915. package/dist/task/backend/sudocode/sync-policy.js +0 -221
  916. package/dist/task/backend/sudocode/sync-policy.js.map +0 -1
  917. package/dist/task/backend/sudocode/tools.d.ts +0 -87
  918. package/dist/task/backend/sudocode/tools.d.ts.map +0 -1
  919. package/dist/task/backend/sudocode/tools.js +0 -743
  920. package/dist/task/backend/sudocode/tools.js.map +0 -1
  921. package/dist/task/backend/tool-provider.d.ts +0 -56
  922. package/dist/task/backend/tool-provider.d.ts.map +0 -1
  923. package/dist/task/backend/tool-provider.js +0 -424
  924. package/dist/task/backend/tool-provider.js.map +0 -1
  925. package/dist/task/backend/types.d.ts +0 -297
  926. package/dist/task/backend/types.d.ts.map +0 -1
  927. package/dist/task/backend/types.js +0 -27
  928. package/dist/task/backend/types.js.map +0 -1
  929. package/dist/task/backend/unified-tool-provider.d.ts +0 -57
  930. package/dist/task/backend/unified-tool-provider.d.ts.map +0 -1
  931. package/dist/task/backend/unified-tool-provider.js +0 -623
  932. package/dist/task/backend/unified-tool-provider.js.map +0 -1
  933. package/dist/task/index.d.ts +0 -7
  934. package/dist/task/index.d.ts.map +0 -1
  935. package/dist/task/index.js +0 -7
  936. package/dist/task/index.js.map +0 -1
  937. package/dist/task/retry-policy.d.ts +0 -89
  938. package/dist/task/retry-policy.d.ts.map +0 -1
  939. package/dist/task/retry-policy.js +0 -160
  940. package/dist/task/retry-policy.js.map +0 -1
  941. package/dist/task/task-manager.d.ts +0 -70
  942. package/dist/task/task-manager.d.ts.map +0 -1
  943. package/dist/task/task-manager.js +0 -319
  944. package/dist/task/task-manager.js.map +0 -1
  945. package/dist/task/types.d.ts +0 -72
  946. package/dist/task/types.d.ts.map +0 -1
  947. package/dist/task/types.js +0 -33
  948. package/dist/task/types.js.map +0 -1
  949. package/dist/teams/team-runtime.d.ts +0 -139
  950. package/dist/teams/team-runtime.d.ts.map +0 -1
  951. package/dist/teams/team-runtime.js +0 -615
  952. package/dist/teams/team-runtime.js.map +0 -1
  953. package/dist/trigger/router/index.d.ts +0 -11
  954. package/dist/trigger/router/index.d.ts.map +0 -1
  955. package/dist/trigger/router/index.js +0 -10
  956. package/dist/trigger/router/index.js.map +0 -1
  957. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +0 -34
  958. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +0 -1
  959. package/dist/trigger/router/strategies/ai-router-strategy.js +0 -359
  960. package/dist/trigger/router/strategies/ai-router-strategy.js.map +0 -1
  961. package/dist/trigger/router/strategies/direct-strategy.d.ts +0 -32
  962. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +0 -1
  963. package/dist/trigger/router/strategies/direct-strategy.js +0 -119
  964. package/dist/trigger/router/strategies/direct-strategy.js.map +0 -1
  965. package/dist/trigger/router/strategies/index.d.ts +0 -11
  966. package/dist/trigger/router/strategies/index.d.ts.map +0 -1
  967. package/dist/trigger/router/strategies/index.js +0 -11
  968. package/dist/trigger/router/strategies/index.js.map +0 -1
  969. package/dist/trigger/router/strategies/role-strategy.d.ts +0 -39
  970. package/dist/trigger/router/strategies/role-strategy.d.ts.map +0 -1
  971. package/dist/trigger/router/strategies/role-strategy.js +0 -207
  972. package/dist/trigger/router/strategies/role-strategy.js.map +0 -1
  973. package/dist/trigger/router/trigger-router.d.ts +0 -54
  974. package/dist/trigger/router/trigger-router.d.ts.map +0 -1
  975. package/dist/trigger/router/trigger-router.js +0 -362
  976. package/dist/trigger/router/trigger-router.js.map +0 -1
  977. package/dist/trigger/router/types.d.ts +0 -225
  978. package/dist/trigger/router/types.d.ts.map +0 -1
  979. package/dist/trigger/router/types.js +0 -10
  980. package/dist/trigger/router/types.js.map +0 -1
  981. package/dist/trigger/trigger-system.d.ts +0 -77
  982. package/dist/trigger/trigger-system.d.ts.map +0 -1
  983. package/dist/trigger/trigger-system.js +0 -84
  984. package/dist/trigger/trigger-system.js.map +0 -1
  985. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  986. package/references/acp-factory-ref/LICENSE +0 -21
  987. package/references/acp-factory-ref/README.md +0 -341
  988. package/references/acp-factory-ref/package-lock.json +0 -3102
  989. package/references/acp-factory-ref/package.json +0 -96
  990. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  991. package/references/acp-factory-ref/python/LICENSE +0 -21
  992. package/references/acp-factory-ref/python/Makefile +0 -57
  993. package/references/acp-factory-ref/python/README.md +0 -253
  994. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  995. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  996. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  997. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  998. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  999. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  1000. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  1001. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  1002. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  1003. package/references/claude-code-acp/.prettierrc.json +0 -4
  1004. package/references/claude-code-acp/CHANGELOG.md +0 -249
  1005. package/references/claude-code-acp/LICENSE +0 -222
  1006. package/references/claude-code-acp/README.md +0 -53
  1007. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  1008. package/references/claude-code-acp/eslint.config.js +0 -48
  1009. package/references/claude-code-acp/package-lock.json +0 -4570
  1010. package/references/claude-code-acp/package.json +0 -88
  1011. package/references/claude-code-acp/scripts/release.sh +0 -119
  1012. package/references/claude-code-acp/src/acp-agent.ts +0 -2076
  1013. package/references/claude-code-acp/src/index.ts +0 -26
  1014. package/references/claude-code-acp/src/lib.ts +0 -38
  1015. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  1016. package/references/claude-code-acp/src/settings.ts +0 -522
  1017. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  1018. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  1019. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  1020. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  1021. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  1022. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  1023. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  1024. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  1025. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  1026. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  1027. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  1028. package/references/claude-code-acp/src/tools.ts +0 -819
  1029. package/references/claude-code-acp/src/utils.ts +0 -171
  1030. package/references/claude-code-acp/tsconfig.json +0 -18
  1031. package/references/claude-code-acp/vitest.config.ts +0 -19
  1032. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  1033. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  1034. package/references/multi-agent-protocol/LICENSE +0 -21
  1035. package/references/multi-agent-protocol/README.md +0 -113
  1036. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  1037. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  1038. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  1039. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  1040. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  1041. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  1042. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  1043. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  1044. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  1045. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  1046. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  1047. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  1048. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  1049. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  1050. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  1051. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  1052. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  1053. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  1054. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  1055. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  1056. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  1057. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  1058. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  1059. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  1060. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  1061. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  1062. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  1063. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  1064. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  1065. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  1066. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  1067. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  1068. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  1069. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  1070. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  1071. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  1072. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  1073. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  1074. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  1075. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  1076. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  1077. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  1078. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  1079. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  1080. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  1081. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  1082. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  1083. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  1084. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  1085. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  1086. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  1087. package/references/multi-agent-protocol/package-lock.json +0 -3886
  1088. package/references/multi-agent-protocol/package.json +0 -56
  1089. package/references/multi-agent-protocol/schema/meta.json +0 -467
  1090. package/references/multi-agent-protocol/schema/schema.json +0 -2558
  1091. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +0 -761
  1092. package/src/__tests__/e2e/cascade-termination.e2e.test.ts +0 -588
  1093. package/src/__tests__/e2e/conflict-resolution-flow.e2e.test.ts +0 -790
  1094. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +0 -714
  1095. package/src/__tests__/e2e/full-agent-orchestration.e2e.test.ts +0 -536
  1096. package/src/__tests__/e2e/mcp-server-debug.e2e.test.ts +0 -372
  1097. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +0 -304
  1098. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +0 -324
  1099. package/src/__tests__/e2e/multi-agent.e2e.test.ts +0 -1527
  1100. package/src/__tests__/e2e/multi-coordinator.e2e.test.ts +0 -602
  1101. package/src/__tests__/e2e/orchestration-flow.e2e.test.ts +0 -686
  1102. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +0 -563
  1103. package/src/__tests__/e2e/steering-task.e2e.test.ts +0 -840
  1104. package/src/__tests__/integration.e2e.test.ts +0 -407
  1105. package/src/acp/__tests__/combined-websocket-server.test.ts +0 -260
  1106. package/src/acp/__tests__/history.test.ts +0 -530
  1107. package/src/acp/__tests__/integration.test.ts +0 -1049
  1108. package/src/acp/__tests__/multi-client-mounting.test.ts +0 -303
  1109. package/src/acp/__tests__/session-persistence.test.ts +0 -276
  1110. package/src/acp/__tests__/websocket-full.e2e.test.ts +0 -401
  1111. package/src/acp/__tests__/websocket-integration.test.ts +0 -484
  1112. package/src/acp/__tests__/websocket-stream.test.ts +0 -281
  1113. package/src/acp/__tests__/websocket.e2e.test.ts +0 -390
  1114. package/src/acp/websocket-stream.ts +0 -140
  1115. package/src/activity/__tests__/deduplication.test.ts +0 -345
  1116. package/src/activity/__tests__/relevance.test.ts +0 -347
  1117. package/src/activity/__tests__/watcher.test.ts +0 -344
  1118. package/src/activity/deduplication.ts +0 -219
  1119. package/src/activity/index.ts +0 -51
  1120. package/src/activity/relevance.ts +0 -258
  1121. package/src/activity/types.ts +0 -263
  1122. package/src/activity/watcher.ts +0 -345
  1123. package/src/agent/__tests__/agent-manager.test.ts +0 -1382
  1124. package/src/agent/__tests__/wake.test.ts +0 -768
  1125. package/src/agent/wake.ts +0 -357
  1126. package/src/api/__tests__/conversation-api.test.ts +0 -468
  1127. package/src/cli/__tests__/acp.test.ts +0 -214
  1128. package/src/lifecycle/__tests__/cascade-termination.test.ts +0 -919
  1129. package/src/lifecycle/__tests__/cascade.test.ts +0 -595
  1130. package/src/lifecycle/__tests__/cleanup.test.ts +0 -322
  1131. package/src/lifecycle/__tests__/handlers.test.ts +0 -1826
  1132. package/src/lifecycle/__tests__/lifecycle.e2e.test.ts +0 -354
  1133. package/src/lifecycle/__tests__/merge-queue.e2e.test.ts +0 -602
  1134. package/src/lifecycle/handlers/generic.ts +0 -87
  1135. package/src/lifecycle/handlers/index.ts +0 -166
  1136. package/src/lifecycle/handlers/integrator.ts +0 -672
  1137. package/src/lifecycle/handlers/monitor.ts +0 -114
  1138. package/src/lifecycle/handlers/worker.ts +0 -506
  1139. package/src/mail/__tests__/conversation-lifecycle.test.ts +0 -409
  1140. package/src/mail/__tests__/eventstore-stores.test.ts +0 -1073
  1141. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +0 -575
  1142. package/src/mail/__tests__/mail-integration.test.ts +0 -759
  1143. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +0 -1068
  1144. package/src/mail/__tests__/mail-service.test.ts +0 -506
  1145. package/src/mail/__tests__/turn-recorder.test.ts +0 -328
  1146. package/src/mail/conversation-map.ts +0 -107
  1147. package/src/mail/index.ts +0 -25
  1148. package/src/mail/mail-service.ts +0 -257
  1149. package/src/mail/stores/eventstore-conversation-store.ts +0 -146
  1150. package/src/mail/stores/eventstore-participant-store.ts +0 -172
  1151. package/src/mail/stores/eventstore-thread-store.ts +0 -129
  1152. package/src/mail/stores/eventstore-turn-store.ts +0 -173
  1153. package/src/mail/stores/index.ts +0 -12
  1154. package/src/mail/stores/types.ts +0 -160
  1155. package/src/mail/turn-recorder.ts +0 -124
  1156. package/src/map/README.md +0 -79
  1157. package/src/map/__tests__/adapter-types.test.ts +0 -326
  1158. package/src/map/__tests__/interface-types.test.ts +0 -342
  1159. package/src/map/__tests__/types.test.ts +0 -411
  1160. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +0 -820
  1161. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +0 -355
  1162. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +0 -1386
  1163. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +0 -440
  1164. package/src/map/adapter/__tests__/connection-manager.test.ts +0 -344
  1165. package/src/map/adapter/__tests__/event-broadcast.test.ts +0 -420
  1166. package/src/map/adapter/__tests__/event-log.test.ts +0 -527
  1167. package/src/map/adapter/__tests__/event-translator.test.ts +0 -550
  1168. package/src/map/adapter/__tests__/extensions.test.ts +0 -1387
  1169. package/src/map/adapter/__tests__/map-adapter.test.ts +0 -926
  1170. package/src/map/adapter/__tests__/mcp-bridge.test.ts +0 -1187
  1171. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +0 -711
  1172. package/src/map/adapter/__tests__/rpc-handler.test.ts +0 -644
  1173. package/src/map/adapter/__tests__/subscription-manager.test.ts +0 -536
  1174. package/src/map/adapter/__tests__/websocket-integration.test.ts +0 -487
  1175. package/src/map/adapter/__tests__/workspace-files.test.ts +0 -673
  1176. package/src/map/adapter/acp-over-map.ts +0 -1483
  1177. package/src/map/adapter/connection-manager.ts +0 -400
  1178. package/src/map/adapter/event-log.ts +0 -208
  1179. package/src/map/adapter/event-translator.ts +0 -415
  1180. package/src/map/adapter/extensions/agent-detection.ts +0 -201
  1181. package/src/map/adapter/extensions/agent-lifecycle.ts +0 -267
  1182. package/src/map/adapter/extensions/index.ts +0 -280
  1183. package/src/map/adapter/extensions/mcp-bridge.ts +0 -995
  1184. package/src/map/adapter/extensions/resume.ts +0 -114
  1185. package/src/map/adapter/extensions/task.ts +0 -326
  1186. package/src/map/adapter/extensions/update-metadata.ts +0 -126
  1187. package/src/map/adapter/extensions/wake.ts +0 -239
  1188. package/src/map/adapter/extensions/workspace-files.ts +0 -449
  1189. package/src/map/adapter/extensions/workspace.ts +0 -176
  1190. package/src/map/adapter/index.ts +0 -158
  1191. package/src/map/adapter/interface.ts +0 -581
  1192. package/src/map/adapter/mail-handler-adapter.ts +0 -429
  1193. package/src/map/adapter/map-adapter.ts +0 -1749
  1194. package/src/map/adapter/rpc-handler.ts +0 -604
  1195. package/src/map/adapter/subscription-manager.ts +0 -474
  1196. package/src/map/adapter/types.ts +0 -259
  1197. package/src/map/adapter/websocket-integration.ts +0 -229
  1198. package/src/map/federation/__tests__/envelope.test.ts +0 -362
  1199. package/src/map/federation/__tests__/federation-handler.test.ts +0 -461
  1200. package/src/map/federation/envelope.ts +0 -243
  1201. package/src/map/federation/federation-handler.ts +0 -442
  1202. package/src/map/federation/index.ts +0 -65
  1203. package/src/map/federation/types.ts +0 -344
  1204. package/src/mcp/__tests__/map-client.test.ts +0 -386
  1205. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +0 -368
  1206. package/src/mcp/__tests__/mcp-server.test.ts +0 -1002
  1207. package/src/mcp/map-client.ts +0 -177
  1208. package/src/mcp/mcp-server.ts +0 -1395
  1209. package/src/mcp/tools/__tests__/done.test.ts +0 -484
  1210. package/src/mcp/tools/claim_task.ts +0 -86
  1211. package/src/mcp/tools/done.ts +0 -338
  1212. package/src/mcp/tools/inject_context.ts +0 -173
  1213. package/src/mcp/tools/list_claimable_tasks.ts +0 -93
  1214. package/src/mcp/tools/unclaim_task.ts +0 -71
  1215. package/src/mcp/tools/wait_for_activity.ts +0 -185
  1216. package/src/monitor/__tests__/health-check-service.test.ts +0 -425
  1217. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +0 -393
  1218. package/src/monitor/__tests__/stall-detector.test.ts +0 -395
  1219. package/src/monitor/health-check-service.ts +0 -359
  1220. package/src/monitor/index.ts +0 -28
  1221. package/src/monitor/stall-detector.ts +0 -238
  1222. package/src/peer/__tests__/capability-manager.test.ts +0 -454
  1223. package/src/peer/__tests__/encapsulation-manager.test.ts +0 -787
  1224. package/src/peer/__tests__/federation-manager.test.ts +0 -828
  1225. package/src/peer/__tests__/hierarchy-errors.test.ts +0 -307
  1226. package/src/peer/__tests__/peer-manager.test.ts +0 -535
  1227. package/src/peer/__tests__/task-delegation.test.ts +0 -741
  1228. package/src/peer/capability-manager.ts +0 -289
  1229. package/src/peer/encapsulation-manager.ts +0 -831
  1230. package/src/peer/federation-manager.ts +0 -897
  1231. package/src/peer/hierarchy-errors.ts +0 -382
  1232. package/src/peer/hierarchy-protocol.ts +0 -328
  1233. package/src/peer/index.ts +0 -15
  1234. package/src/peer/peer-manager.ts +0 -540
  1235. package/src/peer/task-delegation.ts +0 -594
  1236. package/src/peer/transports/__tests__/local-transport.test.ts +0 -355
  1237. package/src/peer/transports/__tests__/websocket-transport.test.ts +0 -270
  1238. package/src/peer/transports/index.ts +0 -18
  1239. package/src/peer/transports/local-transport.ts +0 -348
  1240. package/src/peer/transports/websocket-transport.ts +0 -452
  1241. package/src/peer/types.ts +0 -331
  1242. package/src/roles/__tests__/capability-enforcement.test.ts +0 -989
  1243. package/src/roles/__tests__/message-routing.e2e.test.ts +0 -464
  1244. package/src/roles/__tests__/role-resolution.test.ts +0 -576
  1245. package/src/router/README.md +0 -120
  1246. package/src/router/__tests__/address-resolver.test.ts +0 -340
  1247. package/src/router/__tests__/broadcast.test.ts +0 -185
  1248. package/src/router/__tests__/message-router.test.ts +0 -1070
  1249. package/src/router/__tests__/role-channel.test.ts +0 -213
  1250. package/src/router/__tests__/send-to-address.test.ts +0 -731
  1251. package/src/router/__tests__/wake.test.ts +0 -459
  1252. package/src/router/address-resolver.ts +0 -303
  1253. package/src/router/broadcast.ts +0 -117
  1254. package/src/router/channels.ts +0 -283
  1255. package/src/router/index.ts +0 -148
  1256. package/src/router/message-router.ts +0 -1392
  1257. package/src/router/message-types.ts +0 -294
  1258. package/src/router/role-resolver.ts +0 -164
  1259. package/src/router/signals.ts +0 -335
  1260. package/src/router/types.ts +0 -306
  1261. package/src/router/wake.ts +0 -270
  1262. package/src/server/__tests__/combined-server.test.ts +0 -360
  1263. package/src/server/combined-server.ts +0 -530
  1264. package/src/steering/__tests__/inject.test.ts +0 -405
  1265. package/src/steering/__tests__/injection.e2e.test.ts +0 -932
  1266. package/src/steering/__tests__/steering-integration.test.ts +0 -747
  1267. package/src/steering/index.ts +0 -25
  1268. package/src/steering/inject.ts +0 -262
  1269. package/src/steering/types.ts +0 -143
  1270. package/src/store/README.md +0 -134
  1271. package/src/store/__tests__/event-store.test.ts +0 -1446
  1272. package/src/store/__tests__/instance.test.ts +0 -556
  1273. package/src/store/__tests__/migrations.test.ts +0 -109
  1274. package/src/store/backends/__tests__/memory-backend.test.ts +0 -383
  1275. package/src/store/backends/__tests__/sqlite-backend.test.ts +0 -427
  1276. package/src/store/backends/index.ts +0 -42
  1277. package/src/store/backends/json-backend.ts +0 -295
  1278. package/src/store/backends/memory-backend.ts +0 -256
  1279. package/src/store/backends/sqlite-backend.ts +0 -337
  1280. package/src/store/backends/tinybase-backend.ts +0 -276
  1281. package/src/store/backends/types.ts +0 -252
  1282. package/src/store/event-store.ts +0 -2204
  1283. package/src/store/instance.ts +0 -681
  1284. package/src/store/migrations.ts +0 -96
  1285. package/src/store/types/config.ts +0 -19
  1286. package/src/store/types/conversations.ts +0 -129
  1287. package/src/store/types/sessions.ts +0 -53
  1288. package/src/task/__tests__/retry-policy.test.ts +0 -409
  1289. package/src/task/__tests__/task-integration.test.ts +0 -457
  1290. package/src/task/__tests__/task-manager.test.ts +0 -815
  1291. package/src/task/backend/__tests__/create-task-backend.test.ts +0 -225
  1292. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +0 -524
  1293. package/src/task/backend/__tests__/memory.test.ts +0 -1274
  1294. package/src/task/backend/__tests__/unified-tool-provider.test.ts +0 -579
  1295. package/src/task/backend/index.ts +0 -310
  1296. package/src/task/backend/memory.ts +0 -828
  1297. package/src/task/backend/opentasks/__tests__/backend.test.ts +0 -968
  1298. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +0 -406
  1299. package/src/task/backend/opentasks/__tests__/mapping.test.ts +0 -84
  1300. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +0 -1338
  1301. package/src/task/backend/opentasks/backend.ts +0 -1323
  1302. package/src/task/backend/opentasks/client.ts +0 -652
  1303. package/src/task/backend/opentasks/daemon-manager.ts +0 -253
  1304. package/src/task/backend/opentasks/index.ts +0 -69
  1305. package/src/task/backend/opentasks/mapping.ts +0 -94
  1306. package/src/task/backend/types.ts +0 -458
  1307. package/src/task/backend/unified-tool-provider.ts +0 -779
  1308. package/src/task/index.ts +0 -7
  1309. package/src/task/retry-policy.ts +0 -204
  1310. package/src/task/task-manager.ts +0 -515
  1311. package/src/task/types.ts +0 -136
  1312. package/src/teams/__tests__/cross-subsystem.integration.test.ts +0 -983
  1313. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +0 -553
  1314. package/src/teams/__tests__/team-system.test.ts +0 -1280
  1315. package/src/teams/team-runtime.ts +0 -729
  1316. package/src/trigger/CLAUDE.md +0 -308
  1317. package/src/trigger/README.md +0 -429
  1318. package/src/trigger/__tests__/macro-agent-regression.test.ts +0 -946
  1319. package/src/trigger/__tests__/routing-strategies.test.ts +0 -329
  1320. package/src/trigger/__tests__/trigger-router.test.ts +0 -433
  1321. package/src/trigger/__tests__/trigger-system-integration.test.ts +0 -581
  1322. package/src/trigger/router/index.ts +0 -36
  1323. package/src/trigger/router/strategies/ai-router-strategy.ts +0 -481
  1324. package/src/trigger/router/strategies/direct-strategy.ts +0 -162
  1325. package/src/trigger/router/strategies/index.ts +0 -26
  1326. package/src/trigger/router/strategies/role-strategy.ts +0 -274
  1327. package/src/trigger/router/trigger-router.ts +0 -463
  1328. package/src/trigger/router/types.ts +0 -273
  1329. package/src/trigger/trigger-system.ts +0 -206
  1330. package/src/workspace/__tests__/multi-coordinator.test.ts +0 -1005
  1331. package/src/workspace/__tests__/workspace-manager.test.ts +0 -391
  1332. package/src/workspace/__tests__/workspace.e2e.test.ts +0 -1155
  1333. package/src/workspace/merge-queue/__tests__/hierarchical-consolidation.e2e.test.ts +0 -414
  1334. package/test_fixtures/harness/__tests__/behavior-executor-and-stepper.test.ts +0 -714
  1335. package/test_fixtures/harness/__tests__/fixtures.test.ts +0 -347
  1336. package/test_fixtures/harness/__tests__/merge-queue-and-worktrees.test.ts +0 -452
  1337. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -422
  1338. package/test_fixtures/harness/__tests__/test-harness-and-assertions.test.ts +0 -568
  1339. /package/{references/acp-factory-ref/python/tests/__init__.py → .opentasks/graph.jsonl} +0 -0
@@ -1,1155 +0,0 @@
1
- /**
2
- * Workspace E2E Tests
3
- *
4
- * Comprehensive end-to-end tests for the workspace isolation flow including:
5
- * - Full lifecycle: coordinator → tasks → workers → merge queue → integration
6
- * - Parallel workers with merge queue ordering
7
- * - Conflict detection and handling
8
- * - Cleanup of worktrees and worker branches
9
- */
10
-
11
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
12
- import * as fs from 'fs';
13
- import * as path from 'path';
14
- import * as os from 'os';
15
- import { execSync } from 'child_process';
16
- import { createWorkspaceManager, DefaultWorkspaceManager } from '../workspace-manager.js';
17
- import { createDataplaneAdapter, DataplaneAdapter } from '../dataplane-adapter.js';
18
- import { createMergeQueue, MergeQueue } from '../merge-queue/index.js';
19
- import Database from 'better-sqlite3';
20
- import type { WorkerWorkspace, IntegratorWorkspace, CoordinatorWorkspace } from '../types.js';
21
-
22
- describe('Workspace E2E', () => {
23
- let tempDir: string;
24
- let repoPath: string;
25
- let dbPath: string;
26
- let db: Database.Database;
27
- let adapter: DataplaneAdapter;
28
- let manager: DefaultWorkspaceManager;
29
- let mergeQueue: MergeQueue;
30
-
31
- /**
32
- * Helper to run git commands in the repo
33
- */
34
- function git(args: string, cwd: string = repoPath): string {
35
- return execSync(`git ${args}`, { cwd, stdio: 'pipe', encoding: 'utf8' }).trim();
36
- }
37
-
38
- /**
39
- * Helper to write a file and commit it
40
- */
41
- function writeAndCommit(
42
- filePath: string,
43
- content: string,
44
- message: string,
45
- cwd: string = repoPath
46
- ): string {
47
- const fullPath = path.join(cwd, filePath);
48
- const dir = path.dirname(fullPath);
49
- if (!fs.existsSync(dir)) {
50
- fs.mkdirSync(dir, { recursive: true });
51
- }
52
- fs.writeFileSync(fullPath, content);
53
- git('add .', cwd);
54
- git(`commit -m "${message}"`, cwd);
55
- return git('rev-parse HEAD', cwd);
56
- }
57
-
58
- /**
59
- * Helper to get list of branches
60
- */
61
- function listBranches(): string[] {
62
- return git('branch --list')
63
- .split('\n')
64
- .map((b) => b.trim().replace(/^\* /, ''))
65
- .filter(Boolean);
66
- }
67
-
68
- /**
69
- * Helper to get list of worktrees
70
- */
71
- function listWorktrees(): string[] {
72
- return git('worktree list --porcelain')
73
- .split('\n')
74
- .filter((line) => line.startsWith('worktree '))
75
- .map((line) => line.replace('worktree ', ''));
76
- }
77
-
78
- beforeEach(() => {
79
- // Create temp directory
80
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'workspace-e2e-test-'));
81
- repoPath = path.join(tempDir, 'repo');
82
- dbPath = path.join(tempDir, 'test.db');
83
- fs.mkdirSync(repoPath);
84
-
85
- // Initialize git repo
86
- git('init');
87
- git('config user.email "test@test.com"');
88
- git('config user.name "Test User"');
89
-
90
- // Create initial commit with some files
91
- fs.writeFileSync(path.join(repoPath, 'README.md'), '# Test Project\n');
92
- fs.mkdirSync(path.join(repoPath, 'src'), { recursive: true });
93
- fs.writeFileSync(path.join(repoPath, 'src/index.ts'), 'export const version = "1.0.0";\n');
94
- git('add .');
95
- git('commit -m "Initial commit"');
96
-
97
- // Create shared database
98
- db = new Database(dbPath);
99
-
100
- // Create adapter
101
- adapter = createDataplaneAdapter({
102
- enabled: true,
103
- repoPath,
104
- db,
105
- skipRecovery: true,
106
- });
107
-
108
- // Create workspace manager
109
- manager = new DefaultWorkspaceManager(adapter, {
110
- worktreeBaseDir: path.join(tempDir, '.worktrees'),
111
- });
112
-
113
- // Create merge queue
114
- mergeQueue = createMergeQueue({ db });
115
- });
116
-
117
- afterEach(() => {
118
- // Close resources first
119
- try {
120
- mergeQueue?.close();
121
- } catch { /* ignore */ }
122
- try {
123
- manager?.close();
124
- } catch { /* ignore */ }
125
- try {
126
- adapter?.close();
127
- } catch { /* ignore */ }
128
- try {
129
- db?.close();
130
- } catch { /* ignore */ }
131
-
132
- // Remove all worktrees before deleting temp directory
133
- // This prevents dangling worktree references
134
- if (repoPath && fs.existsSync(repoPath)) {
135
- try {
136
- const worktreeList = execSync('git worktree list --porcelain', {
137
- cwd: repoPath,
138
- encoding: 'utf8',
139
- stdio: 'pipe',
140
- });
141
- const worktrees = worktreeList
142
- .split('\n')
143
- .filter((line) => line.startsWith('worktree '))
144
- .map((line) => line.replace('worktree ', ''))
145
- .filter((wt) => wt !== repoPath); // Don't remove main repo
146
-
147
- for (const wt of worktrees) {
148
- try {
149
- execSync(`git worktree remove --force "${wt}"`, {
150
- cwd: repoPath,
151
- stdio: 'pipe',
152
- });
153
- } catch { /* ignore */ }
154
- }
155
- } catch { /* ignore */ }
156
- }
157
-
158
- // Clean up temp directory
159
- if (tempDir && fs.existsSync(tempDir)) {
160
- fs.rmSync(tempDir, { recursive: true, force: true });
161
- }
162
- });
163
-
164
- describe('full lifecycle', () => {
165
- it('should complete the full coordinator → worker → merge → cleanup flow', () => {
166
- // ═══════════════════════════════════════════════════════════════════════
167
- // Phase 1: Coordinator creates integration stream and tasks
168
- // ═══════════════════════════════════════════════════════════════════════
169
- const coordinatorId = 'coordinator-001';
170
- const streamId = manager.createIntegrationStream(coordinatorId, {
171
- name: 'feature/user-auth',
172
- });
173
-
174
- expect(streamId).toBeDefined();
175
- expect(manager.getStream(streamId)).not.toBeNull();
176
-
177
- // Create tasks for workers
178
- const task1Id = manager.createTask(streamId, {
179
- title: 'Implement login API',
180
- priority: 10,
181
- });
182
- const task2Id = manager.createTask(streamId, {
183
- title: 'Implement logout API',
184
- priority: 20,
185
- });
186
-
187
- expect(task1Id).toBeDefined();
188
- expect(task2Id).toBeDefined();
189
-
190
- // ═══════════════════════════════════════════════════════════════════════
191
- // Phase 2: Workers create workspaces and claim tasks
192
- // ═══════════════════════════════════════════════════════════════════════
193
- // Use sufficiently different IDs so the 8-char truncation creates unique paths
194
- const worker1Id = 'worker-alpha-001';
195
- const worker2Id = 'worker-beta-002';
196
-
197
- // Worker 1 creates workspace and claims higher priority task
198
- const worker1Workspace = manager.createWorkerWorkspace(
199
- worker1Id,
200
- task1Id,
201
- streamId
202
- ) as WorkerWorkspace;
203
-
204
- expect(worker1Workspace.role).toBe('worker');
205
- expect(worker1Workspace.taskId).toBe(task1Id);
206
- expect(fs.existsSync(worker1Workspace.path)).toBe(true);
207
-
208
- // Worker 1 claims the task (creates worker branch)
209
- const startResult1 = manager.claimTask(task1Id, worker1Id, worker1Workspace.path);
210
- expect(startResult1.branchName).toMatch(/^worker\/worker-alpha-001\//);
211
-
212
- // Worker 2 creates workspace and claims next task
213
- const worker2Workspace = manager.createWorkerWorkspace(
214
- worker2Id,
215
- task2Id,
216
- streamId
217
- ) as WorkerWorkspace;
218
-
219
- const startResult2 = manager.claimTask(task2Id, worker2Id, worker2Workspace.path);
220
- expect(startResult2.branchName).toMatch(/^worker\/worker-beta-002\//);
221
-
222
- // Verify worker branches exist in the repo
223
- const branches = git('branch --list worker/*').split('\n').filter(Boolean);
224
- expect(branches.length).toBe(2);
225
-
226
- // ═══════════════════════════════════════════════════════════════════════
227
- // Phase 3: Workers make changes and commit
228
- // ═══════════════════════════════════════════════════════════════════════
229
-
230
- // Worker 1 implements login
231
- writeAndCommit(
232
- 'src/auth/login.ts',
233
- 'export function login(user: string, pass: string) { return true; }',
234
- 'feat: implement login API',
235
- worker1Workspace.path
236
- );
237
-
238
- // Worker 2 implements logout
239
- writeAndCommit(
240
- 'src/auth/logout.ts',
241
- 'export function logout() { return true; }',
242
- 'feat: implement logout API',
243
- worker2Workspace.path
244
- );
245
-
246
- // ═══════════════════════════════════════════════════════════════════════
247
- // Phase 4: Workers submit to merge queue
248
- // ═══════════════════════════════════════════════════════════════════════
249
-
250
- // Get updated task info
251
- const task1 = adapter.getTask(task1Id)!;
252
- const task2 = adapter.getTask(task2Id)!;
253
-
254
- // Submit both to merge queue
255
- const mr1Id = mergeQueue.submit({
256
- streamId,
257
- taskId: task1Id,
258
- workerBranch: task1.branchName!,
259
- workerAgentId: worker1Id,
260
- priority: 10,
261
- });
262
-
263
- const mr2Id = mergeQueue.submit({
264
- streamId,
265
- taskId: task2Id,
266
- workerBranch: task2.branchName!,
267
- workerAgentId: worker2Id,
268
- priority: 20,
269
- });
270
-
271
- expect(mr1Id).toBeDefined();
272
- expect(mr2Id).toBeDefined();
273
- expect(mergeQueue.getQueueDepth(streamId)).toBe(2);
274
-
275
- // ═══════════════════════════════════════════════════════════════════════
276
- // Phase 5: Integrator processes merge queue
277
- // ═══════════════════════════════════════════════════════════════════════
278
-
279
- // Note: Workers must release their worktrees first since integrator
280
- // needs to work on the stream branch
281
- manager.deallocateWorkspace(worker1Id);
282
- manager.deallocateWorkspace(worker2Id);
283
-
284
- const integratorId = 'integrator-001';
285
- const integratorWorkspace = manager.createIntegratorWorkspace(
286
- integratorId,
287
- streamId
288
- ) as IntegratorWorkspace;
289
-
290
- expect(integratorWorkspace.role).toBe('integrator');
291
-
292
- // Process first MR (higher priority - task1)
293
- const nextMr1 = mergeQueue.getNext(streamId);
294
- expect(nextMr1).not.toBeNull();
295
- expect(nextMr1!.taskId).toBe(task1Id); // Higher priority first
296
-
297
- mergeQueue.markProcessing(nextMr1!.id);
298
-
299
- // Complete the task (merges worker branch to stream)
300
- const completeResult1 = adapter.completeTask({
301
- taskId: task1Id,
302
- worktree: integratorWorkspace.path,
303
- });
304
-
305
- expect(completeResult1.mergeCommit).toBeDefined();
306
- mergeQueue.markMerged(nextMr1!.id, completeResult1.mergeCommit);
307
-
308
- // Process second MR
309
- const nextMr2 = mergeQueue.getNext(streamId);
310
- expect(nextMr2).not.toBeNull();
311
- expect(nextMr2!.taskId).toBe(task2Id);
312
-
313
- mergeQueue.markProcessing(nextMr2!.id);
314
-
315
- const completeResult2 = adapter.completeTask({
316
- taskId: task2Id,
317
- worktree: integratorWorkspace.path,
318
- });
319
-
320
- expect(completeResult2.mergeCommit).toBeDefined();
321
- mergeQueue.markMerged(nextMr2!.id, completeResult2.mergeCommit);
322
-
323
- // Verify queue is empty
324
- expect(mergeQueue.getQueueDepth(streamId)).toBe(0);
325
- expect(mergeQueue.getNext(streamId)).toBeNull();
326
-
327
- // Verify both changes are in the integration branch
328
- const files = git('ls-tree -r HEAD --name-only', integratorWorkspace.path).split('\n');
329
- expect(files).toContain('src/auth/login.ts');
330
- expect(files).toContain('src/auth/logout.ts');
331
-
332
- // ═══════════════════════════════════════════════════════════════════════
333
- // Phase 6: Cleanup workspaces and branches
334
- // ═══════════════════════════════════════════════════════════════════════
335
-
336
- // Deallocate integrator workspace
337
- manager.deallocateWorkspace(integratorId);
338
-
339
- // Verify workspaces are removed
340
- expect(manager.getWorkspace(worker1Id)).toBeNull();
341
- expect(manager.getWorkspace(worker2Id)).toBeNull();
342
- expect(manager.getWorkspace(integratorId)).toBeNull();
343
-
344
- // Clean up worker branches (branches for completed tasks)
345
- const cleanupResult = manager.cleanupWorkerBranches({ olderThanMs: 0 });
346
-
347
- // Worker branches should be cleaned up
348
- const branchesAfterCleanup = git('branch --list worker/*').split('\n').filter(Boolean);
349
- expect(branchesAfterCleanup.length).toBe(0);
350
- expect(cleanupResult.deleted.length).toBe(2);
351
- });
352
- });
353
-
354
- describe('parallel workers with merge queue', () => {
355
- it('should correctly order merges by priority', () => {
356
- const coordinatorId = 'coordinator-001';
357
- const streamId = manager.createIntegrationStream(coordinatorId, {
358
- name: 'feature/parallel',
359
- });
360
-
361
- // Create 3 tasks with different priorities
362
- const taskIds = [
363
- manager.createTask(streamId, { title: 'Task A', priority: 30 }),
364
- manager.createTask(streamId, { title: 'Task B', priority: 10 }), // Highest priority
365
- manager.createTask(streamId, { title: 'Task C', priority: 20 }),
366
- ];
367
-
368
- // Create workers for each task
369
- const workers = taskIds.map((taskId, i) => {
370
- const workerId = `worker-${i + 1}`;
371
- const workspace = manager.createWorkerWorkspace(
372
- workerId,
373
- taskId,
374
- streamId
375
- ) as WorkerWorkspace;
376
- const startResult = manager.claimTask(taskId, workerId, workspace.path);
377
-
378
- // Make a simple change
379
- writeAndCommit(
380
- `src/task-${i + 1}.ts`,
381
- `export const task${i + 1} = true;`,
382
- `feat: task ${i + 1}`,
383
- workspace.path
384
- );
385
-
386
- return { workerId, taskId, workspace, branchName: startResult.branchName };
387
- });
388
-
389
- // Submit all to merge queue
390
- workers.forEach((w, i) => {
391
- mergeQueue.submit({
392
- streamId,
393
- taskId: w.taskId,
394
- workerBranch: w.branchName,
395
- workerAgentId: w.workerId,
396
- priority: [30, 10, 20][i], // A=30, B=10, C=20
397
- });
398
- });
399
-
400
- // Verify queue depth
401
- expect(mergeQueue.getQueueDepth(streamId)).toBe(3);
402
-
403
- // Get items in priority order
404
- const order: string[] = [];
405
- let mr = mergeQueue.getNext(streamId);
406
-
407
- while (mr) {
408
- order.push(mr.taskId);
409
- mergeQueue.markProcessing(mr.id);
410
- mergeQueue.markAbandoned(mr.id); // Just mark abandoned to clear queue
411
- mr = mergeQueue.getNext(streamId);
412
- }
413
-
414
- // Should be B (10), C (20), A (30)
415
- expect(order[0]).toBe(taskIds[1]); // Task B - priority 10
416
- expect(order[1]).toBe(taskIds[2]); // Task C - priority 20
417
- expect(order[2]).toBe(taskIds[0]); // Task A - priority 30
418
-
419
- // Cleanup
420
- workers.forEach((w) => manager.deallocateWorkspace(w.workerId));
421
- });
422
-
423
- it('should handle FIFO when priorities are equal', () => {
424
- const coordinatorId = 'coordinator-001';
425
- const streamId = manager.createIntegrationStream(coordinatorId, {
426
- name: 'feature/fifo',
427
- });
428
-
429
- // Create tasks with same priority, submitted in order
430
- const taskIds: string[] = [];
431
- for (let i = 0; i < 3; i++) {
432
- taskIds.push(manager.createTask(streamId, { title: `Task ${i}`, priority: 100 }));
433
- }
434
-
435
- // Submit in order
436
- taskIds.forEach((taskId, i) => {
437
- mergeQueue.submit({
438
- streamId,
439
- taskId,
440
- workerBranch: `worker/test/${taskId}`,
441
- workerAgentId: `worker-${i}`,
442
- priority: 100,
443
- });
444
- });
445
-
446
- // Should come out in FIFO order
447
- const order: string[] = [];
448
- let mr = mergeQueue.getNext(streamId);
449
-
450
- while (mr) {
451
- order.push(mr.taskId);
452
- mergeQueue.markProcessing(mr.id);
453
- mergeQueue.markAbandoned(mr.id);
454
- mr = mergeQueue.getNext(streamId);
455
- }
456
-
457
- expect(order).toEqual(taskIds);
458
- });
459
- });
460
-
461
- describe('conflict detection', () => {
462
- it('should detect conflicts when workers modify same file', () => {
463
- const coordinatorId = 'coordinator-001';
464
- const streamId = manager.createIntegrationStream(coordinatorId, {
465
- name: 'feature/conflicts',
466
- });
467
-
468
- // Create two tasks
469
- const task1Id = manager.createTask(streamId, { title: 'Modify shared file - version A' });
470
- const task2Id = manager.createTask(streamId, { title: 'Modify shared file - version B' });
471
-
472
- // Worker 1 modifies the file
473
- const worker1Workspace = manager.createWorkerWorkspace(
474
- 'worker-1',
475
- task1Id,
476
- streamId
477
- ) as WorkerWorkspace;
478
- manager.claimTask(task1Id, 'worker-1', worker1Workspace.path);
479
- writeAndCommit(
480
- 'src/index.ts',
481
- 'export const version = "2.0.0"; // Updated by worker 1',
482
- 'feat: update version to 2.0.0',
483
- worker1Workspace.path
484
- );
485
-
486
- // Worker 2 modifies the same file differently
487
- const worker2Workspace = manager.createWorkerWorkspace(
488
- 'worker-2',
489
- task2Id,
490
- streamId
491
- ) as WorkerWorkspace;
492
- manager.claimTask(task2Id, 'worker-2', worker2Workspace.path);
493
- writeAndCommit(
494
- 'src/index.ts',
495
- 'export const version = "3.0.0"; // Updated by worker 2',
496
- 'feat: update version to 3.0.0',
497
- worker2Workspace.path
498
- );
499
-
500
- // Create integrator workspace
501
- const integratorWorkspace = manager.createIntegratorWorkspace(
502
- 'integrator-1',
503
- streamId
504
- ) as IntegratorWorkspace;
505
-
506
- // First merge succeeds
507
- const completeResult1 = adapter.completeTask({
508
- taskId: task1Id,
509
- worktree: integratorWorkspace.path,
510
- });
511
- expect(completeResult1.mergeCommit).toBeDefined();
512
-
513
- // Second merge should detect conflicts
514
- const conflicts = adapter.detectTaskConflicts(
515
- task2Id,
516
- integratorWorkspace.path
517
- );
518
-
519
- expect(conflicts.length).toBeGreaterThan(0);
520
- expect(conflicts).toContain('src/index.ts');
521
-
522
- // Cleanup
523
- manager.deallocateWorkspace('worker-1');
524
- manager.deallocateWorkspace('worker-2');
525
- manager.deallocateWorkspace('integrator-1');
526
- });
527
-
528
- it('should mark MR as conflict when merge fails', () => {
529
- const coordinatorId = 'coordinator-001';
530
- const streamId = manager.createIntegrationStream(coordinatorId, {
531
- name: 'feature/mr-conflict',
532
- });
533
-
534
- const task1Id = manager.createTask(streamId, { title: 'Task 1' });
535
- const task2Id = manager.createTask(streamId, { title: 'Task 2' });
536
-
537
- // Setup workers with conflicting changes
538
- const worker1Workspace = manager.createWorkerWorkspace(
539
- 'worker-1',
540
- task1Id,
541
- streamId
542
- ) as WorkerWorkspace;
543
- const start1 = manager.claimTask(task1Id, 'worker-1', worker1Workspace.path);
544
- writeAndCommit('shared.ts', 'const x = 1;', 'change 1', worker1Workspace.path);
545
-
546
- const worker2Workspace = manager.createWorkerWorkspace(
547
- 'worker-2',
548
- task2Id,
549
- streamId
550
- ) as WorkerWorkspace;
551
- const start2 = manager.claimTask(task2Id, 'worker-2', worker2Workspace.path);
552
- writeAndCommit('shared.ts', 'const x = 2;', 'change 2', worker2Workspace.path);
553
-
554
- // Submit both to merge queue
555
- const mr1Id = mergeQueue.submit({
556
- streamId,
557
- taskId: task1Id,
558
- workerBranch: start1.branchName,
559
- workerAgentId: 'worker-1',
560
- });
561
- const mr2Id = mergeQueue.submit({
562
- streamId,
563
- taskId: task2Id,
564
- workerBranch: start2.branchName,
565
- workerAgentId: 'worker-2',
566
- });
567
-
568
- // Create integrator
569
- const integratorWorkspace = manager.createIntegratorWorkspace(
570
- 'integrator-1',
571
- streamId
572
- ) as IntegratorWorkspace;
573
-
574
- // Process first MR - should succeed
575
- mergeQueue.markProcessing(mr1Id);
576
- const result1 = adapter.completeTask({
577
- taskId: task1Id,
578
- worktree: integratorWorkspace.path,
579
- });
580
- mergeQueue.markMerged(mr1Id, result1.mergeCommit);
581
-
582
- // Process second MR - should conflict
583
- mergeQueue.markProcessing(mr2Id);
584
-
585
- // Detect conflicts before attempting merge
586
- const conflicts = adapter.detectTaskConflicts(task2Id, integratorWorkspace.path);
587
-
588
- if (conflicts.length > 0) {
589
- mergeQueue.markConflict(mr2Id, conflicts, 'resolver-task-123');
590
- }
591
-
592
- // Verify MR states
593
- expect(mergeQueue.get(mr1Id)!.status).toBe('merged');
594
- expect(mergeQueue.get(mr2Id)!.status).toBe('conflict');
595
- expect(mergeQueue.get(mr2Id)!.conflictFiles).toContain('shared.ts');
596
-
597
- // Cleanup
598
- manager.deallocateWorkspace('worker-1');
599
- manager.deallocateWorkspace('worker-2');
600
- manager.deallocateWorkspace('integrator-1');
601
- });
602
- });
603
-
604
- describe('cleanup', () => {
605
- it('should properly deallocate worktrees', () => {
606
- const coordinatorId = 'coordinator-001';
607
- const streamId = manager.createIntegrationStream(coordinatorId, {
608
- name: 'feature/cleanup-test',
609
- });
610
-
611
- const taskId = manager.createTask(streamId, { title: 'Test cleanup' });
612
-
613
- // Create worker workspace
614
- const workerWorkspace = manager.createWorkerWorkspace(
615
- 'worker-1',
616
- taskId,
617
- streamId
618
- ) as WorkerWorkspace;
619
-
620
- // Verify worktree exists
621
- const worktreesBefore = listWorktrees();
622
- expect(worktreesBefore.length).toBeGreaterThan(1); // Main repo + at least one worktree
623
-
624
- // Deallocate
625
- manager.deallocateWorkspace('worker-1');
626
-
627
- // Verify worktree is removed
628
- expect(manager.getWorkspace('worker-1')).toBeNull();
629
- });
630
-
631
- it('should clean up completed task branches', () => {
632
- const coordinatorId = 'coordinator-001';
633
- const streamId = manager.createIntegrationStream(coordinatorId, {
634
- name: 'feature/branch-cleanup',
635
- });
636
-
637
- const taskId = manager.createTask(streamId, { title: 'Branch cleanup test' });
638
-
639
- // Worker claims task and makes changes
640
- const workerWorkspace = manager.createWorkerWorkspace(
641
- 'worker-1',
642
- taskId,
643
- streamId
644
- ) as WorkerWorkspace;
645
- const startResult = manager.claimTask(taskId, 'worker-1', workerWorkspace.path);
646
- writeAndCommit('test.ts', 'export const test = true;', 'test commit', workerWorkspace.path);
647
-
648
- // Verify worker branch exists
649
- const branchesBefore = git('branch --list worker/*').split('\n').filter(Boolean);
650
- expect(branchesBefore.length).toBeGreaterThan(0);
651
-
652
- // Deallocate worker first so integrator can use the stream branch
653
- manager.deallocateWorkspace('worker-1');
654
-
655
- // Create integrator and complete task
656
- const integratorWorkspace = manager.createIntegratorWorkspace(
657
- 'integrator-1',
658
- streamId
659
- ) as IntegratorWorkspace;
660
-
661
- adapter.completeTask({
662
- taskId,
663
- worktree: integratorWorkspace.path,
664
- });
665
-
666
- // Cleanup branches (with 0ms threshold to clean immediately)
667
- const cleanupResult = manager.cleanupWorkerBranches({ olderThanMs: 0 });
668
-
669
- // Verify branch is cleaned up
670
- const branchesAfter = git('branch --list worker/*').split('\n').filter(Boolean);
671
- expect(branchesAfter.length).toBe(0);
672
- expect(cleanupResult.deleted).toContain(startResult.branchName);
673
-
674
- // Cleanup workspaces
675
- manager.deallocateWorkspace('integrator-1');
676
- });
677
-
678
- it('should emit cleanup events', () => {
679
- const events: Array<{ type: string; data: Record<string, unknown> }> = [];
680
- manager.onEvent((event) => events.push(event));
681
-
682
- const coordinatorId = 'coordinator-001';
683
- const streamId = manager.createIntegrationStream(coordinatorId, {
684
- name: 'feature/events-test',
685
- });
686
-
687
- const taskId = manager.createTask(streamId, { title: 'Events test' });
688
-
689
- const workerWorkspace = manager.createWorkerWorkspace(
690
- 'worker-1',
691
- taskId,
692
- streamId
693
- ) as WorkerWorkspace;
694
-
695
- // Should have workspace:created event
696
- expect(events.some((e) => e.type === 'workspace:created')).toBe(true);
697
-
698
- manager.claimTask(taskId, 'worker-1', workerWorkspace.path);
699
- writeAndCommit('test.ts', 'test', 'test', workerWorkspace.path);
700
-
701
- // Deallocate worker first so integrator can use the stream branch
702
- manager.deallocateWorkspace('worker-1');
703
-
704
- // Should have workspace:deallocated event
705
- expect(events.some((e) => e.type === 'workspace:deallocated')).toBe(true);
706
-
707
- // Complete task
708
- const integratorWorkspace = manager.createIntegratorWorkspace(
709
- 'integrator-1',
710
- streamId
711
- ) as IntegratorWorkspace;
712
- adapter.completeTask({ taskId, worktree: integratorWorkspace.path });
713
-
714
- // Cleanup
715
- const cleanupResult = manager.cleanupWorkerBranches({ olderThanMs: 0 });
716
-
717
- // Should have branches:cleaned event if any branches were deleted
718
- if (cleanupResult.deleted.length > 0) {
719
- expect(events.some((e) => e.type === 'branches:cleaned')).toBe(true);
720
- }
721
-
722
- // Deallocate integrator
723
- manager.deallocateWorkspace('integrator-1');
724
- });
725
- });
726
-
727
- describe('edge cases', () => {
728
- it('should handle empty merge queue gracefully', () => {
729
- const coordinatorId = 'coordinator-001';
730
- const streamId = manager.createIntegrationStream(coordinatorId, {
731
- name: 'feature/empty-queue',
732
- });
733
-
734
- expect(mergeQueue.getNext(streamId)).toBeNull();
735
- expect(mergeQueue.getQueueDepth(streamId)).toBe(0);
736
- });
737
-
738
- it('should handle abandoned merge requests', () => {
739
- const coordinatorId = 'coordinator-001';
740
- const streamId = manager.createIntegrationStream(coordinatorId, {
741
- name: 'feature/abandoned',
742
- });
743
-
744
- const mrId = mergeQueue.submit({
745
- streamId,
746
- taskId: 'task-1',
747
- workerBranch: 'worker/test/branch',
748
- workerAgentId: 'worker-1',
749
- });
750
-
751
- // Mark as processing then abandoned
752
- mergeQueue.markProcessing(mrId);
753
- mergeQueue.markAbandoned(mrId);
754
-
755
- expect(mergeQueue.get(mrId)!.status).toBe('abandoned');
756
- expect(mergeQueue.getQueueDepth(streamId)).toBe(0);
757
- });
758
-
759
- it('should handle reordering pending merge requests', () => {
760
- const coordinatorId = 'coordinator-001';
761
- const streamId = manager.createIntegrationStream(coordinatorId, {
762
- name: 'feature/reorder',
763
- });
764
-
765
- const mr1Id = mergeQueue.submit({
766
- streamId,
767
- taskId: 'task-1',
768
- workerBranch: 'branch-1',
769
- workerAgentId: 'worker-1',
770
- priority: 100,
771
- });
772
-
773
- const mr2Id = mergeQueue.submit({
774
- streamId,
775
- taskId: 'task-2',
776
- workerBranch: 'branch-2',
777
- workerAgentId: 'worker-2',
778
- priority: 100,
779
- });
780
-
781
- // Initially task-1 should be first (FIFO)
782
- expect(mergeQueue.getNext(streamId)!.taskId).toBe('task-1');
783
-
784
- // Reposition task-2 to position 1 (front of queue)
785
- mergeQueue.reposition(mr2Id, 1);
786
-
787
- // Now task-2 should be first
788
- expect(mergeQueue.getNext(streamId)!.taskId).toBe('task-2');
789
- });
790
-
791
- it('should recover stale tasks', () => {
792
- const coordinatorId = 'coordinator-001';
793
- const streamId = manager.createIntegrationStream(coordinatorId, {
794
- name: 'feature/recovery',
795
- });
796
-
797
- const taskId = manager.createTask(streamId, { title: 'Stale task' });
798
-
799
- // Worker claims task
800
- const workerWorkspace = manager.createWorkerWorkspace(
801
- 'worker-1',
802
- taskId,
803
- streamId
804
- ) as WorkerWorkspace;
805
- manager.claimTask(taskId, 'worker-1', workerWorkspace.path);
806
-
807
- // Task should be in_progress
808
- let task = adapter.getTask(taskId);
809
- expect(task!.status).toBe('in_progress');
810
-
811
- // Recover tasks with -1ms threshold (cutoff is 1ms in future, so all tasks are stale)
812
- const recoveryResult = adapter.recoverStaleTasks(-1);
813
-
814
- // Task should be released back to open
815
- task = adapter.getTask(taskId);
816
- expect(task!.status).toBe('open');
817
- expect(recoveryResult.released).toContain(taskId);
818
-
819
- // Cleanup
820
- manager.deallocateWorkspace('worker-1');
821
- });
822
- });
823
-
824
- // ═══════════════════════════════════════════════════════════════════════════
825
- // E2E Test Scenarios from s-1zcx for s-7ktd
826
- // ═══════════════════════════════════════════════════════════════════════════
827
-
828
- describe('s-7ktd E2E scenarios', () => {
829
- describe('WORK-ISO-01: Worker workspace isolation', () => {
830
- it('should isolate parallel workers with different paths and branches', () => {
831
- const coordinatorId = 'coordinator-001';
832
- const streamId = manager.createIntegrationStream(coordinatorId, {
833
- name: 'feature/isolation-test',
834
- });
835
-
836
- // Create tasks for multiple workers
837
- const task1Id = manager.createTask(streamId, { title: 'Task A' });
838
- const task2Id = manager.createTask(streamId, { title: 'Task B' });
839
-
840
- // Create two parallel workers
841
- const worker1Workspace = manager.createWorkerWorkspace(
842
- 'worker-alpha-001',
843
- task1Id,
844
- streamId
845
- ) as WorkerWorkspace;
846
-
847
- const worker2Workspace = manager.createWorkerWorkspace(
848
- 'worker-beta-002',
849
- task2Id,
850
- streamId
851
- ) as WorkerWorkspace;
852
-
853
- // Claim tasks (creates branches)
854
- const start1 = manager.claimTask(task1Id, 'worker-alpha-001', worker1Workspace.path);
855
- const start2 = manager.claimTask(task2Id, 'worker-beta-002', worker2Workspace.path);
856
-
857
- // ASSERTION: Different workspace paths
858
- expect(worker1Workspace.path).not.toBe(worker2Workspace.path);
859
- expect(fs.existsSync(worker1Workspace.path)).toBe(true);
860
- expect(fs.existsSync(worker2Workspace.path)).toBe(true);
861
-
862
- // ASSERTION: Different branches
863
- expect(start1.branchName).not.toBe(start2.branchName);
864
- expect(start1.branchName).toContain('worker-alpha-001');
865
- expect(start2.branchName).toContain('worker-beta-002');
866
-
867
- // ASSERTION: Isolated file changes
868
- fs.writeFileSync(path.join(worker1Workspace.path, 'worker1.txt'), 'worker 1');
869
- fs.writeFileSync(path.join(worker2Workspace.path, 'worker2.txt'), 'worker 2');
870
-
871
- // Worker 1 should not see worker 2's file and vice versa
872
- expect(fs.existsSync(path.join(worker1Workspace.path, 'worker2.txt'))).toBe(false);
873
- expect(fs.existsSync(path.join(worker2Workspace.path, 'worker1.txt'))).toBe(false);
874
-
875
- // Cleanup
876
- manager.deallocateWorkspace('worker-alpha-001');
877
- manager.deallocateWorkspace('worker-beta-002');
878
- });
879
- });
880
-
881
- describe('WORK-ISO-02: Coordinator sees children', () => {
882
- it('should populate childWorkspacePaths when workers spawn', () => {
883
- const coordinatorId = 'coordinator-001';
884
- const streamId = manager.createIntegrationStream(coordinatorId, {
885
- name: 'feature/child-visibility',
886
- });
887
-
888
- // Create coordinator workspace
889
- const coordinatorWorkspace = manager.createCoordinatorWorkspace(
890
- coordinatorId,
891
- streamId
892
- ) as CoordinatorWorkspace;
893
-
894
- // Initially no children
895
- expect(coordinatorWorkspace.childWorkspacePaths.size).toBe(0);
896
-
897
- // Create worker workspaces and register them
898
- const task1Id = manager.createTask(streamId, { title: 'Task 1' });
899
- const task2Id = manager.createTask(streamId, { title: 'Task 2' });
900
-
901
- const worker1Workspace = manager.createWorkerWorkspace(
902
- 'worker-1',
903
- task1Id,
904
- streamId
905
- ) as WorkerWorkspace;
906
- manager.registerChildWorkspace(coordinatorId, 'worker-1', worker1Workspace.path);
907
-
908
- const worker2Workspace = manager.createWorkerWorkspace(
909
- 'worker-2',
910
- task2Id,
911
- streamId
912
- ) as WorkerWorkspace;
913
- manager.registerChildWorkspace(coordinatorId, 'worker-2', worker2Workspace.path);
914
-
915
- // ASSERTION: Coordinator should see both child workspaces
916
- expect(coordinatorWorkspace.childWorkspacePaths.size).toBe(2);
917
- expect(coordinatorWorkspace.childWorkspacePaths.get('worker-1')).toBe(worker1Workspace.path);
918
- expect(coordinatorWorkspace.childWorkspacePaths.get('worker-2')).toBe(worker2Workspace.path);
919
-
920
- // ASSERTION: Coordinator can read files from child workspaces
921
- fs.writeFileSync(path.join(worker1Workspace.path, 'child1-work.txt'), 'work from child 1');
922
- const childPath = coordinatorWorkspace.childWorkspacePaths.get('worker-1')!;
923
- const content = fs.readFileSync(path.join(childPath, 'child1-work.txt'), 'utf8');
924
- expect(content).toBe('work from child 1');
925
-
926
- // Cleanup
927
- manager.deallocateWorkspace('worker-1');
928
- manager.deallocateWorkspace('worker-2');
929
- manager.deallocateWorkspace(coordinatorId);
930
- });
931
-
932
- it('should remove child from coordinator map on deallocation', () => {
933
- const coordinatorId = 'coordinator-001';
934
- const streamId = manager.createIntegrationStream(coordinatorId, {
935
- name: 'feature/child-cleanup',
936
- });
937
-
938
- const coordinatorWorkspace = manager.createCoordinatorWorkspace(
939
- coordinatorId,
940
- streamId
941
- ) as CoordinatorWorkspace;
942
-
943
- const taskId = manager.createTask(streamId, { title: 'Task' });
944
- const workerWorkspace = manager.createWorkerWorkspace(
945
- 'worker-1',
946
- taskId,
947
- streamId
948
- ) as WorkerWorkspace;
949
- manager.registerChildWorkspace(coordinatorId, 'worker-1', workerWorkspace.path);
950
-
951
- // Verify child is registered
952
- expect(coordinatorWorkspace.childWorkspacePaths.has('worker-1')).toBe(true);
953
-
954
- // Deallocate worker
955
- manager.deallocateWorkspace('worker-1');
956
-
957
- // ASSERTION: Child should be removed from coordinator's map
958
- expect(coordinatorWorkspace.childWorkspacePaths.has('worker-1')).toBe(false);
959
-
960
- // Cleanup
961
- manager.deallocateWorkspace(coordinatorId);
962
- });
963
- });
964
-
965
- describe('WORK-ISO-03: Monitor has no workspace', () => {
966
- it('should not create workspace for monitor role', () => {
967
- // Monitors don't have createMonitorWorkspace method
968
- // They should get undefined workspace
969
- const coordinatorId = 'coordinator-001';
970
- const streamId = manager.createIntegrationStream(coordinatorId, {
971
- name: 'feature/monitor-test',
972
- });
973
-
974
- // Monitor has no workspace creation method in WorkspaceManager
975
- // This is by design per s-7ktd spec
976
- expect((manager as any).createMonitorWorkspace).toBeUndefined();
977
-
978
- // Verify that getWorkspace returns null for non-existent agent
979
- const monitorWorkspace = manager.getWorkspace('monitor-001');
980
- expect(monitorWorkspace).toBeNull();
981
- });
982
- });
983
-
984
- describe('WORK-ISO-04: Integrator on merge branch', () => {
985
- it('should give integrator a different worktree from coordinator', () => {
986
- const coordinatorId = 'coordinator-001';
987
- const streamId = manager.createIntegrationStream(coordinatorId, {
988
- name: 'feature/branch-separation',
989
- });
990
-
991
- // Create coordinator workspace
992
- const coordinatorWorkspace = manager.createCoordinatorWorkspace(
993
- coordinatorId,
994
- streamId
995
- ) as CoordinatorWorkspace;
996
-
997
- // Create integrator workspace
998
- const integratorWorkspace = manager.createIntegratorWorkspace(
999
- 'integrator-001',
1000
- streamId
1001
- ) as IntegratorWorkspace;
1002
-
1003
- // ASSERTION: Different worktree paths
1004
- expect(coordinatorWorkspace.path).not.toBe(integratorWorkspace.path);
1005
-
1006
- // Both should have the stream branch (current implementation)
1007
- // Note: Per spec, integrator should have separate merge branch
1008
- // but current implementation uses same stream branch
1009
- expect(integratorWorkspace.integrationBranch).toBeDefined();
1010
- expect(integratorWorkspace.coordinatorId).toBe(coordinatorId);
1011
-
1012
- // ASSERTION: Both workspaces exist and are functional
1013
- expect(fs.existsSync(coordinatorWorkspace.path)).toBe(true);
1014
- expect(fs.existsSync(integratorWorkspace.path)).toBe(true);
1015
-
1016
- // Cleanup
1017
- manager.deallocateWorkspace('integrator-001');
1018
- manager.deallocateWorkspace(coordinatorId);
1019
- });
1020
- });
1021
-
1022
- describe('WORK-ISO-05: Concurrent worktree creation', () => {
1023
- it('should handle multiple workers spawned simultaneously', async () => {
1024
- const coordinatorId = 'coordinator-001';
1025
- const streamId = manager.createIntegrationStream(coordinatorId, {
1026
- name: 'feature/concurrent',
1027
- });
1028
-
1029
- const workerCount = 5;
1030
- const taskIds: string[] = [];
1031
- for (let i = 0; i < workerCount; i++) {
1032
- taskIds.push(manager.createTask(streamId, { title: `Task ${i}` }));
1033
- }
1034
-
1035
- // Create all workers concurrently
1036
- const workerPromises = taskIds.map((taskId, i) => {
1037
- return Promise.resolve().then(() => {
1038
- const workspace = manager.createWorkerWorkspace(
1039
- `worker-${i}`,
1040
- taskId,
1041
- streamId
1042
- ) as WorkerWorkspace;
1043
- const startResult = manager.claimTask(taskId, `worker-${i}`, workspace.path);
1044
- return { workspace, branchName: startResult.branchName };
1045
- });
1046
- });
1047
-
1048
- const results = await Promise.all(workerPromises);
1049
-
1050
- // ASSERTION: All workers should have unique paths
1051
- const paths = results.map(r => r.workspace.path);
1052
- const uniquePaths = new Set(paths);
1053
- expect(uniquePaths.size).toBe(workerCount);
1054
-
1055
- // ASSERTION: All workers should have unique branches
1056
- const branches = results.map(r => r.branchName);
1057
- const uniqueBranches = new Set(branches);
1058
- expect(uniqueBranches.size).toBe(workerCount);
1059
-
1060
- // ASSERTION: All workspace directories exist
1061
- for (const result of results) {
1062
- expect(fs.existsSync(result.workspace.path)).toBe(true);
1063
- }
1064
-
1065
- // Cleanup
1066
- for (let i = 0; i < workerCount; i++) {
1067
- manager.deallocateWorkspace(`worker-${i}`);
1068
- }
1069
- });
1070
- });
1071
-
1072
- describe('WORK-ISO-06: Slot exhaustion', () => {
1073
- it('should handle many workers gracefully', () => {
1074
- const coordinatorId = 'coordinator-001';
1075
- const streamId = manager.createIntegrationStream(coordinatorId, {
1076
- name: 'feature/many-workers',
1077
- });
1078
-
1079
- const workerCount = 15; // More than typical pool size
1080
- const workers: Array<{ id: string; workspace: WorkerWorkspace }> = [];
1081
-
1082
- // Create many workers
1083
- for (let i = 0; i < workerCount; i++) {
1084
- const workerId = `worker-${String(i).padStart(3, '0')}`;
1085
- const taskId = manager.createTask(streamId, { title: `Task ${i}` });
1086
-
1087
- const workspace = manager.createWorkerWorkspace(
1088
- workerId,
1089
- taskId,
1090
- streamId
1091
- ) as WorkerWorkspace;
1092
-
1093
- workers.push({ id: workerId, workspace });
1094
- }
1095
-
1096
- // ASSERTION: All workers should have unique paths
1097
- const paths = workers.map(w => w.workspace.path);
1098
- const uniquePaths = new Set(paths);
1099
- expect(uniquePaths.size).toBe(workerCount);
1100
-
1101
- // ASSERTION: All workspaces exist
1102
- for (const worker of workers) {
1103
- expect(fs.existsSync(worker.workspace.path)).toBe(true);
1104
- }
1105
-
1106
- // ASSERTION: All workspaces have unique agent IDs
1107
- const agentIds = workers.map(w => w.workspace.agentId);
1108
- const uniqueIds = new Set(agentIds);
1109
- expect(uniqueIds.size).toBe(workerCount);
1110
-
1111
- // Cleanup
1112
- for (const worker of workers) {
1113
- manager.deallocateWorkspace(worker.id);
1114
- }
1115
- });
1116
- });
1117
-
1118
- describe('WORK-ISO-07: Workspace cleanup on done', () => {
1119
- it('should fully cleanup workspace when worker calls done()', () => {
1120
- const coordinatorId = 'coordinator-001';
1121
- const streamId = manager.createIntegrationStream(coordinatorId, {
1122
- name: 'feature/done-cleanup',
1123
- });
1124
-
1125
- const taskId = manager.createTask(streamId, { title: 'Task' });
1126
-
1127
- const workerWorkspace = manager.createWorkerWorkspace(
1128
- 'worker-1',
1129
- taskId,
1130
- streamId
1131
- ) as WorkerWorkspace;
1132
-
1133
- // Verify workspace exists before deallocation
1134
- expect(manager.getWorkspace('worker-1')).not.toBeNull();
1135
- expect(fs.existsSync(workerWorkspace.path)).toBe(true);
1136
-
1137
- // Count worktrees before
1138
- const worktreesBefore = listWorktrees().length;
1139
-
1140
- // Deallocate (simulates done())
1141
- manager.deallocateWorkspace('worker-1');
1142
-
1143
- // ASSERTION: Workspace is removed from manager
1144
- expect(manager.getWorkspace('worker-1')).toBeNull();
1145
-
1146
- // ASSERTION: Agent to stream mapping is cleared
1147
- expect(manager.getStreamForAgent('worker-1')).toBeNull();
1148
-
1149
- // ASSERTION: Worktree count decreased
1150
- const worktreesAfter = listWorktrees().length;
1151
- expect(worktreesAfter).toBeLessThan(worktreesBefore);
1152
- });
1153
- });
1154
- });
1155
- });