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
@@ -80,6 +80,7 @@ const DEFAULT_ANONYMOUS_CAPABILITIES: ParticipantCapabilities = {
80
80
  canManageScopes: false,
81
81
  canUpdatePermissions: false,
82
82
  canManageTasks: false,
83
+ canManageLifecycle: false,
83
84
  };
84
85
 
85
86
  /**
@@ -95,6 +96,7 @@ const DEFAULT_CLIENT_CAPABILITIES: ParticipantCapabilities = {
95
96
  canUpdatePermissions: false,
96
97
  canManageTasks: false,
97
98
  canManageFederation: false,
99
+ canManageLifecycle: false,
98
100
  };
99
101
 
100
102
  /**
@@ -110,6 +112,7 @@ const DEFAULT_AGENT_CAPABILITIES: ParticipantCapabilities = {
110
112
  canUpdatePermissions: false,
111
113
  canManageTasks: true,
112
114
  canManageFederation: true,
115
+ canManageLifecycle: true,
113
116
  };
114
117
 
115
118
  // =============================================================================
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Event Log - In-memory ring buffer for MAP event replay
3
+ *
4
+ * Stores emitted MAP events for replay by newly connected clients.
5
+ * Events are stored in chronological order with ULID-based event IDs
6
+ * for keyset pagination.
7
+ *
8
+ * Event type normalization:
9
+ * - Server emits dot format: "agent.registered", "message.sent"
10
+ * - SDK sends underscore format: "agent_registered", "message_sent"
11
+ * - ACP-over-MAP emits underscore format: "message_delivered"
12
+ * - Both formats are normalized to dot format for filter comparison
13
+ * - Response events are converted to underscore format for the SDK
14
+ */
15
+
16
+ // =============================================================================
17
+ // Types
18
+ // =============================================================================
19
+
20
+ /** Configuration for the event log */
21
+ export interface EventLogConfig {
22
+ /** Maximum number of events to retain. Default: 10000 */
23
+ maxSize?: number;
24
+ }
25
+
26
+ /** A logged event entry */
27
+ export interface LoggedEvent {
28
+ /** ULID event ID — stable, lexicographically sortable */
29
+ eventId: string;
30
+ /** Event timestamp (ms since epoch) */
31
+ timestamp: number;
32
+ /** Event type (dot or underscore format, as emitted) */
33
+ type: string;
34
+ /** Event-specific data payload */
35
+ data: unknown;
36
+ /** Parent event IDs for causal ordering */
37
+ causedBy?: string[];
38
+ /** Related agent ID (for filter matching) */
39
+ agentId?: string;
40
+ /** Related scope ID (for filter matching) */
41
+ scopeId?: string;
42
+ }
43
+
44
+ /** Filter for event log queries */
45
+ export interface EventLogFilter {
46
+ /** Event types (can be underscore or dot format — normalized during comparison) */
47
+ eventTypes?: string[];
48
+ /** Agent IDs (OR within array) */
49
+ agents?: string[];
50
+ /** Scope IDs (OR within array) */
51
+ scopes?: string[];
52
+ }
53
+
54
+ /** Query parameters for replay */
55
+ export interface EventLogQueryParams {
56
+ /** Keyset pagination cursor — start after this event ID */
57
+ afterEventId?: string;
58
+ /** Include events from this timestamp (inclusive) */
59
+ fromTimestamp?: number;
60
+ /** Include events up to this timestamp (inclusive) */
61
+ toTimestamp?: number;
62
+ /** Event filter */
63
+ filter?: EventLogFilter;
64
+ /** Maximum events to return (capped at 1000) */
65
+ limit?: number;
66
+ }
67
+
68
+ /** Result of an event log query */
69
+ export interface EventLogQueryResult {
70
+ /** Matching events in chronological order */
71
+ events: LoggedEvent[];
72
+ /** Whether more events exist beyond this page */
73
+ hasMore: boolean;
74
+ }
75
+
76
+ // =============================================================================
77
+ // Format Normalization
78
+ // =============================================================================
79
+
80
+ /** Convert underscore format to dot format: "agent_registered" → "agent.registered" */
81
+ export function underscoreToDot(type: string): string {
82
+ return type.replace(/_/g, ".");
83
+ }
84
+
85
+ /** Convert dot format to underscore format: "agent.registered" → "agent_registered" */
86
+ export function dotToUnderscore(type: string): string {
87
+ return type.replace(/\./g, "_");
88
+ }
89
+
90
+ // =============================================================================
91
+ // EventLog
92
+ // =============================================================================
93
+
94
+ const DEFAULT_MAX_SIZE = 10_000;
95
+ const MAX_QUERY_LIMIT = 1000;
96
+ const DEFAULT_QUERY_LIMIT = 100;
97
+
98
+ /**
99
+ * In-memory ring buffer for MAP event replay.
100
+ *
101
+ * Events are appended in emission order and oldest are evicted
102
+ * when the buffer exceeds maxSize.
103
+ */
104
+ export class EventLog {
105
+ private readonly buffer: LoggedEvent[] = [];
106
+ private readonly maxSize: number;
107
+
108
+ constructor(config: EventLogConfig = {}) {
109
+ this.maxSize = config.maxSize ?? DEFAULT_MAX_SIZE;
110
+ }
111
+
112
+ /** Append an event to the log. O(1) amortized. */
113
+ append(event: LoggedEvent): void {
114
+ this.buffer.push(event);
115
+
116
+ // Evict oldest events if over capacity
117
+ if (this.buffer.length > this.maxSize) {
118
+ const overflow = this.buffer.length - this.maxSize;
119
+ this.buffer.splice(0, overflow);
120
+ }
121
+ }
122
+
123
+ /** Query events with filter and pagination. */
124
+ query(params: EventLogQueryParams = {}): EventLogQueryResult {
125
+ const limit = Math.min(params.limit ?? DEFAULT_QUERY_LIMIT, MAX_QUERY_LIMIT);
126
+
127
+ // Normalize filter event types to dot format for comparison
128
+ const normalizedFilterTypes = params.filter?.eventTypes?.map(underscoreToDot);
129
+
130
+ let startIndex = 0;
131
+
132
+ // Handle afterEventId (keyset pagination)
133
+ if (params.afterEventId) {
134
+ const idx = this.buffer.findIndex(
135
+ (e) => e.eventId === params.afterEventId,
136
+ );
137
+ if (idx >= 0) {
138
+ startIndex = idx + 1;
139
+ }
140
+ // If not found (evicted), start from beginning
141
+ }
142
+
143
+ // Handle fromTimestamp (only if no afterEventId)
144
+ if (params.fromTimestamp != null && !params.afterEventId) {
145
+ const idx = this.buffer.findIndex(
146
+ (e) => e.timestamp >= params.fromTimestamp!,
147
+ );
148
+ if (idx >= 0) {
149
+ startIndex = idx;
150
+ } else {
151
+ // All events are before fromTimestamp
152
+ return { events: [], hasMore: false };
153
+ }
154
+ }
155
+
156
+ const results: LoggedEvent[] = [];
157
+
158
+ for (let i = startIndex; i < this.buffer.length && results.length < limit; i++) {
159
+ const event = this.buffer[i];
160
+
161
+ // Apply toTimestamp filter
162
+ if (params.toTimestamp != null && event.timestamp > params.toTimestamp) {
163
+ break;
164
+ }
165
+
166
+ // Apply event type filter (normalize stored type for comparison)
167
+ if (normalizedFilterTypes && normalizedFilterTypes.length > 0) {
168
+ const normalizedStoredType = underscoreToDot(event.type);
169
+ if (!normalizedFilterTypes.includes(normalizedStoredType)) {
170
+ continue;
171
+ }
172
+ }
173
+
174
+ // Apply agent filter (OR within array)
175
+ if (params.filter?.agents && params.filter.agents.length > 0) {
176
+ if (!event.agentId || !params.filter.agents.includes(event.agentId)) {
177
+ continue;
178
+ }
179
+ }
180
+
181
+ // Apply scope filter (OR within array)
182
+ if (params.filter?.scopes && params.filter.scopes.length > 0) {
183
+ if (!event.scopeId || !params.filter.scopes.includes(event.scopeId)) {
184
+ continue;
185
+ }
186
+ }
187
+
188
+ results.push(event);
189
+ }
190
+
191
+ // Determine hasMore: check if there are more matching events beyond our limit
192
+ let hasMore = false;
193
+ if (results.length === limit) {
194
+ // Check if there's at least one more event in the buffer after our results
195
+ const lastResultIndex = this.buffer.indexOf(results[results.length - 1]);
196
+ if (lastResultIndex >= 0 && lastResultIndex < this.buffer.length - 1) {
197
+ hasMore = true;
198
+ }
199
+ }
200
+
201
+ return { events: results, hasMore };
202
+ }
203
+
204
+ /** Number of events currently in the buffer. */
205
+ get size(): number {
206
+ return this.buffer.length;
207
+ }
208
+ }
@@ -47,7 +47,7 @@ export interface TranslationContext {
47
47
  */
48
48
  const EVENT_TYPE_MAP: Record<EventType, MAPEventType | MAPEventType[] | null> = {
49
49
  spawn: "agent.registered",
50
- terminate: "agent.unregistered",
50
+ stop: "agent.unregistered",
51
51
  status: "agent.state.changed",
52
52
  message: ["message.sent", "message.delivered"], // Two events for message
53
53
  task: null, // Handled specially based on payload
@@ -105,8 +105,8 @@ export function translateEvent(
105
105
  case "spawn":
106
106
  return translateSpawnEvent(event, generateEventId);
107
107
 
108
- case "terminate":
109
- return translateTerminateEvent(event, generateEventId);
108
+ case "stop":
109
+ return translateStopEvent(event, generateEventId);
110
110
 
111
111
  case "status":
112
112
  return translateStatusEvent(event, generateEventId);
@@ -157,15 +157,15 @@ function translateSpawnEvent(
157
157
  }
158
158
 
159
159
  /**
160
- * Translate terminate event to agent.unregistered.
160
+ * Translate stop event to agent.unregistered.
161
161
  */
162
- function translateTerminateEvent(
162
+ function translateStopEvent(
163
163
  event: Event,
164
164
  generateEventId: () => string
165
165
  ): TranslationResult {
166
166
  const agentId = event.source.agent_id;
167
167
  if (!agentId) {
168
- return { translated: false, reason: "Terminate event missing agent_id" };
168
+ return { translated: false, reason: "Stop event missing agent_id" };
169
169
  }
170
170
 
171
171
  const notification: EventNotification = {
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Agent Lifecycle Extension Methods (_macro/spawnAgent, _macro/forkAgent, etc.)
3
+ *
4
+ * Exposes agent lifecycle management to external MAP clients via direct
5
+ * JSON-RPC extension calls, replacing the need for ACP-over-MAP streams.
6
+ *
7
+ * Methods:
8
+ * - _macro/spawnAgent - Spawn a child agent
9
+ * - _macro/forkAgent - Fork an agent's session
10
+ * - _macro/setPermissionMode - Change an agent's permission mode
11
+ * - _macro/respondToPermission - Respond to a pending permission request
12
+ */
13
+
14
+ import type { MAPAdapter, ExtensionHandler, ExtensionContext } from "../interface.js";
15
+ import type { AgentId } from "../../../store/types/index.js";
16
+ import { RPCError } from "../rpc-handler.js";
17
+
18
+ // =============================================================================
19
+ // Extension Services
20
+ // =============================================================================
21
+
22
+ /**
23
+ * Services required for agent lifecycle extensions
24
+ */
25
+ export interface AgentLifecycleExtensionServices {
26
+ /** Get agent by ID */
27
+ getAgent: (id: AgentId) => { id: AgentId; state: string; session_id?: string; cwd?: string | null } | null;
28
+
29
+ /** Spawn a child agent under a parent */
30
+ spawn: (opts: {
31
+ parent: AgentId;
32
+ task: string;
33
+ cwd?: string;
34
+ role?: string;
35
+ topics?: string[];
36
+ config?: Record<string, unknown>;
37
+ }) => Promise<{ id: AgentId; session_id: string }>;
38
+
39
+ /** Fork an agent's session */
40
+ forkAgent: (agentId: AgentId, opts: {
41
+ name?: string;
42
+ prompt?: string;
43
+ cwd?: string;
44
+ }) => Promise<{ id: AgentId; session_id: string; session?: { id: string } }>;
45
+
46
+ /** Send a prompt to an agent (for fire-and-forget initial prompt on fork) */
47
+ prompt: (agentId: AgentId, message: string) => AsyncIterable<unknown>;
48
+
49
+ /** Set the permission mode for an agent's session */
50
+ setPermissionMode: (agentId: AgentId, mode: string) => boolean;
51
+
52
+ /** Get the current permission mode for an agent */
53
+ getPermissionMode: (agentId: AgentId) => string | null;
54
+
55
+ /** Respond to a pending permission request */
56
+ respondToPermission: (agentId: AgentId, requestId: string, optionId: string) => boolean;
57
+
58
+ /** Callback to notify subscribers that a new agent was registered */
59
+ onAgentRegistered?: (agent: { id: string; name?: string; role?: string; parent?: string }) => void;
60
+
61
+ /** List head manager agents (fallback parent for spawn) */
62
+ listHeadManagers: () => Array<{ id: AgentId }>;
63
+
64
+ /** Default working directory */
65
+ defaultCwd?: string;
66
+ }
67
+
68
+ // =============================================================================
69
+ // Handler Implementations
70
+ // =============================================================================
71
+
72
+ function createSpawnHandler(services: AgentLifecycleExtensionServices): ExtensionHandler {
73
+ return async (_context: ExtensionContext, params: unknown) => {
74
+ const { task, cwd, topics, config, parentId } = (params ?? {}) as {
75
+ task: string;
76
+ cwd?: string;
77
+ topics?: string[];
78
+ config?: Record<string, unknown>;
79
+ parentId?: string;
80
+ };
81
+
82
+ if (!task) {
83
+ throw RPCError.invalidParams("task is required");
84
+ }
85
+
86
+ // Determine parent: explicit parentId, or fall back to head manager
87
+ let parent: AgentId | undefined;
88
+ if (parentId) {
89
+ parent = parentId as AgentId;
90
+ } else {
91
+ const headManagers = services.listHeadManagers();
92
+ if (headManagers.length > 0) {
93
+ parent = headManagers[0].id;
94
+ }
95
+ }
96
+
97
+ if (!parent) {
98
+ throw RPCError.invalidParams("No parent agent available for spawning");
99
+ }
100
+
101
+ const spawned = await services.spawn({
102
+ parent,
103
+ task,
104
+ cwd: cwd ?? services.defaultCwd,
105
+ role: "worker",
106
+ topics,
107
+ config,
108
+ });
109
+
110
+ // Notify subscribers that a new agent was registered
111
+ if (services.onAgentRegistered) {
112
+ const agent = services.getAgent(spawned.id);
113
+ services.onAgentRegistered({
114
+ id: spawned.id as string,
115
+ name: agent?.id as string,
116
+ role: "worker",
117
+ parent: parent as string,
118
+ });
119
+ }
120
+
121
+ return {
122
+ agentId: spawned.id,
123
+ sessionId: spawned.session_id,
124
+ };
125
+ };
126
+ }
127
+
128
+ function createForkHandler(services: AgentLifecycleExtensionServices): ExtensionHandler {
129
+ return async (_context: ExtensionContext, params: unknown) => {
130
+ const { agentId, name, prompt, cwd } = (params ?? {}) as {
131
+ agentId: string;
132
+ name?: string;
133
+ prompt?: string;
134
+ cwd?: string;
135
+ };
136
+
137
+ if (!agentId) {
138
+ throw RPCError.invalidParams("agentId is required");
139
+ }
140
+
141
+ const sourceAgent = services.getAgent(agentId as AgentId);
142
+ if (!sourceAgent) {
143
+ throw RPCError.notFound("agent", agentId);
144
+ }
145
+
146
+ const forked = await services.forkAgent(agentId as AgentId, {
147
+ name,
148
+ prompt,
149
+ cwd: cwd ?? sourceAgent.cwd ?? services.defaultCwd,
150
+ });
151
+
152
+ // Notify subscribers
153
+ if (services.onAgentRegistered) {
154
+ services.onAgentRegistered({
155
+ id: forked.id as string,
156
+ name,
157
+ parent: sourceAgent.id as string,
158
+ });
159
+ }
160
+
161
+ // Fire-and-forget initial prompt if provided
162
+ if (prompt && forked.id) {
163
+ (async () => {
164
+ try {
165
+ for await (const _chunk of services.prompt(forked.id, prompt)) {
166
+ // drain iterator
167
+ }
168
+ } catch {
169
+ // best-effort
170
+ }
171
+ })();
172
+ }
173
+
174
+ return {
175
+ newAgentId: forked.id,
176
+ newSessionId: forked.session_id,
177
+ originalAgentId: agentId,
178
+ providerSessionId: forked.session?.id,
179
+ };
180
+ };
181
+ }
182
+
183
+ function createSetPermissionModeHandler(services: AgentLifecycleExtensionServices): ExtensionHandler {
184
+ return async (_context: ExtensionContext, params: unknown) => {
185
+ const { agentId, permissionMode } = (params ?? {}) as {
186
+ agentId: string;
187
+ permissionMode: string;
188
+ };
189
+
190
+ if (!agentId || !permissionMode) {
191
+ throw RPCError.invalidParams("agentId and permissionMode are required");
192
+ }
193
+
194
+ const previousMode = services.getPermissionMode(agentId as AgentId);
195
+ const success = services.setPermissionMode(agentId as AgentId, permissionMode);
196
+
197
+ if (!success) {
198
+ return {
199
+ success: false,
200
+ error: `No active session found for agent ${agentId}`,
201
+ };
202
+ }
203
+
204
+ return {
205
+ success: true,
206
+ agentId,
207
+ previousMode,
208
+ newMode: permissionMode,
209
+ };
210
+ };
211
+ }
212
+
213
+ function createRespondToPermissionHandler(services: AgentLifecycleExtensionServices): ExtensionHandler {
214
+ return async (_context: ExtensionContext, params: unknown) => {
215
+ const { agentId, requestId, optionId } = (params ?? {}) as {
216
+ agentId: string;
217
+ requestId: string;
218
+ optionId: string;
219
+ };
220
+
221
+ if (!agentId || !requestId || !optionId) {
222
+ throw RPCError.invalidParams("agentId, requestId, and optionId are required");
223
+ }
224
+
225
+ const success = services.respondToPermission(
226
+ agentId as AgentId,
227
+ requestId,
228
+ optionId,
229
+ );
230
+
231
+ return { success };
232
+ };
233
+ }
234
+
235
+ // =============================================================================
236
+ // Registration
237
+ // =============================================================================
238
+
239
+ /** All agent lifecycle extension method names */
240
+ export const AGENT_LIFECYCLE_METHODS = [
241
+ "_macro/spawnAgent",
242
+ "_macro/forkAgent",
243
+ "_macro/setPermissionMode",
244
+ "_macro/respondToPermission",
245
+ ] as const;
246
+
247
+ /**
248
+ * Register agent lifecycle extension methods with the MAPAdapter.
249
+ */
250
+ export function registerAgentLifecycleExtensions(
251
+ adapter: MAPAdapter,
252
+ services: AgentLifecycleExtensionServices,
253
+ ): void {
254
+ adapter.registerExtension("_macro/spawnAgent", createSpawnHandler(services));
255
+ adapter.registerExtension("_macro/forkAgent", createForkHandler(services));
256
+ adapter.registerExtension("_macro/setPermissionMode", createSetPermissionModeHandler(services));
257
+ adapter.registerExtension("_macro/respondToPermission", createRespondToPermissionHandler(services));
258
+ }
259
+
260
+ /**
261
+ * Unregister agent lifecycle extension methods.
262
+ */
263
+ export function unregisterAgentLifecycleExtensions(adapter: MAPAdapter): void {
264
+ for (const method of AGENT_LIFECYCLE_METHODS) {
265
+ adapter.unregisterExtension(method);
266
+ }
267
+ }
@@ -52,6 +52,37 @@ export {
52
52
  type AgentDetectionExtensionServices,
53
53
  } from "./agent-detection.js";
54
54
 
55
+ // Update metadata extension
56
+ export {
57
+ registerUpdateMetadataExtension,
58
+ unregisterUpdateMetadataExtension,
59
+ type UpdateMetadataExtensionServices,
60
+ } from "./update-metadata.js";
61
+
62
+ // MCP bridge extensions
63
+ export {
64
+ registerMCPBridgeExtensions,
65
+ unregisterMCPBridgeExtensions,
66
+ MCP_BRIDGE_METHODS,
67
+ type MCPBridgeServices,
68
+ } from "./mcp-bridge.js";
69
+
70
+ // Agent lifecycle extensions
71
+ export {
72
+ registerAgentLifecycleExtensions,
73
+ unregisterAgentLifecycleExtensions,
74
+ AGENT_LIFECYCLE_METHODS,
75
+ type AgentLifecycleExtensionServices,
76
+ } from "./agent-lifecycle.js";
77
+
78
+ // Stream/checkpoint/diffStack/mergeQueue extensions
79
+ export {
80
+ registerStreamExtensions,
81
+ unregisterStreamExtensions,
82
+ STREAM_EXTENSION_METHODS,
83
+ type StreamExtensionServices,
84
+ } from "./streams.js";
85
+
55
86
  import type { MAPAdapter } from "../interface.js";
56
87
  import type { TaskExtensionServices } from "./task.js";
57
88
  import type { WakeExtensionServices } from "./wake.js";
@@ -59,12 +90,20 @@ import type { WorkspaceExtensionServices } from "./workspace.js";
59
90
  import type { WorkspaceFileServices } from "./workspace-files.js";
60
91
  import type { ResumeExtensionServices } from "./resume.js";
61
92
  import type { AgentDetectionExtensionServices } from "./agent-detection.js";
93
+ import type { UpdateMetadataExtensionServices } from "./update-metadata.js";
94
+ import type { MCPBridgeServices } from "./mcp-bridge.js";
95
+ import type { AgentLifecycleExtensionServices } from "./agent-lifecycle.js";
96
+ import type { StreamExtensionServices } from "./streams.js";
62
97
  import { registerTaskExtensions } from "./task.js";
63
98
  import { registerWakeExtension } from "./wake.js";
64
99
  import { registerWorkspaceExtension } from "./workspace.js";
65
100
  import { registerWorkspaceFileExtensions } from "./workspace-files.js";
66
101
  import { registerResumeExtension } from "./resume.js";
67
102
  import { registerAgentDetectionExtensions } from "./agent-detection.js";
103
+ import { registerUpdateMetadataExtension } from "./update-metadata.js";
104
+ import { registerMCPBridgeExtensions, unregisterMCPBridgeExtensions, MCP_BRIDGE_METHODS } from "./mcp-bridge.js";
105
+ import { registerAgentLifecycleExtensions, unregisterAgentLifecycleExtensions, AGENT_LIFECYCLE_METHODS } from "./agent-lifecycle.js";
106
+ import { registerStreamExtensions, unregisterStreamExtensions, STREAM_EXTENSION_METHODS } from "./streams.js";
68
107
 
69
108
  // =============================================================================
70
109
  // Combined Registration
@@ -80,6 +119,10 @@ export interface MacroExtensionServices {
80
119
  workspaceFiles?: WorkspaceFileServices;
81
120
  resume?: ResumeExtensionServices;
82
121
  agentDetection?: AgentDetectionExtensionServices;
122
+ updateMetadata?: UpdateMetadataExtensionServices;
123
+ mcpBridge?: MCPBridgeServices;
124
+ agentLifecycle?: AgentLifecycleExtensionServices;
125
+ streams?: StreamExtensionServices;
83
126
  }
84
127
 
85
128
  /**
@@ -140,6 +183,22 @@ export function registerMacroExtensions(
140
183
  if (services.agentDetection) {
141
184
  registerAgentDetectionExtensions(adapter, services.agentDetection);
142
185
  }
186
+
187
+ if (services.updateMetadata) {
188
+ registerUpdateMetadataExtension(adapter, services.updateMetadata);
189
+ }
190
+
191
+ if (services.mcpBridge) {
192
+ registerMCPBridgeExtensions(adapter, services.mcpBridge);
193
+ }
194
+
195
+ if (services.agentLifecycle) {
196
+ registerAgentLifecycleExtensions(adapter, services.agentLifecycle);
197
+ }
198
+
199
+ if (services.streams) {
200
+ registerStreamExtensions(adapter, services.streams);
201
+ }
143
202
  }
144
203
 
145
204
  /**
@@ -164,9 +223,16 @@ export function unregisterMacroExtensions(adapter: MAPAdapter): void {
164
223
  adapter.unregisterExtension("_macro/resume");
165
224
  adapter.unregisterExtension("_macro/agents/available");
166
225
  adapter.unregisterExtension("_macro/agents/refresh");
226
+ adapter.unregisterExtension("_macro/agents/update");
167
227
  } catch {
168
228
  // Ignore errors from unregistering non-existent extensions
169
229
  }
230
+ // Also unregister MCP bridge extensions
231
+ unregisterMCPBridgeExtensions(adapter);
232
+ // Also unregister agent lifecycle extensions
233
+ unregisterAgentLifecycleExtensions(adapter);
234
+ // Also unregister stream/checkpoint/diffStack/mergeQueue extensions
235
+ unregisterStreamExtensions(adapter);
170
236
  }
171
237
 
172
238
  // =============================================================================
@@ -197,6 +263,14 @@ export const MACRO_EXTENSION_METHODS = [
197
263
  // Agent detection extensions
198
264
  "_macro/agents/available",
199
265
  "_macro/agents/refresh",
266
+ // Update metadata extension
267
+ "_macro/agents/update",
268
+ // MCP bridge extensions
269
+ ...MCP_BRIDGE_METHODS,
270
+ // Agent lifecycle extensions
271
+ ...AGENT_LIFECYCLE_METHODS,
272
+ // Stream/checkpoint/diffStack/mergeQueue extensions
273
+ ...STREAM_EXTENSION_METHODS,
200
274
  ] as const;
201
275
 
202
276
  /**
@@ -217,4 +291,26 @@ export const EXTENSION_CAPABILITIES: Record<string, string> = {
217
291
  "_macro/resume": "canManageLifecycle",
218
292
  "_macro/agents/available": "canQuery",
219
293
  "_macro/agents/refresh": "canQuery",
294
+ "_macro/agents/update": "canQuery",
295
+ "_macro/spawnAgent": "canManageLifecycle",
296
+ "_macro/forkAgent": "canManageLifecycle",
297
+ "_macro/setPermissionMode": "canManageLifecycle",
298
+ "_macro/respondToPermission": "canManageLifecycle",
299
+ // Stream extensions
300
+ "_macro/streams/list": "canQuery",
301
+ "_macro/streams/get": "canQuery",
302
+ "_macro/streams/hierarchy": "canQuery",
303
+ "_macro/streams/createPR": "canManageTasks",
304
+ // Checkpoint extensions
305
+ "_macro/checkpoints/list": "canQuery",
306
+ "_macro/checkpoints/get": "canQuery",
307
+ "_macro/checkpoints/select": "canManageTasks",
308
+ // DiffStack extensions
309
+ "_macro/diffStacks/list": "canQuery",
310
+ "_macro/diffStacks/get": "canQuery",
311
+ "_macro/diffStacks/create": "canManageTasks",
312
+ "_macro/diffStacks/createPR": "canManageTasks",
313
+ // MergeQueue extensions
314
+ "_macro/mergeQueue/status": "canQuery",
315
+ "_macro/mergeQueue/get": "canQuery",
220
316
  };