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,31 +0,0 @@
1
- # Project Context
2
-
3
- ## Purpose
4
- [Describe your project's purpose and goals]
5
-
6
- ## Tech Stack
7
- - [List your primary technologies]
8
- - [e.g., TypeScript, React, Node.js]
9
-
10
- ## Project Conventions
11
-
12
- ### Code Style
13
- [Describe your code style preferences, formatting rules, and naming conventions]
14
-
15
- ### Architecture Patterns
16
- [Document your architectural decisions and patterns]
17
-
18
- ### Testing Strategy
19
- [Explain your testing approach and requirements]
20
-
21
- ### Git Workflow
22
- [Describe your branching strategy and commit conventions]
23
-
24
- ## Domain Context
25
- [Add domain-specific knowledge that AI assistants need to understand]
26
-
27
- ## Important Constraints
28
- [List any technical, business, or regulatory constraints]
29
-
30
- ## External Dependencies
31
- [Document key external services, APIs, or systems]
@@ -1,154 +0,0 @@
1
- # agent-manager Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: Agent Spawning
7
-
8
- The system SHALL spawn new agents with unique IDs, session management, and event emission.
9
-
10
- #### Scenario: Spawn a child agent
11
- - **GIVEN** an initialized AgentManager and a running parent agent 'parent_1'
12
- - **WHEN** spawn({ task: 'implement auth', parent: 'parent_1' }) is called
13
- - **THEN** a unique agent_id is generated
14
- - **AND** a task is created for the agent (if task_id not provided)
15
- - **AND** an ACP session is started for the agent
16
- - **AND** a spawn event is emitted to the event store
17
- - **AND** default subscriptions are set up (agent, task, lineage)
18
- - **AND** the parent is subscribed to the child's subtree (unless subscribe_parent: false)
19
- - **AND** the function returns the new agent record
20
-
21
- #### Scenario: Spawn with custom configuration
22
- - **GIVEN** an initialized AgentManager
23
- - **WHEN** spawn({ task: 'review code', parent: 'parent_1', config: { model: 'claude-opus-4-20250514', timeout: 3600000 } }) is called
24
- - **THEN** the agent is created with the specified model and timeout
25
- - **AND** these config values are included in the spawn event payload
26
-
27
- #### Scenario: Spawn with explicit task_id
28
- - **GIVEN** an existing task 'task_123'
29
- - **WHEN** spawn({ task: 'implement feature', parent: 'parent_1', task_id: 'task_123' }) is called
30
- - **THEN** the agent is assigned to task 'task_123'
31
- - **AND** no new task is created
32
-
33
- ---
34
-
35
- ### Requirement: Agent Termination
36
-
37
- The system SHALL terminate agents and update their state appropriately.
38
-
39
- #### Scenario: Terminate a running agent
40
- - **GIVEN** a running agent 'agent_1' with session 'sess_123'
41
- - **WHEN** terminate('agent_1', 'completed') is called
42
- - **THEN** the ACP session is terminated
43
- - **AND** a terminate event is emitted with reason 'completed'
44
- - **AND** the agent's state in the view changes to 'stopped'
45
- - **AND** the agent's associated task status is updated to 'completed'
46
-
47
- #### Scenario: Terminate with failure
48
- - **GIVEN** a running agent 'agent_1'
49
- - **WHEN** terminate('agent_1', 'failed') is called
50
- - **THEN** a terminate event is emitted with reason 'failed'
51
- - **AND** the agent's associated task status is updated to 'failed'
52
-
53
- #### Scenario: Terminate non-existent agent
54
- - **GIVEN** no agent with id 'nonexistent'
55
- - **WHEN** terminate('nonexistent', 'stopped') is called
56
- - **THEN** an error is returned indicating agent not found
57
-
58
- ---
59
-
60
- ### Requirement: Agent Queries
61
-
62
- The system SHALL support querying agents by various criteria.
63
-
64
- #### Scenario: Get agent by ID
65
- - **GIVEN** an agent 'agent_1' exists
66
- - **WHEN** get('agent_1') is called
67
- - **THEN** the full agent record is returned including id, session_id, parent, state, task, config, timestamps
68
-
69
- #### Scenario: Get non-existent agent
70
- - **GIVEN** no agent with id 'nonexistent'
71
- - **WHEN** get('nonexistent') is called
72
- - **THEN** null is returned
73
-
74
- #### Scenario: List agents with filter
75
- - **GIVEN** agents in various states (running, stopped)
76
- - **WHEN** list({ state: 'running' }) is called
77
- - **THEN** only agents in 'running' state are returned
78
-
79
- #### Scenario: List agents by parent
80
- - **GIVEN** parent agent 'parent_1' with children 'child_1' and 'child_2'
81
- - **WHEN** list({ parent: 'parent_1' }) is called
82
- - **THEN** both 'child_1' and 'child_2' are returned
83
-
84
- ---
85
-
86
- ### Requirement: Agent Hierarchy
87
-
88
- The system SHALL track and query the agent hierarchy.
89
-
90
- #### Scenario: Get children of an agent
91
- - **GIVEN** agent 'manager_1' has spawned 'worker_1' and 'worker_2'
92
- - **WHEN** getChildren('manager_1') is called
93
- - **THEN** both 'worker_1' and 'worker_2' are returned
94
-
95
- #### Scenario: Get hierarchy tree
96
- - **GIVEN** a hierarchy: head_manager → manager_1 → [worker_1, worker_2]
97
- - **WHEN** getHierarchy('head_manager') is called
98
- - **THEN** a tree structure is returned with head_manager at root
99
- - **AND** manager_1 as a child with worker_1 and worker_2 as its children
100
- - **AND** each node includes agent_id, task, and state
101
-
102
- #### Scenario: Get hierarchy with depth limit
103
- - **GIVEN** a deep hierarchy (4+ levels)
104
- - **WHEN** getHierarchy('root', { depth: 2 }) is called
105
- - **THEN** only 2 levels of the hierarchy are returned
106
-
107
- ---
108
-
109
- ### Requirement: Head Manager Bootstrap
110
-
111
- The system SHALL create or retrieve the head manager agent on demand.
112
-
113
- #### Scenario: Create head manager on first interaction
114
- - **GIVEN** no agents exist in the system
115
- - **WHEN** getOrCreateHeadManager() is called
116
- - **THEN** a new head manager agent is spawned with parent: null
117
- - **AND** the agent's task is set to the system head_manager_task from config
118
- - **AND** the agent is returned
119
-
120
- #### Scenario: Return existing head manager
121
- - **GIVEN** a running head manager agent exists
122
- - **WHEN** getOrCreateHeadManager() is called
123
- - **THEN** the existing head manager is returned
124
- - **AND** no new agent is spawned
125
-
126
- #### Scenario: Create new head manager after previous stopped
127
- - **GIVEN** a stopped head manager agent exists (no running head manager)
128
- - **WHEN** getOrCreateHeadManager() is called
129
- - **THEN** a new head manager agent is spawned
130
- - **AND** the new agent is returned
131
-
132
- ---
133
-
134
- ### Requirement: System Prompt Generation
135
-
136
- The system SHALL generate appropriate system prompts for spawned agents.
137
-
138
- #### Scenario: Generate prompt for child agent
139
- - **GIVEN** spawning a child agent with parent 'manager_1' and task 'implement auth'
140
- - **WHEN** the system prompt is generated
141
- - **THEN** the prompt includes the agent_id and session_id
142
- - **AND** the prompt includes the task description
143
- - **AND** the prompt includes the parent agent_id
144
- - **AND** the prompt includes the lineage chain
145
- - **AND** the prompt includes available MCP tools
146
- - **AND** the prompt includes guidance for status reporting and messaging
147
-
148
- #### Scenario: Generate prompt for head manager
149
- - **GIVEN** spawning the head manager (parent: null)
150
- - **WHEN** the system prompt is generated
151
- - **THEN** the prompt includes head manager specific responsibilities
152
- - **AND** the prompt indicates this agent interacts directly with users
153
- - **AND** the prompt includes guidance for task decomposition and child spawning
154
-
@@ -1,262 +0,0 @@
1
- # cli-api Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: API Server Initialization
7
-
8
- The system SHALL provide an HTTP/WebSocket server for CLI and client communication.
9
-
10
- #### Scenario: Start API server
11
- - **GIVEN** the multi-agent system is configured
12
- - **WHEN** the API server is started
13
- - **THEN** REST endpoints are available at the configured port (default 3000)
14
- - **AND** WebSocket connections are accepted for real-time updates
15
-
16
- #### Scenario: Server configuration
17
- - **GIVEN** config specifies port 4000 and host 'localhost'
18
- - **WHEN** the API server is started
19
- - **THEN** the server listens on localhost:4000
20
-
21
- ---
22
-
23
- ### Requirement: System Endpoints
24
-
25
- The system SHALL provide endpoints for system management.
26
-
27
- #### Scenario: Initialize system
28
- - **GIVEN** a fresh system start
29
- - **WHEN** POST /api/init is called
30
- - **THEN** the event store is initialized
31
- - **AND** configuration is loaded
32
- - **AND** the system is ready to accept commands
33
-
34
- #### Scenario: Get system status
35
- - **GIVEN** a running system with agents
36
- - **WHEN** GET /api/status is called
37
- - **THEN** the response includes system state (running/stopped)
38
- - **AND** head manager info (id, state)
39
- - **AND** aggregate counts (agents running, tasks in progress)
40
-
41
- ---
42
-
43
- ### Requirement: Conversation Endpoints
44
-
45
- The system SHALL provide endpoints for user conversation with the head manager.
46
-
47
- #### Scenario: Send message to head manager
48
- - **GIVEN** the system is running
49
- - **WHEN** POST /api/conversation/message with { content: 'Hello' } is called
50
- - **THEN** the head manager is created if not exists
51
- - **AND** the message is sent to the head manager via ACP
52
- - **AND** the response includes { status: 'sent', agent_id }
53
-
54
- #### Scenario: Get conversation history
55
- - **GIVEN** previous messages with the head manager
56
- - **WHEN** GET /api/conversation/history is called
57
- - **THEN** the conversation history is returned
58
- - **AND** messages include role (user/assistant), content, timestamp
59
-
60
- ---
61
-
62
- ### Requirement: Agent Endpoints
63
-
64
- The system SHALL provide read-only endpoints for agent information.
65
-
66
- #### Scenario: List agents
67
- - **GIVEN** multiple agents in the system
68
- - **WHEN** GET /api/agents is called
69
- - **THEN** all agents are returned with id, state, task summary, parent
70
-
71
- #### Scenario: List agents with filter
72
- - **GIVEN** agents in various states
73
- - **WHEN** GET /api/agents?state=running is called
74
- - **THEN** only running agents are returned
75
-
76
- #### Scenario: Get agent details
77
- - **GIVEN** agent 'agent_1' exists
78
- - **WHEN** GET /api/agents/agent_1 is called
79
- - **THEN** full agent details are returned including config, timestamps, children
80
-
81
- #### Scenario: Get agent hierarchy
82
- - **GIVEN** agent 'agent_1' with children
83
- - **WHEN** GET /api/agents/agent_1/hierarchy is called
84
- - **THEN** the subtree under agent_1 is returned as a tree structure
85
-
86
- ---
87
-
88
- ### Requirement: Task Endpoints
89
-
90
- The system SHALL provide read-only endpoints for task information.
91
-
92
- #### Scenario: List tasks
93
- - **GIVEN** multiple tasks in the system
94
- - **WHEN** GET /api/tasks is called
95
- - **THEN** all tasks are returned with id, description, status, assigned_agent
96
-
97
- #### Scenario: List tasks with filter
98
- - **GIVEN** tasks in various statuses
99
- - **WHEN** GET /api/tasks?status=in_progress is called
100
- - **THEN** only in-progress tasks are returned
101
-
102
- #### Scenario: Get task details
103
- - **GIVEN** task 'task_1' exists
104
- - **WHEN** GET /api/tasks/task_1 is called
105
- - **THEN** full task details are returned including inputs, outputs, artifacts, agent_history
106
-
107
- ---
108
-
109
- ### Requirement: Event Endpoints
110
-
111
- The system SHALL provide endpoints for event queries (debugging).
112
-
113
- #### Scenario: Query events
114
- - **GIVEN** events in the event store
115
- - **WHEN** GET /api/events?type=status is called
116
- - **THEN** status events are returned in chronological order
117
-
118
- #### Scenario: Query events with time range
119
- - **GIVEN** events spanning multiple timestamps
120
- - **WHEN** GET /api/events?after=timestamp1&before=timestamp2 is called
121
- - **THEN** only events within the time range are returned
122
-
123
- ---
124
-
125
- ### Requirement: WebSocket Real-time Updates
126
-
127
- The system SHALL provide WebSocket channels for real-time updates.
128
-
129
- #### Scenario: Subscribe to agent updates
130
- - **GIVEN** a WebSocket connection
131
- - **WHEN** client sends { type: 'subscribe', channel: 'agents' }
132
- - **THEN** the client receives agent:update events when agents change state
133
-
134
- #### Scenario: Subscribe to task updates
135
- - **GIVEN** a WebSocket connection
136
- - **WHEN** client sends { type: 'subscribe', channel: 'tasks' }
137
- - **THEN** the client receives task:update events when tasks change
138
-
139
- #### Scenario: Subscribe to conversation
140
- - **GIVEN** a WebSocket connection
141
- - **WHEN** client sends { type: 'subscribe', channel: 'conversation' }
142
- - **THEN** the client receives conversation:message events for head manager responses
143
-
144
- #### Scenario: TinyBase to WebSocket bridge
145
- - **GIVEN** a client subscribed to 'agents' channel
146
- - **WHEN** a spawn event is emitted and the agents view updates
147
- - **THEN** the WebSocket client receives the agent:update event in real-time
148
-
149
- ---
150
-
151
- ### Requirement: CLI Start Command
152
-
153
- The system SHALL provide a command to start the multi-agent system.
154
-
155
- #### Scenario: Start system
156
- - **GIVEN** the CLI is installed
157
- - **WHEN** `multiagent start` is executed
158
- - **THEN** the API server starts
159
- - **AND** the event store is initialized
160
- - **AND** the MCP server starts
161
- - **AND** a success message is displayed
162
-
163
- #### Scenario: Start with custom port
164
- - **GIVEN** the CLI is installed
165
- - **WHEN** `multiagent start --port 4000` is executed
166
- - **THEN** the API server starts on port 4000
167
-
168
- ---
169
-
170
- ### Requirement: CLI Chat Command
171
-
172
- The system SHALL provide an interactive chat mode.
173
-
174
- #### Scenario: Enter chat mode
175
- - **GIVEN** the system is running
176
- - **WHEN** `multiagent chat` is executed
177
- - **THEN** a prompt appears for user input
178
- - **AND** a WebSocket connection is established for real-time updates
179
-
180
- #### Scenario: Send message in chat
181
- - **GIVEN** chat mode is active
182
- - **WHEN** user types a message and presses enter
183
- - **THEN** the message is sent to the head manager
184
- - **AND** the response streams back and is displayed
185
-
186
- #### Scenario: Real-time status in chat
187
- - **GIVEN** chat mode is active with verbose flag
188
- - **WHEN** an agent status changes
189
- - **THEN** a status line is displayed: [status] Agent X: running
190
-
191
- ---
192
-
193
- ### Requirement: CLI Status Commands
194
-
195
- The system SHALL provide commands to view system state.
196
-
197
- #### Scenario: System status
198
- - **GIVEN** the system is running
199
- - **WHEN** `multiagent status` is executed
200
- - **THEN** system status is displayed (running/stopped)
201
- - **AND** head manager info is displayed
202
- - **AND** aggregate counts are displayed (agents, tasks)
203
-
204
- #### Scenario: List agents
205
- - **GIVEN** agents exist in the system
206
- - **WHEN** `multiagent agents` is executed
207
- - **THEN** a table of agents is displayed with id, state, task
208
-
209
- #### Scenario: Agent details
210
- - **GIVEN** agent 'agent_1' exists
211
- - **WHEN** `multiagent agents agent_1` is executed
212
- - **THEN** detailed agent info is displayed
213
-
214
- #### Scenario: List tasks
215
- - **GIVEN** tasks exist in the system
216
- - **WHEN** `multiagent tasks` is executed
217
- - **THEN** a table of tasks is displayed with id, status, assigned_agent
218
-
219
- #### Scenario: Task details
220
- - **GIVEN** task 'task_1' exists
221
- - **WHEN** `multiagent tasks task_1` is executed
222
- - **THEN** detailed task info is displayed
223
-
224
- ---
225
-
226
- ### Requirement: CLI Hierarchy Command
227
-
228
- The system SHALL provide a command to visualize the agent tree.
229
-
230
- #### Scenario: Display hierarchy
231
- - **GIVEN** a multi-level agent hierarchy
232
- - **WHEN** `multiagent hierarchy` is executed
233
- - **THEN** a tree visualization is displayed:
234
- ```
235
- agent_abc123 (head_manager) [running]
236
- ├── agent_def456 (architect) [completed]
237
- ├── agent_ghi789 (implementer) [running]
238
- │ ├── agent_jkl012 (auth_module) [completed]
239
- │ └── agent_mno345 (api_routes) [running]
240
- └── agent_pqr678 (reviewer) [stopped]
241
- ```
242
-
243
- ---
244
-
245
- ### Requirement: CLI Management Commands
246
-
247
- The system SHALL provide commands for system management.
248
-
249
- #### Scenario: Clear system
250
- - **GIVEN** the system has history
251
- - **WHEN** `multiagent clear` is executed
252
- - **THEN** the user is prompted for confirmation
253
- - **AND** if confirmed, the event store is cleared
254
- - **AND** a new head manager will be created on next interaction
255
-
256
- #### Scenario: Stop system
257
- - **GIVEN** the system is running
258
- - **WHEN** `multiagent stop` is executed
259
- - **THEN** all running agents are terminated gracefully
260
- - **AND** the API server stops
261
- - **AND** state is persisted
262
-
@@ -1,164 +0,0 @@
1
- # event-store Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: Event Store Initialization
7
-
8
- The system SHALL provide an EventStore that initializes TinyBase with persistent storage.
9
-
10
- #### Scenario: Store initialization with default config
11
- - **GIVEN** no existing store file
12
- - **WHEN** createEventStore() is called with default config
13
- - **THEN** a new TinyBase store is created at ~/.multiagent/store.db
14
- - **AND** the events table is created with the correct schema
15
- - **AND** materialized view tables are initialized (agents, tasks, messages, subscriptions)
16
-
17
- #### Scenario: Store initialization with existing data
18
- - **GIVEN** an existing store file with previous events
19
- - **WHEN** createEventStore() is called
20
- - **THEN** the existing store is loaded
21
- - **AND** materialized views are rebuilt from the event log
22
-
23
- ---
24
-
25
- ### Requirement: Event Emission
26
-
27
- The system SHALL emit events to an append-only log with auto-generated IDs and timestamps.
28
-
29
- #### Scenario: Emit a spawn event
30
- - **GIVEN** an initialized EventStore
31
- - **WHEN** emit({ type: 'spawn', source: { agent_id: 'parent_1' }, payload: { agent_id: 'child_1', task: 'do work' } }) is called
32
- - **THEN** an event is created with a unique event_id
33
- - **AND** the event has a timestamp set to the current time
34
- - **AND** the event is appended to the events table
35
- - **AND** the function returns the complete event with id and timestamp
36
-
37
- #### Scenario: Event immutability
38
- - **GIVEN** an event has been emitted
39
- - **WHEN** any attempt is made to modify the event
40
- - **THEN** the modification fails or is rejected
41
- - **AND** the original event remains unchanged
42
-
43
- ---
44
-
45
- ### Requirement: Event Querying
46
-
47
- The system SHALL support querying events with filters.
48
-
49
- #### Scenario: Query events by type
50
- - **GIVEN** an EventStore with spawn, status, and message events
51
- - **WHEN** query({ type: 'status' }) is called
52
- - **THEN** only status events are returned
53
- - **AND** events are returned in chronological order
54
-
55
- #### Scenario: Query events by source agent
56
- - **GIVEN** an EventStore with events from multiple agents
57
- - **WHEN** query({ source_agent_id: 'agent_1' }) is called
58
- - **THEN** only events where source.agent_id equals 'agent_1' are returned
59
-
60
- #### Scenario: Query events by time range
61
- - **GIVEN** an EventStore with events spanning multiple timestamps
62
- - **WHEN** query({ after: timestamp1, before: timestamp2 }) is called
63
- - **THEN** only events within the time range are returned
64
-
65
- ---
66
-
67
- ### Requirement: Agent View Projection
68
-
69
- The system SHALL maintain a materialized view of agents derived from events.
70
-
71
- #### Scenario: Agent created on spawn event
72
- - **GIVEN** an empty agents view
73
- - **WHEN** a spawn event is emitted for agent_id 'agent_1'
74
- - **THEN** the agents view contains an entry for 'agent_1'
75
- - **AND** the entry has state 'spawning'
76
- - **AND** the entry includes session_id, parent, task, and created_at from the event
77
-
78
- #### Scenario: Agent state updated on status event
79
- - **GIVEN** an agent in 'spawning' state
80
- - **WHEN** a status event with status_type 'started' is emitted for that agent
81
- - **THEN** the agent's state changes to 'running'
82
- - **AND** started_at is set to the event timestamp
83
-
84
- #### Scenario: Agent state updated on terminate event
85
- - **GIVEN** an agent in 'running' state
86
- - **WHEN** a terminate event is emitted for that agent with reason 'completed'
87
- - **THEN** the agent's state changes to 'stopped'
88
- - **AND** stop_reason is set to 'completed'
89
- - **AND** stopped_at is set to the event timestamp
90
-
91
- ---
92
-
93
- ### Requirement: Task View Projection
94
-
95
- The system SHALL maintain a materialized view of tasks derived from events.
96
-
97
- #### Scenario: Task created on task event
98
- - **GIVEN** an empty tasks view
99
- - **WHEN** a task event with action 'created' is emitted
100
- - **THEN** the tasks view contains an entry for the task_id
101
- - **AND** the entry has status 'pending'
102
- - **AND** the entry includes description and created_by from the event
103
-
104
- #### Scenario: Task assigned on task event
105
- - **GIVEN** a task in 'pending' status
106
- - **WHEN** a task event with action 'assigned' is emitted
107
- - **THEN** the task's status changes to 'assigned'
108
- - **AND** assigned_agent is set to the agent_id from the event
109
-
110
- #### Scenario: Task status change
111
- - **GIVEN** a task in 'assigned' status
112
- - **WHEN** a task event with action 'status_change' and status 'in_progress' is emitted
113
- - **THEN** the task's status changes to 'in_progress'
114
-
115
- ---
116
-
117
- ### Requirement: Message Queue Projection
118
-
119
- The system SHALL maintain a materialized view of pending messages per agent.
120
-
121
- #### Scenario: Message added to recipient queue
122
- - **GIVEN** an agent 'agent_1' with an empty message queue
123
- - **WHEN** a message event is emitted with target.agent_id 'agent_1'
124
- - **THEN** the message appears in agent_1's pending messages
125
- - **AND** the message includes id, from, content, timestamp
126
-
127
- #### Scenario: Message delivered to multiple recipients
128
- - **GIVEN** agents 'agent_1' and 'agent_2' subscribed to topic 'updates'
129
- - **WHEN** a message event is emitted with target.topic 'updates'
130
- - **THEN** the message appears in both agent_1's and agent_2's pending queues
131
-
132
- ---
133
-
134
- ### Requirement: Subscription Projection
135
-
136
- The system SHALL maintain a materialized view of agent subscriptions.
137
-
138
- #### Scenario: Subscription added
139
- - **GIVEN** an agent 'agent_1' with no subscriptions
140
- - **WHEN** a subscription is registered for { type: 'topic', target: 'errors' }
141
- - **THEN** the subscriptions view shows agent_1 subscribed to topic 'errors'
142
-
143
- #### Scenario: Query subscribers by topic
144
- - **GIVEN** multiple agents subscribed to topic 'discoveries'
145
- - **WHEN** getSubscribers({ type: 'topic', target: 'discoveries' }) is called
146
- - **THEN** all agent_ids subscribed to that topic are returned
147
-
148
- ---
149
-
150
- ### Requirement: Real-time View Updates
151
-
152
- The system SHALL provide reactive updates when views change.
153
-
154
- #### Scenario: Subscribe to agent view changes
155
- - **GIVEN** a subscription to agent view changes
156
- - **WHEN** a spawn event is emitted
157
- - **THEN** the subscriber callback is invoked with the updated agent entry
158
-
159
- #### Scenario: Subscribe to specific agent changes
160
- - **GIVEN** a subscription to changes for agent 'agent_1'
161
- - **WHEN** a status event is emitted for 'agent_1'
162
- - **THEN** the subscriber callback is invoked
163
- - **AND** changes to other agents do not trigger the callback
164
-