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
@@ -186,7 +186,7 @@ export function getUtilizationMetrics(
186
186
  after: windowStart,
187
187
  });
188
188
  const terminateEvents = eventStore.query({
189
- type: "terminate",
189
+ type: "stop",
190
190
  after: windowStart,
191
191
  });
192
192
 
@@ -262,7 +262,7 @@ describe("STALE_AGENT Flow Integration", () => {
262
262
 
263
263
  // Terminate the worker
264
264
  eventStore.emit({
265
- type: "terminate",
265
+ type: "stop",
266
266
  source: { agent_id: workerId },
267
267
  payload: {
268
268
  agent_id: workerId,
@@ -65,20 +65,20 @@ describe("Role Config Loader", () => {
65
65
  it("CONFIG-PATH-01: getProjectConfigPath returns correct path", () => {
66
66
  const projectPath = "/my/project";
67
67
  const configPath = getProjectConfigPath(projectPath);
68
- expect(configPath).toBe("/my/project/.macro-agent/roles.json");
68
+ expect(configPath).toBe("/my/project/.multiagent/roles.json");
69
69
  });
70
70
 
71
71
  it("CONFIG-PATH-02: getProjectConfigPath uses cwd when no path provided", () => {
72
72
  const configPath = getProjectConfigPath();
73
73
  expect(configPath).toBe(
74
- path.join(process.cwd(), ".macro-agent", "roles.json")
74
+ path.join(process.cwd(), ".multiagent", "roles.json")
75
75
  );
76
76
  });
77
77
 
78
78
  it("CONFIG-PATH-03: getUserConfigPath returns path in home directory", () => {
79
79
  const configPath = getUserConfigPath();
80
80
  expect(configPath).toBe(
81
- path.join(os.homedir(), ".macro-agent", "roles.json")
81
+ path.join(os.homedir(), ".multiagent", "roles.json")
82
82
  );
83
83
  });
84
84
  });
@@ -260,7 +260,7 @@ describe("Role Config Loader", () => {
260
260
  describe("Project/User Config Loading", () => {
261
261
  it("CONFIG-PROJECT-01: loadProjectConfig uses correct path", () => {
262
262
  const projectPath = tempDir;
263
- const configDir = path.join(projectPath, ".macro-agent");
263
+ const configDir = path.join(projectPath, ".multiagent");
264
264
  fs.mkdirSync(configDir, { recursive: true });
265
265
 
266
266
  const configPath = path.join(configDir, "roles.json");
@@ -280,7 +280,7 @@ describe("Role Config Loader", () => {
280
280
 
281
281
  it("CONFIG-ALL-01: loadAllConfigs combines user and project configs", () => {
282
282
  // Create project config
283
- const projectConfigDir = path.join(tempDir, "project", ".macro-agent");
283
+ const projectConfigDir = path.join(tempDir, "project", ".multiagent");
284
284
  fs.mkdirSync(projectConfigDir, { recursive: true });
285
285
  writeConfigFile(path.join(projectConfigDir, "roles.json"), {
286
286
  roles: {
@@ -289,7 +289,7 @@ describe("Role Config Loader", () => {
289
289
  });
290
290
 
291
291
  // Create user config
292
- const userConfigDir = path.join(tempDir, "user", ".macro-agent");
292
+ const userConfigDir = path.join(tempDir, "user", ".multiagent");
293
293
  fs.mkdirSync(userConfigDir, { recursive: true });
294
294
  writeConfigFile(path.join(userConfigDir, "roles.json"), {
295
295
  roles: {
@@ -363,7 +363,7 @@ describe("Role Config Loader", () => {
363
363
 
364
364
  it("CONFIG-REG-03: Registry with autoLoad loads configs on construction", () => {
365
365
  // Create project config
366
- const projectConfigDir = path.join(tempDir, ".macro-agent");
366
+ const projectConfigDir = path.join(tempDir, ".multiagent");
367
367
  fs.mkdirSync(projectConfigDir, { recursive: true });
368
368
  writeConfigFile(path.join(projectConfigDir, "roles.json"), {
369
369
  roles: {
@@ -11,6 +11,7 @@ import {
11
11
  TASK_CAPABILITIES,
12
12
  AGENT_CAPABILITIES,
13
13
  MSG_CAPABILITIES,
14
+ WORKSPACE_CAPABILITIES,
14
15
  } from "../capabilities.js";
15
16
 
16
17
  /**
@@ -42,6 +43,7 @@ export const CoordinatorRole: RoleDefinition = {
42
43
  MSG_CAPABILITIES.SEND,
43
44
  MSG_CAPABILITIES.BROADCAST,
44
45
  MSG_CAPABILITIES.SUBSCRIBE,
46
+ WORKSPACE_CAPABILITIES.STREAM,
45
47
  // Note: lifecycle.done is optional, configured per-coordinator
46
48
  ],
47
49
 
@@ -12,6 +12,7 @@ import {
12
12
  AGENT_CAPABILITIES,
13
13
  LIFECYCLE_CAPABILITIES,
14
14
  MSG_CAPABILITIES,
15
+ WORKSPACE_CAPABILITIES,
15
16
  } from "../capabilities.js";
16
17
 
17
18
  /**
@@ -39,6 +40,7 @@ export const IntegratorRole: RoleDefinition = {
39
40
  LIFECYCLE_CAPABILITIES.DONE,
40
41
  MSG_CAPABILITIES.SEND,
41
42
  MSG_CAPABILITIES.SUBSCRIBE,
43
+ WORKSPACE_CAPABILITIES.INTEGRATE,
42
44
  ],
43
45
 
44
46
  workspace: {
@@ -13,6 +13,7 @@ import {
13
13
  LIFECYCLE_CAPABILITIES,
14
14
  AGENT_CAPABILITIES,
15
15
  MSG_CAPABILITIES,
16
+ WORKSPACE_CAPABILITIES,
16
17
  } from "../capabilities.js";
17
18
 
18
19
  /** 30 minutes in milliseconds (stale timeout) */
@@ -45,6 +46,7 @@ export const WorkerRole: RoleDefinition = {
45
46
  LIFECYCLE_CAPABILITIES.DONE,
46
47
  AGENT_CAPABILITIES.SPAWN_WORKER,
47
48
  MSG_CAPABILITIES.SEND,
49
+ WORKSPACE_CAPABILITIES.WORKTREE,
48
50
  ],
49
51
 
50
52
  workspace: {
@@ -100,6 +102,7 @@ export const ResolverWorkerRole: RoleDefinition = {
100
102
  LIFECYCLE_CAPABILITIES.DONE,
101
103
  AGENT_CAPABILITIES.SPAWN_WORKER,
102
104
  MSG_CAPABILITIES.SEND,
105
+ WORKSPACE_CAPABILITIES.WORKTREE,
103
106
  ],
104
107
 
105
108
  // Inherits workspace from worker
@@ -66,6 +66,13 @@ export const MSG_CAPABILITIES = {
66
66
  SUBSCRIBE: "msg.subscribe" as const,
67
67
  };
68
68
 
69
+ /** Workspace capabilities */
70
+ export const WORKSPACE_CAPABILITIES = {
71
+ WORKTREE: "workspace.worktree" as const, // Gets own git worktree; done() submits to merge queue
72
+ STREAM: "workspace.stream" as const, // Creates integration stream at spawn
73
+ INTEGRATE: "workspace.integrate" as const, // Joins stream; processes merge queue entries
74
+ };
75
+
69
76
  /** Wildcard capability */
70
77
  export const WILDCARD_CAPABILITY = "*" as const;
71
78
 
@@ -112,15 +119,29 @@ export const ALL_CAPABILITIES: Set<Capability> = new Set([
112
119
  MSG_CAPABILITIES.SEND,
113
120
  MSG_CAPABILITIES.BROADCAST,
114
121
  MSG_CAPABILITIES.SUBSCRIBE,
122
+ // Workspace
123
+ WORKSPACE_CAPABILITIES.WORKTREE,
124
+ WORKSPACE_CAPABILITIES.STREAM,
125
+ WORKSPACE_CAPABILITIES.INTEGRATE,
115
126
  // Wildcard
116
127
  WILDCARD_CAPABILITY,
117
128
  ]);
118
129
 
119
130
  /**
120
- * Check if a capability string is known
131
+ * Check if a capability string is known.
132
+ * Accepts exact matches from ALL_CAPABILITIES, plus dynamic `agent.spawn.*`
133
+ * patterns generated by team-defined spawn rules (e.g., "agent.spawn.grinder").
121
134
  */
122
135
  export function isKnownCapability(capability: string): capability is Capability {
123
- return ALL_CAPABILITIES.has(capability as Capability);
136
+ if (ALL_CAPABILITIES.has(capability as Capability)) {
137
+ return true;
138
+ }
139
+ // Team-defined roles generate dynamic agent.spawn.<role> capabilities
140
+ // via TeamLoader spawn_rules translation (RD3). These are valid at runtime.
141
+ if (capability.startsWith("agent.spawn.")) {
142
+ return true;
143
+ }
144
+ return false;
124
145
  }
125
146
 
126
147
  // =============================================================================
@@ -156,11 +177,11 @@ export const CAPABILITY_TOOL_MAP: CapabilityToolMap = {
156
177
  // Lifecycle operations
157
178
  [LIFECYCLE_CAPABILITIES.DONE]: ["done"],
158
179
 
159
- // Task operations (via sudocode integration or TaskBackend)
160
- [TASK_CAPABILITIES.CREATE]: ["sudocode_upsert_issue", "create_task"],
161
- [TASK_CAPABILITIES.ASSIGN]: ["sudocode_upsert_issue", "assign_task"],
162
- [TASK_CAPABILITIES.UPDATE]: ["sudocode_upsert_issue", "update_task"],
163
- [TASK_CAPABILITIES.CLOSE]: ["sudocode_upsert_issue", "close_task"],
180
+ // Task operations (via TaskBackend + OpenTasks tools)
181
+ [TASK_CAPABILITIES.CREATE]: ["create_task"],
182
+ [TASK_CAPABILITIES.ASSIGN]: ["assign_task", "task"],
183
+ [TASK_CAPABILITIES.UPDATE]: ["update_task", "task", "link", "annotate"],
184
+ [TASK_CAPABILITIES.CLOSE]: ["close_task", "task"],
164
185
  [TASK_CAPABILITIES.CLAIM]: ["claim_task", "unclaim_task", "list_claimable_tasks"],
165
186
 
166
187
  // Execution operations
@@ -2,8 +2,8 @@
2
2
  * Role Configuration File Loader
3
3
  *
4
4
  * Loads role configurations from:
5
- * - Project-level: .macro-agent/roles.json
6
- * - User-level: ~/.macro-agent/roles.json
5
+ * - Project-level: .multiagent/roles.json
6
+ * - User-level: ~/.multiagent/roles.json
7
7
  *
8
8
  * Supports layered override with project > user > built-in precedence.
9
9
  *
@@ -103,10 +103,10 @@ export interface LoadResult {
103
103
  export const CONFIG_FILE_NAME = "roles.json";
104
104
 
105
105
  /** Project-level config directory */
106
- export const PROJECT_CONFIG_DIR = ".macro-agent";
106
+ export const PROJECT_CONFIG_DIR = ".multiagent";
107
107
 
108
108
  /** User-level config directory */
109
- export const USER_CONFIG_DIR = ".macro-agent";
109
+ export const USER_CONFIG_DIR = ".multiagent";
110
110
 
111
111
  // =============================================================================
112
112
  // Path Resolution
@@ -116,7 +116,7 @@ export const USER_CONFIG_DIR = ".macro-agent";
116
116
  * Get the project-level config file path
117
117
  *
118
118
  * @param projectPath - Project root directory (default: process.cwd())
119
- * @returns Path to .macro-agent/roles.json
119
+ * @returns Path to .multiagent/roles.json
120
120
  */
121
121
  export function getProjectConfigPath(projectPath?: string): string {
122
122
  const root = projectPath ?? process.cwd();
@@ -126,10 +126,11 @@ export function getProjectConfigPath(projectPath?: string): string {
126
126
  /**
127
127
  * Get the user-level config file path
128
128
  *
129
- * @returns Path to ~/.macro-agent/roles.json
129
+ * @returns Path to ~/.multiagent/roles.json (or MACRO_AGENT_HOME/roles.json)
130
130
  */
131
131
  export function getUserConfigPath(): string {
132
- return path.join(os.homedir(), USER_CONFIG_DIR, CONFIG_FILE_NAME);
132
+ const globalDir = process.env.MACRO_AGENT_HOME || path.join(os.homedir(), USER_CONFIG_DIR);
133
+ return path.join(globalDir, CONFIG_FILE_NAME);
133
134
  }
134
135
 
135
136
  // =============================================================================
@@ -2,8 +2,8 @@
2
2
  * Role Registry Implementation
3
3
  *
4
4
  * Manages role definitions with layered resolution:
5
- * - Project-level (.macro-agent/roles)
6
- * - User-level (~/.macro-agent/roles)
5
+ * - Project-level (.multiagent/roles)
6
+ * - User-level (~/.multiagent/roles)
7
7
  * - Built-in (framework)
8
8
  */
9
9
 
@@ -54,6 +54,12 @@ export type ExecCapability =
54
54
  /** Communication capabilities */
55
55
  export type MsgCapability = "msg.send" | "msg.broadcast" | "msg.subscribe";
56
56
 
57
+ /** Workspace capabilities */
58
+ export type WorkspaceCapability =
59
+ | "workspace.worktree"
60
+ | "workspace.stream"
61
+ | "workspace.integrate";
62
+
57
63
  /** All capability types combined, plus wildcard */
58
64
  export type Capability =
59
65
  | FileCapability
@@ -63,6 +69,7 @@ export type Capability =
63
69
  | TaskCapability
64
70
  | ExecCapability
65
71
  | MsgCapability
72
+ | WorkspaceCapability
66
73
  | "*"; // Wildcard for all capabilities
67
74
 
68
75
  // =============================================================================
@@ -19,6 +19,13 @@ function getRandomPort(): number {
19
19
  return 10000 + Math.floor(Math.random() * 50000);
20
20
  }
21
21
 
22
+ const TEST_TOKEN = "test-server-token-for-unit-tests";
23
+
24
+ /** Build a WebSocket URL with auth token query param */
25
+ function wsUrl(port: number, path: string): string {
26
+ return `ws://localhost:${port}${path}?token=${TEST_TOKEN}`;
27
+ }
28
+
22
29
  describe("createCombinedServer with MAP", () => {
23
30
  let server: CombinedServer;
24
31
  let services: CombinedServerServices;
@@ -33,6 +40,7 @@ describe("createCombinedServer with MAP", () => {
33
40
  get: vi.fn().mockReturnValue(null),
34
41
  list: vi.fn().mockReturnValue([]),
35
42
  getChildren: vi.fn().mockReturnValue([]),
43
+ onLifecycleEvent: vi.fn(),
36
44
  } as unknown as AgentManager,
37
45
  eventStore: {
38
46
  append: vi.fn(),
@@ -64,7 +72,7 @@ describe("createCombinedServer with MAP", () => {
64
72
 
65
73
  describe("MAP protocol integration", () => {
66
74
  it("starts with MAP adapter enabled by default", async () => {
67
- server = createCombinedServer(services, { port });
75
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
68
76
  await server.start();
69
77
 
70
78
  expect(server.mapAdapter).toBeDefined();
@@ -72,10 +80,10 @@ describe("createCombinedServer with MAP", () => {
72
80
  });
73
81
 
74
82
  it("accepts MAP connections on /map", async () => {
75
- server = createCombinedServer(services, { port });
83
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
76
84
  await server.start();
77
85
 
78
- const ws = new WebSocket(`ws://localhost:${port}/map`);
86
+ const ws = new WebSocket(wsUrl(port, "/map"));
79
87
 
80
88
  await new Promise<void>((resolve, reject) => {
81
89
  const timeout = setTimeout(() => reject(new Error("Connection timeout")), 2000);
@@ -98,10 +106,10 @@ describe("createCombinedServer with MAP", () => {
98
106
  }, 5000);
99
107
 
100
108
  it("uses custom MAP path", async () => {
101
- server = createCombinedServer(services, { port, mapPath: "/custom-map" });
109
+ server = createCombinedServer(services, { port, mapPath: "/custom-map", serverToken: TEST_TOKEN });
102
110
  await server.start();
103
111
 
104
- const ws = new WebSocket(`ws://localhost:${port}/custom-map`);
112
+ const ws = new WebSocket(wsUrl(port, "/custom-map"));
105
113
 
106
114
  await new Promise<void>((resolve, reject) => {
107
115
  const timeout = setTimeout(() => reject(new Error("Connection timeout")), 2000);
@@ -124,14 +132,14 @@ describe("createCombinedServer with MAP", () => {
124
132
  }, 5000);
125
133
 
126
134
  it("can disable MAP protocol", async () => {
127
- server = createCombinedServer(services, { port, disableMap: true });
135
+ server = createCombinedServer(services, { port, disableMap: true, serverToken: TEST_TOKEN });
128
136
  await server.start();
129
137
 
130
138
  expect(server.mapAdapter).toBeUndefined();
131
139
  expect(server.getMAPConnectionCount()).toBe(0);
132
140
 
133
- // Connection to /map should fail
134
- const ws = new WebSocket(`ws://localhost:${port}/map`);
141
+ // Connection to /map should fail (either 401 without token or 404)
142
+ const ws = new WebSocket(wsUrl(port, "/map"));
135
143
 
136
144
  await new Promise<void>((resolve) => {
137
145
  ws.on("error", () => resolve());
@@ -142,7 +150,7 @@ describe("createCombinedServer with MAP", () => {
142
150
  }, 5000);
143
151
 
144
152
  it("stops MAP adapter on shutdown", async () => {
145
- server = createCombinedServer(services, { port });
153
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
146
154
  await server.start();
147
155
 
148
156
  expect(server.mapAdapter?.isRunning()).toBe(true);
@@ -155,7 +163,7 @@ describe("createCombinedServer with MAP", () => {
155
163
 
156
164
  describe("health endpoint", () => {
157
165
  it("includes map_connections in health response", async () => {
158
- server = createCombinedServer(services, { port });
166
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
159
167
  await server.start();
160
168
 
161
169
  const response = await fetch(`http://localhost:${port}/health`);
@@ -169,7 +177,7 @@ describe("createCombinedServer with MAP", () => {
169
177
  });
170
178
 
171
179
  it("shows 0 map_connections when MAP is disabled", async () => {
172
- server = createCombinedServer(services, { port, disableMap: true });
180
+ server = createCombinedServer(services, { port, disableMap: true, serverToken: TEST_TOKEN });
173
181
  await server.start();
174
182
 
175
183
  const response = await fetch(`http://localhost:${port}/health`);
@@ -179,16 +187,81 @@ describe("createCombinedServer with MAP", () => {
179
187
  });
180
188
  });
181
189
 
190
+ describe("authentication", () => {
191
+ it("rejects WebSocket connections without token", async () => {
192
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
193
+ await server.start();
194
+
195
+ const ws = new WebSocket(`ws://localhost:${port}/map`);
196
+
197
+ await new Promise<void>((resolve) => {
198
+ ws.on("error", () => resolve());
199
+ ws.on("close", () => resolve());
200
+ });
201
+
202
+ expect(server.getMAPConnectionCount()).toBe(0);
203
+ }, 5000);
204
+
205
+ it("rejects WebSocket connections with wrong token", async () => {
206
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
207
+ await server.start();
208
+
209
+ const ws = new WebSocket(`ws://localhost:${port}/map?token=wrong-token`);
210
+
211
+ await new Promise<void>((resolve) => {
212
+ ws.on("error", () => resolve());
213
+ ws.on("close", () => resolve());
214
+ });
215
+
216
+ expect(server.getMAPConnectionCount()).toBe(0);
217
+ }, 5000);
218
+
219
+ it("exposes serverToken on the server object", () => {
220
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
221
+ expect(server.serverToken).toBe(TEST_TOKEN);
222
+ });
223
+
224
+ it("has no serverToken when not provided (auth disabled by default)", () => {
225
+ server = createCombinedServer(services, { port });
226
+ expect(server.serverToken).toBeUndefined();
227
+ });
228
+
229
+ it("allows connections without token when noAuth is true", async () => {
230
+ server = createCombinedServer(services, { port, noAuth: true });
231
+ await server.start();
232
+
233
+ expect(server.serverToken).toBeUndefined();
234
+
235
+ // Should connect without any token
236
+ const ws = new WebSocket(`ws://localhost:${port}/map`);
237
+
238
+ await new Promise<void>((resolve, reject) => {
239
+ const timeout = setTimeout(() => reject(new Error("Connection timeout")), 2000);
240
+ ws.on("open", () => {
241
+ clearTimeout(timeout);
242
+ resolve();
243
+ });
244
+ ws.on("error", (err) => {
245
+ clearTimeout(timeout);
246
+ reject(err);
247
+ });
248
+ });
249
+
250
+ expect(server.getMAPConnectionCount()).toBe(1);
251
+ ws.close();
252
+ }, 5000);
253
+ });
254
+
182
255
  describe("connection counts", () => {
183
256
  it("tracks MAP connections separately", async () => {
184
- server = createCombinedServer(services, { port });
257
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
185
258
  await server.start();
186
259
 
187
260
  expect(server.getACPConnectionCount()).toBe(0);
188
261
  expect(server.getMAPConnectionCount()).toBe(0);
189
262
 
190
263
  // Open MAP connection
191
- const mapWs = new WebSocket(`ws://localhost:${port}/map`);
264
+ const mapWs = new WebSocket(wsUrl(port, "/map"));
192
265
  await new Promise<void>((resolve, reject) => {
193
266
  const timeout = setTimeout(() => reject(new Error("Timeout")), 2000);
194
267
  mapWs.on("open", () => {
@@ -212,10 +285,10 @@ describe("createCombinedServer with MAP", () => {
212
285
 
213
286
  describe("existing functionality preserved", () => {
214
287
  it("accepts ACP connections on /acp", async () => {
215
- server = createCombinedServer(services, { port });
288
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
216
289
  await server.start();
217
290
 
218
- const ws = new WebSocket(`ws://localhost:${port}/acp`);
291
+ const ws = new WebSocket(wsUrl(port, "/acp"));
219
292
 
220
293
  await new Promise<void>((resolve, reject) => {
221
294
  const timeout = setTimeout(() => reject(new Error("Connection timeout")), 2000);
@@ -237,10 +310,10 @@ describe("createCombinedServer with MAP", () => {
237
310
  }, 5000);
238
311
 
239
312
  it("accepts API WebSocket connections on /api/ws", async () => {
240
- server = createCombinedServer(services, { port });
313
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
241
314
  await server.start();
242
315
 
243
- const ws = new WebSocket(`ws://localhost:${port}/api/ws`);
316
+ const ws = new WebSocket(wsUrl(port, "/api/ws"));
244
317
 
245
318
  await new Promise<void>((resolve, reject) => {
246
319
  const timeout = setTimeout(() => reject(new Error("Connection timeout")), 2000);
@@ -258,10 +331,10 @@ describe("createCombinedServer with MAP", () => {
258
331
  }, 5000);
259
332
 
260
333
  it("rejects connections on unknown paths", async () => {
261
- server = createCombinedServer(services, { port });
334
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
262
335
  await server.start();
263
336
 
264
- const ws = new WebSocket(`ws://localhost:${port}/unknown`);
337
+ const ws = new WebSocket(wsUrl(port, "/unknown"));
265
338
 
266
339
  await new Promise<void>((resolve) => {
267
340
  ws.on("error", () => resolve());
@@ -275,12 +348,12 @@ describe("createCombinedServer with MAP", () => {
275
348
 
276
349
  describe("server properties", () => {
277
350
  it("exposes mapAdapter when enabled", () => {
278
- server = createCombinedServer(services, { port });
351
+ server = createCombinedServer(services, { port, serverToken: TEST_TOKEN });
279
352
  expect(server.mapAdapter).toBeDefined();
280
353
  });
281
354
 
282
355
  it("mapAdapter is undefined when disabled", () => {
283
- server = createCombinedServer(services, { port, disableMap: true });
356
+ server = createCombinedServer(services, { port, disableMap: true, serverToken: TEST_TOKEN });
284
357
  expect(server.mapAdapter).toBeUndefined();
285
358
  });
286
359
  });