macro-agent 0.1.2 → 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 (1540) hide show
  1. package/.gitattributes +3 -0
  2. package/.opentasks/config.json +9 -0
  3. package/CLAUDE.md +432 -206
  4. package/README.md +129 -371
  5. package/dist/acp/index.d.ts +9 -51
  6. package/dist/acp/index.d.ts.map +1 -1
  7. package/dist/acp/index.js +5 -46
  8. package/dist/acp/index.js.map +1 -1
  9. package/dist/acp/macro-agent.d.ts +28 -255
  10. package/dist/acp/macro-agent.d.ts.map +1 -1
  11. package/dist/acp/macro-agent.js +593 -1231
  12. package/dist/acp/macro-agent.js.map +1 -1
  13. package/dist/acp/map-bridge.d.ts +62 -0
  14. package/dist/acp/map-bridge.d.ts.map +1 -0
  15. package/dist/acp/map-bridge.js +123 -0
  16. package/dist/acp/map-bridge.js.map +1 -0
  17. package/dist/acp/session-mapper.d.ts +29 -126
  18. package/dist/acp/session-mapper.d.ts.map +1 -1
  19. package/dist/acp/session-mapper.js +36 -234
  20. package/dist/acp/session-mapper.js.map +1 -1
  21. package/dist/acp/types.d.ts +24 -535
  22. package/dist/acp/types.d.ts.map +1 -1
  23. package/dist/acp/types.js +7 -7
  24. package/dist/acp/types.js.map +1 -1
  25. package/dist/acp/websocket-server.d.ts +16 -136
  26. package/dist/acp/websocket-server.d.ts.map +1 -1
  27. package/dist/acp/websocket-server.js +131 -371
  28. package/dist/acp/websocket-server.js.map +1 -1
  29. package/dist/adapters/federation.d.ts +76 -0
  30. package/dist/adapters/federation.d.ts.map +1 -0
  31. package/dist/adapters/federation.js +120 -0
  32. package/dist/adapters/federation.js.map +1 -0
  33. package/dist/adapters/inbox-adapter.d.ts +72 -0
  34. package/dist/adapters/inbox-adapter.d.ts.map +1 -0
  35. package/dist/adapters/inbox-adapter.js +196 -0
  36. package/dist/adapters/inbox-adapter.js.map +1 -0
  37. package/dist/adapters/inbox-client-adapter.d.ts +40 -0
  38. package/dist/adapters/inbox-client-adapter.d.ts.map +1 -0
  39. package/dist/adapters/inbox-client-adapter.js +135 -0
  40. package/dist/adapters/inbox-client-adapter.js.map +1 -0
  41. package/dist/adapters/index.d.ts +11 -0
  42. package/dist/adapters/index.d.ts.map +1 -0
  43. package/dist/adapters/index.js +10 -0
  44. package/dist/adapters/index.js.map +1 -0
  45. package/dist/adapters/opentasks-daemon.d.ts +32 -0
  46. package/dist/adapters/opentasks-daemon.d.ts.map +1 -0
  47. package/dist/adapters/opentasks-daemon.js +190 -0
  48. package/dist/adapters/opentasks-daemon.js.map +1 -0
  49. package/dist/adapters/tasks-adapter.d.ts +49 -0
  50. package/dist/adapters/tasks-adapter.d.ts.map +1 -0
  51. package/dist/adapters/tasks-adapter.js +209 -0
  52. package/dist/adapters/tasks-adapter.js.map +1 -0
  53. package/dist/adapters/types.d.ts +198 -0
  54. package/dist/adapters/types.d.ts.map +1 -0
  55. package/dist/adapters/types.js +13 -0
  56. package/dist/adapters/types.js.map +1 -0
  57. package/dist/agent/agent-manager-v2.d.ts +38 -0
  58. package/dist/agent/agent-manager-v2.d.ts.map +1 -0
  59. package/dist/agent/agent-manager-v2.js +1097 -0
  60. package/dist/agent/agent-manager-v2.js.map +1 -0
  61. package/dist/agent/agent-manager.d.ts +52 -42
  62. package/dist/agent/agent-manager.d.ts.map +1 -1
  63. package/dist/agent/agent-manager.js +11 -1318
  64. package/dist/agent/agent-manager.js.map +1 -1
  65. package/dist/agent/agent-store.d.ts +89 -0
  66. package/dist/agent/agent-store.d.ts.map +1 -0
  67. package/dist/agent/agent-store.js +279 -0
  68. package/dist/agent/agent-store.js.map +1 -0
  69. package/dist/api/index.d.ts +5 -3
  70. package/dist/api/index.d.ts.map +1 -1
  71. package/dist/api/index.js +4 -3
  72. package/dist/api/index.js.map +1 -1
  73. package/dist/api/server.d.ts +6 -127
  74. package/dist/api/server.d.ts.map +1 -1
  75. package/dist/api/server.js +235 -1574
  76. package/dist/api/server.js.map +1 -1
  77. package/dist/api/types.d.ts +20 -248
  78. package/dist/api/types.d.ts.map +1 -1
  79. package/dist/api/types.js +3 -1
  80. package/dist/api/types.js.map +1 -1
  81. package/dist/boot-v2.d.ts +165 -0
  82. package/dist/boot-v2.d.ts.map +1 -0
  83. package/dist/boot-v2.js +315 -0
  84. package/dist/boot-v2.js.map +1 -0
  85. package/dist/cli/acp.d.ts +6 -28
  86. package/dist/cli/acp.d.ts.map +1 -1
  87. package/dist/cli/acp.js +38 -442
  88. package/dist/cli/acp.js.map +1 -1
  89. package/dist/cli/index.d.ts +1 -2
  90. package/dist/cli/index.d.ts.map +1 -1
  91. package/dist/cli/index.js +65 -453
  92. package/dist/cli/index.js.map +1 -1
  93. package/dist/cli/mcp.d.ts +18 -8
  94. package/dist/cli/mcp.d.ts.map +1 -1
  95. package/dist/cli/mcp.js +231 -301
  96. package/dist/cli/mcp.js.map +1 -1
  97. package/dist/cognitive/analyst-role.d.ts +13 -0
  98. package/dist/cognitive/analyst-role.d.ts.map +1 -0
  99. package/dist/cognitive/analyst-role.js +48 -0
  100. package/dist/cognitive/analyst-role.js.map +1 -0
  101. package/dist/cognitive/index.d.ts +18 -0
  102. package/dist/cognitive/index.d.ts.map +1 -0
  103. package/dist/cognitive/index.js +21 -0
  104. package/dist/cognitive/index.js.map +1 -0
  105. package/dist/cognitive/macro-agent-backend.d.ts +40 -0
  106. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -0
  107. package/dist/cognitive/macro-agent-backend.js +290 -0
  108. package/dist/cognitive/macro-agent-backend.js.map +1 -0
  109. package/dist/cognitive/session-converter.d.ts +30 -0
  110. package/dist/cognitive/session-converter.d.ts.map +1 -0
  111. package/dist/cognitive/session-converter.js +119 -0
  112. package/dist/cognitive/session-converter.js.map +1 -0
  113. package/dist/cognitive/types.d.ts +129 -0
  114. package/dist/cognitive/types.d.ts.map +1 -0
  115. package/dist/cognitive/types.js +12 -0
  116. package/dist/cognitive/types.js.map +1 -0
  117. package/dist/cognitive/workspace-handler.d.ts +46 -0
  118. package/dist/cognitive/workspace-handler.d.ts.map +1 -0
  119. package/dist/cognitive/workspace-handler.js +135 -0
  120. package/dist/cognitive/workspace-handler.js.map +1 -0
  121. package/dist/control/control-client.d.ts +63 -0
  122. package/dist/control/control-client.d.ts.map +1 -0
  123. package/dist/control/control-client.js +276 -0
  124. package/dist/control/control-client.js.map +1 -0
  125. package/dist/control/control-server.d.ts +46 -0
  126. package/dist/control/control-server.d.ts.map +1 -0
  127. package/dist/control/control-server.js +237 -0
  128. package/dist/control/control-server.js.map +1 -0
  129. package/dist/control/index.d.ts +9 -0
  130. package/dist/control/index.d.ts.map +1 -0
  131. package/dist/control/index.js +8 -0
  132. package/dist/control/index.js.map +1 -0
  133. package/dist/control/types.d.ts +64 -0
  134. package/dist/control/types.d.ts.map +1 -0
  135. package/dist/control/types.js +10 -0
  136. package/dist/control/types.js.map +1 -0
  137. package/dist/index.d.ts +14 -16
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +15 -34
  140. package/dist/index.js.map +1 -1
  141. package/dist/integrations/context-builder.d.ts +49 -0
  142. package/dist/integrations/context-builder.d.ts.map +1 -0
  143. package/dist/integrations/context-builder.js +160 -0
  144. package/dist/integrations/context-builder.js.map +1 -0
  145. package/dist/integrations/sessionlog.d.ts +58 -0
  146. package/dist/integrations/sessionlog.d.ts.map +1 -0
  147. package/dist/integrations/sessionlog.js +152 -0
  148. package/dist/integrations/sessionlog.js.map +1 -0
  149. package/dist/integrations/skilltree.d.ts +53 -0
  150. package/dist/integrations/skilltree.d.ts.map +1 -0
  151. package/dist/integrations/skilltree.js +140 -0
  152. package/dist/integrations/skilltree.js.map +1 -0
  153. package/dist/lifecycle/cleanup.d.ts +5 -14
  154. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  155. package/dist/lifecycle/cleanup.js +4 -34
  156. package/dist/lifecycle/cleanup.js.map +1 -1
  157. package/dist/lifecycle/handlers-v2.d.ts +33 -0
  158. package/dist/lifecycle/handlers-v2.d.ts.map +1 -0
  159. package/dist/lifecycle/handlers-v2.js +319 -0
  160. package/dist/lifecycle/handlers-v2.js.map +1 -0
  161. package/dist/lifecycle/index.d.ts +3 -5
  162. package/dist/lifecycle/index.d.ts.map +1 -1
  163. package/dist/lifecycle/index.js +3 -12
  164. package/dist/lifecycle/index.js.map +1 -1
  165. package/dist/map/acp-bridge.d.ts +39 -0
  166. package/dist/map/acp-bridge.d.ts.map +1 -0
  167. package/dist/map/acp-bridge.js +180 -0
  168. package/dist/map/acp-bridge.js.map +1 -0
  169. package/dist/map/cc-swarm-hooks.d.ts +36 -0
  170. package/dist/map/cc-swarm-hooks.d.ts.map +1 -0
  171. package/dist/map/cc-swarm-hooks.js +218 -0
  172. package/dist/map/cc-swarm-hooks.js.map +1 -0
  173. package/dist/map/coordination-handler.d.ts +36 -0
  174. package/dist/map/coordination-handler.d.ts.map +1 -0
  175. package/dist/map/coordination-handler.js +166 -0
  176. package/dist/map/coordination-handler.js.map +1 -0
  177. package/dist/map/index.d.ts +5 -10
  178. package/dist/map/index.d.ts.map +1 -1
  179. package/dist/map/index.js +4 -13
  180. package/dist/map/index.js.map +1 -1
  181. package/dist/map/lifecycle-bridge.d.ts +34 -0
  182. package/dist/map/lifecycle-bridge.d.ts.map +1 -0
  183. package/dist/map/lifecycle-bridge.js +96 -0
  184. package/dist/map/lifecycle-bridge.js.map +1 -0
  185. package/dist/map/server.d.ts +38 -0
  186. package/dist/map/server.d.ts.map +1 -0
  187. package/dist/map/server.js +461 -0
  188. package/dist/map/server.js.map +1 -0
  189. package/dist/map/sidecar.d.ts +24 -0
  190. package/dist/map/sidecar.d.ts.map +1 -0
  191. package/dist/map/sidecar.js +263 -0
  192. package/dist/map/sidecar.js.map +1 -0
  193. package/dist/map/task-bridge.d.ts +22 -0
  194. package/dist/map/task-bridge.d.ts.map +1 -0
  195. package/dist/map/task-bridge.js +67 -0
  196. package/dist/map/task-bridge.js.map +1 -0
  197. package/dist/map/trajectory-reporter.d.ts +24 -0
  198. package/dist/map/trajectory-reporter.d.ts.map +1 -0
  199. package/dist/map/trajectory-reporter.js +86 -0
  200. package/dist/map/trajectory-reporter.js.map +1 -0
  201. package/dist/map/types.d.ts +162 -226
  202. package/dist/map/types.d.ts.map +1 -1
  203. package/dist/map/types.js +6 -165
  204. package/dist/map/types.js.map +1 -1
  205. package/dist/mcp/index.d.ts +2 -2
  206. package/dist/mcp/index.d.ts.map +1 -1
  207. package/dist/mcp/index.js +2 -2
  208. package/dist/mcp/index.js.map +1 -1
  209. package/dist/mcp/mcp-server-v2.d.ts +44 -0
  210. package/dist/mcp/mcp-server-v2.d.ts.map +1 -0
  211. package/dist/mcp/mcp-server-v2.js +376 -0
  212. package/dist/mcp/mcp-server-v2.js.map +1 -0
  213. package/dist/mcp/tools/done-v2.d.ts +57 -0
  214. package/dist/mcp/tools/done-v2.d.ts.map +1 -0
  215. package/dist/mcp/tools/done-v2.js +129 -0
  216. package/dist/mcp/tools/done-v2.js.map +1 -0
  217. package/dist/metrics/index.d.ts +7 -1
  218. package/dist/metrics/index.d.ts.map +1 -1
  219. package/dist/metrics/index.js +6 -1
  220. package/dist/metrics/index.js.map +1 -1
  221. package/dist/metrics/metrics.d.ts +9 -70
  222. package/dist/metrics/metrics.d.ts.map +1 -1
  223. package/dist/metrics/metrics.js +89 -145
  224. package/dist/metrics/metrics.js.map +1 -1
  225. package/dist/metrics/types.d.ts +44 -0
  226. package/dist/metrics/types.d.ts.map +1 -0
  227. package/dist/metrics/types.js +7 -0
  228. package/dist/metrics/types.js.map +1 -0
  229. package/dist/store/index.d.ts +3 -6
  230. package/dist/store/index.d.ts.map +1 -1
  231. package/dist/store/index.js +3 -21
  232. package/dist/store/index.js.map +1 -1
  233. package/dist/store/types/events.d.ts +3 -60
  234. package/dist/store/types/events.d.ts.map +1 -1
  235. package/dist/store/types/events.js +3 -46
  236. package/dist/store/types/events.js.map +1 -1
  237. package/dist/store/types/index.d.ts +0 -3
  238. package/dist/store/types/index.d.ts.map +1 -1
  239. package/dist/store/types/index.js +0 -3
  240. package/dist/store/types/index.js.map +1 -1
  241. package/dist/teams/index.d.ts +0 -2
  242. package/dist/teams/index.d.ts.map +1 -1
  243. package/dist/teams/index.js +0 -2
  244. package/dist/teams/index.js.map +1 -1
  245. package/dist/teams/team-manager-v2.d.ts +87 -0
  246. package/dist/teams/team-manager-v2.d.ts.map +1 -0
  247. package/dist/teams/team-manager-v2.js +203 -0
  248. package/dist/teams/team-manager-v2.js.map +1 -0
  249. package/dist/teams/team-runtime-v2.d.ts +149 -0
  250. package/dist/teams/team-runtime-v2.d.ts.map +1 -0
  251. package/dist/teams/team-runtime-v2.js +741 -0
  252. package/dist/teams/team-runtime-v2.js.map +1 -0
  253. package/dist/trigger/index.d.ts +2 -2
  254. package/dist/trigger/index.d.ts.map +1 -1
  255. package/dist/trigger/index.js +4 -4
  256. package/dist/trigger/index.js.map +1 -1
  257. package/dist/trigger/sources/cron/cron-service.d.ts +1 -1
  258. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  259. package/dist/trigger/sources/webhook/webhook-handler.d.ts +1 -1
  260. package/dist/trigger/sources/webhook/webhook-handler.d.ts.map +1 -1
  261. package/dist/trigger/strategies/ai-router.d.ts +31 -0
  262. package/dist/trigger/strategies/ai-router.d.ts.map +1 -0
  263. package/dist/trigger/strategies/ai-router.js +132 -0
  264. package/dist/trigger/strategies/ai-router.js.map +1 -0
  265. package/dist/trigger/trigger-system-v2.d.ts +106 -0
  266. package/dist/trigger/trigger-system-v2.d.ts.map +1 -0
  267. package/dist/trigger/trigger-system-v2.js +347 -0
  268. package/dist/trigger/trigger-system-v2.js.map +1 -0
  269. package/dist/trigger/types.d.ts +8 -0
  270. package/dist/trigger/types.d.ts.map +1 -1
  271. package/dist/trigger/types.js.map +1 -1
  272. package/dist/workspace/strategies/optimistic.d.ts +13 -3
  273. package/dist/workspace/strategies/optimistic.d.ts.map +1 -1
  274. package/dist/workspace/strategies/optimistic.js +4 -4
  275. package/dist/workspace/strategies/optimistic.js.map +1 -1
  276. package/docs/design-subsystem-extraction.md +627 -0
  277. package/docs/lifecycle-events-design.md +111 -0
  278. package/docs/openhive-capability-summary.md +415 -0
  279. package/docs/openhive-integration.md +415 -0
  280. package/docs/roadmap-v2-gaps.md +216 -0
  281. package/package.json +26 -7
  282. package/src/__tests__/boot-v2.test.ts +196 -0
  283. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +496 -0
  284. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +365 -0
  285. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +770 -0
  286. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +253 -0
  287. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +282 -0
  288. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +322 -0
  289. package/src/__tests__/e2e/live-agent.e2e.test.ts +1330 -0
  290. package/src/__tests__/e2e/map-server.e2e.test.ts +128 -0
  291. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +139 -0
  292. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +280 -0
  293. package/src/__tests__/e2e/pull-mode.e2e.test.ts +632 -0
  294. package/src/__tests__/e2e/resume-continue.e2e.test.ts +312 -0
  295. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +562 -0
  296. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +1049 -0
  297. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +258 -0
  298. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +257 -0
  299. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +375 -0
  300. package/src/acp/__tests__/macro-agent.test.ts +234 -945
  301. package/src/acp/__tests__/session-mapper.test.ts +82 -155
  302. package/src/acp/__tests__/websocket-server.test.ts +121 -270
  303. package/src/acp/index.ts +18 -118
  304. package/src/acp/macro-agent.ts +692 -1752
  305. package/src/acp/map-bridge.ts +193 -0
  306. package/src/acp/session-mapper.ts +43 -276
  307. package/src/acp/types.ts +39 -767
  308. package/src/acp/websocket-server.ts +152 -588
  309. package/src/adapters/__tests__/federation.test.ts +256 -0
  310. package/src/adapters/__tests__/inbox-adapter.test.ts +316 -0
  311. package/src/adapters/__tests__/tasks-adapter.test.ts +269 -0
  312. package/src/adapters/federation.ts +185 -0
  313. package/src/adapters/inbox-adapter.ts +292 -0
  314. package/src/adapters/inbox-client-adapter.ts +173 -0
  315. package/src/adapters/index.ts +44 -0
  316. package/src/adapters/opentasks-daemon.ts +252 -0
  317. package/src/adapters/tasks-adapter.ts +327 -0
  318. package/src/adapters/types.ts +285 -0
  319. package/src/agent/__tests__/agent-manager-v2.test.ts +554 -0
  320. package/src/agent/__tests__/agent-store.test.ts +413 -0
  321. package/src/agent/agent-manager-v2.ts +1476 -0
  322. package/src/agent/agent-manager.ts +41 -1794
  323. package/src/agent/agent-store.ts +385 -0
  324. package/src/api/__tests__/server.test.ts +235 -1157
  325. package/src/api/index.ts +5 -3
  326. package/src/api/server.ts +270 -1989
  327. package/src/api/types.ts +25 -339
  328. package/src/boot-v2.ts +527 -0
  329. package/src/cli/acp.ts +38 -500
  330. package/src/cli/index.ts +68 -470
  331. package/src/cli/mcp.ts +260 -340
  332. package/src/cognitive/__tests__/macro-agent-backend.test.ts +478 -0
  333. package/src/cognitive/__tests__/session-converter.test.ts +423 -0
  334. package/src/cognitive/__tests__/workspace-handler.test.ts +221 -0
  335. package/src/cognitive/analyst-role.ts +59 -0
  336. package/src/cognitive/index.ts +49 -0
  337. package/src/cognitive/macro-agent-backend.ts +354 -0
  338. package/src/cognitive/session-converter.ts +151 -0
  339. package/src/cognitive/types.ts +163 -0
  340. package/src/cognitive/workspace-handler.ts +163 -0
  341. package/src/control/__tests__/control-resilience.test.ts +251 -0
  342. package/src/control/__tests__/control-socket.test.ts +240 -0
  343. package/src/control/control-client.ts +337 -0
  344. package/src/control/control-server.ts +298 -0
  345. package/src/control/index.ts +17 -0
  346. package/src/control/types.ts +95 -0
  347. package/src/index.ts +42 -224
  348. package/src/integrations/__tests__/context-builder.test.ts +218 -0
  349. package/src/integrations/__tests__/sessionlog.test.ts +498 -0
  350. package/src/integrations/__tests__/skilltree.test.ts +136 -0
  351. package/src/integrations/context-builder.ts +280 -0
  352. package/src/integrations/sessionlog.ts +194 -0
  353. package/src/integrations/skilltree.ts +183 -0
  354. package/src/lifecycle/__tests__/handlers-v2.test.ts +565 -0
  355. package/src/lifecycle/cleanup.ts +6 -46
  356. package/src/lifecycle/handlers-v2.ts +437 -0
  357. package/src/lifecycle/index.ts +2 -28
  358. package/src/map/__tests__/lifecycle-bridge.test.ts +223 -0
  359. package/src/map/__tests__/permission-forwarding.test.ts +143 -0
  360. package/src/map/__tests__/sidecar-integration.test.ts +190 -0
  361. package/src/map/__tests__/task-bridge.test.ts +153 -0
  362. package/src/map/__tests__/trajectory-reporter.test.ts +173 -0
  363. package/src/map/acp-bridge.ts +270 -0
  364. package/src/map/cc-swarm-hooks.ts +242 -0
  365. package/src/map/coordination-handler.ts +220 -0
  366. package/src/map/index.ts +13 -14
  367. package/src/map/lifecycle-bridge.ts +140 -0
  368. package/src/map/server.ts +527 -0
  369. package/src/map/sidecar.ts +312 -0
  370. package/src/map/task-bridge.ts +89 -0
  371. package/src/map/trajectory-reporter.ts +124 -0
  372. package/src/map/types.ts +195 -367
  373. package/src/mcp/__tests__/mcp-server-v2.test.ts +236 -0
  374. package/src/mcp/index.ts +2 -2
  375. package/src/mcp/mcp-server-v2.ts +485 -0
  376. package/src/mcp/tools/done-v2.ts +203 -0
  377. package/src/metrics/__tests__/metrics.test.ts +205 -0
  378. package/src/metrics/index.ts +13 -9
  379. package/src/metrics/metrics.ts +110 -239
  380. package/src/metrics/types.ts +63 -0
  381. package/src/store/index.ts +3 -64
  382. package/src/store/types/events.ts +5 -100
  383. package/src/store/types/index.ts +0 -3
  384. package/src/teams/__tests__/team-manager-v2.test.ts +425 -0
  385. package/src/teams/__tests__/team-runtime-v2.test.ts +402 -0
  386. package/src/teams/index.ts +0 -2
  387. package/src/teams/team-manager-v2.ts +268 -0
  388. package/src/teams/team-runtime-v2.ts +898 -0
  389. package/src/trigger/__tests__/trigger-system-v2.test.ts +257 -0
  390. package/src/trigger/index.ts +16 -31
  391. package/src/trigger/sources/cron/cron-service.ts +1 -1
  392. package/src/trigger/sources/webhook/webhook-handler.ts +1 -1
  393. package/src/trigger/strategies/ai-router.ts +170 -0
  394. package/src/trigger/trigger-system-v2.ts +536 -0
  395. package/src/trigger/types.ts +13 -0
  396. package/src/workspace/strategies/optimistic.ts +9 -6
  397. package/.claude/settings.local.json +0 -61
  398. package/dist/acp/websocket-stream.d.ts +0 -30
  399. package/dist/acp/websocket-stream.d.ts.map +0 -1
  400. package/dist/acp/websocket-stream.js +0 -118
  401. package/dist/acp/websocket-stream.js.map +0 -1
  402. package/dist/activity/deduplication.d.ts +0 -85
  403. package/dist/activity/deduplication.d.ts.map +0 -1
  404. package/dist/activity/deduplication.js +0 -149
  405. package/dist/activity/deduplication.js.map +0 -1
  406. package/dist/activity/index.d.ts +0 -16
  407. package/dist/activity/index.d.ts.map +0 -1
  408. package/dist/activity/index.js +0 -17
  409. package/dist/activity/index.js.map +0 -1
  410. package/dist/activity/relevance.d.ts +0 -81
  411. package/dist/activity/relevance.d.ts.map +0 -1
  412. package/dist/activity/relevance.js +0 -161
  413. package/dist/activity/relevance.js.map +0 -1
  414. package/dist/activity/types.d.ts +0 -169
  415. package/dist/activity/types.d.ts.map +0 -1
  416. package/dist/activity/types.js +0 -33
  417. package/dist/activity/types.js.map +0 -1
  418. package/dist/activity/watcher.d.ts +0 -64
  419. package/dist/activity/watcher.d.ts.map +0 -1
  420. package/dist/activity/watcher.js +0 -212
  421. package/dist/activity/watcher.js.map +0 -1
  422. package/dist/agent/wake.d.ts +0 -85
  423. package/dist/agent/wake.d.ts.map +0 -1
  424. package/dist/agent/wake.js +0 -278
  425. package/dist/agent/wake.js.map +0 -1
  426. package/dist/lifecycle/handlers/generic.d.ts +0 -27
  427. package/dist/lifecycle/handlers/generic.d.ts.map +0 -1
  428. package/dist/lifecycle/handlers/generic.js +0 -56
  429. package/dist/lifecycle/handlers/generic.js.map +0 -1
  430. package/dist/lifecycle/handlers/index.d.ts +0 -51
  431. package/dist/lifecycle/handlers/index.d.ts.map +0 -1
  432. package/dist/lifecycle/handlers/index.js +0 -110
  433. package/dist/lifecycle/handlers/index.js.map +0 -1
  434. package/dist/lifecycle/handlers/integrator.d.ts +0 -81
  435. package/dist/lifecycle/handlers/integrator.d.ts.map +0 -1
  436. package/dist/lifecycle/handlers/integrator.js +0 -451
  437. package/dist/lifecycle/handlers/integrator.js.map +0 -1
  438. package/dist/lifecycle/handlers/monitor.d.ts +0 -29
  439. package/dist/lifecycle/handlers/monitor.d.ts.map +0 -1
  440. package/dist/lifecycle/handlers/monitor.js +0 -79
  441. package/dist/lifecycle/handlers/monitor.js.map +0 -1
  442. package/dist/lifecycle/handlers/worker.d.ts +0 -56
  443. package/dist/lifecycle/handlers/worker.d.ts.map +0 -1
  444. package/dist/lifecycle/handlers/worker.js +0 -381
  445. package/dist/lifecycle/handlers/worker.js.map +0 -1
  446. package/dist/mail/conversation-map.d.ts +0 -33
  447. package/dist/mail/conversation-map.d.ts.map +0 -1
  448. package/dist/mail/conversation-map.js +0 -61
  449. package/dist/mail/conversation-map.js.map +0 -1
  450. package/dist/mail/index.d.ts +0 -11
  451. package/dist/mail/index.d.ts.map +0 -1
  452. package/dist/mail/index.js +0 -11
  453. package/dist/mail/index.js.map +0 -1
  454. package/dist/mail/mail-service.d.ts +0 -85
  455. package/dist/mail/mail-service.d.ts.map +0 -1
  456. package/dist/mail/mail-service.js +0 -121
  457. package/dist/mail/mail-service.js.map +0 -1
  458. package/dist/mail/stores/eventstore-conversation-store.d.ts +0 -40
  459. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +0 -1
  460. package/dist/mail/stores/eventstore-conversation-store.js +0 -131
  461. package/dist/mail/stores/eventstore-conversation-store.js.map +0 -1
  462. package/dist/mail/stores/eventstore-participant-store.d.ts +0 -43
  463. package/dist/mail/stores/eventstore-participant-store.d.ts.map +0 -1
  464. package/dist/mail/stores/eventstore-participant-store.js +0 -145
  465. package/dist/mail/stores/eventstore-participant-store.js.map +0 -1
  466. package/dist/mail/stores/eventstore-thread-store.d.ts +0 -46
  467. package/dist/mail/stores/eventstore-thread-store.d.ts.map +0 -1
  468. package/dist/mail/stores/eventstore-thread-store.js +0 -118
  469. package/dist/mail/stores/eventstore-thread-store.js.map +0 -1
  470. package/dist/mail/stores/eventstore-turn-store.d.ts +0 -47
  471. package/dist/mail/stores/eventstore-turn-store.d.ts.map +0 -1
  472. package/dist/mail/stores/eventstore-turn-store.js +0 -153
  473. package/dist/mail/stores/eventstore-turn-store.js.map +0 -1
  474. package/dist/mail/stores/index.d.ts +0 -12
  475. package/dist/mail/stores/index.d.ts.map +0 -1
  476. package/dist/mail/stores/index.js +0 -12
  477. package/dist/mail/stores/index.js.map +0 -1
  478. package/dist/mail/stores/types.d.ts +0 -146
  479. package/dist/mail/stores/types.d.ts.map +0 -1
  480. package/dist/mail/stores/types.js +0 -13
  481. package/dist/mail/stores/types.js.map +0 -1
  482. package/dist/mail/turn-recorder.d.ts +0 -30
  483. package/dist/mail/turn-recorder.d.ts.map +0 -1
  484. package/dist/mail/turn-recorder.js +0 -98
  485. package/dist/mail/turn-recorder.js.map +0 -1
  486. package/dist/map/adapter/acp-over-map.d.ts +0 -115
  487. package/dist/map/adapter/acp-over-map.d.ts.map +0 -1
  488. package/dist/map/adapter/acp-over-map.js +0 -1024
  489. package/dist/map/adapter/acp-over-map.js.map +0 -1
  490. package/dist/map/adapter/connection-manager.d.ts +0 -150
  491. package/dist/map/adapter/connection-manager.d.ts.map +0 -1
  492. package/dist/map/adapter/connection-manager.js +0 -207
  493. package/dist/map/adapter/connection-manager.js.map +0 -1
  494. package/dist/map/adapter/event-log.d.ts +0 -87
  495. package/dist/map/adapter/event-log.d.ts.map +0 -1
  496. package/dist/map/adapter/event-log.js +0 -122
  497. package/dist/map/adapter/event-log.js.map +0 -1
  498. package/dist/map/adapter/event-translator.d.ts +0 -85
  499. package/dist/map/adapter/event-translator.d.ts.map +0 -1
  500. package/dist/map/adapter/event-translator.js +0 -295
  501. package/dist/map/adapter/event-translator.js.map +0 -1
  502. package/dist/map/adapter/extensions/agent-detection.d.ts +0 -49
  503. package/dist/map/adapter/extensions/agent-detection.d.ts.map +0 -1
  504. package/dist/map/adapter/extensions/agent-detection.js +0 -91
  505. package/dist/map/adapter/extensions/agent-detection.js.map +0 -1
  506. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +0 -82
  507. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +0 -1
  508. package/dist/map/adapter/extensions/agent-lifecycle.js +0 -164
  509. package/dist/map/adapter/extensions/agent-lifecycle.js.map +0 -1
  510. package/dist/map/adapter/extensions/index.d.ts +0 -92
  511. package/dist/map/adapter/extensions/index.d.ts.map +0 -1
  512. package/dist/map/adapter/extensions/index.js +0 -214
  513. package/dist/map/adapter/extensions/index.js.map +0 -1
  514. package/dist/map/adapter/extensions/mcp-bridge.d.ts +0 -57
  515. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +0 -1
  516. package/dist/map/adapter/extensions/mcp-bridge.js +0 -745
  517. package/dist/map/adapter/extensions/mcp-bridge.js.map +0 -1
  518. package/dist/map/adapter/extensions/rename.d.ts +0 -29
  519. package/dist/map/adapter/extensions/rename.d.ts.map +0 -1
  520. package/dist/map/adapter/extensions/rename.js +0 -49
  521. package/dist/map/adapter/extensions/rename.js.map +0 -1
  522. package/dist/map/adapter/extensions/resume.d.ts +0 -47
  523. package/dist/map/adapter/extensions/resume.d.ts.map +0 -1
  524. package/dist/map/adapter/extensions/resume.js +0 -59
  525. package/dist/map/adapter/extensions/resume.js.map +0 -1
  526. package/dist/map/adapter/extensions/streams.d.ts +0 -95
  527. package/dist/map/adapter/extensions/streams.d.ts.map +0 -1
  528. package/dist/map/adapter/extensions/streams.js +0 -515
  529. package/dist/map/adapter/extensions/streams.js.map +0 -1
  530. package/dist/map/adapter/extensions/task.d.ts +0 -40
  531. package/dist/map/adapter/extensions/task.d.ts.map +0 -1
  532. package/dist/map/adapter/extensions/task.js +0 -197
  533. package/dist/map/adapter/extensions/task.js.map +0 -1
  534. package/dist/map/adapter/extensions/update-metadata.d.ts +0 -29
  535. package/dist/map/adapter/extensions/update-metadata.d.ts.map +0 -1
  536. package/dist/map/adapter/extensions/update-metadata.js +0 -67
  537. package/dist/map/adapter/extensions/update-metadata.js.map +0 -1
  538. package/dist/map/adapter/extensions/wake.d.ts +0 -60
  539. package/dist/map/adapter/extensions/wake.d.ts.map +0 -1
  540. package/dist/map/adapter/extensions/wake.js +0 -144
  541. package/dist/map/adapter/extensions/wake.js.map +0 -1
  542. package/dist/map/adapter/extensions/workspace-files.d.ts +0 -42
  543. package/dist/map/adapter/extensions/workspace-files.d.ts.map +0 -1
  544. package/dist/map/adapter/extensions/workspace-files.js +0 -338
  545. package/dist/map/adapter/extensions/workspace-files.js.map +0 -1
  546. package/dist/map/adapter/extensions/workspace.d.ts +0 -57
  547. package/dist/map/adapter/extensions/workspace.d.ts.map +0 -1
  548. package/dist/map/adapter/extensions/workspace.js +0 -81
  549. package/dist/map/adapter/extensions/workspace.js.map +0 -1
  550. package/dist/map/adapter/index.d.ts +0 -20
  551. package/dist/map/adapter/index.d.ts.map +0 -1
  552. package/dist/map/adapter/index.js +0 -40
  553. package/dist/map/adapter/index.js.map +0 -1
  554. package/dist/map/adapter/interface.d.ts +0 -450
  555. package/dist/map/adapter/interface.d.ts.map +0 -1
  556. package/dist/map/adapter/interface.js +0 -24
  557. package/dist/map/adapter/interface.js.map +0 -1
  558. package/dist/map/adapter/mail-handler-adapter.d.ts +0 -27
  559. package/dist/map/adapter/mail-handler-adapter.d.ts.map +0 -1
  560. package/dist/map/adapter/mail-handler-adapter.js +0 -292
  561. package/dist/map/adapter/mail-handler-adapter.js.map +0 -1
  562. package/dist/map/adapter/map-adapter.d.ts +0 -200
  563. package/dist/map/adapter/map-adapter.d.ts.map +0 -1
  564. package/dist/map/adapter/map-adapter.js +0 -1199
  565. package/dist/map/adapter/map-adapter.js.map +0 -1
  566. package/dist/map/adapter/rpc-handler.d.ts +0 -263
  567. package/dist/map/adapter/rpc-handler.d.ts.map +0 -1
  568. package/dist/map/adapter/rpc-handler.js +0 -365
  569. package/dist/map/adapter/rpc-handler.js.map +0 -1
  570. package/dist/map/adapter/subscription-manager.d.ts +0 -174
  571. package/dist/map/adapter/subscription-manager.d.ts.map +0 -1
  572. package/dist/map/adapter/subscription-manager.js +0 -248
  573. package/dist/map/adapter/subscription-manager.js.map +0 -1
  574. package/dist/map/adapter/types.d.ts +0 -194
  575. package/dist/map/adapter/types.d.ts.map +0 -1
  576. package/dist/map/adapter/types.js +0 -27
  577. package/dist/map/adapter/types.js.map +0 -1
  578. package/dist/map/adapter/websocket-integration.d.ts +0 -113
  579. package/dist/map/adapter/websocket-integration.d.ts.map +0 -1
  580. package/dist/map/adapter/websocket-integration.js +0 -134
  581. package/dist/map/adapter/websocket-integration.js.map +0 -1
  582. package/dist/map/federation/envelope.d.ts +0 -98
  583. package/dist/map/federation/envelope.d.ts.map +0 -1
  584. package/dist/map/federation/envelope.js +0 -160
  585. package/dist/map/federation/envelope.js.map +0 -1
  586. package/dist/map/federation/federation-handler.d.ts +0 -50
  587. package/dist/map/federation/federation-handler.d.ts.map +0 -1
  588. package/dist/map/federation/federation-handler.js +0 -306
  589. package/dist/map/federation/federation-handler.js.map +0 -1
  590. package/dist/map/federation/index.d.ts +0 -14
  591. package/dist/map/federation/index.d.ts.map +0 -1
  592. package/dist/map/federation/index.js +0 -13
  593. package/dist/map/federation/index.js.map +0 -1
  594. package/dist/map/federation/types.d.ts +0 -239
  595. package/dist/map/federation/types.d.ts.map +0 -1
  596. package/dist/map/federation/types.js +0 -23
  597. package/dist/map/federation/types.js.map +0 -1
  598. package/dist/map/utils/address-translation.d.ts +0 -99
  599. package/dist/map/utils/address-translation.d.ts.map +0 -1
  600. package/dist/map/utils/address-translation.js +0 -285
  601. package/dist/map/utils/address-translation.js.map +0 -1
  602. package/dist/map/utils/index.d.ts +0 -7
  603. package/dist/map/utils/index.d.ts.map +0 -1
  604. package/dist/map/utils/index.js +0 -7
  605. package/dist/map/utils/index.js.map +0 -1
  606. package/dist/mcp/map-client.d.ts +0 -39
  607. package/dist/mcp/map-client.d.ts.map +0 -1
  608. package/dist/mcp/map-client.js +0 -129
  609. package/dist/mcp/map-client.js.map +0 -1
  610. package/dist/mcp/mcp-server.d.ts +0 -72
  611. package/dist/mcp/mcp-server.d.ts.map +0 -1
  612. package/dist/mcp/mcp-server.js +0 -1024
  613. package/dist/mcp/mcp-server.js.map +0 -1
  614. package/dist/mcp/tools/claim_task.d.ts +0 -35
  615. package/dist/mcp/tools/claim_task.d.ts.map +0 -1
  616. package/dist/mcp/tools/claim_task.js +0 -58
  617. package/dist/mcp/tools/claim_task.js.map +0 -1
  618. package/dist/mcp/tools/done.d.ts +0 -102
  619. package/dist/mcp/tools/done.d.ts.map +0 -1
  620. package/dist/mcp/tools/done.js +0 -252
  621. package/dist/mcp/tools/done.js.map +0 -1
  622. package/dist/mcp/tools/inject_context.d.ts +0 -61
  623. package/dist/mcp/tools/inject_context.d.ts.map +0 -1
  624. package/dist/mcp/tools/inject_context.js +0 -123
  625. package/dist/mcp/tools/inject_context.js.map +0 -1
  626. package/dist/mcp/tools/list_claimable_tasks.d.ts +0 -38
  627. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +0 -1
  628. package/dist/mcp/tools/list_claimable_tasks.js +0 -63
  629. package/dist/mcp/tools/list_claimable_tasks.js.map +0 -1
  630. package/dist/mcp/tools/unclaim_task.d.ts +0 -31
  631. package/dist/mcp/tools/unclaim_task.d.ts.map +0 -1
  632. package/dist/mcp/tools/unclaim_task.js +0 -47
  633. package/dist/mcp/tools/unclaim_task.js.map +0 -1
  634. package/dist/mcp/tools/wait_for_activity.d.ts +0 -60
  635. package/dist/mcp/tools/wait_for_activity.d.ts.map +0 -1
  636. package/dist/mcp/tools/wait_for_activity.js +0 -135
  637. package/dist/mcp/tools/wait_for_activity.js.map +0 -1
  638. package/dist/monitor/health-check-service.d.ts +0 -143
  639. package/dist/monitor/health-check-service.d.ts.map +0 -1
  640. package/dist/monitor/health-check-service.js +0 -240
  641. package/dist/monitor/health-check-service.js.map +0 -1
  642. package/dist/monitor/index.d.ts +0 -14
  643. package/dist/monitor/index.d.ts.map +0 -1
  644. package/dist/monitor/index.js +0 -14
  645. package/dist/monitor/index.js.map +0 -1
  646. package/dist/monitor/stall-detector.d.ts +0 -109
  647. package/dist/monitor/stall-detector.d.ts.map +0 -1
  648. package/dist/monitor/stall-detector.js +0 -152
  649. package/dist/monitor/stall-detector.js.map +0 -1
  650. package/dist/peer/capability-manager.d.ts +0 -56
  651. package/dist/peer/capability-manager.d.ts.map +0 -1
  652. package/dist/peer/capability-manager.js +0 -186
  653. package/dist/peer/capability-manager.js.map +0 -1
  654. package/dist/peer/encapsulation-manager.d.ts +0 -190
  655. package/dist/peer/encapsulation-manager.d.ts.map +0 -1
  656. package/dist/peer/encapsulation-manager.js +0 -486
  657. package/dist/peer/encapsulation-manager.js.map +0 -1
  658. package/dist/peer/federation-manager.d.ts +0 -223
  659. package/dist/peer/federation-manager.d.ts.map +0 -1
  660. package/dist/peer/federation-manager.js +0 -528
  661. package/dist/peer/federation-manager.js.map +0 -1
  662. package/dist/peer/hierarchy-errors.d.ts +0 -208
  663. package/dist/peer/hierarchy-errors.d.ts.map +0 -1
  664. package/dist/peer/hierarchy-errors.js +0 -268
  665. package/dist/peer/hierarchy-errors.js.map +0 -1
  666. package/dist/peer/hierarchy-protocol.d.ts +0 -159
  667. package/dist/peer/hierarchy-protocol.d.ts.map +0 -1
  668. package/dist/peer/hierarchy-protocol.js +0 -142
  669. package/dist/peer/hierarchy-protocol.js.map +0 -1
  670. package/dist/peer/index.d.ts +0 -15
  671. package/dist/peer/index.d.ts.map +0 -1
  672. package/dist/peer/index.js +0 -15
  673. package/dist/peer/index.js.map +0 -1
  674. package/dist/peer/peer-manager.d.ts +0 -99
  675. package/dist/peer/peer-manager.d.ts.map +0 -1
  676. package/dist/peer/peer-manager.js +0 -333
  677. package/dist/peer/peer-manager.js.map +0 -1
  678. package/dist/peer/task-delegation.d.ts +0 -189
  679. package/dist/peer/task-delegation.d.ts.map +0 -1
  680. package/dist/peer/task-delegation.js +0 -303
  681. package/dist/peer/task-delegation.js.map +0 -1
  682. package/dist/peer/transports/index.d.ts +0 -8
  683. package/dist/peer/transports/index.d.ts.map +0 -1
  684. package/dist/peer/transports/index.js +0 -8
  685. package/dist/peer/transports/index.js.map +0 -1
  686. package/dist/peer/transports/local-transport.d.ts +0 -56
  687. package/dist/peer/transports/local-transport.d.ts.map +0 -1
  688. package/dist/peer/transports/local-transport.js +0 -263
  689. package/dist/peer/transports/local-transport.js.map +0 -1
  690. package/dist/peer/transports/websocket-transport.d.ts +0 -86
  691. package/dist/peer/transports/websocket-transport.d.ts.map +0 -1
  692. package/dist/peer/transports/websocket-transport.js +0 -338
  693. package/dist/peer/transports/websocket-transport.js.map +0 -1
  694. package/dist/peer/types.d.ts +0 -268
  695. package/dist/peer/types.d.ts.map +0 -1
  696. package/dist/peer/types.js +0 -36
  697. package/dist/peer/types.js.map +0 -1
  698. package/dist/router/address-resolver.d.ts +0 -102
  699. package/dist/router/address-resolver.d.ts.map +0 -1
  700. package/dist/router/address-resolver.js +0 -198
  701. package/dist/router/address-resolver.js.map +0 -1
  702. package/dist/router/broadcast.d.ts +0 -53
  703. package/dist/router/broadcast.d.ts.map +0 -1
  704. package/dist/router/broadcast.js +0 -75
  705. package/dist/router/broadcast.js.map +0 -1
  706. package/dist/router/channels.d.ts +0 -148
  707. package/dist/router/channels.d.ts.map +0 -1
  708. package/dist/router/channels.js +0 -126
  709. package/dist/router/channels.js.map +0 -1
  710. package/dist/router/index.d.ts +0 -21
  711. package/dist/router/index.d.ts.map +0 -1
  712. package/dist/router/index.js +0 -18
  713. package/dist/router/index.js.map +0 -1
  714. package/dist/router/message-router.d.ts +0 -197
  715. package/dist/router/message-router.d.ts.map +0 -1
  716. package/dist/router/message-router.js +0 -903
  717. package/dist/router/message-router.js.map +0 -1
  718. package/dist/router/message-types.d.ts +0 -183
  719. package/dist/router/message-types.d.ts.map +0 -1
  720. package/dist/router/message-types.js +0 -79
  721. package/dist/router/message-types.js.map +0 -1
  722. package/dist/router/role-resolver.d.ts +0 -67
  723. package/dist/router/role-resolver.d.ts.map +0 -1
  724. package/dist/router/role-resolver.js +0 -106
  725. package/dist/router/role-resolver.js.map +0 -1
  726. package/dist/router/signals.d.ts +0 -253
  727. package/dist/router/signals.d.ts.map +0 -1
  728. package/dist/router/signals.js +0 -53
  729. package/dist/router/signals.js.map +0 -1
  730. package/dist/router/types.d.ts +0 -191
  731. package/dist/router/types.d.ts.map +0 -1
  732. package/dist/router/types.js +0 -34
  733. package/dist/router/types.js.map +0 -1
  734. package/dist/router/wake.d.ts +0 -111
  735. package/dist/router/wake.d.ts.map +0 -1
  736. package/dist/router/wake.js +0 -180
  737. package/dist/router/wake.js.map +0 -1
  738. package/dist/server/combined-server.d.ts +0 -95
  739. package/dist/server/combined-server.d.ts.map +0 -1
  740. package/dist/server/combined-server.js +0 -335
  741. package/dist/server/combined-server.js.map +0 -1
  742. package/dist/steering/index.d.ts +0 -11
  743. package/dist/steering/index.d.ts.map +0 -1
  744. package/dist/steering/index.js +0 -11
  745. package/dist/steering/index.js.map +0 -1
  746. package/dist/steering/inject.d.ts +0 -39
  747. package/dist/steering/inject.d.ts.map +0 -1
  748. package/dist/steering/inject.js +0 -197
  749. package/dist/steering/inject.js.map +0 -1
  750. package/dist/steering/types.d.ts +0 -100
  751. package/dist/steering/types.d.ts.map +0 -1
  752. package/dist/steering/types.js +0 -11
  753. package/dist/steering/types.js.map +0 -1
  754. package/dist/store/backends/index.d.ts +0 -11
  755. package/dist/store/backends/index.d.ts.map +0 -1
  756. package/dist/store/backends/index.js +0 -15
  757. package/dist/store/backends/index.js.map +0 -1
  758. package/dist/store/backends/json-backend.d.ts +0 -23
  759. package/dist/store/backends/json-backend.d.ts.map +0 -1
  760. package/dist/store/backends/json-backend.js +0 -220
  761. package/dist/store/backends/json-backend.js.map +0 -1
  762. package/dist/store/backends/memory-backend.d.ts +0 -12
  763. package/dist/store/backends/memory-backend.d.ts.map +0 -1
  764. package/dist/store/backends/memory-backend.js +0 -205
  765. package/dist/store/backends/memory-backend.js.map +0 -1
  766. package/dist/store/backends/sqlite-backend.d.ts +0 -27
  767. package/dist/store/backends/sqlite-backend.d.ts.map +0 -1
  768. package/dist/store/backends/sqlite-backend.js +0 -231
  769. package/dist/store/backends/sqlite-backend.js.map +0 -1
  770. package/dist/store/backends/tinybase-backend.d.ts +0 -22
  771. package/dist/store/backends/tinybase-backend.d.ts.map +0 -1
  772. package/dist/store/backends/tinybase-backend.js +0 -203
  773. package/dist/store/backends/tinybase-backend.js.map +0 -1
  774. package/dist/store/backends/types.d.ts +0 -175
  775. package/dist/store/backends/types.d.ts.map +0 -1
  776. package/dist/store/backends/types.js +0 -28
  777. package/dist/store/backends/types.js.map +0 -1
  778. package/dist/store/event-store.d.ts +0 -128
  779. package/dist/store/event-store.d.ts.map +0 -1
  780. package/dist/store/event-store.js +0 -1746
  781. package/dist/store/event-store.js.map +0 -1
  782. package/dist/store/instance.d.ts +0 -283
  783. package/dist/store/instance.d.ts.map +0 -1
  784. package/dist/store/instance.js +0 -363
  785. package/dist/store/instance.js.map +0 -1
  786. package/dist/store/migrations.d.ts +0 -41
  787. package/dist/store/migrations.d.ts.map +0 -1
  788. package/dist/store/migrations.js +0 -79
  789. package/dist/store/migrations.js.map +0 -1
  790. package/dist/store/types/config.d.ts +0 -16
  791. package/dist/store/types/config.d.ts.map +0 -1
  792. package/dist/store/types/config.js +0 -8
  793. package/dist/store/types/config.js.map +0 -1
  794. package/dist/store/types/conversations.d.ts +0 -91
  795. package/dist/store/types/conversations.d.ts.map +0 -1
  796. package/dist/store/types/conversations.js +0 -8
  797. package/dist/store/types/conversations.js.map +0 -1
  798. package/dist/store/types/sessions.d.ts +0 -44
  799. package/dist/store/types/sessions.d.ts.map +0 -1
  800. package/dist/store/types/sessions.js +0 -9
  801. package/dist/store/types/sessions.js.map +0 -1
  802. package/dist/task/backend/index.d.ts +0 -93
  803. package/dist/task/backend/index.d.ts.map +0 -1
  804. package/dist/task/backend/index.js +0 -178
  805. package/dist/task/backend/index.js.map +0 -1
  806. package/dist/task/backend/memory.d.ts +0 -70
  807. package/dist/task/backend/memory.d.ts.map +0 -1
  808. package/dist/task/backend/memory.js +0 -621
  809. package/dist/task/backend/memory.js.map +0 -1
  810. package/dist/task/backend/opentasks/backend.d.ts +0 -140
  811. package/dist/task/backend/opentasks/backend.d.ts.map +0 -1
  812. package/dist/task/backend/opentasks/backend.js +0 -1023
  813. package/dist/task/backend/opentasks/backend.js.map +0 -1
  814. package/dist/task/backend/opentasks/client.d.ts +0 -337
  815. package/dist/task/backend/opentasks/client.d.ts.map +0 -1
  816. package/dist/task/backend/opentasks/client.js +0 -225
  817. package/dist/task/backend/opentasks/client.js.map +0 -1
  818. package/dist/task/backend/opentasks/daemon-manager.d.ts +0 -89
  819. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +0 -1
  820. package/dist/task/backend/opentasks/daemon-manager.js +0 -195
  821. package/dist/task/backend/opentasks/daemon-manager.js.map +0 -1
  822. package/dist/task/backend/opentasks/index.d.ts +0 -21
  823. package/dist/task/backend/opentasks/index.d.ts.map +0 -1
  824. package/dist/task/backend/opentasks/index.js +0 -21
  825. package/dist/task/backend/opentasks/index.js.map +0 -1
  826. package/dist/task/backend/opentasks/mapping.d.ts +0 -48
  827. package/dist/task/backend/opentasks/mapping.d.ts.map +0 -1
  828. package/dist/task/backend/opentasks/mapping.js +0 -77
  829. package/dist/task/backend/opentasks/mapping.js.map +0 -1
  830. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +0 -54
  831. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +0 -1
  832. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +0 -88
  833. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +0 -1
  834. package/dist/task/backend/sudocode/backend.d.ts +0 -155
  835. package/dist/task/backend/sudocode/backend.d.ts.map +0 -1
  836. package/dist/task/backend/sudocode/backend.js +0 -942
  837. package/dist/task/backend/sudocode/backend.js.map +0 -1
  838. package/dist/task/backend/sudocode/client.d.ts +0 -303
  839. package/dist/task/backend/sudocode/client.d.ts.map +0 -1
  840. package/dist/task/backend/sudocode/client.js +0 -101
  841. package/dist/task/backend/sudocode/client.js.map +0 -1
  842. package/dist/task/backend/sudocode/index.d.ts +0 -19
  843. package/dist/task/backend/sudocode/index.d.ts.map +0 -1
  844. package/dist/task/backend/sudocode/index.js +0 -17
  845. package/dist/task/backend/sudocode/index.js.map +0 -1
  846. package/dist/task/backend/sudocode/mapping.d.ts +0 -51
  847. package/dist/task/backend/sudocode/mapping.d.ts.map +0 -1
  848. package/dist/task/backend/sudocode/mapping.js +0 -86
  849. package/dist/task/backend/sudocode/mapping.js.map +0 -1
  850. package/dist/task/backend/sudocode/server-client.d.ts +0 -56
  851. package/dist/task/backend/sudocode/server-client.d.ts.map +0 -1
  852. package/dist/task/backend/sudocode/server-client.js +0 -367
  853. package/dist/task/backend/sudocode/server-client.js.map +0 -1
  854. package/dist/task/backend/sudocode/standalone-client.d.ts +0 -91
  855. package/dist/task/backend/sudocode/standalone-client.d.ts.map +0 -1
  856. package/dist/task/backend/sudocode/standalone-client.js +0 -476
  857. package/dist/task/backend/sudocode/standalone-client.js.map +0 -1
  858. package/dist/task/backend/sudocode/sync-policy.d.ts +0 -166
  859. package/dist/task/backend/sudocode/sync-policy.d.ts.map +0 -1
  860. package/dist/task/backend/sudocode/sync-policy.js +0 -221
  861. package/dist/task/backend/sudocode/sync-policy.js.map +0 -1
  862. package/dist/task/backend/sudocode/tools.d.ts +0 -87
  863. package/dist/task/backend/sudocode/tools.d.ts.map +0 -1
  864. package/dist/task/backend/sudocode/tools.js +0 -743
  865. package/dist/task/backend/sudocode/tools.js.map +0 -1
  866. package/dist/task/backend/tool-provider.d.ts +0 -56
  867. package/dist/task/backend/tool-provider.d.ts.map +0 -1
  868. package/dist/task/backend/tool-provider.js +0 -424
  869. package/dist/task/backend/tool-provider.js.map +0 -1
  870. package/dist/task/backend/types.d.ts +0 -297
  871. package/dist/task/backend/types.d.ts.map +0 -1
  872. package/dist/task/backend/types.js +0 -27
  873. package/dist/task/backend/types.js.map +0 -1
  874. package/dist/task/backend/unified-tool-provider.d.ts +0 -57
  875. package/dist/task/backend/unified-tool-provider.d.ts.map +0 -1
  876. package/dist/task/backend/unified-tool-provider.js +0 -623
  877. package/dist/task/backend/unified-tool-provider.js.map +0 -1
  878. package/dist/task/index.d.ts +0 -7
  879. package/dist/task/index.d.ts.map +0 -1
  880. package/dist/task/index.js +0 -7
  881. package/dist/task/index.js.map +0 -1
  882. package/dist/task/retry-policy.d.ts +0 -89
  883. package/dist/task/retry-policy.d.ts.map +0 -1
  884. package/dist/task/retry-policy.js +0 -160
  885. package/dist/task/retry-policy.js.map +0 -1
  886. package/dist/task/task-manager.d.ts +0 -70
  887. package/dist/task/task-manager.d.ts.map +0 -1
  888. package/dist/task/task-manager.js +0 -319
  889. package/dist/task/task-manager.js.map +0 -1
  890. package/dist/task/types.d.ts +0 -72
  891. package/dist/task/types.d.ts.map +0 -1
  892. package/dist/task/types.js +0 -33
  893. package/dist/task/types.js.map +0 -1
  894. package/dist/teams/team-manager.d.ts +0 -112
  895. package/dist/teams/team-manager.d.ts.map +0 -1
  896. package/dist/teams/team-manager.js +0 -305
  897. package/dist/teams/team-manager.js.map +0 -1
  898. package/dist/teams/team-runtime.d.ts +0 -245
  899. package/dist/teams/team-runtime.d.ts.map +0 -1
  900. package/dist/teams/team-runtime.js +0 -1023
  901. package/dist/teams/team-runtime.js.map +0 -1
  902. package/dist/trigger/router/index.d.ts +0 -11
  903. package/dist/trigger/router/index.d.ts.map +0 -1
  904. package/dist/trigger/router/index.js +0 -10
  905. package/dist/trigger/router/index.js.map +0 -1
  906. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +0 -34
  907. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +0 -1
  908. package/dist/trigger/router/strategies/ai-router-strategy.js +0 -359
  909. package/dist/trigger/router/strategies/ai-router-strategy.js.map +0 -1
  910. package/dist/trigger/router/strategies/direct-strategy.d.ts +0 -32
  911. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +0 -1
  912. package/dist/trigger/router/strategies/direct-strategy.js +0 -119
  913. package/dist/trigger/router/strategies/direct-strategy.js.map +0 -1
  914. package/dist/trigger/router/strategies/index.d.ts +0 -11
  915. package/dist/trigger/router/strategies/index.d.ts.map +0 -1
  916. package/dist/trigger/router/strategies/index.js +0 -11
  917. package/dist/trigger/router/strategies/index.js.map +0 -1
  918. package/dist/trigger/router/strategies/role-strategy.d.ts +0 -39
  919. package/dist/trigger/router/strategies/role-strategy.d.ts.map +0 -1
  920. package/dist/trigger/router/strategies/role-strategy.js +0 -207
  921. package/dist/trigger/router/strategies/role-strategy.js.map +0 -1
  922. package/dist/trigger/router/trigger-router.d.ts +0 -54
  923. package/dist/trigger/router/trigger-router.d.ts.map +0 -1
  924. package/dist/trigger/router/trigger-router.js +0 -362
  925. package/dist/trigger/router/trigger-router.js.map +0 -1
  926. package/dist/trigger/router/types.d.ts +0 -225
  927. package/dist/trigger/router/types.d.ts.map +0 -1
  928. package/dist/trigger/router/types.js +0 -10
  929. package/dist/trigger/router/types.js.map +0 -1
  930. package/dist/trigger/trigger-system.d.ts +0 -77
  931. package/dist/trigger/trigger-system.d.ts.map +0 -1
  932. package/dist/trigger/trigger-system.js +0 -84
  933. package/dist/trigger/trigger-system.js.map +0 -1
  934. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  935. package/references/acp-factory-ref/LICENSE +0 -21
  936. package/references/acp-factory-ref/README.md +0 -341
  937. package/references/acp-factory-ref/package-lock.json +0 -3102
  938. package/references/acp-factory-ref/package.json +0 -96
  939. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  940. package/references/acp-factory-ref/python/LICENSE +0 -21
  941. package/references/acp-factory-ref/python/Makefile +0 -57
  942. package/references/acp-factory-ref/python/README.md +0 -253
  943. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  944. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  945. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  946. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  947. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  948. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  949. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  950. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  951. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  952. package/references/claude-code-acp/.prettierrc.json +0 -4
  953. package/references/claude-code-acp/CHANGELOG.md +0 -249
  954. package/references/claude-code-acp/LICENSE +0 -222
  955. package/references/claude-code-acp/README.md +0 -53
  956. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  957. package/references/claude-code-acp/eslint.config.js +0 -48
  958. package/references/claude-code-acp/package-lock.json +0 -4570
  959. package/references/claude-code-acp/package.json +0 -88
  960. package/references/claude-code-acp/scripts/release.sh +0 -119
  961. package/references/claude-code-acp/src/acp-agent.ts +0 -2076
  962. package/references/claude-code-acp/src/index.ts +0 -26
  963. package/references/claude-code-acp/src/lib.ts +0 -38
  964. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  965. package/references/claude-code-acp/src/settings.ts +0 -522
  966. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  967. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  968. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  969. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  970. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  971. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  972. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  973. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  974. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  975. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  976. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  977. package/references/claude-code-acp/src/tools.ts +0 -819
  978. package/references/claude-code-acp/src/utils.ts +0 -171
  979. package/references/claude-code-acp/tsconfig.json +0 -18
  980. package/references/claude-code-acp/vitest.config.ts +0 -19
  981. package/references/minimem/.claude/settings.json +0 -7
  982. package/references/minimem/.sudocode/issues.jsonl +0 -18
  983. package/references/minimem/.sudocode/specs.jsonl +0 -1
  984. package/references/minimem/CLAUDE.md +0 -310
  985. package/references/minimem/README.md +0 -562
  986. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +0 -10
  987. package/references/minimem/claude-plugin/.mcp.json +0 -7
  988. package/references/minimem/claude-plugin/README.md +0 -158
  989. package/references/minimem/claude-plugin/commands/recall.md +0 -47
  990. package/references/minimem/claude-plugin/commands/remember.md +0 -41
  991. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +0 -272
  992. package/references/minimem/claude-plugin/hooks/hooks.json +0 -27
  993. package/references/minimem/claude-plugin/hooks/session-end.sh +0 -86
  994. package/references/minimem/claude-plugin/hooks/session-start.sh +0 -85
  995. package/references/minimem/claude-plugin/skills/memory/SKILL.md +0 -108
  996. package/references/minimem/media/banner.png +0 -0
  997. package/references/minimem/package-lock.json +0 -5373
  998. package/references/minimem/package.json +0 -72
  999. package/references/minimem/scripts/postbuild.js +0 -35
  1000. package/references/minimem/src/__tests__/edge-cases.test.ts +0 -371
  1001. package/references/minimem/src/__tests__/errors.test.ts +0 -265
  1002. package/references/minimem/src/__tests__/helpers.ts +0 -199
  1003. package/references/minimem/src/__tests__/internal.test.ts +0 -407
  1004. package/references/minimem/src/__tests__/knowledge.test.ts +0 -287
  1005. package/references/minimem/src/__tests__/minimem.integration.test.ts +0 -1127
  1006. package/references/minimem/src/__tests__/session.test.ts +0 -190
  1007. package/references/minimem/src/cli/__tests__/commands.test.ts +0 -759
  1008. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +0 -141
  1009. package/references/minimem/src/cli/commands/append.ts +0 -76
  1010. package/references/minimem/src/cli/commands/config.ts +0 -262
  1011. package/references/minimem/src/cli/commands/conflicts.ts +0 -413
  1012. package/references/minimem/src/cli/commands/daemon.ts +0 -169
  1013. package/references/minimem/src/cli/commands/index.ts +0 -12
  1014. package/references/minimem/src/cli/commands/init.ts +0 -88
  1015. package/references/minimem/src/cli/commands/mcp.ts +0 -177
  1016. package/references/minimem/src/cli/commands/push-pull.ts +0 -213
  1017. package/references/minimem/src/cli/commands/search.ts +0 -158
  1018. package/references/minimem/src/cli/commands/status.ts +0 -84
  1019. package/references/minimem/src/cli/commands/sync-init.ts +0 -290
  1020. package/references/minimem/src/cli/commands/sync.ts +0 -70
  1021. package/references/minimem/src/cli/commands/upsert.ts +0 -197
  1022. package/references/minimem/src/cli/config.ts +0 -584
  1023. package/references/minimem/src/cli/index.ts +0 -264
  1024. package/references/minimem/src/cli/shared.ts +0 -161
  1025. package/references/minimem/src/cli/sync/__tests__/central.test.ts +0 -152
  1026. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +0 -209
  1027. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +0 -118
  1028. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +0 -207
  1029. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +0 -476
  1030. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +0 -363
  1031. package/references/minimem/src/cli/sync/__tests__/state.test.ts +0 -255
  1032. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +0 -193
  1033. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +0 -178
  1034. package/references/minimem/src/cli/sync/central.ts +0 -292
  1035. package/references/minimem/src/cli/sync/conflicts.ts +0 -204
  1036. package/references/minimem/src/cli/sync/daemon.ts +0 -407
  1037. package/references/minimem/src/cli/sync/detection.ts +0 -138
  1038. package/references/minimem/src/cli/sync/index.ts +0 -107
  1039. package/references/minimem/src/cli/sync/operations.ts +0 -373
  1040. package/references/minimem/src/cli/sync/registry.ts +0 -279
  1041. package/references/minimem/src/cli/sync/state.ts +0 -355
  1042. package/references/minimem/src/cli/sync/validation.ts +0 -206
  1043. package/references/minimem/src/cli/sync/watcher.ts +0 -234
  1044. package/references/minimem/src/cli/version.ts +0 -34
  1045. package/references/minimem/src/core/index.ts +0 -9
  1046. package/references/minimem/src/core/indexer.ts +0 -628
  1047. package/references/minimem/src/core/searcher.ts +0 -221
  1048. package/references/minimem/src/db/schema.ts +0 -183
  1049. package/references/minimem/src/db/sqlite-vec.ts +0 -24
  1050. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +0 -431
  1051. package/references/minimem/src/embeddings/batch-gemini.ts +0 -392
  1052. package/references/minimem/src/embeddings/batch-openai.ts +0 -409
  1053. package/references/minimem/src/embeddings/embeddings.ts +0 -434
  1054. package/references/minimem/src/index.ts +0 -109
  1055. package/references/minimem/src/internal.ts +0 -299
  1056. package/references/minimem/src/minimem.ts +0 -1276
  1057. package/references/minimem/src/search/__tests__/hybrid.test.ts +0 -247
  1058. package/references/minimem/src/search/graph.ts +0 -234
  1059. package/references/minimem/src/search/hybrid.ts +0 -151
  1060. package/references/minimem/src/search/search.ts +0 -256
  1061. package/references/minimem/src/server/__tests__/mcp.test.ts +0 -341
  1062. package/references/minimem/src/server/__tests__/tools.test.ts +0 -364
  1063. package/references/minimem/src/server/mcp.ts +0 -326
  1064. package/references/minimem/src/server/tools.ts +0 -720
  1065. package/references/minimem/src/session.ts +0 -460
  1066. package/references/minimem/tsconfig.json +0 -19
  1067. package/references/minimem/tsup.config.ts +0 -26
  1068. package/references/minimem/vitest.config.ts +0 -24
  1069. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  1070. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  1071. package/references/multi-agent-protocol/LICENSE +0 -21
  1072. package/references/multi-agent-protocol/README.md +0 -113
  1073. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  1074. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  1075. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  1076. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  1077. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  1078. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  1079. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  1080. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  1081. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  1082. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  1083. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  1084. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  1085. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  1086. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  1087. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  1088. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  1089. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  1090. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  1091. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  1092. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  1093. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  1094. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  1095. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  1096. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  1097. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  1098. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  1099. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  1100. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  1101. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  1102. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  1103. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  1104. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  1105. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  1106. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  1107. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  1108. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  1109. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  1110. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  1111. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  1112. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  1113. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  1114. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  1115. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  1116. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  1117. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  1118. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  1119. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  1120. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  1121. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  1122. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  1123. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  1124. package/references/multi-agent-protocol/package-lock.json +0 -3886
  1125. package/references/multi-agent-protocol/package.json +0 -56
  1126. package/references/multi-agent-protocol/schema/meta.json +0 -467
  1127. package/references/multi-agent-protocol/schema/schema.json +0 -2558
  1128. package/references/openteams/.claude/settings.json +0 -6
  1129. package/references/openteams/README.md +0 -1
  1130. package/references/openteams/SKILL.md +0 -341
  1131. package/references/openteams/design.md +0 -411
  1132. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +0 -16
  1133. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +0 -5
  1134. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +0 -24
  1135. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +0 -5
  1136. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +0 -25
  1137. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +0 -5
  1138. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +0 -21
  1139. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +0 -5
  1140. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +0 -20
  1141. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +0 -5
  1142. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +0 -17
  1143. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +0 -5
  1144. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +0 -23
  1145. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +0 -5
  1146. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +0 -27
  1147. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +0 -5
  1148. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +0 -21
  1149. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +0 -5
  1150. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +0 -16
  1151. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +0 -5
  1152. package/references/openteams/examples/bmad-method/roles/analyst.yaml +0 -9
  1153. package/references/openteams/examples/bmad-method/roles/architect.yaml +0 -9
  1154. package/references/openteams/examples/bmad-method/roles/developer.yaml +0 -8
  1155. package/references/openteams/examples/bmad-method/roles/master.yaml +0 -8
  1156. package/references/openteams/examples/bmad-method/roles/pm.yaml +0 -9
  1157. package/references/openteams/examples/bmad-method/roles/qa.yaml +0 -8
  1158. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +0 -8
  1159. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +0 -9
  1160. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +0 -8
  1161. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +0 -8
  1162. package/references/openteams/examples/bmad-method/team.yaml +0 -161
  1163. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +0 -17
  1164. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +0 -5
  1165. package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +0 -25
  1166. package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +0 -5
  1167. package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +0 -34
  1168. package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +0 -5
  1169. package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +0 -18
  1170. package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +0 -3
  1171. package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +0 -42
  1172. package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +0 -5
  1173. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +0 -15
  1174. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +0 -3
  1175. package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +0 -17
  1176. package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +0 -3
  1177. package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +0 -28
  1178. package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +0 -5
  1179. package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +0 -16
  1180. package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +0 -3
  1181. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +0 -13
  1182. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +0 -3
  1183. package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +0 -14
  1184. package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +0 -3
  1185. package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +0 -19
  1186. package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +0 -5
  1187. package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +0 -8
  1188. package/references/openteams/examples/get-shit-done/roles/debugger.yaml +0 -8
  1189. package/references/openteams/examples/get-shit-done/roles/executor.yaml +0 -8
  1190. package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +0 -8
  1191. package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +0 -9
  1192. package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +0 -7
  1193. package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +0 -8
  1194. package/references/openteams/examples/get-shit-done/roles/planner.yaml +0 -8
  1195. package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +0 -8
  1196. package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +0 -7
  1197. package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +0 -7
  1198. package/references/openteams/examples/get-shit-done/roles/verifier.yaml +0 -8
  1199. package/references/openteams/examples/get-shit-done/team.yaml +0 -154
  1200. package/references/openteams/package-lock.json +0 -2181
  1201. package/references/openteams/package.json +0 -48
  1202. package/references/openteams/schema/role.schema.json +0 -125
  1203. package/references/openteams/schema/team.schema.json +0 -284
  1204. package/references/openteams/src/cli/agent.ts +0 -104
  1205. package/references/openteams/src/cli/cli.test.ts +0 -381
  1206. package/references/openteams/src/cli/generate.ts +0 -220
  1207. package/references/openteams/src/cli/message.ts +0 -241
  1208. package/references/openteams/src/cli/task.ts +0 -154
  1209. package/references/openteams/src/cli/team.ts +0 -104
  1210. package/references/openteams/src/cli/template.ts +0 -207
  1211. package/references/openteams/src/cli.ts +0 -45
  1212. package/references/openteams/src/db/database.test.ts +0 -185
  1213. package/references/openteams/src/db/database.ts +0 -240
  1214. package/references/openteams/src/generators/agent-prompt-generator.test.ts +0 -332
  1215. package/references/openteams/src/generators/agent-prompt-generator.ts +0 -521
  1216. package/references/openteams/src/generators/package-generator.test.ts +0 -129
  1217. package/references/openteams/src/generators/package-generator.ts +0 -102
  1218. package/references/openteams/src/generators/skill-generator.test.ts +0 -246
  1219. package/references/openteams/src/generators/skill-generator.ts +0 -374
  1220. package/references/openteams/src/index.ts +0 -104
  1221. package/references/openteams/src/services/agent-service.test.ts +0 -158
  1222. package/references/openteams/src/services/agent-service.ts +0 -84
  1223. package/references/openteams/src/services/communication-service.test.ts +0 -455
  1224. package/references/openteams/src/services/communication-service.ts +0 -371
  1225. package/references/openteams/src/services/message-service.test.ts +0 -342
  1226. package/references/openteams/src/services/message-service.ts +0 -203
  1227. package/references/openteams/src/services/task-service.test.ts +0 -434
  1228. package/references/openteams/src/services/task-service.ts +0 -239
  1229. package/references/openteams/src/services/team-service.test.ts +0 -181
  1230. package/references/openteams/src/services/team-service.ts +0 -139
  1231. package/references/openteams/src/services/template-service.test.ts +0 -306
  1232. package/references/openteams/src/services/template-service.ts +0 -182
  1233. package/references/openteams/src/spawner/acp-factory.ts +0 -96
  1234. package/references/openteams/src/spawner/interface.ts +0 -31
  1235. package/references/openteams/src/spawner/mock.test.ts +0 -93
  1236. package/references/openteams/src/spawner/mock.ts +0 -59
  1237. package/references/openteams/src/template/loader.test.ts +0 -1319
  1238. package/references/openteams/src/template/loader.ts +0 -698
  1239. package/references/openteams/src/template/types.ts +0 -200
  1240. package/references/openteams/src/types.ts +0 -205
  1241. package/references/openteams/tsconfig.json +0 -18
  1242. package/references/openteams/vitest.config.ts +0 -9
  1243. package/references/skill-tree/.claude/settings.json +0 -6
  1244. package/references/skill-tree/.sudocode/issues.jsonl +0 -11
  1245. package/references/skill-tree/.sudocode/specs.jsonl +0 -1
  1246. package/references/skill-tree/CLAUDE.md +0 -150
  1247. package/references/skill-tree/README.md +0 -324
  1248. package/references/skill-tree/docs/GAPS_v1.md +0 -221
  1249. package/references/skill-tree/docs/INTEGRATION_PLAN.md +0 -467
  1250. package/references/skill-tree/docs/TODOS.md +0 -91
  1251. package/references/skill-tree/docs/anthropic_skill_guide.md +0 -1364
  1252. package/references/skill-tree/docs/design/federated-skill-trees.md +0 -524
  1253. package/references/skill-tree/docs/design/multi-agent-sync.md +0 -759
  1254. package/references/skill-tree/docs/scraper/BRAINSTORM.md +0 -583
  1255. package/references/skill-tree/docs/scraper/POC_PLAN.md +0 -420
  1256. package/references/skill-tree/docs/scraper/README.md +0 -170
  1257. package/references/skill-tree/examples/basic-usage.ts +0 -190
  1258. package/references/skill-tree/package-lock.json +0 -1509
  1259. package/references/skill-tree/package.json +0 -66
  1260. package/references/skill-tree/scraper/README.md +0 -123
  1261. package/references/skill-tree/scraper/docs/DESIGN.md +0 -683
  1262. package/references/skill-tree/scraper/docs/PLAN.md +0 -336
  1263. package/references/skill-tree/scraper/drizzle.config.ts +0 -10
  1264. package/references/skill-tree/scraper/package-lock.json +0 -6329
  1265. package/references/skill-tree/scraper/package.json +0 -68
  1266. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +0 -7
  1267. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +0 -7
  1268. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +0 -27
  1269. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +0 -21
  1270. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +0 -54
  1271. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +0 -24
  1272. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +0 -93
  1273. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +0 -22
  1274. package/references/skill-tree/scraper/tsup.config.ts +0 -14
  1275. package/references/skill-tree/scraper/vitest.config.ts +0 -17
  1276. package/references/skill-tree/scripts/convert-to-vitest.ts +0 -166
  1277. package/references/skill-tree/skills/skill-writer/SKILL.md +0 -339
  1278. package/references/skill-tree/skills/skill-writer/references/examples.md +0 -326
  1279. package/references/skill-tree/skills/skill-writer/references/patterns.md +0 -210
  1280. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +0 -123
  1281. package/references/skill-tree/test/run-all.ts +0 -106
  1282. package/references/skill-tree/test/utils.ts +0 -128
  1283. package/references/skill-tree/vitest.config.ts +0 -16
  1284. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +0 -761
  1285. package/src/__tests__/e2e/cascade-termination.e2e.test.ts +0 -588
  1286. package/src/__tests__/e2e/conflict-resolution-flow.e2e.test.ts +0 -790
  1287. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +0 -714
  1288. package/src/__tests__/e2e/full-agent-orchestration.e2e.test.ts +0 -536
  1289. package/src/__tests__/e2e/mcp-server-debug.e2e.test.ts +0 -372
  1290. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +0 -304
  1291. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +0 -324
  1292. package/src/__tests__/e2e/multi-agent.e2e.test.ts +0 -1527
  1293. package/src/__tests__/e2e/multi-coordinator.e2e.test.ts +0 -602
  1294. package/src/__tests__/e2e/orchestration-flow.e2e.test.ts +0 -686
  1295. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +0 -563
  1296. package/src/__tests__/e2e/steering-task.e2e.test.ts +0 -840
  1297. package/src/__tests__/integration.e2e.test.ts +0 -407
  1298. package/src/acp/__tests__/combined-websocket-server.test.ts +0 -260
  1299. package/src/acp/__tests__/history.test.ts +0 -530
  1300. package/src/acp/__tests__/integration.test.ts +0 -1049
  1301. package/src/acp/__tests__/multi-client-mounting.test.ts +0 -303
  1302. package/src/acp/__tests__/session-persistence.test.ts +0 -276
  1303. package/src/acp/__tests__/websocket-full.e2e.test.ts +0 -401
  1304. package/src/acp/__tests__/websocket-integration.test.ts +0 -484
  1305. package/src/acp/__tests__/websocket-stream.test.ts +0 -281
  1306. package/src/acp/__tests__/websocket.e2e.test.ts +0 -390
  1307. package/src/acp/websocket-stream.ts +0 -140
  1308. package/src/activity/__tests__/deduplication.test.ts +0 -345
  1309. package/src/activity/__tests__/relevance.test.ts +0 -347
  1310. package/src/activity/__tests__/watcher.test.ts +0 -344
  1311. package/src/activity/deduplication.ts +0 -219
  1312. package/src/activity/index.ts +0 -51
  1313. package/src/activity/relevance.ts +0 -258
  1314. package/src/activity/types.ts +0 -263
  1315. package/src/activity/watcher.ts +0 -345
  1316. package/src/agent/__tests__/agent-manager.test.ts +0 -1382
  1317. package/src/agent/__tests__/wake.test.ts +0 -768
  1318. package/src/agent/wake.ts +0 -357
  1319. package/src/api/__tests__/conversation-api.test.ts +0 -468
  1320. package/src/cli/__tests__/acp.test.ts +0 -214
  1321. package/src/lifecycle/__tests__/cascade-termination.test.ts +0 -919
  1322. package/src/lifecycle/__tests__/cascade.test.ts +0 -595
  1323. package/src/lifecycle/__tests__/cleanup.test.ts +0 -322
  1324. package/src/lifecycle/__tests__/handlers.test.ts +0 -1879
  1325. package/src/lifecycle/__tests__/lifecycle.e2e.test.ts +0 -354
  1326. package/src/lifecycle/__tests__/merge-queue.e2e.test.ts +0 -602
  1327. package/src/lifecycle/handlers/generic.ts +0 -87
  1328. package/src/lifecycle/handlers/index.ts +0 -183
  1329. package/src/lifecycle/handlers/integrator.ts +0 -672
  1330. package/src/lifecycle/handlers/monitor.ts +0 -114
  1331. package/src/lifecycle/handlers/worker.ts +0 -506
  1332. package/src/mail/__tests__/conversation-lifecycle.test.ts +0 -409
  1333. package/src/mail/__tests__/eventstore-stores.test.ts +0 -1073
  1334. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +0 -575
  1335. package/src/mail/__tests__/mail-integration.test.ts +0 -759
  1336. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +0 -1068
  1337. package/src/mail/__tests__/mail-service.test.ts +0 -506
  1338. package/src/mail/__tests__/turn-recorder.test.ts +0 -328
  1339. package/src/mail/conversation-map.ts +0 -107
  1340. package/src/mail/index.ts +0 -25
  1341. package/src/mail/mail-service.ts +0 -257
  1342. package/src/mail/stores/eventstore-conversation-store.ts +0 -146
  1343. package/src/mail/stores/eventstore-participant-store.ts +0 -172
  1344. package/src/mail/stores/eventstore-thread-store.ts +0 -129
  1345. package/src/mail/stores/eventstore-turn-store.ts +0 -173
  1346. package/src/mail/stores/index.ts +0 -12
  1347. package/src/mail/stores/types.ts +0 -160
  1348. package/src/mail/turn-recorder.ts +0 -124
  1349. package/src/map/README.md +0 -79
  1350. package/src/map/__tests__/adapter-types.test.ts +0 -326
  1351. package/src/map/__tests__/interface-types.test.ts +0 -342
  1352. package/src/map/__tests__/types.test.ts +0 -411
  1353. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +0 -820
  1354. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +0 -355
  1355. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +0 -1386
  1356. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +0 -440
  1357. package/src/map/adapter/__tests__/connection-manager.test.ts +0 -344
  1358. package/src/map/adapter/__tests__/event-broadcast.test.ts +0 -420
  1359. package/src/map/adapter/__tests__/event-log.test.ts +0 -527
  1360. package/src/map/adapter/__tests__/event-translator.test.ts +0 -550
  1361. package/src/map/adapter/__tests__/extensions.test.ts +0 -1387
  1362. package/src/map/adapter/__tests__/map-adapter.test.ts +0 -926
  1363. package/src/map/adapter/__tests__/mcp-bridge.test.ts +0 -1187
  1364. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +0 -711
  1365. package/src/map/adapter/__tests__/rpc-handler.test.ts +0 -644
  1366. package/src/map/adapter/__tests__/stream-extensions.test.ts +0 -494
  1367. package/src/map/adapter/__tests__/subscription-manager.test.ts +0 -536
  1368. package/src/map/adapter/__tests__/websocket-integration.test.ts +0 -487
  1369. package/src/map/adapter/__tests__/workspace-files.test.ts +0 -673
  1370. package/src/map/adapter/acp-over-map.ts +0 -1483
  1371. package/src/map/adapter/connection-manager.ts +0 -400
  1372. package/src/map/adapter/event-log.ts +0 -208
  1373. package/src/map/adapter/event-translator.ts +0 -415
  1374. package/src/map/adapter/extensions/agent-detection.ts +0 -201
  1375. package/src/map/adapter/extensions/agent-lifecycle.ts +0 -267
  1376. package/src/map/adapter/extensions/index.ts +0 -316
  1377. package/src/map/adapter/extensions/mcp-bridge.ts +0 -995
  1378. package/src/map/adapter/extensions/resume.ts +0 -114
  1379. package/src/map/adapter/extensions/streams.ts +0 -839
  1380. package/src/map/adapter/extensions/task.ts +0 -326
  1381. package/src/map/adapter/extensions/update-metadata.ts +0 -126
  1382. package/src/map/adapter/extensions/wake.ts +0 -239
  1383. package/src/map/adapter/extensions/workspace-files.ts +0 -449
  1384. package/src/map/adapter/extensions/workspace.ts +0 -176
  1385. package/src/map/adapter/index.ts +0 -163
  1386. package/src/map/adapter/interface.ts +0 -581
  1387. package/src/map/adapter/mail-handler-adapter.ts +0 -429
  1388. package/src/map/adapter/map-adapter.ts +0 -1749
  1389. package/src/map/adapter/rpc-handler.ts +0 -604
  1390. package/src/map/adapter/subscription-manager.ts +0 -474
  1391. package/src/map/adapter/types.ts +0 -266
  1392. package/src/map/adapter/websocket-integration.ts +0 -229
  1393. package/src/map/federation/__tests__/envelope.test.ts +0 -362
  1394. package/src/map/federation/__tests__/federation-handler.test.ts +0 -461
  1395. package/src/map/federation/envelope.ts +0 -243
  1396. package/src/map/federation/federation-handler.ts +0 -442
  1397. package/src/map/federation/index.ts +0 -65
  1398. package/src/map/federation/types.ts +0 -344
  1399. package/src/mcp/__tests__/map-client.test.ts +0 -386
  1400. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +0 -368
  1401. package/src/mcp/__tests__/mcp-server.test.ts +0 -1002
  1402. package/src/mcp/map-client.ts +0 -177
  1403. package/src/mcp/mcp-server.ts +0 -1406
  1404. package/src/mcp/tools/__tests__/done.test.ts +0 -484
  1405. package/src/mcp/tools/claim_task.ts +0 -86
  1406. package/src/mcp/tools/done.ts +0 -357
  1407. package/src/mcp/tools/inject_context.ts +0 -173
  1408. package/src/mcp/tools/list_claimable_tasks.ts +0 -93
  1409. package/src/mcp/tools/unclaim_task.ts +0 -71
  1410. package/src/mcp/tools/wait_for_activity.ts +0 -185
  1411. package/src/monitor/__tests__/health-check-service.test.ts +0 -425
  1412. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +0 -393
  1413. package/src/monitor/__tests__/stall-detector.test.ts +0 -395
  1414. package/src/monitor/health-check-service.ts +0 -359
  1415. package/src/monitor/index.ts +0 -28
  1416. package/src/monitor/stall-detector.ts +0 -238
  1417. package/src/peer/__tests__/capability-manager.test.ts +0 -454
  1418. package/src/peer/__tests__/encapsulation-manager.test.ts +0 -787
  1419. package/src/peer/__tests__/federation-manager.test.ts +0 -828
  1420. package/src/peer/__tests__/hierarchy-errors.test.ts +0 -307
  1421. package/src/peer/__tests__/peer-manager.test.ts +0 -535
  1422. package/src/peer/__tests__/task-delegation.test.ts +0 -741
  1423. package/src/peer/capability-manager.ts +0 -289
  1424. package/src/peer/encapsulation-manager.ts +0 -831
  1425. package/src/peer/federation-manager.ts +0 -897
  1426. package/src/peer/hierarchy-errors.ts +0 -382
  1427. package/src/peer/hierarchy-protocol.ts +0 -328
  1428. package/src/peer/index.ts +0 -15
  1429. package/src/peer/peer-manager.ts +0 -540
  1430. package/src/peer/task-delegation.ts +0 -594
  1431. package/src/peer/transports/__tests__/local-transport.test.ts +0 -355
  1432. package/src/peer/transports/__tests__/websocket-transport.test.ts +0 -270
  1433. package/src/peer/transports/index.ts +0 -18
  1434. package/src/peer/transports/local-transport.ts +0 -348
  1435. package/src/peer/transports/websocket-transport.ts +0 -452
  1436. package/src/peer/types.ts +0 -331
  1437. package/src/roles/__tests__/capability-enforcement.test.ts +0 -989
  1438. package/src/roles/__tests__/message-routing.e2e.test.ts +0 -464
  1439. package/src/roles/__tests__/role-resolution.test.ts +0 -576
  1440. package/src/router/README.md +0 -120
  1441. package/src/router/__tests__/address-resolver.test.ts +0 -340
  1442. package/src/router/__tests__/broadcast.test.ts +0 -185
  1443. package/src/router/__tests__/message-router.test.ts +0 -1070
  1444. package/src/router/__tests__/role-channel.test.ts +0 -213
  1445. package/src/router/__tests__/send-to-address.test.ts +0 -731
  1446. package/src/router/__tests__/wake.test.ts +0 -459
  1447. package/src/router/address-resolver.ts +0 -303
  1448. package/src/router/broadcast.ts +0 -117
  1449. package/src/router/channels.ts +0 -283
  1450. package/src/router/index.ts +0 -148
  1451. package/src/router/message-router.ts +0 -1392
  1452. package/src/router/message-types.ts +0 -294
  1453. package/src/router/role-resolver.ts +0 -164
  1454. package/src/router/signals.ts +0 -335
  1455. package/src/router/types.ts +0 -306
  1456. package/src/router/wake.ts +0 -270
  1457. package/src/server/__tests__/combined-server.test.ts +0 -360
  1458. package/src/server/combined-server.ts +0 -544
  1459. package/src/steering/__tests__/inject.test.ts +0 -405
  1460. package/src/steering/__tests__/injection.e2e.test.ts +0 -932
  1461. package/src/steering/__tests__/steering-integration.test.ts +0 -747
  1462. package/src/steering/index.ts +0 -25
  1463. package/src/steering/inject.ts +0 -262
  1464. package/src/steering/types.ts +0 -143
  1465. package/src/store/README.md +0 -134
  1466. package/src/store/__tests__/event-store-oob.test.ts +0 -109
  1467. package/src/store/__tests__/event-store.test.ts +0 -1446
  1468. package/src/store/__tests__/instance.test.ts +0 -556
  1469. package/src/store/__tests__/migrations.test.ts +0 -109
  1470. package/src/store/backends/__tests__/memory-backend.test.ts +0 -383
  1471. package/src/store/backends/__tests__/sqlite-backend.test.ts +0 -427
  1472. package/src/store/backends/index.ts +0 -42
  1473. package/src/store/backends/json-backend.ts +0 -295
  1474. package/src/store/backends/memory-backend.ts +0 -256
  1475. package/src/store/backends/sqlite-backend.ts +0 -337
  1476. package/src/store/backends/tinybase-backend.ts +0 -276
  1477. package/src/store/backends/types.ts +0 -252
  1478. package/src/store/event-store.ts +0 -2214
  1479. package/src/store/instance.ts +0 -681
  1480. package/src/store/migrations.ts +0 -96
  1481. package/src/store/types/config.ts +0 -19
  1482. package/src/store/types/conversations.ts +0 -129
  1483. package/src/store/types/sessions.ts +0 -53
  1484. package/src/task/__tests__/retry-policy.test.ts +0 -409
  1485. package/src/task/__tests__/task-integration.test.ts +0 -457
  1486. package/src/task/__tests__/task-manager.test.ts +0 -815
  1487. package/src/task/backend/__tests__/create-task-backend.test.ts +0 -225
  1488. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +0 -524
  1489. package/src/task/backend/__tests__/memory-pull-mode.test.ts +0 -153
  1490. package/src/task/backend/__tests__/memory.test.ts +0 -1274
  1491. package/src/task/backend/__tests__/unified-tool-provider.test.ts +0 -579
  1492. package/src/task/backend/index.ts +0 -310
  1493. package/src/task/backend/memory.ts +0 -828
  1494. package/src/task/backend/opentasks/__tests__/backend.test.ts +0 -968
  1495. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +0 -406
  1496. package/src/task/backend/opentasks/__tests__/mapping.test.ts +0 -84
  1497. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +0 -1338
  1498. package/src/task/backend/opentasks/backend.ts +0 -1323
  1499. package/src/task/backend/opentasks/client.ts +0 -652
  1500. package/src/task/backend/opentasks/daemon-manager.ts +0 -256
  1501. package/src/task/backend/opentasks/index.ts +0 -69
  1502. package/src/task/backend/opentasks/mapping.ts +0 -94
  1503. package/src/task/backend/types.ts +0 -458
  1504. package/src/task/backend/unified-tool-provider.ts +0 -779
  1505. package/src/task/index.ts +0 -7
  1506. package/src/task/retry-policy.ts +0 -204
  1507. package/src/task/task-manager.ts +0 -515
  1508. package/src/task/types.ts +0 -136
  1509. package/src/teams/CLAUDE.md +0 -180
  1510. package/src/teams/__tests__/cross-subsystem.integration.test.ts +0 -983
  1511. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +0 -553
  1512. package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +0 -1263
  1513. package/src/teams/__tests__/team-manager.test.ts +0 -814
  1514. package/src/teams/__tests__/team-system.test.ts +0 -2563
  1515. package/src/teams/team-manager.ts +0 -387
  1516. package/src/teams/team-runtime.ts +0 -1198
  1517. package/src/trigger/CLAUDE.md +0 -308
  1518. package/src/trigger/README.md +0 -429
  1519. package/src/trigger/__tests__/macro-agent-regression.test.ts +0 -946
  1520. package/src/trigger/__tests__/routing-strategies.test.ts +0 -329
  1521. package/src/trigger/__tests__/trigger-router.test.ts +0 -433
  1522. package/src/trigger/__tests__/trigger-system-integration.test.ts +0 -581
  1523. package/src/trigger/router/index.ts +0 -36
  1524. package/src/trigger/router/strategies/ai-router-strategy.ts +0 -481
  1525. package/src/trigger/router/strategies/direct-strategy.ts +0 -162
  1526. package/src/trigger/router/strategies/index.ts +0 -26
  1527. package/src/trigger/router/strategies/role-strategy.ts +0 -274
  1528. package/src/trigger/router/trigger-router.ts +0 -463
  1529. package/src/trigger/router/types.ts +0 -273
  1530. package/src/trigger/trigger-system.ts +0 -206
  1531. package/src/workspace/__tests__/multi-coordinator.test.ts +0 -1005
  1532. package/src/workspace/__tests__/workspace-manager.test.ts +0 -391
  1533. package/src/workspace/__tests__/workspace.e2e.test.ts +0 -1155
  1534. package/src/workspace/merge-queue/__tests__/hierarchical-consolidation.e2e.test.ts +0 -414
  1535. package/test_fixtures/harness/__tests__/behavior-executor-and-stepper.test.ts +0 -714
  1536. package/test_fixtures/harness/__tests__/fixtures.test.ts +0 -347
  1537. package/test_fixtures/harness/__tests__/merge-queue-and-worktrees.test.ts +0 -452
  1538. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -422
  1539. package/test_fixtures/harness/__tests__/test-harness-and-assertions.test.ts +0 -568
  1540. /package/{references/acp-factory-ref/python/tests/__init__.py → .opentasks/graph.jsonl} +0 -0
package/src/api/server.ts CHANGED
@@ -1,2099 +1,380 @@
1
1
  /**
2
- * API Server
2
+ * REST API server for macro-agent.
3
3
  *
4
- * Express server with REST API and WebSocket support for the multi-agent system.
4
+ * Provides HTTP endpoints for managing agents, tasks, teams, and metrics.
5
5
  *
6
- * Can be used in two modes:
7
- * 1. Standalone: createAPIServer() creates its own HTTP server
8
- * 2. Shared: createAPIApp() + setupAPIWebSocket() for external HTTP server
6
+ * @module api/server
9
7
  */
10
8
 
11
- import express, { Express, Request, Response, NextFunction } from "express";
12
- import { WebSocketServer, WebSocket } from "ws";
13
- import http from "http";
14
- import type { EventStore } from "../store/event-store.js";
15
- import type { AgentManager } from "../agent/agent-manager.js";
16
- import type { TaskManager } from "../task/task-manager.js";
17
- import type { MessageRouter } from "../router/message-router.js";
18
- import type { Agent, Task, Event } from "../store/types/index.js";
19
- import type {
20
- SystemStatus,
21
- InitRequest,
22
- InitResponse,
23
- ConversationMessageRequest,
24
- ConversationHistoryResponse,
25
- AgentSummary,
26
- AgentDetail,
27
- AgentListResponse,
28
- HierarchyResponse,
29
- HierarchyNode,
30
- TaskSummary,
31
- TaskDetail,
32
- TaskListResponse,
33
- EventSummary,
34
- EventListResponse,
35
- AgentQueryParams,
36
- TaskQueryParams,
37
- EventQueryParams,
38
- APIError,
39
- WSMessage,
40
- WSSubscribeMessage,
41
- WSAgentUpdate,
42
- WSTaskUpdate,
43
- InjectContextRequest,
44
- InjectContextResponse,
45
- MailConversationSummary,
46
- MailConversationDetail,
47
- MailConversationListResponse,
48
- MailTurnSummary,
49
- MailTurnListResponse,
50
- MailConversationQueryParams,
51
- WSTurnAdded,
52
- WSConversationUpdate,
53
- } from "./types.js";
54
- import {
55
- injectContext,
56
- type InjectionDeps,
57
- } from "../steering/index.js";
58
- import type { AgentId } from "../store/types/index.js";
59
- import { secureCompare } from "../auth/token.js";
60
- import type { TeamManager } from "../teams/team-manager.js";
9
+ import express, { type Request, type Response } from "express";
10
+ import type { Server } from "node:http";
11
+ import type { MacroAgentSystemV2 } from "../boot-v2.js";
12
+ import type { ApiServer, ApiServerConfig } from "./types.js";
61
13
 
62
- // ─────────────────────────────────────────────────────────────────
63
- // Server Configuration
64
- // ─────────────────────────────────────────────────────────────────
14
+ // =============================================================================
15
+ // Helpers
16
+ // =============================================================================
65
17
 
66
- export interface APIServerConfig {
67
- /** Port to listen on */
68
- port?: number;
69
-
70
- /** Host to bind to */
71
- host?: string;
72
-
73
- /** Enable CORS */
74
- cors?: boolean;
75
-
76
- /** Grace period in milliseconds for in-flight work during shutdown (default: 5000) */
77
- shutdownGracePeriodMs?: number;
78
-
79
- /** Server token for Bearer auth on API routes. When set, all routes except /health require auth. */
80
- serverToken?: string;
81
- }
82
-
83
- export interface APIServices {
84
- eventStore: EventStore;
85
- agentManager: AgentManager;
86
- taskManager: TaskManager;
87
- messageRouter: MessageRouter;
88
- /** Optional mail service for conversation tracking */
89
- mailService?: import("../mail/mail-service.js").MailService;
90
- /** Optional conversation map for agent-to-conversation tracking */
91
- conversationMap?: import("../mail/conversation-map.js").ConversationMap;
92
- /** Optional team manager for dynamic team management */
93
- teamManager?: TeamManager;
94
- }
95
-
96
- // ─────────────────────────────────────────────────────────────────
97
- // API Server Instance
98
- // ─────────────────────────────────────────────────────────────────
99
-
100
- export interface StopOptions {
101
- /** Force immediate shutdown, skipping grace period */
102
- force?: boolean;
103
- }
104
-
105
- export interface APIServer {
106
- /** Express app for testing */
107
- app: Express;
108
-
109
- /** HTTP server */
110
- server: http.Server;
111
-
112
- /** WebSocket server */
113
- wss: WebSocketServer;
114
-
115
- /** Start the server */
116
- start(): Promise<void>;
117
-
118
- /**
119
- * Stop the server gracefully.
120
- * 1. Stop accepting new connections
121
- * 2. Wait grace period for in-flight prompts
122
- * 3. Close WebSocket connections with 1001 "going away"
123
- * 4. Terminate running agents
124
- * 5. Persist and close event store
125
- */
126
- stop(options?: StopOptions): Promise<void>;
127
-
128
- /** Get current status */
129
- getStatus(): SystemStatus;
130
-
131
- /** Register signal handlers for graceful shutdown */
132
- registerSignalHandlers(): void;
133
- }
134
-
135
- // ─────────────────────────────────────────────────────────────────
136
- // Server State
137
- // ─────────────────────────────────────────────────────────────────
138
-
139
- interface ServerState {
140
- initialized: boolean;
141
- headManagerId?: string;
142
- startedAt?: number;
143
- conversationHistory: Array<{
144
- role: "user" | "assistant";
145
- content: string;
146
- agent_id?: string;
147
- timestamp: number;
148
- }>;
149
- /** Tracks in-flight prompt promises for graceful shutdown */
150
- inFlightPrompts: Map<string, Promise<void>>;
151
- /** Whether shutdown is in progress */
152
- isShuttingDown: boolean;
153
- }
154
-
155
- // ─────────────────────────────────────────────────────────────────
156
- // WebSocket Client Tracking
157
- // ─────────────────────────────────────────────────────────────────
158
-
159
- interface WSClient {
160
- ws: WebSocket;
161
- subscriptions: Set<string>;
162
- }
163
-
164
- /**
165
- * API WebSocket handler interface (shared server mode)
166
- */
167
- export interface APIWebSocketHandler {
168
- /** Get the number of active connections */
169
- getConnectionCount(): number;
170
-
171
- /** Close all connections gracefully */
172
- closeAll(): void;
173
- }
174
-
175
- /**
176
- * Shared state for API app and WebSocket handler
177
- */
178
- export interface APISharedState {
179
- initialized: boolean;
180
- headManagerId?: string;
181
- startedAt?: number;
182
- conversationHistory: Array<{
183
- role: "user" | "assistant";
184
- content: string;
185
- agent_id?: string;
186
- timestamp: number;
187
- }>;
188
- inFlightPrompts: Map<string, Promise<void>>;
189
- isShuttingDown: boolean;
190
- wsClients: Set<WSClient>;
191
- broadcast: (channel: string, message: WSMessage) => void;
18
+ /** Extract a single string from Express v5 param/query (string | string[]). */
19
+ function str(value: unknown): string | undefined {
20
+ if (typeof value === "string") return value;
21
+ if (Array.isArray(value) && typeof value[0] === "string") return value[0];
22
+ return undefined;
192
23
  }
193
24
 
194
- /**
195
- * Create shared state for API app and WebSocket handler
196
- */
197
- export function createAPISharedState(): APISharedState {
198
- const wsClients = new Set<WSClient>();
199
-
200
- const broadcast = (channel: string, message: WSMessage): void => {
201
- const data = JSON.stringify(message);
202
- for (const client of wsClients) {
203
- if (client.subscriptions.has(channel) && client.ws.readyState === WebSocket.OPEN) {
204
- client.ws.send(data);
205
- }
206
- }
207
- };
25
+ // =============================================================================
26
+ // Placeholder metrics (will be replaced when metrics module lands)
27
+ // =============================================================================
208
28
 
209
- return {
210
- initialized: false,
211
- conversationHistory: [],
212
- inFlightPrompts: new Map(),
213
- isShuttingDown: false,
214
- wsClients,
215
- broadcast,
29
+ interface MetricsSnapshot {
30
+ agents: {
31
+ total: number;
32
+ running: number;
33
+ stopped: number;
34
+ failed: number;
216
35
  };
217
- }
218
-
219
- // ─────────────────────────────────────────────────────────────────
220
- // Conversation API Routes (shared between standalone and app mode)
221
- // ─────────────────────────────────────────────────────────────────
222
-
223
- import type { Conversation, ConversationTurn } from "../store/types/conversations.js";
224
-
225
- function conversationToSummary(conv: Conversation): MailConversationSummary {
226
- return {
227
- id: conv.id,
228
- type: conv.type,
229
- status: conv.status,
230
- subject: conv.subject ?? "",
231
- created_by: conv.createdBy,
232
- created_at: conv.createdAt,
233
- updated_at: conv.updatedAt,
234
- participant_count: conv.participantCount,
235
- parent_conversation_id: conv.parentConversationId || undefined,
36
+ tasks: {
37
+ total: number;
38
+ open: number;
39
+ in_progress: number;
40
+ closed: number;
236
41
  };
42
+ uptime: number;
43
+ collectedAt: string;
237
44
  }
238
45
 
239
- function conversationToDetail(conv: Conversation): MailConversationDetail {
240
- return {
241
- ...conversationToSummary(conv),
242
- closed_at: conv.closedAt || undefined,
243
- closed_by: conv.closedBy || undefined,
244
- close_reason: conv.closeReason || undefined,
245
- };
246
- }
46
+ async function collectMetricsPlaceholder(
47
+ system: MacroAgentSystemV2,
48
+ startTime: number
49
+ ): Promise<MetricsSnapshot> {
50
+ const agents = system.agentStore.listAgents();
51
+ const running = agents.filter((a) => a.state === "running").length;
52
+ const stopped = agents.filter((a) => a.state === "stopped").length;
53
+ const failed = agents.filter((a) => a.state === "failed").length;
54
+
55
+ let taskMetrics = { total: 0, open: 0, in_progress: 0, closed: 0 };
56
+ try {
57
+ const tasks = await system.tasksAdapter.listTasks();
58
+ taskMetrics = {
59
+ total: tasks.length,
60
+ open: tasks.filter((t) => t.status === "open").length,
61
+ in_progress: tasks.filter((t) => t.status === "in_progress").length,
62
+ closed: tasks.filter((t) => t.status === "closed").length,
63
+ };
64
+ } catch {
65
+ // opentasks may be down
66
+ }
247
67
 
248
- function turnToSummary(turn: ConversationTurn): MailTurnSummary {
249
68
  return {
250
- id: turn.id,
251
- conversation_id: turn.conversationId,
252
- participant: turn.participant,
253
- content_type: turn.contentType,
254
- content: turn.content,
255
- timestamp: turn.timestamp,
256
- source_type: turn.sourceType || undefined,
257
- source_message_id: turn.sourceMessageId || undefined,
69
+ agents: {
70
+ total: agents.length,
71
+ running,
72
+ stopped,
73
+ failed,
74
+ },
75
+ tasks: taskMetrics,
76
+ uptime: (Date.now() - startTime) / 1000,
77
+ collectedAt: new Date().toISOString(),
258
78
  };
259
79
  }
260
80
 
261
- /**
262
- * Register conversation API routes on an Express app.
263
- * Used by both standalone and shared server modes.
264
- */
265
- function registerConversationRoutes(
266
- app: Express,
267
- services: Pick<APIServices, "mailService">,
268
- sendError: (res: Response, status: number, code: string, message: string) => void
269
- ): void {
270
- if (!services.mailService) return;
271
- const { mailService } = services;
81
+ // =============================================================================
82
+ // Factory
83
+ // =============================================================================
272
84
 
273
- // GET /api/conversations - List conversations
274
- app.get("/api/conversations", (req: Request, res: Response) => {
275
- const params = req.query as Record<string, string | undefined>;
276
- let conversations = mailService.listConversations({
277
- type: params.type as any,
278
- status: params.status as any,
279
- });
85
+ export function createApiServer(
86
+ system: MacroAgentSystemV2,
87
+ config?: ApiServerConfig
88
+ ): ApiServer {
89
+ const port = config?.port ?? 3000;
90
+ const host = config?.host ?? "127.0.0.1";
91
+ const startTime = Date.now();
280
92
 
281
- const total = conversations.length;
282
- const offset = parseInt(params.offset as string) || 0;
283
- const limit = parseInt(params.limit as string) || 50;
284
- conversations = conversations.slice(offset, offset + limit);
93
+ const app = express();
94
+ app.use(express.json());
285
95
 
286
- const response: MailConversationListResponse = {
287
- conversations: conversations.map(conversationToSummary),
288
- total,
289
- };
290
- res.json(response);
291
- });
96
+ // ── Health ──────────────────────────────────────────────────────
292
97
 
293
- // GET /api/conversations/:id - Get conversation detail
294
- app.get("/api/conversations/:id", (req: Request, res: Response) => {
295
- const conv = mailService.getConversation(req.params.id);
296
- if (!conv) {
297
- return sendError(res, 404, "CONVERSATION_NOT_FOUND", `Conversation not found: ${req.params.id}`);
298
- }
299
- res.json(conversationToDetail(conv));
98
+ app.get("/api/health", (_req: Request, res: Response) => {
99
+ res.json({
100
+ ok: true,
101
+ uptime: (Date.now() - startTime) / 1000,
102
+ version: "0.1.1",
103
+ });
300
104
  });
301
105
 
302
- // GET /api/conversations/:id/turns - List turns for a conversation
303
- app.get("/api/conversations/:id/turns", (req: Request, res: Response) => {
304
- const conv = mailService.getConversation(req.params.id);
305
- if (!conv) {
306
- return sendError(res, 404, "CONVERSATION_NOT_FOUND", `Conversation not found: ${req.params.id}`);
307
- }
308
-
309
- const turns = mailService.listTurns({ conversationId: req.params.id });
310
- const limit = parseInt(req.query.limit as string) || 50;
311
- const offset = parseInt(req.query.offset as string) || 0;
312
- const paged = turns.slice(offset, offset + limit);
106
+ // ── Agents ─────────────────────────────────────────────────────
313
107
 
314
- const response: MailTurnListResponse = {
315
- turns: paged.map(turnToSummary),
316
- total: turns.length,
317
- };
318
- res.json(response);
319
- });
108
+ app.get("/api/agents", (req: Request, res: Response) => {
109
+ try {
110
+ const state = str(req.query.state);
111
+ const role = str(req.query.role);
112
+ const team = str(req.query.team);
113
+ const limit = parseInt(str(req.query.limit) ?? "50", 10) || 50;
114
+ const offset = parseInt(str(req.query.offset) ?? "0", 10) || 0;
320
115
 
321
- // POST /api/conversations/:id/close - Close a conversation
322
- app.post("/api/conversations/:id/close", (req: Request, res: Response) => {
323
- const conv = mailService.getConversation(req.params.id);
324
- if (!conv) {
325
- return sendError(res, 404, "CONVERSATION_NOT_FOUND", `Conversation not found: ${req.params.id}`);
326
- }
327
- if (conv.status !== "active") {
328
- return sendError(res, 400, "ALREADY_CLOSED", `Conversation already ${conv.status}`);
329
- }
116
+ const filter: Record<string, unknown> = {};
117
+ if (state) filter.state = state;
118
+ if (role) filter.role = role;
119
+ if (team) filter.team = team;
330
120
 
331
- const body = req.body as { reason?: string };
332
- mailService.closeConversation({
333
- conversationId: req.params.id,
334
- closedBy: "api",
335
- reason: body.reason ?? "completed",
336
- });
121
+ const agents = system.agentManager.list(
122
+ Object.keys(filter).length > 0 ? (filter as any) : undefined
123
+ );
337
124
 
338
- res.json({ success: true });
339
- });
125
+ const total = agents.length;
126
+ const paged = agents.slice(offset, offset + limit);
340
127
 
341
- // GET /api/conversations/:id/participants - List participants
342
- app.get("/api/conversations/:id/participants", (req: Request, res: Response) => {
343
- const conv = mailService.getConversation(req.params.id);
344
- if (!conv) {
345
- return sendError(res, 404, "CONVERSATION_NOT_FOUND", `Conversation not found: ${req.params.id}`);
128
+ res.json({ agents: paged, total });
129
+ } catch (err: any) {
130
+ res.status(500).json({ error: err.message ?? "Internal server error" });
346
131
  }
347
-
348
- const participants = mailService.listParticipants(req.params.id);
349
- res.json({ participants, total: participants.length });
350
132
  });
351
- }
352
-
353
- // ─────────────────────────────────────────────────────────────────
354
- // Shared Team Routes Helper
355
- // ─────────────────────────────────────────────────────────────────
356
-
357
- /**
358
- * Register team management REST endpoints on an Express app.
359
- * Shared between standalone and shared API modes.
360
- *
361
- * Endpoints:
362
- * POST /api/teams — Start a team instance
363
- * GET /api/teams — List running team instances
364
- * GET /api/teams/:id — Get team instance details
365
- * DELETE /api/teams/:id — Teardown a team instance
366
- */
367
- function registerTeamRoutes(
368
- app: Express,
369
- teamManager: TeamManager | undefined,
370
- defaultCwd: string,
371
- sendError: (res: Response, status: number, code: string, message: string) => void,
372
- broadcast?: (channel: string, message: WSMessage) => void,
373
- ): void {
374
- if (!teamManager) return;
375
-
376
- // POST /api/teams — Start a team instance
377
- app.post("/api/teams", async (req: Request, res: Response) => {
378
- const { template, overrides } = req.body ?? {};
379
- if (!template || typeof template !== "string") {
380
- return sendError(res, 400, "INVALID_REQUEST", "Missing required field: template");
381
- }
382
133
 
134
+ app.get("/api/agents/:id", (req: Request, res: Response) => {
383
135
  try {
384
- const instance = await teamManager.startTeam(template, defaultCwd, overrides);
385
- const result = {
386
- id: instance.id,
387
- templateName: instance.templateName,
388
- rootAgentId: instance.result.rootId,
389
- companionAgentIds: instance.result.companionIds,
390
- taskMode: instance.runtime.getTaskMode(),
391
- strategy: instance.runtime.getStrategyName(),
392
- };
393
-
394
- if (broadcast) {
395
- broadcast("teams", { type: "team_started", data: result });
136
+ const id = str(req.params.id);
137
+ const agent = system.agentManager.get(id!);
138
+ if (!agent) {
139
+ res.status(404).json({ error: "Agent not found" });
140
+ return;
396
141
  }
397
-
398
- res.status(201).json(result);
399
- } catch (err) {
400
- const message = err instanceof Error ? err.message : String(err);
401
- return sendError(res, 500, "TEAM_START_FAILED", message);
402
- }
403
- });
404
-
405
- // GET /api/teams — List running team instances
406
- app.get("/api/teams", (_req: Request, res: Response) => {
407
- const instances = teamManager.getInstances();
408
- res.json(instances.map((inst) => ({
409
- id: inst.id,
410
- templateName: inst.templateName,
411
- rootAgentId: inst.result.rootId,
412
- companionAgentIds: inst.result.companionIds,
413
- taskMode: inst.runtime.getTaskMode(),
414
- strategy: inst.runtime.getStrategyName(),
415
- })));
416
- });
417
-
418
- // GET /api/teams/:id — Get team instance details
419
- app.get("/api/teams/:id", (req: Request, res: Response) => {
420
- const instance = teamManager.getInstance(req.params.id);
421
- if (!instance) {
422
- return sendError(res, 404, "TEAM_NOT_FOUND", `No team instance '${req.params.id}'`);
142
+ res.json(agent);
143
+ } catch (err: any) {
144
+ res.status(500).json({ error: err.message ?? "Internal server error" });
423
145
  }
424
-
425
- const manifest = instance.runtime.getManifest();
426
- res.json({
427
- id: instance.id,
428
- templateName: instance.templateName,
429
- rootAgentId: instance.result.rootId,
430
- companionAgentIds: instance.result.companionIds,
431
- taskMode: instance.runtime.getTaskMode(),
432
- strategy: instance.runtime.getStrategyName(),
433
- roles: manifest.roles,
434
- communication: manifest.communication,
435
- });
436
146
  });
437
147
 
438
- // DELETE /api/teams/:id Teardown a team instance
439
- app.delete("/api/teams/:id", async (req: Request, res: Response) => {
440
- const instance = teamManager.getInstance(req.params.id);
441
- if (!instance) {
442
- return sendError(res, 404, "TEAM_NOT_FOUND", `No team instance '${req.params.id}'`);
443
- }
444
-
148
+ app.get("/api/agents/:id/hierarchy", (req: Request, res: Response) => {
445
149
  try {
446
- await teamManager.stopTeam(req.params.id);
150
+ const id = str(req.params.id)!;
151
+ const depthStr = str(req.query.depth);
152
+ const options = depthStr ? { depth: parseInt(depthStr, 10) } : undefined;
447
153
 
448
- if (broadcast) {
449
- broadcast("teams", { type: "team_stopped", data: { id: req.params.id } });
154
+ const hierarchy = system.agentManager.getHierarchy(id, options);
155
+ if (!hierarchy) {
156
+ res.status(404).json({ error: "Agent not found" });
157
+ return;
450
158
  }
451
-
452
- res.json({ success: true });
453
- } catch (err) {
454
- const message = err instanceof Error ? err.message : String(err);
455
- return sendError(res, 500, "TEAM_STOP_FAILED", message);
159
+ res.json(hierarchy);
160
+ } catch (err: any) {
161
+ res.status(500).json({ error: err.message ?? "Internal server error" });
456
162
  }
457
163
  });
458
- }
459
-
460
- // ─────────────────────────────────────────────────────────────────
461
- // Create API Server
462
- // ─────────────────────────────────────────────────────────────────
463
-
464
- export function createAPIServer(
465
- services: APIServices,
466
- config: APIServerConfig = {}
467
- ): APIServer {
468
- const { port = 3000, host = "localhost", cors = true, shutdownGracePeriodMs = 5000, serverToken } = config;
469
- const { eventStore, agentManager, taskManager } = services;
470
-
471
- // Server state
472
- const state: ServerState = {
473
- initialized: false,
474
- conversationHistory: [],
475
- inFlightPrompts: new Map(),
476
- isShuttingDown: false,
477
- };
478
-
479
- // WebSocket clients
480
- const wsClients = new Set<WSClient>();
481
-
482
- // Create Express app
483
- const app = express();
484
164
 
485
- // Middleware
486
- app.use(express.json());
487
-
488
- if (cors) {
489
- app.use((_req: Request, res: Response, next: NextFunction) => {
490
- res.header("Access-Control-Allow-Origin", "*");
491
- res.header("Access-Control-Allow-Headers", "Content-Type, Authorization");
492
- res.header("Access-Control-Allow-Methods", "GET, POST, DELETE");
493
- next();
494
- });
495
- }
496
-
497
- // Bearer token auth middleware (skip /health)
498
- if (serverToken) {
499
- app.use((req: Request, res: Response, next: NextFunction) => {
500
- if (req.path === "/health") return next();
501
- const authHeader = req.headers.authorization;
502
- const token = authHeader?.startsWith("Bearer ") ? authHeader.slice(7) : undefined;
503
- if (!token || !secureCompare(token, serverToken)) {
504
- const error: APIError = { error: "Unauthorized", code: "AUTH_REQUIRED" };
505
- res.status(401).json(error);
165
+ app.get("/api/agents/:id/inbox", async (req: Request, res: Response) => {
166
+ try {
167
+ const id = str(req.params.id)!;
168
+ const agent = system.agentManager.get(id);
169
+ if (!agent) {
170
+ res.status(404).json({ error: "Agent not found" });
506
171
  return;
507
172
  }
508
- next();
509
- });
510
- }
511
-
512
- // ─────────────────────────────────────────────────────────────────
513
- // Helper Functions
514
- // ─────────────────────────────────────────────────────────────────
515
-
516
- function agentToSummary(agent: Agent): AgentSummary {
517
- return {
518
- id: agent.id,
519
- session_id: agent.session_id,
520
- task: agent.task ?? "No task",
521
- state: agent.state,
522
- parent: agent.parent,
523
- children_count: agentManager.getChildren(agent.id).length,
524
- created_at: agent.created_at,
525
- };
526
- }
527
-
528
- function agentToDetail(agent: Agent): AgentDetail {
529
- return {
530
- ...agentToSummary(agent),
531
- lineage: agent.lineage,
532
- task_id: agent.task_id,
533
- config: agent.config as Record<string, unknown>,
534
- started_at: agent.started_at,
535
- stopped_at: agent.stopped_at,
536
- stop_reason: agent.stop_reason,
537
- };
538
- }
539
-
540
- function taskToSummary(task: Task): TaskSummary {
541
- return {
542
- id: task.id,
543
- description: task.description,
544
- status: task.status,
545
- assigned_agent: task.assigned_agent,
546
- created_at: task.created_at,
547
- };
548
- }
549
-
550
- function taskToDetail(task: Task): TaskDetail {
551
- return {
552
- ...taskToSummary(task),
553
- parent_task: task.parent_task,
554
- subtasks: task.subtasks ?? [],
555
- created_by: task.created_by,
556
- inputs: task.inputs,
557
- outputs: task.outputs,
558
- artifacts: task.artifacts,
559
- started_at: task.started_at,
560
- completed_at: task.completed_at,
561
- };
562
- }
563
-
564
- function eventToSummary(event: Event): EventSummary {
565
- let summary = "";
566
- switch (event.type) {
567
- case "spawn":
568
- summary = `Agent ${event.payload.agent_id} spawned`;
569
- break;
570
- case "stop":
571
- summary = `Agent terminated: ${event.payload.reason}`;
572
- break;
573
- case "status":
574
- summary = `${event.payload.status_type}: ${event.payload.summary}`;
575
- break;
576
- case "message":
577
- summary = `Message: ${String(event.payload.content).substring(0, 50)}...`;
578
- break;
579
- case "task":
580
- summary = `Task ${event.payload.action}: ${event.payload.task_id}`;
581
- break;
582
- default:
583
- summary = `${event.type} event`;
584
- }
585
-
586
- return {
587
- id: event.id,
588
- type: event.type,
589
- timestamp: event.timestamp,
590
- source_agent_id: event.source.agent_id,
591
- target_agent_id: event.target?.agent_id,
592
- summary,
593
- };
594
- }
595
173
 
596
- function buildHierarchyNode(agent: Agent): HierarchyNode {
597
- const children = agentManager.getChildren(agent.id);
598
- return {
599
- agent_id: agent.id,
600
- task: agent.task ?? "No task",
601
- state: agent.state,
602
- children: children.map(buildHierarchyNode),
603
- };
604
- }
174
+ const limit = parseInt(str(req.query.limit) ?? "20", 10) || 20;
175
+ const unreadOnly = str(req.query.unreadOnly) === "true";
605
176
 
606
- function sendError(res: Response, status: number, code: string, message: string): void {
607
- const error: APIError = { error: message, code };
608
- res.status(status).json(error);
609
- }
177
+ const messages = await system.inboxAdapter.checkInbox(id, {
178
+ limit,
179
+ unreadOnly,
180
+ });
610
181
 
611
- function broadcastToChannel(channel: string, message: WSMessage): void {
612
- const data = JSON.stringify(message);
613
- for (const client of wsClients) {
614
- if (client.subscriptions.has(channel) && client.ws.readyState === WebSocket.OPEN) {
615
- client.ws.send(data);
616
- }
182
+ res.json({ messages });
183
+ } catch (err: any) {
184
+ res.status(500).json({ error: err.message ?? "Internal server error" });
617
185
  }
618
- }
619
-
620
- // ─────────────────────────────────────────────────────────────────
621
- // API Routes
622
- // ─────────────────────────────────────────────────────────────────
186
+ });
623
187
 
624
- // POST /api/init - Initialize the system
625
- app.post("/api/init", async (req: Request, res: Response) => {
188
+ app.post("/api/agents", async (req: Request, res: Response) => {
626
189
  try {
627
- if (state.initialized) {
628
- return sendError(res, 400, "ALREADY_INITIALIZED", "System already initialized");
629
- }
190
+ const { task, role, parent, cwd } = req.body;
630
191
 
631
- const body = req.body as InitRequest;
632
- const cwd = body.cwd ?? process.cwd();
192
+ if (!task) {
193
+ res.status(400).json({ error: "Missing required field: task" });
194
+ return;
195
+ }
633
196
 
634
- const headManager = await agentManager.getOrCreateHeadManager({
197
+ const spawned = await system.agentManager.spawn({
198
+ task,
199
+ role,
200
+ parent,
635
201
  cwd,
636
- systemPrompt: body.system_prompt,
637
- permissionMode: body.permission_mode,
638
202
  });
639
203
 
640
- state.initialized = true;
641
- state.headManagerId = headManager.id;
642
- state.startedAt = Date.now();
643
-
644
- // Create session conversation for mail tracking
645
- if (services.mailService && services.conversationMap) {
646
- try {
647
- const { conversationId } = services.mailService.createConversation({
648
- type: "session",
649
- subject: "User session",
650
- createdBy: "user",
651
- });
652
- services.mailService.joinConversation({
653
- conversationId,
654
- participantId: headManager.id,
655
- role: "worker",
656
- });
657
- services.conversationMap.setSessionConversation(headManager.id, conversationId);
658
- } catch {
659
- // Never fail init due to mail errors
660
- }
661
- }
662
-
663
- const response: InitResponse = {
664
- success: true,
665
- head_manager_id: headManager.id,
666
- session_id: headManager.session_id,
667
- };
668
-
669
- res.json(response);
670
- } catch (error) {
671
- sendError(res, 500, "INIT_FAILED", `Failed to initialize: ${error}`);
204
+ res.status(201).json(spawned);
205
+ } catch (err: any) {
206
+ res.status(500).json({ error: err.message ?? "Internal server error" });
672
207
  }
673
208
  });
674
209
 
675
- // GET /api/status - Get system status
676
- app.get("/api/status", (_req: Request, res: Response) => {
677
- const status = getStatus();
678
- res.json(status);
679
- });
680
-
681
- // GET /api/team - Get active team info (DEPRECATED: use GET /api/teams)
682
- app.get("/api/team", (_req: Request, res: Response) => {
683
- res.set("Deprecation", "true");
684
- res.set("Link", '</api/teams>; rel="successor-version"');
210
+ app.delete("/api/agents/:id", async (req: Request, res: Response) => {
211
+ try {
212
+ const id = str(req.params.id)!;
213
+ const agent = system.agentManager.get(id);
214
+ if (!agent) {
215
+ res.status(404).json({ error: "Agent not found" });
216
+ return;
217
+ }
685
218
 
686
- // Check for team config in EventStore
687
- const statusEvents = eventStore.query({ type: "status", limit: 50 });
688
- const teamConfigEvent = statusEvents.find(
689
- (e) => e.payload?.team_config != null
690
- );
219
+ const reason = str(req.query.reason) ?? "cancelled";
220
+ await system.agentManager.terminate(id, reason as any);
691
221
 
692
- if (!teamConfigEvent?.payload?.team_config) {
693
- res.json({ active: false });
694
- return;
222
+ res.json({ ok: true });
223
+ } catch (err: any) {
224
+ res.status(500).json({ error: err.message ?? "Internal server error" });
695
225
  }
696
-
697
- const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
698
- res.json({
699
- active: true,
700
- name: tc.teamName,
701
- strategy: tc.strategy,
702
- taskMode: tc.taskMode,
703
- enforcement: tc.enforcement,
704
- });
705
226
  });
706
227
 
707
- // Register dynamic team management routes
708
- registerTeamRoutes(app, services.teamManager, process.cwd(), sendError, broadcastToChannel);
228
+ // ── Tasks ──────────────────────────────────────────────────────
709
229
 
710
- // ─────────────────────────────────────────────────────────────────
711
- // Metrics Endpoints (Phase 5)
712
- // ─────────────────────────────────────────────────────────────────
713
-
714
- // GET /api/metrics/throughput - Task throughput metrics
715
- app.get("/api/metrics/throughput", (req: Request, res: Response) => {
716
- const windowMs = req.query.window_ms
717
- ? Number(req.query.window_ms)
718
- : 5 * 60 * 1000;
719
- const after = Date.now() - windowMs;
230
+ app.get("/api/tasks", async (req: Request, res: Response) => {
231
+ try {
232
+ const status = str(req.query.status);
233
+ const assignee = str(req.query.assignee);
234
+ const limitStr = str(req.query.limit);
720
235
 
721
- const taskEvents = eventStore.query({ type: "task", after });
722
- let completed = 0, failed = 0, created = 0;
723
- for (const e of taskEvents) {
724
- const action = e.payload?.action as string | undefined;
725
- if (action === "created") created++;
726
- else if (action === "completed") completed++;
727
- else if (action === "failed") failed++;
728
- }
729
- const windowMin = windowMs / 60000;
236
+ const filter: Record<string, unknown> = {};
237
+ if (status) filter.status = status;
238
+ if (assignee) filter.assignee = assignee;
239
+ if (limitStr) filter.limit = parseInt(limitStr, 10);
730
240
 
731
- res.json({
732
- tasksCompleted: completed,
733
- tasksFailed: failed,
734
- tasksCreated: created,
735
- completedPerMinute: windowMin > 0 ? Math.round((completed / windowMin) * 100) / 100 : 0,
736
- windowMs,
737
- });
738
- });
241
+ const tasks = await system.tasksAdapter.listTasks(
242
+ Object.keys(filter).length > 0 ? (filter as any) : undefined
243
+ );
739
244
 
740
- // GET /api/metrics/utilization - Agent utilization metrics
741
- app.get("/api/metrics/utilization", (_req: Request, res: Response) => {
742
- const allAgents = eventStore.listAgents();
743
- const active = allAgents.filter(
744
- (a) => a.state === "running" || a.state === "spawning"
745
- );
746
- const byRole: Record<string, number> = {};
747
- const byState: Record<string, number> = {};
748
- for (const a of active) {
749
- const role = a.role ?? "unknown";
750
- byRole[role] = (byRole[role] ?? 0) + 1;
245
+ res.json({ tasks });
246
+ } catch (err: any) {
247
+ res.status(500).json({ error: err.message ?? "Internal server error" });
751
248
  }
752
- for (const a of allAgents) {
753
- byState[a.state] = (byState[a.state] ?? 0) + 1;
754
- }
755
-
756
- res.json({
757
- activeAgents: active.length,
758
- totalAgents: allAgents.length,
759
- agentsByRole: byRole,
760
- agentsByState: byState,
761
- });
762
249
  });
763
250
 
764
- // GET /api/metrics/errors - Error metrics
765
- app.get("/api/metrics/errors", (req: Request, res: Response) => {
766
- const windowMs = req.query.window_ms
767
- ? Number(req.query.window_ms)
768
- : 30 * 60 * 1000;
769
- const limit = req.query.limit ? Number(req.query.limit) : 20;
251
+ app.get("/api/tasks/ready", async (req: Request, res: Response) => {
252
+ try {
253
+ const limitStr = str(req.query.limit);
254
+ const tagsStr = str(req.query.tags);
770
255
 
771
- const statusEvents = eventStore.query({
772
- type: "status",
773
- after: Date.now() - windowMs,
774
- });
256
+ const opts: { limit?: number; tags?: string[] } = {};
257
+ if (limitStr) opts.limit = parseInt(limitStr, 10);
258
+ if (tagsStr) opts.tags = tagsStr.split(",");
775
259
 
776
- const errors: Array<{ timestamp: number; agentId: string; type: string; summary: string }> = [];
777
- const byType: Record<string, number> = {};
260
+ const tasks = await system.tasksAdapter.queryReady(opts);
778
261
 
779
- for (const e of statusEvents) {
780
- if (e.payload?.status_type !== "failed") continue;
781
- const agentId = (e.source as { agent_id?: string })?.agent_id ?? "unknown";
782
- const summary = (e.payload?.summary as string) ?? "Unknown error";
783
- const errorType = ((e.payload?.details as Record<string, unknown>)?.signal as string) ?? "agent_failed";
784
- errors.push({ timestamp: e.timestamp, agentId, type: errorType, summary });
785
- byType[errorType] = (byType[errorType] ?? 0) + 1;
262
+ res.json({ tasks });
263
+ } catch (err: any) {
264
+ res.status(500).json({ error: err.message ?? "Internal server error" });
786
265
  }
787
-
788
- errors.sort((a, b) => b.timestamp - a.timestamp);
789
-
790
- res.json({
791
- totalErrors: errors.length,
792
- errorsByType: byType,
793
- recentErrors: errors.slice(0, limit),
794
- });
795
266
  });
796
267
 
797
- // POST /api/conversation/message - Send message to head manager
798
- app.post("/api/conversation/message", async (req: Request, res: Response) => {
799
- // Reject new messages during shutdown
800
- if (state.isShuttingDown) {
801
- return sendError(res, 503, "SHUTTING_DOWN", "Server is shutting down");
802
- }
803
-
804
- const promptId = `prompt_${Date.now()}_${Math.random().toString(36).slice(2)}`;
268
+ // ── Metrics ────────────────────────────────────────────────────
805
269
 
270
+ app.get("/api/metrics", async (_req: Request, res: Response) => {
806
271
  try {
807
- if (!state.initialized || !state.headManagerId) {
808
- return sendError(res, 400, "NOT_INITIALIZED", "System not initialized");
809
- }
810
-
811
- const body = req.body as ConversationMessageRequest;
812
- if (!body.message) {
813
- return sendError(res, 400, "MISSING_MESSAGE", "Message is required");
814
- }
815
-
816
- // Add user message to history
817
- state.conversationHistory.push({
818
- role: "user",
819
- content: body.message,
820
- timestamp: Date.now(),
821
- });
822
-
823
- // Record user turn in session conversation
824
- if (services.mailService && services.conversationMap && state.headManagerId) {
825
- try {
826
- const sessionConvId = services.conversationMap.getSessionConversation(state.headManagerId);
827
- if (sessionConvId) {
828
- services.mailService.recordTurn({
829
- conversationId: sessionConvId,
830
- participant: "user",
831
- contentType: "text",
832
- content: body.message,
833
- });
834
- }
835
- } catch {
836
- // Never fail message handling due to mail errors
837
- }
838
- }
839
-
840
- // Broadcast to conversation channel
841
- broadcastToChannel("conversation", {
842
- type: "message",
843
- data: {
844
- role: "user",
845
- content: body.message,
846
- timestamp: Date.now(),
847
- },
848
- });
849
-
850
- // Track this prompt as in-flight
851
- let resolvePrompt: () => void;
852
- const promptPromise = new Promise<void>((resolve) => {
853
- resolvePrompt = resolve;
854
- });
855
- state.inFlightPrompts.set(promptId, promptPromise);
856
-
857
- // Send to head manager and collect response
858
- let responseContent = "";
272
+ // Try real metrics module first, fall back to placeholder
273
+ let snapshot: MetricsSnapshot;
859
274
  try {
860
- for await (const update of agentManager.prompt(state.headManagerId, body.message)) {
861
- if ("sessionUpdate" in update && update.sessionUpdate === "agent_message_chunk") {
862
- const chunk = update as { content: { type: string; text?: string } };
863
- if (chunk.content.type === "text" && chunk.content.text) {
864
- responseContent += chunk.content.text;
865
- }
866
- }
867
- }
868
- } finally {
869
- // Mark prompt as complete
870
- resolvePrompt!();
871
- state.inFlightPrompts.delete(promptId);
872
- }
873
-
874
- // Add assistant response to history
875
- state.conversationHistory.push({
876
- role: "assistant",
877
- content: responseContent,
878
- agent_id: state.headManagerId,
879
- timestamp: Date.now(),
880
- });
881
-
882
- // Record assistant turn in session conversation
883
- if (services.mailService && services.conversationMap && state.headManagerId) {
884
- try {
885
- const sessionConvId = services.conversationMap.getSessionConversation(state.headManagerId);
886
- if (sessionConvId) {
887
- services.mailService.recordTurn({
888
- conversationId: sessionConvId,
889
- participant: state.headManagerId,
890
- contentType: "text",
891
- content: responseContent,
892
- });
893
- }
894
- } catch {
895
- // Never fail message handling due to mail errors
896
- }
275
+ // Dynamic import module may not exist yet (built in parallel)
276
+ const metricsPath = "../metrics/metrics.js";
277
+ const metricsModule = await (import(metricsPath) as Promise<any>);
278
+ snapshot = await metricsModule.collectMetrics(system, startTime);
279
+ } catch {
280
+ snapshot = await collectMetricsPlaceholder(system, startTime);
897
281
  }
898
-
899
- // Broadcast response
900
- broadcastToChannel("conversation", {
901
- type: "message",
902
- data: {
903
- role: "assistant",
904
- content: responseContent,
905
- agent_id: state.headManagerId,
906
- timestamp: Date.now(),
907
- },
908
- });
909
-
910
- res.json({
911
- content: responseContent,
912
- agent_id: state.headManagerId,
913
- message_id: `msg_${Date.now()}`,
914
- });
915
- } catch (error) {
916
- // Ensure we clean up the in-flight prompt on error
917
- state.inFlightPrompts.delete(promptId);
918
- sendError(res, 500, "MESSAGE_FAILED", `Failed to process message: ${error}`);
282
+ res.json(snapshot);
283
+ } catch (err: any) {
284
+ res.status(500).json({ error: err.message ?? "Internal server error" });
919
285
  }
920
286
  });
921
287
 
922
- // GET /api/conversation/history - Get conversation history
923
- app.get("/api/conversation/history", (req: Request, res: Response) => {
924
- const limit = parseInt(req.query.limit as string) || 50;
925
- const offset = parseInt(req.query.offset as string) || 0;
926
-
927
- const history = state.conversationHistory.slice(offset, offset + limit);
928
-
929
- const response: ConversationHistoryResponse = {
930
- history,
931
- total: state.conversationHistory.length,
932
- };
933
-
934
- res.json(response);
935
- });
936
-
937
- // GET /api/agents - List agents
938
- app.get("/api/agents", (req: Request, res: Response) => {
939
- const params = req.query as unknown as AgentQueryParams;
940
- let agents = agentManager.list();
941
-
942
- // Apply filters
943
- if (params.state) {
944
- agents = agents.filter((a) => a.state === params.state);
945
- }
946
- if (params.parent !== undefined) {
947
- const parentValue = params.parent === "null" ? null : params.parent;
948
- agents = agents.filter((a) => a.parent === parentValue);
949
- }
950
-
951
- const total = agents.length;
952
-
953
- // Apply pagination
954
- const offset = params.offset ?? 0;
955
- const limit = params.limit ?? 50;
956
- agents = agents.slice(offset, offset + limit);
957
-
958
- const response: AgentListResponse = {
959
- agents: agents.map(agentToSummary),
960
- total,
961
- };
962
-
963
- res.json(response);
964
- });
288
+ app.get("/api/metrics/agents", (_req: Request, res: Response) => {
289
+ try {
290
+ const agents = system.agentStore.listAgents();
291
+ const running = agents.filter((a) => a.state === "running").length;
292
+ const stopped = agents.filter((a) => a.state === "stopped").length;
293
+ const failed = agents.filter((a) => a.state === "failed").length;
965
294
 
966
- // GET /api/agents/:id - Get agent details
967
- app.get("/api/agents/:id", (req: Request, res: Response) => {
968
- const id = req.params.id as string;
969
- const agent = agentManager.get(id);
970
- if (!agent) {
971
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
295
+ res.json({
296
+ total: agents.length,
297
+ running,
298
+ stopped,
299
+ failed,
300
+ });
301
+ } catch (err: any) {
302
+ res.status(500).json({ error: err.message ?? "Internal server error" });
972
303
  }
973
- res.json(agentToDetail(agent));
974
304
  });
975
305
 
976
- // GET /api/agents/:id/hierarchy - Get agent hierarchy
977
- app.get("/api/agents/:id/hierarchy", (req: Request, res: Response) => {
978
- const id = req.params.id as string;
979
- const agent = agentManager.get(id);
980
- if (!agent) {
981
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
982
- }
983
-
984
- const hierarchy = agentManager.getHierarchy(id);
985
- if (!hierarchy) {
986
- return sendError(res, 500, "HIERARCHY_ERROR", "Failed to build hierarchy");
306
+ app.get("/api/metrics/tasks", async (_req: Request, res: Response) => {
307
+ try {
308
+ const tasks = await system.tasksAdapter.listTasks();
309
+ res.json({
310
+ total: tasks.length,
311
+ open: tasks.filter((t) => t.status === "open").length,
312
+ in_progress: tasks.filter((t) => t.status === "in_progress").length,
313
+ closed: tasks.filter((t) => t.status === "closed").length,
314
+ });
315
+ } catch (err: any) {
316
+ res.status(500).json({ error: err.message ?? "Internal server error" });
987
317
  }
988
-
989
- const response: HierarchyResponse = {
990
- tree: buildHierarchyNode(agent),
991
- depth: hierarchy.depth,
992
- total_agents: hierarchy.totalAgents,
993
- };
994
-
995
- res.json(response);
996
318
  });
997
319
 
998
- // GET /api/tasks - List tasks
999
- app.get("/api/tasks", (req: Request, res: Response) => {
1000
- const params = req.query as unknown as TaskQueryParams;
1001
- let tasks = taskManager.list();
1002
-
1003
- // Apply filters
1004
- if (params.status) {
1005
- tasks = tasks.filter((t) => t.status === params.status);
1006
- }
1007
- if (params.assigned_agent) {
1008
- tasks = tasks.filter((t) => t.assigned_agent === params.assigned_agent);
1009
- }
1010
-
1011
- const total = tasks.length;
1012
-
1013
- // Apply pagination
1014
- const offset = params.offset ?? 0;
1015
- const limit = params.limit ?? 50;
1016
- tasks = tasks.slice(offset, offset + limit);
320
+ // ── Teams ──────────────────────────────────────────────────────
1017
321
 
1018
- const response: TaskListResponse = {
1019
- tasks: tasks.map(taskToSummary),
1020
- total,
1021
- };
322
+ app.get("/api/teams", (_req: Request, res: Response) => {
323
+ try {
324
+ const agents = system.agentStore.listAgents();
325
+ const teamMap = new Map<
326
+ string,
327
+ { name: string; agentCount: number; roles: Set<string> }
328
+ >();
329
+
330
+ for (const agent of agents) {
331
+ const teamName = agent.team ?? "default";
332
+ let entry = teamMap.get(teamName);
333
+ if (!entry) {
334
+ entry = { name: teamName, agentCount: 0, roles: new Set() };
335
+ teamMap.set(teamName, entry);
336
+ }
337
+ entry.agentCount++;
338
+ entry.roles.add(agent.role);
339
+ }
1022
340
 
1023
- res.json(response);
1024
- });
341
+ const teams = Array.from(teamMap.values()).map((t) => ({
342
+ name: t.name,
343
+ agentCount: t.agentCount,
344
+ roles: Array.from(t.roles),
345
+ }));
1025
346
 
1026
- // GET /api/tasks/:id - Get task details
1027
- app.get("/api/tasks/:id", (req: Request, res: Response) => {
1028
- const id = req.params.id as string;
1029
- const task = taskManager.get(id);
1030
- if (!task) {
1031
- return sendError(res, 404, "TASK_NOT_FOUND", `Task not found: ${id}`);
347
+ res.json({ teams });
348
+ } catch (err: any) {
349
+ res.status(500).json({ error: err.message ?? "Internal server error" });
1032
350
  }
1033
- res.json(taskToDetail(task));
1034
- });
1035
-
1036
- // GET /api/events - List events with filters
1037
- app.get("/api/events", (req: Request, res: Response) => {
1038
- const params = req.query as unknown as EventQueryParams;
1039
-
1040
- const events = eventStore.query({
1041
- type: params.type as any,
1042
- source_agent_id: params.source_agent_id,
1043
- target_agent_id: params.target_agent_id,
1044
- after: params.after,
1045
- before: params.before,
1046
- limit: (params.limit ?? 50) + 1, // Get one extra to check has_more
1047
- });
1048
-
1049
- const limit = params.limit ?? 50;
1050
- const hasMore = events.length > limit;
1051
- const resultEvents = hasMore ? events.slice(0, limit) : events;
1052
-
1053
- const response: EventListResponse = {
1054
- events: resultEvents.map(eventToSummary),
1055
- total: resultEvents.length,
1056
- has_more: hasMore,
1057
- };
1058
-
1059
- res.json(response);
1060
351
  });
1061
352
 
1062
- // POST /api/agents/:id/inject - Inject context into agent session
1063
- app.post("/api/agents/:id/inject", async (req: Request, res: Response) => {
1064
- const id = req.params.id as AgentId;
1065
- const body = req.body as InjectContextRequest;
353
+ // ── Server Lifecycle ───────────────────────────────────────────
1066
354
 
1067
- // Validate content
1068
- if (!body.content) {
1069
- return sendError(res, 400, "MISSING_CONTENT", "Content is required");
1070
- }
355
+ let server: Server | null = null;
1071
356
 
1072
- // Check agent exists
1073
- const agent = agentManager.get(id);
1074
- if (!agent) {
1075
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
1076
- }
357
+ return {
358
+ app,
1077
359
 
1078
- // Create injection deps
1079
- const injectionDeps: InjectionDeps = {
1080
- getSession(agentId: AgentId) {
1081
- const session = agentManager.getSession(agentId);
1082
- if (!session) return null;
1083
- return {
1084
- inject: async (content: string) => session.inject(content),
1085
- supportsInject: () => session.supportsInject(),
1086
- checkInjectSupport: async () => session.supportsInject(),
1087
- interruptWith: (content: string) => session.interruptWith(content),
1088
- };
1089
- },
1090
- isPrompting(agentId: AgentId) {
1091
- return agentManager.isPrompting(agentId);
1092
- },
1093
- async sendMessage(
1094
- _fromAgentId: AgentId | undefined,
1095
- toAgentId: AgentId,
1096
- content: string,
1097
- priority: "high"
1098
- ) {
1099
- await services.messageRouter.sendToAddress({
1100
- from: "__human__" as AgentId,
1101
- to: { agent: toAgentId },
1102
- content,
1103
- options: { priority },
360
+ async start(): Promise<void> {
361
+ return new Promise((resolve) => {
362
+ server = app.listen(port, host, () => {
363
+ console.log(`[api] Listening on ${host}:${port}`);
364
+ resolve();
1104
365
  });
1105
- },
1106
- };
1107
-
1108
- try {
1109
- const result = await injectContext(injectionDeps, id, body.content, {
1110
- urgent: body.urgent,
1111
- allowInterrupt: true,
1112
- source: { type: "human" },
1113
- reason: body.reason,
1114
- });
1115
-
1116
- const response: InjectContextResponse = {
1117
- success: result.success,
1118
- method: result.method,
1119
- error: result.error,
1120
- note: result.note,
1121
- };
1122
-
1123
- if (result.success) {
1124
- res.json(response);
1125
- } else {
1126
- res.status(500).json(response);
1127
- }
1128
- } catch (error) {
1129
- sendError(res, 500, "INJECTION_FAILED", `Failed to inject context: ${error}`);
1130
- }
1131
- });
1132
-
1133
- // Register conversation API routes (if mail service available)
1134
- registerConversationRoutes(app, services, sendError);
1135
-
1136
- // ─────────────────────────────────────────────────────────────────
1137
- // HTTP Server
1138
- // ─────────────────────────────────────────────────────────────────
1139
-
1140
- const server = http.createServer(app);
1141
-
1142
- // ─────────────────────────────────────────────────────────────────
1143
- // WebSocket Server
1144
- // ─────────────────────────────────────────────────────────────────
1145
-
1146
- const wss = new WebSocketServer({ server });
1147
-
1148
- wss.on("connection", (ws: WebSocket) => {
1149
- const client: WSClient = {
1150
- ws,
1151
- subscriptions: new Set(),
1152
- };
1153
- wsClients.add(client);
1154
-
1155
- ws.on("message", (data: Buffer) => {
1156
- try {
1157
- const message = JSON.parse(data.toString()) as { type: string; channel?: string };
1158
-
1159
- if (message.type === "subscribe" && message.channel) {
1160
- client.subscriptions.add(message.channel);
1161
- ws.send(JSON.stringify({ type: "subscribed", channel: message.channel }));
1162
- } else if (message.type === "unsubscribe" && message.channel) {
1163
- client.subscriptions.delete(message.channel);
1164
- ws.send(JSON.stringify({ type: "unsubscribed", channel: message.channel }));
1165
- }
1166
- } catch {
1167
- ws.send(JSON.stringify({ type: "error", error: "Invalid message format" }));
1168
- }
1169
- });
1170
-
1171
- ws.on("close", () => {
1172
- wsClients.delete(client);
1173
- });
1174
- });
1175
-
1176
- // ─────────────────────────────────────────────────────────────────
1177
- // Event Store Listeners for Real-time Updates
1178
- // ─────────────────────────────────────────────────────────────────
1179
-
1180
- // Listen for agent changes
1181
- eventStore.onAgentChange((agentId, agent) => {
1182
- if (!agent) return;
1183
-
1184
- const update: WSAgentUpdate = {
1185
- type: "agent_update",
1186
- action: agent.state === "stopped" ? "stopped" : "started",
1187
- agent: agentToSummary(agent),
1188
- };
1189
-
1190
- broadcastToChannel("agents", update);
1191
- });
1192
-
1193
- // Listen for task changes
1194
- eventStore.onTaskChange((taskId, task) => {
1195
- if (!task) return;
1196
-
1197
- const update: WSTaskUpdate = {
1198
- type: "task_update",
1199
- action: task.status === "completed" ? "completed" : "status_change",
1200
- task: taskToSummary(task),
1201
- };
1202
-
1203
- broadcastToChannel("tasks", update);
1204
- });
1205
-
1206
- // Listen for conversation changes (if available)
1207
- if (eventStore.onConversationChange) {
1208
- eventStore.onConversationChange((conversationId, conversation) => {
1209
- if (!conversation) return;
1210
-
1211
- const update: WSConversationUpdate = {
1212
- type: "conversation_update",
1213
- conversation: conversationToSummary(conversation),
1214
- };
1215
-
1216
- broadcastToChannel("conversations", update);
1217
- broadcastToChannel(`conversation:${conversationId}`, update);
1218
- });
1219
- }
1220
-
1221
- // Listen for turn changes (if available)
1222
- if (eventStore.onTurnChange) {
1223
- eventStore.onTurnChange((conversationId, turn) => {
1224
- const update: WSTurnAdded = {
1225
- type: "turn_added",
1226
- conversation_id: conversationId,
1227
- turn: turnToSummary(turn),
1228
- };
1229
-
1230
- broadcastToChannel(`conversation:${conversationId}`, update);
1231
- });
1232
- }
1233
-
1234
- // ─────────────────────────────────────────────────────────────────
1235
- // Server Lifecycle
1236
- // ─────────────────────────────────────────────────────────────────
1237
-
1238
- function getStatus(): SystemStatus {
1239
- const agents = agentManager.list();
1240
- const tasks = taskManager.list();
1241
-
1242
- return {
1243
- initialized: state.initialized,
1244
- head_manager_id: state.headManagerId,
1245
- agents: {
1246
- total: agents.length,
1247
- running: agents.filter((a) => a.state === "running").length,
1248
- stopped: agents.filter((a) => a.state === "stopped").length,
1249
- },
1250
- tasks: {
1251
- total: tasks.length,
1252
- pending: tasks.filter((t) => t.status === "pending").length,
1253
- in_progress: tasks.filter((t) => t.status === "in_progress").length,
1254
- completed: tasks.filter((t) => t.status === "completed").length,
1255
- failed: tasks.filter((t) => t.status === "failed").length,
1256
- },
1257
- uptime: state.startedAt ? Date.now() - state.startedAt : 0,
1258
- started_at: state.startedAt,
1259
- };
1260
- }
1261
-
1262
- async function start(): Promise<void> {
1263
- return new Promise((resolve) => {
1264
- server.listen(port, host, () => {
1265
- resolve();
1266
- });
1267
- });
1268
- }
1269
-
1270
- /**
1271
- * Helper function to create a delay promise
1272
- */
1273
- function sleep(ms: number): Promise<void> {
1274
- return new Promise((resolve) => setTimeout(resolve, ms));
1275
- }
1276
-
1277
- /**
1278
- * Get all in-flight prompt promises
1279
- */
1280
- function getInFlightPrompts(): Promise<void>[] {
1281
- return Array.from(state.inFlightPrompts.values());
1282
- }
1283
-
1284
- async function stop(options?: StopOptions): Promise<void> {
1285
- // Prevent concurrent shutdown calls
1286
- if (state.isShuttingDown) {
1287
- return;
1288
- }
1289
- state.isShuttingDown = true;
1290
-
1291
- const gracePeriod = options?.force ? 0 : shutdownGracePeriodMs;
1292
-
1293
- // 1. Stop accepting new connections
1294
- await new Promise<void>((resolve) => server.close(() => resolve()));
1295
-
1296
- // 2. Wait grace period for in-flight work
1297
- if (gracePeriod > 0) {
1298
- const inFlight = getInFlightPrompts();
1299
- if (inFlight.length > 0) {
1300
- await Promise.race([
1301
- Promise.all(inFlight),
1302
- sleep(gracePeriod),
1303
- ]);
1304
- }
1305
- }
1306
-
1307
- // 3. Close WebSocket connections with 1001 "going away"
1308
- for (const client of wsClients) {
1309
- if (client.ws.readyState === WebSocket.OPEN) {
1310
- client.ws.close(1001, "Server shutting down");
1311
- }
1312
- }
1313
- wsClients.clear();
1314
-
1315
- // 4. Terminate running agents
1316
- await agentManager.close();
1317
-
1318
- // 5-6. Persist and close event store
1319
- await eventStore.persist();
1320
- await eventStore.close();
1321
- }
1322
-
1323
- /**
1324
- * Register signal handlers for graceful shutdown.
1325
- * Should be called after server.start() in production.
1326
- */
1327
- function registerSignalHandlers(): void {
1328
- let shutdownInProgress = false;
1329
-
1330
- const handleSignal = async (signal: string) => {
1331
- if (shutdownInProgress) {
1332
- // Force exit on second signal
1333
- process.exit(1);
1334
- }
1335
- shutdownInProgress = true;
1336
-
1337
- console.log(`\nReceived ${signal}, shutting down gracefully...`);
1338
-
1339
- try {
1340
- await stop();
1341
- console.log("Server shutdown complete.");
1342
- process.exit(0);
1343
- } catch (error) {
1344
- console.error("Error during shutdown:", error);
1345
- process.exit(1);
1346
- }
1347
- };
1348
-
1349
- process.on("SIGINT", () => handleSignal("SIGINT"));
1350
- process.on("SIGTERM", () => handleSignal("SIGTERM"));
1351
- }
1352
-
1353
- return {
1354
- app,
1355
- server,
1356
- wss,
1357
- start,
1358
- stop,
1359
- getStatus,
1360
- registerSignalHandlers,
1361
- };
1362
- }
1363
-
1364
- // ─────────────────────────────────────────────────────────────────
1365
- // Shared Server Mode (createAPIApp + setupAPIWebSocket)
1366
- // ─────────────────────────────────────────────────────────────────
1367
-
1368
- /**
1369
- * Create Express app with API routes for use with an external HTTP server.
1370
- *
1371
- * Use this when you want to share an HTTP server with other services.
1372
- *
1373
- * @param services - Shared services (EventStore, AgentManager, etc.)
1374
- * @param config - Configuration options
1375
- * @returns Express app
1376
- */
1377
- export function createAPIApp(
1378
- services: Pick<APIServices, "eventStore" | "agentManager" | "taskManager" | "messageRouter"> & Pick<Partial<APIServices>, "mailService" | "conversationMap" | "teamManager">,
1379
- config: { cors?: boolean; serverToken?: string; defaultCwd?: string } = {}
1380
- ): Express {
1381
- const { cors = true, serverToken, defaultCwd } = config;
1382
- const { agentManager, taskManager, messageRouter } = services;
1383
-
1384
- // Create shared state
1385
- const state = createAPISharedState();
1386
-
1387
- // Create Express app
1388
- const app = express();
1389
-
1390
- // Store state on app for access by setupAPIWebSocket
1391
- (app as any).__apiState = state;
1392
- (app as any).__apiServices = services;
1393
-
1394
- // Middleware
1395
- app.use(express.json());
1396
-
1397
- if (cors) {
1398
- app.use((_req: Request, res: Response, next: NextFunction) => {
1399
- res.header("Access-Control-Allow-Origin", "*");
1400
- res.header("Access-Control-Allow-Headers", "Content-Type, Authorization");
1401
- res.header("Access-Control-Allow-Methods", "GET, POST, DELETE");
1402
- next();
1403
- });
1404
- }
1405
-
1406
- // Bearer token auth middleware (skip /health)
1407
- if (serverToken) {
1408
- app.use((req: Request, res: Response, next: NextFunction) => {
1409
- if (req.path === "/health") return next();
1410
- const authHeader = req.headers.authorization;
1411
- const token = authHeader?.startsWith("Bearer ") ? authHeader.slice(7) : undefined;
1412
- if (!token || !secureCompare(token, serverToken)) {
1413
- const error: APIError = { error: "Unauthorized", code: "AUTH_REQUIRED" };
1414
- res.status(401).json(error);
1415
- return;
1416
- }
1417
- next();
1418
- });
1419
- }
1420
-
1421
- // ─────────────────────────────────────────────────────────────────
1422
- // Helper Functions
1423
- // ─────────────────────────────────────────────────────────────────
1424
-
1425
- function agentToSummary(agent: Agent): AgentSummary {
1426
- return {
1427
- id: agent.id,
1428
- session_id: agent.session_id,
1429
- task: agent.task ?? "No task",
1430
- state: agent.state,
1431
- parent: agent.parent,
1432
- children_count: agentManager.getChildren(agent.id).length,
1433
- created_at: agent.created_at,
1434
- };
1435
- }
1436
-
1437
- function agentToDetail(agent: Agent): AgentDetail {
1438
- return {
1439
- ...agentToSummary(agent),
1440
- lineage: agent.lineage,
1441
- task_id: agent.task_id,
1442
- config: agent.config as Record<string, unknown>,
1443
- started_at: agent.started_at,
1444
- stopped_at: agent.stopped_at,
1445
- stop_reason: agent.stop_reason,
1446
- };
1447
- }
1448
-
1449
- function taskToSummary(task: Task): TaskSummary {
1450
- return {
1451
- id: task.id,
1452
- description: task.description,
1453
- status: task.status,
1454
- assigned_agent: task.assigned_agent,
1455
- created_at: task.created_at,
1456
- };
1457
- }
1458
-
1459
- function taskToDetail(task: Task): TaskDetail {
1460
- return {
1461
- ...taskToSummary(task),
1462
- parent_task: task.parent_task,
1463
- subtasks: task.subtasks ?? [],
1464
- created_by: task.created_by,
1465
- inputs: task.inputs,
1466
- outputs: task.outputs,
1467
- artifacts: task.artifacts,
1468
- started_at: task.started_at,
1469
- completed_at: task.completed_at,
1470
- };
1471
- }
1472
-
1473
- function eventToSummary(event: Event): EventSummary {
1474
- let summary = "";
1475
- switch (event.type) {
1476
- case "spawn":
1477
- summary = `Agent ${event.payload.agent_id} spawned`;
1478
- break;
1479
- case "stop":
1480
- summary = `Agent terminated: ${event.payload.reason}`;
1481
- break;
1482
- case "status":
1483
- summary = `${event.payload.status_type}: ${event.payload.summary}`;
1484
- break;
1485
- case "message":
1486
- summary = `Message: ${String(event.payload.content).substring(0, 50)}...`;
1487
- break;
1488
- case "task":
1489
- summary = `Task ${event.payload.action}: ${event.payload.task_id}`;
1490
- break;
1491
- default:
1492
- summary = `${event.type} event`;
1493
- }
1494
-
1495
- return {
1496
- id: event.id,
1497
- type: event.type,
1498
- timestamp: event.timestamp,
1499
- source_agent_id: event.source.agent_id,
1500
- target_agent_id: event.target?.agent_id,
1501
- summary,
1502
- };
1503
- }
1504
-
1505
- function buildHierarchyNode(agent: Agent): HierarchyNode {
1506
- const children = agentManager.getChildren(agent.id);
1507
- return {
1508
- agent_id: agent.id,
1509
- task: agent.task ?? "No task",
1510
- state: agent.state,
1511
- children: children.map(buildHierarchyNode),
1512
- };
1513
- }
1514
-
1515
- function sendError(res: Response, status: number, code: string, message: string): void {
1516
- const error: APIError = { error: message, code };
1517
- res.status(status).json(error);
1518
- }
1519
-
1520
- // ─────────────────────────────────────────────────────────────────
1521
- // API Routes
1522
- // ─────────────────────────────────────────────────────────────────
1523
-
1524
- // POST /api/init - Initialize the system
1525
- app.post("/api/init", async (req: Request, res: Response) => {
1526
- try {
1527
- if (state.initialized) {
1528
- return sendError(res, 400, "ALREADY_INITIALIZED", "System already initialized");
1529
- }
1530
-
1531
- const body = req.body as InitRequest;
1532
- const cwd = body.cwd ?? process.cwd();
1533
-
1534
- const headManager = await agentManager.getOrCreateHeadManager({
1535
- cwd,
1536
- systemPrompt: body.system_prompt,
1537
- permissionMode: body.permission_mode,
1538
366
  });
367
+ },
1539
368
 
1540
- state.initialized = true;
1541
- state.headManagerId = headManager.id;
1542
- state.startedAt = Date.now();
1543
-
1544
- // Create session conversation for mail tracking
1545
- if (services.mailService && services.conversationMap) {
1546
- try {
1547
- const { conversationId } = services.mailService.createConversation({
1548
- type: "session",
1549
- subject: "User session",
1550
- createdBy: "user",
369
+ async stop(): Promise<void> {
370
+ if (server) {
371
+ return new Promise((resolve) => {
372
+ server!.close(() => {
373
+ server = null;
374
+ resolve();
1551
375
  });
1552
- services.mailService.joinConversation({
1553
- conversationId,
1554
- participantId: headManager.id,
1555
- role: "worker",
1556
- });
1557
- services.conversationMap.setSessionConversation(headManager.id, conversationId);
1558
- } catch {
1559
- // Never fail init due to mail errors
1560
- }
1561
- }
1562
-
1563
- const response: InitResponse = {
1564
- success: true,
1565
- head_manager_id: headManager.id,
1566
- session_id: headManager.session_id,
1567
- };
1568
-
1569
- res.json(response);
1570
- } catch (error) {
1571
- sendError(res, 500, "INIT_FAILED", `Failed to initialize: ${error}`);
1572
- }
1573
- });
1574
-
1575
- // GET /api/status - Get system status
1576
- app.get("/api/status", (_req: Request, res: Response) => {
1577
- const agents = agentManager.list();
1578
- const tasks = taskManager.list();
1579
-
1580
- const status: SystemStatus = {
1581
- initialized: state.initialized,
1582
- head_manager_id: state.headManagerId,
1583
- agents: {
1584
- total: agents.length,
1585
- running: agents.filter((a) => a.state === "running").length,
1586
- stopped: agents.filter((a) => a.state === "stopped").length,
1587
- },
1588
- tasks: {
1589
- total: tasks.length,
1590
- pending: tasks.filter((t) => t.status === "pending").length,
1591
- in_progress: tasks.filter((t) => t.status === "in_progress").length,
1592
- completed: tasks.filter((t) => t.status === "completed").length,
1593
- failed: tasks.filter((t) => t.status === "failed").length,
1594
- },
1595
- uptime: state.startedAt ? Date.now() - state.startedAt : 0,
1596
- started_at: state.startedAt,
1597
- };
1598
-
1599
- res.json(status);
1600
- });
1601
-
1602
- // POST /api/conversation/message - Send message to head manager
1603
- app.post("/api/conversation/message", async (req: Request, res: Response) => {
1604
- // Reject new messages during shutdown
1605
- if (state.isShuttingDown) {
1606
- return sendError(res, 503, "SHUTTING_DOWN", "Server is shutting down");
1607
- }
1608
-
1609
- const promptId = `prompt_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1610
-
1611
- try {
1612
- if (!state.initialized || !state.headManagerId) {
1613
- return sendError(res, 400, "NOT_INITIALIZED", "System not initialized");
1614
- }
1615
-
1616
- const body = req.body as ConversationMessageRequest;
1617
- if (!body.message) {
1618
- return sendError(res, 400, "MISSING_MESSAGE", "Message is required");
1619
- }
1620
-
1621
- // Add user message to history
1622
- state.conversationHistory.push({
1623
- role: "user",
1624
- content: body.message,
1625
- timestamp: Date.now(),
1626
- });
1627
-
1628
- // Record user turn in session conversation
1629
- if (services.mailService && services.conversationMap && state.headManagerId) {
1630
- try {
1631
- const sessionConvId = services.conversationMap.getSessionConversation(state.headManagerId);
1632
- if (sessionConvId) {
1633
- services.mailService.recordTurn({
1634
- conversationId: sessionConvId,
1635
- participant: "user",
1636
- contentType: "text",
1637
- content: body.message,
1638
- });
1639
- }
1640
- } catch {
1641
- // Never fail message handling due to mail errors
1642
- }
1643
- }
1644
-
1645
- // Broadcast to conversation channel
1646
- state.broadcast("conversation", {
1647
- type: "message",
1648
- data: {
1649
- role: "user",
1650
- content: body.message,
1651
- timestamp: Date.now(),
1652
- },
1653
- });
1654
-
1655
- // Track this prompt as in-flight
1656
- let resolvePrompt: () => void;
1657
- const promptPromise = new Promise<void>((resolve) => {
1658
- resolvePrompt = resolve;
1659
- });
1660
- state.inFlightPrompts.set(promptId, promptPromise);
1661
-
1662
- // Send to head manager and collect response
1663
- let responseContent = "";
1664
- try {
1665
- for await (const update of agentManager.prompt(state.headManagerId, body.message)) {
1666
- if ("sessionUpdate" in update && update.sessionUpdate === "agent_message_chunk") {
1667
- const chunk = update as { content: { type: string; text?: string } };
1668
- if (chunk.content.type === "text" && chunk.content.text) {
1669
- responseContent += chunk.content.text;
1670
- }
1671
- }
1672
- }
1673
- } finally {
1674
- // Mark prompt as complete
1675
- resolvePrompt!();
1676
- state.inFlightPrompts.delete(promptId);
1677
- }
1678
-
1679
- // Add assistant response to history
1680
- state.conversationHistory.push({
1681
- role: "assistant",
1682
- content: responseContent,
1683
- agent_id: state.headManagerId,
1684
- timestamp: Date.now(),
1685
- });
1686
-
1687
- // Record assistant turn in session conversation
1688
- if (services.mailService && services.conversationMap && state.headManagerId) {
1689
- try {
1690
- const sessionConvId = services.conversationMap.getSessionConversation(state.headManagerId);
1691
- if (sessionConvId) {
1692
- services.mailService.recordTurn({
1693
- conversationId: sessionConvId,
1694
- participant: state.headManagerId,
1695
- contentType: "text",
1696
- content: responseContent,
1697
- });
1698
- }
1699
- } catch {
1700
- // Never fail message handling due to mail errors
1701
- }
1702
- }
1703
-
1704
- // Broadcast response
1705
- state.broadcast("conversation", {
1706
- type: "message",
1707
- data: {
1708
- role: "assistant",
1709
- content: responseContent,
1710
- agent_id: state.headManagerId,
1711
- timestamp: Date.now(),
1712
- },
1713
- });
1714
-
1715
- res.json({
1716
- content: responseContent,
1717
- agent_id: state.headManagerId,
1718
- message_id: `msg_${Date.now()}`,
1719
- });
1720
- } catch (error) {
1721
- // Ensure we clean up the in-flight prompt on error
1722
- state.inFlightPrompts.delete(promptId);
1723
- sendError(res, 500, "MESSAGE_FAILED", `Failed to process message: ${error}`);
1724
- }
1725
- });
1726
-
1727
- // GET /api/conversation/history - Get conversation history
1728
- app.get("/api/conversation/history", (req: Request, res: Response) => {
1729
- const limit = parseInt(req.query.limit as string) || 50;
1730
- const offset = parseInt(req.query.offset as string) || 0;
1731
-
1732
- const history = state.conversationHistory.slice(offset, offset + limit);
1733
-
1734
- const response: ConversationHistoryResponse = {
1735
- history,
1736
- total: state.conversationHistory.length,
1737
- };
1738
-
1739
- res.json(response);
1740
- });
1741
-
1742
- // GET /api/agents - List agents
1743
- app.get("/api/agents", (req: Request, res: Response) => {
1744
- const params = req.query as unknown as AgentQueryParams;
1745
- let agents = agentManager.list();
1746
-
1747
- // Apply filters
1748
- if (params.state) {
1749
- agents = agents.filter((a) => a.state === params.state);
1750
- }
1751
- if (params.parent !== undefined) {
1752
- const parentValue = params.parent === "null" ? null : params.parent;
1753
- agents = agents.filter((a) => a.parent === parentValue);
1754
- }
1755
-
1756
- const total = agents.length;
1757
-
1758
- // Apply pagination
1759
- const offset = params.offset ?? 0;
1760
- const limit = params.limit ?? 50;
1761
- agents = agents.slice(offset, offset + limit);
1762
-
1763
- const response: AgentListResponse = {
1764
- agents: agents.map(agentToSummary),
1765
- total,
1766
- };
1767
-
1768
- res.json(response);
1769
- });
1770
-
1771
- // GET /api/agents/:id - Get agent details
1772
- app.get("/api/agents/:id", (req: Request, res: Response) => {
1773
- const id = req.params.id as string;
1774
- const agent = agentManager.get(id);
1775
- if (!agent) {
1776
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
1777
- }
1778
- res.json(agentToDetail(agent));
1779
- });
1780
-
1781
- // GET /api/agents/:id/hierarchy - Get agent hierarchy
1782
- app.get("/api/agents/:id/hierarchy", (req: Request, res: Response) => {
1783
- const id = req.params.id as string;
1784
- const agent = agentManager.get(id);
1785
- if (!agent) {
1786
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
1787
- }
1788
-
1789
- const hierarchy = agentManager.getHierarchy(id);
1790
- if (!hierarchy) {
1791
- return sendError(res, 500, "HIERARCHY_ERROR", "Failed to build hierarchy");
1792
- }
1793
-
1794
- const response: HierarchyResponse = {
1795
- tree: buildHierarchyNode(agent),
1796
- depth: hierarchy.depth,
1797
- total_agents: hierarchy.totalAgents,
1798
- };
1799
-
1800
- res.json(response);
1801
- });
1802
-
1803
- // GET /api/tasks - List tasks
1804
- app.get("/api/tasks", (req: Request, res: Response) => {
1805
- const params = req.query as unknown as TaskQueryParams;
1806
- let tasks = taskManager.list();
1807
-
1808
- // Apply filters
1809
- if (params.status) {
1810
- tasks = tasks.filter((t) => t.status === params.status);
1811
- }
1812
- if (params.assigned_agent) {
1813
- tasks = tasks.filter((t) => t.assigned_agent === params.assigned_agent);
1814
- }
1815
-
1816
- const total = tasks.length;
1817
-
1818
- // Apply pagination
1819
- const offset = params.offset ?? 0;
1820
- const limit = params.limit ?? 50;
1821
- tasks = tasks.slice(offset, offset + limit);
1822
-
1823
- const response: TaskListResponse = {
1824
- tasks: tasks.map(taskToSummary),
1825
- total,
1826
- };
1827
-
1828
- res.json(response);
1829
- });
1830
-
1831
- // GET /api/tasks/:id - Get task details
1832
- app.get("/api/tasks/:id", (req: Request, res: Response) => {
1833
- const id = req.params.id as string;
1834
- const task = taskManager.get(id);
1835
- if (!task) {
1836
- return sendError(res, 404, "TASK_NOT_FOUND", `Task not found: ${id}`);
1837
- }
1838
- res.json(taskToDetail(task));
1839
- });
1840
-
1841
- // GET /api/events - List events with filters
1842
- app.get("/api/events", (req: Request, res: Response) => {
1843
- const params = req.query as unknown as EventQueryParams;
1844
- const { eventStore } = services;
1845
-
1846
- const events = eventStore.query({
1847
- type: params.type as any,
1848
- source_agent_id: params.source_agent_id,
1849
- target_agent_id: params.target_agent_id,
1850
- after: params.after,
1851
- before: params.before,
1852
- limit: (params.limit ?? 50) + 1, // Get one extra to check has_more
1853
- });
1854
-
1855
- const limit = params.limit ?? 50;
1856
- const hasMore = events.length > limit;
1857
- const resultEvents = hasMore ? events.slice(0, limit) : events;
1858
-
1859
- const response: EventListResponse = {
1860
- events: resultEvents.map(eventToSummary),
1861
- total: resultEvents.length,
1862
- has_more: hasMore,
1863
- };
1864
-
1865
- res.json(response);
1866
- });
1867
-
1868
- // POST /api/agents/:id/inject - Inject context into agent session
1869
- app.post("/api/agents/:id/inject", async (req: Request, res: Response) => {
1870
- const id = req.params.id as AgentId;
1871
- const body = req.body as InjectContextRequest;
1872
-
1873
- // Validate content
1874
- if (!body.content) {
1875
- return sendError(res, 400, "MISSING_CONTENT", "Content is required");
1876
- }
1877
-
1878
- // Check agent exists
1879
- const agent = agentManager.get(id);
1880
- if (!agent) {
1881
- return sendError(res, 404, "AGENT_NOT_FOUND", `Agent not found: ${id}`);
1882
- }
1883
-
1884
- // Create injection deps
1885
- const injectionDeps: InjectionDeps = {
1886
- getSession(agentId: AgentId) {
1887
- const session = agentManager.getSession(agentId);
1888
- if (!session) return null;
1889
- return {
1890
- inject: async (content: string) => session.inject(content),
1891
- supportsInject: () => session.supportsInject(),
1892
- checkInjectSupport: async () => session.supportsInject(),
1893
- interruptWith: (content: string) => session.interruptWith(content),
1894
- };
1895
- },
1896
- isPrompting(agentId: AgentId) {
1897
- return agentManager.isPrompting(agentId);
1898
- },
1899
- async sendMessage(
1900
- _fromAgentId: AgentId | undefined,
1901
- toAgentId: AgentId,
1902
- content: string,
1903
- priority: "high"
1904
- ) {
1905
- await messageRouter.sendToAddress({
1906
- from: "__human__" as AgentId,
1907
- to: { agent: toAgentId },
1908
- content,
1909
- options: { priority },
1910
376
  });
1911
- },
1912
- };
1913
-
1914
- try {
1915
- const result = await injectContext(injectionDeps, id, body.content, {
1916
- urgent: body.urgent,
1917
- allowInterrupt: true,
1918
- source: { type: "human" },
1919
- reason: body.reason,
1920
- });
1921
-
1922
- const response: InjectContextResponse = {
1923
- success: result.success,
1924
- method: result.method,
1925
- error: result.error,
1926
- note: result.note,
1927
- };
1928
-
1929
- if (result.success) {
1930
- res.json(response);
1931
- } else {
1932
- res.status(500).json(response);
1933
- }
1934
- } catch (error) {
1935
- sendError(res, 500, "INJECTION_FAILED", `Failed to inject context: ${error}`);
1936
- }
1937
- });
1938
-
1939
- // Register conversation API routes (if mail service available)
1940
- registerConversationRoutes(app, services, sendError);
1941
-
1942
- // Register dynamic team management routes
1943
- registerTeamRoutes(
1944
- app,
1945
- services.teamManager,
1946
- defaultCwd ?? process.cwd(),
1947
- sendError,
1948
- state.broadcast,
1949
- );
1950
-
1951
- return app;
1952
- }
1953
-
1954
- /**
1955
- * Set up API WebSocket handling on an existing WebSocketServer.
1956
- *
1957
- * Use this when you want to share an HTTP server with other services.
1958
- * The WebSocketServer should be created with `noServer: true`.
1959
- *
1960
- * @param wss - WebSocketServer instance (noServer mode)
1961
- * @param services - Shared services (EventStore, AgentManager, etc.)
1962
- * @returns Handler for managing connections
1963
- */
1964
- export function setupAPIWebSocket(
1965
- wss: WebSocketServer,
1966
- services: Pick<APIServices, "eventStore" | "agentManager" | "taskManager">,
1967
- app?: Express
1968
- ): APIWebSocketHandler {
1969
- const { eventStore, agentManager } = services;
1970
-
1971
- // Get shared state from app if provided, otherwise create new
1972
- const state: APISharedState = app && (app as any).__apiState
1973
- ? (app as any).__apiState
1974
- : createAPISharedState();
1975
-
1976
- const { wsClients, broadcast } = state;
1977
-
1978
- // Helper functions for event listeners
1979
- function agentToSummary(agent: Agent): AgentSummary {
1980
- return {
1981
- id: agent.id,
1982
- session_id: agent.session_id,
1983
- task: agent.task ?? "No task",
1984
- state: agent.state,
1985
- parent: agent.parent,
1986
- children_count: agentManager.getChildren(agent.id).length,
1987
- created_at: agent.created_at,
1988
- };
1989
- }
1990
-
1991
- function taskToSummary(task: Task): TaskSummary {
1992
- return {
1993
- id: task.id,
1994
- description: task.description,
1995
- status: task.status,
1996
- assigned_agent: task.assigned_agent,
1997
- created_at: task.created_at,
1998
- };
1999
- }
2000
-
2001
- // Handle WebSocket connections
2002
- wss.on("connection", (ws: WebSocket) => {
2003
- const client: WSClient = {
2004
- ws,
2005
- subscriptions: new Set(),
2006
- };
2007
- wsClients.add(client);
2008
-
2009
- ws.on("message", (data: Buffer) => {
2010
- try {
2011
- const message = JSON.parse(data.toString()) as { type: string; channel?: string };
2012
-
2013
- if (message.type === "subscribe" && message.channel) {
2014
- client.subscriptions.add(message.channel);
2015
- ws.send(JSON.stringify({ type: "subscribed", channel: message.channel }));
2016
- } else if (message.type === "unsubscribe" && message.channel) {
2017
- client.subscriptions.delete(message.channel);
2018
- ws.send(JSON.stringify({ type: "unsubscribed", channel: message.channel }));
2019
- }
2020
- } catch {
2021
- ws.send(JSON.stringify({ type: "error", error: "Invalid message format" }));
2022
- }
2023
- });
2024
-
2025
- ws.on("close", () => {
2026
- wsClients.delete(client);
2027
- });
2028
- });
2029
-
2030
- // Listen for agent changes
2031
- eventStore.onAgentChange((agentId, agent) => {
2032
- if (!agent) return;
2033
-
2034
- const update: WSAgentUpdate = {
2035
- type: "agent_update",
2036
- action: agent.state === "stopped" ? "stopped" : "started",
2037
- agent: agentToSummary(agent),
2038
- };
2039
-
2040
- broadcast("agents", update);
2041
- });
2042
-
2043
- // Listen for task changes
2044
- eventStore.onTaskChange((taskId, task) => {
2045
- if (!task) return;
2046
-
2047
- const update: WSTaskUpdate = {
2048
- type: "task_update",
2049
- action: task.status === "completed" ? "completed" : "status_change",
2050
- task: taskToSummary(task),
2051
- };
2052
-
2053
- broadcast("tasks", update);
2054
- });
2055
-
2056
- // Listen for conversation changes (if available)
2057
- if (eventStore.onConversationChange) {
2058
- eventStore.onConversationChange((conversationId, conversation) => {
2059
- if (!conversation) return;
2060
-
2061
- const update: WSConversationUpdate = {
2062
- type: "conversation_update",
2063
- conversation: conversationToSummary(conversation),
2064
- };
2065
-
2066
- broadcast("conversations", update);
2067
- broadcast(`conversation:${conversationId}`, update);
2068
- });
2069
- }
2070
-
2071
- // Listen for turn changes (if available)
2072
- if (eventStore.onTurnChange) {
2073
- eventStore.onTurnChange((conversationId, turn) => {
2074
- const update: WSTurnAdded = {
2075
- type: "turn_added",
2076
- conversation_id: conversationId,
2077
- turn: turnToSummary(turn),
2078
- };
2079
-
2080
- broadcast(`conversation:${conversationId}`, update);
2081
- });
2082
- }
2083
-
2084
- return {
2085
- getConnectionCount(): number {
2086
- return wsClients.size;
2087
- },
2088
-
2089
- closeAll(): void {
2090
- console.error(`[api-ws] Closing ${wsClients.size} connections...`);
2091
- for (const client of wsClients) {
2092
- if (client.ws.readyState === WebSocket.OPEN) {
2093
- client.ws.close(1001, "Server shutting down");
2094
- }
2095
377
  }
2096
- wsClients.clear();
2097
378
  },
2098
379
  };
2099
380
  }