macro-agent 0.0.11 → 0.0.13

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 (408) 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 +6 -0
  16. package/.sudocode/specs.jsonl +7 -0
  17. package/CLAUDE.md +110 -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 +25 -1
  31. package/dist/agent/agent-manager.d.ts.map +1 -1
  32. package/dist/agent/agent-manager.js +93 -7
  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-detection/command-builder.d.ts +30 -0
  38. package/dist/agent-detection/command-builder.d.ts.map +1 -0
  39. package/dist/agent-detection/command-builder.js +71 -0
  40. package/dist/agent-detection/command-builder.js.map +1 -0
  41. package/dist/agent-detection/detector.d.ts +84 -0
  42. package/dist/agent-detection/detector.d.ts.map +1 -0
  43. package/dist/agent-detection/detector.js +240 -0
  44. package/dist/agent-detection/detector.js.map +1 -0
  45. package/dist/agent-detection/index.d.ts +12 -0
  46. package/dist/agent-detection/index.d.ts.map +1 -0
  47. package/dist/agent-detection/index.js +14 -0
  48. package/dist/agent-detection/index.js.map +1 -0
  49. package/dist/agent-detection/registry.d.ts +53 -0
  50. package/dist/agent-detection/registry.d.ts.map +1 -0
  51. package/dist/agent-detection/registry.js +177 -0
  52. package/dist/agent-detection/registry.js.map +1 -0
  53. package/dist/agent-detection/types.d.ts +121 -0
  54. package/dist/agent-detection/types.d.ts.map +1 -0
  55. package/dist/agent-detection/types.js +20 -0
  56. package/dist/agent-detection/types.js.map +1 -0
  57. package/dist/api/server.d.ts.map +1 -1
  58. package/dist/api/server.js +95 -0
  59. package/dist/api/server.js.map +1 -1
  60. package/dist/cli/index.js +29 -0
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/mcp.js +38 -0
  63. package/dist/cli/mcp.js.map +1 -1
  64. package/dist/config/index.d.ts +2 -0
  65. package/dist/config/index.d.ts.map +1 -0
  66. package/dist/config/index.js +2 -0
  67. package/dist/config/index.js.map +1 -0
  68. package/dist/config/project-config.d.ts +46 -0
  69. package/dist/config/project-config.d.ts.map +1 -0
  70. package/dist/config/project-config.js +68 -0
  71. package/dist/config/project-config.js.map +1 -0
  72. package/dist/lifecycle/cascade.d.ts +1 -1
  73. package/dist/lifecycle/cascade.d.ts.map +1 -1
  74. package/dist/lifecycle/handlers/index.d.ts +4 -0
  75. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/index.js +2 -0
  77. package/dist/lifecycle/handlers/index.js.map +1 -1
  78. package/dist/lifecycle/handlers/worker.d.ts +4 -0
  79. package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/worker.js +35 -3
  81. package/dist/lifecycle/handlers/worker.js.map +1 -1
  82. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  83. package/dist/map/adapter/acp-over-map.js +32 -2
  84. package/dist/map/adapter/acp-over-map.js.map +1 -1
  85. package/dist/map/adapter/event-translator.d.ts.map +1 -1
  86. package/dist/map/adapter/event-translator.js +1 -0
  87. package/dist/map/adapter/event-translator.js.map +1 -1
  88. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  89. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  90. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  91. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  92. package/dist/map/adapter/extensions/index.d.ts +10 -1
  93. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  94. package/dist/map/adapter/extensions/index.js +39 -0
  95. package/dist/map/adapter/extensions/index.js.map +1 -1
  96. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  97. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  98. package/dist/map/adapter/extensions/resume.js +59 -0
  99. package/dist/map/adapter/extensions/resume.js.map +1 -0
  100. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  101. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  102. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  103. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  104. package/dist/mcp/mcp-server.d.ts +6 -0
  105. package/dist/mcp/mcp-server.d.ts.map +1 -1
  106. package/dist/mcp/mcp-server.js +45 -0
  107. package/dist/mcp/mcp-server.js.map +1 -1
  108. package/dist/mcp/tools/claim_task.d.ts +35 -0
  109. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  110. package/dist/mcp/tools/claim_task.js +58 -0
  111. package/dist/mcp/tools/claim_task.js.map +1 -0
  112. package/dist/mcp/tools/done.d.ts +11 -2
  113. package/dist/mcp/tools/done.d.ts.map +1 -1
  114. package/dist/mcp/tools/done.js +15 -10
  115. package/dist/mcp/tools/done.js.map +1 -1
  116. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  117. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  118. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  119. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  120. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  121. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  122. package/dist/mcp/tools/unclaim_task.js +47 -0
  123. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  124. package/dist/metrics/index.d.ts +2 -0
  125. package/dist/metrics/index.d.ts.map +1 -0
  126. package/dist/metrics/index.js +2 -0
  127. package/dist/metrics/index.js.map +1 -0
  128. package/dist/metrics/metrics.d.ts +79 -0
  129. package/dist/metrics/metrics.d.ts.map +1 -0
  130. package/dist/metrics/metrics.js +166 -0
  131. package/dist/metrics/metrics.js.map +1 -0
  132. package/dist/roles/capabilities.d.ts +1 -0
  133. package/dist/roles/capabilities.d.ts.map +1 -1
  134. package/dist/roles/capabilities.js +3 -0
  135. package/dist/roles/capabilities.js.map +1 -1
  136. package/dist/roles/types.d.ts +1 -1
  137. package/dist/roles/types.d.ts.map +1 -1
  138. package/dist/router/message-router.d.ts +41 -0
  139. package/dist/router/message-router.d.ts.map +1 -1
  140. package/dist/router/message-router.js +136 -5
  141. package/dist/router/message-router.js.map +1 -1
  142. package/dist/store/event-store.d.ts +8 -1
  143. package/dist/store/event-store.d.ts.map +1 -1
  144. package/dist/store/event-store.js +120 -4
  145. package/dist/store/event-store.js.map +1 -1
  146. package/dist/store/types/agents.d.ts +1 -1
  147. package/dist/store/types/agents.d.ts.map +1 -1
  148. package/dist/store/types/events.d.ts +1 -1
  149. package/dist/store/types/events.d.ts.map +1 -1
  150. package/dist/store/types/events.js.map +1 -1
  151. package/dist/store/types/index.d.ts +1 -0
  152. package/dist/store/types/index.d.ts.map +1 -1
  153. package/dist/store/types/index.js +1 -0
  154. package/dist/store/types/index.js.map +1 -1
  155. package/dist/store/types/sessions.d.ts +44 -0
  156. package/dist/store/types/sessions.d.ts.map +1 -0
  157. package/dist/store/types/sessions.js +9 -0
  158. package/dist/store/types/sessions.js.map +1 -0
  159. package/dist/store/types/tasks.d.ts +2 -0
  160. package/dist/store/types/tasks.d.ts.map +1 -1
  161. package/dist/task/backend/memory.d.ts +4 -1
  162. package/dist/task/backend/memory.d.ts.map +1 -1
  163. package/dist/task/backend/memory.js +81 -0
  164. package/dist/task/backend/memory.js.map +1 -1
  165. package/dist/task/backend/types.d.ts +30 -0
  166. package/dist/task/backend/types.d.ts.map +1 -1
  167. package/dist/task/backend/types.js.map +1 -1
  168. package/dist/teams/index.d.ts +4 -0
  169. package/dist/teams/index.d.ts.map +1 -0
  170. package/dist/teams/index.js +4 -0
  171. package/dist/teams/index.js.map +1 -0
  172. package/dist/teams/team-loader.d.ts +20 -0
  173. package/dist/teams/team-loader.d.ts.map +1 -0
  174. package/dist/teams/team-loader.js +293 -0
  175. package/dist/teams/team-loader.js.map +1 -0
  176. package/dist/teams/team-runtime.d.ts +139 -0
  177. package/dist/teams/team-runtime.d.ts.map +1 -0
  178. package/dist/teams/team-runtime.js +613 -0
  179. package/dist/teams/team-runtime.js.map +1 -0
  180. package/dist/teams/types.d.ts +266 -0
  181. package/dist/teams/types.d.ts.map +1 -0
  182. package/dist/teams/types.js +20 -0
  183. package/dist/teams/types.js.map +1 -0
  184. package/dist/workspace/dataplane-adapter.d.ts +1 -1
  185. package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
  186. package/dist/workspace/dataplane-adapter.js +1 -1
  187. package/dist/workspace/dataplane-adapter.js.map +1 -1
  188. package/dist/workspace/index.d.ts +1 -1
  189. package/dist/workspace/index.d.ts.map +1 -1
  190. package/dist/workspace/strategies/index.d.ts +6 -0
  191. package/dist/workspace/strategies/index.d.ts.map +1 -0
  192. package/dist/workspace/strategies/index.js +5 -0
  193. package/dist/workspace/strategies/index.js.map +1 -0
  194. package/dist/workspace/strategies/optimistic.d.ts +26 -0
  195. package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
  196. package/dist/workspace/strategies/optimistic.js +121 -0
  197. package/dist/workspace/strategies/optimistic.js.map +1 -0
  198. package/dist/workspace/strategies/queue.d.ts +26 -0
  199. package/dist/workspace/strategies/queue.d.ts.map +1 -0
  200. package/dist/workspace/strategies/queue.js +67 -0
  201. package/dist/workspace/strategies/queue.js.map +1 -0
  202. package/dist/workspace/strategies/registry.d.ts +37 -0
  203. package/dist/workspace/strategies/registry.d.ts.map +1 -0
  204. package/dist/workspace/strategies/registry.js +63 -0
  205. package/dist/workspace/strategies/registry.js.map +1 -0
  206. package/dist/workspace/strategies/trunk.d.ts +20 -0
  207. package/dist/workspace/strategies/trunk.d.ts.map +1 -0
  208. package/dist/workspace/strategies/trunk.js +108 -0
  209. package/dist/workspace/strategies/trunk.js.map +1 -0
  210. package/dist/workspace/strategies/types.d.ts +104 -0
  211. package/dist/workspace/strategies/types.d.ts.map +1 -0
  212. package/dist/workspace/strategies/types.js +11 -0
  213. package/dist/workspace/strategies/types.js.map +1 -0
  214. package/dist/workspace/types.d.ts +1 -1
  215. package/dist/workspace/types.d.ts.map +1 -1
  216. package/dist/workspace/workspace-manager.d.ts +1 -1
  217. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  218. package/docs/implementation-details.md +1127 -0
  219. package/docs/implementation-summary.md +448 -0
  220. package/docs/plan-self-driving-support.md +433 -0
  221. package/docs/spec-self-driving-support.md +462 -0
  222. package/docs/team-templates.md +860 -0
  223. package/docs/teams.md +233 -0
  224. package/package.json +5 -3
  225. package/src/acp/__tests__/integration.test.ts +161 -1
  226. package/src/acp/__tests__/macro-agent.test.ts +95 -0
  227. package/src/acp/__tests__/session-persistence.test.ts +276 -0
  228. package/src/acp/macro-agent.ts +79 -7
  229. package/src/acp/session-mapper.ts +108 -1
  230. package/src/acp/types.ts +33 -1
  231. package/src/agent/agent-manager.ts +158 -6
  232. package/src/agent/types.ts +27 -0
  233. package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
  234. package/src/agent-detection/__tests__/detector.test.ts +768 -0
  235. package/src/agent-detection/__tests__/registry.test.ts +254 -0
  236. package/src/agent-detection/command-builder.ts +90 -0
  237. package/src/agent-detection/detector.ts +307 -0
  238. package/src/agent-detection/index.ts +36 -0
  239. package/src/agent-detection/registry.ts +200 -0
  240. package/src/agent-detection/types.ts +184 -0
  241. package/src/api/server.ts +110 -0
  242. package/src/cli/index.ts +44 -0
  243. package/src/cli/mcp.ts +47 -0
  244. package/src/config/index.ts +9 -0
  245. package/src/config/project-config.ts +107 -0
  246. package/src/lifecycle/cascade.ts +1 -1
  247. package/src/lifecycle/handlers/index.ts +8 -0
  248. package/src/lifecycle/handlers/worker.ts +48 -3
  249. package/src/map/adapter/__tests__/extensions.test.ts +359 -0
  250. package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
  251. package/src/map/adapter/acp-over-map.ts +45 -2
  252. package/src/map/adapter/event-translator.ts +1 -0
  253. package/src/map/adapter/extensions/agent-detection.ts +201 -0
  254. package/src/map/adapter/extensions/index.ts +63 -0
  255. package/src/map/adapter/extensions/resume.ts +114 -0
  256. package/src/map/adapter/extensions/workspace-files.ts +449 -0
  257. package/src/mcp/mcp-server.ts +67 -0
  258. package/src/mcp/tools/claim_task.ts +86 -0
  259. package/src/mcp/tools/done.ts +24 -10
  260. package/src/mcp/tools/list_claimable_tasks.ts +93 -0
  261. package/src/mcp/tools/unclaim_task.ts +71 -0
  262. package/src/metrics/index.ts +9 -0
  263. package/src/metrics/metrics.ts +280 -0
  264. package/src/roles/capabilities.ts +3 -0
  265. package/src/roles/types.ts +2 -1
  266. package/src/router/__tests__/message-router.test.ts +561 -0
  267. package/src/router/message-router.ts +223 -6
  268. package/src/store/event-store.ts +151 -3
  269. package/src/store/types/agents.ts +1 -1
  270. package/src/store/types/events.ts +2 -1
  271. package/src/store/types/index.ts +1 -0
  272. package/src/store/types/sessions.ts +53 -0
  273. package/src/store/types/tasks.ts +3 -0
  274. package/src/task/backend/memory.ts +116 -0
  275. package/src/task/backend/types.ts +43 -0
  276. package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
  277. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
  278. package/src/teams/__tests__/team-system.test.ts +1280 -0
  279. package/src/teams/index.ts +13 -0
  280. package/src/teams/team-loader.ts +434 -0
  281. package/src/teams/team-runtime.ts +727 -0
  282. package/src/teams/types.ts +377 -0
  283. package/src/workspace/dataplane-adapter.ts +1 -1
  284. package/src/workspace/index.ts +1 -1
  285. package/src/workspace/strategies/index.ts +18 -0
  286. package/src/workspace/strategies/optimistic.ts +136 -0
  287. package/src/workspace/strategies/queue.ts +81 -0
  288. package/src/workspace/strategies/registry.ts +89 -0
  289. package/src/workspace/strategies/trunk.ts +123 -0
  290. package/src/workspace/strategies/types.ts +145 -0
  291. package/src/workspace/types.ts +1 -1
  292. package/src/workspace/workspace-manager.ts +1 -1
  293. package/.claude/settings.local.json +0 -59
  294. package/dist/map/utils/address-translation.d.ts +0 -99
  295. package/dist/map/utils/address-translation.d.ts.map +0 -1
  296. package/dist/map/utils/address-translation.js +0 -285
  297. package/dist/map/utils/address-translation.js.map +0 -1
  298. package/dist/map/utils/index.d.ts +0 -7
  299. package/dist/map/utils/index.d.ts.map +0 -1
  300. package/dist/map/utils/index.js +0 -7
  301. package/dist/map/utils/index.js.map +0 -1
  302. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  303. package/references/acp-factory-ref/LICENSE +0 -21
  304. package/references/acp-factory-ref/README.md +0 -341
  305. package/references/acp-factory-ref/package-lock.json +0 -3102
  306. package/references/acp-factory-ref/package.json +0 -96
  307. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  308. package/references/acp-factory-ref/python/LICENSE +0 -21
  309. package/references/acp-factory-ref/python/Makefile +0 -57
  310. package/references/acp-factory-ref/python/README.md +0 -253
  311. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  312. package/references/acp-factory-ref/python/tests/__init__.py +0 -0
  313. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  314. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  315. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  316. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  317. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  318. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  319. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  320. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  321. package/references/claude-code-acp/.prettierrc.json +0 -4
  322. package/references/claude-code-acp/CHANGELOG.md +0 -249
  323. package/references/claude-code-acp/LICENSE +0 -222
  324. package/references/claude-code-acp/README.md +0 -53
  325. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  326. package/references/claude-code-acp/eslint.config.js +0 -48
  327. package/references/claude-code-acp/package-lock.json +0 -4570
  328. package/references/claude-code-acp/package.json +0 -88
  329. package/references/claude-code-acp/scripts/release.sh +0 -119
  330. package/references/claude-code-acp/src/acp-agent.ts +0 -2065
  331. package/references/claude-code-acp/src/index.ts +0 -26
  332. package/references/claude-code-acp/src/lib.ts +0 -38
  333. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  334. package/references/claude-code-acp/src/settings.ts +0 -522
  335. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  336. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  337. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  338. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  339. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  340. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  341. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  342. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  343. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  344. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  345. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  346. package/references/claude-code-acp/src/tools.ts +0 -819
  347. package/references/claude-code-acp/src/utils.ts +0 -171
  348. package/references/claude-code-acp/tsconfig.json +0 -18
  349. package/references/claude-code-acp/vitest.config.ts +0 -19
  350. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  351. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  352. package/references/multi-agent-protocol/LICENSE +0 -21
  353. package/references/multi-agent-protocol/README.md +0 -113
  354. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  355. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  356. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  357. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  358. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  359. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  360. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  361. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  362. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  363. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  364. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  365. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  366. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  367. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  368. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  369. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  370. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  371. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  372. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  373. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  374. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  375. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  376. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  377. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  378. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  379. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  380. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  381. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  382. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  383. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  384. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  385. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  386. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  387. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  388. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  389. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  390. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  391. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  392. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  393. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  394. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  395. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  396. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  397. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  398. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  399. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  400. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  401. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  402. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  403. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  404. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  405. package/references/multi-agent-protocol/package-lock.json +0 -3886
  406. package/references/multi-agent-protocol/package.json +0 -56
  407. package/references/multi-agent-protocol/schema/meta.json +0 -467
  408. package/references/multi-agent-protocol/schema/schema.json +0 -2558
@@ -0,0 +1,448 @@
1
+ # Self-Driving Codebases: Implementation Summary
2
+
3
+ Implementation of modular team templates, pluggable integration strategies, task pull model, session continuations, and observability for macro-agent. Completed across 6 phases plus a post-phase fix to bridge status routing to topic subscribers.
4
+
5
+ ## Design Decisions
6
+
7
+ Seven resolved design decisions (RD1–RD7) guide the implementation:
8
+
9
+ | Decision | Summary |
10
+ |----------|---------|
11
+ | **RD1** | Replace hardcoded `done()` role check with `roleRegistry.hasCapability()` lookup |
12
+ | **RD2** | Share team config via EventStore status event (cross-process MCP subprocess access) |
13
+ | **RD3** | `spawn_rules` translate to capability additions (e.g., `planner: [grinder]` → `agent.spawn.grinder`) |
14
+ | **RD4** | Team `customPrompt` replaces base role `systemPrompt` entirely |
15
+ | **RD5** | Optimistic strategy is thin — validation is the judge agent's job |
16
+ | **RD6** | Team selection via `.macro-agent/config.json` with CLI `--team` override |
17
+ | **RD7** | Use `js-yaml` for YAML parsing |
18
+
19
+ ## Phase 0–1: Team Template System
20
+
21
+ **New modules**: `src/teams/`, `.macro-agent/teams/self-driving/`
22
+
23
+ ### Data Model (`src/teams/types.ts`)
24
+
25
+ The `TeamManifest` is the central type — a fully-resolved team after loading:
26
+
27
+ ```
28
+ TeamManifest
29
+ ├── TeamTopology
30
+ │ ├── root: TopologyNode # Initial agent (always spawned)
31
+ │ ├── companions: TopologyNode[] # Peers outside the hierarchy
32
+ │ └── spawn_rules: Record<role, role[]>
33
+ ├── TeamCommunication
34
+ │ ├── channels: Record<name, { signals[] }>
35
+ │ ├── subscriptions: Record<role, { channel, signals? }[]>
36
+ │ ├── emissions: Record<role, signal[]>
37
+ │ ├── routing: { status, peers[] }
38
+ │ └── enforcement: "permissive" | "strict" | "audit"
39
+ ├── MacroAgentExtensions
40
+ │ ├── task_assignment: { mode: "push"|"pull", pull?: {...} }
41
+ │ ├── integration: { strategy: "queue"|"trunk"|"optimistic", config }
42
+ │ ├── lifecycle: { continuations, scaling }
43
+ │ └── observability: { metrics_window_s, snapshot_interval_s }
44
+ └── _resolved (computed at load time)
45
+ ├── _resolvedRoles: Map<name, ResolvedTeamRole>
46
+ ├── _loadedPrompts: Map<path, content>
47
+ └── _mcpServers: Map<role, McpServerEntry[]>
48
+ ```
49
+
50
+ ### Team Loader (`src/teams/team-loader.ts`)
51
+
52
+ Seven-step loading pipeline:
53
+
54
+ 1. Parse `team.yaml` with `js-yaml`
55
+ 2. Validate required fields
56
+ 3. Resolve each role: load `roles/<name>.yaml`, find base via `extends`, compute capabilities (add/remove)
57
+ 4. Translate `spawn_rules` → capability additions
58
+ 5. Load prompt markdown files
59
+ 6. Load optional MCP server configs (`tools/mcp-servers.json`)
60
+ 7. Validate communication topology references
61
+
62
+ Errors are typed with `TeamLoadError` and codes: `MANIFEST_NOT_FOUND`, `INVALID_MANIFEST`, `ROLE_NOT_FOUND`, `PROMPT_NOT_FOUND`, `INVALID_COMMUNICATION`.
63
+
64
+ ### Team Runtime (`src/teams/team-runtime.ts`)
65
+
66
+ Three lifecycle phases:
67
+
68
+ **`initialize()`**:
69
+ 1. Registers team roles into `RoleRegistry` (custom layer, highest priority)
70
+ 2. Emits `team_config` discovery event to EventStore for cross-process MCP subprocess access (RD2)
71
+ 3. Installs a **spawn interceptor** on `AgentManager`
72
+
73
+ **`bootstrap()`**:
74
+ 1. Spawns root agent per `topology.root`
75
+ 2. Spawns companions per `topology.companions` (parent: null, outside hierarchy)
76
+ 3. Sets up peer subscriptions via `MessageRouter`
77
+ 4. Starts continuation monitoring for daemon agents
78
+
79
+ **`teardown()`**:
80
+ - Removes spawn interceptor
81
+ - Stops lifecycle event listener
82
+
83
+ ### Spawn Interceptor
84
+
85
+ The interceptor is the key integration mechanism. It intercepts every `AgentManager.spawn()` call and injects:
86
+
87
+ - **Topics**: from `communication.subscriptions[roleName]`
88
+ - **MCP servers**: from `_mcpServers[roleName]`
89
+ - **Environment variables**: `MACRO_TEAM_NAME`, `MACRO_TASK_MODE`, `MACRO_INTEGRATION_STRATEGY`
90
+ - **Custom prompt**: from loaded prompts (only if caller didn't provide one)
91
+ - **Interaction patterns**: auto-generated text for pull mode instructions, integration strategy notes
92
+
93
+ This means all downstream agents automatically receive team context without callers needing to know about the team.
94
+
95
+ ### Modified Core Files
96
+
97
+ | File | Change |
98
+ |------|--------|
99
+ | `src/agent/agent-manager.ts` | Added `setSpawnInterceptor()`, `customPrompt` in spawn options, interceptor hook point before capability checks |
100
+ | `src/agent/types.ts` | Added `customPrompt`, `interactionPatterns` to `SpawnAgentOptions` |
101
+ | `src/mcp/mcp-server.ts` | Added `integrationStrategy`, `taskBackend` to `MCPServices` |
102
+ | `src/api/server.ts` | Added `GET /api/team` endpoint |
103
+
104
+ ---
105
+
106
+ ## Phase 2: Pluggable Integration Strategies
107
+
108
+ **New module**: `src/workspace/strategies/`
109
+
110
+ ### Architecture
111
+
112
+ Before Phase 2, workers could only land changes through the merge queue. Phase 2 makes the integration path pluggable via a strategy pattern:
113
+
114
+ ```
115
+ Worker done()
116
+
117
+ ├─ integrationStrategy exists?
118
+ │ ├─ Yes → strategy.land(request)
119
+ │ └─ No → merge queue fallback (existing path)
120
+
121
+ └─ Resolver worker?
122
+ └─ Yes → RESOLVER_DONE + inline merge (unchanged)
123
+ ```
124
+
125
+ ### IntegrationStrategy Interface (`src/workspace/strategies/types.ts`)
126
+
127
+ ```typescript
128
+ interface IntegrationStrategy {
129
+ readonly name: string;
130
+ land(request: LandRequest): Promise<LandResult>;
131
+ initialize?(): Promise<void>;
132
+ close?(): Promise<void>;
133
+ }
134
+ ```
135
+
136
+ `LandRequest` carries `sourceBranch`, `targetBranch`, `workspacePath`, `agentId`, `taskId`, `streamId`. `LandResult` returns `status: "landed" | "conflict" | "failed"` with optional `commitHash`, `conflictFiles`, `error`.
137
+
138
+ ### Built-in Strategies
139
+
140
+ | Strategy | Behavior | Use Case |
141
+ |----------|----------|----------|
142
+ | **Queue** (`queue.ts`) | Wraps existing `MergeQueueInterface`. Calls `mergeQueue.submit()` | Sequential integration with review gates |
143
+ | **Trunk** (`trunk.ts`) | Direct push with rebase-and-retry loop. `maxRetries` (default: 3). Uses `execSync` for git ops | Fast CI/CD-enforced workflows |
144
+ | **Optimistic** (`optimistic.ts`) | Same as trunk, but emits `validation:requested` event after push via EventStore | Fast with async validation by judge |
145
+
146
+ ### Strategy Registry (`src/workspace/strategies/registry.ts`)
147
+
148
+ Factory registry with `register(name, factory)`, `get(name, config)`, `has()`, `list()`. `defaultStrategyRegistry` singleton pre-registers all three strategies.
149
+
150
+ Late binding via setters: `QueueIntegrationStrategy.setMergeQueue()`, `OptimisticIntegrationStrategy.setEventStore()`.
151
+
152
+ ### Worker Handler Changes (`src/lifecycle/handlers/worker.ts`)
153
+
154
+ - Added `integrationStrategy?` and `taskMode?` to `WorkerHandlerDeps`
155
+ - Strategy dispatch in Step 4 before merge queue fallback
156
+ - **Pull mode**: `shouldTerminate = false` when `taskMode === "pull"` and `status === "completed"`, keeping the worker alive to claim more tasks
157
+
158
+ ### Dependency Wiring
159
+
160
+ ```
161
+ MCPServices.integrationStrategy
162
+ → DoneToolDeps.integrationStrategy
163
+ → AllHandlerDeps.integrationStrategy
164
+ → WorkerHandlerDeps.integrationStrategy
165
+ → strategy.land() in handleWorkerDone()
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Phase 3: Task Pull Model
171
+
172
+ **New files**: `src/mcp/tools/claim_task.ts`, `unclaim_task.ts`, `list_claimable_tasks.ts`
173
+
174
+ ### Architecture
175
+
176
+ Before Phase 3, tasks were always explicitly assigned (push model). Phase 3 adds autonomous task claiming where agents pull work from a shared pool.
177
+
178
+ ### Task Backend Extensions (`src/task/backend/types.ts`)
179
+
180
+ Three optional methods added to `TaskBackend`:
181
+
182
+ ```typescript
183
+ claim?(agentId: AgentId, filter?: ClaimFilter): Promise<ExtendedTask | null>;
184
+ unclaim?(taskId: TaskId): Promise<void>;
185
+ listClaimable?(filter?: ClaimFilter): Promise<ExtendedTask[]>;
186
+ ```
187
+
188
+ Optional to avoid breaking existing backends. `ClaimFilter` supports `tags`, `rootTasksOnly`, and `created_by`.
189
+
190
+ ### InMemory Implementation (`src/task/backend/memory.ts`)
191
+
192
+ **`claim()`**:
193
+ 1. Call `listClaimable()` to get candidates (pending, unblocked, unassigned)
194
+ 2. Take first candidate (FIFO by creation time)
195
+ 3. Re-check EventStore for contention (status still pending, not yet assigned)
196
+ 4. Atomically emit "assigned" event
197
+ 5. Return assigned task (or null on contention)
198
+
199
+ **`listClaimable()`**: Filters tasks by pending status, no assigned agent, matching tags/filters, and not blocked (all blockers must be completed).
200
+
201
+ ### MCP Tools
202
+
203
+ | Tool | Purpose | Capability Gate |
204
+ |------|---------|-----------------|
205
+ | `claim_task` | Atomically claim next available task | `task.claim` |
206
+ | `unclaim_task` | Return claimed task to pending pool | `task.claim` |
207
+ | `list_claimable_tasks` | Preview available tasks without claiming | `task.claim` |
208
+
209
+ ### Capability System Changes
210
+
211
+ - Added `TASK_CAPABILITIES.CLAIM = "task.claim"` to `src/roles/capabilities.ts`
212
+ - Added to `ALL_CAPABILITIES` set
213
+ - Added `CAPABILITY_TOOL_MAP[task.claim] = ["claim_task", "unclaim_task", "list_claimable_tasks"]`
214
+ - Added `"task.claim"` to `TaskCapability` union type in `src/roles/types.ts`
215
+
216
+ ### Tags (`src/store/types/tasks.ts`)
217
+
218
+ Added `tags?: string[]` to `Task`, `CreateTaskOptions`, and `TaskFilter` for tag-based filtering.
219
+
220
+ ---
221
+
222
+ ## Phase 4: Session Continuations
223
+
224
+ ### continueAgent() (`src/agent/agent-manager.ts`)
225
+
226
+ Spawns a new agent with the prior agent's context:
227
+
228
+ 1. Load original agent from EventStore
229
+ 2. Query status events (up to `maxMessages`, default 50)
230
+ 3. Format event summaries as "Prior Session Context" markdown
231
+ 4. Spawn new agent with same role/parent + resume context as `customPrompt`
232
+ 5. Emit continuation event (`continuation_of: agentId`)
233
+
234
+ ```typescript
235
+ interface ContinueAgentOptions {
236
+ maxMessages?: number; // History depth (default: 50)
237
+ task?: string; // Override task description
238
+ additionalContext?: string; // Extra context to prepend
239
+ }
240
+ ```
241
+
242
+ ### Continuation Monitoring (`src/teams/team-runtime.ts`)
243
+
244
+ `monitorContinuations()` watches for agent lifecycle events:
245
+ - Subscribes to `agentManager.onLifecycleEvent()`
246
+ - Monitors root and companion agent IDs
247
+ - On unexpected stop (not "completed" or "cancelled"):
248
+ - Waits 1 second
249
+ - Calls `agentManager.continueAgent(agentId)`
250
+ - Updates internal tracking to point to new agent
251
+
252
+ Only active when `lifecycle.continuations.enabled === true` in team manifest. Unsubscribes on teardown.
253
+
254
+ ---
255
+
256
+ ## Phase 5: Autonomous Observability
257
+
258
+ **New module**: `src/metrics/`
259
+
260
+ ### Metrics Functions (`src/metrics/metrics.ts`)
261
+
262
+ Three pure functions that query EventStore:
263
+
264
+ | Function | Queries | Returns |
265
+ |----------|---------|---------|
266
+ | `getThroughputMetrics(store, windowMs)` | Task events (created/completed/failed) | `tasksCompleted`, `tasksFailed`, `tasksCreated`, `completedPerMinute`, `avgCompletionTimeMs` |
267
+ | `getUtilizationMetrics(store, windowMs)` | Agent list + spawn/terminate events | `activeAgents`, `totalSpawned`, `totalStopped`, `agentsByRole`, `agentsByState` |
268
+ | `getErrorMetrics(store, windowMs, limit)` | Failed status events + failed task events | `totalErrors`, `errorsByType`, `recentErrors` |
269
+
270
+ ### REST API Endpoints (`src/api/server.ts`)
271
+
272
+ | Endpoint | Query Params | Description |
273
+ |----------|-------------|-------------|
274
+ | `GET /api/metrics/throughput` | `window_ms` (default: 5min) | Task completion rates |
275
+ | `GET /api/metrics/utilization` | — | Agent counts by role and state |
276
+ | `GET /api/metrics/errors` | `window_ms` (default: 30min), `limit` (default: 20) | Error counts and recent failures |
277
+
278
+ Computed inline from EventStore queries. The metrics module provides reusable functions for other consumers (monitor agents, dashboards).
279
+
280
+ ---
281
+
282
+ ## Phase 6: Reference Templates, Docs, and Tests
283
+
284
+ ### Templates
285
+
286
+ | Template | Roles | Task Mode | Integration | Continuations |
287
+ |----------|-------|-----------|-------------|---------------|
288
+ | **self-driving** | planner, grinder, judge | Pull | Trunk | Enabled |
289
+ | **structured** | lead, developer, reviewer | Push | Queue | Disabled |
290
+
291
+ ### Documentation
292
+
293
+ `docs/teams.md` covers: YAML schema reference, role definition format, push vs pull task models, integration strategy guide, both reference templates, and a minimal custom team example.
294
+
295
+ ### Test Suite
296
+
297
+ 37 unit tests in `src/teams/__tests__/team-system.test.ts` across 5 suites:
298
+ - Template loading (8 tests)
299
+ - TeamRuntime lifecycle (14 tests)
300
+ - Integration strategies (4 tests)
301
+ - Task pull model (4 tests)
302
+ - Metrics module (5 tests)
303
+
304
+ Additional cross-subsystem integration tests in `src/teams/__tests__/cross-subsystem.integration.test.ts` verifying:
305
+ - Strategy → worker handler dispatch
306
+ - Task backend claim/unclaim/listClaimable cycle
307
+ - Team config → spawn interceptor → worker done pipeline
308
+ - Metrics from realistic event streams
309
+ - Pull mode lifecycle (shouldTerminate behavior)
310
+
311
+ ---
312
+
313
+ ## Post-Phase Fix: Status → Topic Routing Bridge
314
+
315
+ ### Problem
316
+
317
+ `emitStatus()` in `message-router.ts` only routed lifecycle signals to **subtree subscribers** (parents/ancestors via hierarchical subscriptions). Topic subscribers set up by the team communication topology never received these events.
318
+
319
+ This meant that when a worker emitted `WORKER_DONE`, only its parent coordinator received the notification. Peer agents on the same topic (e.g., two workers sharing `work_coordination`, or a monitor on `health`) saw nothing.
320
+
321
+ Two completely separate message pathways existed:
322
+ - **Status/subtree path**: `emitStatus()` → `routeStatusToSubtreeSubscribers()` — hierarchical only
323
+ - **Topic/scope path**: `sendToAddress({ to: { scope } })` — only used by the `send_message` MCP tool (requires explicit agent action)
324
+
325
+ ### Fix (`src/router/message-router.ts`)
326
+
327
+ Added `routeStatusToTopicSubscribers()` to `emitStatus()`. After routing to subtree subscribers, it now:
328
+
329
+ 1. Looks up all topics the emitting agent is subscribed to
330
+ 2. Finds all other agents subscribed to those same topics
331
+ 3. Delivers the status notification to each (as a message event with `via: "topic"`)
332
+ 4. Deduplicates against agents already notified via subtree routing
333
+
334
+ `routeStatusToSubtreeSubscribers()` now returns `Set<AgentId>` (the agents it notified) so the topic routing step can skip them.
335
+
336
+ ### Tests (`src/router/__tests__/message-router.test.ts`)
337
+
338
+ 6 new tests:
339
+ - Topic co-subscriber routing (peer agents on shared topic)
340
+ - Self-exclusion (emitter doesn't receive own status)
341
+ - Dedup with subtree (parent on both subtree and topic gets one notification)
342
+ - Multi-subscriber fanout (3 agents on shared topic)
343
+ - No-topic-no-routing (agent without topic subs doesn't leak to topic subscribers)
344
+ - Cross-topic dedup (agent on 2 shared topics gets one notification, not two)
345
+
346
+ ---
347
+
348
+ ## File Inventory
349
+
350
+ ### New Files (30)
351
+
352
+ ```
353
+ src/teams/types.ts
354
+ src/teams/team-loader.ts
355
+ src/teams/team-runtime.ts
356
+ src/teams/index.ts
357
+ src/teams/__tests__/team-system.test.ts
358
+ src/teams/__tests__/cross-subsystem.integration.test.ts
359
+
360
+ src/workspace/strategies/types.ts
361
+ src/workspace/strategies/registry.ts
362
+ src/workspace/strategies/queue.ts
363
+ src/workspace/strategies/trunk.ts
364
+ src/workspace/strategies/optimistic.ts
365
+ src/workspace/strategies/index.ts
366
+
367
+ src/mcp/tools/claim_task.ts
368
+ src/mcp/tools/unclaim_task.ts
369
+ src/mcp/tools/list_claimable_tasks.ts
370
+
371
+ src/metrics/metrics.ts
372
+ src/metrics/index.ts
373
+
374
+ .macro-agent/teams/self-driving/team.yaml
375
+ .macro-agent/teams/self-driving/roles/planner.yaml
376
+ .macro-agent/teams/self-driving/roles/grinder.yaml
377
+ .macro-agent/teams/self-driving/roles/judge.yaml
378
+ .macro-agent/teams/self-driving/prompts/planner.md
379
+ .macro-agent/teams/self-driving/prompts/grinder.md
380
+ .macro-agent/teams/self-driving/prompts/judge.md
381
+
382
+ .macro-agent/teams/structured/team.yaml
383
+ .macro-agent/teams/structured/roles/lead.yaml
384
+ .macro-agent/teams/structured/roles/developer.yaml
385
+ .macro-agent/teams/structured/roles/reviewer.yaml
386
+ .macro-agent/teams/structured/prompts/lead.md
387
+ .macro-agent/teams/structured/prompts/developer.md
388
+ .macro-agent/teams/structured/prompts/reviewer.md
389
+
390
+ docs/teams.md
391
+ docs/implementation-summary.md
392
+ ```
393
+
394
+ ### Modified Files (13)
395
+
396
+ ```
397
+ src/agent/agent-manager.ts # setSpawnInterceptor(), continueAgent(), customPrompt
398
+ src/agent/types.ts # ContinueAgentOptions, customPrompt, interactionPatterns
399
+ src/lifecycle/handlers/worker.ts # Strategy dispatch, pull mode shouldTerminate
400
+ src/lifecycle/handlers/index.ts # integrationStrategy, taskMode in AllHandlerDeps
401
+ src/mcp/tools/done.ts # integrationStrategy, taskMode in DoneToolDeps
402
+ src/mcp/mcp-server.ts # integrationStrategy, taskBackend in MCPServices; claim tool registration
403
+ src/store/types/tasks.ts # tags field on Task
404
+ src/task/backend/types.ts # ClaimFilter, claim/unclaim/listClaimable optional methods
405
+ src/task/backend/memory.ts # claim(), unclaim(), listClaimable() implementations
406
+ src/roles/types.ts # "task.claim" in TaskCapability union
407
+ src/roles/capabilities.ts # TASK_CAPABILITIES.CLAIM, ALL_CAPABILITIES, CAPABILITY_TOOL_MAP
408
+ src/api/server.ts # /api/team, /api/metrics/* endpoints
409
+ src/router/message-router.ts # emitStatus → topic routing bridge, routeStatusToTopicSubscribers()
410
+ ```
411
+
412
+ ---
413
+
414
+ ## Backward Compatibility
415
+
416
+ All changes are additive. When no team is loaded:
417
+ - Spawn interceptor is not set → `spawn()` is unmodified
418
+ - `integrationStrategy` is undefined → worker handler falls back to merge queue
419
+ - `taskMode` is undefined → workers terminate after completion (push behavior)
420
+ - `claim_task`/`unclaim_task`/`list_claimable_tasks` tools are not registered (no `task.claim` capability)
421
+ - `continueAgent()` exists but is never called
422
+ - Metrics endpoints return zero-value results
423
+ - `/api/team` returns `{ active: false }`
424
+ - Topic routing in `emitStatus()` is a no-op when agents have no topic subscriptions
425
+
426
+ ---
427
+
428
+ ## Communication Topology: Current State
429
+
430
+ The team communication system defines a rich configuration surface in YAML (channels, subscriptions, emissions, peer routing, enforcement modes). All config features are now wired into runtime behavior.
431
+
432
+ ### Feature Matrix
433
+
434
+ | Feature | Config Loaded | Validated | Runtime Wired | Implementation |
435
+ |---------|:---:|:---:|:---:|-------|
436
+ | Channel subscriptions | Yes | Yes | **Yes** | Spawn interceptor injects topic names → `setupDefaultSubscriptions()` |
437
+ | Status → subtree routing | N/A | N/A | **Yes** | `emitStatus()` → `routeStatusToSubtreeSubscribers()` with signal filtering + wake |
438
+ | Status → topic routing | N/A | N/A | **Yes** | `emitStatus()` → `routeStatusToTopicSubscribers()` with signal filtering + wake + dedup |
439
+ | Signal filtering | Yes | Yes | **Yes** | `SignalFilter` callback on MessageRouter, installed by TeamRuntime. Checks peer filters (directional) then channel subscription filters (per-role) |
440
+ | Emission restrictions | Yes | Yes | **Yes** | `EmissionValidator` callback on MessageRouter. Checks agent role against `communication.emissions` allowlist |
441
+ | Enforcement mode | Yes | Yes | **Yes** | Branches on `strict` (reject) / `permissive` (warn) / `audit` (record to EventStore) in emission validator |
442
+ | Peer routing from config | Yes | Yes | **Yes** | `wirePeerRoutes()` reads `routing.peers`, maps `via` to subscription type (direct/topic/scope), defers wiring for late-spawned roles |
443
+ | Wake on status delivery | N/A | N/A | **Yes** | Both `routeStatusToSubtreeSubscribers()` and `routeStatusToTopicSubscribers()` call `wakeHandler` with `priority: "normal"` |
444
+ | Role channels | N/A | N/A | **Yes** | Agents auto-subscribe to `{ type: "role", target: roleName }`. Works independently of team config |
445
+
446
+ ### Remaining Gap
447
+
448
+ **Role channels in team config** — Role channels (`{ role: "worker" }` addressing) work independently of team YAML config. Team configs define communication via named `channels` and `subscriptions`, not via role channels. The two systems coexist but aren't integrated. Impact is low — role channels provide a useful shortcut that works out of the box.