macro-agent 0.0.10 → 0.0.12

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 (518) hide show
  1. package/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
  2. package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
  3. package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
  4. package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
  5. package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
  6. package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
  7. package/.macro-agent/teams/self-driving/team.yaml +103 -0
  8. package/.macro-agent/teams/structured/prompts/developer.md +26 -0
  9. package/.macro-agent/teams/structured/prompts/lead.md +25 -0
  10. package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
  11. package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
  12. package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
  13. package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
  14. package/.macro-agent/teams/structured/team.yaml +89 -0
  15. package/.sudocode/issues.jsonl +56 -51
  16. package/.sudocode/specs.jsonl +8 -1
  17. package/CLAUDE.md +121 -30
  18. package/README.md +60 -3
  19. package/dist/acp/macro-agent.d.ts +4 -0
  20. package/dist/acp/macro-agent.d.ts.map +1 -1
  21. package/dist/acp/macro-agent.js +50 -4
  22. package/dist/acp/macro-agent.js.map +1 -1
  23. package/dist/acp/session-mapper.d.ts +20 -1
  24. package/dist/acp/session-mapper.d.ts.map +1 -1
  25. package/dist/acp/session-mapper.js +90 -1
  26. package/dist/acp/session-mapper.js.map +1 -1
  27. package/dist/acp/types.d.ts +24 -1
  28. package/dist/acp/types.d.ts.map +1 -1
  29. package/dist/acp/types.js.map +1 -1
  30. package/dist/agent/agent-manager.d.ts +40 -1
  31. package/dist/agent/agent-manager.d.ts.map +1 -1
  32. package/dist/agent/agent-manager.js +172 -8
  33. package/dist/agent/agent-manager.js.map +1 -1
  34. package/dist/agent/types.d.ts +22 -0
  35. package/dist/agent/types.d.ts.map +1 -1
  36. package/dist/agent/types.js.map +1 -1
  37. package/dist/agent/wake.d.ts +15 -0
  38. package/dist/agent/wake.d.ts.map +1 -1
  39. package/dist/agent/wake.js +15 -0
  40. package/dist/agent/wake.js.map +1 -1
  41. package/dist/agent-detection/command-builder.d.ts +30 -0
  42. package/dist/agent-detection/command-builder.d.ts.map +1 -0
  43. package/dist/agent-detection/command-builder.js +71 -0
  44. package/dist/agent-detection/command-builder.js.map +1 -0
  45. package/dist/agent-detection/detector.d.ts +84 -0
  46. package/dist/agent-detection/detector.d.ts.map +1 -0
  47. package/dist/agent-detection/detector.js +240 -0
  48. package/dist/agent-detection/detector.js.map +1 -0
  49. package/dist/agent-detection/index.d.ts +12 -0
  50. package/dist/agent-detection/index.d.ts.map +1 -0
  51. package/dist/agent-detection/index.js +14 -0
  52. package/dist/agent-detection/index.js.map +1 -0
  53. package/dist/agent-detection/registry.d.ts +53 -0
  54. package/dist/agent-detection/registry.d.ts.map +1 -0
  55. package/dist/agent-detection/registry.js +177 -0
  56. package/dist/agent-detection/registry.js.map +1 -0
  57. package/dist/agent-detection/types.d.ts +121 -0
  58. package/dist/agent-detection/types.d.ts.map +1 -0
  59. package/dist/agent-detection/types.js +20 -0
  60. package/dist/agent-detection/types.js.map +1 -0
  61. package/dist/api/server.d.ts +5 -1
  62. package/dist/api/server.d.ts.map +1 -1
  63. package/dist/api/server.js +362 -0
  64. package/dist/api/server.js.map +1 -1
  65. package/dist/api/types.d.ts +50 -1
  66. package/dist/api/types.d.ts.map +1 -1
  67. package/dist/cli/acp.d.ts +2 -0
  68. package/dist/cli/acp.d.ts.map +1 -1
  69. package/dist/cli/acp.js +8 -1
  70. package/dist/cli/acp.js.map +1 -1
  71. package/dist/cli/index.js +29 -0
  72. package/dist/cli/index.js.map +1 -1
  73. package/dist/cli/mcp.js +38 -0
  74. package/dist/cli/mcp.js.map +1 -1
  75. package/dist/config/index.d.ts +2 -0
  76. package/dist/config/index.d.ts.map +1 -0
  77. package/dist/config/index.js +2 -0
  78. package/dist/config/index.js.map +1 -0
  79. package/dist/config/project-config.d.ts +46 -0
  80. package/dist/config/project-config.d.ts.map +1 -0
  81. package/dist/config/project-config.js +68 -0
  82. package/dist/config/project-config.js.map +1 -0
  83. package/dist/lifecycle/cascade.d.ts +1 -1
  84. package/dist/lifecycle/cascade.d.ts.map +1 -1
  85. package/dist/lifecycle/handlers/index.d.ts +4 -0
  86. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  87. package/dist/lifecycle/handlers/index.js +2 -0
  88. package/dist/lifecycle/handlers/index.js.map +1 -1
  89. package/dist/lifecycle/handlers/worker.d.ts +4 -0
  90. package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
  91. package/dist/lifecycle/handlers/worker.js +35 -3
  92. package/dist/lifecycle/handlers/worker.js.map +1 -1
  93. package/dist/mail/conversation-map.d.ts +33 -0
  94. package/dist/mail/conversation-map.d.ts.map +1 -0
  95. package/dist/mail/conversation-map.js +61 -0
  96. package/dist/mail/conversation-map.js.map +1 -0
  97. package/dist/mail/index.d.ts +11 -0
  98. package/dist/mail/index.d.ts.map +1 -0
  99. package/dist/mail/index.js +11 -0
  100. package/dist/mail/index.js.map +1 -0
  101. package/dist/mail/mail-service.d.ts +85 -0
  102. package/dist/mail/mail-service.d.ts.map +1 -0
  103. package/dist/mail/mail-service.js +121 -0
  104. package/dist/mail/mail-service.js.map +1 -0
  105. package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
  106. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
  107. package/dist/mail/stores/eventstore-conversation-store.js +131 -0
  108. package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
  109. package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
  110. package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
  111. package/dist/mail/stores/eventstore-participant-store.js +145 -0
  112. package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
  113. package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
  114. package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
  115. package/dist/mail/stores/eventstore-thread-store.js +118 -0
  116. package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
  117. package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
  118. package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
  119. package/dist/mail/stores/eventstore-turn-store.js +153 -0
  120. package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
  121. package/dist/mail/stores/index.d.ts +12 -0
  122. package/dist/mail/stores/index.d.ts.map +1 -0
  123. package/dist/mail/stores/index.js +12 -0
  124. package/dist/mail/stores/index.js.map +1 -0
  125. package/dist/mail/stores/types.d.ts +146 -0
  126. package/dist/mail/stores/types.d.ts.map +1 -0
  127. package/dist/mail/stores/types.js +13 -0
  128. package/dist/mail/stores/types.js.map +1 -0
  129. package/dist/mail/turn-recorder.d.ts +30 -0
  130. package/dist/mail/turn-recorder.d.ts.map +1 -0
  131. package/dist/mail/turn-recorder.js +98 -0
  132. package/dist/mail/turn-recorder.js.map +1 -0
  133. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  134. package/dist/map/adapter/acp-over-map.js +32 -2
  135. package/dist/map/adapter/acp-over-map.js.map +1 -1
  136. package/dist/map/adapter/event-translator.d.ts.map +1 -1
  137. package/dist/map/adapter/event-translator.js +4 -0
  138. package/dist/map/adapter/event-translator.js.map +1 -1
  139. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  140. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  141. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  142. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  143. package/dist/map/adapter/extensions/index.d.ts +10 -1
  144. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  145. package/dist/map/adapter/extensions/index.js +39 -0
  146. package/dist/map/adapter/extensions/index.js.map +1 -1
  147. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  148. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  149. package/dist/map/adapter/extensions/resume.js +59 -0
  150. package/dist/map/adapter/extensions/resume.js.map +1 -0
  151. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  152. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  153. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  154. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  155. package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
  156. package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
  157. package/dist/map/adapter/mail-handler-adapter.js +292 -0
  158. package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
  159. package/dist/map/adapter/map-adapter.d.ts +34 -10
  160. package/dist/map/adapter/map-adapter.d.ts.map +1 -1
  161. package/dist/map/adapter/map-adapter.js +110 -14
  162. package/dist/map/adapter/map-adapter.js.map +1 -1
  163. package/dist/map/adapter/rpc-handler.d.ts +4 -1
  164. package/dist/map/adapter/rpc-handler.d.ts.map +1 -1
  165. package/dist/map/adapter/rpc-handler.js +6 -0
  166. package/dist/map/adapter/rpc-handler.js.map +1 -1
  167. package/dist/map/index.d.ts +1 -0
  168. package/dist/map/index.d.ts.map +1 -1
  169. package/dist/map/index.js +2 -0
  170. package/dist/map/index.js.map +1 -1
  171. package/dist/map/types.d.ts +3 -1
  172. package/dist/map/types.d.ts.map +1 -1
  173. package/dist/map/types.js.map +1 -1
  174. package/dist/mcp/mcp-server.d.ts +6 -0
  175. package/dist/mcp/mcp-server.d.ts.map +1 -1
  176. package/dist/mcp/mcp-server.js +45 -0
  177. package/dist/mcp/mcp-server.js.map +1 -1
  178. package/dist/mcp/tools/claim_task.d.ts +35 -0
  179. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  180. package/dist/mcp/tools/claim_task.js +58 -0
  181. package/dist/mcp/tools/claim_task.js.map +1 -0
  182. package/dist/mcp/tools/done.d.ts +15 -2
  183. package/dist/mcp/tools/done.d.ts.map +1 -1
  184. package/dist/mcp/tools/done.js +45 -10
  185. package/dist/mcp/tools/done.js.map +1 -1
  186. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  187. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  188. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  189. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  190. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  191. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  192. package/dist/mcp/tools/unclaim_task.js +47 -0
  193. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  194. package/dist/metrics/index.d.ts +2 -0
  195. package/dist/metrics/index.d.ts.map +1 -0
  196. package/dist/metrics/index.js +2 -0
  197. package/dist/metrics/index.js.map +1 -0
  198. package/dist/metrics/metrics.d.ts +79 -0
  199. package/dist/metrics/metrics.d.ts.map +1 -0
  200. package/dist/metrics/metrics.js +166 -0
  201. package/dist/metrics/metrics.js.map +1 -0
  202. package/dist/roles/capabilities.d.ts +1 -0
  203. package/dist/roles/capabilities.d.ts.map +1 -1
  204. package/dist/roles/capabilities.js +3 -0
  205. package/dist/roles/capabilities.js.map +1 -1
  206. package/dist/roles/types.d.ts +1 -1
  207. package/dist/roles/types.d.ts.map +1 -1
  208. package/dist/router/channels.d.ts +2 -4
  209. package/dist/router/channels.d.ts.map +1 -1
  210. package/dist/router/channels.js.map +1 -1
  211. package/dist/router/message-router.d.ts +85 -9
  212. package/dist/router/message-router.d.ts.map +1 -1
  213. package/dist/router/message-router.js +203 -14
  214. package/dist/router/message-router.js.map +1 -1
  215. package/dist/router/role-resolver.d.ts +10 -1
  216. package/dist/router/role-resolver.d.ts.map +1 -1
  217. package/dist/router/role-resolver.js +15 -1
  218. package/dist/router/role-resolver.js.map +1 -1
  219. package/dist/router/types.d.ts +30 -1
  220. package/dist/router/types.d.ts.map +1 -1
  221. package/dist/router/types.js.map +1 -1
  222. package/dist/server/combined-server.d.ts +6 -0
  223. package/dist/server/combined-server.d.ts.map +1 -1
  224. package/dist/server/combined-server.js +24 -2
  225. package/dist/server/combined-server.js.map +1 -1
  226. package/dist/store/event-store.d.ts +14 -1
  227. package/dist/store/event-store.d.ts.map +1 -1
  228. package/dist/store/event-store.js +456 -4
  229. package/dist/store/event-store.js.map +1 -1
  230. package/dist/store/types/agents.d.ts +1 -1
  231. package/dist/store/types/agents.d.ts.map +1 -1
  232. package/dist/store/types/conversations.d.ts +91 -0
  233. package/dist/store/types/conversations.d.ts.map +1 -0
  234. package/dist/store/types/conversations.js +8 -0
  235. package/dist/store/types/conversations.js.map +1 -0
  236. package/dist/store/types/events.d.ts +1 -1
  237. package/dist/store/types/events.d.ts.map +1 -1
  238. package/dist/store/types/events.js.map +1 -1
  239. package/dist/store/types/index.d.ts +2 -0
  240. package/dist/store/types/index.d.ts.map +1 -1
  241. package/dist/store/types/index.js +2 -0
  242. package/dist/store/types/index.js.map +1 -1
  243. package/dist/store/types/sessions.d.ts +44 -0
  244. package/dist/store/types/sessions.d.ts.map +1 -0
  245. package/dist/store/types/sessions.js +9 -0
  246. package/dist/store/types/sessions.js.map +1 -0
  247. package/dist/store/types/tasks.d.ts +2 -0
  248. package/dist/store/types/tasks.d.ts.map +1 -1
  249. package/dist/task/backend/memory.d.ts +4 -1
  250. package/dist/task/backend/memory.d.ts.map +1 -1
  251. package/dist/task/backend/memory.js +81 -0
  252. package/dist/task/backend/memory.js.map +1 -1
  253. package/dist/task/backend/types.d.ts +30 -0
  254. package/dist/task/backend/types.d.ts.map +1 -1
  255. package/dist/task/backend/types.js.map +1 -1
  256. package/dist/teams/index.d.ts +4 -0
  257. package/dist/teams/index.d.ts.map +1 -0
  258. package/dist/teams/index.js +4 -0
  259. package/dist/teams/index.js.map +1 -0
  260. package/dist/teams/team-loader.d.ts +20 -0
  261. package/dist/teams/team-loader.d.ts.map +1 -0
  262. package/dist/teams/team-loader.js +293 -0
  263. package/dist/teams/team-loader.js.map +1 -0
  264. package/dist/teams/team-runtime.d.ts +139 -0
  265. package/dist/teams/team-runtime.d.ts.map +1 -0
  266. package/dist/teams/team-runtime.js +613 -0
  267. package/dist/teams/team-runtime.js.map +1 -0
  268. package/dist/teams/types.d.ts +266 -0
  269. package/dist/teams/types.d.ts.map +1 -0
  270. package/dist/teams/types.js +20 -0
  271. package/dist/teams/types.js.map +1 -0
  272. package/dist/trigger/router/trigger-router.d.ts +30 -3
  273. package/dist/trigger/router/trigger-router.d.ts.map +1 -1
  274. package/dist/trigger/router/trigger-router.js +30 -3
  275. package/dist/trigger/router/trigger-router.js.map +1 -1
  276. package/dist/trigger/wake/types.d.ts +31 -5
  277. package/dist/trigger/wake/types.d.ts.map +1 -1
  278. package/dist/trigger/wake/types.js +19 -0
  279. package/dist/trigger/wake/types.js.map +1 -1
  280. package/dist/workspace/dataplane-adapter.d.ts +1 -1
  281. package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
  282. package/dist/workspace/dataplane-adapter.js +1 -1
  283. package/dist/workspace/dataplane-adapter.js.map +1 -1
  284. package/dist/workspace/index.d.ts +1 -1
  285. package/dist/workspace/index.d.ts.map +1 -1
  286. package/dist/workspace/strategies/index.d.ts +6 -0
  287. package/dist/workspace/strategies/index.d.ts.map +1 -0
  288. package/dist/workspace/strategies/index.js +5 -0
  289. package/dist/workspace/strategies/index.js.map +1 -0
  290. package/dist/workspace/strategies/optimistic.d.ts +26 -0
  291. package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
  292. package/dist/workspace/strategies/optimistic.js +121 -0
  293. package/dist/workspace/strategies/optimistic.js.map +1 -0
  294. package/dist/workspace/strategies/queue.d.ts +26 -0
  295. package/dist/workspace/strategies/queue.d.ts.map +1 -0
  296. package/dist/workspace/strategies/queue.js +67 -0
  297. package/dist/workspace/strategies/queue.js.map +1 -0
  298. package/dist/workspace/strategies/registry.d.ts +37 -0
  299. package/dist/workspace/strategies/registry.d.ts.map +1 -0
  300. package/dist/workspace/strategies/registry.js +63 -0
  301. package/dist/workspace/strategies/registry.js.map +1 -0
  302. package/dist/workspace/strategies/trunk.d.ts +20 -0
  303. package/dist/workspace/strategies/trunk.d.ts.map +1 -0
  304. package/dist/workspace/strategies/trunk.js +108 -0
  305. package/dist/workspace/strategies/trunk.js.map +1 -0
  306. package/dist/workspace/strategies/types.d.ts +104 -0
  307. package/dist/workspace/strategies/types.d.ts.map +1 -0
  308. package/dist/workspace/strategies/types.js +11 -0
  309. package/dist/workspace/strategies/types.js.map +1 -0
  310. package/dist/workspace/types.d.ts +1 -1
  311. package/dist/workspace/types.d.ts.map +1 -1
  312. package/dist/workspace/workspace-manager.d.ts +1 -1
  313. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  314. package/docs/implementation-details.md +1127 -0
  315. package/docs/implementation-summary.md +448 -0
  316. package/docs/mail-integration.md +608 -0
  317. package/docs/plan-self-driving-support.md +433 -0
  318. package/docs/spec-self-driving-support.md +462 -0
  319. package/docs/team-templates.md +860 -0
  320. package/docs/teams.md +233 -0
  321. package/package.json +5 -3
  322. package/src/acp/__tests__/integration.test.ts +161 -1
  323. package/src/acp/__tests__/macro-agent.test.ts +95 -0
  324. package/src/acp/__tests__/session-persistence.test.ts +276 -0
  325. package/src/acp/macro-agent.ts +79 -7
  326. package/src/acp/session-mapper.ts +108 -1
  327. package/src/acp/types.ts +33 -1
  328. package/src/agent/agent-manager.ts +278 -6
  329. package/src/agent/types.ts +27 -0
  330. package/src/agent/wake.ts +15 -0
  331. package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
  332. package/src/agent-detection/__tests__/detector.test.ts +768 -0
  333. package/src/agent-detection/__tests__/registry.test.ts +254 -0
  334. package/src/agent-detection/command-builder.ts +90 -0
  335. package/src/agent-detection/detector.ts +307 -0
  336. package/src/agent-detection/index.ts +36 -0
  337. package/src/agent-detection/registry.ts +200 -0
  338. package/src/agent-detection/types.ts +184 -0
  339. package/src/api/__tests__/conversation-api.test.ts +468 -0
  340. package/src/api/server.ts +425 -1
  341. package/src/api/types.ts +64 -1
  342. package/src/cli/acp.ts +9 -1
  343. package/src/cli/index.ts +44 -0
  344. package/src/cli/mcp.ts +47 -0
  345. package/src/config/index.ts +9 -0
  346. package/src/config/project-config.ts +107 -0
  347. package/src/lifecycle/cascade.ts +1 -1
  348. package/src/lifecycle/handlers/index.ts +8 -0
  349. package/src/lifecycle/handlers/worker.ts +48 -3
  350. package/src/mail/__tests__/conversation-lifecycle.test.ts +409 -0
  351. package/src/mail/__tests__/eventstore-stores.test.ts +1073 -0
  352. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +575 -0
  353. package/src/mail/__tests__/mail-integration.test.ts +759 -0
  354. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +1068 -0
  355. package/src/mail/__tests__/mail-service.test.ts +506 -0
  356. package/src/mail/__tests__/turn-recorder.test.ts +328 -0
  357. package/src/mail/conversation-map.ts +107 -0
  358. package/src/mail/index.ts +25 -0
  359. package/src/mail/mail-service.ts +257 -0
  360. package/src/mail/stores/eventstore-conversation-store.ts +146 -0
  361. package/src/mail/stores/eventstore-participant-store.ts +172 -0
  362. package/src/mail/stores/eventstore-thread-store.ts +129 -0
  363. package/src/mail/stores/eventstore-turn-store.ts +173 -0
  364. package/src/mail/stores/index.ts +12 -0
  365. package/src/mail/stores/types.ts +160 -0
  366. package/src/mail/turn-recorder.ts +124 -0
  367. package/src/map/README.md +79 -0
  368. package/src/map/adapter/__tests__/extensions.test.ts +359 -0
  369. package/src/map/adapter/__tests__/map-adapter.test.ts +90 -0
  370. package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
  371. package/src/map/adapter/acp-over-map.ts +45 -2
  372. package/src/map/adapter/event-translator.ts +4 -0
  373. package/src/map/adapter/extensions/agent-detection.ts +201 -0
  374. package/src/map/adapter/extensions/index.ts +63 -0
  375. package/src/map/adapter/extensions/resume.ts +114 -0
  376. package/src/map/adapter/extensions/workspace-files.ts +449 -0
  377. package/src/map/adapter/mail-handler-adapter.ts +429 -0
  378. package/src/map/adapter/map-adapter.ts +173 -27
  379. package/src/map/adapter/rpc-handler.ts +8 -1
  380. package/src/map/index.ts +3 -0
  381. package/src/map/types.ts +3 -1
  382. package/src/mcp/mcp-server.ts +67 -0
  383. package/src/mcp/tools/claim_task.ts +86 -0
  384. package/src/mcp/tools/done.ts +59 -10
  385. package/src/mcp/tools/list_claimable_tasks.ts +93 -0
  386. package/src/mcp/tools/unclaim_task.ts +71 -0
  387. package/src/metrics/index.ts +9 -0
  388. package/src/metrics/metrics.ts +280 -0
  389. package/src/roles/capabilities.ts +3 -0
  390. package/src/roles/types.ts +2 -1
  391. package/src/router/README.md +120 -0
  392. package/src/router/__tests__/message-router.test.ts +561 -0
  393. package/src/router/channels.ts +3 -4
  394. package/src/router/message-router.ts +308 -22
  395. package/src/router/role-resolver.ts +22 -1
  396. package/src/router/types.ts +36 -1
  397. package/src/server/combined-server.ts +36 -2
  398. package/src/store/README.md +134 -0
  399. package/src/store/event-store.ts +546 -3
  400. package/src/store/types/agents.ts +1 -1
  401. package/src/store/types/conversations.ts +129 -0
  402. package/src/store/types/events.ts +5 -1
  403. package/src/store/types/index.ts +2 -0
  404. package/src/store/types/sessions.ts +53 -0
  405. package/src/store/types/tasks.ts +3 -0
  406. package/src/task/backend/memory.ts +116 -0
  407. package/src/task/backend/types.ts +43 -0
  408. package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
  409. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
  410. package/src/teams/__tests__/team-system.test.ts +1280 -0
  411. package/src/teams/index.ts +13 -0
  412. package/src/teams/team-loader.ts +434 -0
  413. package/src/teams/team-runtime.ts +727 -0
  414. package/src/teams/types.ts +377 -0
  415. package/src/trigger/router/trigger-router.ts +30 -3
  416. package/src/trigger/wake/types.ts +32 -5
  417. package/src/trigger/wake/wake-manager.ts +2 -2
  418. package/src/workspace/dataplane-adapter.ts +1 -1
  419. package/src/workspace/index.ts +1 -1
  420. package/src/workspace/strategies/index.ts +18 -0
  421. package/src/workspace/strategies/optimistic.ts +136 -0
  422. package/src/workspace/strategies/queue.ts +81 -0
  423. package/src/workspace/strategies/registry.ts +89 -0
  424. package/src/workspace/strategies/trunk.ts +123 -0
  425. package/src/workspace/strategies/types.ts +145 -0
  426. package/src/workspace/types.ts +1 -1
  427. package/src/workspace/workspace-manager.ts +1 -1
  428. package/.claude/settings.local.json +0 -59
  429. package/dist/map/utils/address-translation.d.ts +0 -99
  430. package/dist/map/utils/address-translation.d.ts.map +0 -1
  431. package/dist/map/utils/address-translation.js +0 -285
  432. package/dist/map/utils/address-translation.js.map +0 -1
  433. package/dist/map/utils/index.d.ts +0 -7
  434. package/dist/map/utils/index.d.ts.map +0 -1
  435. package/dist/map/utils/index.js +0 -7
  436. package/dist/map/utils/index.js.map +0 -1
  437. package/openspec/AGENTS.md +0 -456
  438. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/design.md +0 -128
  439. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/proposal.md +0 -49
  440. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/agent-manager/spec.md +0 -150
  441. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/cli-api/spec.md +0 -258
  442. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/event-store/spec.md +0 -160
  443. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/mcp-tools/spec.md +0 -224
  444. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/message-router/spec.md +0 -153
  445. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/task-manager/spec.md +0 -136
  446. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/tasks.md +0 -147
  447. package/openspec/project.md +0 -31
  448. package/openspec/specs/agent-manager/spec.md +0 -154
  449. package/openspec/specs/cli-api/spec.md +0 -262
  450. package/openspec/specs/event-store/spec.md +0 -164
  451. package/openspec/specs/mcp-tools/spec.md +0 -228
  452. package/openspec/specs/message-router/spec.md +0 -157
  453. package/openspec/specs/task-manager/spec.md +0 -140
  454. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  455. package/references/acp-factory-ref/LICENSE +0 -21
  456. package/references/acp-factory-ref/README.md +0 -341
  457. package/references/acp-factory-ref/package-lock.json +0 -3102
  458. package/references/acp-factory-ref/package.json +0 -96
  459. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  460. package/references/acp-factory-ref/python/LICENSE +0 -21
  461. package/references/acp-factory-ref/python/Makefile +0 -57
  462. package/references/acp-factory-ref/python/README.md +0 -253
  463. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  464. package/references/acp-factory-ref/python/tests/__init__.py +0 -0
  465. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  466. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  467. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  468. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  469. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  470. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  471. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  472. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  473. package/references/claude-code-acp/.prettierrc.json +0 -4
  474. package/references/claude-code-acp/CHANGELOG.md +0 -249
  475. package/references/claude-code-acp/LICENSE +0 -222
  476. package/references/claude-code-acp/README.md +0 -53
  477. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  478. package/references/claude-code-acp/eslint.config.js +0 -48
  479. package/references/claude-code-acp/package-lock.json +0 -4570
  480. package/references/claude-code-acp/package.json +0 -88
  481. package/references/claude-code-acp/scripts/release.sh +0 -119
  482. package/references/claude-code-acp/src/acp-agent.ts +0 -2065
  483. package/references/claude-code-acp/src/index.ts +0 -26
  484. package/references/claude-code-acp/src/lib.ts +0 -38
  485. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  486. package/references/claude-code-acp/src/settings.ts +0 -522
  487. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  488. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  489. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  490. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  491. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  492. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  493. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  494. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  495. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  496. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  497. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  498. package/references/claude-code-acp/src/tools.ts +0 -819
  499. package/references/claude-code-acp/src/utils.ts +0 -171
  500. package/references/claude-code-acp/tsconfig.json +0 -18
  501. package/references/claude-code-acp/vitest.config.ts +0 -19
  502. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -82
  503. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -9
  504. package/references/multi-agent-protocol/LICENSE +0 -21
  505. package/references/multi-agent-protocol/README.md +0 -113
  506. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -460
  507. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  508. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  509. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  510. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  511. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  512. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  513. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  514. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  515. package/references/multi-agent-protocol/package-lock.json +0 -3239
  516. package/references/multi-agent-protocol/package.json +0 -56
  517. package/references/multi-agent-protocol/schema/meta.json +0 -337
  518. package/references/multi-agent-protocol/schema/schema.json +0 -1828
@@ -0,0 +1,613 @@
1
+ /**
2
+ * Team Runtime
3
+ *
4
+ * Wires a loaded TeamManifest 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
+ // =============================================================================
11
+ // TeamRuntime
12
+ // =============================================================================
13
+ export class TeamRuntime {
14
+ manifest;
15
+ services;
16
+ rootAgentId;
17
+ companionAgentIds = [];
18
+ roleRegistry;
19
+ lifecycleUnsubscribe;
20
+ integrationStrategy;
21
+ /** Role name → spawned agent ID mapping (populated during bootstrap) */
22
+ roleAgentMap = new Map();
23
+ /** Peer connections that couldn't be wired at bootstrap (target role not yet spawned) */
24
+ pendingPeerRoutes = [];
25
+ /** Per-agent signal filters from peer connections. Key: "fromAgentId→toAgentId" */
26
+ peerSignalFilters = new Map();
27
+ /** Reverse mapping: agent ID → role name (for signal filter lookups) */
28
+ agentRoleMap = new Map();
29
+ /** Lifecycle unsubscribe for deferred peer wiring */
30
+ peerWiringUnsubscribe;
31
+ constructor(manifest, services) {
32
+ this.manifest = manifest;
33
+ this.services = services;
34
+ this.roleRegistry = services.agentManager.getRoleRegistry();
35
+ }
36
+ // ─────────────────────────────────────────────────────────────
37
+ // Initialization
38
+ // ─────────────────────────────────────────────────────────────
39
+ /**
40
+ * Wire team configuration into running services.
41
+ *
42
+ * 1. Register team roles into RoleRegistry
43
+ * 2. Store team_config event in EventStore (for MCP subprocess discovery)
44
+ * 3. Register spawn interceptor on AgentManager
45
+ */
46
+ async initialize() {
47
+ const { agentManager, eventStore } = this.services;
48
+ // 1. Register team roles into RoleRegistry (custom layer, highest priority)
49
+ for (const [, resolved] of this.manifest._resolvedRoles) {
50
+ this.roleRegistry.registerRole(resolved.roleDefinition);
51
+ }
52
+ // 2. Store team config in EventStore for cross-process access (RD2)
53
+ const taskMode = this.manifest.macro_agent.task_assignment?.mode ?? "push";
54
+ const strategyName = this.manifest.macro_agent.integration?.strategy ?? "queue";
55
+ const strategyConfig = this.manifest.macro_agent.integration?.config ?? {};
56
+ const enforcement = this.manifest.communication.enforcement ?? "permissive";
57
+ // Serialize resolved roles for MCP subprocess capability checks
58
+ const serializedRoles = {};
59
+ for (const [name, resolved] of this.manifest._resolvedRoles) {
60
+ const rd = resolved.roleDefinition;
61
+ serializedRoles[name] = {
62
+ name: rd.name,
63
+ capabilities: [...rd.capabilities],
64
+ ...(rd.tools && { tools: rd.tools }),
65
+ ...(rd.lifecycle && { lifecycle: rd.lifecycle }),
66
+ ...(rd.description && { description: rd.description }),
67
+ };
68
+ }
69
+ eventStore.emit({
70
+ type: "status",
71
+ source: { agent_id: "system" },
72
+ payload: {
73
+ status_type: "discovery",
74
+ summary: `Team '${this.manifest.name}' initialized`,
75
+ team_config: {
76
+ teamName: this.manifest.name,
77
+ strategy: strategyName,
78
+ strategyConfig,
79
+ taskMode,
80
+ enforcement,
81
+ roles: serializedRoles,
82
+ peerRoutes: this.manifest.communication.routing?.peers ?? [],
83
+ emissions: this.manifest.communication.emissions ?? {},
84
+ },
85
+ },
86
+ });
87
+ await eventStore.persist();
88
+ // 2b. Instantiate integration strategy and call lifecycle hook
89
+ try {
90
+ const { defaultStrategyRegistry } = await import("../workspace/strategies/registry.js");
91
+ this.integrationStrategy = defaultStrategyRegistry.get(strategyName, strategyConfig);
92
+ if (this.integrationStrategy.initialize) {
93
+ await this.integrationStrategy.initialize();
94
+ }
95
+ }
96
+ catch {
97
+ // Strategy instantiation is best-effort — queue strategy needs merge queue set later
98
+ }
99
+ // 3. Register spawn interceptor
100
+ agentManager.setSpawnInterceptor(this.createSpawnInterceptor());
101
+ }
102
+ // ─────────────────────────────────────────────────────────────
103
+ // Bootstrap
104
+ // ─────────────────────────────────────────────────────────────
105
+ /**
106
+ * Spawn root and companion agents per the team topology.
107
+ */
108
+ async bootstrap() {
109
+ const { agentManager, messageRouter } = this.services;
110
+ const { topology } = this.manifest;
111
+ // 1. Spawn root agent
112
+ const rootPrompt = this.getPromptForTopologyNode(topology.root);
113
+ const root = await agentManager.spawn({
114
+ task: rootPrompt
115
+ ? `[${this.manifest.name}] ${topology.root.role}`
116
+ : `Team ${this.manifest.name} root: ${topology.root.role}`,
117
+ parent: null,
118
+ role: topology.root.role,
119
+ config: {
120
+ model: topology.root.config?.model,
121
+ },
122
+ customPrompt: rootPrompt,
123
+ interactionPatterns: this.getInteractionPatterns(),
124
+ });
125
+ this.rootAgentId = root.id;
126
+ // 2. Spawn companions (peers, not children)
127
+ const companionIds = [];
128
+ for (const companion of topology.companions ?? []) {
129
+ const companionPrompt = this.getPromptForTopologyNode(companion);
130
+ const agent = await agentManager.spawn({
131
+ task: `[${this.manifest.name}] ${companion.role}`,
132
+ parent: null,
133
+ role: companion.role,
134
+ config: {
135
+ model: companion.config?.model,
136
+ },
137
+ customPrompt: companionPrompt,
138
+ interactionPatterns: this.getInteractionPatterns(),
139
+ });
140
+ companionIds.push(agent.id);
141
+ }
142
+ this.companionAgentIds = companionIds;
143
+ // 3. Build role↔agent mappings and wire peer subscriptions
144
+ this.roleAgentMap.set(topology.root.role, root.id);
145
+ this.agentRoleMap.set(root.id, topology.root.role);
146
+ for (let i = 0; i < (topology.companions ?? []).length; i++) {
147
+ this.roleAgentMap.set(topology.companions[i].role, companionIds[i]);
148
+ this.agentRoleMap.set(companionIds[i], topology.companions[i].role);
149
+ }
150
+ this.wirePeerRoutes();
151
+ // 4. Install signal filter on message router
152
+ this.installSignalFilter();
153
+ // 5. Install emission validator on message router
154
+ this.installEmissionValidator();
155
+ // 6. Set up continuation monitoring for daemon agents (P4.2)
156
+ this.monitorContinuations();
157
+ return {
158
+ rootId: root.id,
159
+ companionIds,
160
+ };
161
+ }
162
+ // ─────────────────────────────────────────────────────────────
163
+ // Teardown
164
+ // ─────────────────────────────────────────────────────────────
165
+ /**
166
+ * Tear down team: remove spawn interceptor, stop continuation monitoring.
167
+ */
168
+ async teardown() {
169
+ this.services.agentManager.setSpawnInterceptor(null);
170
+ if (this.lifecycleUnsubscribe) {
171
+ this.lifecycleUnsubscribe();
172
+ this.lifecycleUnsubscribe = undefined;
173
+ }
174
+ if (this.peerWiringUnsubscribe) {
175
+ this.peerWiringUnsubscribe();
176
+ this.peerWiringUnsubscribe = undefined;
177
+ }
178
+ // Call strategy lifecycle close hook
179
+ if (this.integrationStrategy?.close) {
180
+ try {
181
+ await this.integrationStrategy.close();
182
+ }
183
+ catch {
184
+ // Best-effort cleanup
185
+ }
186
+ }
187
+ }
188
+ // ─────────────────────────────────────────────────────────────
189
+ // Getters
190
+ // ─────────────────────────────────────────────────────────────
191
+ /** Get task assignment mode */
192
+ getTaskMode() {
193
+ return this.manifest.macro_agent.task_assignment?.mode ?? "push";
194
+ }
195
+ /** Get integration strategy name */
196
+ getStrategyName() {
197
+ return this.manifest.macro_agent.integration?.strategy ?? "queue";
198
+ }
199
+ /** Get the active manifest (for API) */
200
+ getManifest() {
201
+ return this.manifest;
202
+ }
203
+ /** Get root agent ID (after bootstrap) */
204
+ getRootAgentId() {
205
+ return this.rootAgentId;
206
+ }
207
+ /** Get companion agent IDs (after bootstrap) */
208
+ getCompanionAgentIds() {
209
+ return [...this.companionAgentIds];
210
+ }
211
+ /** Get the instantiated integration strategy (after initialize) */
212
+ getIntegrationStrategy() {
213
+ return this.integrationStrategy;
214
+ }
215
+ /** Get signal filters for peer connections (for use by signal filtering - i-3o8g) */
216
+ getPeerSignalFilters() {
217
+ return this.peerSignalFilters;
218
+ }
219
+ // ─────────────────────────────────────────────────────────────
220
+ // Continuation Monitoring (P4.2)
221
+ // ─────────────────────────────────────────────────────────────
222
+ /**
223
+ * Monitor agent lifecycle events for auto-continuation of daemon agents.
224
+ *
225
+ * When a root or companion agent terminates unexpectedly and the team's
226
+ * lifecycle config enables continuations, automatically spawn a continuation.
227
+ */
228
+ monitorContinuations() {
229
+ const lifecycleConfig = this.manifest.macro_agent.lifecycle;
230
+ if (!lifecycleConfig?.continuations?.enabled)
231
+ return;
232
+ const { agentManager } = this.services;
233
+ const monitoredAgents = new Set([
234
+ this.rootAgentId,
235
+ ...this.companionAgentIds,
236
+ ]);
237
+ this.lifecycleUnsubscribe = agentManager.onLifecycleEvent((event) => {
238
+ if (event.type !== "stopped")
239
+ return;
240
+ if (!monitoredAgents.has(event.agent.id))
241
+ return;
242
+ // Only auto-continue on unexpected stops (not explicit completion)
243
+ const reason = event.reason;
244
+ if (reason === "completed" || reason === "cancelled")
245
+ return;
246
+ // Schedule auto-continuation (async, fire-and-forget)
247
+ setTimeout(async () => {
248
+ try {
249
+ const newAgent = await agentManager.continueAgent(event.agent.id);
250
+ // Update monitoring set
251
+ monitoredAgents.delete(event.agent.id);
252
+ monitoredAgents.add(newAgent.id);
253
+ if (event.agent.id === this.rootAgentId) {
254
+ this.rootAgentId = newAgent.id;
255
+ }
256
+ else {
257
+ const idx = this.companionAgentIds.indexOf(event.agent.id);
258
+ if (idx >= 0) {
259
+ this.companionAgentIds[idx] = newAgent.id;
260
+ }
261
+ }
262
+ }
263
+ catch {
264
+ // Failed to continue — agent is gone
265
+ }
266
+ }, 1000);
267
+ });
268
+ }
269
+ // ─────────────────────────────────────────────────────────────
270
+ // Spawn Interceptor
271
+ // ─────────────────────────────────────────────────────────────
272
+ /**
273
+ * Create the spawn interceptor that injects team context into spawn options.
274
+ */
275
+ createSpawnInterceptor() {
276
+ return (options) => {
277
+ const roleName = options.role;
278
+ if (!roleName)
279
+ return options;
280
+ const resolved = this.manifest._resolvedRoles.get(roleName);
281
+ if (!resolved)
282
+ return options; // Unknown role — pass through
283
+ // Compute topics from communication topology
284
+ const teamTopics = this.getTopicsForRole(roleName);
285
+ // Get MCP servers for this role
286
+ const teamMcpServers = this.getMcpServersForRole(roleName);
287
+ // Get prompt from role definition or topology
288
+ const teamPrompt = this.getPromptForRole(roleName);
289
+ // Build team env vars
290
+ const teamEnv = {
291
+ MACRO_TEAM_NAME: this.manifest.name,
292
+ MACRO_TASK_MODE: this.getTaskMode(),
293
+ };
294
+ const strategyName = this.getStrategyName();
295
+ if (strategyName) {
296
+ teamEnv.MACRO_INTEGRATION_STRATEGY = strategyName;
297
+ }
298
+ return {
299
+ ...options,
300
+ // Merge topics
301
+ topics: [
302
+ ...(options.topics ?? []),
303
+ ...teamTopics,
304
+ ],
305
+ // Merge config
306
+ config: {
307
+ ...options.config,
308
+ mcpServers: [
309
+ ...(options.config?.mcpServers ?? []),
310
+ ...teamMcpServers.map((s) => ({
311
+ name: s.name,
312
+ command: s.command,
313
+ args: s.args,
314
+ env: s.env,
315
+ })),
316
+ ],
317
+ env: {
318
+ ...options.config?.env,
319
+ ...teamEnv,
320
+ },
321
+ },
322
+ // Set team prompt (only if not already provided by caller)
323
+ customPrompt: options.customPrompt ?? teamPrompt,
324
+ // Set interaction patterns (only if not already provided)
325
+ interactionPatterns: options.interactionPatterns ?? this.getInteractionPatterns(),
326
+ };
327
+ };
328
+ }
329
+ // ─────────────────────────────────────────────────────────────
330
+ // Communication Topology Helpers
331
+ // ─────────────────────────────────────────────────────────────
332
+ /**
333
+ * Get topic names a role should subscribe to based on communication config.
334
+ */
335
+ getTopicsForRole(roleName) {
336
+ const topics = [];
337
+ const subs = this.manifest.communication.subscriptions?.[roleName] ?? [];
338
+ for (const sub of subs) {
339
+ // Channel name becomes the topic name
340
+ if (!topics.includes(sub.channel)) {
341
+ topics.push(sub.channel);
342
+ }
343
+ }
344
+ return topics;
345
+ }
346
+ /**
347
+ * Get MCP servers configured for a role.
348
+ */
349
+ getMcpServersForRole(roleName) {
350
+ return this.manifest._mcpServers.get(roleName) ?? [];
351
+ }
352
+ /**
353
+ * Get the loaded prompt content for a role.
354
+ */
355
+ getPromptForRole(roleName) {
356
+ const resolved = this.manifest._resolvedRoles.get(roleName);
357
+ if (!resolved?.prompt)
358
+ return undefined;
359
+ return this.manifest._loadedPrompts.get(resolved.prompt);
360
+ }
361
+ /**
362
+ * Get the prompt for a topology node (root or companion).
363
+ */
364
+ getPromptForTopologyNode(node) {
365
+ // Prefer topology-level prompt reference
366
+ if (node.prompt) {
367
+ return this.manifest._loadedPrompts.get(node.prompt);
368
+ }
369
+ // Fall back to role-level prompt
370
+ return this.getPromptForRole(node.role);
371
+ }
372
+ /**
373
+ * Generate interaction pattern injection sections based on team config.
374
+ */
375
+ getInteractionPatterns() {
376
+ const patterns = [];
377
+ const taskMode = this.getTaskMode();
378
+ if (taskMode === "pull") {
379
+ const pullConfig = this.manifest.macro_agent.task_assignment?.pull;
380
+ const idleTimeout = pullConfig?.idle_timeout_s ?? 300;
381
+ patterns.push(`## Task Claiming
382
+
383
+ You operate in PULL mode. After completing a task:
384
+ 1. Call done() with your results
385
+ 2. Call claim_task() to get your next task
386
+ 3. If no tasks available, wait briefly and retry
387
+ 4. After ${idleTimeout} seconds idle, call done() to exit gracefully
388
+
389
+ Claim and execute independently — do not wait for instructions.`);
390
+ }
391
+ const strategy = this.getStrategyName();
392
+ if (strategy === "trunk") {
393
+ patterns.push(`## Integration
394
+
395
+ Your changes are integrated via trunk-based development. When you call done(),
396
+ your work is pushed directly to the integration branch. If there's a conflict,
397
+ the system will rebase and retry automatically. Write small, focused changes
398
+ to minimize conflict probability.`);
399
+ }
400
+ else if (strategy === "optimistic") {
401
+ patterns.push(`## Integration
402
+
403
+ Your changes are integrated optimistically. They are pushed immediately and
404
+ validated asynchronously. If validation fails, a fixup task will be created.
405
+ Focus on correctness — your changes go live immediately.`);
406
+ }
407
+ return patterns;
408
+ }
409
+ // ─────────────────────────────────────────────────────────────
410
+ // Signal Filtering
411
+ // ─────────────────────────────────────────────────────────────
412
+ /**
413
+ * Install a signal filter on the message router.
414
+ *
415
+ * Combines two filter sources:
416
+ * 1. Channel subscription filters (per-role, per-topic): from communication.subscriptions
417
+ * 2. Peer connection filters (per-agent-pair): from communication.routing.peers
418
+ *
419
+ * Status events with no details.signal always pass through (backwards compat).
420
+ */
421
+ installSignalFilter() {
422
+ const { messageRouter } = this.services;
423
+ // Pre-compute per-role allowed signals from channel subscriptions.
424
+ // Key: role name, Value: Set of allowed signal names.
425
+ // If a role has any subscription without a signals filter, it receives all signals.
426
+ const roleAllowedSignals = new Map();
427
+ for (const [roleName, subs] of Object.entries(this.manifest.communication.subscriptions ?? {})) {
428
+ let allowed = new Set();
429
+ for (const sub of subs) {
430
+ if (!sub.signals || sub.signals.length === 0) {
431
+ // No filter on this subscription — role receives all signals
432
+ allowed = "all";
433
+ break;
434
+ }
435
+ for (const sig of sub.signals) {
436
+ allowed.add(sig);
437
+ }
438
+ }
439
+ roleAllowedSignals.set(roleName, allowed);
440
+ }
441
+ if (messageRouter.setSignalFilter) {
442
+ messageRouter.setSignalFilter((from, to, signal) => {
443
+ // Untagged status events always pass through
444
+ if (!signal)
445
+ return true;
446
+ // Check peer connection filter (directional: from→to)
447
+ const peerFilter = this.peerSignalFilters.get(`${from}→${to}`);
448
+ if (peerFilter) {
449
+ return peerFilter.includes(signal);
450
+ }
451
+ // Check channel subscription filter for recipient's role
452
+ const recipientRole = this.agentRoleMap.get(to);
453
+ if (recipientRole) {
454
+ const allowed = roleAllowedSignals.get(recipientRole);
455
+ if (allowed && allowed !== "all") {
456
+ return allowed.has(signal);
457
+ }
458
+ }
459
+ // No filter configured — allow delivery
460
+ return true;
461
+ });
462
+ }
463
+ }
464
+ // ─────────────────────────────────────────────────────────────
465
+ // Emission Validation
466
+ // ─────────────────────────────────────────────────────────────
467
+ /**
468
+ * Install emission validator on the message router.
469
+ * Checks whether an agent's emitted signal is in its role's allowed emissions list.
470
+ * Behavior depends on enforcement mode: strict (reject), permissive (warn), audit (record).
471
+ */
472
+ installEmissionValidator() {
473
+ const { messageRouter } = this.services;
474
+ const emissions = this.manifest.communication.emissions;
475
+ const enforcement = this.manifest.communication.enforcement ?? "permissive";
476
+ // No emissions config — nothing to enforce
477
+ if (!emissions || Object.keys(emissions).length === 0)
478
+ return;
479
+ if (messageRouter.setEmissionValidator) {
480
+ messageRouter.setEmissionValidator((agentId, signal) => {
481
+ // Untagged status events are always allowed
482
+ if (!signal)
483
+ return { action: "allow" };
484
+ const role = this.agentRoleMap.get(agentId);
485
+ if (!role)
486
+ return { action: "allow" };
487
+ const allowedSignals = emissions[role];
488
+ if (!allowedSignals)
489
+ return { action: "allow" };
490
+ if (allowedSignals.includes(signal)) {
491
+ return { action: "allow" };
492
+ }
493
+ // Signal not in allowed list — enforce
494
+ const message = `Agent '${agentId}' (role: ${role}) emitted disallowed signal '${signal}'. Allowed: [${allowedSignals.join(", ")}]`;
495
+ switch (enforcement) {
496
+ case "strict":
497
+ return { action: "reject", message };
498
+ case "audit":
499
+ return { action: "audit", message };
500
+ case "permissive":
501
+ default:
502
+ return { action: "warn", message };
503
+ }
504
+ });
505
+ }
506
+ }
507
+ // ─────────────────────────────────────────────────────────────
508
+ // Peer Routing
509
+ // ─────────────────────────────────────────────────────────────
510
+ /**
511
+ * Wire peer subscriptions from communication config.
512
+ * Falls back to legacy bidirectional subtree subs when no peers config exists.
513
+ */
514
+ wirePeerRoutes() {
515
+ const peers = this.manifest.communication.routing?.peers;
516
+ if (!peers || peers.length === 0) {
517
+ // Fallback: hardcoded mutual subtree subscriptions (backwards compat)
518
+ this.setupLegacyPeerSubscriptions();
519
+ return;
520
+ }
521
+ this.pendingPeerRoutes = [];
522
+ for (const peer of peers) {
523
+ const fromAgent = this.roleAgentMap.get(peer.from);
524
+ const toAgent = this.roleAgentMap.get(peer.to);
525
+ if (!fromAgent || !toAgent) {
526
+ // One or both roles not yet spawned — defer
527
+ this.pendingPeerRoutes.push(peer);
528
+ continue;
529
+ }
530
+ this.wireSinglePeerRoute(peer, fromAgent, toAgent);
531
+ }
532
+ // If there are pending routes, set up lifecycle listener for deferred wiring
533
+ if (this.pendingPeerRoutes.length > 0) {
534
+ this.setupDeferredPeerWiring();
535
+ }
536
+ }
537
+ /**
538
+ * Wire a single peer connection based on its `via` type.
539
+ */
540
+ wireSinglePeerRoute(peer, fromAgent, toAgent) {
541
+ const { messageRouter } = this.services;
542
+ switch (peer.via) {
543
+ case "direct":
544
+ // Directional: from receives status events from to's subtree
545
+ messageRouter.subscribe(fromAgent, { type: "subtree", target: toAgent });
546
+ break;
547
+ case "topic": {
548
+ // Both agents share a named topic
549
+ const topicName = `peer:${peer.from}:${peer.to}`;
550
+ messageRouter.subscribe(fromAgent, { type: "topic", target: topicName });
551
+ messageRouter.subscribe(toAgent, { type: "topic", target: topicName });
552
+ break;
553
+ }
554
+ case "scope":
555
+ // from subscribes to to's role channel
556
+ messageRouter.subscribe(fromAgent, { type: "role", target: peer.to });
557
+ break;
558
+ }
559
+ // Store signal filter if specified
560
+ if (peer.signals && peer.signals.length > 0) {
561
+ const key = `${fromAgent}→${toAgent}`;
562
+ this.peerSignalFilters.set(key, peer.signals);
563
+ }
564
+ }
565
+ /**
566
+ * Legacy bidirectional subtree subscriptions between root and companions.
567
+ * Used when no `routing.peers` config is defined (backwards compat).
568
+ */
569
+ setupLegacyPeerSubscriptions() {
570
+ const { messageRouter } = this.services;
571
+ if (!this.rootAgentId)
572
+ return;
573
+ for (const companionId of this.companionAgentIds) {
574
+ messageRouter.subscribe(this.rootAgentId, { type: "subtree", target: companionId });
575
+ messageRouter.subscribe(companionId, { type: "subtree", target: this.rootAgentId });
576
+ }
577
+ }
578
+ /**
579
+ * Listen for agent spawns and wire pending peer routes when roles become available.
580
+ */
581
+ setupDeferredPeerWiring() {
582
+ const { agentManager } = this.services;
583
+ this.peerWiringUnsubscribe = agentManager.onLifecycleEvent((event) => {
584
+ if (event.type !== "spawned")
585
+ return;
586
+ const role = event.agent.role;
587
+ if (!role)
588
+ return;
589
+ // Update role↔agent mappings
590
+ this.roleAgentMap.set(role, event.agent.id);
591
+ this.agentRoleMap.set(event.agent.id, role);
592
+ // Try to wire any pending routes involving this role
593
+ const stillPending = [];
594
+ for (const peer of this.pendingPeerRoutes) {
595
+ const fromAgent = this.roleAgentMap.get(peer.from);
596
+ const toAgent = this.roleAgentMap.get(peer.to);
597
+ if (fromAgent && toAgent) {
598
+ this.wireSinglePeerRoute(peer, fromAgent, toAgent);
599
+ }
600
+ else {
601
+ stillPending.push(peer);
602
+ }
603
+ }
604
+ this.pendingPeerRoutes = stillPending;
605
+ // All wired — unsubscribe
606
+ if (stillPending.length === 0 && this.peerWiringUnsubscribe) {
607
+ this.peerWiringUnsubscribe();
608
+ this.peerWiringUnsubscribe = undefined;
609
+ }
610
+ });
611
+ }
612
+ }
613
+ //# sourceMappingURL=team-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-runtime.js","sourceRoot":"","sources":["../../src/teams/team-runtime.ts"],"names":[],"mappings":"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"}