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,1338 +0,0 @@
1
- /**
2
- * E2E Tests for OpenTasksTaskBackend
3
- *
4
- * Exercises the OpenTasksTaskBackend directly against a real OpenTasks daemon.
5
- * Validates bidirectional ID mapping, status sync, graph-based blocking,
6
- * pull model (claim/unclaim), import, subtask hierarchy, and event subscriptions.
7
- *
8
- * Requires: opentasks package installed
9
- *
10
- * @module task/backend/opentasks/__tests__/opentasks-backend.e2e.test
11
- */
12
-
13
- import { describe, it, expect, beforeAll, afterAll, beforeEach } from "vitest";
14
- import * as fs from "fs";
15
- import * as path from "path";
16
- import * as os from "os";
17
- import {
18
- createEventStore,
19
- type EventStore,
20
- } from "../../../../store/event-store.js";
21
- import {
22
- OpenTasksTaskBackend,
23
- createOpenTasksTaskBackend,
24
- OpenTasksBackendError,
25
- } from "../backend.js";
26
- import { IPCOpenTasksClient } from "../client.js";
27
- import type { OpenTasksClient } from "../client.js";
28
- import type { TaskChangeEvent } from "../../types.js";
29
-
30
- // =============================================================================
31
- // Helpers
32
- // =============================================================================
33
-
34
- const TEST_AGENT = "agent_e2e_test";
35
- const WORKER_1 = "agent_worker_1";
36
- const WORKER_2 = "agent_worker_2";
37
-
38
- /**
39
- * Wait for a condition to become true with timeout.
40
- */
41
- async function waitFor(
42
- condition: () => boolean | Promise<boolean>,
43
- timeoutMs = 5000,
44
- intervalMs = 50
45
- ): Promise<void> {
46
- const start = Date.now();
47
- while (Date.now() - start < timeoutMs) {
48
- if (await condition()) return;
49
- await new Promise((r) => setTimeout(r, intervalMs));
50
- }
51
- throw new Error(`waitFor timed out after ${timeoutMs}ms`);
52
- }
53
-
54
- // =============================================================================
55
- // Test Suite
56
- // =============================================================================
57
-
58
- describe("OpenTasksTaskBackend E2E", () => {
59
- let tempDir: string;
60
- let daemon: any;
61
- let socketPath: string;
62
- let eventStore: EventStore;
63
- let client: IPCOpenTasksClient;
64
- let backend: OpenTasksTaskBackend;
65
-
66
- beforeAll(async () => {
67
- // Create temp directory for opentasks data
68
- tempDir = fs.mkdtempSync(
69
- path.join(os.tmpdir(), "macro-e2e-opentasks-backend-")
70
- );
71
- const locationPath = path.join(tempDir, ".opentasks");
72
- fs.mkdirSync(locationPath, { recursive: true });
73
-
74
- const registryPath = path.join(tempDir, "registry.json");
75
-
76
- // Start a real opentasks daemon
77
- const opentasks = await import("opentasks");
78
- daemon = await opentasks.createDaemonWithStore({
79
- locationPath,
80
- version: "0.0.3",
81
- registryPath,
82
- shutdownTimeoutMs: 2000,
83
- });
84
- await daemon.start();
85
- socketPath = daemon.socketPath;
86
-
87
- // Create client
88
- client = new IPCOpenTasksClient({
89
- socketPath,
90
- autoConnect: true,
91
- timeout: 10000,
92
- });
93
- await client.connect();
94
- }, 30000);
95
-
96
- afterAll(async () => {
97
- try {
98
- client?.disconnect();
99
- } catch {
100
- /* ignore */
101
- }
102
- try {
103
- await daemon?.stop();
104
- } catch {
105
- /* ignore */
106
- }
107
- try {
108
- if (tempDir) fs.rmSync(tempDir, { recursive: true, force: true });
109
- } catch {
110
- /* ignore */
111
- }
112
- }, 15000);
113
-
114
- // Fresh EventStore + backend per test to avoid cross-test pollution
115
- beforeEach(async () => {
116
- if (eventStore) {
117
- try {
118
- await eventStore.close();
119
- } catch {
120
- /* ignore */
121
- }
122
- }
123
- eventStore = await createEventStore({ inMemory: true });
124
- backend = createOpenTasksTaskBackend(eventStore, client, {
125
- syncStatus: true,
126
- sourceLabel: "e2e-test",
127
- });
128
- });
129
-
130
- // ─────────────────────────────────────────────────────────────────────────────
131
- // 1. Lifecycle: Create / Get / Update / Delete
132
- // ─────────────────────────────────────────────────────────────────────────────
133
-
134
- describe("lifecycle", () => {
135
- it("should create a task backed by a real OpenTasks issue", async () => {
136
- const task = await backend.create({
137
- description: "E2E create test",
138
- created_by: TEST_AGENT,
139
- tags: ["e2e", "lifecycle"],
140
- });
141
-
142
- expect(task.id).toMatch(/^task_/);
143
- expect(task.description).toBe("E2E create test");
144
- expect(task.status).toBe("pending");
145
- expect(task.created_by).toBe(TEST_AGENT);
146
- expect(task.external_id).toBeDefined();
147
-
148
- // Verify the issue exists in the real daemon
149
- const issue = await client.getIssue(task.external_id!);
150
- expect(issue).not.toBeNull();
151
- expect(issue!.title).toBe("E2E create test");
152
- expect(issue!.status).toBe("open");
153
- });
154
-
155
- it("should retrieve a task by ID", async () => {
156
- const task = await backend.create({
157
- description: "E2E get test",
158
- created_by: TEST_AGENT,
159
- });
160
-
161
- const retrieved = await backend.get(task.id);
162
- expect(retrieved).not.toBeNull();
163
- expect(retrieved!.id).toBe(task.id);
164
- expect(retrieved!.description).toBe("E2E get test");
165
- expect(retrieved!.external_id).toBe(task.external_id);
166
- });
167
-
168
- it("should return null for non-existent task", async () => {
169
- const result = await backend.get("task_nonexistent_xyz");
170
- expect(result).toBeNull();
171
- });
172
-
173
- it("should update task outputs", async () => {
174
- const task = await backend.create({
175
- description: "E2E update test",
176
- created_by: TEST_AGENT,
177
- });
178
-
179
- const updated = await backend.update(task.id, {
180
- outputs: { result: "success", files_changed: 5 },
181
- });
182
-
183
- expect(updated.outputs).toEqual(
184
- expect.objectContaining({ result: "success" })
185
- );
186
- });
187
-
188
- it("should update task description and sync to daemon", async () => {
189
- const task = await backend.create({
190
- description: "Original description",
191
- created_by: TEST_AGENT,
192
- });
193
-
194
- await backend.update(task.id, {
195
- description: "Updated description",
196
- });
197
-
198
- // Verify the daemon issue was updated
199
- const issue = await client.getIssue(task.external_id!);
200
- expect(issue!.title).toBe("Updated description");
201
- });
202
-
203
- it("should delete a task and its backing issue", async () => {
204
- const task = await backend.create({
205
- description: "E2E delete test",
206
- created_by: TEST_AGENT,
207
- });
208
-
209
- const issueId = task.external_id!;
210
- await backend.delete(task.id);
211
-
212
- // Mapping should be cleared
213
- expect(backend.getIssueForTask(task.id)).toBeUndefined();
214
- expect(backend.getTaskForIssue(issueId)).toBeUndefined();
215
- });
216
- });
217
-
218
- // ─────────────────────────────────────────────────────────────────────────────
219
- // 2. Status Transitions with Daemon Sync
220
- // ─────────────────────────────────────────────────────────────────────────────
221
-
222
- describe("status transitions", () => {
223
- it("should assign a task and sync assignee to daemon", async () => {
224
- const task = await backend.create({
225
- description: "E2E assign test",
226
- created_by: TEST_AGENT,
227
- });
228
-
229
- await backend.assign(task.id, WORKER_1);
230
-
231
- const updated = await backend.get(task.id);
232
- expect(updated!.status).toBe("assigned");
233
- expect(updated!.assigned_agent).toBe(WORKER_1);
234
-
235
- // Verify daemon issue was updated (assignee synced)
236
- const issue = await client.getIssue(task.external_id!);
237
- expect(issue).not.toBeNull();
238
- });
239
-
240
- it("should unassign a task and clear assignee in daemon", async () => {
241
- const task = await backend.create({
242
- description: "E2E unassign test",
243
- created_by: TEST_AGENT,
244
- });
245
-
246
- await backend.assign(task.id, WORKER_1);
247
- await backend.unassign(task.id);
248
-
249
- const updated = await backend.get(task.id);
250
- expect(updated!.assigned_agent).toBeUndefined();
251
-
252
- // Daemon issue should still exist
253
- const issue = await client.getIssue(task.external_id!);
254
- expect(issue).not.toBeNull();
255
- });
256
-
257
- it("should throw when unassigning a non-assigned task", async () => {
258
- const task = await backend.create({
259
- description: "Not assigned",
260
- created_by: TEST_AGENT,
261
- });
262
-
263
- await expect(backend.unassign(task.id)).rejects.toThrow(
264
- OpenTasksBackendError
265
- );
266
- });
267
-
268
- it("should start a task and sync in_progress to daemon", async () => {
269
- const task = await backend.create({
270
- description: "E2E start test",
271
- created_by: TEST_AGENT,
272
- });
273
-
274
- await backend.start(task.id);
275
-
276
- const updated = await backend.get(task.id);
277
- expect(updated!.status).toBe("in_progress");
278
-
279
- // Daemon should reflect in_progress
280
- const issue = await client.getIssue(task.external_id!);
281
- expect(issue!.status).toBe("in_progress");
282
- });
283
-
284
- it("should complete a task with outputs and close in daemon", async () => {
285
- const task = await backend.create({
286
- description: "E2E complete test",
287
- created_by: TEST_AGENT,
288
- });
289
-
290
- await backend.start(task.id);
291
- await backend.complete(task.id, {
292
- summary: "All done",
293
- data: { lines_changed: 42 },
294
- });
295
-
296
- const updated = await backend.get(task.id);
297
- expect(updated!.status).toBe("completed");
298
- expect(updated!.outputs).toEqual(
299
- expect.objectContaining({ summary: "All done", lines_changed: 42 })
300
- );
301
-
302
- // Daemon issue should be closed
303
- const issue = await client.getIssue(task.external_id!);
304
- expect(issue!.status).toBe("closed");
305
- });
306
-
307
- it("should fail a task and close in daemon with error metadata", async () => {
308
- const task = await backend.create({
309
- description: "E2E fail test",
310
- created_by: TEST_AGENT,
311
- });
312
-
313
- await backend.start(task.id);
314
- await backend.fail(task.id, {
315
- message: "Compilation failed",
316
- code: "COMPILE_ERROR",
317
- });
318
-
319
- const updated = await backend.get(task.id);
320
- expect(updated!.status).toBe("failed");
321
-
322
- // Daemon issue should be closed
323
- const issue = await client.getIssue(task.external_id!);
324
- expect(issue!.status).toBe("closed");
325
- });
326
-
327
- it("should reject invalid status transitions", async () => {
328
- const task = await backend.create({
329
- description: "E2E invalid transition test",
330
- created_by: TEST_AGENT,
331
- });
332
-
333
- await backend.start(task.id);
334
- await backend.complete(task.id);
335
-
336
- // completed → in_progress is invalid
337
- await expect(backend.start(task.id)).rejects.toThrow(
338
- OpenTasksBackendError
339
- );
340
-
341
- // completed → completed is invalid
342
- await expect(backend.complete(task.id)).rejects.toThrow(
343
- OpenTasksBackendError
344
- );
345
- });
346
-
347
- it("should allow failed → pending recovery", async () => {
348
- const task = await backend.create({
349
- description: "E2E recovery test",
350
- created_by: TEST_AGENT,
351
- });
352
-
353
- await backend.start(task.id);
354
- await backend.fail(task.id, { message: "first attempt failed" });
355
-
356
- // Retry: failed → pending is valid
357
- await backend.update(task.id, { status: "pending" });
358
-
359
- const updated = await backend.get(task.id);
360
- expect(updated!.status).toBe("pending");
361
- });
362
-
363
- it("should track full lifecycle: pending → assigned → in_progress → completed", async () => {
364
- const task = await backend.create({
365
- description: "E2E full lifecycle test",
366
- created_by: TEST_AGENT,
367
- });
368
-
369
- expect((await backend.get(task.id))!.status).toBe("pending");
370
-
371
- await backend.assign(task.id, WORKER_1);
372
- expect((await backend.get(task.id))!.status).toBe("assigned");
373
-
374
- await backend.start(task.id);
375
- expect((await backend.get(task.id))!.status).toBe("in_progress");
376
-
377
- await backend.complete(task.id, { summary: "Done!" });
378
- expect((await backend.get(task.id))!.status).toBe("completed");
379
- });
380
- });
381
-
382
- // ─────────────────────────────────────────────────────────────────────────────
383
- // 3. Bidirectional ID Mapping
384
- // ─────────────────────────────────────────────────────────────────────────────
385
-
386
- describe("bidirectional ID mapping", () => {
387
- it("should maintain consistent task ↔ issue mapping", async () => {
388
- const task = await backend.create({
389
- description: "ID mapping test",
390
- created_by: TEST_AGENT,
391
- });
392
-
393
- const issueId = backend.getIssueForTask(task.id);
394
- expect(issueId).toBeDefined();
395
-
396
- const taskId = backend.getTaskForIssue(issueId!);
397
- expect(taskId).toBe(task.id);
398
- });
399
-
400
- it("should clear mapping on delete", async () => {
401
- const task = await backend.create({
402
- description: "Mapping delete test",
403
- created_by: TEST_AGENT,
404
- });
405
-
406
- const issueId = task.external_id!;
407
- await backend.delete(task.id);
408
-
409
- expect(backend.getIssueForTask(task.id)).toBeUndefined();
410
- expect(backend.getTaskForIssue(issueId)).toBeUndefined();
411
- });
412
-
413
- it("should include external_id on created tasks", async () => {
414
- const task = await backend.create({
415
- description: "External ID test",
416
- created_by: TEST_AGENT,
417
- });
418
-
419
- // external_id should be set on the task
420
- expect(task.external_id).toBeDefined();
421
- expect(task.external_id).toMatch(/^[a-z0-9-]+$/i);
422
-
423
- // The issue should be retrievable from the daemon
424
- const issue = await client.getIssue(task.external_id!);
425
- expect(issue).not.toBeNull();
426
- expect(issue!.title).toBe("External ID test");
427
- });
428
- });
429
-
430
- // ─────────────────────────────────────────────────────────────────────────────
431
- // 4. Dependencies (Graph-based Blocking)
432
- // ─────────────────────────────────────────────────────────────────────────────
433
-
434
- describe("dependencies via graph edges", () => {
435
- it("should create blocking relationships in daemon graph", async () => {
436
- const blocker = await backend.create({
437
- description: "E2E blocker task",
438
- created_by: TEST_AGENT,
439
- });
440
- const blocked = await backend.create({
441
- description: "E2E blocked task",
442
- created_by: TEST_AGENT,
443
- });
444
-
445
- await backend.addBlocker(blocked.id, blocker.id);
446
-
447
- // Verify via backend API
448
- const blockedTask = await backend.get(blocked.id);
449
- expect(blockedTask!.isBlocked).toBe(true);
450
-
451
- // Verify blocker is returned
452
- const blockers = await backend.getBlockers(blocked.id);
453
- expect(blockers).toHaveLength(1);
454
- expect(blockers[0].id).toBe(blocker.id);
455
- });
456
-
457
- it("should return tasks blocked by a given task", async () => {
458
- const blocker = await backend.create({
459
- description: "Blocker",
460
- created_by: TEST_AGENT,
461
- });
462
- const blocked1 = await backend.create({
463
- description: "Blocked 1",
464
- created_by: TEST_AGENT,
465
- });
466
- const blocked2 = await backend.create({
467
- description: "Blocked 2",
468
- created_by: TEST_AGENT,
469
- });
470
-
471
- await backend.addBlocker(blocked1.id, blocker.id);
472
- await backend.addBlocker(blocked2.id, blocker.id);
473
-
474
- const blocking = await backend.getBlocking(blocker.id);
475
- expect(blocking).toHaveLength(2);
476
- const blockingIds = blocking.map((t) => t.id);
477
- expect(blockingIds).toContain(blocked1.id);
478
- expect(blockingIds).toContain(blocked2.id);
479
- });
480
-
481
- it("should remove blocking relationships", async () => {
482
- const blocker = await backend.create({
483
- description: "Removable blocker",
484
- created_by: TEST_AGENT,
485
- });
486
- const blocked = await backend.create({
487
- description: "Will be unblocked",
488
- created_by: TEST_AGENT,
489
- });
490
-
491
- await backend.addBlocker(blocked.id, blocker.id);
492
- expect((await backend.get(blocked.id))!.isBlocked).toBe(true);
493
-
494
- await backend.removeBlocker(blocked.id, blocker.id);
495
-
496
- // isBlocked should update via async graph query
497
- const updatedBlocked = await backend.list({
498
- includeBlocked: true,
499
- });
500
- const task = updatedBlocked.find((t) => t.id === blocked.id);
501
- expect(task!.isBlocked).toBe(false);
502
- });
503
-
504
- it("should unblock when blocker is completed", async () => {
505
- const blocker = await backend.create({
506
- description: "Completes to unblock",
507
- created_by: TEST_AGENT,
508
- });
509
- const blocked = await backend.create({
510
- description: "Waiting for blocker",
511
- created_by: TEST_AGENT,
512
- });
513
-
514
- await backend.addBlocker(blocked.id, blocker.id);
515
-
516
- // Blocked task should be blocked
517
- const blockedBefore = await backend.list({ includeBlocked: true });
518
- expect(blockedBefore.find((t) => t.id === blocked.id)!.isBlocked).toBe(
519
- true
520
- );
521
-
522
- // Complete the blocker
523
- await backend.start(blocker.id);
524
- await backend.complete(blocker.id);
525
-
526
- // After completing blocker, blocked task should be unblocked
527
- // (the daemon graph edge still exists, but the blocker is closed)
528
- const all = await backend.list({ includeBlocked: true });
529
- const blockedAfter = all.find((t) => t.id === blocked.id);
530
- expect(blockedAfter!.isBlocked).toBe(false);
531
- });
532
-
533
- it("should handle chain dependencies: A blocks B blocks C", async () => {
534
- const a = await backend.create({
535
- description: "Chain A",
536
- created_by: TEST_AGENT,
537
- });
538
- const b = await backend.create({
539
- description: "Chain B",
540
- created_by: TEST_AGENT,
541
- });
542
- const c = await backend.create({
543
- description: "Chain C",
544
- created_by: TEST_AGENT,
545
- });
546
-
547
- await backend.addBlocker(b.id, a.id);
548
- await backend.addBlocker(c.id, b.id);
549
-
550
- // B is blocked by A, C is blocked by B
551
- const allTasks = await backend.list({ includeBlocked: true });
552
- expect(allTasks.find((t) => t.id === a.id)!.isBlocked).toBe(false);
553
- expect(allTasks.find((t) => t.id === b.id)!.isBlocked).toBe(true);
554
- expect(allTasks.find((t) => t.id === c.id)!.isBlocked).toBe(true);
555
-
556
- // Complete A → B unblocks but C stays blocked by B
557
- await backend.start(a.id);
558
- await backend.complete(a.id);
559
-
560
- const afterA = await backend.list({ includeBlocked: true });
561
- expect(afterA.find((t) => t.id === b.id)!.isBlocked).toBe(false);
562
- expect(afterA.find((t) => t.id === c.id)!.isBlocked).toBe(true);
563
-
564
- // Complete B → C unblocks
565
- await backend.start(b.id);
566
- await backend.complete(b.id);
567
-
568
- const afterB = await backend.list({ includeBlocked: true });
569
- expect(afterB.find((t) => t.id === c.id)!.isBlocked).toBe(false);
570
- });
571
- });
572
-
573
- // ─────────────────────────────────────────────────────────────────────────────
574
- // 5. Queries
575
- // ─────────────────────────────────────────────────────────────────────────────
576
-
577
- describe("queries", () => {
578
- it("should list all tasks excluding blocked by default", async () => {
579
- const blocker = await backend.create({
580
- description: "Query blocker",
581
- created_by: TEST_AGENT,
582
- });
583
- const blocked = await backend.create({
584
- description: "Query blocked",
585
- created_by: TEST_AGENT,
586
- });
587
- await backend.addBlocker(blocked.id, blocker.id);
588
-
589
- const tasks = await backend.list();
590
- expect(tasks).toHaveLength(1);
591
- expect(tasks[0].id).toBe(blocker.id);
592
- });
593
-
594
- it("should include blocked tasks when requested", async () => {
595
- const blocker = await backend.create({
596
- description: "Query blocker 2",
597
- created_by: TEST_AGENT,
598
- });
599
- const blocked = await backend.create({
600
- description: "Query blocked 2",
601
- created_by: TEST_AGENT,
602
- });
603
- await backend.addBlocker(blocked.id, blocker.id);
604
-
605
- const tasks = await backend.list({ includeBlocked: true });
606
- expect(tasks).toHaveLength(2);
607
- });
608
-
609
- it("should filter by status", async () => {
610
- const t1 = await backend.create({
611
- description: "Pending task",
612
- created_by: TEST_AGENT,
613
- });
614
- const t2 = await backend.create({
615
- description: "Started task",
616
- created_by: TEST_AGENT,
617
- });
618
- await backend.start(t2.id);
619
-
620
- const inProgress = await backend.list({ status: "in_progress" });
621
- expect(inProgress).toHaveLength(1);
622
- expect(inProgress[0].id).toBe(t2.id);
623
- });
624
-
625
- it("should filter by assigned agent", async () => {
626
- const t1 = await backend.create({
627
- description: "Worker 1 task",
628
- created_by: TEST_AGENT,
629
- });
630
- await backend.create({
631
- description: "Unassigned",
632
- created_by: TEST_AGENT,
633
- });
634
- await backend.assign(t1.id, WORKER_1);
635
-
636
- const assigned = await backend.list({ assigned_agent: WORKER_1 });
637
- expect(assigned).toHaveLength(1);
638
- expect(assigned[0].assigned_agent).toBe(WORKER_1);
639
- });
640
-
641
- it("should filter by tags", async () => {
642
- await backend.create({
643
- description: "Frontend task",
644
- created_by: TEST_AGENT,
645
- tags: ["frontend"],
646
- });
647
- await backend.create({
648
- description: "Backend task",
649
- created_by: TEST_AGENT,
650
- tags: ["backend"],
651
- });
652
-
653
- const frontendTasks = await backend.list({ tags: ["frontend"] });
654
- expect(frontendTasks).toHaveLength(1);
655
- expect(frontendTasks[0].description).toBe("Frontend task");
656
- });
657
-
658
- it("should filter by created_by", async () => {
659
- await backend.create({
660
- description: "Creator 1 task",
661
- created_by: WORKER_1,
662
- });
663
- await backend.create({
664
- description: "Creator 2 task",
665
- created_by: WORKER_2,
666
- });
667
-
668
- const worker1Tasks = await backend.list({ created_by: WORKER_1 });
669
- expect(worker1Tasks).toHaveLength(1);
670
- expect(worker1Tasks[0].description).toBe("Creator 1 task");
671
- });
672
-
673
- it("should filter root tasks only", async () => {
674
- const parent = await backend.create({
675
- description: "Root task",
676
- created_by: TEST_AGENT,
677
- });
678
- await backend.create({
679
- description: "Child task",
680
- created_by: TEST_AGENT,
681
- parent_task: parent.id,
682
- });
683
-
684
- const rootOnly = await backend.list({ rootTasksOnly: true });
685
- expect(rootOnly).toHaveLength(1);
686
- expect(rootOnly[0].id).toBe(parent.id);
687
- });
688
-
689
- it("should listReady: only pending/assigned, unblocked tasks", async () => {
690
- const blocker = await backend.create({
691
- description: "Ready blocker",
692
- created_by: TEST_AGENT,
693
- });
694
- const blocked = await backend.create({
695
- description: "Ready blocked",
696
- created_by: TEST_AGENT,
697
- });
698
- const started = await backend.create({
699
- description: "Already started",
700
- created_by: TEST_AGENT,
701
- });
702
-
703
- await backend.addBlocker(blocked.id, blocker.id);
704
- await backend.start(started.id);
705
-
706
- const ready = await backend.listReady();
707
- expect(ready).toHaveLength(1);
708
- expect(ready[0].id).toBe(blocker.id);
709
- });
710
- });
711
-
712
- // ─────────────────────────────────────────────────────────────────────────────
713
- // 6. Subtask Hierarchy
714
- // ─────────────────────────────────────────────────────────────────────────────
715
-
716
- describe("subtask hierarchy", () => {
717
- it("should create subtasks linked to parent", async () => {
718
- const parent = await backend.create({
719
- description: "Parent task",
720
- created_by: TEST_AGENT,
721
- });
722
-
723
- const child1 = await backend.createSubtask(parent.id, {
724
- description: "Child 1",
725
- created_by: TEST_AGENT,
726
- });
727
- const child2 = await backend.createSubtask(parent.id, {
728
- description: "Child 2",
729
- created_by: TEST_AGENT,
730
- });
731
-
732
- expect(child1.parent_task).toBe(parent.id);
733
- expect(child2.parent_task).toBe(parent.id);
734
-
735
- // Verify parent has subtask references
736
- const updatedParent = await backend.get(parent.id);
737
- expect(updatedParent!.subtasks).toContain(child1.id);
738
- expect(updatedParent!.subtasks).toContain(child2.id);
739
- });
740
-
741
- it("should getChildren for a parent", async () => {
742
- const parent = await backend.create({
743
- description: "Children parent",
744
- created_by: TEST_AGENT,
745
- });
746
-
747
- await backend.createSubtask(parent.id, {
748
- description: "Sub A",
749
- created_by: TEST_AGENT,
750
- });
751
- await backend.createSubtask(parent.id, {
752
- description: "Sub B",
753
- created_by: TEST_AGENT,
754
- });
755
- await backend.createSubtask(parent.id, {
756
- description: "Sub C",
757
- created_by: TEST_AGENT,
758
- });
759
-
760
- const children = await backend.getChildren(parent.id);
761
- expect(children).toHaveLength(3);
762
- });
763
-
764
- it("should compute subtask status aggregates", async () => {
765
- const parent = await backend.create({
766
- description: "Status parent",
767
- created_by: TEST_AGENT,
768
- });
769
-
770
- const c1 = await backend.createSubtask(parent.id, {
771
- description: "Sub done",
772
- created_by: TEST_AGENT,
773
- });
774
- const c2 = await backend.createSubtask(parent.id, {
775
- description: "Sub in progress",
776
- created_by: TEST_AGENT,
777
- });
778
- await backend.createSubtask(parent.id, {
779
- description: "Sub pending",
780
- created_by: TEST_AGENT,
781
- });
782
-
783
- await backend.start(c1.id);
784
- await backend.complete(c1.id);
785
- await backend.start(c2.id);
786
-
787
- const status = await backend.getSubtaskStatus(parent.id);
788
- expect(status.total).toBe(3);
789
- expect(status.completed).toBe(1);
790
- expect(status.in_progress).toBe(1);
791
- expect(status.pending).toBe(1);
792
- expect(status.allCompleted).toBe(false);
793
- expect(status.anyFailed).toBe(false);
794
- });
795
-
796
- it("should report allCompleted when all subtasks done", async () => {
797
- const parent = await backend.create({
798
- description: "All done parent",
799
- created_by: TEST_AGENT,
800
- });
801
-
802
- const c1 = await backend.createSubtask(parent.id, {
803
- description: "Done 1",
804
- created_by: TEST_AGENT,
805
- });
806
- const c2 = await backend.createSubtask(parent.id, {
807
- description: "Done 2",
808
- created_by: TEST_AGENT,
809
- });
810
-
811
- await backend.start(c1.id);
812
- await backend.complete(c1.id);
813
- await backend.start(c2.id);
814
- await backend.complete(c2.id);
815
-
816
- const status = await backend.getSubtaskStatus(parent.id);
817
- expect(status.allCompleted).toBe(true);
818
- });
819
-
820
- it("should throw when creating subtask with non-existent parent", async () => {
821
- await expect(
822
- backend.createSubtask("task_nonexistent", {
823
- description: "Orphan",
824
- created_by: TEST_AGENT,
825
- })
826
- ).rejects.toThrow(OpenTasksBackendError);
827
- });
828
- });
829
-
830
- // ─────────────────────────────────────────────────────────────────────────────
831
- // 7. Pull Model (Claim / Unclaim / ListClaimable)
832
- // ─────────────────────────────────────────────────────────────────────────────
833
-
834
- describe("pull model", () => {
835
- it("should claim a pending unblocked task", async () => {
836
- await backend.create({
837
- description: "Claimable task",
838
- created_by: TEST_AGENT,
839
- });
840
-
841
- const claimed = await backend.claim(WORKER_1);
842
- expect(claimed).not.toBeNull();
843
- expect(claimed!.assigned_agent).toBe(WORKER_1);
844
- expect(claimed!.status).toBe("assigned");
845
-
846
- // Verify daemon issue still exists
847
- const issue = await client.getIssue(claimed!.external_id!);
848
- expect(issue).not.toBeNull();
849
- });
850
-
851
- it("should return null when no tasks available to claim", async () => {
852
- const claimed = await backend.claim(WORKER_1);
853
- expect(claimed).toBeNull();
854
- });
855
-
856
- it("should not claim blocked tasks", async () => {
857
- const blocker = await backend.create({
858
- description: "Claim blocker",
859
- created_by: TEST_AGENT,
860
- });
861
- const blocked = await backend.create({
862
- description: "Claim blocked",
863
- created_by: TEST_AGENT,
864
- });
865
-
866
- await backend.addBlocker(blocked.id, blocker.id);
867
-
868
- // Only the blocker should be claimable
869
- const claimed = await backend.claim(WORKER_1);
870
- expect(claimed).not.toBeNull();
871
- expect(claimed!.id).toBe(blocker.id);
872
-
873
- // No more claimable tasks (blocked is still blocked)
874
- const second = await backend.claim(WORKER_2);
875
- expect(second).toBeNull();
876
- });
877
-
878
- it("should not claim already-assigned tasks", async () => {
879
- await backend.create({
880
- description: "Single claim test",
881
- created_by: TEST_AGENT,
882
- });
883
-
884
- const first = await backend.claim(WORKER_1);
885
- expect(first).not.toBeNull();
886
-
887
- // Second claim should get null
888
- const second = await backend.claim(WORKER_2);
889
- expect(second).toBeNull();
890
- });
891
-
892
- it("should unclaim a task and make it available again", async () => {
893
- await backend.create({
894
- description: "Unclaim test",
895
- created_by: TEST_AGENT,
896
- });
897
-
898
- const claimed = await backend.claim(WORKER_1);
899
- await backend.unclaim(claimed!.id);
900
-
901
- const updated = await backend.get(claimed!.id);
902
- expect(updated!.assigned_agent).toBeUndefined();
903
- expect(updated!.status).toBe("pending");
904
-
905
- // Should be claimable again after unclaim resets to pending
906
- const reClaimed = await backend.claim(WORKER_2);
907
- expect(reClaimed).not.toBeNull();
908
- expect(reClaimed!.assigned_agent).toBe(WORKER_2);
909
- });
910
-
911
- it("should throw when unclaiming a non-assigned task", async () => {
912
- const task = await backend.create({
913
- description: "Not claimed",
914
- created_by: TEST_AGENT,
915
- });
916
-
917
- await expect(backend.unclaim(task.id)).rejects.toThrow(
918
- OpenTasksBackendError
919
- );
920
- });
921
-
922
- it("should list claimable tasks with tag filter", async () => {
923
- await backend.create({
924
- description: "Frontend work",
925
- created_by: TEST_AGENT,
926
- tags: ["frontend"],
927
- });
928
- await backend.create({
929
- description: "Backend work",
930
- created_by: TEST_AGENT,
931
- tags: ["backend"],
932
- });
933
-
934
- const frontendClaimable = await backend.listClaimable({
935
- tags: ["frontend"],
936
- });
937
- expect(frontendClaimable).toHaveLength(1);
938
- expect(frontendClaimable[0].description).toBe("Frontend work");
939
- });
940
-
941
- it("should list claimable tasks with rootTasksOnly filter", async () => {
942
- const parent = await backend.create({
943
- description: "Root claimable",
944
- created_by: TEST_AGENT,
945
- });
946
- await backend.createSubtask(parent.id, {
947
- description: "Child not root",
948
- created_by: TEST_AGENT,
949
- });
950
-
951
- const rootClaimable = await backend.listClaimable({
952
- rootTasksOnly: true,
953
- });
954
- expect(rootClaimable).toHaveLength(1);
955
- expect(rootClaimable[0].id).toBe(parent.id);
956
- });
957
- });
958
-
959
- // ─────────────────────────────────────────────────────────────────────────────
960
- // 8. Import from OpenTasks
961
- // ─────────────────────────────────────────────────────────────────────────────
962
-
963
- describe("import", () => {
964
- it("should import an existing OpenTasks issue as a task", async () => {
965
- // Create an issue directly in the daemon (not via backend)
966
- const issue = await client.createIssue({
967
- title: "Externally created issue",
968
- status: "open",
969
- tags: ["imported"],
970
- metadata: { source: "external" },
971
- });
972
-
973
- const task = await backend.importIssue(issue.id, TEST_AGENT);
974
-
975
- expect(task.id).toMatch(/^task_/);
976
- expect(task.description).toBe("Externally created issue");
977
- expect(task.status).toBe("pending");
978
- expect(task.external_id).toBe(issue.id);
979
-
980
- // Mapping should be established
981
- expect(backend.getIssueForTask(task.id)).toBe(issue.id);
982
- expect(backend.getTaskForIssue(issue.id)).toBe(task.id);
983
- });
984
-
985
- it("should import an in_progress issue with correct status", async () => {
986
- const issue = await client.createIssue({
987
- title: "Active issue",
988
- status: "in_progress",
989
- });
990
-
991
- const task = await backend.importIssue(issue.id, TEST_AGENT);
992
- expect(task.status).toBe("in_progress");
993
- });
994
-
995
- it("should import a closed issue as completed", async () => {
996
- const issue = await client.createIssue({
997
- title: "Closed issue",
998
- status: "closed",
999
- });
1000
-
1001
- const task = await backend.importIssue(issue.id, TEST_AGENT);
1002
- expect(task.status).toBe("completed");
1003
- });
1004
-
1005
- it("should not re-import an already imported issue", async () => {
1006
- const issue = await client.createIssue({
1007
- title: "Import once",
1008
- status: "open",
1009
- });
1010
-
1011
- const task1 = await backend.importIssue(issue.id, TEST_AGENT);
1012
- const task2 = await backend.importIssue(issue.id, TEST_AGENT);
1013
-
1014
- expect(task1.id).toBe(task2.id);
1015
- });
1016
-
1017
- it("should import an issue with assignee", async () => {
1018
- const issue = await client.createIssue({
1019
- title: "Assigned import",
1020
- status: "open",
1021
- assignee: WORKER_1,
1022
- });
1023
-
1024
- const task = await backend.importIssue(issue.id, TEST_AGENT);
1025
-
1026
- // The import should set the assignee locally
1027
- const retrieved = await backend.get(task.id);
1028
- expect(retrieved!.assigned_agent).toBe(WORKER_1);
1029
- });
1030
-
1031
- it("should bulk import open issues via importOpenIssues", async () => {
1032
- // Create several issues directly in daemon
1033
- await client.createIssue({
1034
- title: "Bulk import 1",
1035
- status: "open",
1036
- });
1037
- await client.createIssue({
1038
- title: "Bulk import 2",
1039
- status: "in_progress",
1040
- });
1041
- // This one is closed - should still be imported since listIssues filter
1042
- // only gets open/in_progress
1043
- await client.createIssue({
1044
- title: "Bulk import closed",
1045
- status: "closed",
1046
- });
1047
-
1048
- const imported = await backend.importOpenIssues(TEST_AGENT);
1049
-
1050
- // Should import at least the open and in_progress ones
1051
- expect(imported.length).toBeGreaterThanOrEqual(2);
1052
- expect(imported.some((t) => t.description === "Bulk import 1")).toBe(true);
1053
- expect(imported.some((t) => t.description === "Bulk import 2")).toBe(true);
1054
- });
1055
-
1056
- it("should throw when importing non-existent issue", async () => {
1057
- await expect(
1058
- backend.importIssue("nonexistent-issue-id", TEST_AGENT)
1059
- ).rejects.toThrow(OpenTasksBackendError);
1060
- });
1061
- });
1062
-
1063
- // ─────────────────────────────────────────────────────────────────────────────
1064
- // 9. Agent History
1065
- // ─────────────────────────────────────────────────────────────────────────────
1066
-
1067
- describe("agent history", () => {
1068
- it("should track assignment history", async () => {
1069
- const task = await backend.create({
1070
- description: "History tracking test",
1071
- created_by: TEST_AGENT,
1072
- });
1073
-
1074
- await backend.assign(task.id, WORKER_1);
1075
- await backend.unassign(task.id);
1076
- await backend.assign(task.id, WORKER_2);
1077
-
1078
- const history = await backend.getAgentHistory(task.id);
1079
- expect(history.length).toBeGreaterThanOrEqual(2);
1080
-
1081
- // The history should contain both workers
1082
- const agents = history.map((h) => h.agent_id);
1083
- expect(agents).toContain(WORKER_1);
1084
- expect(agents).toContain(WORKER_2);
1085
- });
1086
-
1087
- it("should throw for non-existent task", async () => {
1088
- await expect(
1089
- backend.getAgentHistory("task_nonexistent")
1090
- ).rejects.toThrow(OpenTasksBackendError);
1091
- });
1092
- });
1093
-
1094
- // ─────────────────────────────────────────────────────────────────────────────
1095
- // 10. Event Subscriptions
1096
- // ─────────────────────────────────────────────────────────────────────────────
1097
-
1098
- describe("event subscriptions", () => {
1099
- it("should fire callback on task creation", async () => {
1100
- const events: TaskChangeEvent[] = [];
1101
- const unsub = backend.onTaskChange((event) => events.push(event));
1102
-
1103
- await backend.create({
1104
- description: "Event creation test",
1105
- created_by: TEST_AGENT,
1106
- });
1107
-
1108
- expect(events.length).toBeGreaterThan(0);
1109
- expect(events[0].type).toBe("created");
1110
-
1111
- unsub();
1112
- });
1113
-
1114
- it("should fire callback on status changes", async () => {
1115
- const task = await backend.create({
1116
- description: "Event status test",
1117
- created_by: TEST_AGENT,
1118
- });
1119
-
1120
- const events: TaskChangeEvent[] = [];
1121
- const unsub = backend.onTaskChange(task.id, (event) =>
1122
- events.push(event)
1123
- );
1124
-
1125
- await backend.start(task.id);
1126
- await backend.complete(task.id);
1127
-
1128
- expect(events.length).toBeGreaterThanOrEqual(2);
1129
-
1130
- unsub();
1131
- });
1132
-
1133
- it("should filter events by taskId", async () => {
1134
- const t1 = await backend.create({
1135
- description: "Filtered task 1",
1136
- created_by: TEST_AGENT,
1137
- });
1138
-
1139
- const events: TaskChangeEvent[] = [];
1140
- const unsub = backend.onTaskChange(t1.id, (event) =>
1141
- events.push(event)
1142
- );
1143
-
1144
- await backend.create({
1145
- description: "Filtered task 2",
1146
- created_by: TEST_AGENT,
1147
- });
1148
-
1149
- await backend.start(t1.id);
1150
-
1151
- // All events should be for t1 only
1152
- expect(events.every((e) => e.taskId === t1.id)).toBe(true);
1153
-
1154
- unsub();
1155
- });
1156
-
1157
- it("should stop receiving events after unsubscribe", async () => {
1158
- const events: TaskChangeEvent[] = [];
1159
- const unsub = backend.onTaskChange((event) => events.push(event));
1160
-
1161
- await backend.create({
1162
- description: "Before unsub",
1163
- created_by: TEST_AGENT,
1164
- });
1165
-
1166
- const countBefore = events.length;
1167
- unsub();
1168
-
1169
- await backend.create({
1170
- description: "After unsub",
1171
- created_by: TEST_AGENT,
1172
- });
1173
-
1174
- expect(events.length).toBe(countBefore);
1175
- });
1176
- });
1177
-
1178
- // ─────────────────────────────────────────────────────────────────────────────
1179
- // 11. Sync Configuration
1180
- // ─────────────────────────────────────────────────────────────────────────────
1181
-
1182
- describe("sync configuration", () => {
1183
- it("should not sync status when syncStatus is false", async () => {
1184
- const noSyncBackend = createOpenTasksTaskBackend(eventStore, client, {
1185
- syncStatus: false,
1186
- sourceLabel: "no-sync-test",
1187
- });
1188
-
1189
- const task = await noSyncBackend.create({
1190
- description: "No sync test",
1191
- created_by: TEST_AGENT,
1192
- });
1193
-
1194
- await noSyncBackend.start(task.id);
1195
-
1196
- // Local status should be in_progress
1197
- const updated = await noSyncBackend.get(task.id);
1198
- expect(updated!.status).toBe("in_progress");
1199
-
1200
- // Daemon issue should still be "open" since sync is disabled
1201
- const issue = await client.getIssue(task.external_id!);
1202
- expect(issue!.status).toBe("open");
1203
- });
1204
- });
1205
-
1206
- // ─────────────────────────────────────────────────────────────────────────────
1207
- // 12. Error Handling
1208
- // ─────────────────────────────────────────────────────────────────────────────
1209
-
1210
- describe("error handling", () => {
1211
- it("should throw TASK_NOT_FOUND for operations on non-existent tasks", async () => {
1212
- const fakeId = "task_doesnotexist";
1213
-
1214
- await expect(
1215
- backend.assign(fakeId, WORKER_1)
1216
- ).rejects.toThrow("Task not found");
1217
-
1218
- await expect(
1219
- backend.start(fakeId)
1220
- ).rejects.toThrow("Task not found");
1221
-
1222
- await expect(
1223
- backend.complete(fakeId)
1224
- ).rejects.toThrow("Task not found");
1225
-
1226
- await expect(
1227
- backend.fail(fakeId, { message: "error" })
1228
- ).rejects.toThrow("Task not found");
1229
-
1230
- await expect(
1231
- backend.addBlocker(fakeId, "task_other")
1232
- ).rejects.toThrow("Task not found");
1233
- });
1234
-
1235
- it("should throw when blocker task does not exist", async () => {
1236
- const task = await backend.create({
1237
- description: "Has no blocker",
1238
- created_by: TEST_AGENT,
1239
- });
1240
-
1241
- await expect(
1242
- backend.addBlocker(task.id, "task_nonexistent_blocker")
1243
- ).rejects.toThrow("Blocker task not found");
1244
- });
1245
-
1246
- it("should throw for update on non-existent task", async () => {
1247
- await expect(
1248
- backend.update("task_fake", { description: "new" })
1249
- ).rejects.toThrow(OpenTasksBackendError);
1250
- });
1251
- });
1252
-
1253
- // ─────────────────────────────────────────────────────────────────────────────
1254
- // 13. Integration: Full Workflow
1255
- // ─────────────────────────────────────────────────────────────────────────────
1256
-
1257
- describe("full workflow integration", () => {
1258
- it("should handle a complete multi-task workflow with dependencies", async () => {
1259
- // 1. Create a parent with two children
1260
- const parent = await backend.create({
1261
- description: "Refactor authentication module",
1262
- created_by: TEST_AGENT,
1263
- tags: ["refactor"],
1264
- });
1265
-
1266
- const child1 = await backend.createSubtask(parent.id, {
1267
- description: "Extract auth middleware",
1268
- created_by: TEST_AGENT,
1269
- tags: ["backend"],
1270
- });
1271
-
1272
- const child2 = await backend.createSubtask(parent.id, {
1273
- description: "Update auth tests",
1274
- created_by: TEST_AGENT,
1275
- tags: ["testing"],
1276
- });
1277
-
1278
- // 2. child2 depends on child1
1279
- await backend.addBlocker(child2.id, child1.id);
1280
-
1281
- // 3. Verify initial state
1282
- let status = await backend.getSubtaskStatus(parent.id);
1283
- expect(status.total).toBe(2);
1284
- expect(status.pending).toBe(2);
1285
-
1286
- // 4. Work on child1 directly (child2 is blocked by it)
1287
- await backend.assign(child1.id, WORKER_1);
1288
- await backend.start(child1.id);
1289
- await backend.complete(child1.id, {
1290
- summary: "Extracted middleware to separate module",
1291
- data: { files_changed: 3 },
1292
- });
1293
-
1294
- // 5. child2 should now be unblocked
1295
- const readyTasks = await backend.listReady();
1296
- const child2Ready = readyTasks.find((t) => t.id === child2.id);
1297
- expect(child2Ready).toBeDefined();
1298
-
1299
- // 6. Work on child2
1300
- await backend.assign(child2.id, WORKER_2);
1301
- await backend.start(child2.id);
1302
- await backend.complete(child2.id, {
1303
- summary: "Updated all test files",
1304
- });
1305
-
1306
- // 7. All subtasks completed
1307
- status = await backend.getSubtaskStatus(parent.id);
1308
- expect(status.allCompleted).toBe(true);
1309
- expect(status.anyFailed).toBe(false);
1310
-
1311
- // 8. Complete parent
1312
- await backend.start(parent.id);
1313
- await backend.complete(parent.id, {
1314
- summary: "Auth module refactored",
1315
- });
1316
-
1317
- // 9. Verify everything is completed
1318
- const finalParent = await backend.get(parent.id);
1319
- expect(finalParent!.status).toBe("completed");
1320
-
1321
- const finalChild1 = await backend.get(child1.id);
1322
- expect(finalChild1!.status).toBe("completed");
1323
-
1324
- const finalChild2 = await backend.get(child2.id);
1325
- expect(finalChild2!.status).toBe("completed");
1326
-
1327
- // 10. Verify all issues are closed in daemon
1328
- const parentIssue = await client.getIssue(parent.external_id!);
1329
- expect(parentIssue!.status).toBe("closed");
1330
-
1331
- const child1Issue = await client.getIssue(child1.external_id!);
1332
- expect(child1Issue!.status).toBe("closed");
1333
-
1334
- const child2Issue = await client.getIssue(child2.external_id!);
1335
- expect(child2Issue!.status).toBe("closed");
1336
- });
1337
- });
1338
- });