macro-agent 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
  2. package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
  3. package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
  4. package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
  5. package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
  6. package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
  7. package/.macro-agent/teams/self-driving/team.yaml +103 -0
  8. package/.macro-agent/teams/structured/prompts/developer.md +26 -0
  9. package/.macro-agent/teams/structured/prompts/lead.md +25 -0
  10. package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
  11. package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
  12. package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
  13. package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
  14. package/.macro-agent/teams/structured/team.yaml +89 -0
  15. package/.sudocode/issues.jsonl +6 -0
  16. package/.sudocode/specs.jsonl +7 -0
  17. package/CLAUDE.md +110 -30
  18. package/README.md +60 -3
  19. package/dist/acp/macro-agent.d.ts +4 -0
  20. package/dist/acp/macro-agent.d.ts.map +1 -1
  21. package/dist/acp/macro-agent.js +50 -4
  22. package/dist/acp/macro-agent.js.map +1 -1
  23. package/dist/acp/session-mapper.d.ts +20 -1
  24. package/dist/acp/session-mapper.d.ts.map +1 -1
  25. package/dist/acp/session-mapper.js +90 -1
  26. package/dist/acp/session-mapper.js.map +1 -1
  27. package/dist/acp/types.d.ts +24 -1
  28. package/dist/acp/types.d.ts.map +1 -1
  29. package/dist/acp/types.js.map +1 -1
  30. package/dist/agent/agent-manager.d.ts +25 -1
  31. package/dist/agent/agent-manager.d.ts.map +1 -1
  32. package/dist/agent/agent-manager.js +93 -7
  33. package/dist/agent/agent-manager.js.map +1 -1
  34. package/dist/agent/types.d.ts +22 -0
  35. package/dist/agent/types.d.ts.map +1 -1
  36. package/dist/agent/types.js.map +1 -1
  37. package/dist/agent-detection/command-builder.d.ts +30 -0
  38. package/dist/agent-detection/command-builder.d.ts.map +1 -0
  39. package/dist/agent-detection/command-builder.js +71 -0
  40. package/dist/agent-detection/command-builder.js.map +1 -0
  41. package/dist/agent-detection/detector.d.ts +84 -0
  42. package/dist/agent-detection/detector.d.ts.map +1 -0
  43. package/dist/agent-detection/detector.js +240 -0
  44. package/dist/agent-detection/detector.js.map +1 -0
  45. package/dist/agent-detection/index.d.ts +12 -0
  46. package/dist/agent-detection/index.d.ts.map +1 -0
  47. package/dist/agent-detection/index.js +14 -0
  48. package/dist/agent-detection/index.js.map +1 -0
  49. package/dist/agent-detection/registry.d.ts +53 -0
  50. package/dist/agent-detection/registry.d.ts.map +1 -0
  51. package/dist/agent-detection/registry.js +177 -0
  52. package/dist/agent-detection/registry.js.map +1 -0
  53. package/dist/agent-detection/types.d.ts +121 -0
  54. package/dist/agent-detection/types.d.ts.map +1 -0
  55. package/dist/agent-detection/types.js +20 -0
  56. package/dist/agent-detection/types.js.map +1 -0
  57. package/dist/api/server.d.ts.map +1 -1
  58. package/dist/api/server.js +95 -0
  59. package/dist/api/server.js.map +1 -1
  60. package/dist/cli/index.js +29 -0
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/mcp.js +38 -0
  63. package/dist/cli/mcp.js.map +1 -1
  64. package/dist/config/index.d.ts +2 -0
  65. package/dist/config/index.d.ts.map +1 -0
  66. package/dist/config/index.js +2 -0
  67. package/dist/config/index.js.map +1 -0
  68. package/dist/config/project-config.d.ts +46 -0
  69. package/dist/config/project-config.d.ts.map +1 -0
  70. package/dist/config/project-config.js +68 -0
  71. package/dist/config/project-config.js.map +1 -0
  72. package/dist/lifecycle/cascade.d.ts +1 -1
  73. package/dist/lifecycle/cascade.d.ts.map +1 -1
  74. package/dist/lifecycle/handlers/index.d.ts +4 -0
  75. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/index.js +2 -0
  77. package/dist/lifecycle/handlers/index.js.map +1 -1
  78. package/dist/lifecycle/handlers/worker.d.ts +4 -0
  79. package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/worker.js +35 -3
  81. package/dist/lifecycle/handlers/worker.js.map +1 -1
  82. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  83. package/dist/map/adapter/acp-over-map.js +32 -2
  84. package/dist/map/adapter/acp-over-map.js.map +1 -1
  85. package/dist/map/adapter/event-translator.d.ts.map +1 -1
  86. package/dist/map/adapter/event-translator.js +1 -0
  87. package/dist/map/adapter/event-translator.js.map +1 -1
  88. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  89. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  90. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  91. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  92. package/dist/map/adapter/extensions/index.d.ts +10 -1
  93. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  94. package/dist/map/adapter/extensions/index.js +39 -0
  95. package/dist/map/adapter/extensions/index.js.map +1 -1
  96. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  97. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  98. package/dist/map/adapter/extensions/resume.js +59 -0
  99. package/dist/map/adapter/extensions/resume.js.map +1 -0
  100. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  101. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  102. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  103. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  104. package/dist/mcp/mcp-server.d.ts +6 -0
  105. package/dist/mcp/mcp-server.d.ts.map +1 -1
  106. package/dist/mcp/mcp-server.js +45 -0
  107. package/dist/mcp/mcp-server.js.map +1 -1
  108. package/dist/mcp/tools/claim_task.d.ts +35 -0
  109. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  110. package/dist/mcp/tools/claim_task.js +58 -0
  111. package/dist/mcp/tools/claim_task.js.map +1 -0
  112. package/dist/mcp/tools/done.d.ts +11 -2
  113. package/dist/mcp/tools/done.d.ts.map +1 -1
  114. package/dist/mcp/tools/done.js +15 -10
  115. package/dist/mcp/tools/done.js.map +1 -1
  116. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  117. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  118. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  119. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  120. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  121. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  122. package/dist/mcp/tools/unclaim_task.js +47 -0
  123. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  124. package/dist/metrics/index.d.ts +2 -0
  125. package/dist/metrics/index.d.ts.map +1 -0
  126. package/dist/metrics/index.js +2 -0
  127. package/dist/metrics/index.js.map +1 -0
  128. package/dist/metrics/metrics.d.ts +79 -0
  129. package/dist/metrics/metrics.d.ts.map +1 -0
  130. package/dist/metrics/metrics.js +166 -0
  131. package/dist/metrics/metrics.js.map +1 -0
  132. package/dist/roles/capabilities.d.ts +1 -0
  133. package/dist/roles/capabilities.d.ts.map +1 -1
  134. package/dist/roles/capabilities.js +3 -0
  135. package/dist/roles/capabilities.js.map +1 -1
  136. package/dist/roles/types.d.ts +1 -1
  137. package/dist/roles/types.d.ts.map +1 -1
  138. package/dist/router/message-router.d.ts +41 -0
  139. package/dist/router/message-router.d.ts.map +1 -1
  140. package/dist/router/message-router.js +136 -5
  141. package/dist/router/message-router.js.map +1 -1
  142. package/dist/store/event-store.d.ts +8 -1
  143. package/dist/store/event-store.d.ts.map +1 -1
  144. package/dist/store/event-store.js +120 -4
  145. package/dist/store/event-store.js.map +1 -1
  146. package/dist/store/types/agents.d.ts +1 -1
  147. package/dist/store/types/agents.d.ts.map +1 -1
  148. package/dist/store/types/events.d.ts +1 -1
  149. package/dist/store/types/events.d.ts.map +1 -1
  150. package/dist/store/types/events.js.map +1 -1
  151. package/dist/store/types/index.d.ts +1 -0
  152. package/dist/store/types/index.d.ts.map +1 -1
  153. package/dist/store/types/index.js +1 -0
  154. package/dist/store/types/index.js.map +1 -1
  155. package/dist/store/types/sessions.d.ts +44 -0
  156. package/dist/store/types/sessions.d.ts.map +1 -0
  157. package/dist/store/types/sessions.js +9 -0
  158. package/dist/store/types/sessions.js.map +1 -0
  159. package/dist/store/types/tasks.d.ts +2 -0
  160. package/dist/store/types/tasks.d.ts.map +1 -1
  161. package/dist/task/backend/memory.d.ts +4 -1
  162. package/dist/task/backend/memory.d.ts.map +1 -1
  163. package/dist/task/backend/memory.js +81 -0
  164. package/dist/task/backend/memory.js.map +1 -1
  165. package/dist/task/backend/types.d.ts +30 -0
  166. package/dist/task/backend/types.d.ts.map +1 -1
  167. package/dist/task/backend/types.js.map +1 -1
  168. package/dist/teams/index.d.ts +4 -0
  169. package/dist/teams/index.d.ts.map +1 -0
  170. package/dist/teams/index.js +4 -0
  171. package/dist/teams/index.js.map +1 -0
  172. package/dist/teams/team-loader.d.ts +20 -0
  173. package/dist/teams/team-loader.d.ts.map +1 -0
  174. package/dist/teams/team-loader.js +293 -0
  175. package/dist/teams/team-loader.js.map +1 -0
  176. package/dist/teams/team-runtime.d.ts +139 -0
  177. package/dist/teams/team-runtime.d.ts.map +1 -0
  178. package/dist/teams/team-runtime.js +613 -0
  179. package/dist/teams/team-runtime.js.map +1 -0
  180. package/dist/teams/types.d.ts +266 -0
  181. package/dist/teams/types.d.ts.map +1 -0
  182. package/dist/teams/types.js +20 -0
  183. package/dist/teams/types.js.map +1 -0
  184. package/dist/workspace/dataplane-adapter.d.ts +1 -1
  185. package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
  186. package/dist/workspace/dataplane-adapter.js +1 -1
  187. package/dist/workspace/dataplane-adapter.js.map +1 -1
  188. package/dist/workspace/index.d.ts +1 -1
  189. package/dist/workspace/index.d.ts.map +1 -1
  190. package/dist/workspace/strategies/index.d.ts +6 -0
  191. package/dist/workspace/strategies/index.d.ts.map +1 -0
  192. package/dist/workspace/strategies/index.js +5 -0
  193. package/dist/workspace/strategies/index.js.map +1 -0
  194. package/dist/workspace/strategies/optimistic.d.ts +26 -0
  195. package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
  196. package/dist/workspace/strategies/optimistic.js +121 -0
  197. package/dist/workspace/strategies/optimistic.js.map +1 -0
  198. package/dist/workspace/strategies/queue.d.ts +26 -0
  199. package/dist/workspace/strategies/queue.d.ts.map +1 -0
  200. package/dist/workspace/strategies/queue.js +67 -0
  201. package/dist/workspace/strategies/queue.js.map +1 -0
  202. package/dist/workspace/strategies/registry.d.ts +37 -0
  203. package/dist/workspace/strategies/registry.d.ts.map +1 -0
  204. package/dist/workspace/strategies/registry.js +63 -0
  205. package/dist/workspace/strategies/registry.js.map +1 -0
  206. package/dist/workspace/strategies/trunk.d.ts +20 -0
  207. package/dist/workspace/strategies/trunk.d.ts.map +1 -0
  208. package/dist/workspace/strategies/trunk.js +108 -0
  209. package/dist/workspace/strategies/trunk.js.map +1 -0
  210. package/dist/workspace/strategies/types.d.ts +104 -0
  211. package/dist/workspace/strategies/types.d.ts.map +1 -0
  212. package/dist/workspace/strategies/types.js +11 -0
  213. package/dist/workspace/strategies/types.js.map +1 -0
  214. package/dist/workspace/types.d.ts +1 -1
  215. package/dist/workspace/types.d.ts.map +1 -1
  216. package/dist/workspace/workspace-manager.d.ts +1 -1
  217. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  218. package/docs/implementation-details.md +1127 -0
  219. package/docs/implementation-summary.md +448 -0
  220. package/docs/plan-self-driving-support.md +433 -0
  221. package/docs/spec-self-driving-support.md +462 -0
  222. package/docs/team-templates.md +860 -0
  223. package/docs/teams.md +233 -0
  224. package/package.json +4 -2
  225. package/src/acp/__tests__/integration.test.ts +161 -1
  226. package/src/acp/__tests__/macro-agent.test.ts +95 -0
  227. package/src/acp/__tests__/session-persistence.test.ts +276 -0
  228. package/src/acp/macro-agent.ts +79 -7
  229. package/src/acp/session-mapper.ts +108 -1
  230. package/src/acp/types.ts +33 -1
  231. package/src/agent/agent-manager.ts +158 -6
  232. package/src/agent/types.ts +27 -0
  233. package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
  234. package/src/agent-detection/__tests__/detector.test.ts +768 -0
  235. package/src/agent-detection/__tests__/registry.test.ts +254 -0
  236. package/src/agent-detection/command-builder.ts +90 -0
  237. package/src/agent-detection/detector.ts +307 -0
  238. package/src/agent-detection/index.ts +36 -0
  239. package/src/agent-detection/registry.ts +200 -0
  240. package/src/agent-detection/types.ts +184 -0
  241. package/src/api/server.ts +110 -0
  242. package/src/cli/index.ts +44 -0
  243. package/src/cli/mcp.ts +47 -0
  244. package/src/config/index.ts +9 -0
  245. package/src/config/project-config.ts +107 -0
  246. package/src/lifecycle/cascade.ts +1 -1
  247. package/src/lifecycle/handlers/index.ts +8 -0
  248. package/src/lifecycle/handlers/worker.ts +48 -3
  249. package/src/map/adapter/__tests__/extensions.test.ts +359 -0
  250. package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
  251. package/src/map/adapter/acp-over-map.ts +45 -2
  252. package/src/map/adapter/event-translator.ts +1 -0
  253. package/src/map/adapter/extensions/agent-detection.ts +201 -0
  254. package/src/map/adapter/extensions/index.ts +63 -0
  255. package/src/map/adapter/extensions/resume.ts +114 -0
  256. package/src/map/adapter/extensions/workspace-files.ts +449 -0
  257. package/src/mcp/mcp-server.ts +67 -0
  258. package/src/mcp/tools/claim_task.ts +86 -0
  259. package/src/mcp/tools/done.ts +24 -10
  260. package/src/mcp/tools/list_claimable_tasks.ts +93 -0
  261. package/src/mcp/tools/unclaim_task.ts +71 -0
  262. package/src/metrics/index.ts +9 -0
  263. package/src/metrics/metrics.ts +280 -0
  264. package/src/roles/capabilities.ts +3 -0
  265. package/src/roles/types.ts +2 -1
  266. package/src/router/__tests__/message-router.test.ts +561 -0
  267. package/src/router/message-router.ts +223 -6
  268. package/src/store/event-store.ts +151 -3
  269. package/src/store/types/agents.ts +1 -1
  270. package/src/store/types/events.ts +2 -1
  271. package/src/store/types/index.ts +1 -0
  272. package/src/store/types/sessions.ts +53 -0
  273. package/src/store/types/tasks.ts +3 -0
  274. package/src/task/backend/memory.ts +116 -0
  275. package/src/task/backend/types.ts +43 -0
  276. package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
  277. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
  278. package/src/teams/__tests__/team-system.test.ts +1280 -0
  279. package/src/teams/index.ts +13 -0
  280. package/src/teams/team-loader.ts +434 -0
  281. package/src/teams/team-runtime.ts +727 -0
  282. package/src/teams/types.ts +377 -0
  283. package/src/workspace/dataplane-adapter.ts +1 -1
  284. package/src/workspace/index.ts +1 -1
  285. package/src/workspace/strategies/index.ts +18 -0
  286. package/src/workspace/strategies/optimistic.ts +136 -0
  287. package/src/workspace/strategies/queue.ts +81 -0
  288. package/src/workspace/strategies/registry.ts +89 -0
  289. package/src/workspace/strategies/trunk.ts +123 -0
  290. package/src/workspace/strategies/types.ts +145 -0
  291. package/src/workspace/types.ts +1 -1
  292. package/src/workspace/workspace-manager.ts +1 -1
  293. package/.claude/settings.local.json +0 -59
  294. package/dist/map/utils/address-translation.d.ts +0 -99
  295. package/dist/map/utils/address-translation.d.ts.map +0 -1
  296. package/dist/map/utils/address-translation.js +0 -285
  297. package/dist/map/utils/address-translation.js.map +0 -1
  298. package/dist/map/utils/index.d.ts +0 -7
  299. package/dist/map/utils/index.d.ts.map +0 -1
  300. package/dist/map/utils/index.js +0 -7
  301. package/dist/map/utils/index.js.map +0 -1
  302. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  303. package/references/acp-factory-ref/LICENSE +0 -21
  304. package/references/acp-factory-ref/README.md +0 -341
  305. package/references/acp-factory-ref/package-lock.json +0 -3102
  306. package/references/acp-factory-ref/package.json +0 -96
  307. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  308. package/references/acp-factory-ref/python/LICENSE +0 -21
  309. package/references/acp-factory-ref/python/Makefile +0 -57
  310. package/references/acp-factory-ref/python/README.md +0 -253
  311. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  312. package/references/acp-factory-ref/python/tests/__init__.py +0 -0
  313. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  314. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  315. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  316. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  317. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  318. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  319. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  320. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  321. package/references/claude-code-acp/.prettierrc.json +0 -4
  322. package/references/claude-code-acp/CHANGELOG.md +0 -249
  323. package/references/claude-code-acp/LICENSE +0 -222
  324. package/references/claude-code-acp/README.md +0 -53
  325. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  326. package/references/claude-code-acp/eslint.config.js +0 -48
  327. package/references/claude-code-acp/package-lock.json +0 -4570
  328. package/references/claude-code-acp/package.json +0 -88
  329. package/references/claude-code-acp/scripts/release.sh +0 -119
  330. package/references/claude-code-acp/src/acp-agent.ts +0 -2065
  331. package/references/claude-code-acp/src/index.ts +0 -26
  332. package/references/claude-code-acp/src/lib.ts +0 -38
  333. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  334. package/references/claude-code-acp/src/settings.ts +0 -522
  335. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  336. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  337. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  338. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  339. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  340. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  341. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  342. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  343. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  344. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  345. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  346. package/references/claude-code-acp/src/tools.ts +0 -819
  347. package/references/claude-code-acp/src/utils.ts +0 -171
  348. package/references/claude-code-acp/tsconfig.json +0 -18
  349. package/references/claude-code-acp/vitest.config.ts +0 -19
  350. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  351. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  352. package/references/multi-agent-protocol/LICENSE +0 -21
  353. package/references/multi-agent-protocol/README.md +0 -113
  354. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  355. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  356. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  357. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  358. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  359. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  360. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  361. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  362. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  363. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  364. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  365. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  366. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  367. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  368. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  369. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  370. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  371. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  372. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  373. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  374. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  375. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  376. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  377. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  378. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  379. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  380. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  381. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  382. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  383. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  384. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  385. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  386. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  387. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  388. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  389. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  390. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  391. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  392. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  393. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  394. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  395. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  396. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  397. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  398. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  399. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  400. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  401. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  402. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  403. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  404. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  405. package/references/multi-agent-protocol/package-lock.json +0 -3886
  406. package/references/multi-agent-protocol/package.json +0 -56
  407. package/references/multi-agent-protocol/schema/meta.json +0 -467
  408. package/references/multi-agent-protocol/schema/schema.json +0 -2558
@@ -452,6 +452,567 @@ describe("MessageRouter", () => {
452
452
  expect(parsed.status_type).toBe("failed");
453
453
  expect(parsed.details.error).toBe("Connection timeout");
454
454
  });
455
+
456
+ it("should route status to topic co-subscribers", () => {
457
+ // Two peer agents (no parent-child relationship) sharing a topic
458
+ createAgent("worker_a");
459
+ createAgent("worker_b");
460
+
461
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
462
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
463
+
464
+ // worker_a emits a status
465
+ router.emitStatus({
466
+ from: { agent_id: "worker_a" },
467
+ status_type: "completed",
468
+ summary: "Task A done",
469
+ });
470
+
471
+ // worker_b should receive the notification via topic routing
472
+ const messages = router.getMessages("worker_b");
473
+ const statusMsg = messages.find((m) =>
474
+ m.content.includes("status_notification")
475
+ );
476
+ expect(statusMsg).toBeDefined();
477
+
478
+ const parsed = JSON.parse(statusMsg!.content);
479
+ expect(parsed.status_type).toBe("completed");
480
+ expect(parsed.summary).toBe("Task A done");
481
+ });
482
+
483
+ it("should not send topic status to self", () => {
484
+ createAgent("worker_a");
485
+
486
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
487
+
488
+ router.emitStatus({
489
+ from: { agent_id: "worker_a" },
490
+ status_type: "checkpoint",
491
+ summary: "Progress",
492
+ });
493
+
494
+ // worker_a should NOT receive a notification about its own status
495
+ const messages = router.getMessages("worker_a");
496
+ const statusMsgs = messages.filter((m) =>
497
+ m.content.includes("status_notification")
498
+ );
499
+ expect(statusMsgs).toHaveLength(0);
500
+ });
501
+
502
+ it("should not duplicate delivery to agents already notified via subtree", () => {
503
+ // manager_1 is parent of worker_1, AND both share a topic
504
+ createAgent("manager_1");
505
+ createAgent("worker_1", "manager_1");
506
+
507
+ // Set up subtree subscription (parent subscribes to child)
508
+ router.setupDefaultSubscriptions({
509
+ agent_id: "worker_1",
510
+ parent_id: "manager_1",
511
+ });
512
+
513
+ // Also subscribe both to a shared topic
514
+ router.subscribe("manager_1", { type: "topic", target: "task_updates" });
515
+ router.subscribe("worker_1", { type: "topic", target: "task_updates" });
516
+
517
+ router.emitStatus({
518
+ from: { agent_id: "worker_1" },
519
+ status_type: "completed",
520
+ summary: "Done",
521
+ });
522
+
523
+ // manager_1 should receive exactly ONE notification (via subtree, not duplicated by topic)
524
+ const messages = router.getMessages("manager_1");
525
+ const statusMsgs = messages.filter((m) =>
526
+ m.content.includes("status_notification")
527
+ );
528
+ expect(statusMsgs).toHaveLength(1);
529
+ });
530
+
531
+ it("should route status to multiple topic co-subscribers", () => {
532
+ createAgent("worker_a");
533
+ createAgent("worker_b");
534
+ createAgent("monitor_1");
535
+
536
+ // All three share the health topic
537
+ router.subscribe("worker_a", { type: "topic", target: "health" });
538
+ router.subscribe("worker_b", { type: "topic", target: "health" });
539
+ router.subscribe("monitor_1", { type: "topic", target: "health" });
540
+
541
+ router.emitStatus({
542
+ from: { agent_id: "worker_a" },
543
+ status_type: "checkpoint",
544
+ summary: "Health OK",
545
+ });
546
+
547
+ // Both worker_b and monitor_1 should receive it
548
+ for (const recipientId of ["worker_b", "monitor_1"]) {
549
+ const messages = router.getMessages(recipientId);
550
+ const statusMsg = messages.find((m) =>
551
+ m.content.includes("status_notification")
552
+ );
553
+ expect(statusMsg).toBeDefined();
554
+ const parsed = JSON.parse(statusMsg!.content);
555
+ expect(parsed.summary).toBe("Health OK");
556
+ }
557
+
558
+ // worker_a should NOT receive it
559
+ const selfMessages = router.getMessages("worker_a");
560
+ expect(
561
+ selfMessages.filter((m) => m.content.includes("status_notification"))
562
+ ).toHaveLength(0);
563
+ });
564
+
565
+ it("should not route to topic subscribers when agent has no topic subscriptions", () => {
566
+ // worker_a has no topic subs, worker_b has a topic sub
567
+ createAgent("worker_a");
568
+ createAgent("worker_b");
569
+
570
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
571
+
572
+ router.emitStatus({
573
+ from: { agent_id: "worker_a" },
574
+ status_type: "completed",
575
+ summary: "Done",
576
+ });
577
+
578
+ // worker_b should NOT receive anything (worker_a isn't on the topic)
579
+ const messages = router.getMessages("worker_b");
580
+ expect(
581
+ messages.filter((m) => m.content.includes("status_notification"))
582
+ ).toHaveLength(0);
583
+ });
584
+
585
+ it("should deduplicate across multiple shared topics", () => {
586
+ // Two agents sharing two different topics
587
+ createAgent("worker_a");
588
+ createAgent("worker_b");
589
+
590
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
591
+ router.subscribe("worker_a", { type: "topic", target: "task_updates" });
592
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
593
+ router.subscribe("worker_b", { type: "topic", target: "task_updates" });
594
+
595
+ router.emitStatus({
596
+ from: { agent_id: "worker_a" },
597
+ status_type: "completed",
598
+ summary: "Done",
599
+ });
600
+
601
+ // worker_b should receive exactly ONE notification, not two
602
+ const messages = router.getMessages("worker_b");
603
+ const statusMsgs = messages.filter((m) =>
604
+ m.content.includes("status_notification")
605
+ );
606
+ expect(statusMsgs).toHaveLength(1);
607
+ });
608
+ });
609
+
610
+ describe("status wake logic", () => {
611
+ it("should wake sleeping agent on subtree status notification", async () => {
612
+ const wakeEvents: { agentId: string; eventId: string }[] = [];
613
+
614
+ const routerWithWake = createMessageRouter(eventStore, {
615
+ sessionChecker: {
616
+ hasActiveSession: () => false,
617
+ getSessionState: () => "idle",
618
+ },
619
+ wakeHandler: (agentId, _decision, eventId) => {
620
+ wakeEvents.push({ agentId, eventId });
621
+ },
622
+ });
623
+
624
+ createAgent("manager_1");
625
+ createAgent("worker_1", "manager_1");
626
+
627
+ routerWithWake.setupDefaultSubscriptions({
628
+ agent_id: "worker_1",
629
+ parent_id: "manager_1",
630
+ });
631
+
632
+ routerWithWake.emitStatus({
633
+ from: { agent_id: "worker_1" },
634
+ status_type: "completed",
635
+ summary: "Task done",
636
+ });
637
+
638
+ expect(wakeEvents).toHaveLength(1);
639
+ expect(wakeEvents[0].agentId).toBe("manager_1");
640
+ expect(wakeEvents[0].eventId).toBeDefined();
641
+ });
642
+
643
+ it("should wake sleeping agent on topic status notification", async () => {
644
+ const wakeEvents: { agentId: string; eventId: string }[] = [];
645
+
646
+ const routerWithWake = createMessageRouter(eventStore, {
647
+ sessionChecker: {
648
+ hasActiveSession: () => false,
649
+ getSessionState: () => "idle",
650
+ },
651
+ wakeHandler: (agentId, _decision, eventId) => {
652
+ wakeEvents.push({ agentId, eventId });
653
+ },
654
+ });
655
+
656
+ createAgent("worker_a");
657
+ createAgent("worker_b");
658
+
659
+ routerWithWake.subscribe("worker_a", { type: "topic", target: "work_coordination" });
660
+ routerWithWake.subscribe("worker_b", { type: "topic", target: "work_coordination" });
661
+
662
+ routerWithWake.emitStatus({
663
+ from: { agent_id: "worker_a" },
664
+ status_type: "completed",
665
+ summary: "Task A done",
666
+ });
667
+
668
+ expect(wakeEvents).toHaveLength(1);
669
+ expect(wakeEvents[0].agentId).toBe("worker_b");
670
+ });
671
+
672
+ it("should not wake busy (prompting) agent on status notification", async () => {
673
+ const wakeEvents: { agentId: string }[] = [];
674
+
675
+ const routerWithWake = createMessageRouter(eventStore, {
676
+ sessionChecker: {
677
+ hasActiveSession: () => true,
678
+ getSessionState: () => "active",
679
+ isPrompting: () => true,
680
+ },
681
+ wakeHandler: (agentId) => {
682
+ wakeEvents.push({ agentId });
683
+ },
684
+ });
685
+
686
+ createAgent("worker_a");
687
+ createAgent("worker_b");
688
+
689
+ routerWithWake.subscribe("worker_a", { type: "topic", target: "work_coordination" });
690
+ routerWithWake.subscribe("worker_b", { type: "topic", target: "work_coordination" });
691
+
692
+ routerWithWake.emitStatus({
693
+ from: { agent_id: "worker_a" },
694
+ status_type: "checkpoint",
695
+ summary: "Progress",
696
+ });
697
+
698
+ // Normal priority + busy (prompting) session = queue, no wake
699
+ expect(wakeEvents).toHaveLength(0);
700
+ });
701
+
702
+ it("should not fail status delivery if wake handler throws", async () => {
703
+ const routerWithWake = createMessageRouter(eventStore, {
704
+ sessionChecker: {
705
+ hasActiveSession: () => false,
706
+ getSessionState: () => "idle",
707
+ },
708
+ wakeHandler: () => {
709
+ throw new Error("Wake handler crashed");
710
+ },
711
+ });
712
+
713
+ createAgent("manager_1");
714
+ createAgent("worker_1", "manager_1");
715
+
716
+ routerWithWake.setupDefaultSubscriptions({
717
+ agent_id: "worker_1",
718
+ parent_id: "manager_1",
719
+ });
720
+
721
+ // Should not throw despite wake handler error
722
+ expect(() => {
723
+ routerWithWake.emitStatus({
724
+ from: { agent_id: "worker_1" },
725
+ status_type: "completed",
726
+ summary: "Task done",
727
+ });
728
+ }).not.toThrow();
729
+
730
+ // Message should still be delivered
731
+ const messages = routerWithWake.getMessages("manager_1");
732
+ const statusMsg = messages.find((m) =>
733
+ m.content.includes("status_notification")
734
+ );
735
+ expect(statusMsg).toBeDefined();
736
+ });
737
+ });
738
+
739
+ describe("signal filtering", () => {
740
+ it("should suppress delivery when signal filter rejects", () => {
741
+ createAgent("worker_a");
742
+ createAgent("worker_b");
743
+
744
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
745
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
746
+
747
+ // Install filter that blocks WORKER_DONE signal
748
+ router.setSignalFilter((_from, _to, signal) => {
749
+ return signal !== "WORKER_DONE";
750
+ });
751
+
752
+ router.emitStatus({
753
+ from: { agent_id: "worker_a" },
754
+ status_type: "completed",
755
+ summary: "Task done",
756
+ details: { signal: "WORKER_DONE" },
757
+ });
758
+
759
+ const messages = router.getMessages("worker_b");
760
+ expect(
761
+ messages.filter((m) => m.content.includes("status_notification"))
762
+ ).toHaveLength(0);
763
+ });
764
+
765
+ it("should allow delivery when signal filter accepts", () => {
766
+ createAgent("worker_a");
767
+ createAgent("worker_b");
768
+
769
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
770
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
771
+
772
+ // Install filter that allows CONVERGENCE_CHECK
773
+ router.setSignalFilter((_from, _to, signal) => {
774
+ return signal === "CONVERGENCE_CHECK";
775
+ });
776
+
777
+ router.emitStatus({
778
+ from: { agent_id: "worker_a" },
779
+ status_type: "checkpoint",
780
+ summary: "Check",
781
+ details: { signal: "CONVERGENCE_CHECK" },
782
+ });
783
+
784
+ const messages = router.getMessages("worker_b");
785
+ expect(
786
+ messages.filter((m) => m.content.includes("status_notification"))
787
+ ).toHaveLength(1);
788
+ });
789
+
790
+ it("should pass through untagged status events (no details.signal)", () => {
791
+ createAgent("worker_a");
792
+ createAgent("worker_b");
793
+
794
+ router.subscribe("worker_a", { type: "topic", target: "work_coordination" });
795
+ router.subscribe("worker_b", { type: "topic", target: "work_coordination" });
796
+
797
+ // Install strict filter that blocks everything
798
+ router.setSignalFilter((_from, _to, signal) => {
799
+ if (!signal) return true; // untagged passes through
800
+ return false;
801
+ });
802
+
803
+ // Emit without details.signal
804
+ router.emitStatus({
805
+ from: { agent_id: "worker_a" },
806
+ status_type: "completed",
807
+ summary: "Done",
808
+ });
809
+
810
+ const messages = router.getMessages("worker_b");
811
+ expect(
812
+ messages.filter((m) => m.content.includes("status_notification"))
813
+ ).toHaveLength(1);
814
+ });
815
+
816
+ it("should apply signal filter to subtree subscriptions", () => {
817
+ createAgent("manager_1");
818
+ createAgent("worker_1", "manager_1");
819
+
820
+ router.setupDefaultSubscriptions({
821
+ agent_id: "worker_1",
822
+ parent_id: "manager_1",
823
+ });
824
+
825
+ // Block FIXUP_CREATED for subtree subscribers
826
+ router.setSignalFilter((_from, _to, signal) => {
827
+ return signal !== "FIXUP_CREATED";
828
+ });
829
+
830
+ router.emitStatus({
831
+ from: { agent_id: "worker_1" },
832
+ status_type: "checkpoint",
833
+ summary: "Fixup created",
834
+ details: { signal: "FIXUP_CREATED" },
835
+ });
836
+
837
+ const messages = router.getMessages("manager_1");
838
+ expect(
839
+ messages.filter((m) => m.content.includes("status_notification"))
840
+ ).toHaveLength(0);
841
+ });
842
+
843
+ it("should use directional from/to in filter callback", () => {
844
+ const filterCalls: { from: string; to: string; signal: string | undefined }[] = [];
845
+
846
+ createAgent("worker_a");
847
+ createAgent("worker_b");
848
+
849
+ router.subscribe("worker_a", { type: "topic", target: "updates" });
850
+ router.subscribe("worker_b", { type: "topic", target: "updates" });
851
+
852
+ router.setSignalFilter((from, to, signal) => {
853
+ filterCalls.push({ from, to, signal });
854
+ return true;
855
+ });
856
+
857
+ router.emitStatus({
858
+ from: { agent_id: "worker_a" },
859
+ status_type: "completed",
860
+ summary: "Done",
861
+ details: { signal: "TEST_SIGNAL" },
862
+ });
863
+
864
+ expect(filterCalls).toHaveLength(1);
865
+ expect(filterCalls[0]).toEqual({
866
+ from: "worker_a",
867
+ to: "worker_b",
868
+ signal: "TEST_SIGNAL",
869
+ });
870
+ });
871
+ });
872
+
873
+ describe("emission validation", () => {
874
+ it("should block emission when validator returns reject", () => {
875
+ createAgent("worker_a");
876
+ createAgent("manager_1");
877
+
878
+ router.subscribe("manager_1", { type: "subtree", target: "worker_a" });
879
+
880
+ router.setEmissionValidator((_agentId, signal) => {
881
+ if (signal === "FORBIDDEN_SIGNAL") {
882
+ return { action: "reject", message: "Not allowed" };
883
+ }
884
+ return { action: "allow" };
885
+ });
886
+
887
+ router.emitStatus({
888
+ from: { agent_id: "worker_a" },
889
+ status_type: "checkpoint",
890
+ summary: "Forbidden",
891
+ details: { signal: "FORBIDDEN_SIGNAL" },
892
+ });
893
+
894
+ // No notification should be delivered
895
+ const messages = router.getMessages("manager_1");
896
+ expect(
897
+ messages.filter((m) => m.content.includes("status_notification"))
898
+ ).toHaveLength(0);
899
+ });
900
+
901
+ it("should allow emission when validator returns allow", () => {
902
+ createAgent("worker_a");
903
+ createAgent("manager_1");
904
+
905
+ router.subscribe("manager_1", { type: "subtree", target: "worker_a" });
906
+
907
+ router.setEmissionValidator(() => ({ action: "allow" }));
908
+
909
+ router.emitStatus({
910
+ from: { agent_id: "worker_a" },
911
+ status_type: "completed",
912
+ summary: "Done",
913
+ details: { signal: "WORKER_DONE" },
914
+ });
915
+
916
+ const messages = router.getMessages("manager_1");
917
+ expect(
918
+ messages.filter((m) => m.content.includes("status_notification"))
919
+ ).toHaveLength(1);
920
+ });
921
+
922
+ it("should allow emission and record audit event when validator returns audit", () => {
923
+ createAgent("worker_a");
924
+ createAgent("manager_1");
925
+
926
+ router.subscribe("manager_1", { type: "subtree", target: "worker_a" });
927
+
928
+ router.setEmissionValidator((_agentId, signal) => {
929
+ if (signal === "UNAUTHORIZED") {
930
+ return { action: "audit", message: "Audit: unauthorized emission" };
931
+ }
932
+ return { action: "allow" };
933
+ });
934
+
935
+ router.emitStatus({
936
+ from: { agent_id: "worker_a" },
937
+ status_type: "checkpoint",
938
+ summary: "Check",
939
+ details: { signal: "UNAUTHORIZED" },
940
+ });
941
+
942
+ // Status notification should still be delivered
943
+ const messages = router.getMessages("manager_1");
944
+ expect(
945
+ messages.filter((m) => m.content.includes("status_notification"))
946
+ ).toHaveLength(1);
947
+
948
+ // Audit event should be recorded in EventStore
949
+ const events = eventStore.query({ type: "status" });
950
+ const auditEvent = events.find(
951
+ (e) => (e.payload as Record<string, unknown>)?.audit != null
952
+ );
953
+ expect(auditEvent).toBeDefined();
954
+ const audit = (auditEvent!.payload as Record<string, unknown>).audit as Record<string, unknown>;
955
+ expect(audit.type).toBe("emission_violation");
956
+ expect(audit.agent_id).toBe("worker_a");
957
+ expect(audit.signal).toBe("UNAUTHORIZED");
958
+ });
959
+
960
+ it("should allow emission when validator returns warn", () => {
961
+ createAgent("worker_a");
962
+ createAgent("manager_1");
963
+
964
+ router.subscribe("manager_1", { type: "subtree", target: "worker_a" });
965
+
966
+ router.setEmissionValidator(() => ({
967
+ action: "warn",
968
+ message: "Warning: unusual emission",
969
+ }));
970
+
971
+ router.emitStatus({
972
+ from: { agent_id: "worker_a" },
973
+ status_type: "completed",
974
+ summary: "Done",
975
+ details: { signal: "ODD_SIGNAL" },
976
+ });
977
+
978
+ // Warn still allows delivery
979
+ const messages = router.getMessages("manager_1");
980
+ expect(
981
+ messages.filter((m) => m.content.includes("status_notification"))
982
+ ).toHaveLength(1);
983
+ });
984
+
985
+ it("should pass through untagged emissions without validation", () => {
986
+ const validatorCalls: { agentId: string; signal: string | undefined }[] = [];
987
+
988
+ createAgent("worker_a");
989
+ createAgent("manager_1");
990
+
991
+ router.subscribe("manager_1", { type: "subtree", target: "worker_a" });
992
+
993
+ router.setEmissionValidator((agentId, signal) => {
994
+ validatorCalls.push({ agentId, signal });
995
+ // Always reject tagged signals for this test
996
+ if (signal) return { action: "reject" };
997
+ return { action: "allow" };
998
+ });
999
+
1000
+ // Emit without details.signal
1001
+ router.emitStatus({
1002
+ from: { agent_id: "worker_a" },
1003
+ status_type: "completed",
1004
+ summary: "Done",
1005
+ });
1006
+
1007
+ // Validator is called with undefined signal and allows it
1008
+ expect(validatorCalls).toHaveLength(1);
1009
+ expect(validatorCalls[0].signal).toBeUndefined();
1010
+
1011
+ const messages = router.getMessages("manager_1");
1012
+ expect(
1013
+ messages.filter((m) => m.content.includes("status_notification"))
1014
+ ).toHaveLength(1);
1015
+ });
455
1016
  });
456
1017
 
457
1018
  // Note: Lineage routing tests removed - feature only implemented in deprecated send()