macro-agent 0.0.10 → 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 (518) 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 +56 -51
  16. package/.sudocode/specs.jsonl +8 -1
  17. package/CLAUDE.md +121 -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 +40 -1
  31. package/dist/agent/agent-manager.d.ts.map +1 -1
  32. package/dist/agent/agent-manager.js +172 -8
  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/wake.d.ts +15 -0
  38. package/dist/agent/wake.d.ts.map +1 -1
  39. package/dist/agent/wake.js +15 -0
  40. package/dist/agent/wake.js.map +1 -1
  41. package/dist/agent-detection/command-builder.d.ts +30 -0
  42. package/dist/agent-detection/command-builder.d.ts.map +1 -0
  43. package/dist/agent-detection/command-builder.js +71 -0
  44. package/dist/agent-detection/command-builder.js.map +1 -0
  45. package/dist/agent-detection/detector.d.ts +84 -0
  46. package/dist/agent-detection/detector.d.ts.map +1 -0
  47. package/dist/agent-detection/detector.js +240 -0
  48. package/dist/agent-detection/detector.js.map +1 -0
  49. package/dist/agent-detection/index.d.ts +12 -0
  50. package/dist/agent-detection/index.d.ts.map +1 -0
  51. package/dist/agent-detection/index.js +14 -0
  52. package/dist/agent-detection/index.js.map +1 -0
  53. package/dist/agent-detection/registry.d.ts +53 -0
  54. package/dist/agent-detection/registry.d.ts.map +1 -0
  55. package/dist/agent-detection/registry.js +177 -0
  56. package/dist/agent-detection/registry.js.map +1 -0
  57. package/dist/agent-detection/types.d.ts +121 -0
  58. package/dist/agent-detection/types.d.ts.map +1 -0
  59. package/dist/agent-detection/types.js +20 -0
  60. package/dist/agent-detection/types.js.map +1 -0
  61. package/dist/api/server.d.ts +5 -1
  62. package/dist/api/server.d.ts.map +1 -1
  63. package/dist/api/server.js +362 -0
  64. package/dist/api/server.js.map +1 -1
  65. package/dist/api/types.d.ts +50 -1
  66. package/dist/api/types.d.ts.map +1 -1
  67. package/dist/cli/acp.d.ts +2 -0
  68. package/dist/cli/acp.d.ts.map +1 -1
  69. package/dist/cli/acp.js +8 -1
  70. package/dist/cli/acp.js.map +1 -1
  71. package/dist/cli/index.js +29 -0
  72. package/dist/cli/index.js.map +1 -1
  73. package/dist/cli/mcp.js +38 -0
  74. package/dist/cli/mcp.js.map +1 -1
  75. package/dist/config/index.d.ts +2 -0
  76. package/dist/config/index.d.ts.map +1 -0
  77. package/dist/config/index.js +2 -0
  78. package/dist/config/index.js.map +1 -0
  79. package/dist/config/project-config.d.ts +46 -0
  80. package/dist/config/project-config.d.ts.map +1 -0
  81. package/dist/config/project-config.js +68 -0
  82. package/dist/config/project-config.js.map +1 -0
  83. package/dist/lifecycle/cascade.d.ts +1 -1
  84. package/dist/lifecycle/cascade.d.ts.map +1 -1
  85. package/dist/lifecycle/handlers/index.d.ts +4 -0
  86. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  87. package/dist/lifecycle/handlers/index.js +2 -0
  88. package/dist/lifecycle/handlers/index.js.map +1 -1
  89. package/dist/lifecycle/handlers/worker.d.ts +4 -0
  90. package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
  91. package/dist/lifecycle/handlers/worker.js +35 -3
  92. package/dist/lifecycle/handlers/worker.js.map +1 -1
  93. package/dist/mail/conversation-map.d.ts +33 -0
  94. package/dist/mail/conversation-map.d.ts.map +1 -0
  95. package/dist/mail/conversation-map.js +61 -0
  96. package/dist/mail/conversation-map.js.map +1 -0
  97. package/dist/mail/index.d.ts +11 -0
  98. package/dist/mail/index.d.ts.map +1 -0
  99. package/dist/mail/index.js +11 -0
  100. package/dist/mail/index.js.map +1 -0
  101. package/dist/mail/mail-service.d.ts +85 -0
  102. package/dist/mail/mail-service.d.ts.map +1 -0
  103. package/dist/mail/mail-service.js +121 -0
  104. package/dist/mail/mail-service.js.map +1 -0
  105. package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
  106. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
  107. package/dist/mail/stores/eventstore-conversation-store.js +131 -0
  108. package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
  109. package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
  110. package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
  111. package/dist/mail/stores/eventstore-participant-store.js +145 -0
  112. package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
  113. package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
  114. package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
  115. package/dist/mail/stores/eventstore-thread-store.js +118 -0
  116. package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
  117. package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
  118. package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
  119. package/dist/mail/stores/eventstore-turn-store.js +153 -0
  120. package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
  121. package/dist/mail/stores/index.d.ts +12 -0
  122. package/dist/mail/stores/index.d.ts.map +1 -0
  123. package/dist/mail/stores/index.js +12 -0
  124. package/dist/mail/stores/index.js.map +1 -0
  125. package/dist/mail/stores/types.d.ts +146 -0
  126. package/dist/mail/stores/types.d.ts.map +1 -0
  127. package/dist/mail/stores/types.js +13 -0
  128. package/dist/mail/stores/types.js.map +1 -0
  129. package/dist/mail/turn-recorder.d.ts +30 -0
  130. package/dist/mail/turn-recorder.d.ts.map +1 -0
  131. package/dist/mail/turn-recorder.js +98 -0
  132. package/dist/mail/turn-recorder.js.map +1 -0
  133. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  134. package/dist/map/adapter/acp-over-map.js +32 -2
  135. package/dist/map/adapter/acp-over-map.js.map +1 -1
  136. package/dist/map/adapter/event-translator.d.ts.map +1 -1
  137. package/dist/map/adapter/event-translator.js +4 -0
  138. package/dist/map/adapter/event-translator.js.map +1 -1
  139. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  140. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  141. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  142. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  143. package/dist/map/adapter/extensions/index.d.ts +10 -1
  144. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  145. package/dist/map/adapter/extensions/index.js +39 -0
  146. package/dist/map/adapter/extensions/index.js.map +1 -1
  147. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  148. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  149. package/dist/map/adapter/extensions/resume.js +59 -0
  150. package/dist/map/adapter/extensions/resume.js.map +1 -0
  151. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  152. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  153. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  154. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  155. package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
  156. package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
  157. package/dist/map/adapter/mail-handler-adapter.js +292 -0
  158. package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
  159. package/dist/map/adapter/map-adapter.d.ts +34 -10
  160. package/dist/map/adapter/map-adapter.d.ts.map +1 -1
  161. package/dist/map/adapter/map-adapter.js +110 -14
  162. package/dist/map/adapter/map-adapter.js.map +1 -1
  163. package/dist/map/adapter/rpc-handler.d.ts +4 -1
  164. package/dist/map/adapter/rpc-handler.d.ts.map +1 -1
  165. package/dist/map/adapter/rpc-handler.js +6 -0
  166. package/dist/map/adapter/rpc-handler.js.map +1 -1
  167. package/dist/map/index.d.ts +1 -0
  168. package/dist/map/index.d.ts.map +1 -1
  169. package/dist/map/index.js +2 -0
  170. package/dist/map/index.js.map +1 -1
  171. package/dist/map/types.d.ts +3 -1
  172. package/dist/map/types.d.ts.map +1 -1
  173. package/dist/map/types.js.map +1 -1
  174. package/dist/mcp/mcp-server.d.ts +6 -0
  175. package/dist/mcp/mcp-server.d.ts.map +1 -1
  176. package/dist/mcp/mcp-server.js +45 -0
  177. package/dist/mcp/mcp-server.js.map +1 -1
  178. package/dist/mcp/tools/claim_task.d.ts +35 -0
  179. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  180. package/dist/mcp/tools/claim_task.js +58 -0
  181. package/dist/mcp/tools/claim_task.js.map +1 -0
  182. package/dist/mcp/tools/done.d.ts +15 -2
  183. package/dist/mcp/tools/done.d.ts.map +1 -1
  184. package/dist/mcp/tools/done.js +45 -10
  185. package/dist/mcp/tools/done.js.map +1 -1
  186. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  187. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  188. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  189. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  190. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  191. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  192. package/dist/mcp/tools/unclaim_task.js +47 -0
  193. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  194. package/dist/metrics/index.d.ts +2 -0
  195. package/dist/metrics/index.d.ts.map +1 -0
  196. package/dist/metrics/index.js +2 -0
  197. package/dist/metrics/index.js.map +1 -0
  198. package/dist/metrics/metrics.d.ts +79 -0
  199. package/dist/metrics/metrics.d.ts.map +1 -0
  200. package/dist/metrics/metrics.js +166 -0
  201. package/dist/metrics/metrics.js.map +1 -0
  202. package/dist/roles/capabilities.d.ts +1 -0
  203. package/dist/roles/capabilities.d.ts.map +1 -1
  204. package/dist/roles/capabilities.js +3 -0
  205. package/dist/roles/capabilities.js.map +1 -1
  206. package/dist/roles/types.d.ts +1 -1
  207. package/dist/roles/types.d.ts.map +1 -1
  208. package/dist/router/channels.d.ts +2 -4
  209. package/dist/router/channels.d.ts.map +1 -1
  210. package/dist/router/channels.js.map +1 -1
  211. package/dist/router/message-router.d.ts +85 -9
  212. package/dist/router/message-router.d.ts.map +1 -1
  213. package/dist/router/message-router.js +203 -14
  214. package/dist/router/message-router.js.map +1 -1
  215. package/dist/router/role-resolver.d.ts +10 -1
  216. package/dist/router/role-resolver.d.ts.map +1 -1
  217. package/dist/router/role-resolver.js +15 -1
  218. package/dist/router/role-resolver.js.map +1 -1
  219. package/dist/router/types.d.ts +30 -1
  220. package/dist/router/types.d.ts.map +1 -1
  221. package/dist/router/types.js.map +1 -1
  222. package/dist/server/combined-server.d.ts +6 -0
  223. package/dist/server/combined-server.d.ts.map +1 -1
  224. package/dist/server/combined-server.js +24 -2
  225. package/dist/server/combined-server.js.map +1 -1
  226. package/dist/store/event-store.d.ts +14 -1
  227. package/dist/store/event-store.d.ts.map +1 -1
  228. package/dist/store/event-store.js +456 -4
  229. package/dist/store/event-store.js.map +1 -1
  230. package/dist/store/types/agents.d.ts +1 -1
  231. package/dist/store/types/agents.d.ts.map +1 -1
  232. package/dist/store/types/conversations.d.ts +91 -0
  233. package/dist/store/types/conversations.d.ts.map +1 -0
  234. package/dist/store/types/conversations.js +8 -0
  235. package/dist/store/types/conversations.js.map +1 -0
  236. package/dist/store/types/events.d.ts +1 -1
  237. package/dist/store/types/events.d.ts.map +1 -1
  238. package/dist/store/types/events.js.map +1 -1
  239. package/dist/store/types/index.d.ts +2 -0
  240. package/dist/store/types/index.d.ts.map +1 -1
  241. package/dist/store/types/index.js +2 -0
  242. package/dist/store/types/index.js.map +1 -1
  243. package/dist/store/types/sessions.d.ts +44 -0
  244. package/dist/store/types/sessions.d.ts.map +1 -0
  245. package/dist/store/types/sessions.js +9 -0
  246. package/dist/store/types/sessions.js.map +1 -0
  247. package/dist/store/types/tasks.d.ts +2 -0
  248. package/dist/store/types/tasks.d.ts.map +1 -1
  249. package/dist/task/backend/memory.d.ts +4 -1
  250. package/dist/task/backend/memory.d.ts.map +1 -1
  251. package/dist/task/backend/memory.js +81 -0
  252. package/dist/task/backend/memory.js.map +1 -1
  253. package/dist/task/backend/types.d.ts +30 -0
  254. package/dist/task/backend/types.d.ts.map +1 -1
  255. package/dist/task/backend/types.js.map +1 -1
  256. package/dist/teams/index.d.ts +4 -0
  257. package/dist/teams/index.d.ts.map +1 -0
  258. package/dist/teams/index.js +4 -0
  259. package/dist/teams/index.js.map +1 -0
  260. package/dist/teams/team-loader.d.ts +20 -0
  261. package/dist/teams/team-loader.d.ts.map +1 -0
  262. package/dist/teams/team-loader.js +293 -0
  263. package/dist/teams/team-loader.js.map +1 -0
  264. package/dist/teams/team-runtime.d.ts +139 -0
  265. package/dist/teams/team-runtime.d.ts.map +1 -0
  266. package/dist/teams/team-runtime.js +613 -0
  267. package/dist/teams/team-runtime.js.map +1 -0
  268. package/dist/teams/types.d.ts +266 -0
  269. package/dist/teams/types.d.ts.map +1 -0
  270. package/dist/teams/types.js +20 -0
  271. package/dist/teams/types.js.map +1 -0
  272. package/dist/trigger/router/trigger-router.d.ts +30 -3
  273. package/dist/trigger/router/trigger-router.d.ts.map +1 -1
  274. package/dist/trigger/router/trigger-router.js +30 -3
  275. package/dist/trigger/router/trigger-router.js.map +1 -1
  276. package/dist/trigger/wake/types.d.ts +31 -5
  277. package/dist/trigger/wake/types.d.ts.map +1 -1
  278. package/dist/trigger/wake/types.js +19 -0
  279. package/dist/trigger/wake/types.js.map +1 -1
  280. package/dist/workspace/dataplane-adapter.d.ts +1 -1
  281. package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
  282. package/dist/workspace/dataplane-adapter.js +1 -1
  283. package/dist/workspace/dataplane-adapter.js.map +1 -1
  284. package/dist/workspace/index.d.ts +1 -1
  285. package/dist/workspace/index.d.ts.map +1 -1
  286. package/dist/workspace/strategies/index.d.ts +6 -0
  287. package/dist/workspace/strategies/index.d.ts.map +1 -0
  288. package/dist/workspace/strategies/index.js +5 -0
  289. package/dist/workspace/strategies/index.js.map +1 -0
  290. package/dist/workspace/strategies/optimistic.d.ts +26 -0
  291. package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
  292. package/dist/workspace/strategies/optimistic.js +121 -0
  293. package/dist/workspace/strategies/optimistic.js.map +1 -0
  294. package/dist/workspace/strategies/queue.d.ts +26 -0
  295. package/dist/workspace/strategies/queue.d.ts.map +1 -0
  296. package/dist/workspace/strategies/queue.js +67 -0
  297. package/dist/workspace/strategies/queue.js.map +1 -0
  298. package/dist/workspace/strategies/registry.d.ts +37 -0
  299. package/dist/workspace/strategies/registry.d.ts.map +1 -0
  300. package/dist/workspace/strategies/registry.js +63 -0
  301. package/dist/workspace/strategies/registry.js.map +1 -0
  302. package/dist/workspace/strategies/trunk.d.ts +20 -0
  303. package/dist/workspace/strategies/trunk.d.ts.map +1 -0
  304. package/dist/workspace/strategies/trunk.js +108 -0
  305. package/dist/workspace/strategies/trunk.js.map +1 -0
  306. package/dist/workspace/strategies/types.d.ts +104 -0
  307. package/dist/workspace/strategies/types.d.ts.map +1 -0
  308. package/dist/workspace/strategies/types.js +11 -0
  309. package/dist/workspace/strategies/types.js.map +1 -0
  310. package/dist/workspace/types.d.ts +1 -1
  311. package/dist/workspace/types.d.ts.map +1 -1
  312. package/dist/workspace/workspace-manager.d.ts +1 -1
  313. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  314. package/docs/implementation-details.md +1127 -0
  315. package/docs/implementation-summary.md +448 -0
  316. package/docs/mail-integration.md +608 -0
  317. package/docs/plan-self-driving-support.md +433 -0
  318. package/docs/spec-self-driving-support.md +462 -0
  319. package/docs/team-templates.md +860 -0
  320. package/docs/teams.md +233 -0
  321. package/package.json +5 -3
  322. package/src/acp/__tests__/integration.test.ts +161 -1
  323. package/src/acp/__tests__/macro-agent.test.ts +95 -0
  324. package/src/acp/__tests__/session-persistence.test.ts +276 -0
  325. package/src/acp/macro-agent.ts +79 -7
  326. package/src/acp/session-mapper.ts +108 -1
  327. package/src/acp/types.ts +33 -1
  328. package/src/agent/agent-manager.ts +278 -6
  329. package/src/agent/types.ts +27 -0
  330. package/src/agent/wake.ts +15 -0
  331. package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
  332. package/src/agent-detection/__tests__/detector.test.ts +768 -0
  333. package/src/agent-detection/__tests__/registry.test.ts +254 -0
  334. package/src/agent-detection/command-builder.ts +90 -0
  335. package/src/agent-detection/detector.ts +307 -0
  336. package/src/agent-detection/index.ts +36 -0
  337. package/src/agent-detection/registry.ts +200 -0
  338. package/src/agent-detection/types.ts +184 -0
  339. package/src/api/__tests__/conversation-api.test.ts +468 -0
  340. package/src/api/server.ts +425 -1
  341. package/src/api/types.ts +64 -1
  342. package/src/cli/acp.ts +9 -1
  343. package/src/cli/index.ts +44 -0
  344. package/src/cli/mcp.ts +47 -0
  345. package/src/config/index.ts +9 -0
  346. package/src/config/project-config.ts +107 -0
  347. package/src/lifecycle/cascade.ts +1 -1
  348. package/src/lifecycle/handlers/index.ts +8 -0
  349. package/src/lifecycle/handlers/worker.ts +48 -3
  350. package/src/mail/__tests__/conversation-lifecycle.test.ts +409 -0
  351. package/src/mail/__tests__/eventstore-stores.test.ts +1073 -0
  352. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +575 -0
  353. package/src/mail/__tests__/mail-integration.test.ts +759 -0
  354. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +1068 -0
  355. package/src/mail/__tests__/mail-service.test.ts +506 -0
  356. package/src/mail/__tests__/turn-recorder.test.ts +328 -0
  357. package/src/mail/conversation-map.ts +107 -0
  358. package/src/mail/index.ts +25 -0
  359. package/src/mail/mail-service.ts +257 -0
  360. package/src/mail/stores/eventstore-conversation-store.ts +146 -0
  361. package/src/mail/stores/eventstore-participant-store.ts +172 -0
  362. package/src/mail/stores/eventstore-thread-store.ts +129 -0
  363. package/src/mail/stores/eventstore-turn-store.ts +173 -0
  364. package/src/mail/stores/index.ts +12 -0
  365. package/src/mail/stores/types.ts +160 -0
  366. package/src/mail/turn-recorder.ts +124 -0
  367. package/src/map/README.md +79 -0
  368. package/src/map/adapter/__tests__/extensions.test.ts +359 -0
  369. package/src/map/adapter/__tests__/map-adapter.test.ts +90 -0
  370. package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
  371. package/src/map/adapter/acp-over-map.ts +45 -2
  372. package/src/map/adapter/event-translator.ts +4 -0
  373. package/src/map/adapter/extensions/agent-detection.ts +201 -0
  374. package/src/map/adapter/extensions/index.ts +63 -0
  375. package/src/map/adapter/extensions/resume.ts +114 -0
  376. package/src/map/adapter/extensions/workspace-files.ts +449 -0
  377. package/src/map/adapter/mail-handler-adapter.ts +429 -0
  378. package/src/map/adapter/map-adapter.ts +173 -27
  379. package/src/map/adapter/rpc-handler.ts +8 -1
  380. package/src/map/index.ts +3 -0
  381. package/src/map/types.ts +3 -1
  382. package/src/mcp/mcp-server.ts +67 -0
  383. package/src/mcp/tools/claim_task.ts +86 -0
  384. package/src/mcp/tools/done.ts +59 -10
  385. package/src/mcp/tools/list_claimable_tasks.ts +93 -0
  386. package/src/mcp/tools/unclaim_task.ts +71 -0
  387. package/src/metrics/index.ts +9 -0
  388. package/src/metrics/metrics.ts +280 -0
  389. package/src/roles/capabilities.ts +3 -0
  390. package/src/roles/types.ts +2 -1
  391. package/src/router/README.md +120 -0
  392. package/src/router/__tests__/message-router.test.ts +561 -0
  393. package/src/router/channels.ts +3 -4
  394. package/src/router/message-router.ts +308 -22
  395. package/src/router/role-resolver.ts +22 -1
  396. package/src/router/types.ts +36 -1
  397. package/src/server/combined-server.ts +36 -2
  398. package/src/store/README.md +134 -0
  399. package/src/store/event-store.ts +546 -3
  400. package/src/store/types/agents.ts +1 -1
  401. package/src/store/types/conversations.ts +129 -0
  402. package/src/store/types/events.ts +5 -1
  403. package/src/store/types/index.ts +2 -0
  404. package/src/store/types/sessions.ts +53 -0
  405. package/src/store/types/tasks.ts +3 -0
  406. package/src/task/backend/memory.ts +116 -0
  407. package/src/task/backend/types.ts +43 -0
  408. package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
  409. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
  410. package/src/teams/__tests__/team-system.test.ts +1280 -0
  411. package/src/teams/index.ts +13 -0
  412. package/src/teams/team-loader.ts +434 -0
  413. package/src/teams/team-runtime.ts +727 -0
  414. package/src/teams/types.ts +377 -0
  415. package/src/trigger/router/trigger-router.ts +30 -3
  416. package/src/trigger/wake/types.ts +32 -5
  417. package/src/trigger/wake/wake-manager.ts +2 -2
  418. package/src/workspace/dataplane-adapter.ts +1 -1
  419. package/src/workspace/index.ts +1 -1
  420. package/src/workspace/strategies/index.ts +18 -0
  421. package/src/workspace/strategies/optimistic.ts +136 -0
  422. package/src/workspace/strategies/queue.ts +81 -0
  423. package/src/workspace/strategies/registry.ts +89 -0
  424. package/src/workspace/strategies/trunk.ts +123 -0
  425. package/src/workspace/strategies/types.ts +145 -0
  426. package/src/workspace/types.ts +1 -1
  427. package/src/workspace/workspace-manager.ts +1 -1
  428. package/.claude/settings.local.json +0 -59
  429. package/dist/map/utils/address-translation.d.ts +0 -99
  430. package/dist/map/utils/address-translation.d.ts.map +0 -1
  431. package/dist/map/utils/address-translation.js +0 -285
  432. package/dist/map/utils/address-translation.js.map +0 -1
  433. package/dist/map/utils/index.d.ts +0 -7
  434. package/dist/map/utils/index.d.ts.map +0 -1
  435. package/dist/map/utils/index.js +0 -7
  436. package/dist/map/utils/index.js.map +0 -1
  437. package/openspec/AGENTS.md +0 -456
  438. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/design.md +0 -128
  439. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/proposal.md +0 -49
  440. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/agent-manager/spec.md +0 -150
  441. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/cli-api/spec.md +0 -258
  442. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/event-store/spec.md +0 -160
  443. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/mcp-tools/spec.md +0 -224
  444. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/message-router/spec.md +0 -153
  445. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/task-manager/spec.md +0 -136
  446. package/openspec/changes/archive/2025-12-21-add-mvp-foundation/tasks.md +0 -147
  447. package/openspec/project.md +0 -31
  448. package/openspec/specs/agent-manager/spec.md +0 -154
  449. package/openspec/specs/cli-api/spec.md +0 -262
  450. package/openspec/specs/event-store/spec.md +0 -164
  451. package/openspec/specs/mcp-tools/spec.md +0 -228
  452. package/openspec/specs/message-router/spec.md +0 -157
  453. package/openspec/specs/task-manager/spec.md +0 -140
  454. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  455. package/references/acp-factory-ref/LICENSE +0 -21
  456. package/references/acp-factory-ref/README.md +0 -341
  457. package/references/acp-factory-ref/package-lock.json +0 -3102
  458. package/references/acp-factory-ref/package.json +0 -96
  459. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  460. package/references/acp-factory-ref/python/LICENSE +0 -21
  461. package/references/acp-factory-ref/python/Makefile +0 -57
  462. package/references/acp-factory-ref/python/README.md +0 -253
  463. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  464. package/references/acp-factory-ref/python/tests/__init__.py +0 -0
  465. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  466. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  467. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  468. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  469. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  470. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  471. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  472. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  473. package/references/claude-code-acp/.prettierrc.json +0 -4
  474. package/references/claude-code-acp/CHANGELOG.md +0 -249
  475. package/references/claude-code-acp/LICENSE +0 -222
  476. package/references/claude-code-acp/README.md +0 -53
  477. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  478. package/references/claude-code-acp/eslint.config.js +0 -48
  479. package/references/claude-code-acp/package-lock.json +0 -4570
  480. package/references/claude-code-acp/package.json +0 -88
  481. package/references/claude-code-acp/scripts/release.sh +0 -119
  482. package/references/claude-code-acp/src/acp-agent.ts +0 -2065
  483. package/references/claude-code-acp/src/index.ts +0 -26
  484. package/references/claude-code-acp/src/lib.ts +0 -38
  485. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  486. package/references/claude-code-acp/src/settings.ts +0 -522
  487. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  488. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  489. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  490. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  491. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  492. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  493. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  494. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  495. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  496. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  497. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  498. package/references/claude-code-acp/src/tools.ts +0 -819
  499. package/references/claude-code-acp/src/utils.ts +0 -171
  500. package/references/claude-code-acp/tsconfig.json +0 -18
  501. package/references/claude-code-acp/vitest.config.ts +0 -19
  502. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -82
  503. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -9
  504. package/references/multi-agent-protocol/LICENSE +0 -21
  505. package/references/multi-agent-protocol/README.md +0 -113
  506. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -460
  507. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  508. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  509. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  510. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  511. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  512. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  513. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  514. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  515. package/references/multi-agent-protocol/package-lock.json +0 -3239
  516. package/references/multi-agent-protocol/package.json +0 -56
  517. package/references/multi-agent-protocol/schema/meta.json +0 -337
  518. package/references/multi-agent-protocol/schema/schema.json +0 -1828
@@ -1,150 +0,0 @@
1
- ## ADDED Requirements
2
-
3
- ### Requirement: Agent Spawning
4
-
5
- The system SHALL spawn new agents with unique IDs, session management, and event emission.
6
-
7
- #### Scenario: Spawn a child agent
8
- - **GIVEN** an initialized AgentManager and a running parent agent 'parent_1'
9
- - **WHEN** spawn({ task: 'implement auth', parent: 'parent_1' }) is called
10
- - **THEN** a unique agent_id is generated
11
- - **AND** a task is created for the agent (if task_id not provided)
12
- - **AND** an ACP session is started for the agent
13
- - **AND** a spawn event is emitted to the event store
14
- - **AND** default subscriptions are set up (agent, task, lineage)
15
- - **AND** the parent is subscribed to the child's subtree (unless subscribe_parent: false)
16
- - **AND** the function returns the new agent record
17
-
18
- #### Scenario: Spawn with custom configuration
19
- - **GIVEN** an initialized AgentManager
20
- - **WHEN** spawn({ task: 'review code', parent: 'parent_1', config: { model: 'claude-opus-4-20250514', timeout: 3600000 } }) is called
21
- - **THEN** the agent is created with the specified model and timeout
22
- - **AND** these config values are included in the spawn event payload
23
-
24
- #### Scenario: Spawn with explicit task_id
25
- - **GIVEN** an existing task 'task_123'
26
- - **WHEN** spawn({ task: 'implement feature', parent: 'parent_1', task_id: 'task_123' }) is called
27
- - **THEN** the agent is assigned to task 'task_123'
28
- - **AND** no new task is created
29
-
30
- ---
31
-
32
- ### Requirement: Agent Termination
33
-
34
- The system SHALL terminate agents and update their state appropriately.
35
-
36
- #### Scenario: Terminate a running agent
37
- - **GIVEN** a running agent 'agent_1' with session 'sess_123'
38
- - **WHEN** terminate('agent_1', 'completed') is called
39
- - **THEN** the ACP session is terminated
40
- - **AND** a terminate event is emitted with reason 'completed'
41
- - **AND** the agent's state in the view changes to 'stopped'
42
- - **AND** the agent's associated task status is updated to 'completed'
43
-
44
- #### Scenario: Terminate with failure
45
- - **GIVEN** a running agent 'agent_1'
46
- - **WHEN** terminate('agent_1', 'failed') is called
47
- - **THEN** a terminate event is emitted with reason 'failed'
48
- - **AND** the agent's associated task status is updated to 'failed'
49
-
50
- #### Scenario: Terminate non-existent agent
51
- - **GIVEN** no agent with id 'nonexistent'
52
- - **WHEN** terminate('nonexistent', 'stopped') is called
53
- - **THEN** an error is returned indicating agent not found
54
-
55
- ---
56
-
57
- ### Requirement: Agent Queries
58
-
59
- The system SHALL support querying agents by various criteria.
60
-
61
- #### Scenario: Get agent by ID
62
- - **GIVEN** an agent 'agent_1' exists
63
- - **WHEN** get('agent_1') is called
64
- - **THEN** the full agent record is returned including id, session_id, parent, state, task, config, timestamps
65
-
66
- #### Scenario: Get non-existent agent
67
- - **GIVEN** no agent with id 'nonexistent'
68
- - **WHEN** get('nonexistent') is called
69
- - **THEN** null is returned
70
-
71
- #### Scenario: List agents with filter
72
- - **GIVEN** agents in various states (running, stopped)
73
- - **WHEN** list({ state: 'running' }) is called
74
- - **THEN** only agents in 'running' state are returned
75
-
76
- #### Scenario: List agents by parent
77
- - **GIVEN** parent agent 'parent_1' with children 'child_1' and 'child_2'
78
- - **WHEN** list({ parent: 'parent_1' }) is called
79
- - **THEN** both 'child_1' and 'child_2' are returned
80
-
81
- ---
82
-
83
- ### Requirement: Agent Hierarchy
84
-
85
- The system SHALL track and query the agent hierarchy.
86
-
87
- #### Scenario: Get children of an agent
88
- - **GIVEN** agent 'manager_1' has spawned 'worker_1' and 'worker_2'
89
- - **WHEN** getChildren('manager_1') is called
90
- - **THEN** both 'worker_1' and 'worker_2' are returned
91
-
92
- #### Scenario: Get hierarchy tree
93
- - **GIVEN** a hierarchy: head_manager → manager_1 → [worker_1, worker_2]
94
- - **WHEN** getHierarchy('head_manager') is called
95
- - **THEN** a tree structure is returned with head_manager at root
96
- - **AND** manager_1 as a child with worker_1 and worker_2 as its children
97
- - **AND** each node includes agent_id, task, and state
98
-
99
- #### Scenario: Get hierarchy with depth limit
100
- - **GIVEN** a deep hierarchy (4+ levels)
101
- - **WHEN** getHierarchy('root', { depth: 2 }) is called
102
- - **THEN** only 2 levels of the hierarchy are returned
103
-
104
- ---
105
-
106
- ### Requirement: Head Manager Bootstrap
107
-
108
- The system SHALL create or retrieve the head manager agent on demand.
109
-
110
- #### Scenario: Create head manager on first interaction
111
- - **GIVEN** no agents exist in the system
112
- - **WHEN** getOrCreateHeadManager() is called
113
- - **THEN** a new head manager agent is spawned with parent: null
114
- - **AND** the agent's task is set to the system head_manager_task from config
115
- - **AND** the agent is returned
116
-
117
- #### Scenario: Return existing head manager
118
- - **GIVEN** a running head manager agent exists
119
- - **WHEN** getOrCreateHeadManager() is called
120
- - **THEN** the existing head manager is returned
121
- - **AND** no new agent is spawned
122
-
123
- #### Scenario: Create new head manager after previous stopped
124
- - **GIVEN** a stopped head manager agent exists (no running head manager)
125
- - **WHEN** getOrCreateHeadManager() is called
126
- - **THEN** a new head manager agent is spawned
127
- - **AND** the new agent is returned
128
-
129
- ---
130
-
131
- ### Requirement: System Prompt Generation
132
-
133
- The system SHALL generate appropriate system prompts for spawned agents.
134
-
135
- #### Scenario: Generate prompt for child agent
136
- - **GIVEN** spawning a child agent with parent 'manager_1' and task 'implement auth'
137
- - **WHEN** the system prompt is generated
138
- - **THEN** the prompt includes the agent_id and session_id
139
- - **AND** the prompt includes the task description
140
- - **AND** the prompt includes the parent agent_id
141
- - **AND** the prompt includes the lineage chain
142
- - **AND** the prompt includes available MCP tools
143
- - **AND** the prompt includes guidance for status reporting and messaging
144
-
145
- #### Scenario: Generate prompt for head manager
146
- - **GIVEN** spawning the head manager (parent: null)
147
- - **WHEN** the system prompt is generated
148
- - **THEN** the prompt includes head manager specific responsibilities
149
- - **AND** the prompt indicates this agent interacts directly with users
150
- - **AND** the prompt includes guidance for task decomposition and child spawning
@@ -1,258 +0,0 @@
1
- ## ADDED Requirements
2
-
3
- ### Requirement: API Server Initialization
4
-
5
- The system SHALL provide an HTTP/WebSocket server for CLI and client communication.
6
-
7
- #### Scenario: Start API server
8
- - **GIVEN** the multi-agent system is configured
9
- - **WHEN** the API server is started
10
- - **THEN** REST endpoints are available at the configured port (default 3000)
11
- - **AND** WebSocket connections are accepted for real-time updates
12
-
13
- #### Scenario: Server configuration
14
- - **GIVEN** config specifies port 4000 and host 'localhost'
15
- - **WHEN** the API server is started
16
- - **THEN** the server listens on localhost:4000
17
-
18
- ---
19
-
20
- ### Requirement: System Endpoints
21
-
22
- The system SHALL provide endpoints for system management.
23
-
24
- #### Scenario: Initialize system
25
- - **GIVEN** a fresh system start
26
- - **WHEN** POST /api/init is called
27
- - **THEN** the event store is initialized
28
- - **AND** configuration is loaded
29
- - **AND** the system is ready to accept commands
30
-
31
- #### Scenario: Get system status
32
- - **GIVEN** a running system with agents
33
- - **WHEN** GET /api/status is called
34
- - **THEN** the response includes system state (running/stopped)
35
- - **AND** head manager info (id, state)
36
- - **AND** aggregate counts (agents running, tasks in progress)
37
-
38
- ---
39
-
40
- ### Requirement: Conversation Endpoints
41
-
42
- The system SHALL provide endpoints for user conversation with the head manager.
43
-
44
- #### Scenario: Send message to head manager
45
- - **GIVEN** the system is running
46
- - **WHEN** POST /api/conversation/message with { content: 'Hello' } is called
47
- - **THEN** the head manager is created if not exists
48
- - **AND** the message is sent to the head manager via ACP
49
- - **AND** the response includes { status: 'sent', agent_id }
50
-
51
- #### Scenario: Get conversation history
52
- - **GIVEN** previous messages with the head manager
53
- - **WHEN** GET /api/conversation/history is called
54
- - **THEN** the conversation history is returned
55
- - **AND** messages include role (user/assistant), content, timestamp
56
-
57
- ---
58
-
59
- ### Requirement: Agent Endpoints
60
-
61
- The system SHALL provide read-only endpoints for agent information.
62
-
63
- #### Scenario: List agents
64
- - **GIVEN** multiple agents in the system
65
- - **WHEN** GET /api/agents is called
66
- - **THEN** all agents are returned with id, state, task summary, parent
67
-
68
- #### Scenario: List agents with filter
69
- - **GIVEN** agents in various states
70
- - **WHEN** GET /api/agents?state=running is called
71
- - **THEN** only running agents are returned
72
-
73
- #### Scenario: Get agent details
74
- - **GIVEN** agent 'agent_1' exists
75
- - **WHEN** GET /api/agents/agent_1 is called
76
- - **THEN** full agent details are returned including config, timestamps, children
77
-
78
- #### Scenario: Get agent hierarchy
79
- - **GIVEN** agent 'agent_1' with children
80
- - **WHEN** GET /api/agents/agent_1/hierarchy is called
81
- - **THEN** the subtree under agent_1 is returned as a tree structure
82
-
83
- ---
84
-
85
- ### Requirement: Task Endpoints
86
-
87
- The system SHALL provide read-only endpoints for task information.
88
-
89
- #### Scenario: List tasks
90
- - **GIVEN** multiple tasks in the system
91
- - **WHEN** GET /api/tasks is called
92
- - **THEN** all tasks are returned with id, description, status, assigned_agent
93
-
94
- #### Scenario: List tasks with filter
95
- - **GIVEN** tasks in various statuses
96
- - **WHEN** GET /api/tasks?status=in_progress is called
97
- - **THEN** only in-progress tasks are returned
98
-
99
- #### Scenario: Get task details
100
- - **GIVEN** task 'task_1' exists
101
- - **WHEN** GET /api/tasks/task_1 is called
102
- - **THEN** full task details are returned including inputs, outputs, artifacts, agent_history
103
-
104
- ---
105
-
106
- ### Requirement: Event Endpoints
107
-
108
- The system SHALL provide endpoints for event queries (debugging).
109
-
110
- #### Scenario: Query events
111
- - **GIVEN** events in the event store
112
- - **WHEN** GET /api/events?type=status is called
113
- - **THEN** status events are returned in chronological order
114
-
115
- #### Scenario: Query events with time range
116
- - **GIVEN** events spanning multiple timestamps
117
- - **WHEN** GET /api/events?after=timestamp1&before=timestamp2 is called
118
- - **THEN** only events within the time range are returned
119
-
120
- ---
121
-
122
- ### Requirement: WebSocket Real-time Updates
123
-
124
- The system SHALL provide WebSocket channels for real-time updates.
125
-
126
- #### Scenario: Subscribe to agent updates
127
- - **GIVEN** a WebSocket connection
128
- - **WHEN** client sends { type: 'subscribe', channel: 'agents' }
129
- - **THEN** the client receives agent:update events when agents change state
130
-
131
- #### Scenario: Subscribe to task updates
132
- - **GIVEN** a WebSocket connection
133
- - **WHEN** client sends { type: 'subscribe', channel: 'tasks' }
134
- - **THEN** the client receives task:update events when tasks change
135
-
136
- #### Scenario: Subscribe to conversation
137
- - **GIVEN** a WebSocket connection
138
- - **WHEN** client sends { type: 'subscribe', channel: 'conversation' }
139
- - **THEN** the client receives conversation:message events for head manager responses
140
-
141
- #### Scenario: TinyBase to WebSocket bridge
142
- - **GIVEN** a client subscribed to 'agents' channel
143
- - **WHEN** a spawn event is emitted and the agents view updates
144
- - **THEN** the WebSocket client receives the agent:update event in real-time
145
-
146
- ---
147
-
148
- ### Requirement: CLI Start Command
149
-
150
- The system SHALL provide a command to start the multi-agent system.
151
-
152
- #### Scenario: Start system
153
- - **GIVEN** the CLI is installed
154
- - **WHEN** `multiagent start` is executed
155
- - **THEN** the API server starts
156
- - **AND** the event store is initialized
157
- - **AND** the MCP server starts
158
- - **AND** a success message is displayed
159
-
160
- #### Scenario: Start with custom port
161
- - **GIVEN** the CLI is installed
162
- - **WHEN** `multiagent start --port 4000` is executed
163
- - **THEN** the API server starts on port 4000
164
-
165
- ---
166
-
167
- ### Requirement: CLI Chat Command
168
-
169
- The system SHALL provide an interactive chat mode.
170
-
171
- #### Scenario: Enter chat mode
172
- - **GIVEN** the system is running
173
- - **WHEN** `multiagent chat` is executed
174
- - **THEN** a prompt appears for user input
175
- - **AND** a WebSocket connection is established for real-time updates
176
-
177
- #### Scenario: Send message in chat
178
- - **GIVEN** chat mode is active
179
- - **WHEN** user types a message and presses enter
180
- - **THEN** the message is sent to the head manager
181
- - **AND** the response streams back and is displayed
182
-
183
- #### Scenario: Real-time status in chat
184
- - **GIVEN** chat mode is active with verbose flag
185
- - **WHEN** an agent status changes
186
- - **THEN** a status line is displayed: [status] Agent X: running
187
-
188
- ---
189
-
190
- ### Requirement: CLI Status Commands
191
-
192
- The system SHALL provide commands to view system state.
193
-
194
- #### Scenario: System status
195
- - **GIVEN** the system is running
196
- - **WHEN** `multiagent status` is executed
197
- - **THEN** system status is displayed (running/stopped)
198
- - **AND** head manager info is displayed
199
- - **AND** aggregate counts are displayed (agents, tasks)
200
-
201
- #### Scenario: List agents
202
- - **GIVEN** agents exist in the system
203
- - **WHEN** `multiagent agents` is executed
204
- - **THEN** a table of agents is displayed with id, state, task
205
-
206
- #### Scenario: Agent details
207
- - **GIVEN** agent 'agent_1' exists
208
- - **WHEN** `multiagent agents agent_1` is executed
209
- - **THEN** detailed agent info is displayed
210
-
211
- #### Scenario: List tasks
212
- - **GIVEN** tasks exist in the system
213
- - **WHEN** `multiagent tasks` is executed
214
- - **THEN** a table of tasks is displayed with id, status, assigned_agent
215
-
216
- #### Scenario: Task details
217
- - **GIVEN** task 'task_1' exists
218
- - **WHEN** `multiagent tasks task_1` is executed
219
- - **THEN** detailed task info is displayed
220
-
221
- ---
222
-
223
- ### Requirement: CLI Hierarchy Command
224
-
225
- The system SHALL provide a command to visualize the agent tree.
226
-
227
- #### Scenario: Display hierarchy
228
- - **GIVEN** a multi-level agent hierarchy
229
- - **WHEN** `multiagent hierarchy` is executed
230
- - **THEN** a tree visualization is displayed:
231
- ```
232
- agent_abc123 (head_manager) [running]
233
- ├── agent_def456 (architect) [completed]
234
- ├── agent_ghi789 (implementer) [running]
235
- │ ├── agent_jkl012 (auth_module) [completed]
236
- │ └── agent_mno345 (api_routes) [running]
237
- └── agent_pqr678 (reviewer) [stopped]
238
- ```
239
-
240
- ---
241
-
242
- ### Requirement: CLI Management Commands
243
-
244
- The system SHALL provide commands for system management.
245
-
246
- #### Scenario: Clear system
247
- - **GIVEN** the system has history
248
- - **WHEN** `multiagent clear` is executed
249
- - **THEN** the user is prompted for confirmation
250
- - **AND** if confirmed, the event store is cleared
251
- - **AND** a new head manager will be created on next interaction
252
-
253
- #### Scenario: Stop system
254
- - **GIVEN** the system is running
255
- - **WHEN** `multiagent stop` is executed
256
- - **THEN** all running agents are terminated gracefully
257
- - **AND** the API server stops
258
- - **AND** state is persisted
@@ -1,160 +0,0 @@
1
- ## ADDED Requirements
2
-
3
- ### Requirement: Event Store Initialization
4
-
5
- The system SHALL provide an EventStore that initializes TinyBase with persistent storage.
6
-
7
- #### Scenario: Store initialization with default config
8
- - **GIVEN** no existing store file
9
- - **WHEN** createEventStore() is called with default config
10
- - **THEN** a new TinyBase store is created at ~/.multiagent/store.db
11
- - **AND** the events table is created with the correct schema
12
- - **AND** materialized view tables are initialized (agents, tasks, messages, subscriptions)
13
-
14
- #### Scenario: Store initialization with existing data
15
- - **GIVEN** an existing store file with previous events
16
- - **WHEN** createEventStore() is called
17
- - **THEN** the existing store is loaded
18
- - **AND** materialized views are rebuilt from the event log
19
-
20
- ---
21
-
22
- ### Requirement: Event Emission
23
-
24
- The system SHALL emit events to an append-only log with auto-generated IDs and timestamps.
25
-
26
- #### Scenario: Emit a spawn event
27
- - **GIVEN** an initialized EventStore
28
- - **WHEN** emit({ type: 'spawn', source: { agent_id: 'parent_1' }, payload: { agent_id: 'child_1', task: 'do work' } }) is called
29
- - **THEN** an event is created with a unique event_id
30
- - **AND** the event has a timestamp set to the current time
31
- - **AND** the event is appended to the events table
32
- - **AND** the function returns the complete event with id and timestamp
33
-
34
- #### Scenario: Event immutability
35
- - **GIVEN** an event has been emitted
36
- - **WHEN** any attempt is made to modify the event
37
- - **THEN** the modification fails or is rejected
38
- - **AND** the original event remains unchanged
39
-
40
- ---
41
-
42
- ### Requirement: Event Querying
43
-
44
- The system SHALL support querying events with filters.
45
-
46
- #### Scenario: Query events by type
47
- - **GIVEN** an EventStore with spawn, status, and message events
48
- - **WHEN** query({ type: 'status' }) is called
49
- - **THEN** only status events are returned
50
- - **AND** events are returned in chronological order
51
-
52
- #### Scenario: Query events by source agent
53
- - **GIVEN** an EventStore with events from multiple agents
54
- - **WHEN** query({ source_agent_id: 'agent_1' }) is called
55
- - **THEN** only events where source.agent_id equals 'agent_1' are returned
56
-
57
- #### Scenario: Query events by time range
58
- - **GIVEN** an EventStore with events spanning multiple timestamps
59
- - **WHEN** query({ after: timestamp1, before: timestamp2 }) is called
60
- - **THEN** only events within the time range are returned
61
-
62
- ---
63
-
64
- ### Requirement: Agent View Projection
65
-
66
- The system SHALL maintain a materialized view of agents derived from events.
67
-
68
- #### Scenario: Agent created on spawn event
69
- - **GIVEN** an empty agents view
70
- - **WHEN** a spawn event is emitted for agent_id 'agent_1'
71
- - **THEN** the agents view contains an entry for 'agent_1'
72
- - **AND** the entry has state 'spawning'
73
- - **AND** the entry includes session_id, parent, task, and created_at from the event
74
-
75
- #### Scenario: Agent state updated on status event
76
- - **GIVEN** an agent in 'spawning' state
77
- - **WHEN** a status event with status_type 'started' is emitted for that agent
78
- - **THEN** the agent's state changes to 'running'
79
- - **AND** started_at is set to the event timestamp
80
-
81
- #### Scenario: Agent state updated on terminate event
82
- - **GIVEN** an agent in 'running' state
83
- - **WHEN** a terminate event is emitted for that agent with reason 'completed'
84
- - **THEN** the agent's state changes to 'stopped'
85
- - **AND** stop_reason is set to 'completed'
86
- - **AND** stopped_at is set to the event timestamp
87
-
88
- ---
89
-
90
- ### Requirement: Task View Projection
91
-
92
- The system SHALL maintain a materialized view of tasks derived from events.
93
-
94
- #### Scenario: Task created on task event
95
- - **GIVEN** an empty tasks view
96
- - **WHEN** a task event with action 'created' is emitted
97
- - **THEN** the tasks view contains an entry for the task_id
98
- - **AND** the entry has status 'pending'
99
- - **AND** the entry includes description and created_by from the event
100
-
101
- #### Scenario: Task assigned on task event
102
- - **GIVEN** a task in 'pending' status
103
- - **WHEN** a task event with action 'assigned' is emitted
104
- - **THEN** the task's status changes to 'assigned'
105
- - **AND** assigned_agent is set to the agent_id from the event
106
-
107
- #### Scenario: Task status change
108
- - **GIVEN** a task in 'assigned' status
109
- - **WHEN** a task event with action 'status_change' and status 'in_progress' is emitted
110
- - **THEN** the task's status changes to 'in_progress'
111
-
112
- ---
113
-
114
- ### Requirement: Message Queue Projection
115
-
116
- The system SHALL maintain a materialized view of pending messages per agent.
117
-
118
- #### Scenario: Message added to recipient queue
119
- - **GIVEN** an agent 'agent_1' with an empty message queue
120
- - **WHEN** a message event is emitted with target.agent_id 'agent_1'
121
- - **THEN** the message appears in agent_1's pending messages
122
- - **AND** the message includes id, from, content, timestamp
123
-
124
- #### Scenario: Message delivered to multiple recipients
125
- - **GIVEN** agents 'agent_1' and 'agent_2' subscribed to topic 'updates'
126
- - **WHEN** a message event is emitted with target.topic 'updates'
127
- - **THEN** the message appears in both agent_1's and agent_2's pending queues
128
-
129
- ---
130
-
131
- ### Requirement: Subscription Projection
132
-
133
- The system SHALL maintain a materialized view of agent subscriptions.
134
-
135
- #### Scenario: Subscription added
136
- - **GIVEN** an agent 'agent_1' with no subscriptions
137
- - **WHEN** a subscription is registered for { type: 'topic', target: 'errors' }
138
- - **THEN** the subscriptions view shows agent_1 subscribed to topic 'errors'
139
-
140
- #### Scenario: Query subscribers by topic
141
- - **GIVEN** multiple agents subscribed to topic 'discoveries'
142
- - **WHEN** getSubscribers({ type: 'topic', target: 'discoveries' }) is called
143
- - **THEN** all agent_ids subscribed to that topic are returned
144
-
145
- ---
146
-
147
- ### Requirement: Real-time View Updates
148
-
149
- The system SHALL provide reactive updates when views change.
150
-
151
- #### Scenario: Subscribe to agent view changes
152
- - **GIVEN** a subscription to agent view changes
153
- - **WHEN** a spawn event is emitted
154
- - **THEN** the subscriber callback is invoked with the updated agent entry
155
-
156
- #### Scenario: Subscribe to specific agent changes
157
- - **GIVEN** a subscription to changes for agent 'agent_1'
158
- - **WHEN** a status event is emitted for 'agent_1'
159
- - **THEN** the subscriber callback is invoked
160
- - **AND** changes to other agents do not trigger the callback