macro-agent 0.2.4 → 0.2.6

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 (1002) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -56
  3. package/dist/acp/websocket-server.d.ts +6 -0
  4. package/dist/acp/websocket-server.d.ts.map +1 -1
  5. package/dist/acp/websocket-server.js +13 -0
  6. package/dist/acp/websocket-server.js.map +1 -1
  7. package/dist/acp/websocket-stream.d.ts +30 -0
  8. package/dist/acp/websocket-stream.d.ts.map +1 -0
  9. package/dist/acp/websocket-stream.js +118 -0
  10. package/dist/acp/websocket-stream.js.map +1 -0
  11. package/dist/activity/deduplication.d.ts +85 -0
  12. package/dist/activity/deduplication.d.ts.map +1 -0
  13. package/dist/activity/deduplication.js +149 -0
  14. package/dist/activity/deduplication.js.map +1 -0
  15. package/dist/activity/index.d.ts +16 -0
  16. package/dist/activity/index.d.ts.map +1 -0
  17. package/dist/activity/index.js +17 -0
  18. package/dist/activity/index.js.map +1 -0
  19. package/dist/activity/relevance.d.ts +81 -0
  20. package/dist/activity/relevance.d.ts.map +1 -0
  21. package/dist/activity/relevance.js +161 -0
  22. package/dist/activity/relevance.js.map +1 -0
  23. package/dist/activity/types.d.ts +169 -0
  24. package/dist/activity/types.d.ts.map +1 -0
  25. package/dist/activity/types.js +33 -0
  26. package/dist/activity/types.js.map +1 -0
  27. package/dist/activity/watcher.d.ts +64 -0
  28. package/dist/activity/watcher.d.ts.map +1 -0
  29. package/dist/activity/watcher.js +212 -0
  30. package/dist/activity/watcher.js.map +1 -0
  31. package/dist/adapters/federation.d.ts +8 -1
  32. package/dist/adapters/federation.d.ts.map +1 -1
  33. package/dist/adapters/federation.js +33 -2
  34. package/dist/adapters/federation.js.map +1 -1
  35. package/dist/agent/agent-manager-v2.d.ts.map +1 -1
  36. package/dist/agent/agent-manager-v2.js +189 -67
  37. package/dist/agent/agent-manager-v2.js.map +1 -1
  38. package/dist/agent/agent-manager.d.ts +17 -0
  39. package/dist/agent/agent-manager.d.ts.map +1 -1
  40. package/dist/agent/agent-manager.js.map +1 -1
  41. package/dist/agent/types.d.ts +21 -2
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/agent/types.js.map +1 -1
  44. package/dist/agent/wake.d.ts +85 -0
  45. package/dist/agent/wake.d.ts.map +1 -0
  46. package/dist/agent/wake.js +278 -0
  47. package/dist/agent/wake.js.map +1 -0
  48. package/dist/api/server.d.ts.map +1 -1
  49. package/dist/api/server.js +41 -25
  50. package/dist/api/server.js.map +1 -1
  51. package/dist/api/types.d.ts +6 -0
  52. package/dist/api/types.d.ts.map +1 -1
  53. package/dist/auth/server-auth.d.ts +43 -0
  54. package/dist/auth/server-auth.d.ts.map +1 -0
  55. package/dist/auth/server-auth.js +80 -0
  56. package/dist/auth/server-auth.js.map +1 -0
  57. package/dist/auth/token.d.ts +4 -0
  58. package/dist/auth/token.d.ts.map +1 -1
  59. package/dist/auth/token.js +7 -6
  60. package/dist/auth/token.js.map +1 -1
  61. package/dist/boot-v2.d.ts +6 -3
  62. package/dist/boot-v2.d.ts.map +1 -1
  63. package/dist/boot-v2.js +44 -25
  64. package/dist/boot-v2.js.map +1 -1
  65. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -1
  66. package/dist/cognitive/macro-agent-backend.js +37 -8
  67. package/dist/cognitive/macro-agent-backend.js.map +1 -1
  68. package/dist/cognitive/team-lifecycle.d.ts +82 -0
  69. package/dist/cognitive/team-lifecycle.d.ts.map +1 -0
  70. package/dist/cognitive/team-lifecycle.js +121 -0
  71. package/dist/cognitive/team-lifecycle.js.map +1 -0
  72. package/dist/cognitive/trajectory-extractor.d.ts +25 -0
  73. package/dist/cognitive/trajectory-extractor.d.ts.map +1 -0
  74. package/dist/cognitive/trajectory-extractor.js +134 -0
  75. package/dist/cognitive/trajectory-extractor.js.map +1 -0
  76. package/dist/cognitive/types.d.ts +24 -0
  77. package/dist/cognitive/types.d.ts.map +1 -1
  78. package/dist/control/control-server.d.ts.map +1 -1
  79. package/dist/control/control-server.js +10 -0
  80. package/dist/control/control-server.js.map +1 -1
  81. package/dist/dispatch/mail-inbound-consumer.d.ts.map +1 -1
  82. package/dist/dispatch/mail-inbound-consumer.js +43 -10
  83. package/dist/dispatch/mail-inbound-consumer.js.map +1 -1
  84. package/dist/index.d.ts +5 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +6 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/lifecycle/handlers/generic.d.ts +27 -0
  89. package/dist/lifecycle/handlers/generic.d.ts.map +1 -0
  90. package/dist/lifecycle/handlers/generic.js +56 -0
  91. package/dist/lifecycle/handlers/generic.js.map +1 -0
  92. package/dist/lifecycle/handlers/index.d.ts +51 -0
  93. package/dist/lifecycle/handlers/index.d.ts.map +1 -0
  94. package/dist/lifecycle/handlers/index.js +110 -0
  95. package/dist/lifecycle/handlers/index.js.map +1 -0
  96. package/dist/lifecycle/handlers/integrator.d.ts +81 -0
  97. package/dist/lifecycle/handlers/integrator.d.ts.map +1 -0
  98. package/dist/lifecycle/handlers/integrator.js +451 -0
  99. package/dist/lifecycle/handlers/integrator.js.map +1 -0
  100. package/dist/lifecycle/handlers/monitor.d.ts +29 -0
  101. package/dist/lifecycle/handlers/monitor.d.ts.map +1 -0
  102. package/dist/lifecycle/handlers/monitor.js +79 -0
  103. package/dist/lifecycle/handlers/monitor.js.map +1 -0
  104. package/dist/lifecycle/handlers/worker.d.ts +56 -0
  105. package/dist/lifecycle/handlers/worker.d.ts.map +1 -0
  106. package/dist/lifecycle/handlers/worker.js +381 -0
  107. package/dist/lifecycle/handlers/worker.js.map +1 -0
  108. package/dist/lifecycle/handlers-v2.d.ts +0 -2
  109. package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
  110. package/dist/lifecycle/handlers-v2.js +4 -55
  111. package/dist/lifecycle/handlers-v2.js.map +1 -1
  112. package/dist/mail/conversation-map.d.ts +33 -0
  113. package/dist/mail/conversation-map.d.ts.map +1 -0
  114. package/dist/mail/conversation-map.js +61 -0
  115. package/dist/mail/conversation-map.js.map +1 -0
  116. package/dist/mail/index.d.ts +11 -0
  117. package/dist/mail/index.d.ts.map +1 -0
  118. package/dist/mail/index.js +11 -0
  119. package/dist/mail/index.js.map +1 -0
  120. package/dist/mail/mail-service.d.ts +85 -0
  121. package/dist/mail/mail-service.d.ts.map +1 -0
  122. package/dist/mail/mail-service.js +121 -0
  123. package/dist/mail/mail-service.js.map +1 -0
  124. package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
  125. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
  126. package/dist/mail/stores/eventstore-conversation-store.js +131 -0
  127. package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
  128. package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
  129. package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
  130. package/dist/mail/stores/eventstore-participant-store.js +145 -0
  131. package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
  132. package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
  133. package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
  134. package/dist/mail/stores/eventstore-thread-store.js +118 -0
  135. package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
  136. package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
  137. package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
  138. package/dist/mail/stores/eventstore-turn-store.js +153 -0
  139. package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
  140. package/dist/mail/stores/index.d.ts +12 -0
  141. package/dist/mail/stores/index.d.ts.map +1 -0
  142. package/dist/mail/stores/index.js +12 -0
  143. package/dist/mail/stores/index.js.map +1 -0
  144. package/dist/mail/stores/types.d.ts +146 -0
  145. package/dist/mail/stores/types.d.ts.map +1 -0
  146. package/dist/mail/stores/types.js +13 -0
  147. package/dist/mail/stores/types.js.map +1 -0
  148. package/dist/mail/turn-recorder.d.ts +30 -0
  149. package/dist/mail/turn-recorder.d.ts.map +1 -0
  150. package/dist/mail/turn-recorder.js +98 -0
  151. package/dist/mail/turn-recorder.js.map +1 -0
  152. package/dist/map/adapter/acp-over-map.d.ts +115 -0
  153. package/dist/map/adapter/acp-over-map.d.ts.map +1 -0
  154. package/dist/map/adapter/acp-over-map.js +1024 -0
  155. package/dist/map/adapter/acp-over-map.js.map +1 -0
  156. package/dist/map/adapter/connection-manager.d.ts +150 -0
  157. package/dist/map/adapter/connection-manager.d.ts.map +1 -0
  158. package/dist/map/adapter/connection-manager.js +207 -0
  159. package/dist/map/adapter/connection-manager.js.map +1 -0
  160. package/dist/map/adapter/event-log.d.ts +87 -0
  161. package/dist/map/adapter/event-log.d.ts.map +1 -0
  162. package/dist/map/adapter/event-log.js +122 -0
  163. package/dist/map/adapter/event-log.js.map +1 -0
  164. package/dist/map/adapter/event-translator.d.ts +85 -0
  165. package/dist/map/adapter/event-translator.d.ts.map +1 -0
  166. package/dist/map/adapter/event-translator.js +295 -0
  167. package/dist/map/adapter/event-translator.js.map +1 -0
  168. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  169. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  170. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  171. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  172. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  173. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  174. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  175. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  176. package/dist/map/adapter/extensions/cognitive.d.ts +27 -0
  177. package/dist/map/adapter/extensions/cognitive.d.ts.map +1 -0
  178. package/dist/map/adapter/extensions/cognitive.js +158 -0
  179. package/dist/map/adapter/extensions/cognitive.js.map +1 -0
  180. package/dist/map/adapter/extensions/index.d.ts +95 -0
  181. package/dist/map/adapter/extensions/index.d.ts.map +1 -0
  182. package/dist/map/adapter/extensions/index.js +228 -0
  183. package/dist/map/adapter/extensions/index.js.map +1 -0
  184. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  185. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  186. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  187. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  188. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  189. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  190. package/dist/map/adapter/extensions/resume.js +59 -0
  191. package/dist/map/adapter/extensions/resume.js.map +1 -0
  192. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  193. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  194. package/dist/map/adapter/extensions/streams.js +515 -0
  195. package/dist/map/adapter/extensions/streams.js.map +1 -0
  196. package/dist/map/adapter/extensions/task.d.ts +40 -0
  197. package/dist/map/adapter/extensions/task.d.ts.map +1 -0
  198. package/dist/map/adapter/extensions/task.js +197 -0
  199. package/dist/map/adapter/extensions/task.js.map +1 -0
  200. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  201. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  202. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  203. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  204. package/dist/map/adapter/extensions/wake.d.ts +60 -0
  205. package/dist/map/adapter/extensions/wake.d.ts.map +1 -0
  206. package/dist/map/adapter/extensions/wake.js +144 -0
  207. package/dist/map/adapter/extensions/wake.js.map +1 -0
  208. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  209. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  210. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  211. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  212. package/dist/map/adapter/extensions/workspace.d.ts +57 -0
  213. package/dist/map/adapter/extensions/workspace.d.ts.map +1 -0
  214. package/dist/map/adapter/extensions/workspace.js +81 -0
  215. package/dist/map/adapter/extensions/workspace.js.map +1 -0
  216. package/dist/map/adapter/index.d.ts +20 -0
  217. package/dist/map/adapter/index.d.ts.map +1 -0
  218. package/dist/map/adapter/index.js +40 -0
  219. package/dist/map/adapter/index.js.map +1 -0
  220. package/dist/map/adapter/interface.d.ts +450 -0
  221. package/dist/map/adapter/interface.d.ts.map +1 -0
  222. package/dist/map/adapter/interface.js +24 -0
  223. package/dist/map/adapter/interface.js.map +1 -0
  224. package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
  225. package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
  226. package/dist/map/adapter/mail-handler-adapter.js +292 -0
  227. package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
  228. package/dist/map/adapter/map-adapter.d.ts +200 -0
  229. package/dist/map/adapter/map-adapter.d.ts.map +1 -0
  230. package/dist/map/adapter/map-adapter.js +1199 -0
  231. package/dist/map/adapter/map-adapter.js.map +1 -0
  232. package/dist/map/adapter/rpc-handler.d.ts +263 -0
  233. package/dist/map/adapter/rpc-handler.d.ts.map +1 -0
  234. package/dist/map/adapter/rpc-handler.js +365 -0
  235. package/dist/map/adapter/rpc-handler.js.map +1 -0
  236. package/dist/map/adapter/subscription-manager.d.ts +174 -0
  237. package/dist/map/adapter/subscription-manager.d.ts.map +1 -0
  238. package/dist/map/adapter/subscription-manager.js +248 -0
  239. package/dist/map/adapter/subscription-manager.js.map +1 -0
  240. package/dist/map/adapter/types.d.ts +194 -0
  241. package/dist/map/adapter/types.d.ts.map +1 -0
  242. package/dist/map/adapter/types.js +27 -0
  243. package/dist/map/adapter/types.js.map +1 -0
  244. package/dist/map/adapter/websocket-integration.d.ts +113 -0
  245. package/dist/map/adapter/websocket-integration.d.ts.map +1 -0
  246. package/dist/map/adapter/websocket-integration.js +134 -0
  247. package/dist/map/adapter/websocket-integration.js.map +1 -0
  248. package/dist/map/cascade-action-handler.d.ts.map +1 -1
  249. package/dist/map/cascade-action-handler.js +19 -5
  250. package/dist/map/cascade-action-handler.js.map +1 -1
  251. package/dist/map/federation/envelope.d.ts +98 -0
  252. package/dist/map/federation/envelope.d.ts.map +1 -0
  253. package/dist/map/federation/envelope.js +160 -0
  254. package/dist/map/federation/envelope.js.map +1 -0
  255. package/dist/map/federation/federation-handler.d.ts +50 -0
  256. package/dist/map/federation/federation-handler.d.ts.map +1 -0
  257. package/dist/map/federation/federation-handler.js +306 -0
  258. package/dist/map/federation/federation-handler.js.map +1 -0
  259. package/dist/map/federation/index.d.ts +14 -0
  260. package/dist/map/federation/index.d.ts.map +1 -0
  261. package/dist/map/federation/index.js +13 -0
  262. package/dist/map/federation/index.js.map +1 -0
  263. package/dist/map/federation/types.d.ts +239 -0
  264. package/dist/map/federation/types.d.ts.map +1 -0
  265. package/dist/map/federation/types.js +23 -0
  266. package/dist/map/federation/types.js.map +1 -0
  267. package/dist/map/mail-bridge.d.ts +7 -0
  268. package/dist/map/mail-bridge.d.ts.map +1 -1
  269. package/dist/map/mail-bridge.js +39 -9
  270. package/dist/map/mail-bridge.js.map +1 -1
  271. package/dist/map/server.d.ts.map +1 -1
  272. package/dist/map/server.js +17 -2
  273. package/dist/map/server.js.map +1 -1
  274. package/dist/map/types.d.ts +6 -0
  275. package/dist/map/types.d.ts.map +1 -1
  276. package/dist/mcp/map-client.d.ts +39 -0
  277. package/dist/mcp/map-client.d.ts.map +1 -0
  278. package/dist/mcp/map-client.js +129 -0
  279. package/dist/mcp/map-client.js.map +1 -0
  280. package/dist/mcp/mcp-server.d.ts +72 -0
  281. package/dist/mcp/mcp-server.d.ts.map +1 -0
  282. package/dist/mcp/mcp-server.js +1027 -0
  283. package/dist/mcp/mcp-server.js.map +1 -0
  284. package/dist/mcp/tools/claim_task.d.ts +35 -0
  285. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  286. package/dist/mcp/tools/claim_task.js +58 -0
  287. package/dist/mcp/tools/claim_task.js.map +1 -0
  288. package/dist/mcp/tools/done-v2.d.ts +0 -1
  289. package/dist/mcp/tools/done-v2.d.ts.map +1 -1
  290. package/dist/mcp/tools/done-v2.js +0 -1
  291. package/dist/mcp/tools/done-v2.js.map +1 -1
  292. package/dist/mcp/tools/done.d.ts +102 -0
  293. package/dist/mcp/tools/done.d.ts.map +1 -0
  294. package/dist/mcp/tools/done.js +253 -0
  295. package/dist/mcp/tools/done.js.map +1 -0
  296. package/dist/mcp/tools/inject_context.d.ts +61 -0
  297. package/dist/mcp/tools/inject_context.d.ts.map +1 -0
  298. package/dist/mcp/tools/inject_context.js +123 -0
  299. package/dist/mcp/tools/inject_context.js.map +1 -0
  300. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  301. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  302. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  303. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  304. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  305. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  306. package/dist/mcp/tools/unclaim_task.js +47 -0
  307. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  308. package/dist/mcp/tools/wait_for_activity.d.ts +60 -0
  309. package/dist/mcp/tools/wait_for_activity.d.ts.map +1 -0
  310. package/dist/mcp/tools/wait_for_activity.js +135 -0
  311. package/dist/mcp/tools/wait_for_activity.js.map +1 -0
  312. package/dist/monitor/health-check-service.d.ts +143 -0
  313. package/dist/monitor/health-check-service.d.ts.map +1 -0
  314. package/dist/monitor/health-check-service.js +240 -0
  315. package/dist/monitor/health-check-service.js.map +1 -0
  316. package/dist/monitor/index.d.ts +14 -0
  317. package/dist/monitor/index.d.ts.map +1 -0
  318. package/dist/monitor/index.js +14 -0
  319. package/dist/monitor/index.js.map +1 -0
  320. package/dist/monitor/stall-detector.d.ts +109 -0
  321. package/dist/monitor/stall-detector.d.ts.map +1 -0
  322. package/dist/monitor/stall-detector.js +152 -0
  323. package/dist/monitor/stall-detector.js.map +1 -0
  324. package/dist/peer/capability-manager.d.ts +56 -0
  325. package/dist/peer/capability-manager.d.ts.map +1 -0
  326. package/dist/peer/capability-manager.js +186 -0
  327. package/dist/peer/capability-manager.js.map +1 -0
  328. package/dist/peer/encapsulation-manager.d.ts +190 -0
  329. package/dist/peer/encapsulation-manager.d.ts.map +1 -0
  330. package/dist/peer/encapsulation-manager.js +486 -0
  331. package/dist/peer/encapsulation-manager.js.map +1 -0
  332. package/dist/peer/federation-manager.d.ts +223 -0
  333. package/dist/peer/federation-manager.d.ts.map +1 -0
  334. package/dist/peer/federation-manager.js +528 -0
  335. package/dist/peer/federation-manager.js.map +1 -0
  336. package/dist/peer/hierarchy-errors.d.ts +208 -0
  337. package/dist/peer/hierarchy-errors.d.ts.map +1 -0
  338. package/dist/peer/hierarchy-errors.js +268 -0
  339. package/dist/peer/hierarchy-errors.js.map +1 -0
  340. package/dist/peer/hierarchy-protocol.d.ts +159 -0
  341. package/dist/peer/hierarchy-protocol.d.ts.map +1 -0
  342. package/dist/peer/hierarchy-protocol.js +142 -0
  343. package/dist/peer/hierarchy-protocol.js.map +1 -0
  344. package/dist/peer/index.d.ts +15 -0
  345. package/dist/peer/index.d.ts.map +1 -0
  346. package/dist/peer/index.js +15 -0
  347. package/dist/peer/index.js.map +1 -0
  348. package/dist/peer/peer-manager.d.ts +99 -0
  349. package/dist/peer/peer-manager.d.ts.map +1 -0
  350. package/dist/peer/peer-manager.js +333 -0
  351. package/dist/peer/peer-manager.js.map +1 -0
  352. package/dist/peer/task-delegation.d.ts +189 -0
  353. package/dist/peer/task-delegation.d.ts.map +1 -0
  354. package/dist/peer/task-delegation.js +303 -0
  355. package/dist/peer/task-delegation.js.map +1 -0
  356. package/dist/peer/transports/index.d.ts +8 -0
  357. package/dist/peer/transports/index.d.ts.map +1 -0
  358. package/dist/peer/transports/index.js +8 -0
  359. package/dist/peer/transports/index.js.map +1 -0
  360. package/dist/peer/transports/local-transport.d.ts +56 -0
  361. package/dist/peer/transports/local-transport.d.ts.map +1 -0
  362. package/dist/peer/transports/local-transport.js +263 -0
  363. package/dist/peer/transports/local-transport.js.map +1 -0
  364. package/dist/peer/transports/websocket-transport.d.ts +86 -0
  365. package/dist/peer/transports/websocket-transport.d.ts.map +1 -0
  366. package/dist/peer/transports/websocket-transport.js +338 -0
  367. package/dist/peer/transports/websocket-transport.js.map +1 -0
  368. package/dist/peer/types.d.ts +268 -0
  369. package/dist/peer/types.d.ts.map +1 -0
  370. package/dist/peer/types.js +36 -0
  371. package/dist/peer/types.js.map +1 -0
  372. package/dist/router/address-resolver.d.ts +102 -0
  373. package/dist/router/address-resolver.d.ts.map +1 -0
  374. package/dist/router/address-resolver.js +198 -0
  375. package/dist/router/address-resolver.js.map +1 -0
  376. package/dist/router/broadcast.d.ts +53 -0
  377. package/dist/router/broadcast.d.ts.map +1 -0
  378. package/dist/router/broadcast.js +75 -0
  379. package/dist/router/broadcast.js.map +1 -0
  380. package/dist/router/channels.d.ts +148 -0
  381. package/dist/router/channels.d.ts.map +1 -0
  382. package/dist/router/channels.js +126 -0
  383. package/dist/router/channels.js.map +1 -0
  384. package/dist/router/index.d.ts +21 -0
  385. package/dist/router/index.d.ts.map +1 -0
  386. package/dist/router/index.js +18 -0
  387. package/dist/router/index.js.map +1 -0
  388. package/dist/router/message-router.d.ts +197 -0
  389. package/dist/router/message-router.d.ts.map +1 -0
  390. package/dist/router/message-router.js +903 -0
  391. package/dist/router/message-router.js.map +1 -0
  392. package/dist/router/message-types.d.ts +183 -0
  393. package/dist/router/message-types.d.ts.map +1 -0
  394. package/dist/router/message-types.js +79 -0
  395. package/dist/router/message-types.js.map +1 -0
  396. package/dist/router/role-resolver.d.ts +67 -0
  397. package/dist/router/role-resolver.d.ts.map +1 -0
  398. package/dist/router/role-resolver.js +106 -0
  399. package/dist/router/role-resolver.js.map +1 -0
  400. package/dist/router/signals.d.ts +253 -0
  401. package/dist/router/signals.d.ts.map +1 -0
  402. package/dist/router/signals.js +53 -0
  403. package/dist/router/signals.js.map +1 -0
  404. package/dist/router/types.d.ts +191 -0
  405. package/dist/router/types.d.ts.map +1 -0
  406. package/dist/router/types.js +34 -0
  407. package/dist/router/types.js.map +1 -0
  408. package/dist/router/wake.d.ts +111 -0
  409. package/dist/router/wake.d.ts.map +1 -0
  410. package/dist/router/wake.js +180 -0
  411. package/dist/router/wake.js.map +1 -0
  412. package/dist/server/combined-server.d.ts +95 -0
  413. package/dist/server/combined-server.d.ts.map +1 -0
  414. package/dist/server/combined-server.js +335 -0
  415. package/dist/server/combined-server.js.map +1 -0
  416. package/dist/steering/index.d.ts +11 -0
  417. package/dist/steering/index.d.ts.map +1 -0
  418. package/dist/steering/index.js +11 -0
  419. package/dist/steering/index.js.map +1 -0
  420. package/dist/steering/inject.d.ts +39 -0
  421. package/dist/steering/inject.d.ts.map +1 -0
  422. package/dist/steering/inject.js +197 -0
  423. package/dist/steering/inject.js.map +1 -0
  424. package/dist/steering/types.d.ts +100 -0
  425. package/dist/steering/types.d.ts.map +1 -0
  426. package/dist/steering/types.js +11 -0
  427. package/dist/steering/types.js.map +1 -0
  428. package/dist/store/backends/index.d.ts +11 -0
  429. package/dist/store/backends/index.d.ts.map +1 -0
  430. package/dist/store/backends/index.js +15 -0
  431. package/dist/store/backends/index.js.map +1 -0
  432. package/dist/store/backends/json-backend.d.ts +23 -0
  433. package/dist/store/backends/json-backend.d.ts.map +1 -0
  434. package/dist/store/backends/json-backend.js +220 -0
  435. package/dist/store/backends/json-backend.js.map +1 -0
  436. package/dist/store/backends/memory-backend.d.ts +12 -0
  437. package/dist/store/backends/memory-backend.d.ts.map +1 -0
  438. package/dist/store/backends/memory-backend.js +205 -0
  439. package/dist/store/backends/memory-backend.js.map +1 -0
  440. package/dist/store/backends/sqlite-backend.d.ts +27 -0
  441. package/dist/store/backends/sqlite-backend.d.ts.map +1 -0
  442. package/dist/store/backends/sqlite-backend.js +231 -0
  443. package/dist/store/backends/sqlite-backend.js.map +1 -0
  444. package/dist/store/backends/tinybase-backend.d.ts +22 -0
  445. package/dist/store/backends/tinybase-backend.d.ts.map +1 -0
  446. package/dist/store/backends/tinybase-backend.js +203 -0
  447. package/dist/store/backends/tinybase-backend.js.map +1 -0
  448. package/dist/store/backends/types.d.ts +175 -0
  449. package/dist/store/backends/types.d.ts.map +1 -0
  450. package/dist/store/backends/types.js +28 -0
  451. package/dist/store/backends/types.js.map +1 -0
  452. package/dist/store/event-store.d.ts +128 -0
  453. package/dist/store/event-store.d.ts.map +1 -0
  454. package/dist/store/event-store.js +1751 -0
  455. package/dist/store/event-store.js.map +1 -0
  456. package/dist/store/instance.d.ts +290 -0
  457. package/dist/store/instance.d.ts.map +1 -0
  458. package/dist/store/instance.js +363 -0
  459. package/dist/store/instance.js.map +1 -0
  460. package/dist/store/migrations.d.ts +41 -0
  461. package/dist/store/migrations.d.ts.map +1 -0
  462. package/dist/store/migrations.js +79 -0
  463. package/dist/store/migrations.js.map +1 -0
  464. package/dist/store/test-utils.d.ts +63 -0
  465. package/dist/store/test-utils.d.ts.map +1 -0
  466. package/dist/store/test-utils.js +63 -0
  467. package/dist/store/test-utils.js.map +1 -0
  468. package/dist/store/types/config.d.ts +16 -0
  469. package/dist/store/types/config.d.ts.map +1 -0
  470. package/dist/store/types/config.js +8 -0
  471. package/dist/store/types/config.js.map +1 -0
  472. package/dist/store/types/conversations.d.ts +91 -0
  473. package/dist/store/types/conversations.d.ts.map +1 -0
  474. package/dist/store/types/conversations.js +8 -0
  475. package/dist/store/types/conversations.js.map +1 -0
  476. package/dist/store/types/sessions.d.ts +44 -0
  477. package/dist/store/types/sessions.d.ts.map +1 -0
  478. package/dist/store/types/sessions.js +9 -0
  479. package/dist/store/types/sessions.js.map +1 -0
  480. package/dist/store/types.d.ts +115 -0
  481. package/dist/store/types.d.ts.map +1 -0
  482. package/dist/store/types.js +6 -0
  483. package/dist/store/types.js.map +1 -0
  484. package/dist/task/backend/index.d.ts +93 -0
  485. package/dist/task/backend/index.d.ts.map +1 -0
  486. package/dist/task/backend/index.js +178 -0
  487. package/dist/task/backend/index.js.map +1 -0
  488. package/dist/task/backend/memory.d.ts +70 -0
  489. package/dist/task/backend/memory.d.ts.map +1 -0
  490. package/dist/task/backend/memory.js +621 -0
  491. package/dist/task/backend/memory.js.map +1 -0
  492. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  493. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  494. package/dist/task/backend/opentasks/backend.js +1023 -0
  495. package/dist/task/backend/opentasks/backend.js.map +1 -0
  496. package/dist/task/backend/opentasks/client.d.ts +337 -0
  497. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  498. package/dist/task/backend/opentasks/client.js +225 -0
  499. package/dist/task/backend/opentasks/client.js.map +1 -0
  500. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  501. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  502. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  503. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  504. package/dist/task/backend/opentasks/index.d.ts +21 -0
  505. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  506. package/dist/task/backend/opentasks/index.js +21 -0
  507. package/dist/task/backend/opentasks/index.js.map +1 -0
  508. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  509. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  510. package/dist/task/backend/opentasks/mapping.js +77 -0
  511. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  512. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +54 -0
  513. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +1 -0
  514. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +88 -0
  515. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +1 -0
  516. package/dist/task/backend/sudocode/backend.d.ts +155 -0
  517. package/dist/task/backend/sudocode/backend.d.ts.map +1 -0
  518. package/dist/task/backend/sudocode/backend.js +942 -0
  519. package/dist/task/backend/sudocode/backend.js.map +1 -0
  520. package/dist/task/backend/sudocode/client.d.ts +303 -0
  521. package/dist/task/backend/sudocode/client.d.ts.map +1 -0
  522. package/dist/task/backend/sudocode/client.js +101 -0
  523. package/dist/task/backend/sudocode/client.js.map +1 -0
  524. package/dist/task/backend/sudocode/index.d.ts +19 -0
  525. package/dist/task/backend/sudocode/index.d.ts.map +1 -0
  526. package/dist/task/backend/sudocode/index.js +17 -0
  527. package/dist/task/backend/sudocode/index.js.map +1 -0
  528. package/dist/task/backend/sudocode/mapping.d.ts +51 -0
  529. package/dist/task/backend/sudocode/mapping.d.ts.map +1 -0
  530. package/dist/task/backend/sudocode/mapping.js +86 -0
  531. package/dist/task/backend/sudocode/mapping.js.map +1 -0
  532. package/dist/task/backend/sudocode/server-client.d.ts +56 -0
  533. package/dist/task/backend/sudocode/server-client.d.ts.map +1 -0
  534. package/dist/task/backend/sudocode/server-client.js +367 -0
  535. package/dist/task/backend/sudocode/server-client.js.map +1 -0
  536. package/dist/task/backend/sudocode/standalone-client.d.ts +91 -0
  537. package/dist/task/backend/sudocode/standalone-client.d.ts.map +1 -0
  538. package/dist/task/backend/sudocode/standalone-client.js +476 -0
  539. package/dist/task/backend/sudocode/standalone-client.js.map +1 -0
  540. package/dist/task/backend/sudocode/sync-policy.d.ts +166 -0
  541. package/dist/task/backend/sudocode/sync-policy.d.ts.map +1 -0
  542. package/dist/task/backend/sudocode/sync-policy.js +221 -0
  543. package/dist/task/backend/sudocode/sync-policy.js.map +1 -0
  544. package/dist/task/backend/sudocode/tools.d.ts +87 -0
  545. package/dist/task/backend/sudocode/tools.d.ts.map +1 -0
  546. package/dist/task/backend/sudocode/tools.js +743 -0
  547. package/dist/task/backend/sudocode/tools.js.map +1 -0
  548. package/dist/task/backend/tool-provider.d.ts +56 -0
  549. package/dist/task/backend/tool-provider.d.ts.map +1 -0
  550. package/dist/task/backend/tool-provider.js +424 -0
  551. package/dist/task/backend/tool-provider.js.map +1 -0
  552. package/dist/task/backend/types.d.ts +297 -0
  553. package/dist/task/backend/types.d.ts.map +1 -0
  554. package/dist/task/backend/types.js +27 -0
  555. package/dist/task/backend/types.js.map +1 -0
  556. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  557. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  558. package/dist/task/backend/unified-tool-provider.js +623 -0
  559. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  560. package/dist/task/index.d.ts +7 -0
  561. package/dist/task/index.d.ts.map +1 -0
  562. package/dist/task/index.js +7 -0
  563. package/dist/task/index.js.map +1 -0
  564. package/dist/task/retry-policy.d.ts +89 -0
  565. package/dist/task/retry-policy.d.ts.map +1 -0
  566. package/dist/task/retry-policy.js +160 -0
  567. package/dist/task/retry-policy.js.map +1 -0
  568. package/dist/task/task-manager.d.ts +70 -0
  569. package/dist/task/task-manager.d.ts.map +1 -0
  570. package/dist/task/task-manager.js +319 -0
  571. package/dist/task/task-manager.js.map +1 -0
  572. package/dist/task/types.d.ts +72 -0
  573. package/dist/task/types.d.ts.map +1 -0
  574. package/dist/task/types.js +33 -0
  575. package/dist/task/types.js.map +1 -0
  576. package/dist/teams/team-loader.d.ts +2 -1
  577. package/dist/teams/team-loader.d.ts.map +1 -1
  578. package/dist/teams/team-loader.js +2 -1
  579. package/dist/teams/team-loader.js.map +1 -1
  580. package/dist/teams/team-manager.d.ts +101 -0
  581. package/dist/teams/team-manager.d.ts.map +1 -0
  582. package/dist/teams/team-manager.js +260 -0
  583. package/dist/teams/team-manager.js.map +1 -0
  584. package/dist/teams/team-runtime-v2.d.ts +0 -3
  585. package/dist/teams/team-runtime-v2.d.ts.map +1 -1
  586. package/dist/teams/team-runtime-v2.js +31 -93
  587. package/dist/teams/team-runtime-v2.js.map +1 -1
  588. package/dist/teams/team-runtime.d.ts +245 -0
  589. package/dist/teams/team-runtime.d.ts.map +1 -0
  590. package/dist/teams/team-runtime.js +1023 -0
  591. package/dist/teams/team-runtime.js.map +1 -0
  592. package/dist/trigger/router/index.d.ts +11 -0
  593. package/dist/trigger/router/index.d.ts.map +1 -0
  594. package/dist/trigger/router/index.js +10 -0
  595. package/dist/trigger/router/index.js.map +1 -0
  596. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +34 -0
  597. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +1 -0
  598. package/dist/trigger/router/strategies/ai-router-strategy.js +359 -0
  599. package/dist/trigger/router/strategies/ai-router-strategy.js.map +1 -0
  600. package/dist/trigger/router/strategies/direct-strategy.d.ts +32 -0
  601. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +1 -0
  602. package/dist/trigger/router/strategies/direct-strategy.js +119 -0
  603. package/dist/trigger/router/strategies/direct-strategy.js.map +1 -0
  604. package/dist/trigger/router/strategies/index.d.ts +11 -0
  605. package/dist/trigger/router/strategies/index.d.ts.map +1 -0
  606. package/dist/trigger/router/strategies/index.js +11 -0
  607. package/dist/trigger/router/strategies/index.js.map +1 -0
  608. package/dist/trigger/router/strategies/role-strategy.d.ts +39 -0
  609. package/dist/trigger/router/strategies/role-strategy.d.ts.map +1 -0
  610. package/dist/trigger/router/strategies/role-strategy.js +207 -0
  611. package/dist/trigger/router/strategies/role-strategy.js.map +1 -0
  612. package/dist/trigger/router/trigger-router.d.ts +54 -0
  613. package/dist/trigger/router/trigger-router.d.ts.map +1 -0
  614. package/dist/trigger/router/trigger-router.js +362 -0
  615. package/dist/trigger/router/trigger-router.js.map +1 -0
  616. package/dist/trigger/router/types.d.ts +225 -0
  617. package/dist/trigger/router/types.d.ts.map +1 -0
  618. package/dist/trigger/router/types.js +10 -0
  619. package/dist/trigger/router/types.js.map +1 -0
  620. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  621. package/dist/trigger/sources/cron/cron-service.js +6 -3
  622. package/dist/trigger/sources/cron/cron-service.js.map +1 -1
  623. package/dist/trigger/trigger-system.d.ts +77 -0
  624. package/dist/trigger/trigger-system.d.ts.map +1 -0
  625. package/dist/trigger/trigger-system.js +84 -0
  626. package/dist/trigger/trigger-system.js.map +1 -0
  627. package/dist/util/git-safety.d.ts +33 -0
  628. package/dist/util/git-safety.d.ts.map +1 -0
  629. package/dist/util/git-safety.js +94 -0
  630. package/dist/util/git-safety.js.map +1 -0
  631. package/dist/workspace/index.d.ts +0 -1
  632. package/dist/workspace/index.d.ts.map +1 -1
  633. package/dist/workspace/index.js +0 -2
  634. package/dist/workspace/index.js.map +1 -1
  635. package/dist/workspace/landing/direct-push.d.ts.map +1 -1
  636. package/dist/workspace/landing/direct-push.js +22 -7
  637. package/dist/workspace/landing/direct-push.js.map +1 -1
  638. package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -1
  639. package/dist/workspace/landing/queue-to-branch.js +1 -3
  640. package/dist/workspace/landing/queue-to-branch.js.map +1 -1
  641. package/dist/workspace/types.d.ts +0 -13
  642. package/dist/workspace/types.d.ts.map +1 -1
  643. package/dist/workspace/workspace-manager.d.ts +0 -11
  644. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  645. package/dist/workspace/workspace-manager.js +0 -30
  646. package/dist/workspace/workspace-manager.js.map +1 -1
  647. package/package.json +28 -2
  648. package/templates/teams/self-driving/prompts/grinder.md +1 -0
  649. package/templates/teams/self-driving/prompts/judge.md +1 -0
  650. package/templates/teams/self-driving/prompts/planner.md +1 -0
  651. package/templates/teams/self-driving/roles/grinder.yaml +15 -0
  652. package/templates/teams/self-driving/roles/judge.yaml +10 -0
  653. package/templates/teams/self-driving/roles/planner.yaml +16 -0
  654. package/.claude/commands/openspec/apply.md +0 -23
  655. package/.claude/commands/openspec/archive.md +0 -27
  656. package/.claude/commands/openspec/proposal.md +0 -28
  657. package/.claude/settings.json +0 -133
  658. package/.gitattributes +0 -3
  659. package/.opentasks/config.json +0 -9
  660. package/.opentasks/graph.jsonl +0 -0
  661. package/.sessionlog/settings.json +0 -4
  662. package/.sudocode/issues.jsonl +0 -183
  663. package/.sudocode/specs.jsonl +0 -56
  664. package/AGENTS.md +0 -18
  665. package/CLAUDE.md +0 -923
  666. package/docs/architecture.md +0 -508
  667. package/docs/configuration.md +0 -323
  668. package/docs/conflict-recovery.md +0 -472
  669. package/docs/design/task-dispatcher.md +0 -880
  670. package/docs/design-subsystem-extraction.md +0 -627
  671. package/docs/git-cascade-integration-gaps.md +0 -678
  672. package/docs/implementation-details.md +0 -1127
  673. package/docs/implementation-summary.md +0 -448
  674. package/docs/lifecycle-events-design.md +0 -111
  675. package/docs/mail-integration.md +0 -608
  676. package/docs/openhive-capability-summary.md +0 -415
  677. package/docs/openhive-integration.md +0 -415
  678. package/docs/plan-self-driving-support.md +0 -433
  679. package/docs/roadmap-v2-gaps.md +0 -216
  680. package/docs/spec-self-driving-support.md +0 -462
  681. package/docs/team-templates.md +0 -860
  682. package/docs/teams.md +0 -306
  683. package/docs/trigger-system-design.md +0 -333
  684. package/docs/troubleshooting.md +0 -489
  685. package/docs/workspace-interfaces.md +0 -731
  686. package/docs/workspace-redesign-plan.md +0 -302
  687. package/examples/distributed-peer-communication.ts +0 -202
  688. package/examples/local-peer-communication.ts +0 -165
  689. package/index.js +0 -2
  690. package/mvp_docs/agent-execution-system.md +0 -347
  691. package/mvp_docs/agent-interface.md +0 -580
  692. package/mvp_docs/data-structures.md +0 -701
  693. package/mvp_docs/dynamic-meta-orchestration.md +0 -116
  694. package/mvp_docs/multi-agent-interaction-design.md +0 -779
  695. package/mvp_docs/mvp-implementation-plan.md +0 -1148
  696. package/renovate.json5 +0 -6
  697. package/scripts/test-acp-integration.ts +0 -422
  698. package/src/__tests__/boot-v2.test.ts +0 -631
  699. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +0 -496
  700. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +0 -457
  701. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +0 -770
  702. package/src/__tests__/e2e/auto-sync.e2e.test.ts +0 -257
  703. package/src/__tests__/e2e/bootstrap.e2e.test.ts +0 -319
  704. package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +0 -254
  705. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +0 -253
  706. package/src/__tests__/e2e/cli-run.e2e.test.ts +0 -167
  707. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +0 -282
  708. package/src/__tests__/e2e/dispatch-coordination.e2e.test.ts +0 -495
  709. package/src/__tests__/e2e/dispatch-live.e2e.test.ts +0 -564
  710. package/src/__tests__/e2e/dispatch-opentasks.e2e.test.ts +0 -496
  711. package/src/__tests__/e2e/dispatch-phase2-live.e2e.test.ts +0 -456
  712. package/src/__tests__/e2e/dispatch-phase2.e2e.test.ts +0 -386
  713. package/src/__tests__/e2e/dispatch.e2e.test.ts +0 -376
  714. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +0 -322
  715. package/src/__tests__/e2e/live-agent.e2e.test.ts +0 -1330
  716. package/src/__tests__/e2e/map-server.e2e.test.ts +0 -128
  717. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +0 -139
  718. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +0 -280
  719. package/src/__tests__/e2e/pull-mode.e2e.test.ts +0 -632
  720. package/src/__tests__/e2e/resume-continue.e2e.test.ts +0 -312
  721. package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +0 -197
  722. package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +0 -200
  723. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +0 -562
  724. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +0 -1049
  725. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +0 -258
  726. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +0 -257
  727. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +0 -383
  728. package/src/__tests__/e2e/workspace-v3.e2e.test.ts +0 -413
  729. package/src/acp/__tests__/claude-code-replay.test.ts +0 -225
  730. package/src/acp/__tests__/macro-agent.test.ts +0 -387
  731. package/src/acp/__tests__/session-mapper.test.ts +0 -152
  732. package/src/acp/__tests__/websocket-server.test.ts +0 -194
  733. package/src/acp/claude-code-replay.ts +0 -208
  734. package/src/acp/index.ts +0 -32
  735. package/src/acp/macro-agent.ts +0 -995
  736. package/src/acp/map-bridge.ts +0 -193
  737. package/src/acp/session-mapper.ts +0 -116
  738. package/src/acp/types.ts +0 -99
  739. package/src/acp/websocket-server.ts +0 -213
  740. package/src/adapters/__tests__/federation.test.ts +0 -256
  741. package/src/adapters/__tests__/inbox-adapter.test.ts +0 -316
  742. package/src/adapters/__tests__/tasks-adapter.test.ts +0 -270
  743. package/src/adapters/federation.ts +0 -185
  744. package/src/adapters/inbox-adapter.ts +0 -292
  745. package/src/adapters/inbox-client-adapter.ts +0 -173
  746. package/src/adapters/index.ts +0 -44
  747. package/src/adapters/opentasks-daemon.ts +0 -252
  748. package/src/adapters/tasks-adapter.ts +0 -330
  749. package/src/adapters/types.ts +0 -286
  750. package/src/agent/__tests__/agent-manager-topology.test.ts +0 -73
  751. package/src/agent/__tests__/agent-manager-v2.permission-interception.test.ts +0 -296
  752. package/src/agent/__tests__/agent-manager-v2.permissions.test.ts +0 -233
  753. package/src/agent/__tests__/agent-manager-v2.test.ts +0 -614
  754. package/src/agent/__tests__/agent-store.test.ts +0 -465
  755. package/src/agent/__tests__/task-ref-resolution.test.ts +0 -231
  756. package/src/agent/agent-manager-v2.ts +0 -2021
  757. package/src/agent/agent-manager.ts +0 -386
  758. package/src/agent/agent-store.ts +0 -409
  759. package/src/agent/index.ts +0 -7
  760. package/src/agent/prompts/coordinator-signals.ts +0 -115
  761. package/src/agent/prompts/index.ts +0 -7
  762. package/src/agent/system-prompt.ts +0 -298
  763. package/src/agent/types.ts +0 -459
  764. package/src/agent-detection/__tests__/command-builder.test.ts +0 -336
  765. package/src/agent-detection/__tests__/detector.test.ts +0 -768
  766. package/src/agent-detection/__tests__/registry.test.ts +0 -254
  767. package/src/agent-detection/command-builder.ts +0 -90
  768. package/src/agent-detection/detector.ts +0 -307
  769. package/src/agent-detection/index.ts +0 -36
  770. package/src/agent-detection/registry.ts +0 -200
  771. package/src/agent-detection/types.ts +0 -184
  772. package/src/api/__tests__/server.test.ts +0 -292
  773. package/src/api/index.ts +0 -8
  774. package/src/api/server.ts +0 -380
  775. package/src/api/types.ts +0 -39
  776. package/src/auth/__tests__/token.test.ts +0 -100
  777. package/src/auth/index.ts +0 -1
  778. package/src/auth/token.ts +0 -82
  779. package/src/boot-v2.ts +0 -1343
  780. package/src/cli/__tests__/stable-instance-id.test.ts +0 -57
  781. package/src/cli/acp.ts +0 -101
  782. package/src/cli/inbox-mcp-proxy.ts +0 -56
  783. package/src/cli/index.ts +0 -566
  784. package/src/cli/mcp.ts +0 -305
  785. package/src/cli/parse-args.ts +0 -54
  786. package/src/cli/stable-instance-id.ts +0 -14
  787. package/src/cognitive/__tests__/macro-agent-backend.test.ts +0 -520
  788. package/src/cognitive/__tests__/session-converter.test.ts +0 -423
  789. package/src/cognitive/__tests__/workspace-handler.test.ts +0 -221
  790. package/src/cognitive/analyst-role.ts +0 -59
  791. package/src/cognitive/index.ts +0 -49
  792. package/src/cognitive/macro-agent-backend.ts +0 -370
  793. package/src/cognitive/session-converter.ts +0 -151
  794. package/src/cognitive/types.ts +0 -163
  795. package/src/cognitive/workspace-handler.ts +0 -163
  796. package/src/config/index.ts +0 -9
  797. package/src/config/project-config.ts +0 -294
  798. package/src/control/__tests__/control-resilience.test.ts +0 -251
  799. package/src/control/__tests__/control-socket.test.ts +0 -240
  800. package/src/control/control-client.ts +0 -337
  801. package/src/control/control-server.ts +0 -298
  802. package/src/control/index.ts +0 -17
  803. package/src/control/types.ts +0 -95
  804. package/src/dispatch/CLAUDE.md +0 -129
  805. package/src/dispatch/__tests__/loadout-translation.test.ts +0 -141
  806. package/src/dispatch/__tests__/mail-inbound-consumer.integration.test.ts +0 -519
  807. package/src/dispatch/__tests__/mail-inbound-consumer.test.ts +0 -800
  808. package/src/dispatch/__tests__/mail-inbound-reuse-consumer.test.ts +0 -575
  809. package/src/dispatch/__tests__/permission-evaluator.test.ts +0 -196
  810. package/src/dispatch/__tests__/permission-overlay.test.ts +0 -56
  811. package/src/dispatch/__tests__/permissions-handler.test.ts +0 -168
  812. package/src/dispatch/__tests__/spawn-agent-handler.test.ts +0 -282
  813. package/src/dispatch/loadout-translation.ts +0 -138
  814. package/src/dispatch/mail-inbound-consumer.ts +0 -560
  815. package/src/dispatch/mail-inbound-reuse-consumer.ts +0 -479
  816. package/src/dispatch/permission-evaluator.ts +0 -191
  817. package/src/dispatch/permission-overlay.ts +0 -89
  818. package/src/dispatch/permissions-handler.ts +0 -112
  819. package/src/dispatch/spawn-agent-handler.ts +0 -160
  820. package/src/index.ts +0 -115
  821. package/src/integrations/__tests__/context-builder.test.ts +0 -218
  822. package/src/integrations/__tests__/sessionlog.test.ts +0 -498
  823. package/src/integrations/__tests__/skilltree.test.ts +0 -136
  824. package/src/integrations/context-builder.ts +0 -280
  825. package/src/integrations/sessionlog.ts +0 -194
  826. package/src/integrations/skilltree.ts +0 -184
  827. package/src/lifecycle/__tests__/cascade-consolidation.test.ts +0 -240
  828. package/src/lifecycle/__tests__/handlers-v2.test.ts +0 -565
  829. package/src/lifecycle/cascade.ts +0 -335
  830. package/src/lifecycle/cleanup.ts +0 -373
  831. package/src/lifecycle/handlers-v2.ts +0 -508
  832. package/src/lifecycle/index.ts +0 -76
  833. package/src/lifecycle/types.ts +0 -260
  834. package/src/map/__tests__/cascade-bridge.test.ts +0 -229
  835. package/src/map/__tests__/cascade-diff-server.test.ts +0 -434
  836. package/src/map/__tests__/emit-event.test.ts +0 -71
  837. package/src/map/__tests__/lifecycle-bridge.test.ts +0 -430
  838. package/src/map/__tests__/mail-bridge.test.ts +0 -284
  839. package/src/map/__tests__/permission-forwarding.test.ts +0 -143
  840. package/src/map/__tests__/sidecar-diff-install-smoke.test.ts +0 -90
  841. package/src/map/__tests__/sidecar-integration.test.ts +0 -190
  842. package/src/map/__tests__/task-bridge.test.ts +0 -153
  843. package/src/map/__tests__/trajectory-reporter.test.ts +0 -173
  844. package/src/map/acp-bridge.ts +0 -293
  845. package/src/map/cascade-action-handler.ts +0 -205
  846. package/src/map/cascade-bridge.ts +0 -339
  847. package/src/map/cascade-diff-server.ts +0 -404
  848. package/src/map/cc-swarm-hooks.ts +0 -242
  849. package/src/map/coordination-handler.ts +0 -232
  850. package/src/map/index.ts +0 -18
  851. package/src/map/lifecycle-bridge.ts +0 -236
  852. package/src/map/mail-bridge.ts +0 -215
  853. package/src/map/repo-workspace.ts +0 -82
  854. package/src/map/server.ts +0 -758
  855. package/src/map/sidecar.ts +0 -826
  856. package/src/map/task-bridge.ts +0 -89
  857. package/src/map/trajectory-reporter.ts +0 -124
  858. package/src/map/types.ts +0 -304
  859. package/src/mcp/__tests__/mcp-server-v2.test.ts +0 -236
  860. package/src/mcp/index.ts +0 -6
  861. package/src/mcp/mcp-server-v2.ts +0 -485
  862. package/src/mcp/tools/done-v2.ts +0 -213
  863. package/src/mcp/types.ts +0 -432
  864. package/src/metrics/__tests__/metrics.test.ts +0 -205
  865. package/src/metrics/index.ts +0 -13
  866. package/src/metrics/metrics.ts +0 -151
  867. package/src/metrics/types.ts +0 -63
  868. package/src/roles/__tests__/config-loader.test.ts +0 -540
  869. package/src/roles/builtin/coordinator.ts +0 -75
  870. package/src/roles/builtin/generic.ts +0 -39
  871. package/src/roles/builtin/index.ts +0 -51
  872. package/src/roles/builtin/integrator.ts +0 -62
  873. package/src/roles/builtin/monitor.ts +0 -65
  874. package/src/roles/builtin/worker.ts +0 -134
  875. package/src/roles/capabilities.ts +0 -257
  876. package/src/roles/config-loader.ts +0 -405
  877. package/src/roles/index.ts +0 -141
  878. package/src/roles/registry.ts +0 -713
  879. package/src/roles/types.ts +0 -344
  880. package/src/store/index.ts +0 -8
  881. package/src/store/types/agents.ts +0 -69
  882. package/src/store/types/events.ts +0 -91
  883. package/src/store/types/index.ts +0 -9
  884. package/src/store/types/messages.ts +0 -32
  885. package/src/store/types/primitives.ts +0 -9
  886. package/src/store/types/tasks.ts +0 -124
  887. package/src/teams/__tests__/team-manager-v2.test.ts +0 -425
  888. package/src/teams/__tests__/team-runtime-v2.test.ts +0 -402
  889. package/src/teams/index.ts +0 -29
  890. package/src/teams/seed-defaults.ts +0 -83
  891. package/src/teams/team-loader.ts +0 -476
  892. package/src/teams/team-manager-v2.ts +0 -343
  893. package/src/teams/team-runtime-v2.ts +0 -920
  894. package/src/teams/types.ts +0 -276
  895. package/src/trigger/__tests__/cron-service.test.ts +0 -548
  896. package/src/trigger/__tests__/scheduler.test.ts +0 -371
  897. package/src/trigger/__tests__/system-event-queue.test.ts +0 -147
  898. package/src/trigger/__tests__/trigger-system-v2.test.ts +0 -257
  899. package/src/trigger/__tests__/wake-manager.test.ts +0 -356
  900. package/src/trigger/__tests__/webhook-handler.test.ts +0 -567
  901. package/src/trigger/index.ts +0 -110
  902. package/src/trigger/queue/index.ts +0 -21
  903. package/src/trigger/queue/system-event-queue.ts +0 -232
  904. package/src/trigger/queue/types.ts +0 -149
  905. package/src/trigger/sources/cron/cron-service.ts +0 -499
  906. package/src/trigger/sources/cron/index.ts +0 -41
  907. package/src/trigger/sources/cron/scheduler.ts +0 -344
  908. package/src/trigger/sources/cron/types.ts +0 -333
  909. package/src/trigger/sources/index.ts +0 -10
  910. package/src/trigger/sources/webhook/index.ts +0 -25
  911. package/src/trigger/sources/webhook/types.ts +0 -205
  912. package/src/trigger/sources/webhook/webhook-handler.ts +0 -410
  913. package/src/trigger/strategies/ai-router.ts +0 -170
  914. package/src/trigger/trigger-system-v2.ts +0 -536
  915. package/src/trigger/types.ts +0 -228
  916. package/src/trigger/wake/index.ts +0 -22
  917. package/src/trigger/wake/types.ts +0 -162
  918. package/src/trigger/wake/wake-manager.ts +0 -390
  919. package/src/workspace/__tests__/git-cascade-adapter.test.ts +0 -563
  920. package/src/workspace/__tests__/land-dispatch.test.ts +0 -214
  921. package/src/workspace/__tests__/self-driving-yaml.test.ts +0 -122
  922. package/src/workspace/__tests__/shared-worktree-refcount.test.ts +0 -154
  923. package/src/workspace/__tests__/standalone-mode.test.ts +0 -118
  924. package/src/workspace/__tests__/workspace-manager-v3.test.ts +0 -245
  925. package/src/workspace/__tests__/yaml-schema.test.ts +0 -210
  926. package/src/workspace/config.ts +0 -165
  927. package/src/workspace/git-cascade-adapter.ts +0 -1213
  928. package/src/workspace/index.ts +0 -110
  929. package/src/workspace/landing/__tests__/strategies.test.ts +0 -184
  930. package/src/workspace/landing/direct-push.ts +0 -91
  931. package/src/workspace/landing/index.ts +0 -40
  932. package/src/workspace/landing/merge-to-parent.ts +0 -229
  933. package/src/workspace/landing/optimistic-push.ts +0 -36
  934. package/src/workspace/landing/queue-to-branch.ts +0 -108
  935. package/src/workspace/merge-queue/__tests__/conflict-resolution-git.e2e.test.ts +0 -641
  936. package/src/workspace/merge-queue/__tests__/conflict-resolution.test.ts +0 -707
  937. package/src/workspace/merge-queue/__tests__/merge-queue-concurrent.test.ts +0 -628
  938. package/src/workspace/merge-queue/__tests__/merge-queue-edge-cases.test.ts +0 -1217
  939. package/src/workspace/merge-queue/__tests__/merge-queue.test.ts +0 -506
  940. package/src/workspace/merge-queue/__tests__/real-git-operations.e2e.test.ts +0 -556
  941. package/src/workspace/merge-queue/__tests__/resolver-flow.test.ts +0 -472
  942. package/src/workspace/merge-queue/index.ts +0 -38
  943. package/src/workspace/merge-queue/merge-queue.ts +0 -585
  944. package/src/workspace/merge-queue/schema.ts +0 -98
  945. package/src/workspace/merge-queue/types.ts +0 -316
  946. package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +0 -1281
  947. package/src/workspace/pool/__tests__/worktree-pool.test.ts +0 -590
  948. package/src/workspace/pool/index.ts +0 -26
  949. package/src/workspace/pool/types.ts +0 -276
  950. package/src/workspace/pool/worktree-pool.ts +0 -659
  951. package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +0 -127
  952. package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +0 -139
  953. package/src/workspace/recovery/__tests__/strategies.test.ts +0 -145
  954. package/src/workspace/recovery/abandon.ts +0 -51
  955. package/src/workspace/recovery/auto-resolve.ts +0 -119
  956. package/src/workspace/recovery/defer.ts +0 -23
  957. package/src/workspace/recovery/escalate.ts +0 -30
  958. package/src/workspace/recovery/index.ts +0 -58
  959. package/src/workspace/recovery/spawn-resolver.ts +0 -152
  960. package/src/workspace/recovery/types.ts +0 -54
  961. package/src/workspace/strategies/index.ts +0 -18
  962. package/src/workspace/strategies/optimistic.ts +0 -139
  963. package/src/workspace/strategies/queue.ts +0 -81
  964. package/src/workspace/strategies/registry.ts +0 -89
  965. package/src/workspace/strategies/trunk.ts +0 -123
  966. package/src/workspace/strategies/types.ts +0 -145
  967. package/src/workspace/topology/__tests__/yaml-driven.test.ts +0 -345
  968. package/src/workspace/topology/index.ts +0 -18
  969. package/src/workspace/topology/no-workspace.ts +0 -39
  970. package/src/workspace/topology/types.ts +0 -116
  971. package/src/workspace/topology/yaml-driven.ts +0 -316
  972. package/src/workspace/types-v3.ts +0 -162
  973. package/src/workspace/types.ts +0 -541
  974. package/src/workspace/workspace-manager.ts +0 -1577
  975. package/src/workspace/yaml-schema.ts +0 -216
  976. package/test_fixtures/README.md +0 -425
  977. package/test_fixtures/fixtures/behaviors/coordinators.ts +0 -196
  978. package/test_fixtures/fixtures/behaviors/index.ts +0 -62
  979. package/test_fixtures/fixtures/behaviors/integrators.ts +0 -143
  980. package/test_fixtures/fixtures/behaviors/monitors.ts +0 -199
  981. package/test_fixtures/fixtures/behaviors/workers.ts +0 -348
  982. package/test_fixtures/fixtures/index.ts +0 -7
  983. package/test_fixtures/fixtures/projects/index.ts +0 -23
  984. package/test_fixtures/fixtures/projects/project-with-specs.ts +0 -44
  985. package/test_fixtures/fixtures/projects/typescript-project.ts +0 -200
  986. package/test_fixtures/fixtures/repos/index.ts +0 -6
  987. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -299
  988. package/test_fixtures/fixtures/repos/types.ts +0 -174
  989. package/test_fixtures/harness/assertions/harness-assertions.ts +0 -752
  990. package/test_fixtures/harness/assertions/index.ts +0 -8
  991. package/test_fixtures/harness/index.ts +0 -15
  992. package/test_fixtures/harness/simulator/agent-simulator.ts +0 -768
  993. package/test_fixtures/harness/simulator/behavior-executor.ts +0 -580
  994. package/test_fixtures/harness/simulator/index.ts +0 -14
  995. package/test_fixtures/harness/simulator/types.ts +0 -459
  996. package/test_fixtures/harness/test-harness.ts +0 -770
  997. package/test_fixtures/harness/timing/event-stepper.ts +0 -344
  998. package/test_fixtures/harness/timing/index.ts +0 -8
  999. package/tsconfig.json +0 -21
  1000. package/vitest.config.ts +0 -30
  1001. package/vitest.e2e.config.ts +0 -28
  1002. package/vitest.setup.ts +0 -12
@@ -0,0 +1,1023 @@
1
+ /**
2
+ * Team Runtime
3
+ *
4
+ * Wires a loaded team template into the running system: registers roles,
5
+ * sets up integration strategy, configures communication topology,
6
+ * and manages the team lifecycle.
7
+ *
8
+ * @module teams/team-runtime
9
+ */
10
+ import { WORKSPACE_CAPABILITIES } from "../roles/capabilities.js";
11
+ // =============================================================================
12
+ // Conversion: TeamManifest → MacroResolvedTemplate
13
+ // =============================================================================
14
+ /**
15
+ * Convert a legacy TeamManifest (with _ prefixed fields) to MacroResolvedTemplate.
16
+ * Used for backward compatibility when TeamRuntime receives a TeamManifest.
17
+ */
18
+ function manifestToResolved(manifest) {
19
+ return {
20
+ template: {
21
+ manifest: {
22
+ name: manifest.name,
23
+ description: manifest.description,
24
+ version: manifest.version,
25
+ roles: manifest.roles,
26
+ topology: manifest.topology,
27
+ communication: manifest.communication,
28
+ },
29
+ roles: new Map(), // Not used — macro-agent uses resolvedRoles
30
+ prompts: new Map(), // Prompts are in _loadedPrompts
31
+ mcpServers: manifest._mcpServers,
32
+ sourcePath: "",
33
+ },
34
+ resolvedRoles: manifest._resolvedRoles,
35
+ macroAgent: manifest.macro_agent,
36
+ };
37
+ }
38
+ /**
39
+ * Check if input is a MacroResolvedTemplate (has `template` field)
40
+ * vs a legacy TeamManifest (has `_resolvedRoles` field).
41
+ */
42
+ function isMacroResolvedTemplate(input) {
43
+ return "template" in input && "resolvedRoles" in input;
44
+ }
45
+ // =============================================================================
46
+ // TeamRuntime
47
+ // =============================================================================
48
+ export class TeamRuntime {
49
+ services;
50
+ rootAgentId;
51
+ companionAgentIds = [];
52
+ roleRegistry;
53
+ lifecycleUnsubscribe;
54
+ integrationStrategy;
55
+ scalingTimer;
56
+ lastScaleUpTime = 0;
57
+ teamStreamId;
58
+ mergeQueueUnsub;
59
+ mergeRequestPollTimer;
60
+ lastMergeRequestSeen = 0;
61
+ /** The resolved template (canonical internal representation) */
62
+ resolved;
63
+ /** Legacy loaded prompts map (path → content) for backward compat */
64
+ loadedPrompts;
65
+ /** Role name → spawned agent ID mapping (populated during bootstrap) */
66
+ roleAgentMap = new Map();
67
+ /** Peer connections that couldn't be wired at bootstrap (target role not yet spawned) */
68
+ pendingPeerRoutes = [];
69
+ /** Per-agent signal filters from peer connections. Key: "fromAgentId→toAgentId" */
70
+ peerSignalFilters = new Map();
71
+ /** Reverse mapping: agent ID → role name (for signal filter lookups) */
72
+ agentRoleMap = new Map();
73
+ /** Pre-computed per-role allowed signals from channel subscriptions */
74
+ roleAllowedSignals = new Map();
75
+ /** Lifecycle unsubscribe for deferred peer wiring */
76
+ peerWiringUnsubscribe;
77
+ /**
78
+ * Create a TeamRuntime.
79
+ *
80
+ * Accepts either a MacroResolvedTemplate (new) or a TeamManifest (legacy).
81
+ * Internally always uses MacroResolvedTemplate.
82
+ */
83
+ constructor(input, services) {
84
+ this.services = services;
85
+ this.resolved = isMacroResolvedTemplate(input)
86
+ ? input
87
+ : manifestToResolved(input);
88
+ // Extract loaded prompts from legacy manifest if available
89
+ this.loadedPrompts = !isMacroResolvedTemplate(input)
90
+ ? input._loadedPrompts
91
+ : new Map();
92
+ this.roleRegistry = services.agentManager.getRoleRegistry();
93
+ }
94
+ // Convenience accessors
95
+ get manifest() {
96
+ return this.resolved.template.manifest;
97
+ }
98
+ get communication() {
99
+ return (this.manifest.communication ?? {});
100
+ }
101
+ // ─────────────────────────────────────────────────────────────
102
+ // Initialization
103
+ // ─────────────────────────────────────────────────────────────
104
+ /**
105
+ * Wire team configuration into running services.
106
+ *
107
+ * 1. Register team roles into RoleRegistry
108
+ * 2. Store team_config event in EventStore (for MCP subprocess discovery)
109
+ * 3. Instantiate integration strategy
110
+ *
111
+ * Note: Does NOT install spawn interceptor, signal filter, or emission
112
+ * validator on services. Call installOnServices() for standalone use,
113
+ * or let TeamManager handle composite installation.
114
+ */
115
+ async initialize(options) {
116
+ const { eventStore } = this.services;
117
+ // 1. Register team roles into RoleRegistry (custom layer, highest priority)
118
+ for (const [, resolved] of this.resolved.resolvedRoles) {
119
+ const rd = resolved.roleDefinition;
120
+ const existing = this.roleRegistry.getRole(rd.name);
121
+ if (existing) {
122
+ const existingCaps = [...existing.capabilities].sort();
123
+ const newCaps = [...rd.capabilities].sort();
124
+ if (existingCaps.length !== newCaps.length || existingCaps.some((c, i) => c !== newCaps[i])) {
125
+ console.warn(`[TeamRuntime] Role '${rd.name}' conflict: team '${this.manifest.name}' re-registers with different capabilities. ` +
126
+ `Existing: [${existingCaps.join(", ")}], New: [${newCaps.join(", ")}]`);
127
+ }
128
+ }
129
+ this.roleRegistry.registerRole(rd);
130
+ }
131
+ // 2. Store team config in EventStore for cross-process access (RD2)
132
+ const taskMode = this.resolved.macroAgent.task_assignment?.mode ?? "push";
133
+ const strategyName = this.resolved.macroAgent.integration?.strategy ?? "queue";
134
+ const strategyConfig = this.resolved.macroAgent.integration?.config ?? {};
135
+ const enforcement = this.communication.enforcement ?? "permissive";
136
+ // Serialize resolved roles for MCP subprocess capability checks
137
+ const serializedRoles = {};
138
+ for (const [name, resolved] of this.resolved.resolvedRoles) {
139
+ const rd = resolved.roleDefinition;
140
+ serializedRoles[name] = {
141
+ name: rd.name,
142
+ capabilities: [...rd.capabilities],
143
+ ...(rd.tools && { tools: rd.tools }),
144
+ ...(rd.lifecycle && { lifecycle: rd.lifecycle }),
145
+ ...(rd.description && { description: rd.description }),
146
+ };
147
+ }
148
+ eventStore.emit({
149
+ type: "status",
150
+ source: { agent_id: "system" },
151
+ payload: {
152
+ status_type: "discovery",
153
+ summary: `Team '${this.manifest.name}' initialized`,
154
+ team_config: {
155
+ teamName: this.manifest.name,
156
+ ...(options?.teamInstanceId && { team_instance: options.teamInstanceId }),
157
+ strategy: strategyName,
158
+ strategyConfig,
159
+ taskMode,
160
+ enforcement,
161
+ roles: serializedRoles,
162
+ peerRoutes: this.communication.routing?.peers ?? [],
163
+ emissions: this.communication.emissions ?? {},
164
+ },
165
+ },
166
+ });
167
+ await eventStore.persist();
168
+ // 3. Instantiate integration strategy and call lifecycle hook
169
+ try {
170
+ const { defaultStrategyRegistry } = await import("../workspace/strategies/registry.js");
171
+ this.integrationStrategy = defaultStrategyRegistry.get(strategyName, strategyConfig);
172
+ if (this.integrationStrategy.initialize) {
173
+ await this.integrationStrategy.initialize();
174
+ }
175
+ // Wire merge queue to queue strategy if workspace manager is available
176
+ if (this.services.workspaceManager &&
177
+ strategyName === "queue" &&
178
+ "setMergeQueue" in this.integrationStrategy) {
179
+ const mergeQueue = this.services.workspaceManager.getMergeQueue();
180
+ this.integrationStrategy.setMergeQueue(mergeQueue);
181
+ }
182
+ }
183
+ catch {
184
+ // Strategy instantiation is best-effort — queue strategy needs merge queue set later
185
+ }
186
+ }
187
+ // ─────────────────────────────────────────────────────────────
188
+ // Bootstrap
189
+ // ─────────────────────────────────────────────────────────────
190
+ /**
191
+ * Spawn root and companion agents per the team topology.
192
+ *
193
+ * Populates internal state (agentRoleMap, peerSignalFilters) used by
194
+ * createSignalFilter() and createEmissionValidator(). Call installOnServices()
195
+ * after bootstrap for standalone use, or let TeamManager handle installation.
196
+ */
197
+ async bootstrap() {
198
+ const { agentManager } = this.services;
199
+ const { topology } = this.manifest;
200
+ // 1. Spawn root agent
201
+ const rootPrompt = this.getPromptForTopologyNode(topology.root);
202
+ const root = await agentManager.spawn({
203
+ task: rootPrompt
204
+ ? `[${this.manifest.name}] ${topology.root.role}`
205
+ : `Team ${this.manifest.name} root: ${topology.root.role}`,
206
+ parent: null,
207
+ role: topology.root.role,
208
+ config: {
209
+ model: topology.root.config?.model,
210
+ },
211
+ customPrompt: rootPrompt,
212
+ interactionPatterns: this.getInteractionPatterns(),
213
+ });
214
+ this.rootAgentId = root.id;
215
+ // 1b. Set up workspace integration BEFORE companions spawn,
216
+ // so the spawn interceptor has teamStreamId for workspace injection
217
+ this.setupWorkspaceIntegration(root.id);
218
+ // 2. Spawn companions (peers, not children)
219
+ const companionIds = [];
220
+ for (const companion of topology.companions ?? []) {
221
+ const companionPrompt = this.getPromptForTopologyNode(companion);
222
+ const agent = await agentManager.spawn({
223
+ task: `[${this.manifest.name}] ${companion.role}`,
224
+ parent: null,
225
+ role: companion.role,
226
+ config: {
227
+ model: companion.config?.model,
228
+ },
229
+ customPrompt: companionPrompt,
230
+ interactionPatterns: this.getInteractionPatterns(),
231
+ });
232
+ companionIds.push(agent.id);
233
+ }
234
+ this.companionAgentIds = companionIds;
235
+ // 3. Build role↔agent mappings and wire peer subscriptions
236
+ this.roleAgentMap.set(topology.root.role, root.id);
237
+ this.agentRoleMap.set(root.id, topology.root.role);
238
+ for (let i = 0; i < (topology.companions ?? []).length; i++) {
239
+ this.roleAgentMap.set(topology.companions[i].role, companionIds[i]);
240
+ this.agentRoleMap.set(companionIds[i], topology.companions[i].role);
241
+ }
242
+ this.wirePeerRoutes();
243
+ // 4. Pre-compute role allowed signals (used by createSignalFilter)
244
+ this.computeRoleAllowedSignals();
245
+ // 5. Set up continuation monitoring for daemon agents (P4.2)
246
+ this.monitorContinuations();
247
+ // 6. Set up auto-scaling monitoring
248
+ this.monitorScaling();
249
+ return {
250
+ rootId: root.id,
251
+ companionIds,
252
+ };
253
+ }
254
+ // ─────────────────────────────────────────────────────────────
255
+ // Teardown
256
+ // ─────────────────────────────────────────────────────────────
257
+ /**
258
+ * Tear down team: stop continuation monitoring, clean up strategy.
259
+ *
260
+ * Note: Does NOT clear spawn interceptor or filters on services.
261
+ * The caller (TeamManager or standalone code) is responsible for
262
+ * removing the interceptor/filters from shared services.
263
+ */
264
+ async teardown() {
265
+ if (this.lifecycleUnsubscribe) {
266
+ this.lifecycleUnsubscribe();
267
+ this.lifecycleUnsubscribe = undefined;
268
+ }
269
+ if (this.peerWiringUnsubscribe) {
270
+ this.peerWiringUnsubscribe();
271
+ this.peerWiringUnsubscribe = undefined;
272
+ }
273
+ if (this.scalingTimer) {
274
+ clearInterval(this.scalingTimer);
275
+ this.scalingTimer = undefined;
276
+ }
277
+ if (this.mergeQueueUnsub) {
278
+ this.mergeQueueUnsub();
279
+ this.mergeQueueUnsub = undefined;
280
+ }
281
+ if (this.mergeRequestPollTimer) {
282
+ clearInterval(this.mergeRequestPollTimer);
283
+ this.mergeRequestPollTimer = undefined;
284
+ }
285
+ // Call strategy lifecycle close hook
286
+ if (this.integrationStrategy?.close) {
287
+ try {
288
+ await this.integrationStrategy.close();
289
+ }
290
+ catch {
291
+ // Best-effort cleanup
292
+ }
293
+ }
294
+ }
295
+ // ─────────────────────────────────────────────────────────────
296
+ // Getters
297
+ // ─────────────────────────────────────────────────────────────
298
+ /** Get task assignment mode */
299
+ getTaskMode() {
300
+ return this.resolved.macroAgent.task_assignment?.mode ?? "push";
301
+ }
302
+ /** Get integration strategy name */
303
+ getStrategyName() {
304
+ return this.resolved.macroAgent.integration?.strategy ?? "queue";
305
+ }
306
+ /** Get the active manifest (for API) */
307
+ getManifest() {
308
+ // Build a backward-compatible TeamManifest from the resolved template
309
+ return {
310
+ ...this.manifest,
311
+ description: this.manifest.description ?? "",
312
+ communication: this.communication,
313
+ macro_agent: this.resolved.macroAgent,
314
+ _resolvedRoles: this.resolved.resolvedRoles,
315
+ _loadedPrompts: this.loadedPrompts,
316
+ _mcpServers: this.resolved.template.mcpServers,
317
+ };
318
+ }
319
+ /** Get the resolved template */
320
+ getResolvedTemplate() {
321
+ return this.resolved;
322
+ }
323
+ /** Get root agent ID (after bootstrap) */
324
+ getRootAgentId() {
325
+ return this.rootAgentId;
326
+ }
327
+ /** Get companion agent IDs (after bootstrap) */
328
+ getCompanionAgentIds() {
329
+ return [...this.companionAgentIds];
330
+ }
331
+ /** Get the instantiated integration strategy (after initialize) */
332
+ getIntegrationStrategy() {
333
+ return this.integrationStrategy;
334
+ }
335
+ /** Get team-wide integration stream ID (after bootstrap) */
336
+ getTeamStreamId() {
337
+ return this.teamStreamId;
338
+ }
339
+ /** Get signal filters for peer connections (for use by signal filtering - i-3o8g) */
340
+ getPeerSignalFilters() {
341
+ return this.peerSignalFilters;
342
+ }
343
+ /** Get the agent → role mapping (for TeamManager agent-team lookups) */
344
+ getAgentRoleMap() {
345
+ return this.agentRoleMap;
346
+ }
347
+ /** Register an agent's role mapping (for TeamManager to track dynamically spawned agents) */
348
+ registerAgent(agentId, roleName) {
349
+ this.agentRoleMap.set(agentId, roleName);
350
+ this.roleAgentMap.set(roleName, agentId);
351
+ }
352
+ /** Check if this team owns a given agent */
353
+ hasAgent(agentId) {
354
+ return this.agentRoleMap.has(agentId);
355
+ }
356
+ // ─────────────────────────────────────────────────────────────
357
+ // Continuation Monitoring (P4.2)
358
+ // ─────────────────────────────────────────────────────────────
359
+ /**
360
+ * Monitor agent lifecycle events for auto-continuation of daemon agents.
361
+ *
362
+ * When a root or companion agent terminates unexpectedly and the team's
363
+ * lifecycle config enables continuations, automatically spawn a continuation.
364
+ */
365
+ monitorContinuations() {
366
+ const lifecycleConfig = this.resolved.macroAgent.lifecycle;
367
+ if (!lifecycleConfig?.continuations?.enabled)
368
+ return;
369
+ const { agentManager } = this.services;
370
+ const monitoredAgents = new Set([
371
+ this.rootAgentId,
372
+ ...this.companionAgentIds,
373
+ ]);
374
+ this.lifecycleUnsubscribe = agentManager.onLifecycleEvent((event) => {
375
+ if (event.type !== "stopped")
376
+ return;
377
+ if (!monitoredAgents.has(event.agent.id))
378
+ return;
379
+ // Only auto-continue on unexpected stops (not explicit completion)
380
+ const reason = event.reason;
381
+ if (reason === "completed" || reason === "cancelled")
382
+ return;
383
+ // Schedule auto-continuation (async, fire-and-forget)
384
+ setTimeout(async () => {
385
+ try {
386
+ const newAgent = await agentManager.continueAgent(event.agent.id);
387
+ // Update monitoring set
388
+ monitoredAgents.delete(event.agent.id);
389
+ monitoredAgents.add(newAgent.id);
390
+ if (event.agent.id === this.rootAgentId) {
391
+ this.rootAgentId = newAgent.id;
392
+ }
393
+ else {
394
+ const idx = this.companionAgentIds.indexOf(event.agent.id);
395
+ if (idx >= 0) {
396
+ this.companionAgentIds[idx] = newAgent.id;
397
+ }
398
+ }
399
+ }
400
+ catch {
401
+ // Failed to continue — agent is gone
402
+ }
403
+ }, 1000);
404
+ });
405
+ }
406
+ // ─────────────────────────────────────────────────────────────
407
+ // Auto-Scaling
408
+ // ─────────────────────────────────────────────────────────────
409
+ /** Minimum interval between scale-up actions (ms) */
410
+ static SCALE_COOLDOWN_MS = 10_000;
411
+ /** Default scaling check interval (ms) */
412
+ static SCALE_CHECK_INTERVAL_MS = 5_000;
413
+ /**
414
+ * Monitor task queue depth and auto-scale workers.
415
+ *
416
+ * Follows the same lifecycle pattern as monitorContinuations().
417
+ * Only active when `scaling.scale_on === "task_queue_depth"` and
418
+ * a task backend is available.
419
+ */
420
+ monitorScaling() {
421
+ const scalingConfig = this.resolved.macroAgent.lifecycle?.scaling;
422
+ if (!scalingConfig || scalingConfig.scale_on !== "task_queue_depth")
423
+ return;
424
+ const { taskBackend } = this.services;
425
+ if (!taskBackend?.listClaimable)
426
+ return; // Need claimable task counting
427
+ const maxWorkers = scalingConfig.max_workers ?? Infinity;
428
+ const minWorkers = scalingConfig.min_workers ?? 0;
429
+ // Determine which role names are worker-derived (for counting active workers)
430
+ const workerRoleNames = new Set();
431
+ for (const [name, resolved] of this.resolved.resolvedRoles) {
432
+ if (resolved.baseRole === "worker") {
433
+ workerRoleNames.add(name);
434
+ }
435
+ }
436
+ if (workerRoleNames.size === 0)
437
+ return; // No worker roles to scale
438
+ // Pick the first worker role for spawning (most common pattern: single worker role)
439
+ const spawnRole = [...workerRoleNames][0];
440
+ this.scalingTimer = setInterval(async () => {
441
+ try {
442
+ // Count claimable tasks
443
+ const claimable = await taskBackend.listClaimable();
444
+ const pendingCount = claimable.length;
445
+ // Count active workers in this team
446
+ const allAgents = this.services.agentManager.list({ state: "running" });
447
+ let activeWorkers = 0;
448
+ for (const agent of allAgents) {
449
+ if (agent.role && workerRoleNames.has(agent.role) && this.agentRoleMap.has(agent.id)) {
450
+ activeWorkers++;
451
+ }
452
+ }
453
+ // Scale up: more pending tasks than active workers, under max cap
454
+ if (pendingCount > activeWorkers && activeWorkers < maxWorkers) {
455
+ const now = Date.now();
456
+ if (now - this.lastScaleUpTime < TeamRuntime.SCALE_COOLDOWN_MS) {
457
+ return; // Cooldown not elapsed
458
+ }
459
+ if (!this.rootAgentId)
460
+ return; // No root to spawn from
461
+ try {
462
+ await this.services.agentManager.spawn({
463
+ task: `[${this.manifest.name}] auto-scaled ${spawnRole}`,
464
+ role: spawnRole,
465
+ parent: this.rootAgentId,
466
+ });
467
+ this.lastScaleUpTime = now;
468
+ // Emit scaling event for observability
469
+ this.services.eventStore.emit({
470
+ type: "status",
471
+ source: { agent_id: "system" },
472
+ payload: {
473
+ status_type: "scaling",
474
+ summary: `Auto-scaled: spawned ${spawnRole} (pending=${pendingCount}, active=${activeWorkers}, max=${maxWorkers})`,
475
+ },
476
+ });
477
+ }
478
+ catch {
479
+ // Spawn failed — will retry on next tick
480
+ }
481
+ }
482
+ // Scale down is handled by idle_drain: workers self-terminate after idle_timeout_s
483
+ // No active termination needed from the scaling monitor
484
+ }
485
+ catch {
486
+ // Best-effort — don't crash the scaling loop
487
+ }
488
+ }, TeamRuntime.SCALE_CHECK_INTERVAL_MS);
489
+ // Ensure timer doesn't prevent process exit
490
+ if (this.scalingTimer.unref) {
491
+ this.scalingTimer.unref();
492
+ }
493
+ }
494
+ // ─────────────────────────────────────────────────────────────
495
+ // Workspace Integration
496
+ // ─────────────────────────────────────────────────────────────
497
+ /**
498
+ * Create the team-wide integration stream and subscribe to merge queue events.
499
+ *
500
+ * When a worker submits to the merge queue, the integrator agent is
501
+ * automatically prompted to process it.
502
+ */
503
+ setupWorkspaceIntegration(rootAgentId) {
504
+ const { workspaceManager } = this.services;
505
+ if (!workspaceManager || !this.integrationStrategy)
506
+ return;
507
+ // Create integration stream owned by root agent
508
+ try {
509
+ this.teamStreamId = workspaceManager.createIntegrationStream(rootAgentId, { name: this.manifest.name, forkFrom: "main" });
510
+ }
511
+ catch {
512
+ // Workspace isolation unavailable (e.g., not a git repo)
513
+ return;
514
+ }
515
+ // Subscribe to merge queue events — wake integrator on mr:submitted
516
+ try {
517
+ const mergeQueue = workspaceManager.getMergeQueue();
518
+ if (mergeQueue?.onEvent) {
519
+ this.mergeQueueUnsub = mergeQueue.onEvent((event) => {
520
+ if (event.type !== "mr:submitted")
521
+ return;
522
+ // Find agent with workspace.integrate capability in this team
523
+ for (const [agentId, roleName] of this.agentRoleMap) {
524
+ const resolved = this.resolved.resolvedRoles.get(roleName);
525
+ const caps = resolved?.capabilities ?? [];
526
+ if (caps.includes(WORKSPACE_CAPABILITIES.INTEGRATE)) {
527
+ try {
528
+ this.services.agentManager.prompt(agentId, `Merge request ${event.data?.mrId} submitted ` +
529
+ `by worker ${event.data?.workerAgentId} ` +
530
+ `for branch ${event.data?.workerBranch}. ` +
531
+ `Process the merge queue.`);
532
+ }
533
+ catch {
534
+ // Best-effort wake
535
+ }
536
+ break;
537
+ }
538
+ }
539
+ });
540
+ }
541
+ }
542
+ catch {
543
+ // Merge queue not available — workspace isolation without merge queue
544
+ }
545
+ // Poll EventStore for MERGE_REQUEST signals from worker subprocesses.
546
+ // Workers in MCP subprocess emit to shared SQLite; main process must reload to see them.
547
+ this.startMergeRequestPolling();
548
+ }
549
+ /**
550
+ * Poll EventStore for MERGE_REQUEST signals emitted by worker subprocesses.
551
+ *
552
+ * Workers call done() in their MCP subprocess, which emits MERGE_REQUEST to
553
+ * the shared EventStore. This polling picks up those signals and submits to
554
+ * the merge queue on the main server.
555
+ */
556
+ startMergeRequestPolling() {
557
+ const { workspaceManager, eventStore } = this.services;
558
+ if (!workspaceManager || !this.teamStreamId)
559
+ return;
560
+ const mergeQueue = workspaceManager.getMergeQueue();
561
+ if (!mergeQueue)
562
+ return;
563
+ this.mergeRequestPollTimer = setInterval(async () => {
564
+ try {
565
+ // Reload to see events written by subprocesses
566
+ if (eventStore.reload) {
567
+ await eventStore.reload();
568
+ }
569
+ const events = eventStore.query({ type: "status", limit: 100 });
570
+ for (const event of events) {
571
+ // Skip already-processed events
572
+ if (event.timestamp <= this.lastMergeRequestSeen)
573
+ continue;
574
+ const details = event.payload?.details;
575
+ if (details?.signal !== "MERGE_REQUEST")
576
+ continue;
577
+ // Check this agent belongs to our team
578
+ const sourceAgentId = event.source?.agent_id;
579
+ if (!sourceAgentId)
580
+ continue;
581
+ // Check if agent is a team member OR a child of a team member
582
+ const isTeamMember = this.agentRoleMap.has(sourceAgentId);
583
+ const parentAgent = eventStore.getAgent(sourceAgentId);
584
+ const isChildOfTeamMember = parentAgent?.parent
585
+ ? this.agentRoleMap.has(parentAgent.parent)
586
+ : false;
587
+ if (!isTeamMember && !isChildOfTeamMember)
588
+ continue;
589
+ this.lastMergeRequestSeen = event.timestamp;
590
+ // Extract merge request details
591
+ const sourceBranch = details.sourceBranch;
592
+ const taskId = details.taskId;
593
+ const workerId = details.workerId;
594
+ if (!sourceBranch || !workerId)
595
+ continue;
596
+ // Submit to merge queue
597
+ try {
598
+ mergeQueue.submit({
599
+ streamId: this.teamStreamId,
600
+ taskId: taskId ?? `task-${workerId}`,
601
+ workerBranch: sourceBranch,
602
+ workerAgentId: workerId,
603
+ });
604
+ }
605
+ catch {
606
+ // Already submitted or other error — best-effort
607
+ }
608
+ }
609
+ }
610
+ catch {
611
+ // Best-effort polling
612
+ }
613
+ }, 2000);
614
+ if (this.mergeRequestPollTimer.unref) {
615
+ this.mergeRequestPollTimer.unref();
616
+ }
617
+ }
618
+ // ─────────────────────────────────────────────────────────────
619
+ // Spawn Interceptor
620
+ // ─────────────────────────────────────────────────────────────
621
+ /**
622
+ * Internal: Create the spawn interceptor that injects team context into spawn options.
623
+ */
624
+ _createSpawnInterceptor() {
625
+ return (options) => {
626
+ const roleName = options.role;
627
+ if (!roleName)
628
+ return options;
629
+ const resolved = this.resolved.resolvedRoles.get(roleName);
630
+ if (!resolved)
631
+ return options; // Unknown role — pass through
632
+ // Compute topics from communication topology
633
+ const teamTopics = this.getTopicsForRole(roleName);
634
+ // Get MCP servers for this role
635
+ const teamMcpServers = this.getMcpServersForRole(roleName);
636
+ // Get prompt from role definition or topology
637
+ const teamPrompt = this.getPromptForRole(roleName);
638
+ // Build team env vars
639
+ const teamEnv = {
640
+ MACRO_TEAM_NAME: this.manifest.name,
641
+ MACRO_TASK_MODE: this.getTaskMode(),
642
+ };
643
+ const strategyName = this.getStrategyName();
644
+ if (strategyName) {
645
+ teamEnv.MACRO_INTEGRATION_STRATEGY = strategyName;
646
+ }
647
+ // Task backend config is propagated by AgentManager.buildMacroAgentMcp()
648
+ // from its taskBackend/openTasksSocketPath config options.
649
+ // Inject workspace fields based on capabilities (never overwrite explicit values)
650
+ const capabilities = resolved.capabilities;
651
+ let streamId = options.streamId;
652
+ let streamConfig = options.streamConfig;
653
+ let dataplaneTaskId = options.dataplaneTaskId;
654
+ if (this.teamStreamId && capabilities) {
655
+ if (capabilities.includes(WORKSPACE_CAPABILITIES.WORKTREE)) {
656
+ streamId = streamId ?? this.teamStreamId;
657
+ // Pull-mode workers use agentId as workspace identifier (one worktree per lifetime)
658
+ dataplaneTaskId = dataplaneTaskId ?? `worker-${Date.now()}`;
659
+ }
660
+ else if (capabilities.includes(WORKSPACE_CAPABILITIES.INTEGRATE)) {
661
+ streamId = streamId ?? this.teamStreamId;
662
+ }
663
+ // workspace.stream: stream creation is managed by TeamRuntime.setupWorkspaceIntegration(),
664
+ // not auto-injected. Coordinators that need sub-streams pass explicit streamConfig.
665
+ }
666
+ return {
667
+ ...options,
668
+ // Workspace fields
669
+ streamId,
670
+ streamConfig,
671
+ dataplaneTaskId,
672
+ capabilities: capabilities ?? options.capabilities,
673
+ // Merge topics
674
+ topics: [
675
+ ...(options.topics ?? []),
676
+ ...teamTopics,
677
+ ],
678
+ // Merge config
679
+ config: {
680
+ ...options.config,
681
+ mcpServers: [
682
+ ...(options.config?.mcpServers ?? []),
683
+ ...teamMcpServers.map((s) => ({
684
+ name: s.name,
685
+ command: s.command,
686
+ args: s.args,
687
+ env: s.env,
688
+ })),
689
+ ],
690
+ env: {
691
+ ...options.config?.env,
692
+ ...teamEnv,
693
+ },
694
+ },
695
+ // Set team prompt (only if not already provided by caller)
696
+ customPrompt: options.customPrompt ?? teamPrompt,
697
+ // Set interaction patterns (only if not already provided)
698
+ interactionPatterns: options.interactionPatterns ?? this.getInteractionPatterns(),
699
+ };
700
+ };
701
+ }
702
+ // ─────────────────────────────────────────────────────────────
703
+ // Communication Topology Helpers
704
+ // ─────────────────────────────────────────────────────────────
705
+ /**
706
+ * Get topic names a role should subscribe to based on communication config.
707
+ */
708
+ getTopicsForRole(roleName) {
709
+ const topics = [];
710
+ const subs = this.communication.subscriptions?.[roleName] ?? [];
711
+ for (const sub of subs) {
712
+ // Channel name becomes the topic name
713
+ if (!topics.includes(sub.channel)) {
714
+ topics.push(sub.channel);
715
+ }
716
+ }
717
+ return topics;
718
+ }
719
+ /**
720
+ * Get MCP servers configured for a role.
721
+ */
722
+ getMcpServersForRole(roleName) {
723
+ return this.resolved.template.mcpServers.get(roleName) ?? [];
724
+ }
725
+ /**
726
+ * Get the loaded prompt content for a role.
727
+ */
728
+ getPromptForRole(roleName) {
729
+ const resolved = this.resolved.resolvedRoles.get(roleName);
730
+ if (!resolved?.prompt)
731
+ return undefined;
732
+ return this.loadedPrompts.get(resolved.prompt);
733
+ }
734
+ /**
735
+ * Get the prompt for a topology node (root or companion).
736
+ */
737
+ getPromptForTopologyNode(node) {
738
+ // Prefer topology-level prompt reference
739
+ if (node.prompt) {
740
+ return this.loadedPrompts.get(node.prompt);
741
+ }
742
+ // Fall back to role-level prompt
743
+ return this.getPromptForRole(node.role);
744
+ }
745
+ /**
746
+ * Generate interaction pattern injection sections based on team config.
747
+ */
748
+ getInteractionPatterns() {
749
+ const patterns = [];
750
+ const taskMode = this.getTaskMode();
751
+ if (taskMode === "pull") {
752
+ const pullConfig = this.resolved.macroAgent.task_assignment?.pull;
753
+ const idleTimeout = pullConfig?.idle_timeout_s ?? 300;
754
+ patterns.push(`## Task Claiming
755
+
756
+ You operate in PULL mode. After completing a task:
757
+ 1. Call done() with your results
758
+ 2. Call claim_task() to get your next task
759
+ 3. If no tasks available, wait briefly and retry
760
+ 4. After ${idleTimeout} seconds idle, call done() to exit gracefully
761
+
762
+ Claim and execute independently — do not wait for instructions.`);
763
+ }
764
+ const strategy = this.getStrategyName();
765
+ if (strategy === "trunk") {
766
+ patterns.push(`## Integration
767
+
768
+ Your changes are integrated via trunk-based development. When you call done(),
769
+ your work is pushed directly to the integration branch. If there's a conflict,
770
+ the system will rebase and retry automatically. Write small, focused changes
771
+ to minimize conflict probability.`);
772
+ }
773
+ else if (strategy === "optimistic") {
774
+ patterns.push(`## Integration
775
+
776
+ Your changes are integrated optimistically. They are pushed immediately and
777
+ validated asynchronously. If validation fails, a fixup task will be created.
778
+ Focus on correctness — your changes go live immediately.`);
779
+ }
780
+ return patterns;
781
+ }
782
+ // ─────────────────────────────────────────────────────────────
783
+ // Exposed Interceptor / Filter / Validator Factories
784
+ // ─────────────────────────────────────────────────────────────
785
+ /**
786
+ * Create the spawn interceptor for this team.
787
+ *
788
+ * Returns a function that injects team context (topics, MCP servers,
789
+ * env vars, prompt, interaction patterns) into spawn options.
790
+ * The caller (TeamManager or installOnServices) is responsible for
791
+ * installing it on AgentManager.
792
+ */
793
+ createSpawnInterceptor() {
794
+ return this._createSpawnInterceptor();
795
+ }
796
+ /**
797
+ * Create the signal filter for this team.
798
+ *
799
+ * Combines two filter sources:
800
+ * 1. Channel subscription filters (per-role, per-topic)
801
+ * 2. Peer connection filters (per-agent-pair)
802
+ *
803
+ * Must be called after bootstrap() so that agentRoleMap and
804
+ * peerSignalFilters are populated. Returns null if no filtering needed.
805
+ */
806
+ createSignalFilter() {
807
+ return (from, to, signal) => {
808
+ // Untagged status events always pass through
809
+ if (!signal)
810
+ return true;
811
+ // Check peer connection filter (directional: from→to)
812
+ const peerFilter = this.peerSignalFilters.get(`${from}→${to}`);
813
+ if (peerFilter) {
814
+ return peerFilter.includes(signal);
815
+ }
816
+ // Check channel subscription filter for recipient's role
817
+ const recipientRole = this.agentRoleMap.get(to);
818
+ if (recipientRole) {
819
+ const allowed = this.roleAllowedSignals.get(recipientRole);
820
+ if (allowed && allowed !== "all") {
821
+ return allowed.has(signal);
822
+ }
823
+ }
824
+ // No filter configured — allow delivery
825
+ return true;
826
+ };
827
+ }
828
+ /**
829
+ * Create the emission validator for this team.
830
+ *
831
+ * Checks whether an agent's emitted signal is in its role's allowed
832
+ * emissions list. Behavior depends on enforcement mode.
833
+ * Returns null if no emissions config exists.
834
+ */
835
+ createEmissionValidator() {
836
+ const emissions = this.communication.emissions;
837
+ const enforcement = this.communication.enforcement ?? "permissive";
838
+ // No emissions config — nothing to enforce
839
+ if (!emissions || Object.keys(emissions).length === 0)
840
+ return null;
841
+ return (agentId, signal) => {
842
+ // Untagged status events are always allowed
843
+ if (!signal)
844
+ return { action: "allow" };
845
+ const role = this.agentRoleMap.get(agentId);
846
+ if (!role)
847
+ return { action: "allow" };
848
+ const allowedSignals = emissions[role];
849
+ if (!allowedSignals)
850
+ return { action: "allow" };
851
+ if (allowedSignals.includes(signal)) {
852
+ return { action: "allow" };
853
+ }
854
+ // Signal not in allowed list — enforce
855
+ const message = `Agent '${agentId}' (role: ${role}) emitted disallowed signal '${signal}'. Allowed: [${allowedSignals.join(", ")}]`;
856
+ switch (enforcement) {
857
+ case "strict":
858
+ return { action: "reject", message };
859
+ case "audit":
860
+ return { action: "audit", message };
861
+ case "permissive":
862
+ default:
863
+ return { action: "warn", message };
864
+ }
865
+ };
866
+ }
867
+ /**
868
+ * Convenience method: install interceptor, signal filter, and emission
869
+ * validator directly on the shared services.
870
+ *
871
+ * Use this for standalone operation (without TeamManager).
872
+ * TeamManager uses the individual create* methods for composite dispatch.
873
+ */
874
+ installOnServices() {
875
+ const { agentManager, messageRouter } = this.services;
876
+ agentManager.setSpawnInterceptor(this.createSpawnInterceptor());
877
+ const signalFilter = this.createSignalFilter();
878
+ if (signalFilter && messageRouter.setSignalFilter) {
879
+ messageRouter.setSignalFilter(signalFilter);
880
+ }
881
+ const emissionValidator = this.createEmissionValidator();
882
+ if (emissionValidator && messageRouter.setEmissionValidator) {
883
+ messageRouter.setEmissionValidator(emissionValidator);
884
+ }
885
+ }
886
+ /**
887
+ * Convenience method: uninstall interceptor and filters from services.
888
+ * Use on teardown for standalone operation.
889
+ */
890
+ uninstallFromServices() {
891
+ this.services.agentManager.setSpawnInterceptor(null);
892
+ }
893
+ // ─────────────────────────────────────────────────────────────
894
+ // Internal: Pre-compute role allowed signals
895
+ // ─────────────────────────────────────────────────────────────
896
+ /**
897
+ * Pre-compute per-role allowed signals from channel subscriptions.
898
+ * Called during bootstrap() so createSignalFilter() can use the result.
899
+ */
900
+ computeRoleAllowedSignals() {
901
+ this.roleAllowedSignals.clear();
902
+ for (const [roleName, subs] of Object.entries(this.communication.subscriptions ?? {})) {
903
+ let allowed = new Set();
904
+ for (const sub of subs) {
905
+ if (!sub.signals || sub.signals.length === 0) {
906
+ // No filter on this subscription — role receives all signals
907
+ allowed = "all";
908
+ break;
909
+ }
910
+ for (const sig of sub.signals) {
911
+ allowed.add(sig);
912
+ }
913
+ }
914
+ this.roleAllowedSignals.set(roleName, allowed);
915
+ }
916
+ }
917
+ // ─────────────────────────────────────────────────────────────
918
+ // Peer Routing
919
+ // ─────────────────────────────────────────────────────────────
920
+ /**
921
+ * Wire peer subscriptions from communication config.
922
+ * Falls back to legacy bidirectional subtree subs when no peers config exists.
923
+ */
924
+ wirePeerRoutes() {
925
+ const peers = this.communication.routing?.peers;
926
+ if (!peers || peers.length === 0) {
927
+ // Fallback: hardcoded mutual subtree subscriptions (backwards compat)
928
+ this.setupLegacyPeerSubscriptions();
929
+ return;
930
+ }
931
+ this.pendingPeerRoutes = [];
932
+ for (const peer of peers) {
933
+ const fromAgent = this.roleAgentMap.get(peer.from);
934
+ const toAgent = this.roleAgentMap.get(peer.to);
935
+ if (!fromAgent || !toAgent) {
936
+ // One or both roles not yet spawned — defer
937
+ this.pendingPeerRoutes.push(peer);
938
+ continue;
939
+ }
940
+ this.wireSinglePeerRoute(peer, fromAgent, toAgent);
941
+ }
942
+ // If there are pending routes, set up lifecycle listener for deferred wiring
943
+ if (this.pendingPeerRoutes.length > 0) {
944
+ this.setupDeferredPeerWiring();
945
+ }
946
+ }
947
+ /**
948
+ * Wire a single peer connection based on its `via` type.
949
+ */
950
+ wireSinglePeerRoute(peer, fromAgent, toAgent) {
951
+ const { messageRouter } = this.services;
952
+ switch (peer.via) {
953
+ case "direct":
954
+ // Directional: from receives status events from to's subtree
955
+ messageRouter.subscribe(fromAgent, { type: "subtree", target: toAgent });
956
+ break;
957
+ case "topic": {
958
+ // Both agents share a named topic
959
+ const topicName = `peer:${peer.from}:${peer.to}`;
960
+ messageRouter.subscribe(fromAgent, { type: "topic", target: topicName });
961
+ messageRouter.subscribe(toAgent, { type: "topic", target: topicName });
962
+ break;
963
+ }
964
+ case "scope":
965
+ // from subscribes to to's role channel
966
+ messageRouter.subscribe(fromAgent, { type: "role", target: peer.to });
967
+ break;
968
+ }
969
+ // Store signal filter if specified
970
+ if (peer.signals && peer.signals.length > 0) {
971
+ const key = `${fromAgent}→${toAgent}`;
972
+ this.peerSignalFilters.set(key, peer.signals);
973
+ }
974
+ }
975
+ /**
976
+ * Legacy bidirectional subtree subscriptions between root and companions.
977
+ * Used when no `routing.peers` config is defined (backwards compat).
978
+ */
979
+ setupLegacyPeerSubscriptions() {
980
+ const { messageRouter } = this.services;
981
+ if (!this.rootAgentId)
982
+ return;
983
+ for (const companionId of this.companionAgentIds) {
984
+ messageRouter.subscribe(this.rootAgentId, { type: "subtree", target: companionId });
985
+ messageRouter.subscribe(companionId, { type: "subtree", target: this.rootAgentId });
986
+ }
987
+ }
988
+ /**
989
+ * Listen for agent spawns and wire pending peer routes when roles become available.
990
+ */
991
+ setupDeferredPeerWiring() {
992
+ const { agentManager } = this.services;
993
+ this.peerWiringUnsubscribe = agentManager.onLifecycleEvent((event) => {
994
+ if (event.type !== "spawned")
995
+ return;
996
+ const role = event.agent.role;
997
+ if (!role)
998
+ return;
999
+ // Update role↔agent mappings
1000
+ this.roleAgentMap.set(role, event.agent.id);
1001
+ this.agentRoleMap.set(event.agent.id, role);
1002
+ // Try to wire any pending routes involving this role
1003
+ const stillPending = [];
1004
+ for (const peer of this.pendingPeerRoutes) {
1005
+ const fromAgent = this.roleAgentMap.get(peer.from);
1006
+ const toAgent = this.roleAgentMap.get(peer.to);
1007
+ if (fromAgent && toAgent) {
1008
+ this.wireSinglePeerRoute(peer, fromAgent, toAgent);
1009
+ }
1010
+ else {
1011
+ stillPending.push(peer);
1012
+ }
1013
+ }
1014
+ this.pendingPeerRoutes = stillPending;
1015
+ // All wired — unsubscribe
1016
+ if (stillPending.length === 0 && this.peerWiringUnsubscribe) {
1017
+ this.peerWiringUnsubscribe();
1018
+ this.peerWiringUnsubscribe = undefined;
1019
+ }
1020
+ });
1021
+ }
1022
+ }
1023
+ //# sourceMappingURL=team-runtime.js.map