macro-agent 0.1.0 → 0.1.2

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 (660) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/.sudocode/issues.jsonl +28 -0
  3. package/.sudocode/specs.jsonl +8 -0
  4. package/CLAUDE.md +25 -17
  5. package/README.md +11 -29
  6. package/dist/acp/macro-agent.d.ts +15 -0
  7. package/dist/acp/macro-agent.d.ts.map +1 -1
  8. package/dist/acp/macro-agent.js +131 -35
  9. package/dist/acp/macro-agent.js.map +1 -1
  10. package/dist/acp/types.d.ts +32 -1
  11. package/dist/acp/types.d.ts.map +1 -1
  12. package/dist/acp/types.js.map +1 -1
  13. package/dist/agent/agent-manager.d.ts +65 -1
  14. package/dist/agent/agent-manager.d.ts.map +1 -1
  15. package/dist/agent/agent-manager.js +544 -200
  16. package/dist/agent/agent-manager.js.map +1 -1
  17. package/dist/agent/types.d.ts +8 -1
  18. package/dist/agent/types.d.ts.map +1 -1
  19. package/dist/agent/types.js.map +1 -1
  20. package/dist/api/server.d.ts +8 -1
  21. package/dist/api/server.d.ts.map +1 -1
  22. package/dist/api/server.js +136 -8
  23. package/dist/api/server.js.map +1 -1
  24. package/dist/api/types.d.ts +1 -1
  25. package/dist/api/types.d.ts.map +1 -1
  26. package/dist/auth/index.d.ts +2 -0
  27. package/dist/auth/index.d.ts.map +1 -0
  28. package/dist/auth/index.js +2 -0
  29. package/dist/auth/index.js.map +1 -0
  30. package/dist/auth/token.d.ts +41 -0
  31. package/dist/auth/token.d.ts.map +1 -0
  32. package/dist/auth/token.js +73 -0
  33. package/dist/auth/token.js.map +1 -0
  34. package/dist/cli/acp.d.ts +2 -23
  35. package/dist/cli/acp.d.ts.map +1 -1
  36. package/dist/cli/acp.js +197 -61
  37. package/dist/cli/acp.js.map +1 -1
  38. package/dist/cli/index.js +152 -16
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/mcp.d.ts +6 -0
  41. package/dist/cli/mcp.d.ts.map +1 -1
  42. package/dist/cli/mcp.js +279 -173
  43. package/dist/cli/mcp.js.map +1 -1
  44. package/dist/cli/parse-args.d.ts +20 -0
  45. package/dist/cli/parse-args.d.ts.map +1 -0
  46. package/dist/cli/parse-args.js +43 -0
  47. package/dist/cli/parse-args.js.map +1 -0
  48. package/dist/cli/stable-instance-id.d.ts +8 -0
  49. package/dist/cli/stable-instance-id.d.ts.map +1 -0
  50. package/dist/cli/stable-instance-id.js +14 -0
  51. package/dist/cli/stable-instance-id.js.map +1 -0
  52. package/dist/config/project-config.d.ts +85 -7
  53. package/dist/config/project-config.d.ts.map +1 -1
  54. package/dist/config/project-config.js +133 -20
  55. package/dist/config/project-config.js.map +1 -1
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/lifecycle/handlers/index.d.ts +7 -3
  61. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  62. package/dist/lifecycle/handlers/index.js +25 -8
  63. package/dist/lifecycle/handlers/index.js.map +1 -1
  64. package/dist/lifecycle/types.d.ts +2 -0
  65. package/dist/lifecycle/types.d.ts.map +1 -1
  66. package/dist/lifecycle/types.js.map +1 -1
  67. package/dist/map/adapter/acp-over-map.d.ts +17 -0
  68. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  69. package/dist/map/adapter/acp-over-map.js +384 -23
  70. package/dist/map/adapter/acp-over-map.js.map +1 -1
  71. package/dist/map/adapter/connection-manager.d.ts.map +1 -1
  72. package/dist/map/adapter/connection-manager.js +3 -0
  73. package/dist/map/adapter/connection-manager.js.map +1 -1
  74. package/dist/map/adapter/event-log.d.ts +87 -0
  75. package/dist/map/adapter/event-log.d.ts.map +1 -0
  76. package/dist/map/adapter/event-log.js +122 -0
  77. package/dist/map/adapter/event-log.js.map +1 -0
  78. package/dist/map/adapter/event-translator.js +6 -6
  79. package/dist/map/adapter/event-translator.js.map +1 -1
  80. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  81. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  82. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  83. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  84. package/dist/map/adapter/extensions/index.d.ts +13 -1
  85. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  86. package/dist/map/adapter/extensions/index.js +61 -0
  87. package/dist/map/adapter/extensions/index.js.map +1 -1
  88. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  89. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  90. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  91. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  92. package/dist/map/adapter/extensions/rename.d.ts +29 -0
  93. package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
  94. package/dist/map/adapter/extensions/rename.js +49 -0
  95. package/dist/map/adapter/extensions/rename.js.map +1 -0
  96. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  97. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  98. package/dist/map/adapter/extensions/streams.js +515 -0
  99. package/dist/map/adapter/extensions/streams.js.map +1 -0
  100. package/dist/map/adapter/extensions/task.d.ts.map +1 -1
  101. package/dist/map/adapter/extensions/task.js +10 -0
  102. package/dist/map/adapter/extensions/task.js.map +1 -1
  103. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  104. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  105. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  106. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  107. package/dist/map/adapter/index.d.ts +2 -1
  108. package/dist/map/adapter/index.d.ts.map +1 -1
  109. package/dist/map/adapter/index.js +10 -2
  110. package/dist/map/adapter/index.js.map +1 -1
  111. package/dist/map/adapter/interface.d.ts +2 -0
  112. package/dist/map/adapter/interface.d.ts.map +1 -1
  113. package/dist/map/adapter/map-adapter.d.ts +3 -0
  114. package/dist/map/adapter/map-adapter.d.ts.map +1 -1
  115. package/dist/map/adapter/map-adapter.js +258 -35
  116. package/dist/map/adapter/map-adapter.js.map +1 -1
  117. package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
  118. package/dist/map/adapter/subscription-manager.js +5 -1
  119. package/dist/map/adapter/subscription-manager.js.map +1 -1
  120. package/dist/map/adapter/types.d.ts +3 -1
  121. package/dist/map/adapter/types.d.ts.map +1 -1
  122. package/dist/mcp/map-client.d.ts +39 -0
  123. package/dist/mcp/map-client.d.ts.map +1 -0
  124. package/dist/mcp/map-client.js +129 -0
  125. package/dist/mcp/map-client.js.map +1 -0
  126. package/dist/mcp/mcp-server.d.ts +16 -0
  127. package/dist/mcp/mcp-server.d.ts.map +1 -1
  128. package/dist/mcp/mcp-server.js +125 -88
  129. package/dist/mcp/mcp-server.js.map +1 -1
  130. package/dist/mcp/tools/done.d.ts.map +1 -1
  131. package/dist/mcp/tools/done.js +18 -0
  132. package/dist/mcp/tools/done.js.map +1 -1
  133. package/dist/mcp/types.d.ts +9 -1
  134. package/dist/mcp/types.d.ts.map +1 -1
  135. package/dist/mcp/types.js.map +1 -1
  136. package/dist/metrics/metrics.js +1 -1
  137. package/dist/metrics/metrics.js.map +1 -1
  138. package/dist/roles/builtin/coordinator.d.ts.map +1 -1
  139. package/dist/roles/builtin/coordinator.js +2 -1
  140. package/dist/roles/builtin/coordinator.js.map +1 -1
  141. package/dist/roles/builtin/integrator.d.ts.map +1 -1
  142. package/dist/roles/builtin/integrator.js +2 -1
  143. package/dist/roles/builtin/integrator.js.map +1 -1
  144. package/dist/roles/builtin/worker.d.ts.map +1 -1
  145. package/dist/roles/builtin/worker.js +3 -1
  146. package/dist/roles/builtin/worker.js.map +1 -1
  147. package/dist/roles/capabilities.d.ts +9 -1
  148. package/dist/roles/capabilities.d.ts.map +1 -1
  149. package/dist/roles/capabilities.js +27 -7
  150. package/dist/roles/capabilities.js.map +1 -1
  151. package/dist/roles/config-loader.d.ts +6 -6
  152. package/dist/roles/config-loader.d.ts.map +1 -1
  153. package/dist/roles/config-loader.js +8 -7
  154. package/dist/roles/config-loader.js.map +1 -1
  155. package/dist/roles/registry.d.ts +2 -2
  156. package/dist/roles/registry.js +2 -2
  157. package/dist/roles/types.d.ts +3 -1
  158. package/dist/roles/types.d.ts.map +1 -1
  159. package/dist/server/combined-server.d.ts +28 -1
  160. package/dist/server/combined-server.d.ts.map +1 -1
  161. package/dist/server/combined-server.js +111 -8
  162. package/dist/server/combined-server.js.map +1 -1
  163. package/dist/store/event-store.d.ts +2 -1
  164. package/dist/store/event-store.d.ts.map +1 -1
  165. package/dist/store/event-store.js +80 -24
  166. package/dist/store/event-store.js.map +1 -1
  167. package/dist/store/instance.d.ts +1 -1
  168. package/dist/store/instance.d.ts.map +1 -1
  169. package/dist/store/instance.js +2 -2
  170. package/dist/store/instance.js.map +1 -1
  171. package/dist/store/types/agents.d.ts +23 -0
  172. package/dist/store/types/agents.d.ts.map +1 -1
  173. package/dist/store/types/events.d.ts +1 -1
  174. package/dist/store/types/events.d.ts.map +1 -1
  175. package/dist/task/backend/index.d.ts +47 -29
  176. package/dist/task/backend/index.d.ts.map +1 -1
  177. package/dist/task/backend/index.js +109 -71
  178. package/dist/task/backend/index.js.map +1 -1
  179. package/dist/task/backend/memory.d.ts +1 -0
  180. package/dist/task/backend/memory.d.ts.map +1 -1
  181. package/dist/task/backend/memory.js +3 -0
  182. package/dist/task/backend/memory.js.map +1 -1
  183. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  184. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  185. package/dist/task/backend/opentasks/backend.js +1023 -0
  186. package/dist/task/backend/opentasks/backend.js.map +1 -0
  187. package/dist/task/backend/opentasks/client.d.ts +337 -0
  188. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  189. package/dist/task/backend/opentasks/client.js +225 -0
  190. package/dist/task/backend/opentasks/client.js.map +1 -0
  191. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  192. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  193. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  194. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  195. package/dist/task/backend/opentasks/index.d.ts +21 -0
  196. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  197. package/dist/task/backend/opentasks/index.js +21 -0
  198. package/dist/task/backend/opentasks/index.js.map +1 -0
  199. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  200. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  201. package/dist/task/backend/opentasks/mapping.js +77 -0
  202. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  203. package/dist/task/backend/types.d.ts +33 -53
  204. package/dist/task/backend/types.d.ts.map +1 -1
  205. package/dist/task/backend/types.js +7 -11
  206. package/dist/task/backend/types.js.map +1 -1
  207. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  208. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  209. package/dist/task/backend/unified-tool-provider.js +623 -0
  210. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  211. package/dist/teams/index.d.ts +3 -1
  212. package/dist/teams/index.d.ts.map +1 -1
  213. package/dist/teams/index.js +2 -0
  214. package/dist/teams/index.js.map +1 -1
  215. package/dist/teams/seed-defaults.d.ts +20 -0
  216. package/dist/teams/seed-defaults.d.ts.map +1 -0
  217. package/dist/teams/seed-defaults.js +71 -0
  218. package/dist/teams/seed-defaults.js.map +1 -0
  219. package/dist/teams/team-loader.d.ts +7 -3
  220. package/dist/teams/team-loader.d.ts.map +1 -1
  221. package/dist/teams/team-loader.js +156 -164
  222. package/dist/teams/team-loader.js.map +1 -1
  223. package/dist/teams/team-manager.d.ts +112 -0
  224. package/dist/teams/team-manager.d.ts.map +1 -0
  225. package/dist/teams/team-manager.js +305 -0
  226. package/dist/teams/team-manager.js.map +1 -0
  227. package/dist/teams/team-runtime.d.ts +125 -19
  228. package/dist/teams/team-runtime.d.ts.map +1 -1
  229. package/dist/teams/team-runtime.js +529 -119
  230. package/dist/teams/team-runtime.js.map +1 -1
  231. package/dist/teams/types.d.ts +41 -151
  232. package/dist/teams/types.d.ts.map +1 -1
  233. package/dist/teams/types.js +2 -3
  234. package/dist/teams/types.js.map +1 -1
  235. package/docs/architecture.md +7 -6
  236. package/docs/configuration.md +26 -62
  237. package/docs/implementation-details.md +5 -5
  238. package/docs/implementation-summary.md +17 -17
  239. package/docs/plan-self-driving-support.md +4 -4
  240. package/docs/spec-self-driving-support.md +10 -10
  241. package/docs/team-templates.md +2 -2
  242. package/docs/teams.md +76 -3
  243. package/docs/troubleshooting.md +10 -11
  244. package/package.json +7 -4
  245. package/references/minimem/.claude/settings.json +7 -0
  246. package/references/minimem/.sudocode/issues.jsonl +18 -0
  247. package/references/minimem/.sudocode/specs.jsonl +1 -0
  248. package/references/minimem/CLAUDE.md +310 -0
  249. package/references/minimem/README.md +562 -0
  250. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  251. package/references/minimem/claude-plugin/.mcp.json +7 -0
  252. package/references/minimem/claude-plugin/README.md +158 -0
  253. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  254. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  255. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  256. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  257. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  258. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  259. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  260. package/references/minimem/media/banner.png +0 -0
  261. package/references/minimem/package-lock.json +5373 -0
  262. package/references/minimem/package.json +72 -0
  263. package/references/minimem/scripts/postbuild.js +35 -0
  264. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  265. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  266. package/references/minimem/src/__tests__/helpers.ts +199 -0
  267. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  268. package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
  269. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  270. package/references/minimem/src/__tests__/session.test.ts +190 -0
  271. package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
  272. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  273. package/references/minimem/src/cli/commands/append.ts +76 -0
  274. package/references/minimem/src/cli/commands/config.ts +262 -0
  275. package/references/minimem/src/cli/commands/conflicts.ts +413 -0
  276. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  277. package/references/minimem/src/cli/commands/index.ts +12 -0
  278. package/references/minimem/src/cli/commands/init.ts +88 -0
  279. package/references/minimem/src/cli/commands/mcp.ts +177 -0
  280. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  281. package/references/minimem/src/cli/commands/search.ts +158 -0
  282. package/references/minimem/src/cli/commands/status.ts +84 -0
  283. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  284. package/references/minimem/src/cli/commands/sync.ts +70 -0
  285. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  286. package/references/minimem/src/cli/config.ts +584 -0
  287. package/references/minimem/src/cli/index.ts +264 -0
  288. package/references/minimem/src/cli/shared.ts +161 -0
  289. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  290. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  291. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  292. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  293. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  294. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  295. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  296. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  297. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  298. package/references/minimem/src/cli/sync/central.ts +292 -0
  299. package/references/minimem/src/cli/sync/conflicts.ts +204 -0
  300. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  301. package/references/minimem/src/cli/sync/detection.ts +138 -0
  302. package/references/minimem/src/cli/sync/index.ts +107 -0
  303. package/references/minimem/src/cli/sync/operations.ts +373 -0
  304. package/references/minimem/src/cli/sync/registry.ts +279 -0
  305. package/references/minimem/src/cli/sync/state.ts +355 -0
  306. package/references/minimem/src/cli/sync/validation.ts +206 -0
  307. package/references/minimem/src/cli/sync/watcher.ts +234 -0
  308. package/references/minimem/src/cli/version.ts +34 -0
  309. package/references/minimem/src/core/index.ts +9 -0
  310. package/references/minimem/src/core/indexer.ts +628 -0
  311. package/references/minimem/src/core/searcher.ts +221 -0
  312. package/references/minimem/src/db/schema.ts +183 -0
  313. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  314. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  315. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  316. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  317. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  318. package/references/minimem/src/index.ts +109 -0
  319. package/references/minimem/src/internal.ts +299 -0
  320. package/references/minimem/src/minimem.ts +1276 -0
  321. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  322. package/references/minimem/src/search/graph.ts +234 -0
  323. package/references/minimem/src/search/hybrid.ts +151 -0
  324. package/references/minimem/src/search/search.ts +256 -0
  325. package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
  326. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  327. package/references/minimem/src/server/mcp.ts +326 -0
  328. package/references/minimem/src/server/tools.ts +720 -0
  329. package/references/minimem/src/session.ts +460 -0
  330. package/references/minimem/tsconfig.json +19 -0
  331. package/references/minimem/tsup.config.ts +26 -0
  332. package/references/minimem/vitest.config.ts +24 -0
  333. package/references/openteams/.claude/settings.json +6 -0
  334. package/references/openteams/README.md +1 -0
  335. package/references/openteams/SKILL.md +341 -0
  336. package/references/openteams/design.md +411 -0
  337. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
  338. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
  339. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
  340. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
  341. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
  342. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
  343. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
  344. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
  345. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
  346. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
  347. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
  348. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
  349. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
  350. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
  351. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
  352. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
  353. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
  354. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
  355. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
  356. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
  357. package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
  358. package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
  359. package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
  360. package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
  361. package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
  362. package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
  363. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
  364. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
  365. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
  366. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
  367. package/references/openteams/examples/bmad-method/team.yaml +161 -0
  368. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
  369. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
  370. package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
  371. package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
  372. package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
  373. package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
  374. package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
  375. package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
  376. package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
  377. package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
  378. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
  379. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
  380. package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
  381. package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
  382. package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
  383. package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
  384. package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
  385. package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
  386. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
  387. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
  388. package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
  389. package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
  390. package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
  391. package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
  392. package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
  393. package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
  394. package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
  395. package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
  396. package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
  397. package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
  398. package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
  399. package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
  400. package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
  401. package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
  402. package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
  403. package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
  404. package/references/openteams/examples/get-shit-done/team.yaml +154 -0
  405. package/references/openteams/package-lock.json +2181 -0
  406. package/references/openteams/package.json +48 -0
  407. package/references/openteams/schema/role.schema.json +125 -0
  408. package/references/openteams/schema/team.schema.json +284 -0
  409. package/references/openteams/src/cli/agent.ts +104 -0
  410. package/references/openteams/src/cli/cli.test.ts +381 -0
  411. package/references/openteams/src/cli/generate.ts +220 -0
  412. package/references/openteams/src/cli/message.ts +241 -0
  413. package/references/openteams/src/cli/task.ts +154 -0
  414. package/references/openteams/src/cli/team.ts +104 -0
  415. package/references/openteams/src/cli/template.ts +207 -0
  416. package/references/openteams/src/cli.ts +45 -0
  417. package/references/openteams/src/db/database.test.ts +185 -0
  418. package/references/openteams/src/db/database.ts +240 -0
  419. package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
  420. package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
  421. package/references/openteams/src/generators/package-generator.test.ts +129 -0
  422. package/references/openteams/src/generators/package-generator.ts +102 -0
  423. package/references/openteams/src/generators/skill-generator.test.ts +246 -0
  424. package/references/openteams/src/generators/skill-generator.ts +374 -0
  425. package/references/openteams/src/index.ts +104 -0
  426. package/references/openteams/src/services/agent-service.test.ts +158 -0
  427. package/references/openteams/src/services/agent-service.ts +84 -0
  428. package/references/openteams/src/services/communication-service.test.ts +455 -0
  429. package/references/openteams/src/services/communication-service.ts +371 -0
  430. package/references/openteams/src/services/message-service.test.ts +342 -0
  431. package/references/openteams/src/services/message-service.ts +203 -0
  432. package/references/openteams/src/services/task-service.test.ts +434 -0
  433. package/references/openteams/src/services/task-service.ts +239 -0
  434. package/references/openteams/src/services/team-service.test.ts +181 -0
  435. package/references/openteams/src/services/team-service.ts +139 -0
  436. package/references/openteams/src/services/template-service.test.ts +306 -0
  437. package/references/openteams/src/services/template-service.ts +182 -0
  438. package/references/openteams/src/spawner/acp-factory.ts +96 -0
  439. package/references/openteams/src/spawner/interface.ts +31 -0
  440. package/references/openteams/src/spawner/mock.test.ts +93 -0
  441. package/references/openteams/src/spawner/mock.ts +59 -0
  442. package/references/openteams/src/template/loader.test.ts +1319 -0
  443. package/references/openteams/src/template/loader.ts +698 -0
  444. package/references/openteams/src/template/types.ts +200 -0
  445. package/references/openteams/src/types.ts +205 -0
  446. package/references/openteams/tsconfig.json +18 -0
  447. package/references/openteams/vitest.config.ts +9 -0
  448. package/references/skill-tree/.claude/settings.json +6 -0
  449. package/references/skill-tree/.sudocode/issues.jsonl +11 -0
  450. package/references/skill-tree/.sudocode/specs.jsonl +1 -0
  451. package/references/skill-tree/CLAUDE.md +150 -0
  452. package/references/skill-tree/README.md +324 -0
  453. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  454. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  455. package/references/skill-tree/docs/TODOS.md +91 -0
  456. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  457. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  458. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  459. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  460. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  461. package/references/skill-tree/docs/scraper/README.md +170 -0
  462. package/references/skill-tree/examples/basic-usage.ts +190 -0
  463. package/references/skill-tree/package-lock.json +1509 -0
  464. package/references/skill-tree/package.json +66 -0
  465. package/references/skill-tree/scraper/README.md +123 -0
  466. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  467. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  468. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  469. package/references/skill-tree/scraper/package-lock.json +6329 -0
  470. package/references/skill-tree/scraper/package.json +68 -0
  471. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  472. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  473. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  474. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  475. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  476. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  477. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  478. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  479. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  480. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  481. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  482. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  483. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  484. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  485. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  486. package/references/skill-tree/test/run-all.ts +106 -0
  487. package/references/skill-tree/test/utils.ts +128 -0
  488. package/references/skill-tree/vitest.config.ts +16 -0
  489. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
  490. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
  491. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
  492. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
  493. package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
  494. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
  495. package/src/acp/__tests__/integration.test.ts +56 -31
  496. package/src/acp/__tests__/macro-agent.test.ts +16 -7
  497. package/src/acp/macro-agent.ts +170 -36
  498. package/src/acp/types.ts +46 -1
  499. package/src/agent/__tests__/agent-manager.test.ts +228 -2
  500. package/src/agent/agent-manager.ts +809 -285
  501. package/src/agent/types.ts +12 -1
  502. package/src/api/__tests__/server.test.ts +203 -4
  503. package/src/api/server.ts +169 -10
  504. package/src/api/types.ts +3 -1
  505. package/src/auth/__tests__/token.test.ts +100 -0
  506. package/src/auth/index.ts +1 -0
  507. package/src/auth/token.ts +82 -0
  508. package/src/cli/__tests__/acp.test.ts +1 -1
  509. package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
  510. package/src/cli/acp.ts +197 -72
  511. package/src/cli/index.ts +125 -15
  512. package/src/cli/mcp.ts +315 -197
  513. package/src/cli/parse-args.ts +54 -0
  514. package/src/cli/stable-instance-id.ts +14 -0
  515. package/src/config/project-config.ts +214 -27
  516. package/src/index.ts +3 -0
  517. package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
  518. package/src/lifecycle/__tests__/handlers.test.ts +53 -0
  519. package/src/lifecycle/handlers/index.ts +25 -8
  520. package/src/lifecycle/types.ts +3 -0
  521. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
  522. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
  523. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
  524. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
  525. package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
  526. package/src/map/adapter/__tests__/event-log.test.ts +527 -0
  527. package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
  528. package/src/map/adapter/__tests__/extensions.test.ts +408 -0
  529. package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
  530. package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
  531. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
  532. package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
  533. package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
  534. package/src/map/adapter/acp-over-map.ts +678 -66
  535. package/src/map/adapter/connection-manager.ts +3 -0
  536. package/src/map/adapter/event-log.ts +208 -0
  537. package/src/map/adapter/event-translator.ts +6 -6
  538. package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
  539. package/src/map/adapter/extensions/index.ts +96 -0
  540. package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
  541. package/src/map/adapter/extensions/streams.ts +839 -0
  542. package/src/map/adapter/extensions/task.ts +11 -0
  543. package/src/map/adapter/extensions/update-metadata.ts +126 -0
  544. package/src/map/adapter/index.ts +33 -0
  545. package/src/map/adapter/interface.ts +2 -0
  546. package/src/map/adapter/map-adapter.ts +312 -47
  547. package/src/map/adapter/subscription-manager.ts +5 -1
  548. package/src/map/adapter/types.ts +10 -1
  549. package/src/mcp/__tests__/map-client.test.ts +386 -0
  550. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
  551. package/src/mcp/__tests__/mcp-server.test.ts +100 -1
  552. package/src/mcp/map-client.ts +177 -0
  553. package/src/mcp/mcp-server.ts +205 -103
  554. package/src/mcp/tools/done.ts +19 -0
  555. package/src/mcp/types.ts +6 -1
  556. package/src/metrics/metrics.ts +1 -1
  557. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
  558. package/src/roles/__tests__/config-loader.test.ts +7 -7
  559. package/src/roles/builtin/coordinator.ts +2 -0
  560. package/src/roles/builtin/integrator.ts +2 -0
  561. package/src/roles/builtin/worker.ts +3 -0
  562. package/src/roles/capabilities.ts +28 -7
  563. package/src/roles/config-loader.ts +8 -7
  564. package/src/roles/registry.ts +2 -2
  565. package/src/roles/types.ts +7 -0
  566. package/src/server/__tests__/combined-server.test.ts +94 -21
  567. package/src/server/combined-server.ts +203 -33
  568. package/src/steering/__tests__/steering-integration.test.ts +1 -1
  569. package/src/store/__tests__/event-store-oob.test.ts +109 -0
  570. package/src/store/__tests__/event-store.test.ts +196 -1
  571. package/src/store/__tests__/instance.test.ts +3 -3
  572. package/src/store/event-store.ts +92 -23
  573. package/src/store/instance.ts +2 -2
  574. package/src/store/types/agents.ts +20 -0
  575. package/src/store/types/events.ts +1 -1
  576. package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
  577. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
  578. package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
  579. package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
  580. package/src/task/backend/index.ts +156 -106
  581. package/src/task/backend/memory.ts +4 -0
  582. package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
  583. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
  584. package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
  585. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
  586. package/src/task/backend/opentasks/backend.ts +1323 -0
  587. package/src/task/backend/opentasks/client.ts +652 -0
  588. package/src/task/backend/opentasks/daemon-manager.ts +256 -0
  589. package/src/task/backend/opentasks/index.ts +69 -0
  590. package/src/task/backend/opentasks/mapping.ts +94 -0
  591. package/src/task/backend/types.ts +42 -66
  592. package/src/task/backend/unified-tool-provider.ts +779 -0
  593. package/src/teams/CLAUDE.md +180 -0
  594. package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
  595. package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
  596. package/src/teams/__tests__/team-manager.test.ts +814 -0
  597. package/src/teams/__tests__/team-system.test.ts +1291 -8
  598. package/src/teams/index.ts +21 -3
  599. package/src/teams/seed-defaults.ts +79 -0
  600. package/src/teams/team-loader.ts +202 -236
  601. package/src/teams/team-manager.ts +387 -0
  602. package/src/teams/team-runtime.ts +592 -121
  603. package/src/teams/types.ts +99 -200
  604. package/test_fixtures/README.md +2 -3
  605. package/test_fixtures/fixtures/index.ts +0 -3
  606. package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
  607. package/test_fixtures/fixtures/repos/index.ts +1 -3
  608. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
  609. package/test_fixtures/fixtures/repos/types.ts +0 -11
  610. package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
  611. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
  612. package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
  613. package/vitest.config.ts +1 -1
  614. package/vitest.e2e.config.ts +1 -1
  615. package/vitest.setup.ts +1 -30
  616. package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
  617. package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
  618. package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
  619. package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
  620. package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
  621. package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
  622. package/.macro-agent/teams/self-driving/team.yaml +0 -103
  623. package/.macro-agent/teams/structured/prompts/developer.md +0 -26
  624. package/.macro-agent/teams/structured/prompts/lead.md +0 -25
  625. package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
  626. package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
  627. package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
  628. package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
  629. package/.macro-agent/teams/structured/team.yaml +0 -89
  630. package/docs/sudocode-integration.md +0 -383
  631. package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
  632. package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
  633. package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
  634. package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
  635. package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
  636. package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
  637. package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
  638. package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
  639. package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
  640. package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
  641. package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
  642. package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
  643. package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
  644. package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
  645. package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
  646. package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
  647. package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
  648. package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
  649. package/src/task/backend/sudocode/backend.ts +0 -1237
  650. package/src/task/backend/sudocode/client.ts +0 -515
  651. package/src/task/backend/sudocode/index.ts +0 -120
  652. package/src/task/backend/sudocode/mapping.ts +0 -93
  653. package/src/task/backend/sudocode/server-client.ts +0 -522
  654. package/src/task/backend/sudocode/standalone-client.ts +0 -623
  655. package/src/task/backend/sudocode/sync-policy.ts +0 -387
  656. package/src/task/backend/sudocode/tools.ts +0 -896
  657. package/src/task/backend/tool-provider.ts +0 -506
  658. package/test_fixtures/fixtures/sudocode/index.ts +0 -29
  659. package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
  660. package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Thin MAP Client
3
+ *
4
+ * Ephemeral WebSocket client for MCP subprocesses to call MAP extension
5
+ * methods on the main server. Each call opens a connection, performs the
6
+ * MAP handshake, sends a single RPC, and disconnects.
7
+ *
8
+ * Uses raw WebSocket + JSON-RPC — not the full MAP ClientConnection SDK,
9
+ * since the SDK's capability negotiation and subscription management
10
+ * overhead is unnecessary for single-RPC ephemeral calls.
11
+ */
12
+
13
+ import WebSocket from "ws";
14
+
15
+ // =============================================================================
16
+ // Types
17
+ // =============================================================================
18
+
19
+ interface JsonRpcRequest {
20
+ jsonrpc: "2.0";
21
+ id: number;
22
+ method: string;
23
+ params?: unknown;
24
+ }
25
+
26
+ interface JsonRpcResponse {
27
+ jsonrpc: "2.0";
28
+ id: number;
29
+ result?: unknown;
30
+ error?: {
31
+ code: number;
32
+ message: string;
33
+ data?: unknown;
34
+ };
35
+ }
36
+
37
+ export interface MapCallOptions {
38
+ /** Timeout in milliseconds (default: 30000) */
39
+ timeoutMs?: number;
40
+ /** Server token for authentication (appended as query param on WebSocket URL) */
41
+ serverToken?: string;
42
+ }
43
+
44
+ export class MapCallError extends Error {
45
+ readonly code: number;
46
+ readonly data?: unknown;
47
+
48
+ constructor(code: number, message: string, data?: unknown) {
49
+ super(message);
50
+ this.name = "MapCallError";
51
+ this.code = code;
52
+ this.data = data;
53
+ }
54
+ }
55
+
56
+ // =============================================================================
57
+ // Implementation
58
+ // =============================================================================
59
+
60
+ /**
61
+ * Make a single MAP extension RPC call via ephemeral WebSocket.
62
+ *
63
+ * 1. Opens WebSocket to the MAP endpoint
64
+ * 2. Sends `map/connect` handshake
65
+ * 3. Sends the RPC request
66
+ * 4. Awaits the response
67
+ * 5. Closes the WebSocket
68
+ *
69
+ * @param serverUrl - HTTP URL of the macro-agent server (e.g., "http://localhost:3001")
70
+ * @param method - MAP extension method (e.g., "_macro/mcp/spawn_agent")
71
+ * @param params - Method parameters (includes context)
72
+ * @param options - Timeout and other options
73
+ * @returns The RPC result
74
+ */
75
+ export async function mapCall<T = unknown>(
76
+ serverUrl: string,
77
+ method: string,
78
+ params?: unknown,
79
+ options?: MapCallOptions
80
+ ): Promise<T> {
81
+ const timeoutMs = options?.timeoutMs ?? 30000;
82
+ let wsUrl = serverUrl.replace(/^http/, "ws") + "/map";
83
+ if (options?.serverToken) {
84
+ wsUrl += `?token=${encodeURIComponent(options.serverToken)}`;
85
+ }
86
+
87
+ return new Promise<T>((resolve, reject) => {
88
+ let settled = false;
89
+ let nextId = 1;
90
+ let handshakeCompleted = false;
91
+
92
+ const timeout = setTimeout(() => {
93
+ if (!settled) {
94
+ settled = true;
95
+ ws.close();
96
+ reject(new MapCallError(-32000, `MAP call timed out after ${timeoutMs}ms: ${method}`));
97
+ }
98
+ }, timeoutMs);
99
+
100
+ const ws = new WebSocket(wsUrl);
101
+
102
+ ws.on("open", () => {
103
+ // Step 1: Send MAP handshake
104
+ const connectRequest: JsonRpcRequest = {
105
+ jsonrpc: "2.0",
106
+ id: nextId++,
107
+ method: "map/connect",
108
+ params: {
109
+ participantType: "client",
110
+ identity: `mcp-bridge-${Date.now()}`,
111
+ },
112
+ };
113
+ ws.send(JSON.stringify(connectRequest));
114
+ });
115
+
116
+ ws.on("message", (data) => {
117
+ if (settled) return;
118
+
119
+ let msg: JsonRpcResponse;
120
+ try {
121
+ msg = JSON.parse(data.toString());
122
+ } catch {
123
+ return; // Ignore non-JSON messages
124
+ }
125
+
126
+ if (!handshakeCompleted) {
127
+ // This should be the map/connect response
128
+ if (msg.error) {
129
+ settled = true;
130
+ clearTimeout(timeout);
131
+ ws.close();
132
+ reject(new MapCallError(msg.error.code, `MAP handshake failed: ${msg.error.message}`, msg.error.data));
133
+ return;
134
+ }
135
+
136
+ handshakeCompleted = true;
137
+
138
+ // Step 2: Send the actual RPC request
139
+ const rpcRequest: JsonRpcRequest = {
140
+ jsonrpc: "2.0",
141
+ id: nextId++,
142
+ method,
143
+ params,
144
+ };
145
+ ws.send(JSON.stringify(rpcRequest));
146
+ return;
147
+ }
148
+
149
+ // This is the RPC response
150
+ settled = true;
151
+ clearTimeout(timeout);
152
+ ws.close();
153
+
154
+ if (msg.error) {
155
+ reject(new MapCallError(msg.error.code, msg.error.message, msg.error.data));
156
+ } else {
157
+ resolve(msg.result as T);
158
+ }
159
+ });
160
+
161
+ ws.on("error", (err) => {
162
+ if (!settled) {
163
+ settled = true;
164
+ clearTimeout(timeout);
165
+ reject(new MapCallError(-32000, `MAP WebSocket error: ${err.message}`));
166
+ }
167
+ });
168
+
169
+ ws.on("close", () => {
170
+ if (!settled) {
171
+ settled = true;
172
+ clearTimeout(timeout);
173
+ reject(new MapCallError(-32000, "MAP WebSocket closed unexpectedly"));
174
+ }
175
+ });
176
+ });
177
+ }
@@ -103,6 +103,8 @@ export interface MCPServices {
103
103
  integrationStrategy?: import("../workspace/strategies/types.js").IntegrationStrategy;
104
104
  /** Optional task backend for pull model tools (claim/unclaim) */
105
105
  taskBackend?: import("../task/backend/types.js").TaskBackend;
106
+ /** Optional workspace manager for workspace isolation */
107
+ workspaceManager?: import("../workspace/types.js").WorkspaceManager;
106
108
  }
107
109
 
108
110
  // ─────────────────────────────────────────────────────────────────
@@ -224,16 +226,6 @@ const StopAgentSchema = {
224
226
  .describe("Reason for stopping"),
225
227
  };
226
228
 
227
- const CreateTaskSchema = {
228
- description: z.string().describe("Task description"),
229
- parent_task: z.string().optional().describe("Parent task ID for subtasks"),
230
- inputs: z.record(z.string(), z.unknown()).optional().describe("Initial inputs for the task"),
231
- };
232
-
233
- const GetTaskSchema = {
234
- task_id: z.string().describe("Task ID to look up"),
235
- };
236
-
237
229
  // ─────────────────────────────────────────────────────────────────
238
230
  // Peer Communication Schemas
239
231
  // ─────────────────────────────────────────────────────────────────
@@ -351,6 +343,12 @@ export function createMCPServer(
351
343
  debugLog(`[MCP spawn_agent] Agent IDs: ${allAgents.map(a => a.id).join(', ')}`);
352
344
  }
353
345
 
346
+ // Inherit the parent's permission mode so sub-agents respect
347
+ // the same mode (e.g., "interactive") set during initialization.
348
+ // Read from env var since the MCP server is a separate process
349
+ // without access to the macro-agent server's in-memory state.
350
+ const parentPermissionMode = process.env.MACRO_PERMISSION_MODE;
351
+
354
352
  const spawned = await agentManager.spawn({
355
353
  task: args.task,
356
354
  parent: context.agent_id,
@@ -358,6 +356,7 @@ export function createMCPServer(
358
356
  topics: args.topics ?? [],
359
357
  config: args.config,
360
358
  cwd: args.cwd ?? context.cwd,
359
+ permissionMode: (parentPermissionMode || undefined) as import("acp-factory").PermissionMode | undefined,
361
360
  });
362
361
 
363
362
  return {
@@ -366,6 +365,7 @@ export function createMCPServer(
366
365
  type: "text" as const,
367
366
  text: JSON.stringify({
368
367
  agent_id: spawned.id,
368
+ name: spawned.agent.name,
369
369
  task_id: spawned.agent.task_id,
370
370
  session_id: spawned.session_id,
371
371
  }),
@@ -511,14 +511,18 @@ export function createMCPServer(
511
511
  includeAcknowledged: args.include_acknowledged ?? false,
512
512
  });
513
513
 
514
- const formattedInternalMessages = internalMessages.map((msg) => ({
515
- id: msg.id,
516
- from: `agent:${msg.from.agent_id}`,
517
- content: msg.content.length > 500 ? msg.content.substring(0, 500) : msg.content,
518
- timestamp: msg.timestamp,
519
- truncated: msg.truncated || msg.content.length > 500,
520
- correlation_id: msg.correlation_id,
521
- }));
514
+ const formattedInternalMessages = internalMessages.map((msg) => {
515
+ const fromAgent = msg.from.agent_id ? agentManager.get(msg.from.agent_id) : undefined;
516
+ return {
517
+ id: msg.id,
518
+ from: `agent:${msg.from.agent_id}`,
519
+ from_name: fromAgent?.name,
520
+ content: msg.content.length > 500 ? msg.content.substring(0, 500) : msg.content,
521
+ timestamp: msg.timestamp,
522
+ truncated: msg.truncated || msg.content.length > 500,
523
+ correlation_id: msg.correlation_id,
524
+ };
525
+ });
522
526
 
523
527
  // Get peer messages if peerManager is available
524
528
  let formattedPeerMessages: Array<{
@@ -586,6 +590,7 @@ export function createMCPServer(
586
590
  const entries: Array<{
587
591
  type: "agent" | "task";
588
592
  id: string;
593
+ name?: string;
589
594
  summary: string;
590
595
  state?: string;
591
596
  status?: string;
@@ -612,6 +617,7 @@ export function createMCPServer(
612
617
  agents = agents.filter(
613
618
  (a) =>
614
619
  a.id.toLowerCase().includes(search) ||
620
+ a.name?.toLowerCase().includes(search) ||
615
621
  a.task?.toLowerCase().includes(search)
616
622
  );
617
623
  }
@@ -620,6 +626,7 @@ export function createMCPServer(
620
626
  entries.push({
621
627
  type: "agent",
622
628
  id: agent.id,
629
+ name: agent.name,
623
630
  summary: agent.task ?? "No task description",
624
631
  state: agent.state,
625
632
  });
@@ -703,6 +710,7 @@ export function createMCPServer(
703
710
 
704
711
  return {
705
712
  agent_id: node.agent.id,
713
+ name: node.agent.name,
706
714
  task: node.agent.task ?? "No task",
707
715
  state: node.agent.state,
708
716
  children: shouldIncludeChildren
@@ -772,6 +780,7 @@ export function createMCPServer(
772
780
  type: "text" as const,
773
781
  text: JSON.stringify({
774
782
  id: agent.id,
783
+ name: agent.name,
775
784
  session_id: agent.session_id,
776
785
  task: agent.task ?? "No task",
777
786
  state: agent.state,
@@ -817,7 +826,7 @@ export function createMCPServer(
817
826
  }
818
827
 
819
828
  // Collect all agents that will be stopped (target + descendants)
820
- const stoppedAgents: AgentId[] = [];
829
+ const stoppedAgents: Array<{ agent_id: AgentId; name?: string }> = [];
821
830
 
822
831
  async function stopRecursive(agentId: AgentId): Promise<void> {
823
832
  const agent = agentManager.get(agentId);
@@ -829,9 +838,10 @@ export function createMCPServer(
829
838
  await stopRecursive(child.id);
830
839
  }
831
840
 
832
- // Stop this agent
841
+ // Capture name before stopping
842
+ const agentName = agent.name;
833
843
  await agentManager.terminate(agentId, args.reason ?? "cancelled");
834
- stoppedAgents.push(agentId);
844
+ stoppedAgents.push({ agent_id: agentId, name: agentName });
835
845
  }
836
846
 
837
847
  await stopRecursive(args.agent_id);
@@ -850,85 +860,6 @@ export function createMCPServer(
850
860
  });
851
861
  }
852
862
 
853
- // ─────────────────────────────────────────────────────────────────
854
- // Tool: create_task (requires task.create capability)
855
- // ─────────────────────────────────────────────────────────────────
856
-
857
- if (shouldRegisterTool("create_task")) {
858
- server.registerTool("create_task", {
859
- description: "Create a new task",
860
- inputSchema: CreateTaskSchema,
861
- }, async (args) => {
862
- try {
863
- const task = taskManager.create({
864
- description: args.description,
865
- created_by: context.agent_id,
866
- parent_task: args.parent_task,
867
- inputs: args.inputs,
868
- });
869
-
870
- return {
871
- content: [
872
- {
873
- type: "text" as const,
874
- text: JSON.stringify({
875
- task_id: task.id,
876
- }),
877
- },
878
- ],
879
- };
880
- } catch (error) {
881
- throw new MCPToolError(
882
- `Failed to create task: ${error}`,
883
- "INVALID_INPUT"
884
- );
885
- }
886
- });
887
- }
888
-
889
- // ─────────────────────────────────────────────────────────────────
890
- // Tool: get_task (always allowed - observability)
891
- // ─────────────────────────────────────────────────────────────────
892
-
893
- if (shouldRegisterTool("get_task")) {
894
- server.registerTool("get_task", {
895
- description: "Get details of a specific task",
896
- inputSchema: GetTaskSchema,
897
- }, async (args) => {
898
- const task = taskManager.get(args.task_id);
899
- if (!task) {
900
- throw new MCPToolError(
901
- `Task not found: ${args.task_id}`,
902
- "TASK_NOT_FOUND"
903
- );
904
- }
905
-
906
- // Use completed_at, started_at, or created_at as last update
907
- const updatedAt = task.completed_at ?? task.started_at ?? task.created_at;
908
-
909
- return {
910
- content: [
911
- {
912
- type: "text" as const,
913
- text: JSON.stringify({
914
- id: task.id,
915
- description: task.description,
916
- status: task.status,
917
- assigned_agent: task.assigned_agent,
918
- parent_task: task.parent_task,
919
- subtasks: task.subtasks ?? [],
920
- inputs: task.inputs,
921
- outputs: task.outputs,
922
- artifacts: task.artifacts,
923
- created_at: task.created_at,
924
- updated_at: updatedAt,
925
- }),
926
- },
927
- ],
928
- };
929
- });
930
- }
931
-
932
863
  // ─────────────────────────────────────────────────────────────────
933
864
  // Tool: send_peer_message (requires msg.send capability)
934
865
  // ─────────────────────────────────────────────────────────────────
@@ -1117,6 +1048,7 @@ export function createMCPServer(
1117
1048
  roleRegistry,
1118
1049
  integrationStrategy: services.integrationStrategy,
1119
1050
  taskMode: services.taskMode,
1051
+ workspaceManager: services.workspaceManager,
1120
1052
  });
1121
1053
 
1122
1054
  try {
@@ -1127,6 +1059,14 @@ export function createMCPServer(
1127
1059
  task_id?: string;
1128
1060
  });
1129
1061
 
1062
+ // Persist events emitted by the done handler (MERGE_REQUEST, WORKER_DONE, etc.)
1063
+ // so the main process polling can see them via EventStore reload.
1064
+ try {
1065
+ await eventStore.persist();
1066
+ } catch {
1067
+ // Best-effort — events may still be picked up on next reload
1068
+ }
1069
+
1130
1070
  // If shouldTerminate is true, schedule termination after this tool returns
1131
1071
  // The agent will be terminated after the tool execution completes
1132
1072
  if (result.shouldTerminate) {
@@ -1162,7 +1102,7 @@ export function createMCPServer(
1162
1102
  // Tools: claim_task, unclaim_task, list_claimable_tasks (pull model)
1163
1103
  // ─────────────────────────────────────────────────────────────────
1164
1104
 
1165
- if (services.taskBackend && shouldRegisterTool("claim_task")) {
1105
+ if (services.taskBackend && services.taskMode === "pull" && shouldRegisterTool("claim_task")) {
1166
1106
  server.registerTool(CLAIM_TASK_TOOL_INFO.name, {
1167
1107
  description: CLAIM_TASK_TOOL_INFO.description,
1168
1108
  inputSchema: ClaimTaskSchema,
@@ -1175,7 +1115,7 @@ export function createMCPServer(
1175
1115
  });
1176
1116
  }
1177
1117
 
1178
- if (services.taskBackend && shouldRegisterTool("unclaim_task")) {
1118
+ if (services.taskBackend && services.taskMode === "pull" && shouldRegisterTool("unclaim_task")) {
1179
1119
  server.registerTool(UNCLAIM_TASK_TOOL_INFO.name, {
1180
1120
  description: UNCLAIM_TASK_TOOL_INFO.description,
1181
1121
  inputSchema: UnclaimTaskSchema,
@@ -1188,7 +1128,7 @@ export function createMCPServer(
1188
1128
  });
1189
1129
  }
1190
1130
 
1191
- if (services.taskBackend && shouldRegisterTool("list_claimable_tasks")) {
1131
+ if (services.taskBackend && services.taskMode === "pull" && shouldRegisterTool("list_claimable_tasks")) {
1192
1132
  server.registerTool(LIST_CLAIMABLE_TASKS_TOOL_INFO.name, {
1193
1133
  description: LIST_CLAIMABLE_TASKS_TOOL_INFO.description,
1194
1134
  inputSchema: ListClaimableTasksSchema,
@@ -1302,3 +1242,165 @@ export function createMCPServer(
1302
1242
  close,
1303
1243
  };
1304
1244
  }
1245
+
1246
+ // ─────────────────────────────────────────────────────────────────
1247
+ // Thin-Client Factory (MAP WebSocket mode)
1248
+ // ─────────────────────────────────────────────────────────────────
1249
+
1250
+ /**
1251
+ * Type for the mapCall function used in thin-client mode.
1252
+ */
1253
+ export type MapCallFn = <T = unknown>(
1254
+ method: string,
1255
+ params?: unknown,
1256
+ options?: { timeoutMs?: number }
1257
+ ) => Promise<T>;
1258
+
1259
+ /**
1260
+ * Creates a thin-client MCP server where every tool handler calls
1261
+ * the main server via MAP WebSocket RPC instead of using local services.
1262
+ *
1263
+ * Tool schemas, descriptions, and role filtering remain the same.
1264
+ * Only the handler bodies change — they forward to `_macro/mcp/*` extensions.
1265
+ */
1266
+ export function createMCPServerThinClient(
1267
+ context: ToolContext,
1268
+ mapCallFn: MapCallFn,
1269
+ config: MCPServerConfig = {}
1270
+ ): MCPServerInstance {
1271
+ const { name = "macro-agent-mcp", version = "1.0.0" } = config;
1272
+
1273
+ const server = new McpServer(
1274
+ { name, version },
1275
+ { capabilities: { tools: {} } }
1276
+ );
1277
+
1278
+ /**
1279
+ * Helper: wrap args with agent context for the bridge handler.
1280
+ */
1281
+ function withContext(args: Record<string, unknown>): Record<string, unknown> {
1282
+ return { ...args, context };
1283
+ }
1284
+
1285
+ /**
1286
+ * Helper: create a tool handler that forwards to a MAP bridge extension.
1287
+ */
1288
+ function bridgeTool(
1289
+ toolName: string,
1290
+ schema: Record<string, z.ZodTypeAny>,
1291
+ description: string,
1292
+ mapMethod: string,
1293
+ options?: { timeoutMs?: number }
1294
+ ) {
1295
+ server.registerTool(toolName, { description, inputSchema: schema }, async (args) => {
1296
+ try {
1297
+ const result = await mapCallFn(mapMethod, withContext(args as Record<string, unknown>), options);
1298
+ return {
1299
+ content: [{ type: "text" as const, text: JSON.stringify(result) }],
1300
+ };
1301
+ } catch (error) {
1302
+ const message = error instanceof Error ? error.message : String(error);
1303
+ throw new MCPToolError(`${toolName} failed: ${message}`, "ROUTING_FAILED");
1304
+ }
1305
+ });
1306
+ }
1307
+
1308
+ // Register all tools pointing to their _macro/mcp/* bridge counterparts
1309
+
1310
+ bridgeTool("spawn_agent", SpawnAgentSchema, "Spawn a child agent to work on a subtask",
1311
+ "_macro/mcp/spawn_agent");
1312
+
1313
+ bridgeTool("emit_status", EmitStatusSchema, "Report a status milestone (started, checkpoint, completed, failed, blocked)",
1314
+ "_macro/mcp/emit_status");
1315
+
1316
+ bridgeTool("send_message", SendMessageSchema, "Send a message to another agent, task, or topic",
1317
+ "_macro/mcp/send_message");
1318
+
1319
+ bridgeTool("check_messages", CheckMessagesSchema, "Check pending messages in your inbox",
1320
+ "_macro/mcp/check_messages");
1321
+
1322
+ bridgeTool("query_index", QueryIndexSchema, "Search for agents and tasks",
1323
+ "_macro/mcp/query_index");
1324
+
1325
+ bridgeTool("get_hierarchy", GetHierarchySchema, "View the agent hierarchy tree",
1326
+ "_macro/mcp/get_hierarchy");
1327
+
1328
+ bridgeTool("get_agent_summary", GetAgentSummarySchema, "Get detailed summary of a specific agent",
1329
+ "_macro/mcp/get_agent_summary");
1330
+
1331
+ bridgeTool("stop_agent", StopAgentSchema, "Stop a child agent in your subtree",
1332
+ "_macro/mcp/stop_agent");
1333
+
1334
+ bridgeTool("done", DoneSchema, DONE_TOOL_INFO.description,
1335
+ "_macro/mcp/done");
1336
+
1337
+ bridgeTool("inject_context", InjectContextSchema, INJECT_CONTEXT_TOOL_INFO.description,
1338
+ "_macro/mcp/inject_context");
1339
+
1340
+ bridgeTool("wait_for_activity", WaitForActivitySchema, WAIT_FOR_ACTIVITY_TOOL_INFO.description,
1341
+ "_macro/mcp/wait_for_activity", { timeoutMs: 65000 }); // Extra buffer for long-poll
1342
+
1343
+ bridgeTool("claim_task", ClaimTaskSchema, CLAIM_TASK_TOOL_INFO.description,
1344
+ "_macro/mcp/claim_task");
1345
+
1346
+ bridgeTool("unclaim_task", UnclaimTaskSchema, UNCLAIM_TASK_TOOL_INFO.description,
1347
+ "_macro/mcp/unclaim_task");
1348
+
1349
+ bridgeTool("list_claimable_tasks", ListClaimableTasksSchema, LIST_CLAIMABLE_TASKS_TOOL_INFO.description,
1350
+ "_macro/mcp/list_claimable_tasks");
1351
+
1352
+ bridgeTool("send_peer_message", SendPeerMessageSchema, "Send a fire-and-forget message to another macro-agent (peer)",
1353
+ "_macro/mcp/send_peer_message");
1354
+
1355
+ bridgeTool("send_peer_request", SendPeerRequestSchema, "Send a request to another macro-agent (peer) and wait for response",
1356
+ "_macro/mcp/send_peer_request");
1357
+
1358
+ bridgeTool("respond_to_peer_request", RespondToPeerRequestSchema, "Respond to an incoming peer request",
1359
+ "_macro/mcp/respond_to_peer_request");
1360
+
1361
+ // ─────────────────────────────────────────────────────────────────
1362
+ // Server Lifecycle
1363
+ // ─────────────────────────────────────────────────────────────────
1364
+
1365
+ let transport: StdioServerTransport | null = null;
1366
+
1367
+ async function start(): Promise<void> {
1368
+ // Discover dynamic task tools from the server before connecting.
1369
+ // This ensures we only register tools the server actually supports
1370
+ // (e.g. memory backend = 4 tools, OpenTasks = 7 tools, none = 0).
1371
+ try {
1372
+ const result = await mapCallFn<{ tools: Array<{ name: string; description: string }> }>(
1373
+ "_macro/mcp/task_tools_list",
1374
+ withContext({})
1375
+ );
1376
+
1377
+ if (result?.tools?.length > 0) {
1378
+ const DynamicTaskParamsSchema = {
1379
+ params: z.record(z.string(), z.unknown()).optional()
1380
+ .describe("Tool parameters (validated by the server-side handler)"),
1381
+ };
1382
+
1383
+ for (const tool of result.tools) {
1384
+ bridgeTool(tool.name, DynamicTaskParamsSchema, tool.description,
1385
+ `_macro/mcp/task_tool/${tool.name}`);
1386
+ }
1387
+ debugLog(`[MCP] Registered ${result.tools.length} dynamic task tools from server`);
1388
+ }
1389
+ } catch (error) {
1390
+ // Server may not support task tools — continue without them
1391
+ debugLog(`[MCP] Failed to discover task tools: ${error instanceof Error ? error.message : error}`);
1392
+ }
1393
+
1394
+ transport = new StdioServerTransport();
1395
+ await server.connect(transport);
1396
+ }
1397
+
1398
+ async function close(): Promise<void> {
1399
+ if (transport) {
1400
+ await server.close();
1401
+ transport = null;
1402
+ }
1403
+ }
1404
+
1405
+ return { server, start, close };
1406
+ }
@@ -147,6 +147,13 @@ export function buildLifecycleContext(
147
147
  streamId = workspace?.streamId;
148
148
  }
149
149
 
150
+ // Fallback: read streamId from env var (set by buildMacroAgentMcp during spawn).
151
+ // WorkspaceManager is not available in MCP subprocesses, but the streamId is
152
+ // needed for MERGE_REQUEST signal details so the team runtime can submit to the merge queue.
153
+ if (!streamId && process.env.MACRO_STREAM_ID) {
154
+ streamId = process.env.MACRO_STREAM_ID;
155
+ }
156
+
150
157
  return {
151
158
  agentId: toolContext.agent_id,
152
159
  role,
@@ -206,6 +213,18 @@ export function createDoneHandler(context: ToolContext, deps: DoneToolDeps) {
206
213
  workspaceManager
207
214
  );
208
215
 
216
+ // Resolve capabilities for capability-based handler dispatch (team roles)
217
+ if (roleRegistry) {
218
+ try {
219
+ const resolvedRole = roleRegistry.resolveRole(role);
220
+ if (resolvedRole?.capabilities) {
221
+ lifecycleContext.capabilities = [...resolvedRole.capabilities];
222
+ }
223
+ } catch {
224
+ // Role not in registry — capabilities stay undefined
225
+ }
226
+ }
227
+
209
228
  const cleanupStatus = detectCleanupStatus(lifecycleContext, {
210
229
  messageRouter,
211
230
  });
package/src/mcp/types.ts CHANGED
@@ -196,6 +196,7 @@ export interface GetTaskInput {
196
196
  */
197
197
  export interface SpawnAgentOutput {
198
198
  agent_id: AgentId;
199
+ name?: string;
199
200
  task_id: TaskId;
200
201
  session_id: string;
201
202
  }
@@ -223,6 +224,7 @@ export interface CheckMessagesOutput {
223
224
  messages: Array<{
224
225
  id: string;
225
226
  from: AgentId;
227
+ from_name?: string;
226
228
  content: string;
227
229
  timestamp: number;
228
230
  truncated: boolean;
@@ -239,6 +241,7 @@ export interface QueryIndexOutput {
239
241
  entries: Array<{
240
242
  type: "agent" | "task";
241
243
  id: string;
244
+ name?: string;
242
245
  summary: string;
243
246
  state?: string;
244
247
  status?: string;
@@ -258,6 +261,7 @@ export interface GetHierarchyOutput {
258
261
 
259
262
  export interface HierarchyNode {
260
263
  agent_id: AgentId;
264
+ name?: string;
261
265
  task: string;
262
266
  state: string;
263
267
  children: HierarchyNode[];
@@ -268,6 +272,7 @@ export interface HierarchyNode {
268
272
  */
269
273
  export interface GetAgentSummaryOutput {
270
274
  id: AgentId;
275
+ name?: string;
271
276
  session_id: string;
272
277
  task: string;
273
278
  state: string;
@@ -286,7 +291,7 @@ export interface GetAgentSummaryOutput {
286
291
  */
287
292
  export interface StopAgentOutput {
288
293
  success: boolean;
289
- stopped_agents: AgentId[];
294
+ stopped_agents: Array<{ agent_id: AgentId; name?: string }>;
290
295
  }
291
296
 
292
297
  /**