macro-agent 0.0.11 → 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 (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 +4 -2
  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,13 @@
1
+ export { loadTeam } from "./team-loader.js";
2
+ export { TeamRuntime, type TeamServices, type TeamBootstrapResult } from "./team-runtime.js";
3
+ export {
4
+ TeamLoadError,
5
+ type TeamManifest,
6
+ type TeamTopology,
7
+ type TeamCommunication,
8
+ type MacroAgentExtensions,
9
+ type TeamRoleDefinition,
10
+ type ResolvedTeamRole,
11
+ type McpServerEntry,
12
+ type TeamLoadErrorCode,
13
+ } from "./types.js";
@@ -0,0 +1,434 @@
1
+ /**
2
+ * Team Template Loader
3
+ *
4
+ * Reads .macro-agent/teams/<name>/ directories, parses team.yaml,
5
+ * resolves role inheritance, loads prompts, and validates communication.
6
+ *
7
+ * @module teams/team-loader
8
+ */
9
+
10
+ import * as fs from "fs";
11
+ import * as path from "path";
12
+ import yaml from "js-yaml";
13
+ import type { RoleRegistry, RoleDefinition, Capability } from "../roles/types.js";
14
+ import {
15
+ TeamLoadError,
16
+ type TeamManifest,
17
+ type TeamTopology,
18
+ type TeamCommunication,
19
+ type MacroAgentExtensions,
20
+ type TeamRoleDefinition,
21
+ type ResolvedTeamRole,
22
+ type McpServerEntry,
23
+ } from "./types.js";
24
+
25
+ // =============================================================================
26
+ // Constants
27
+ // =============================================================================
28
+
29
+ const TEAMS_DIR = ".macro-agent/teams";
30
+ const MANIFEST_FILE = "team.yaml";
31
+ const ROLES_DIR = "roles";
32
+ const PROMPTS_DIR = "prompts";
33
+ const TOOLS_DIR = "tools";
34
+ const MCP_SERVERS_FILE = "mcp-servers.json";
35
+
36
+ // =============================================================================
37
+ // TeamLoader
38
+ // =============================================================================
39
+
40
+ /**
41
+ * Load a team template from disk and resolve all references.
42
+ *
43
+ * @param teamName - Team name (directory name under .macro-agent/teams/)
44
+ * @param roleRegistry - Role registry for resolving extends chains
45
+ * @param basePath - Project root (default: process.cwd())
46
+ * @returns Fully resolved TeamManifest
47
+ */
48
+ export async function loadTeam(
49
+ teamName: string,
50
+ roleRegistry: RoleRegistry,
51
+ basePath?: string
52
+ ): Promise<TeamManifest> {
53
+ const root = basePath ?? process.cwd();
54
+ const teamDir = path.join(root, TEAMS_DIR, teamName);
55
+
56
+ // 1. Check team directory exists
57
+ if (!fs.existsSync(teamDir)) {
58
+ throw new TeamLoadError(
59
+ `Team directory not found: ${teamDir}`,
60
+ "MANIFEST_NOT_FOUND",
61
+ teamName
62
+ );
63
+ }
64
+
65
+ // 2. Read and parse team.yaml
66
+ const manifestPath = path.join(teamDir, MANIFEST_FILE);
67
+ if (!fs.existsSync(manifestPath)) {
68
+ throw new TeamLoadError(
69
+ `Team manifest not found: ${manifestPath}`,
70
+ "MANIFEST_NOT_FOUND",
71
+ teamName
72
+ );
73
+ }
74
+
75
+ const raw = fs.readFileSync(manifestPath, "utf-8");
76
+ let parsed: Record<string, unknown>;
77
+ try {
78
+ parsed = yaml.load(raw) as Record<string, unknown>;
79
+ } catch (err) {
80
+ throw new TeamLoadError(
81
+ `Failed to parse ${manifestPath}: ${err instanceof Error ? err.message : String(err)}`,
82
+ "INVALID_MANIFEST",
83
+ teamName
84
+ );
85
+ }
86
+
87
+ // 3. Validate required fields
88
+ validateManifest(parsed, teamName);
89
+
90
+ const topology = parsed.topology as TeamTopology;
91
+ const communication = (parsed.communication ?? {}) as TeamCommunication;
92
+ const macroAgent = (parsed.macro_agent ?? {}) as MacroAgentExtensions;
93
+ const roleNames = parsed.roles as string[];
94
+
95
+ // 4. Resolve roles
96
+ const resolvedRoles = new Map<string, ResolvedTeamRole>();
97
+ const spawnRules = topology.spawn_rules ?? {};
98
+
99
+ for (const roleName of roleNames) {
100
+ const resolved = resolveTeamRole(
101
+ roleName,
102
+ teamDir,
103
+ roleRegistry,
104
+ spawnRules
105
+ );
106
+ resolvedRoles.set(roleName, resolved);
107
+ }
108
+
109
+ // 5. Load prompts
110
+ const loadedPrompts = new Map<string, string>();
111
+
112
+ // Load prompts from topology nodes
113
+ const promptRefs = collectPromptRefs(topology, resolvedRoles);
114
+ for (const promptPath of promptRefs) {
115
+ const fullPath = path.join(teamDir, promptPath);
116
+ if (!fs.existsSync(fullPath)) {
117
+ throw new TeamLoadError(
118
+ `Prompt file not found: ${fullPath}`,
119
+ "PROMPT_NOT_FOUND",
120
+ teamName
121
+ );
122
+ }
123
+ loadedPrompts.set(promptPath, fs.readFileSync(fullPath, "utf-8"));
124
+ }
125
+
126
+ // 6. Load MCP server configs
127
+ const mcpServers = loadMcpServers(teamDir);
128
+
129
+ // 7. Validate communication topology
130
+ validateCommunication(communication, roleNames, teamName);
131
+
132
+ return {
133
+ name: parsed.name as string,
134
+ description: (parsed.description as string) ?? "",
135
+ version: (parsed.version as number) ?? 1,
136
+ roles: roleNames,
137
+ topology,
138
+ communication,
139
+ macro_agent: macroAgent,
140
+ _resolvedRoles: resolvedRoles,
141
+ _loadedPrompts: loadedPrompts,
142
+ _mcpServers: mcpServers,
143
+ };
144
+ }
145
+
146
+ // =============================================================================
147
+ // Manifest Validation
148
+ // =============================================================================
149
+
150
+ function validateManifest(
151
+ parsed: Record<string, unknown>,
152
+ teamName: string
153
+ ): void {
154
+ if (!parsed || typeof parsed !== "object") {
155
+ throw new TeamLoadError(
156
+ "Team manifest must be a YAML object",
157
+ "INVALID_MANIFEST",
158
+ teamName
159
+ );
160
+ }
161
+
162
+ if (!parsed.name || typeof parsed.name !== "string") {
163
+ throw new TeamLoadError(
164
+ "Team manifest requires a 'name' string field",
165
+ "INVALID_MANIFEST",
166
+ teamName
167
+ );
168
+ }
169
+
170
+ if (!Array.isArray(parsed.roles) || parsed.roles.length === 0) {
171
+ throw new TeamLoadError(
172
+ "Team manifest requires a non-empty 'roles' array",
173
+ "INVALID_MANIFEST",
174
+ teamName
175
+ );
176
+ }
177
+
178
+ if (!parsed.topology || typeof parsed.topology !== "object") {
179
+ throw new TeamLoadError(
180
+ "Team manifest requires a 'topology' object",
181
+ "INVALID_MANIFEST",
182
+ teamName
183
+ );
184
+ }
185
+
186
+ const topology = parsed.topology as Record<string, unknown>;
187
+ if (!topology.root || typeof topology.root !== "object") {
188
+ throw new TeamLoadError(
189
+ "Team topology requires a 'root' object",
190
+ "INVALID_MANIFEST",
191
+ teamName
192
+ );
193
+ }
194
+ }
195
+
196
+ // =============================================================================
197
+ // Role Resolution
198
+ // =============================================================================
199
+
200
+ /**
201
+ * Resolve a single team role: load YAML if present, resolve extends,
202
+ * compute capabilities, translate spawn rules.
203
+ */
204
+ function resolveTeamRole(
205
+ roleName: string,
206
+ teamDir: string,
207
+ roleRegistry: RoleRegistry,
208
+ spawnRules: Record<string, string[]>
209
+ ): ResolvedTeamRole {
210
+ // Try to load role YAML from team directory
211
+ const roleFilePath = path.join(teamDir, ROLES_DIR, `${roleName}.yaml`);
212
+ let teamRoleDef: TeamRoleDefinition | null = null;
213
+
214
+ if (fs.existsSync(roleFilePath)) {
215
+ const raw = fs.readFileSync(roleFilePath, "utf-8");
216
+ try {
217
+ teamRoleDef = yaml.load(raw) as TeamRoleDefinition;
218
+ } catch (err) {
219
+ throw new TeamLoadError(
220
+ `Failed to parse role file ${roleFilePath}: ${err instanceof Error ? err.message : String(err)}`,
221
+ "INVALID_ROLE",
222
+ roleName
223
+ );
224
+ }
225
+ }
226
+
227
+ // Determine base role
228
+ const baseRoleName = teamRoleDef?.extends ?? roleName;
229
+ let parentRole: RoleDefinition;
230
+ try {
231
+ parentRole = roleRegistry.resolveRole(baseRoleName);
232
+ } catch {
233
+ throw new TeamLoadError(
234
+ `Base role '${baseRoleName}' not found for team role '${roleName}'`,
235
+ "ROLE_NOT_FOUND",
236
+ roleName
237
+ );
238
+ }
239
+
240
+ // Compute capabilities
241
+ let capabilities: Capability[];
242
+ if (teamRoleDef?.capabilities) {
243
+ // Full replacement
244
+ capabilities = teamRoleDef.capabilities as Capability[];
245
+ } else if (teamRoleDef?.capabilities_add || teamRoleDef?.capabilities_remove) {
246
+ // Additive/subtractive
247
+ const base = new Set(parentRole.capabilities);
248
+ for (const cap of teamRoleDef.capabilities_add ?? []) {
249
+ base.add(cap as Capability);
250
+ }
251
+ for (const cap of teamRoleDef.capabilities_remove ?? []) {
252
+ base.delete(cap as Capability);
253
+ }
254
+ capabilities = Array.from(base);
255
+ } else {
256
+ // Inherit parent capabilities
257
+ capabilities = [...parentRole.capabilities];
258
+ }
259
+
260
+ // Translate spawn_rules into capability additions (RD3)
261
+ const allowedSpawns = spawnRules[roleName];
262
+ if (allowedSpawns) {
263
+ for (const targetRole of allowedSpawns) {
264
+ const spawnCap = `agent.spawn.${targetRole}` as Capability;
265
+ if (!capabilities.includes(spawnCap)) {
266
+ capabilities.push(spawnCap);
267
+ }
268
+ }
269
+ }
270
+
271
+ // Build the resolved RoleDefinition for registry
272
+ const roleDefinition: RoleDefinition = {
273
+ name: roleName,
274
+ displayName: teamRoleDef?.display_name ?? parentRole.displayName,
275
+ description: teamRoleDef?.description ?? parentRole.description,
276
+ capabilities,
277
+ workspace: teamRoleDef?.macro_agent?.workspace
278
+ ? {
279
+ type: (teamRoleDef.macro_agent.workspace.type ?? "own") as "own" | "shared" | "mount" | "none",
280
+ branchPattern: teamRoleDef.macro_agent.workspace.branch_pattern,
281
+ cleanupOnTerminate: teamRoleDef.macro_agent.workspace.cleanup_on_terminate,
282
+ }
283
+ : parentRole.workspace,
284
+ lifecycle: teamRoleDef?.macro_agent?.lifecycle
285
+ ? {
286
+ type: (teamRoleDef.macro_agent.lifecycle.type ?? "ephemeral") as "ephemeral" | "persistent" | "daemon" | "event-driven",
287
+ cascadeTerminate: teamRoleDef.macro_agent.lifecycle.cascade_terminate,
288
+ selfCleanup: teamRoleDef.macro_agent.lifecycle.self_cleanup,
289
+ taskBound: teamRoleDef.macro_agent.lifecycle.task_bound,
290
+ parentBound: teamRoleDef.macro_agent.lifecycle.parent_bound,
291
+ maxDurationMs: teamRoleDef.macro_agent.lifecycle.max_duration_ms,
292
+ }
293
+ : parentRole.lifecycle,
294
+ tools: parentRole.tools,
295
+ protocol: parentRole.protocol,
296
+ permissions: parentRole.permissions,
297
+ extends: teamRoleDef?.extends,
298
+ systemPrompt: parentRole.systemPrompt,
299
+ };
300
+
301
+ return {
302
+ name: roleName,
303
+ baseRole: baseRoleName,
304
+ capabilities,
305
+ prompt: teamRoleDef?.prompt,
306
+ roleDefinition,
307
+ };
308
+ }
309
+
310
+ // =============================================================================
311
+ // Prompt Collection
312
+ // =============================================================================
313
+
314
+ /**
315
+ * Collect all prompt file paths referenced by topology and roles.
316
+ */
317
+ function collectPromptRefs(
318
+ topology: TeamTopology,
319
+ resolvedRoles: Map<string, ResolvedTeamRole>
320
+ ): Set<string> {
321
+ const refs = new Set<string>();
322
+
323
+ // From topology nodes
324
+ if (topology.root.prompt) refs.add(topology.root.prompt);
325
+ for (const companion of topology.companions ?? []) {
326
+ if (companion.prompt) refs.add(companion.prompt);
327
+ }
328
+
329
+ // From role definitions
330
+ for (const resolved of resolvedRoles.values()) {
331
+ if (resolved.prompt) refs.add(resolved.prompt);
332
+ }
333
+
334
+ return refs;
335
+ }
336
+
337
+ // =============================================================================
338
+ // MCP Server Loading
339
+ // =============================================================================
340
+
341
+ /**
342
+ * Load tools/mcp-servers.json if it exists.
343
+ * Returns a map of role name → MCP server entries.
344
+ */
345
+ function loadMcpServers(
346
+ teamDir: string
347
+ ): Map<string, McpServerEntry[]> {
348
+ const result = new Map<string, McpServerEntry[]>();
349
+ const mcpPath = path.join(teamDir, TOOLS_DIR, MCP_SERVERS_FILE);
350
+
351
+ if (!fs.existsSync(mcpPath)) {
352
+ return result;
353
+ }
354
+
355
+ const raw = fs.readFileSync(mcpPath, "utf-8");
356
+ const parsed = JSON.parse(raw) as Record<
357
+ string,
358
+ { servers: McpServerEntry[] }
359
+ >;
360
+
361
+ for (const [roleName, config] of Object.entries(parsed)) {
362
+ if (config.servers && Array.isArray(config.servers)) {
363
+ result.set(roleName, config.servers);
364
+ }
365
+ }
366
+
367
+ return result;
368
+ }
369
+
370
+ // =============================================================================
371
+ // Communication Validation
372
+ // =============================================================================
373
+
374
+ /**
375
+ * Validate communication topology references.
376
+ */
377
+ function validateCommunication(
378
+ communication: TeamCommunication,
379
+ roleNames: string[],
380
+ teamName: string
381
+ ): void {
382
+ const channels = communication.channels ?? {};
383
+ const channelNames = new Set(Object.keys(channels));
384
+ const roleNameSet = new Set(roleNames);
385
+
386
+ // Validate subscriptions reference existing channels and roles
387
+ for (const [roleName, subs] of Object.entries(communication.subscriptions ?? {})) {
388
+ if (!roleNameSet.has(roleName)) {
389
+ throw new TeamLoadError(
390
+ `Subscription references unknown role '${roleName}'`,
391
+ "INVALID_COMMUNICATION",
392
+ teamName
393
+ );
394
+ }
395
+ for (const sub of subs) {
396
+ if (!channelNames.has(sub.channel)) {
397
+ throw new TeamLoadError(
398
+ `Role '${roleName}' subscribes to unknown channel '${sub.channel}'`,
399
+ "INVALID_COMMUNICATION",
400
+ teamName
401
+ );
402
+ }
403
+ }
404
+ }
405
+
406
+ // Validate emissions reference existing roles
407
+ for (const roleName of Object.keys(communication.emissions ?? {})) {
408
+ if (!roleNameSet.has(roleName)) {
409
+ throw new TeamLoadError(
410
+ `Emissions references unknown role '${roleName}'`,
411
+ "INVALID_COMMUNICATION",
412
+ teamName
413
+ );
414
+ }
415
+ }
416
+
417
+ // Validate peer connections
418
+ for (const peer of communication.routing?.peers ?? []) {
419
+ if (!roleNameSet.has(peer.from)) {
420
+ throw new TeamLoadError(
421
+ `Peer connection references unknown role '${peer.from}'`,
422
+ "INVALID_COMMUNICATION",
423
+ teamName
424
+ );
425
+ }
426
+ if (!roleNameSet.has(peer.to)) {
427
+ throw new TeamLoadError(
428
+ `Peer connection references unknown role '${peer.to}'`,
429
+ "INVALID_COMMUNICATION",
430
+ teamName
431
+ );
432
+ }
433
+ }
434
+ }