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
@@ -93,6 +93,7 @@ import type {
93
93
  } from "../federation/types.js";
94
94
  import { ACPOverMAPHandler, type ACPEnvelope } from "./acp-over-map.js";
95
95
  import { createMailHandlers } from "./mail-handler-adapter.js";
96
+ import { EventLog, dotToUnderscore } from "./event-log.js";
96
97
 
97
98
  // =============================================================================
98
99
  // Connection Session
@@ -228,7 +229,8 @@ export class MAPAdapterImpl implements MAPAdapter {
228
229
  /** Sequence numbers per subscription for proper event ordering */
229
230
  private readonly subscriptionSequences: Map<SubscriptionId, number> =
230
231
  new Map();
231
-
232
+ /** In-memory event log for map/replay support */
233
+ private readonly eventLog: EventLog;
232
234
  private running = false;
233
235
 
234
236
  constructor(
@@ -249,10 +251,95 @@ export class MAPAdapterImpl implements MAPAdapter {
249
251
  eventStore: services.eventStore,
250
252
  taskManager: services.taskManager,
251
253
  defaultCwd: services.defaultCwd,
254
+ // Note: agent_registered events are now emitted by the lifecycle
255
+ // listener below, which covers ALL spawn paths (ACP, MCP, etc.)
252
256
  });
253
257
  console.error("[MAPAdapter] ACP-over-MAP handler initialized");
254
258
  }
255
259
 
260
+ // Listen for agent lifecycle events so spawns/stops happening in THIS
261
+ // process (main server) emit MAP events to subscribers immediately.
262
+ if (services.agentManager) {
263
+ services.agentManager.onLifecycleEvent((event) => {
264
+ if (event.type === "spawned" && event.agent) {
265
+ const agentId = event.agent.id as AgentId;
266
+ this.emitEvent({
267
+ eventId: ulid(),
268
+ type: "agent_registered" as MAPEventType,
269
+ timestamp: Date.now(),
270
+ agentId,
271
+ data: {
272
+ agentId: event.agent.id,
273
+ name: event.agent.name ?? "",
274
+ role: event.agent.role ?? "worker",
275
+ state: event.agent.state ?? "spawning",
276
+ parent: event.agent.parent ?? undefined,
277
+ metadata: event.agent.metadata ?? {},
278
+ },
279
+ });
280
+ } else if (event.type === "stopped" && event.agent) {
281
+ const agentId = event.agent.id as AgentId;
282
+ this.emitEvent({
283
+ eventId: ulid(),
284
+ type: "agent_state_changed" as MAPEventType,
285
+ timestamp: Date.now(),
286
+ agentId,
287
+ data: {
288
+ agentId: event.agent.id,
289
+ current: "stopped",
290
+ previous: "running",
291
+ reason: event.reason,
292
+ },
293
+ });
294
+ this.emitEvent({
295
+ eventId: ulid(),
296
+ type: "agent_unregistered" as MAPEventType,
297
+ timestamp: Date.now(),
298
+ agentId,
299
+ data: {
300
+ agentId: event.agent.id,
301
+ reason: event.reason,
302
+ },
303
+ });
304
+ }
305
+ });
306
+ }
307
+
308
+ // Listen for EventStore task changes to emit MAP task events.
309
+ // Task mutations from MCP bridge handlers run in-process, so
310
+ // onTaskChange fires immediately when tasks are created/updated.
311
+ if (services.eventStore) {
312
+ services.eventStore.onTaskChange((taskId, task) => {
313
+ if (!task) return;
314
+ // Map task status to MAP event type
315
+ const eventTypeMap: Record<string, string> = {
316
+ pending: "task_created",
317
+ assigned: "task_assigned",
318
+ in_progress: "task_assigned",
319
+ completed: "task_completed",
320
+ failed: "task_failed",
321
+ // OpenTasks statuses (defensive — normally mapped before reaching here)
322
+ closed: "task_completed",
323
+ open: "task_created",
324
+ };
325
+ const mapEventType = eventTypeMap[task.status];
326
+ if (mapEventType) {
327
+ this.emitEvent({
328
+ eventId: ulid(),
329
+ type: mapEventType as MAPEventType,
330
+ timestamp: Date.now(),
331
+ agentId: (task.assigned_agent ?? undefined) as AgentId | undefined,
332
+ data: {
333
+ taskId,
334
+ description: task.description,
335
+ status: task.status,
336
+ assignee: task.assigned_agent,
337
+ },
338
+ });
339
+ }
340
+ });
341
+ }
342
+
256
343
  // Initialize connection manager
257
344
  this.connections = createConnectionManager({
258
345
  limits: config.limits,
@@ -268,6 +355,11 @@ export class MAPAdapterImpl implements MAPAdapter {
268
355
  getDescendants: services.getDescendants,
269
356
  });
270
357
 
358
+ // Initialize event log for replay support
359
+ this.eventLog = new EventLog({
360
+ maxSize: config.limits?.maxReplayBufferSize ?? 10_000,
361
+ });
362
+
271
363
  // Forward connection events
272
364
  this.connections.onEvent((event) => {
273
365
  if (event.type === "participant.connected") {
@@ -542,6 +634,17 @@ export class MAPAdapterImpl implements MAPAdapter {
542
634
  // ===========================================================================
543
635
 
544
636
  emitEvent(event: EventNotification): void {
637
+ // Log event for replay support
638
+ this.eventLog.append({
639
+ eventId: event.eventId,
640
+ timestamp: event.timestamp,
641
+ type: event.type,
642
+ data: event.data,
643
+ causedBy: event.causedBy,
644
+ agentId: event.agentId,
645
+ scopeId: event.scopeId,
646
+ });
647
+
545
648
  // Match event against subscriptions
546
649
  const { subscriptions: matchingSubs } = this.subscriptions.match(event);
547
650
 
@@ -703,6 +806,9 @@ export class MAPAdapterImpl implements MAPAdapter {
703
806
  "map/unsubscribe": async (params) =>
704
807
  this.handleUnsubscribe(participantId, params),
705
808
 
809
+ // Replay
810
+ "map/replay": async (params) => this.handleReplay(participantId, params),
811
+
706
812
  // Messaging
707
813
  "map/send": async (params, ctx) =>
708
814
  this.handleSend(participantId, params, ctx),
@@ -766,6 +872,7 @@ export class MAPAdapterImpl implements MAPAdapter {
766
872
  keyof ConnectedParticipant["capabilities"]
767
873
  > = {
768
874
  "map/subscribe": "canSubscribe",
875
+ "map/replay": "canSubscribe",
769
876
  "map/send": "canMessage",
770
877
  "map/agents/list": "canQuery",
771
878
  "map/agents/get": "canQuery",
@@ -888,12 +995,20 @@ export class MAPAdapterImpl implements MAPAdapter {
888
995
  const connectParams = params as
889
996
  | {
890
997
  type?: ParticipantType;
998
+ participantType?: ParticipantType;
891
999
  name?: string;
892
1000
  credentials?: AuthCredentials;
1001
+ capabilities?: {
1002
+ observation?: { canObserve?: boolean; canQuery?: boolean };
1003
+ messaging?: { canSend?: boolean; canReceive?: boolean; canBroadcast?: boolean };
1004
+ lifecycle?: { canSpawn?: boolean; canRegister?: boolean; canUnregister?: boolean; canSteer?: boolean; canStop?: boolean };
1005
+ scopes?: { canCreateScopes?: boolean; canManageScopes?: boolean };
1006
+ management?: { canManageTasks?: boolean; canManageLifecycle?: boolean };
1007
+ };
893
1008
  }
894
1009
  | undefined;
895
1010
 
896
- const requestedType = connectParams?.type ?? participant.type;
1011
+ const requestedType = connectParams?.type ?? connectParams?.participantType ?? participant.type;
897
1012
  const credentials = connectParams?.credentials;
898
1013
 
899
1014
  // Handle authentication if handler is configured and credentials provided
@@ -922,15 +1037,41 @@ export class MAPAdapterImpl implements MAPAdapter {
922
1037
  };
923
1038
  }
924
1039
 
925
- // No auth handler or no credentials - use default capabilities for the type
1040
+ // Start with default capabilities for the requested type
1041
+ const baseCapabilities = this.getDefaultCapabilities(requestedType);
1042
+
1043
+ // Merge client-requested capabilities (SDK nested format → flat format).
1044
+ // Clients can request additional capabilities; the server grants them
1045
+ // by merging with the type defaults.
1046
+ if (connectParams?.capabilities) {
1047
+ const req = connectParams.capabilities;
1048
+ const requested: Partial<ParticipantCapabilities> = {};
1049
+ if (req.observation?.canQuery !== undefined) requested.canQuery = req.observation.canQuery;
1050
+ if (req.observation?.canObserve !== undefined) requested.canSubscribe = req.observation.canObserve;
1051
+ if (req.messaging?.canSend !== undefined) requested.canMessage = req.messaging.canSend;
1052
+ if (req.lifecycle?.canSpawn !== undefined) requested.canSpawn = req.lifecycle.canSpawn;
1053
+ if (req.lifecycle?.canStop !== undefined) requested.canStop = req.lifecycle.canStop;
1054
+ if (req.scopes?.canManageScopes !== undefined) requested.canManageScopes = req.scopes.canManageScopes;
1055
+ if (req.management?.canManageTasks !== undefined) requested.canManageTasks = req.management.canManageTasks;
1056
+ if (req.management?.canManageLifecycle !== undefined) requested.canManageLifecycle = req.management.canManageLifecycle;
1057
+ const mergedCapabilities = { ...baseCapabilities, ...requested };
1058
+ this.connections.updateCapabilities(participantId, mergedCapabilities);
1059
+
1060
+ const updatedParticipant = this.connections.getParticipant(participantId);
1061
+ return {
1062
+ participantId: participant.id,
1063
+ capabilities: updatedParticipant?.capabilities ?? mergedCapabilities,
1064
+ };
1065
+ }
1066
+
1067
+ // No client-requested capabilities — apply type defaults if type changed
926
1068
  if (requestedType !== participant.type) {
927
- const defaultCapabilities = this.getDefaultCapabilities(requestedType);
928
- this.connections.updateCapabilities(participantId, defaultCapabilities);
1069
+ this.connections.updateCapabilities(participantId, baseCapabilities);
929
1070
 
930
1071
  const updatedParticipant = this.connections.getParticipant(participantId);
931
1072
  return {
932
1073
  participantId: participant.id,
933
- capabilities: updatedParticipant?.capabilities ?? defaultCapabilities,
1074
+ capabilities: updatedParticipant?.capabilities ?? baseCapabilities,
934
1075
  };
935
1076
  }
936
1077
 
@@ -958,6 +1099,7 @@ export class MAPAdapterImpl implements MAPAdapter {
958
1099
  canManageScopes: true,
959
1100
  canManageTasks: true,
960
1101
  canManageFederation: true,
1102
+ canManageLifecycle: true,
961
1103
  }
962
1104
  );
963
1105
  case "gateway":
@@ -970,6 +1112,7 @@ export class MAPAdapterImpl implements MAPAdapter {
970
1112
  canManageScopes: false,
971
1113
  canManageTasks: false,
972
1114
  canManageFederation: true,
1115
+ canManageLifecycle: false,
973
1116
  };
974
1117
  case "client":
975
1118
  default:
@@ -982,6 +1125,7 @@ export class MAPAdapterImpl implements MAPAdapter {
982
1125
  canStop: false,
983
1126
  canManageScopes: false,
984
1127
  canManageTasks: false,
1128
+ canManageLifecycle: false,
985
1129
  }
986
1130
  );
987
1131
  }
@@ -1032,6 +1176,69 @@ export class MAPAdapterImpl implements MAPAdapter {
1032
1176
  return { success: true };
1033
1177
  }
1034
1178
 
1179
+ private async handleReplay(
1180
+ _participantId: ParticipantId,
1181
+ params: unknown,
1182
+ ): Promise<{
1183
+ events: Array<{
1184
+ eventId: string;
1185
+ timestamp: number;
1186
+ causedBy?: string[];
1187
+ event: { id: string; type: string; timestamp: number; data: unknown };
1188
+ }>;
1189
+ hasMore: boolean;
1190
+ }> {
1191
+ const { afterEventId, fromTimestamp, toTimestamp, filter, limit } =
1192
+ (params ?? {}) as {
1193
+ afterEventId?: string;
1194
+ fromTimestamp?: number;
1195
+ toTimestamp?: number;
1196
+ filter?: {
1197
+ eventTypes?: string[];
1198
+ fromAgents?: string[];
1199
+ agents?: string[];
1200
+ scopes?: string[];
1201
+ };
1202
+ limit?: number;
1203
+ };
1204
+
1205
+ // Translate SDK filter field names to internal format
1206
+ // SDK uses 'fromAgents', macro-agent uses 'agents'
1207
+ const internalFilter = filter
1208
+ ? {
1209
+ eventTypes: filter.eventTypes,
1210
+ agents: (filter.fromAgents ?? filter.agents) as string[] | undefined,
1211
+ scopes: filter.scopes,
1212
+ }
1213
+ : undefined;
1214
+
1215
+ const result = this.eventLog.query({
1216
+ afterEventId,
1217
+ fromTimestamp,
1218
+ toTimestamp,
1219
+ filter: internalFilter,
1220
+ limit,
1221
+ });
1222
+
1223
+ // Transform events to SDK response format
1224
+ const events = result.events.map((e) => ({
1225
+ eventId: e.eventId,
1226
+ timestamp: e.timestamp,
1227
+ ...(e.causedBy && { causedBy: e.causedBy }),
1228
+ event: {
1229
+ id: e.eventId,
1230
+ type: dotToUnderscore(e.type),
1231
+ timestamp: e.timestamp,
1232
+ data: e.data,
1233
+ },
1234
+ }));
1235
+
1236
+ return {
1237
+ events,
1238
+ hasMore: result.hasMore,
1239
+ };
1240
+ }
1241
+
1035
1242
  private async handleSend(
1036
1243
  participantId: ParticipantId,
1037
1244
  params: unknown,
@@ -1121,6 +1328,27 @@ export class MAPAdapterImpl implements MAPAdapter {
1121
1328
  );
1122
1329
  }
1123
1330
 
1331
+ // Emit client→agent ACP request as a message_sent event so other
1332
+ // TUI clients can observe user prompts and other ACP operations.
1333
+ // Include from/to at top level of data for extractACPFromMessageEvent()
1334
+ // which reads data.from/data.to for targetAgent resolution.
1335
+ this.emitEvent({
1336
+ eventId: ulid(),
1337
+ type: "message_sent" as MAPEventType,
1338
+ timestamp: Date.now(),
1339
+ agentId: targetAgentId,
1340
+ data: {
1341
+ from: participantId,
1342
+ to: targetAgentId,
1343
+ message: {
1344
+ id: `acp-req-${Date.now()}`,
1345
+ from: participantId,
1346
+ to: targetAgentId,
1347
+ payload: envelope,
1348
+ },
1349
+ },
1350
+ });
1351
+
1124
1352
  // Create notification emitter to stream session updates
1125
1353
  const emitNotification = (notification: ACPEnvelope) => {
1126
1354
  this.emitEvent({
@@ -1129,6 +1357,8 @@ export class MAPAdapterImpl implements MAPAdapter {
1129
1357
  timestamp: Date.now(),
1130
1358
  agentId: targetAgentId,
1131
1359
  data: {
1360
+ from: targetAgentId,
1361
+ to: participantId,
1132
1362
  message: {
1133
1363
  id: `acp-notif-${Date.now()}`,
1134
1364
  from: targetAgentId,
@@ -1143,32 +1373,77 @@ export class MAPAdapterImpl implements MAPAdapter {
1143
1373
  acp: acp as ACPEnvelope["acp"],
1144
1374
  acpContext: acpContext as ACPEnvelope["acpContext"],
1145
1375
  };
1146
- const responseEnvelope = await this.acpOverMapHandler.processRequest(
1147
- targetAgentId,
1148
- acpEnvelope,
1149
- emitNotification,
1150
- );
1151
-
1152
- console.error(`[ACP-over-MAP] Request processed - method=${acp.method}`);
1153
1376
 
1154
- // Emit response event to the participant's subscriptions
1155
- // SDK's stream.ts checks for "message_delivered" (underscore) not "message.delivered" (dot)
1156
- // Use underscore format for ACP-over-MAP compatibility
1157
- const participant = this.connections.getParticipant(participantId);
1158
- if (participant) {
1159
- this.emitEvent({
1160
- eventId: ulid(),
1161
- type: "message_delivered" as MAPEventType, // Cast needed - SDK expects underscore format
1162
- timestamp: Date.now(),
1163
- agentId: targetAgentId, // Must be at top level for subscription matching
1164
- data: {
1165
- message: {
1166
- id: `acp-resp-${Date.now()}`,
1377
+ // Helper to emit the final ACP response to the participant via subscription
1378
+ const emitResponse = (responseEnvelope: ACPEnvelope) => {
1379
+ const participant = this.connections.getParticipant(participantId);
1380
+ if (participant) {
1381
+ this.emitEvent({
1382
+ eventId: ulid(),
1383
+ type: "message_delivered" as MAPEventType,
1384
+ timestamp: Date.now(),
1385
+ agentId: targetAgentId,
1386
+ data: {
1167
1387
  from: targetAgentId,
1168
- payload: responseEnvelope,
1388
+ to: participantId,
1389
+ message: {
1390
+ id: `acp-resp-${Date.now()}`,
1391
+ from: targetAgentId,
1392
+ payload: responseEnvelope,
1393
+ },
1169
1394
  },
1170
- },
1171
- });
1395
+ });
1396
+ }
1397
+ };
1398
+
1399
+ // session/prompt can run for minutes — process it asynchronously so the
1400
+ // map/send RPC returns immediately. The ACP response will arrive via
1401
+ // subscription (message_delivered event) when the prompt finishes.
1402
+ // Other ACP methods (initialize, session/new, session/load, etc.) are
1403
+ // fast and can be awaited normally.
1404
+ const isLongRunning = acp.method === "session/prompt";
1405
+
1406
+ if (isLongRunning) {
1407
+ this.acpOverMapHandler
1408
+ .processRequest(targetAgentId, acpEnvelope, emitNotification)
1409
+ .then((responseEnvelope) => {
1410
+ console.error(
1411
+ `[ACP-over-MAP] Async prompt completed - method=${acp.method}`,
1412
+ );
1413
+ emitResponse(responseEnvelope);
1414
+ })
1415
+ .catch((error) => {
1416
+ console.error(`[ACP-over-MAP] Async prompt error:`, error);
1417
+ // Emit error response so the client's ACP pending request resolves
1418
+ emitResponse({
1419
+ acp: {
1420
+ jsonrpc: "2.0",
1421
+ id: acp.id,
1422
+ error: {
1423
+ code: -32603,
1424
+ message:
1425
+ error instanceof Error ? error.message : String(error),
1426
+ },
1427
+ },
1428
+ acpContext: {
1429
+ streamId: acpContext.streamId,
1430
+ sessionId: acpContext.sessionId ?? null,
1431
+ direction: "agent-to-client",
1432
+ },
1433
+ } as ACPEnvelope);
1434
+ });
1435
+ } else {
1436
+ const responseEnvelope =
1437
+ await this.acpOverMapHandler.processRequest(
1438
+ targetAgentId,
1439
+ acpEnvelope,
1440
+ emitNotification,
1441
+ );
1442
+
1443
+ console.error(
1444
+ `[ACP-over-MAP] Request processed - method=${acp.method}`,
1445
+ );
1446
+ emitResponse(responseEnvelope);
1172
1447
  }
1173
1448
 
1174
1449
  return {
@@ -1202,11 +1477,12 @@ export class MAPAdapterImpl implements MAPAdapter {
1202
1477
  _participantId: ParticipantId,
1203
1478
  params: unknown,
1204
1479
  ): Promise<{ stopping: boolean; agent?: AgentInfo }> {
1205
- const { agentId, reason, force } = (params as {
1206
- agentId?: AgentId;
1207
- reason?: string;
1208
- force?: boolean;
1209
- }) ?? {};
1480
+ const { agentId, reason, force } =
1481
+ (params as {
1482
+ agentId?: AgentId;
1483
+ reason?: string;
1484
+ force?: boolean;
1485
+ }) ?? {};
1210
1486
 
1211
1487
  if (!agentId) {
1212
1488
  throw RPCError.invalidParams("agentId required");
@@ -1234,19 +1510,8 @@ export class MAPAdapterImpl implements MAPAdapter {
1234
1510
  );
1235
1511
  }
1236
1512
 
1237
- // Emit agent state changed event for subscribers
1238
- this.emitEvent({
1239
- eventId: `stop-${Date.now()}`,
1240
- type: "agent.state.changed" as MAPEventType,
1241
- timestamp: Date.now(),
1242
- agentId,
1243
- data: {
1244
- agentId,
1245
- current: "stopped",
1246
- previous: "running",
1247
- reason: reason ?? "cancelled",
1248
- },
1249
- });
1513
+ // Note: agent_state_changed and agent_unregistered events are now
1514
+ // emitted by the lifecycle listener (covers all stop paths).
1250
1515
 
1251
1516
  return { stopping: true };
1252
1517
  }
@@ -400,8 +400,12 @@ export class SubscriptionManagerImpl implements SubscriptionManager {
400
400
  }
401
401
 
402
402
  // Event type filter (OR within array)
403
+ // Normalize between underscore format (SDK: "agent_registered") and
404
+ // dot format (internal: "agent.registered") so subscriptions match
405
+ // regardless of which convention the client uses.
403
406
  if (filter.eventTypes && filter.eventTypes.length > 0) {
404
- if (!filter.eventTypes.includes(event.type as MAPEventType)) {
407
+ const normalizedEventType = event.type.replace(/\./g, "_");
408
+ if (!filter.eventTypes.some((ft) => ft.replace(/\./g, "_") === normalizedEventType)) {
405
409
  return false;
406
410
  }
407
411
  }
@@ -88,6 +88,8 @@ export interface ParticipantCapabilities {
88
88
  canManageTasks?: boolean;
89
89
  /** Can manage federation connections (connect/disconnect peers) */
90
90
  canManageFederation?: boolean;
91
+ /** Can manage agent lifecycle (resume, spawn, fork, permissions) */
92
+ canManageLifecycle?: boolean;
91
93
  }
92
94
 
93
95
  /**
@@ -166,7 +168,14 @@ export type MAPEventType =
166
168
  | "task.created"
167
169
  | "task.assigned"
168
170
  | "task.completed"
169
- | "task.failed";
171
+ | "task.failed"
172
+ // Stream/checkpoint/merge events (git-cascade)
173
+ | "stream.updated"
174
+ | "checkpoint.created"
175
+ | "diffstack.created"
176
+ | "diffstack.updated"
177
+ | "merge_request.created"
178
+ | "merge_request.updated";
170
179
 
171
180
  /**
172
181
  * Filter for event subscriptions.