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,200 @@
1
+ /**
2
+ * CLI Agent Definitions Registry
3
+ *
4
+ * Maintains a registry of known CLI coding agents with their
5
+ * detection and headless invocation configurations.
6
+ */
7
+
8
+ import type { CLIAgentDefinition } from "./types.js";
9
+
10
+ // =============================================================================
11
+ // Built-in Agent Definitions
12
+ // =============================================================================
13
+
14
+ const CLAUDE_CODE: CLIAgentDefinition = {
15
+ id: "claude-code",
16
+ name: "Claude Code",
17
+ description: "Anthropic's CLI coding agent",
18
+ binary: "claude",
19
+ versionArgs: ["--version"],
20
+ headless: {
21
+ promptFlag: "-p",
22
+ defaultFlags: ["--output-format", "stream-json"],
23
+ },
24
+ modelFlag: "--model",
25
+ cwdFlag: "--cwd",
26
+ vendor: "Anthropic",
27
+ };
28
+
29
+ const CODEX: CLIAgentDefinition = {
30
+ id: "codex",
31
+ name: "Codex",
32
+ description: "OpenAI's CLI coding agent",
33
+ binary: "codex",
34
+ versionArgs: ["--version"],
35
+ headless: {
36
+ subcommand: "exec",
37
+ promptFlag: "",
38
+ defaultFlags: ["--full-auto"],
39
+ },
40
+ modelFlag: "--model",
41
+ cwdFlag: "--path",
42
+ vendor: "OpenAI",
43
+ };
44
+
45
+ const GEMINI_CLI: CLIAgentDefinition = {
46
+ id: "gemini-cli",
47
+ name: "Gemini CLI",
48
+ description: "Google's CLI coding agent",
49
+ binary: "gemini",
50
+ versionArgs: ["--version"],
51
+ headless: {
52
+ promptFlag: "-p",
53
+ },
54
+ modelFlag: "--model",
55
+ vendor: "Google",
56
+ };
57
+
58
+ const OPENCODE: CLIAgentDefinition = {
59
+ id: "opencode",
60
+ name: "OpenCode",
61
+ description: "Anomaly's CLI coding agent",
62
+ binary: "opencode",
63
+ versionArgs: ["--version"],
64
+ headless: {
65
+ subcommand: "run",
66
+ promptFlag: "",
67
+ },
68
+ modelFlag: "--model",
69
+ vendor: "Anomaly",
70
+ };
71
+
72
+ const AIDER: CLIAgentDefinition = {
73
+ id: "aider",
74
+ name: "Aider",
75
+ description: "AI pair programming in your terminal",
76
+ binary: "aider",
77
+ versionArgs: ["--version"],
78
+ headless: {
79
+ promptFlag: "--message",
80
+ defaultFlags: ["--yes"],
81
+ },
82
+ modelFlag: "--model",
83
+ vendor: "Aider",
84
+ };
85
+
86
+ const GOOSE: CLIAgentDefinition = {
87
+ id: "goose",
88
+ name: "Goose",
89
+ description: "Block's CLI coding agent",
90
+ binary: "goose",
91
+ versionArgs: ["--version"],
92
+ headless: {
93
+ subcommand: "run",
94
+ promptFlag: "-t",
95
+ defaultFlags: ["--no-session"],
96
+ },
97
+ modelFlag: "--model",
98
+ vendor: "Block",
99
+ };
100
+
101
+ /**
102
+ * All built-in agent definitions.
103
+ */
104
+ export const BUILTIN_AGENTS: readonly CLIAgentDefinition[] = [
105
+ CLAUDE_CODE,
106
+ CODEX,
107
+ GEMINI_CLI,
108
+ OPENCODE,
109
+ AIDER,
110
+ GOOSE,
111
+ ];
112
+
113
+ // =============================================================================
114
+ // Agent Registry
115
+ // =============================================================================
116
+
117
+ /**
118
+ * Registry of known CLI coding agent definitions.
119
+ *
120
+ * Provides lookup by ID and supports adding custom agent definitions.
121
+ */
122
+ export class AgentRegistry {
123
+ private readonly agents: Map<string, CLIAgentDefinition> = new Map();
124
+
125
+ constructor(definitions?: CLIAgentDefinition[]) {
126
+ // Register built-in agents
127
+ for (const def of BUILTIN_AGENTS) {
128
+ this.agents.set(def.id, def);
129
+ }
130
+
131
+ // Register additional definitions
132
+ if (definitions) {
133
+ for (const def of definitions) {
134
+ this.agents.set(def.id, def);
135
+ }
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Get an agent definition by ID.
141
+ */
142
+ get(id: string): CLIAgentDefinition | undefined {
143
+ return this.agents.get(id);
144
+ }
145
+
146
+ /**
147
+ * Check if an agent definition exists.
148
+ */
149
+ has(id: string): boolean {
150
+ return this.agents.has(id);
151
+ }
152
+
153
+ /**
154
+ * Register a new agent definition (or override an existing one).
155
+ */
156
+ register(definition: CLIAgentDefinition): void {
157
+ this.agents.set(definition.id, definition);
158
+ }
159
+
160
+ /**
161
+ * Remove an agent definition by ID.
162
+ */
163
+ remove(id: string): boolean {
164
+ return this.agents.delete(id);
165
+ }
166
+
167
+ /**
168
+ * List all registered agent definitions.
169
+ */
170
+ list(): CLIAgentDefinition[] {
171
+ return Array.from(this.agents.values());
172
+ }
173
+
174
+ /**
175
+ * List agent definitions, optionally excluding disabled agents.
176
+ */
177
+ listEnabled(disabledIds?: string[]): CLIAgentDefinition[] {
178
+ if (!disabledIds || disabledIds.length === 0) {
179
+ return this.list();
180
+ }
181
+ const disabled = new Set(disabledIds);
182
+ return this.list().filter((def) => !disabled.has(def.id));
183
+ }
184
+
185
+ /**
186
+ * Get the number of registered agent definitions.
187
+ */
188
+ get size(): number {
189
+ return this.agents.size;
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Create a new AgentRegistry with built-in agents and optional custom definitions.
195
+ */
196
+ export function createAgentRegistry(
197
+ additionalAgents?: CLIAgentDefinition[]
198
+ ): AgentRegistry {
199
+ return new AgentRegistry(additionalAgents);
200
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * CLI Agent Auto-Detection Types
3
+ *
4
+ * Type definitions for detecting installed CLI coding agents
5
+ * and constructing headless invocation commands.
6
+ */
7
+
8
+ // =============================================================================
9
+ // Agent Definition
10
+ // =============================================================================
11
+
12
+ /**
13
+ * Headless invocation configuration for a CLI agent.
14
+ */
15
+ export interface HeadlessConfig {
16
+ /** Subcommand before prompt (e.g., "exec" for codex, "run" for goose) */
17
+ subcommand?: string;
18
+
19
+ /** Flag to pass the prompt. Empty string means prompt is positional. */
20
+ promptFlag: string;
21
+
22
+ /** Default flags always included in headless mode */
23
+ defaultFlags?: string[];
24
+ }
25
+
26
+ /**
27
+ * Definition of a known CLI coding agent.
28
+ * Describes how to detect and invoke the agent in headless mode.
29
+ */
30
+ export interface CLIAgentDefinition {
31
+ /** Unique identifier (e.g., "claude-code", "codex") */
32
+ id: string;
33
+
34
+ /** Human-readable display name */
35
+ name: string;
36
+
37
+ /** Short description */
38
+ description: string;
39
+
40
+ /** The binary/command name to invoke */
41
+ binary: string;
42
+
43
+ /** Arguments to check version (typically ["--version"]) */
44
+ versionArgs: string[];
45
+
46
+ /** Headless invocation configuration */
47
+ headless: HeadlessConfig;
48
+
49
+ /** Flag for model selection (e.g., "--model") */
50
+ modelFlag?: string;
51
+
52
+ /** Flag for working directory (e.g., "--cwd", "--path") */
53
+ cwdFlag?: string;
54
+
55
+ /** Provider/vendor name */
56
+ vendor: string;
57
+ }
58
+
59
+ // =============================================================================
60
+ // Detection Results
61
+ // =============================================================================
62
+
63
+ /**
64
+ * Result of detecting a single CLI agent on the system.
65
+ */
66
+ export interface DetectedAgent {
67
+ /** Agent definition ID */
68
+ id: string;
69
+
70
+ /** Human-readable name */
71
+ name: string;
72
+
73
+ /** Whether the binary was found on PATH */
74
+ installed: boolean;
75
+
76
+ /** Parsed version string (e.g., "1.2.3") */
77
+ version?: string;
78
+
79
+ /** Absolute path to binary */
80
+ path?: string;
81
+
82
+ /** The full agent definition (for client display) */
83
+ definition: CLIAgentDefinition;
84
+
85
+ /** When detection was performed (epoch ms) */
86
+ detectedAt: number;
87
+ }
88
+
89
+ /**
90
+ * Result of a full detection scan across all known agents.
91
+ */
92
+ export interface DetectionResult {
93
+ /** All agents (installed and not installed) */
94
+ agents: DetectedAgent[];
95
+
96
+ /** Number of agents scanned */
97
+ scanned: number;
98
+
99
+ /** Detection duration in milliseconds */
100
+ durationMs: number;
101
+
102
+ /** Whether detection is still in progress */
103
+ pending?: boolean;
104
+ }
105
+
106
+ // =============================================================================
107
+ // Command Builder
108
+ // =============================================================================
109
+
110
+ /**
111
+ * Options for building a spawn command.
112
+ */
113
+ export interface SpawnCommandOptions {
114
+ /** Model to use (passed via modelFlag) */
115
+ model?: string;
116
+
117
+ /** Working directory (passed via cwdFlag) */
118
+ cwd?: string;
119
+ }
120
+
121
+ /**
122
+ * Result of building a spawn command.
123
+ */
124
+ export interface SpawnCommand {
125
+ /** The binary/command to execute */
126
+ command: string;
127
+
128
+ /** Arguments to pass to the command */
129
+ args: string[];
130
+ }
131
+
132
+ // =============================================================================
133
+ // Detection Configuration
134
+ // =============================================================================
135
+
136
+ /**
137
+ * Configuration for the agent detection system.
138
+ */
139
+ export interface AgentDetectionConfig {
140
+ /** Whether agent detection is enabled (default: true) */
141
+ enabled?: boolean;
142
+
143
+ /** Cache TTL in milliseconds (default: 60000) */
144
+ cacheTtlMs?: number;
145
+
146
+ /** Timeout for `which` calls in milliseconds (default: 5000) */
147
+ whichTimeoutMs?: number;
148
+
149
+ /** Timeout for version checks in milliseconds (default: 10000) */
150
+ versionTimeoutMs?: number;
151
+
152
+ /** Additional custom agent definitions to include */
153
+ additionalAgents?: CLIAgentDefinition[];
154
+
155
+ /** Agent IDs to exclude from detection */
156
+ disabledAgents?: string[];
157
+ }
158
+
159
+ // =============================================================================
160
+ // Errors
161
+ // =============================================================================
162
+
163
+ /**
164
+ * Error codes for agent detection operations.
165
+ */
166
+ export type AgentDetectionErrorCode =
167
+ | "UNKNOWN_AGENT"
168
+ | "AGENT_NOT_INSTALLED"
169
+ | "DETECTION_FAILED"
170
+ | "DETECTION_TIMEOUT";
171
+
172
+ /**
173
+ * Error thrown by agent detection operations.
174
+ */
175
+ export class AgentDetectionError extends Error {
176
+ constructor(
177
+ message: string,
178
+ public readonly code: AgentDetectionErrorCode,
179
+ public readonly agentId?: string
180
+ ) {
181
+ super(message);
182
+ this.name = "AgentDetectionError";
183
+ }
184
+ }
package/src/api/server.ts CHANGED
@@ -549,6 +549,116 @@ export function createAPIServer(
549
549
  res.json(status);
550
550
  });
551
551
 
552
+ // GET /api/team - Get active team info
553
+ app.get("/api/team", (_req: Request, res: Response) => {
554
+ // Check for team config in EventStore
555
+ const statusEvents = eventStore.query({ type: "status", limit: 50 });
556
+ const teamConfigEvent = statusEvents.find(
557
+ (e) => e.payload?.team_config != null
558
+ );
559
+
560
+ if (!teamConfigEvent?.payload?.team_config) {
561
+ res.json({ active: false });
562
+ return;
563
+ }
564
+
565
+ const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
566
+ res.json({
567
+ active: true,
568
+ name: tc.teamName,
569
+ strategy: tc.strategy,
570
+ taskMode: tc.taskMode,
571
+ enforcement: tc.enforcement,
572
+ });
573
+ });
574
+
575
+ // ─────────────────────────────────────────────────────────────────
576
+ // Metrics Endpoints (Phase 5)
577
+ // ─────────────────────────────────────────────────────────────────
578
+
579
+ // GET /api/metrics/throughput - Task throughput metrics
580
+ app.get("/api/metrics/throughput", (req: Request, res: Response) => {
581
+ const windowMs = req.query.window_ms
582
+ ? Number(req.query.window_ms)
583
+ : 5 * 60 * 1000;
584
+ const after = Date.now() - windowMs;
585
+
586
+ const taskEvents = eventStore.query({ type: "task", after });
587
+ let completed = 0, failed = 0, created = 0;
588
+ for (const e of taskEvents) {
589
+ const action = e.payload?.action as string | undefined;
590
+ if (action === "created") created++;
591
+ else if (action === "completed") completed++;
592
+ else if (action === "failed") failed++;
593
+ }
594
+ const windowMin = windowMs / 60000;
595
+
596
+ res.json({
597
+ tasksCompleted: completed,
598
+ tasksFailed: failed,
599
+ tasksCreated: created,
600
+ completedPerMinute: windowMin > 0 ? Math.round((completed / windowMin) * 100) / 100 : 0,
601
+ windowMs,
602
+ });
603
+ });
604
+
605
+ // GET /api/metrics/utilization - Agent utilization metrics
606
+ app.get("/api/metrics/utilization", (_req: Request, res: Response) => {
607
+ const allAgents = eventStore.listAgents();
608
+ const active = allAgents.filter(
609
+ (a) => a.state === "running" || a.state === "spawning"
610
+ );
611
+ const byRole: Record<string, number> = {};
612
+ const byState: Record<string, number> = {};
613
+ for (const a of active) {
614
+ const role = a.role ?? "unknown";
615
+ byRole[role] = (byRole[role] ?? 0) + 1;
616
+ }
617
+ for (const a of allAgents) {
618
+ byState[a.state] = (byState[a.state] ?? 0) + 1;
619
+ }
620
+
621
+ res.json({
622
+ activeAgents: active.length,
623
+ totalAgents: allAgents.length,
624
+ agentsByRole: byRole,
625
+ agentsByState: byState,
626
+ });
627
+ });
628
+
629
+ // GET /api/metrics/errors - Error metrics
630
+ app.get("/api/metrics/errors", (req: Request, res: Response) => {
631
+ const windowMs = req.query.window_ms
632
+ ? Number(req.query.window_ms)
633
+ : 30 * 60 * 1000;
634
+ const limit = req.query.limit ? Number(req.query.limit) : 20;
635
+
636
+ const statusEvents = eventStore.query({
637
+ type: "status",
638
+ after: Date.now() - windowMs,
639
+ });
640
+
641
+ const errors: Array<{ timestamp: number; agentId: string; type: string; summary: string }> = [];
642
+ const byType: Record<string, number> = {};
643
+
644
+ for (const e of statusEvents) {
645
+ if (e.payload?.status_type !== "failed") continue;
646
+ const agentId = (e.source as { agent_id?: string })?.agent_id ?? "unknown";
647
+ const summary = (e.payload?.summary as string) ?? "Unknown error";
648
+ const errorType = ((e.payload?.details as Record<string, unknown>)?.signal as string) ?? "agent_failed";
649
+ errors.push({ timestamp: e.timestamp, agentId, type: errorType, summary });
650
+ byType[errorType] = (byType[errorType] ?? 0) + 1;
651
+ }
652
+
653
+ errors.sort((a, b) => b.timestamp - a.timestamp);
654
+
655
+ res.json({
656
+ totalErrors: errors.length,
657
+ errorsByType: byType,
658
+ recentErrors: errors.slice(0, limit),
659
+ });
660
+ });
661
+
552
662
  // POST /api/conversation/message - Send message to head manager
553
663
  app.post("/api/conversation/message", async (req: Request, res: Response) => {
554
664
  // Reject new messages during shutdown
package/src/cli/index.ts CHANGED
@@ -16,6 +16,8 @@ import { createAgentManager } from "../agent/agent-manager.js";
16
16
  import { createTaskManager } from "../task/task-manager.js";
17
17
  import { createMessageRouter } from "../router/message-router.js";
18
18
  import { createAPIServer } from "../api/server.js";
19
+ import { loadProjectConfig } from "../config/project-config.js";
20
+ import { loadTeam, TeamRuntime } from "../teams/index.js";
19
21
  import type { Agent, Task } from "../store/types/index.js";
20
22
 
21
23
  // ─────────────────────────────────────────────────────────────────
@@ -120,6 +122,7 @@ program
120
122
  .option("-p, --port <port>", "Port to listen on", "3000")
121
123
  .option("-h, --host <host>", "Host to bind to", "localhost")
122
124
  .option("--cwd <path>", "Working directory for agents")
125
+ .option("--team <name>", "Load team template")
123
126
  .action(async (options) => {
124
127
  console.log(chalk.blue("Starting multi-agent server..."));
125
128
 
@@ -130,6 +133,32 @@ program
130
133
  const agentManager = createAgentManager(eventStore, messageRouter);
131
134
  const taskManager = createTaskManager(eventStore);
132
135
 
136
+ // Determine team name: CLI flag > project config > none
137
+ const projectConfig = loadProjectConfig(options.cwd);
138
+ const teamName = options.team ?? projectConfig.team;
139
+
140
+ // Load and initialize team if specified
141
+ let teamRuntime: TeamRuntime | null = null;
142
+ if (teamName) {
143
+ console.log(chalk.blue(`Loading team template '${teamName}'...`));
144
+ const manifest = await loadTeam(
145
+ teamName,
146
+ agentManager.getRoleRegistry(),
147
+ options.cwd
148
+ );
149
+ teamRuntime = new TeamRuntime(manifest, {
150
+ agentManager,
151
+ messageRouter,
152
+ eventStore,
153
+ });
154
+ await teamRuntime.initialize();
155
+ console.log(
156
+ chalk.green(
157
+ `Team '${teamName}' loaded: ${manifest.roles.join(", ")}`
158
+ )
159
+ );
160
+ }
161
+
133
162
  // Create API server
134
163
  const server = createAPIServer(
135
164
  { eventStore, agentManager, taskManager, messageRouter },
@@ -142,11 +171,26 @@ program
142
171
  console.log(
143
172
  chalk.green(`Server running at http://${options.host}:${options.port}`)
144
173
  );
174
+
175
+ // Bootstrap team agents after server is running
176
+ if (teamRuntime) {
177
+ const { rootId, companionIds } = await teamRuntime.bootstrap();
178
+ console.log(
179
+ chalk.green(
180
+ `Team '${teamName}' bootstrapped: root=${rootId}` +
181
+ (companionIds.length > 0
182
+ ? `, companions=${companionIds.join(", ")}`
183
+ : "")
184
+ )
185
+ );
186
+ }
187
+
145
188
  console.log(chalk.gray("Press Ctrl+C to stop"));
146
189
 
147
190
  // Handle shutdown
148
191
  process.on("SIGINT", async () => {
149
192
  console.log(chalk.yellow("\nShutting down..."));
193
+ if (teamRuntime) await teamRuntime.teardown();
150
194
  await server.stop();
151
195
  await agentManager.close();
152
196
  await eventStore.close();
package/src/cli/mcp.ts CHANGED
@@ -176,6 +176,50 @@ async function main() {
176
176
  }
177
177
  });
178
178
 
179
+ // Read team config from EventStore (stored by TeamRuntime.initialize)
180
+ let teamTaskMode: string | undefined;
181
+ const teamEvents = eventStore.query({ type: "status", limit: 50 });
182
+ const teamConfigEvent = teamEvents.find(
183
+ (e) => e.payload?.team_config != null
184
+ );
185
+ if (teamConfigEvent?.payload?.team_config) {
186
+ const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
187
+ teamTaskMode = tc.taskMode as string | undefined;
188
+ debugLog(`[MCP] Found team config: team=${tc.teamName}, strategy=${tc.strategy}, taskMode=${tc.taskMode}`);
189
+ }
190
+
191
+ // Register team roles in local RoleRegistry for capability checks
192
+ const roleRegistry = agentManager.getRoleRegistry();
193
+ let integrationStrategy: import("../workspace/strategies/types.js").IntegrationStrategy | undefined;
194
+
195
+ if (teamConfigEvent?.payload?.team_config) {
196
+ const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
197
+
198
+ // Register serialized team roles (stored by TeamRuntime.initialize)
199
+ const roles = tc.roles as Record<string, { name: string; capabilities: string[] }> | undefined;
200
+ if (roles) {
201
+ for (const roleDef of Object.values(roles)) {
202
+ roleRegistry.registerRole(roleDef as import("../roles/types.js").RoleDefinition);
203
+ }
204
+ debugLog(`[MCP] Registered ${Object.keys(roles).length} team roles in RoleRegistry`);
205
+ }
206
+
207
+ // Instantiate integration strategy from team config
208
+ const strategyName = tc.strategy as string | undefined;
209
+ if (strategyName) {
210
+ try {
211
+ const { defaultStrategyRegistry } = await import("../workspace/strategies/registry.js");
212
+ integrationStrategy = defaultStrategyRegistry.get(
213
+ strategyName,
214
+ tc.strategyConfig as Record<string, unknown> | undefined
215
+ );
216
+ debugLog(`[MCP] Instantiated '${strategyName}' integration strategy`);
217
+ } catch (err) {
218
+ debugLog(`[MCP] Failed to instantiate strategy '${strategyName}': ${err}`);
219
+ }
220
+ }
221
+ }
222
+
179
223
  // Create MCP server with agent context
180
224
  const mcpServer = createMCPServer(
181
225
  {
@@ -191,6 +235,9 @@ async function main() {
191
235
  taskManager,
192
236
  messageRouter,
193
237
  activityWatcher,
238
+ taskMode: teamTaskMode as "push" | "pull" | undefined,
239
+ roleRegistry,
240
+ integrationStrategy,
194
241
  }
195
242
  );
196
243
 
@@ -0,0 +1,9 @@
1
+ export {
2
+ loadProjectConfig,
3
+ getProjectConfigPath,
4
+ ProjectConfigError,
5
+ type ProjectConfig,
6
+ type ProjectConfigErrorCode,
7
+ CONFIG_DIR,
8
+ CONFIG_FILE,
9
+ } from "./project-config.js";