macro-agent 0.0.11 → 0.0.13

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 +5 -3
  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
@@ -0,0 +1,27 @@
1
+ # Grinder
2
+
3
+ You are a Grinder — an autonomous worker that claims tasks and executes them.
4
+
5
+ ## How You Work
6
+
7
+ 1. Call claim_task() to get your next task
8
+ 2. Read the task description carefully
9
+ 3. Execute the work: write code, run tests, fix issues
10
+ 4. When done, call done() with your results
11
+ 5. Immediately call claim_task() for the next task
12
+ 6. If no tasks available, wait briefly and retry
13
+
14
+ ## Work Guidelines
15
+
16
+ - Work independently — do not ask for instructions
17
+ - Write complete implementations, not stubs or TODOs
18
+ - Run tests before calling done() if the task involves code changes
19
+ - Commit your changes with clear, descriptive messages
20
+ - If you're stuck on a task for more than 10 minutes, call done({ status: "blocked" })
21
+
22
+ ## Quality
23
+
24
+ - Follow existing codebase conventions
25
+ - Ensure your changes compile and pass lint
26
+ - Write tests for new functionality
27
+ - Keep changes focused on the task — don't refactor surrounding code
@@ -0,0 +1,27 @@
1
+ # Judge
2
+
3
+ You periodically evaluate the health of the codebase and take corrective action.
4
+
5
+ ## Evaluation Cycle
6
+
7
+ Every time you activate:
8
+ 1. Run the build — check compilation
9
+ 2. Run the test suite — check correctness
10
+ 3. Run the linter — check code quality
11
+ 4. If all pass: emit GREEN_SNAPSHOT
12
+ 5. If any fail: create fixup tasks with tag "fixup" and priority "critical"
13
+
14
+ ## Creating Fixup Tasks
15
+
16
+ When you find failures:
17
+ - Create one task per distinct issue (don't bundle)
18
+ - Include the exact error output in the task description
19
+ - Tag with: ["fixup", "<subsystem>"]
20
+ - Reference the failing file and test
21
+
22
+ ## Health Reporting
23
+
24
+ After each evaluation cycle, emit a health status:
25
+ - Use emit_status to report overall codebase health
26
+ - Include: build status, test pass rate, lint error count
27
+ - This information helps the planner adjust priorities
@@ -0,0 +1,33 @@
1
+ # Planner
2
+
3
+ You are the Planner. Your job is to continuously explore the codebase,
4
+ understand the current state, and create well-defined tasks for workers.
5
+
6
+ ## How You Work
7
+
8
+ 1. **Explore**: Read the codebase to understand architecture, patterns, and gaps
9
+ 2. **Plan**: Break the objective into independent, parallelizable tasks
10
+ 3. **Create**: Use create_task to add tasks to the pool with clear descriptions and tags
11
+ 4. **Monitor**: Watch for completed/failed tasks and adjust the plan
12
+ 5. **Repeat**: Planning is continuous — as work completes, create the next batch
13
+
14
+ ## Planning Guidelines
15
+
16
+ - Each task should be completable in 5-30 minutes by a single worker
17
+ - Tag tasks with subsystem and type for filtered claiming
18
+ - Set dependencies (blockers) when ordering matters
19
+ - Prefer many small tasks over few large ones — parallelism is the goal
20
+ - Include enough context for a worker to start without re-exploring
21
+
22
+ ## Constraints
23
+
24
+ - Do NOT instruct on things the model already knows (coding, testing, etc.)
25
+ - DO specify things specific to this codebase (conventions, build system, deploy pipeline)
26
+ - Constraints are more effective than instructions: "No TODOs, no partial implementations"
27
+
28
+ ## Sub-Planners
29
+
30
+ For large subsystems (>10 tasks), spawn a sub-planner:
31
+ - spawn_agent({ role: "planner", task: "Plan the [subsystem] changes" })
32
+ - Sub-planners create tasks in the shared pool
33
+ - You maintain the high-level view
@@ -0,0 +1,17 @@
1
+ name: grinder
2
+ extends: worker
3
+ display_name: "Grinder"
4
+ description: "Claims and executes tasks autonomously"
5
+
6
+ capabilities_add:
7
+ - task.claim
8
+ - git.push
9
+
10
+ prompt: prompts/grinder.md
11
+
12
+ macro_agent:
13
+ lifecycle:
14
+ type: ephemeral
15
+ task_bound: false
16
+ max_duration_ms: 3600000
17
+ self_cleanup: true
@@ -0,0 +1,24 @@
1
+ name: judge
2
+ extends: monitor
3
+ display_name: "Judge"
4
+ description: "Periodically evaluates codebase health and creates fixup tasks"
5
+
6
+ capabilities_add:
7
+ - exec.build
8
+ - exec.test
9
+ - exec.lint
10
+ - task.create
11
+ - task.update
12
+ - git.branch.create
13
+ - git.push
14
+
15
+ prompt: prompts/judge.md
16
+
17
+ macro_agent:
18
+ workspace:
19
+ type: own
20
+ branch_pattern: "judge/{agent-id}"
21
+ cleanup_on_terminate: true
22
+ lifecycle:
23
+ type: event-driven
24
+ parent_bound: false
@@ -0,0 +1,18 @@
1
+ name: planner
2
+ extends: coordinator
3
+ display_name: "Planner"
4
+ description: "Continuously explores the codebase, creates and prioritizes tasks"
5
+
6
+ capabilities_add:
7
+ - task.claim
8
+
9
+ capabilities_remove:
10
+ - agent.spawn.integrator
11
+ - agent.spawn.monitor
12
+
13
+ prompt: prompts/planner.md
14
+
15
+ macro_agent:
16
+ lifecycle:
17
+ type: daemon
18
+ cascade_terminate: true
@@ -0,0 +1,103 @@
1
+ name: self-driving
2
+ description: "Autonomous codebase development with continuous planning"
3
+ version: 1
4
+
5
+ roles:
6
+ - planner
7
+ - grinder
8
+ - judge
9
+
10
+ topology:
11
+ root:
12
+ role: planner
13
+ prompt: prompts/planner.md
14
+ config:
15
+ model: sonnet
16
+
17
+ companions:
18
+ - role: judge
19
+ prompt: prompts/judge.md
20
+ config:
21
+ model: haiku
22
+
23
+ spawn_rules:
24
+ planner: [grinder, planner]
25
+ judge: []
26
+ grinder: []
27
+
28
+ communication:
29
+ channels:
30
+ task_updates:
31
+ description: "Task lifecycle events"
32
+ signals: [TASK_CREATED, TASK_COMPLETED, TASK_FAILED]
33
+ work_coordination:
34
+ description: "Work assignment and completion"
35
+ signals: [WORK_ASSIGNED, WORKER_DONE, MERGE_REQUEST]
36
+ health:
37
+ description: "System health monitoring"
38
+ signals: [HEALTH_CHECK, METRIC_SNAPSHOT, GREEN_SNAPSHOT]
39
+
40
+ subscriptions:
41
+ planner:
42
+ - channel: task_updates
43
+ - channel: work_coordination
44
+ signals: [WORKER_DONE]
45
+ - channel: health
46
+ signals: [METRIC_SNAPSHOT]
47
+ judge:
48
+ - channel: task_updates
49
+ signals: [TASK_FAILED]
50
+ - channel: work_coordination
51
+ signals: [WORKER_DONE]
52
+ - channel: health
53
+ grinder:
54
+ - channel: work_coordination
55
+ signals: [WORK_ASSIGNED]
56
+
57
+ emissions:
58
+ planner: [TASK_CREATED, WORK_ASSIGNED]
59
+ judge: [HEALTH_CHECK, GREEN_SNAPSHOT, FIXUP_CREATED]
60
+ grinder: [WORKER_DONE]
61
+
62
+ routing:
63
+ status: upstream
64
+ peers:
65
+ - from: judge
66
+ to: planner
67
+ via: direct
68
+ signals: [FIXUP_CREATED, GREEN_SNAPSHOT]
69
+ - from: planner
70
+ to: judge
71
+ via: direct
72
+ signals: [CONVERGENCE_CHECK]
73
+
74
+ enforcement: permissive
75
+
76
+ macro_agent:
77
+ task_assignment:
78
+ mode: pull
79
+ pull:
80
+ idle_timeout_s: 300
81
+ claim_retry_delay_ms: 2000
82
+ max_concurrent_per_agent: 1
83
+
84
+ integration:
85
+ strategy: trunk
86
+ config:
87
+ max_retries: 3
88
+ conflict_action: abandon
89
+
90
+ lifecycle:
91
+ continuations:
92
+ enabled: true
93
+ max_history_messages: 50
94
+ checkpoint_interval: round_trip
95
+ scaling:
96
+ min_workers: 3
97
+ max_workers: 20
98
+ scale_on: task_queue_depth
99
+ idle_drain: true
100
+
101
+ observability:
102
+ metrics_window_s: 3600
103
+ snapshot_interval_s: 300
@@ -0,0 +1,26 @@
1
+ # Developer
2
+
3
+ You are a **Developer** on a structured development team. You execute a single assigned task in your isolated workspace.
4
+
5
+ ## Responsibilities
6
+
7
+ 1. **Implement** - Complete the assigned task according to its description
8
+ 2. **Test** - Verify your changes work correctly
9
+ 3. **Commit** - Create clean, descriptive commits
10
+ 4. **Report** - Call `done()` with status and summary when finished
11
+
12
+ ## Workflow
13
+
14
+ 1. Read and understand the task description
15
+ 2. Explore the relevant code to plan your changes
16
+ 3. Implement the changes
17
+ 4. Run tests to verify correctness
18
+ 5. Commit your work with a clear message
19
+ 6. Call `done()` with status `completed` and a brief summary
20
+
21
+ ## Guidelines
22
+
23
+ - Stay focused on your assigned task only
24
+ - Do not modify files outside the scope of your task
25
+ - If you encounter a blocker, call `done()` with status `failed` and describe the issue
26
+ - Make atomic commits that are easy to review
@@ -0,0 +1,25 @@
1
+ # Lead
2
+
3
+ You are the **Lead** of a structured development team. You coordinate work by decomposing objectives into tasks and assigning them to developers.
4
+
5
+ ## Responsibilities
6
+
7
+ 1. **Task Decomposition** - Break down the user's request into well-scoped, independent tasks
8
+ 2. **Assignment** - Spawn developers and assign each a specific task
9
+ 3. **Progress Tracking** - Monitor task completion and handle failures
10
+ 4. **Sequencing** - Ensure dependent tasks are ordered correctly using blockers
11
+
12
+ ## Workflow
13
+
14
+ 1. Analyze the objective and identify the minimal set of changes needed
15
+ 2. Create tasks with clear descriptions and acceptance criteria
16
+ 3. Spawn developers to handle each task
17
+ 4. Monitor TASK_COMPLETED / TASK_FAILED signals
18
+ 5. When all tasks complete, call `done()` with a summary
19
+
20
+ ## Guidelines
21
+
22
+ - Keep tasks small and focused (one file or one logical change)
23
+ - Set blockers between tasks that have data dependencies
24
+ - Prefer parallel execution where tasks are independent
25
+ - If a task fails, assess whether to retry or adjust the plan
@@ -0,0 +1,24 @@
1
+ # Reviewer
2
+
3
+ You are a **Reviewer** on a structured development team. You review merge requests to ensure quality before they land on the main branch.
4
+
5
+ ## Responsibilities
6
+
7
+ 1. **Review** - Examine code changes in merge requests for correctness and quality
8
+ 2. **Validate** - Run build and test to verify the changes don't break anything
9
+ 3. **Decide** - Approve or reject the merge request with clear reasoning
10
+
11
+ ## Workflow
12
+
13
+ 1. Wait for MERGE_REQUEST signals
14
+ 2. Check out the branch and review the diff
15
+ 3. Run `build` and `test` commands
16
+ 4. If everything passes, emit REVIEW_APPROVED
17
+ 5. If issues found, emit REVIEW_REJECTED with explanation
18
+
19
+ ## Guidelines
20
+
21
+ - Focus on correctness, not style preferences
22
+ - Run the test suite before approving
23
+ - Provide specific, actionable feedback on rejections
24
+ - Do not modify code directly; report issues back to the lead
@@ -0,0 +1,12 @@
1
+ name: developer
2
+ extends: worker
3
+ display_name: "Developer"
4
+ description: "Executes assigned tasks in isolated workspaces"
5
+
6
+ prompt: prompts/developer.md
7
+
8
+ macro_agent:
9
+ lifecycle:
10
+ type: ephemeral
11
+ task_bound: true
12
+ self_cleanup: true
@@ -0,0 +1,11 @@
1
+ name: lead
2
+ extends: coordinator
3
+ display_name: "Lead"
4
+ description: "Decomposes work into tasks and assigns them to developers"
5
+
6
+ prompt: prompts/lead.md
7
+
8
+ macro_agent:
9
+ lifecycle:
10
+ type: persistent
11
+ cascade_terminate: true
@@ -0,0 +1,19 @@
1
+ name: reviewer
2
+ extends: monitor
3
+ display_name: "Reviewer"
4
+ description: "Reviews merge requests and approves or rejects changes"
5
+
6
+ capabilities_add:
7
+ - exec.build
8
+ - exec.test
9
+
10
+ prompt: prompts/reviewer.md
11
+
12
+ macro_agent:
13
+ workspace:
14
+ type: own
15
+ branch_pattern: "review/{agent-id}"
16
+ cleanup_on_terminate: true
17
+ lifecycle:
18
+ type: event-driven
19
+ parent_bound: false
@@ -0,0 +1,89 @@
1
+ name: structured
2
+ description: "Hierarchical development with explicit task assignment and merge queue"
3
+ version: 1
4
+
5
+ roles:
6
+ - lead
7
+ - developer
8
+ - reviewer
9
+
10
+ topology:
11
+ root:
12
+ role: lead
13
+ prompt: prompts/lead.md
14
+ config:
15
+ model: sonnet
16
+
17
+ companions:
18
+ - role: reviewer
19
+ prompt: prompts/reviewer.md
20
+ config:
21
+ model: haiku
22
+
23
+ spawn_rules:
24
+ lead: [developer, lead]
25
+ reviewer: []
26
+ developer: []
27
+
28
+ communication:
29
+ channels:
30
+ task_updates:
31
+ description: "Task lifecycle events"
32
+ signals: [TASK_CREATED, TASK_ASSIGNED, TASK_COMPLETED, TASK_FAILED]
33
+ merge_flow:
34
+ description: "Merge queue and integration events"
35
+ signals: [MERGE_REQUEST, MERGE_COMPLETED, MERGE_CONFLICT]
36
+ review_flow:
37
+ description: "Code review signals"
38
+ signals: [REVIEW_REQUESTED, REVIEW_APPROVED, REVIEW_REJECTED]
39
+
40
+ subscriptions:
41
+ lead:
42
+ - channel: task_updates
43
+ - channel: merge_flow
44
+ - channel: review_flow
45
+ signals: [REVIEW_APPROVED, REVIEW_REJECTED]
46
+ reviewer:
47
+ - channel: merge_flow
48
+ signals: [MERGE_REQUEST]
49
+ - channel: review_flow
50
+ developer:
51
+ - channel: task_updates
52
+ signals: [TASK_ASSIGNED]
53
+
54
+ emissions:
55
+ lead: [TASK_CREATED, TASK_ASSIGNED]
56
+ reviewer: [REVIEW_APPROVED, REVIEW_REJECTED]
57
+ developer: [MERGE_REQUEST, TASK_COMPLETED, TASK_FAILED]
58
+
59
+ routing:
60
+ status: upstream
61
+ peers:
62
+ - from: reviewer
63
+ to: lead
64
+ via: direct
65
+ signals: [REVIEW_APPROVED, REVIEW_REJECTED]
66
+
67
+ enforcement: permissive
68
+
69
+ macro_agent:
70
+ task_assignment:
71
+ mode: push
72
+
73
+ integration:
74
+ strategy: queue
75
+ config:
76
+ require_review: true
77
+
78
+ lifecycle:
79
+ continuations:
80
+ enabled: false
81
+ scaling:
82
+ min_workers: 1
83
+ max_workers: 10
84
+ scale_on: manual
85
+ idle_drain: false
86
+
87
+ observability:
88
+ metrics_window_s: 1800
89
+ snapshot_interval_s: 600
@@ -147,3 +147,9 @@
147
147
  {"id":"i-3ojo","uuid":"1677a703-8b6a-40ef-a86c-2e311730d924","title":"Phase 3: Conversation Lifecycle — Create on spawn, close on done/terminate","content":"\nAutomatically create conversations on agent spawn / user session init, close on done() / terminate, track agent-to-conversation mapping.\n\n## Changes\n\n### Create\n- `src/mail/conversation-map.ts` — Agent-to-conversation mapping (agentConversationMap + peerConvIndex)\n\n### Modify\n- `src/agent/agent-manager.ts` — In spawn(): create task conversation, join parent+child, map agent. In terminate(): close conversation, remove from map.\n- `src/mcp/tools/done.ts` — Between step 4 (emitStatus) and step 5 (dispatchDone): record completion turn, close conversation\n- `src/api/server.ts` — In POST /api/init: create session conversation. In POST /api/conversation/message: record user/assistant turns.\n- `src/server/combined-server.ts` — Wire ConversationMap to services\n\n## Key Details\n- ConversationMap is in-memory, reconstructible from EventStore on restart\n- Peer index keyed by sorted agent pair [min(A,B), max(A,B)]\n- All mail operations wrapped in try/catch — never fail core operations\n- done() insertion point: between step 4 (line ~234) and step 5 (line ~236)\n- Head manager participates in session conversation AND each child's task conversation\n\n## Verification\n- Unit test: spawn → conversation created with participants. done() → turn recorded + closed. terminate → closed.\n- Unit test: API init → session conversation. User message → turns recorded.\n- Existing agent-manager, done(), API server tests pass\n","status":"closed","priority":1,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:09","updated_at":"2026-02-06 05:43:01","closed_at":"2026-02-06 05:43:01","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3ojo","from_type":"issue","to":"i-44q8","to_type":"issue","type":"blocks"},{"from":"i-3ojo","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["lifecycle","mail","phase-3"],"feedback":[{"id":"57de1bdb-243a-48f4-9e89-7d1406318b83","from_id":"i-3ojo","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 3 implemented successfully. Key deviations from plan:\n- Added `setMailServices()` late-binding method to AgentManager interface (AgentManager is created before combined-server creates MailService)\n- Fixed EventStore `applyConversationEvent` to map arbitrary `close_reason` to valid `ConversationStatus` (previously used close_reason directly as status)\n- Both standalone (`createAPIServer`) and shared (`createAPIApp`) API modes updated with session conversation creation and turn recording\n- 15 new tests covering ConversationMap, session/task conversations, done/terminate cleanup, and full lifecycle flow","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:43:09.098Z","updated_at":"2026-02-06T05:43:09.098Z"}]}
148
148
  {"id":"i-44q8","uuid":"e99900fc-6f62-49e7-9f8b-a1f3c150c510","title":"Phase 4: Turn Recording — MessageRouter hook with hierarchy-aware resolution","content":"\nAdd turnRecorder callback to MessageRouter so direct messages automatically become conversation turns, with hierarchy-aware conversation resolution and peer conversation auto-creation.\n\n## Changes\n\n### Create\n- `src/mail/turn-recorder.ts` — Conversation resolution + turn recording callback\n\n### Modify\n- `src/router/message-router.ts` — Add turnRecorder to config, setTurnRecorder() for late-binding, invoke after event emission + wake handler for agent and task addresses only\n- `src/router/types.ts` — Add TurnRecorder type\n- `src/server/combined-server.ts` — Wire turnRecorder to MessageRouter\n\n## Resolution Algorithm\n1. Only agent and task addresses produce turns (return null for scope/role/broadcast/siblings)\n2. Get both agents' lineage from EventStore\n3. Parent→child or child→parent: use child's task conversation\n4. Peers: getOrCreatePeerConversation() — sorted-pair key, both joined, parent = nearest common ancestor\n5. Record turn with sourceType: 'intercepted', sourceMessageId\n\n## Key Details\n- Follow wakeHandler callback pattern in MessageRouterConfig\n- setTurnRecorder() enables late-binding (services created after router)\n- Try/catch wrapping — never fail message delivery due to turn recording\n- Hook points: agent address after line 333, task address after line 403\n\n## Verification\n- Unit test each resolution case: parent→child, child→parent, peer, broadcast (no turn)\n- Integration test: full hierarchy, send messages, verify conversation tree\n- Existing MessageRouter tests pass\n","status":"closed","priority":1,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:19","updated_at":"2026-02-06 05:46:25","closed_at":"2026-02-06 05:46:25","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-44q8","from_type":"issue","to":"i-7614","to_type":"issue","type":"blocks"},{"from":"i-44q8","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["mail","phase-4","router"],"feedback":[{"id":"8f9d5fa9-ba8c-4355-99e7-7690b648c860","from_id":"i-44q8","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 4 implemented. Added TurnRecorderCallback type to router/types.ts, setTurnRecorder() late-binding method on MessageRouter, turn recording hooks for agent and task addresses only (not scope/role/broadcast/hierarchical), createTurnRecorder() with hierarchy-aware resolution (parent↔child → child's task conversation, peers → auto-created peer conversation). 9 new tests covering parent→child, child→parent, peer auto-creation, peer reuse, task address, and edge cases.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:46:25.563Z","updated_at":"2026-02-06T05:46:25.563Z"}]}
149
149
  {"id":"i-7614","uuid":"44846f3e-829c-41bf-a4bc-b7e73b3de759","title":"Phase 5: External Access — REST endpoints and WebSocket channels","content":"\nREST API endpoints for querying conversations/turns, WebSocket channels for real-time conversation updates, mail-backed conversation history.\n\n## Changes\n\n### Modify\n- `src/api/types.ts` — Add ConversationSummary, TurnSummary, WSTurnAdded, WSConversationUpdate types\n- `src/api/server.ts` — Add REST endpoints (GET /api/conversations, GET /api/conversations/:id, GET /api/conversations/:id/turns, POST /api/conversations/:id/close). Add WebSocket channels (conversation:${id}, conversations). Update GET /api/conversation/history to use mail-backed data when enabled.\n\n## Key Details\n- Follow existing /api/agents, /api/tasks endpoint patterns\n- WebSocket channels driven by EventStore onConversationChange() and onTurnChange() listeners\n- GET /api/conversation/history falls back to flat conversationHistory[] when mail disabled\n\n## Verification\n- Unit test each REST endpoint with mocked services\n- Integration test: full flow through REST API\n- WebSocket test: subscribe → send message → verify turn_added notification\n- Existing API tests pass\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:25","updated_at":"2026-02-06 05:51:39","closed_at":"2026-02-06 05:51:39","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-7614","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["api","mail","phase-5"],"feedback":[{"id":"eca59751-c0e3-4b27-a84c-46a25b216060","from_id":"i-7614","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 5 implemented. Added REST endpoints: GET /api/conversations (list with type/status filter + pagination), GET /api/conversations/:id (detail), GET /api/conversations/:id/turns (paginated), POST /api/conversations/:id/close, GET /api/conversations/:id/participants. Added WebSocket channels: 'conversations' (global conversation updates), 'conversation:${id}' (per-conversation updates + turn_added events). Added conversation_update and turn_added to WSMessageType. Used shared registerConversationRoutes() to avoid duplication between standalone and shared server modes. 14 new tests for the REST endpoints.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:51:38.798Z","updated_at":"2026-02-06T05:51:38.798Z"}]}
150
+ {"id":"i-96f6","uuid":"3f23e84b-1a2e-416e-87a7-d28c3a6e0a98","title":"Wire peer routing from communication config","content":"\n`setupPeerSubscriptions()` in `team-runtime.ts:418-427` ignores `manifest.communication.routing.peers` config entirely. It hardcodes mutual subtree subscriptions only between root and companion agents.\n\n**What needs to happen:**\n- `TeamRuntime.bootstrap()` reads `manifest.communication.routing.peers`\n- Resolves role names to spawned agent IDs\n- Sets up subscriptions based on `via` field:\n - `via: \"direct\"` → mutual agent-to-agent subscriptions\n - `via: \"topic\"` → ensure both agents subscribe to named topic\n - `via: \"scope\"` → scope-based addressing\n- Per-peer `signals` filter stored for later filtering\n\n**Impact:** Without this, non-hierarchical communication patterns defined in team YAML have no runtime effect. Only root↔companion hardcoded wiring works.\n\n**Files:** `src/teams/team-runtime.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:26:55","updated_at":"2026-02-09 03:22:26","closed_at":"2026-02-09 03:22:26","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-96f6","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","teams"],"feedback":[{"id":"4a4af7e4-8354-41cf-8eb2-d70457b41c70","from_id":"i-96f6","to_id":"s-29pg","feedback_type":"comment","content":"Implemented config-driven peer routing in `src/teams/team-runtime.ts`:\n\n**Core changes:**\n- `wirePeerRoutes()` reads `manifest.communication.routing.peers` and wires subscriptions based on `via` field\n- `wireSinglePeerRoute()` maps `via: \"direct\"` → subtree sub, `via: \"topic\"` → shared topic sub, `via: \"scope\"` → role channel sub\n- Each `PeerConnection` creates a **directional** (one-way) subscription\n- Falls back to legacy bidirectional subtree subs when no `routing.peers` config exists\n\n**Deferred wiring:**\n- Roles not spawned at bootstrap (e.g., grinder) are tracked in `pendingPeerRoutes`\n- `setupDeferredPeerWiring()` uses `onLifecycleEvent(\"spawned\")` to wire pending routes when roles become available\n- Auto-unsubscribes when all pending routes are resolved\n\n**Signal filter storage:**\n- In-memory `peerSignalFilters` map (key: `fromAgentId→toAgentId`, value: signal names)\n- `getPeerSignalFilters()` getter exposes for future signal filtering (issue `i-3o8g`)\n- Peer routes serialized into `team_config` EventStore event as `peerRoutes` field for cross-process access\n\n**Tests:** 8 new tests in `team-system.test.ts` covering config-driven routing, legacy fallback, signal filter storage, deferred wiring, teardown cleanup, topic via, and scope via.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T03:22:22.796Z","updated_at":"2026-02-09T03:22:22.796Z"}]}
151
+ {"id":"i-4dh7","uuid":"2192c5c8-2a0c-4846-919a-843f638ce633","title":"Add wake logic to routeStatusToTopicSubscribers()","content":"\n`routeStatusToTopicSubscribers()` in `message-router.ts` delivers status notifications to topic co-subscribers but does **not** call `wakeHandler`. Sleeping agents won't be proactively woken by lifecycle events from peers.\n\n**What needs to happen:**\n- Add `wakeHandler` calls in `routeStatusToTopicSubscribers()` for each notified agent\n- Mirror the pattern used in `sendToAddress()` scope handling (lines 506-523)\n- Wrap in try/catch per existing wake pattern\n\n**Note:** `routeStatusToSubtreeSubscribers()` also lacks wake logic — this is consistent. Consider adding wake to both or just topic routing.\n\n**Files:** `src/router/message-router.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:26:59","updated_at":"2026-02-09 04:26:24","closed_at":"2026-02-09 04:26:24","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-4dh7","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","router","teams"],"feedback":[{"id":"52f15b2a-8421-4ffe-a7b7-c4502796b106","from_id":"i-4dh7","to_id":"s-29pg","feedback_type":"comment","content":"Added wake logic to both status routing functions in `src/router/message-router.ts`:\n\n- `routeStatusToSubtreeSubscribers()` — now calls `wakeHandler` after emitting each status notification to subtree subscribers\n- `routeStatusToTopicSubscribers()` — same for topic co-subscribers\n\n**Design choices:**\n- Priority: `\"normal\"` — wakes idle/sleeping agents but queues for busy (prompting) ones. `\"low\"` was considered but it never wakes by design, defeating the purpose.\n- Wake errors are caught with try/catch — never fail status delivery due to wake handler issues\n- Follows the exact pattern from `sendToAddress()` scope handling\n\n**Tests:** 4 new tests in `message-router.test.ts`: wake on subtree status, wake on topic status, no wake when busy, resilience to wake handler errors.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T04:26:24.094Z","updated_at":"2026-02-09T04:26:24.094Z"}]}
152
+ {"id":"i-3o8g","uuid":"e9f34e0e-a6b2-41cf-bfed-e6ab0cf7187e","title":"Implement signal filtering for topic subscriptions","content":"\n`ChannelSubscription.signals?: string[]` allows per-role filtering of which signals to receive on a channel. Currently `getTopicsForRole()` in `team-runtime.ts:329-341` extracts channel names but discards the signals array entirely. All agents on a topic receive all signals.\n\n**What needs to happen:**\n- Store per-agent signal filters alongside topic subscriptions (in EventStore or in-memory lookup)\n- `routeStatusToTopicSubscribers()` checks the filter before delivering — skip delivery when the status signal doesn't match the agent's configured filter\n- Option 1 (recommended for Phase 1): Filter in `check_messages` MCP tool\n- Option 2: Filter in router during delivery\n\n**Files:** `src/teams/team-runtime.ts`, `src/router/message-router.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:04","updated_at":"2026-02-09 05:02:02","closed_at":"2026-02-09 05:02:02","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3o8g","from_type":"issue","to":"i-96f6","to_type":"issue","type":"depends-on"},{"from":"i-3o8g","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","teams"],"feedback":[{"id":"2439b9de-6335-4016-acd0-ac1afb796dce","from_id":"i-3o8g","to_id":"s-29pg","feedback_type":"comment","content":"Implemented signal filtering for both subtree and topic status routing.\n\n**Approach**: Late-bound `SignalFilter` callback on MessageRouter (follows `setTurnRecorder` pattern). TeamRuntime installs a combined filter that checks two sources:\n\n1. **Peer connection filters** (per-agent-pair, directional): From `routing.peers[].signals`. Checked first — takes precedence.\n2. **Channel subscription filters** (per-role): From `subscriptions[role][].signals`. Pre-computed into a `roleAllowedSignals` map at install time. If any subscription for a role has no `signals` array, the role receives all signals.\n\n**Key decisions**:\n- Signal name carried in `details.signal` field of status events (not `status_type`)\n- Untagged events (no `details.signal`) always pass through for backwards compatibility\n- Filter installed once at bootstrap; deferred wiring updates `agentRoleMap` but doesn't reinstall the filter (the closure captures the maps by reference)\n\n**Files modified**: `src/router/message-router.ts` (SignalFilter type, setSignalFilter, filter checks in both routing functions), `src/teams/team-runtime.ts` (installSignalFilter, agentRoleMap)\n\n**Tests**: 5 new router tests (suppress, allow, passthrough, subtree, directional args) + 7 new team tests (install, peer allow/block, untagged passthrough, channel sub filter, all-signals role, peer precedence). All 3,081 tests pass.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T05:01:57.319Z","updated_at":"2026-02-09T05:01:57.319Z"}]}
153
+ {"id":"i-96z9","uuid":"13867978-72d1-4e65-b99d-5a0f0e762f37","title":"Add test coverage for monitorContinuations()","content":"\n`monitorContinuations()` in `team-runtime.ts` has zero test coverage. The method watches agent lifecycle events and auto-resumes daemon agents on unexpected stop.\n\n**Test cases needed:**\n1. Daemon agent stops unexpectedly → `continueAgent()` called after 1s delay\n2. Agent stops with \"completed\" status → no continuation triggered\n3. Agent stops with \"cancelled\" status → no continuation triggered\n4. Continuation spawn failure → error caught, no crash\n5. Multiple lifecycle events for same agent → no duplicate continuations\n6. Teardown unsubscribes → no continuation after teardown\n\n**Edge cases:**\n- State consistency when agent ID changes after continuation\n- Rapid stop/restart cycles\n\n**Files:** `src/teams/__tests__/team-system.test.ts` or new `continuation.test.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:09","updated_at":"2026-02-08 08:08:45","closed_at":"2026-02-08 08:08:45","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-96z9","from_type":"issue","to":"s-5w36","to_type":"spec","type":"implements"}],"tags":["continuations","teams","testing"],"feedback":[{"id":"ff29220b-52ce-4b49-b720-5971ce0fb376","from_id":"i-96z9","to_id":"s-5w36","feedback_type":"comment","content":"Implemented 6 test cases for `monitorContinuations()` in `src/teams/__tests__/team-system.test.ts`:\n1. Auto-continue root agent on unexpected stop\n2. Auto-continue companion agent on unexpected stop\n3. No continuation on completed status stop\n4. No continuation on cancelled status stop\n5. No trigger for non-monitored agents\n6. Unsubscribe on teardown prevents continuation\n\nAll tests passing.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-08T08:08:36.918Z","updated_at":"2026-02-08T08:08:36.918Z"}]}
154
+ {"id":"i-3y08","uuid":"1c832346-74f6-4683-a01d-1dc3af035277","title":"Wire TrunkStrategy conflictAction and strategy lifecycle hooks","content":"\nTwo minor gaps in the integration strategy subsystem:\n\n1. **`conflictAction` unused:** `TrunkIntegrationStrategy` stores `conflictAction` config (\"abandon\" | \"queued_for_resolution\") but `land()` always returns `status: \"conflict\"` without differentiating. Should set `action` field on the conflict result based on config.\n\n2. **`initialize()`/`close()` lifecycle hooks never called:** The `IntegrationStrategy` interface defines optional `initialize()` and `close()` methods but neither TeamRuntime nor the worker handler invokes them. TeamRuntime should call `initialize()` during `initialize()` and `close()` during `teardown()`.\n\n**Files:** `src/workspace/strategies/trunk.ts`, `src/teams/team-runtime.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:15","updated_at":"2026-02-08 08:08:46","closed_at":"2026-02-08 08:08:46","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3y08","from_type":"issue","to":"s-6ok3","to_type":"spec","type":"implements"}],"tags":["gap","integration-strategies","teams"],"feedback":[{"id":"fb19956e-2987-4024-8bbc-23a8282af3f3","from_id":"i-3y08","to_id":"s-6ok3","feedback_type":"comment","content":"Both gaps addressed:\n\n1. **conflictAction wired**: Added `action` field to `LandResult` type in `src/workspace/strategies/types.ts`. `TrunkIntegrationStrategy.land()` now sets `action` on both conflict return paths, mapping config's `\"abandon\"` to result's `\"abandoned\"`.\n\n2. **Strategy lifecycle hooks called**: `TeamRuntime.initialize()` now instantiates the strategy via `defaultStrategyRegistry.get()` and calls `strategy.initialize()`. `TeamRuntime.teardown()` calls `strategy.close()`. Both wrapped in try/catch for best-effort semantics. Added `getIntegrationStrategy()` getter.\n\nFiles modified: `src/workspace/strategies/types.ts`, `src/workspace/strategies/trunk.ts`, `src/teams/team-runtime.ts`","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-08T08:08:41.672Z","updated_at":"2026-02-08T08:08:41.672Z"}]}
155
+ {"id":"i-1zso","uuid":"3573f69b-89c2-499f-ba0c-faaa578b5165","title":"Implement emission restrictions and enforcement mode","content":"\nTwo related features that are loaded/stored but not enforced at runtime:\n\n1. **Emission restrictions:** `communication.emissions` maps roles to allowed signals. Loader validates role names, but no code checks whether an agent's emitted signal is in its allowed list.\n\n2. **Enforcement mode:** `communication.enforcement` (\"strict\" | \"permissive\" | \"audit\") stored in EventStore `team_config` event. Never retrieved or branched on.\n\n**Implementation per A10 in implementation-details.md:**\n- Enforcement at MCP tool level (not router): `emit_status` tool handler checks team manifest emissions for agent's role\n- `strict`: reject disallowed emissions\n- `permissive`: log warning, allow\n- `audit`: record in EventStore for analysis\n\n**Files:** `src/mcp/mcp-server.ts` or `src/mcp/tools/`, `src/router/message-router.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:20","updated_at":"2026-02-09 05:45:05","closed_at":"2026-02-09 05:45:05","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-1zso","from_type":"issue","to":"i-3o8g","to_type":"issue","type":"depends-on"},{"from":"i-1zso","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","enforcement","gap","teams"],"feedback":[{"id":"9abcdf0a-c065-4814-8a0a-db59d15b8ae2","from_id":"i-1zso","to_id":"s-29pg","feedback_type":"comment","content":"Implemented emission restrictions and enforcement mode.\n\n**Approach**: Late-bound `EmissionValidator` callback on MessageRouter (follows `setSignalFilter` pattern). TeamRuntime installs the validator during bootstrap.\n\n**How it works**:\n1. `emitStatus()` extracts `details.signal` from the status event\n2. Calls the validator with `(agentId, signal)` — validator looks up agent's role via `agentRoleMap`, checks against `communication.emissions[role]`\n3. Returns action based on enforcement mode:\n - `strict` → `reject` (blocks emission entirely, `emitStatus` returns early)\n - `permissive` → `warn` (allows through)\n - `audit` → `audit` (records audit event in EventStore with `emission_violation` type, then allows through)\n4. Untagged events (no `details.signal`) and unknown agents always pass through\n\n**Data serialization**: Added `emissions` to the team_config EventStore event for cross-process access by MCP subprocesses.\n\n**Files modified**: `src/router/message-router.ts` (EmissionValidator type, setEmissionValidator, validation in emitStatus), `src/teams/team-runtime.ts` (installEmissionValidator, emissions in team_config)\n\n**Tests**: 5 new router tests (reject, allow, audit with event recording, warn, untagged passthrough) + 8 new team tests (install, allow, strict reject, permissive warn, audit, untagged, unknown agent, no-config skip, serialization). All 3,095 tests pass.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T05:45:00.325Z","updated_at":"2026-02-09T05:45:00.325Z"}]}