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,228 +0,0 @@
1
- # mcp-tools Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: MCP Server Setup
7
-
8
- The system SHALL provide an MCP server that exposes multi-agent tools to agents.
9
-
10
- #### Scenario: Start MCP server
11
- - **GIVEN** the multi-agent system is initialized
12
- - **WHEN** the MCP server is started
13
- - **THEN** the server registers all available tools
14
- - **AND** agents can discover tools via the MCP protocol
15
-
16
- #### Scenario: Tool context injection
17
- - **GIVEN** an agent with id 'agent_1' and session 'sess_123'
18
- - **WHEN** the agent calls any MCP tool
19
- - **THEN** the tool handler receives context { agent_id: 'agent_1', session_id: 'sess_123' }
20
- - **AND** the tool can use this context for authorization and attribution
21
-
22
- ---
23
-
24
- ### Requirement: spawn_agent Tool
25
-
26
- The system SHALL provide a tool for agents to spawn child agents.
27
-
28
- #### Scenario: Spawn child agent
29
- - **GIVEN** an agent 'manager_1' calls spawn_agent
30
- - **WHEN** spawn_agent({ task: 'Implement feature X' }) is invoked
31
- - **THEN** a new agent is spawned with parent 'manager_1'
32
- - **AND** the tool returns { agent_id, task_id }
33
-
34
- #### Scenario: Spawn with subscribe_parent false
35
- - **GIVEN** an agent calls spawn_agent with fire-and-forget intent
36
- - **WHEN** spawn_agent({ task: 'Background task', subscribe_parent: false }) is invoked
37
- - **THEN** the parent is NOT subscribed to the child's subtree
38
- - **AND** the child operates independently
39
-
40
- #### Scenario: Spawn with custom config
41
- - **GIVEN** an agent needs a specific model for a child
42
- - **WHEN** spawn_agent({ task: 'Complex analysis', config: { model: 'claude-opus-4-20250514' } }) is invoked
43
- - **THEN** the child agent uses the specified model
44
-
45
- ---
46
-
47
- ### Requirement: emit_status Tool
48
-
49
- The system SHALL provide a tool for agents to report status milestones.
50
-
51
- #### Scenario: Emit started status
52
- - **GIVEN** agent 'worker_1' beginning work
53
- - **WHEN** emit_status({ status_type: 'started', summary: 'Beginning implementation' }) is invoked
54
- - **THEN** a status event is emitted with source agent_id 'worker_1'
55
- - **AND** the tool returns { event_id }
56
-
57
- #### Scenario: Emit checkpoint status
58
- - **GIVEN** agent 'worker_1' reaching a milestone
59
- - **WHEN** emit_status({ status_type: 'checkpoint', summary: '50% complete', details: { progress: '50%' } }) is invoked
60
- - **THEN** the status event includes the details
61
- - **AND** subscribers (e.g., parent) receive the update
62
-
63
- #### Scenario: Emit completed status
64
- - **GIVEN** agent 'worker_1' finishing work
65
- - **WHEN** emit_status({ status_type: 'completed', summary: 'Task finished', details: { artifacts: [...] } }) is invoked
66
- - **THEN** the completion is recorded
67
- - **AND** the agent's task status is updated
68
-
69
- ---
70
-
71
- ### Requirement: send_message Tool
72
-
73
- The system SHALL provide a tool for agents to send messages.
74
-
75
- #### Scenario: Send direct message
76
- - **GIVEN** agent 'agent_1' wants to message 'agent_2'
77
- - **WHEN** send_message({ to: { agent_id: 'agent_2' }, content: 'Need your input' }) is invoked
78
- - **THEN** the message is routed to agent_2
79
- - **AND** the tool returns { message_id }
80
-
81
- #### Scenario: Send message to topic
82
- - **GIVEN** agent 'agent_1' wants to broadcast to a topic
83
- - **WHEN** send_message({ to: { topic: 'discoveries' }, content: 'Found issue X' }) is invoked
84
- - **THEN** all agents subscribed to 'discoveries' receive the message
85
-
86
- #### Scenario: Send reply with correlation
87
- - **GIVEN** agent received message 'msg_123'
88
- - **WHEN** send_message({ to: { agent_id: 'sender' }, content: 'Response', correlation_id: 'msg_123' }) is invoked
89
- - **THEN** the response is threaded with the original message
90
-
91
- ---
92
-
93
- ### Requirement: check_messages Tool
94
-
95
- The system SHALL provide a tool for agents to check their message queue.
96
-
97
- #### Scenario: Check messages with default limit
98
- - **GIVEN** agent 'agent_1' has pending messages
99
- - **WHEN** check_messages({}) is invoked by agent_1
100
- - **THEN** up to 10 messages are returned (default limit)
101
- - **AND** messages include id, from, content, timestamp, truncated flag
102
-
103
- #### Scenario: Check messages with custom limit
104
- - **GIVEN** agent 'agent_1' has many pending messages
105
- - **WHEN** check_messages({ limit: 5 }) is invoked
106
- - **THEN** only 5 messages are returned
107
-
108
- #### Scenario: No pending messages
109
- - **GIVEN** agent 'agent_1' has no pending messages
110
- - **WHEN** check_messages({}) is invoked
111
- - **THEN** an empty messages array is returned
112
-
113
- ---
114
-
115
- ### Requirement: query_index Tool
116
-
117
- The system SHALL provide a tool for agents to search for agents and tasks.
118
-
119
- #### Scenario: Query running agents
120
- - **GIVEN** multiple agents in various states
121
- - **WHEN** query_index({ type: 'agents', filter: { state: 'running' } }) is invoked
122
- - **THEN** only running agents are returned
123
- - **AND** the tool returns { entries, total, has_more }
124
-
125
- #### Scenario: Query tasks by status
126
- - **GIVEN** tasks in various statuses
127
- - **WHEN** query_index({ type: 'tasks', filter: { status: 'in_progress' } }) is invoked
128
- - **THEN** only in-progress tasks are returned
129
-
130
- #### Scenario: Search with text query
131
- - **GIVEN** agents and tasks with various descriptions
132
- - **WHEN** query_index({ type: 'all', search: 'authentication' }) is invoked
133
- - **THEN** entries matching 'authentication' are returned
134
- - **AND** results are sorted by relevance/recency
135
-
136
- ---
137
-
138
- ### Requirement: get_hierarchy Tool
139
-
140
- The system SHALL provide a tool for agents to view the agent tree.
141
-
142
- #### Scenario: Get full hierarchy
143
- - **GIVEN** a multi-level agent hierarchy
144
- - **WHEN** get_hierarchy({}) is invoked
145
- - **THEN** the complete tree from head manager is returned
146
- - **AND** each node includes agent_id, task, state, children
147
-
148
- #### Scenario: Get hierarchy from specific root
149
- - **GIVEN** agent 'manager_1' with children
150
- - **WHEN** get_hierarchy({ root: 'manager_1' }) is invoked
151
- - **THEN** only the subtree under manager_1 is returned
152
-
153
- #### Scenario: Get hierarchy with depth limit
154
- - **GIVEN** a deep hierarchy
155
- - **WHEN** get_hierarchy({ depth: 2 }) is invoked
156
- - **THEN** only 2 levels of the hierarchy are returned
157
-
158
- ---
159
-
160
- ### Requirement: get_agent_summary Tool
161
-
162
- The system SHALL provide a tool for quick agent lookup.
163
-
164
- #### Scenario: Get agent summary
165
- - **GIVEN** agent 'worker_1' exists with recent activity
166
- - **WHEN** get_agent_summary({ agent_id: 'worker_1' }) is invoked
167
- - **THEN** the summary includes id, session_id, task, state, parent, children_count, last_activity, recent_status
168
-
169
- #### Scenario: Get non-existent agent
170
- - **GIVEN** no agent with id 'nonexistent'
171
- - **WHEN** get_agent_summary({ agent_id: 'nonexistent' }) is invoked
172
- - **THEN** an error is returned indicating agent not found
173
-
174
- ---
175
-
176
- ### Requirement: stop_agent Tool
177
-
178
- The system SHALL provide a tool for agents to terminate their children.
179
-
180
- #### Scenario: Stop own child
181
- - **GIVEN** agent 'manager_1' spawned 'worker_1'
182
- - **WHEN** manager_1 invokes stop_agent({ agent_id: 'worker_1' })
183
- - **THEN** worker_1 is terminated with reason 'stopped'
184
- - **AND** the tool returns { success: true }
185
-
186
- #### Scenario: Stop grandchild
187
- - **GIVEN** hierarchy: manager_1 → worker_1 → helper_1
188
- - **WHEN** manager_1 invokes stop_agent({ agent_id: 'helper_1' })
189
- - **THEN** helper_1 is terminated (manager_1 owns the subtree)
190
-
191
- #### Scenario: Cannot stop agent outside subtree
192
- - **GIVEN** agent 'agent_A' not in 'agent_B's subtree
193
- - **WHEN** agent_B invokes stop_agent({ agent_id: 'agent_A' })
194
- - **THEN** the operation fails with error 'Cannot stop agent outside your subtree'
195
-
196
- ---
197
-
198
- ### Requirement: create_task Tool
199
-
200
- The system SHALL provide a tool for agents to create explicit tasks.
201
-
202
- #### Scenario: Create task
203
- - **GIVEN** agent 'manager_1' wants to create a task
204
- - **WHEN** create_task({ description: 'Review code changes' }) is invoked by manager_1
205
- - **THEN** a new task is created with created_by: 'manager_1'
206
- - **AND** the tool returns { task_id }
207
-
208
- #### Scenario: Create subtask
209
- - **GIVEN** parent task 'task_1' exists
210
- - **WHEN** create_task({ description: 'Subtask', parent_task: 'task_1' }) is invoked
211
- - **THEN** the task is created with parent_task reference
212
-
213
- ---
214
-
215
- ### Requirement: get_task Tool
216
-
217
- The system SHALL provide a tool for agents to lookup task details.
218
-
219
- #### Scenario: Get task details
220
- - **GIVEN** task 'task_1' exists
221
- - **WHEN** get_task({ task_id: 'task_1' }) is invoked
222
- - **THEN** the full task record is returned including description, status, assigned_agent, inputs, outputs, artifacts
223
-
224
- #### Scenario: Get non-existent task
225
- - **GIVEN** no task with id 'nonexistent'
226
- - **WHEN** get_task({ task_id: 'nonexistent' }) is invoked
227
- - **THEN** an error is returned indicating task not found
228
-
@@ -1,157 +0,0 @@
1
- # message-router Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: Message Sending
7
-
8
- The system SHALL route messages to recipients based on target specification.
9
-
10
- #### Scenario: Send direct message to agent
11
- - **GIVEN** agents 'sender_1' and 'recipient_1' exist
12
- - **WHEN** send({ from: { agent_id: 'sender_1' }, to: { agent_id: 'recipient_1' }, content: 'Hello' }) is called
13
- - **THEN** a message event is emitted
14
- - **AND** the message appears in recipient_1's pending queue
15
- - **AND** the function returns the message with id and timestamp
16
-
17
- #### Scenario: Send message to task
18
- - **GIVEN** task 'task_1' assigned to agent 'worker_1'
19
- - **WHEN** send({ from: { agent_id: 'sender_1' }, to: { task_id: 'task_1' }, content: 'Status update needed' }) is called
20
- - **THEN** the message is routed to 'worker_1' (the assigned agent)
21
- - **AND** the message appears in worker_1's pending queue
22
-
23
- #### Scenario: Send message to topic
24
- - **GIVEN** agents 'agent_1' and 'agent_2' subscribed to topic 'errors'
25
- - **WHEN** send({ from: { agent_id: 'sender_1' }, to: { topic: 'errors' }, content: 'Error detected' }) is called
26
- - **THEN** the message appears in both agent_1's and agent_2's pending queues
27
-
28
- #### Scenario: Send message with correlation_id
29
- - **GIVEN** an original message with id 'msg_123'
30
- - **WHEN** send({ from: { agent_id: 'responder' }, to: { agent_id: 'requester' }, content: 'Response', correlation_id: 'msg_123' }) is called
31
- - **THEN** the message includes correlation_id 'msg_123' for threading
32
-
33
- ---
34
-
35
- ### Requirement: Message Retrieval
36
-
37
- The system SHALL allow agents to retrieve their pending messages.
38
-
39
- #### Scenario: Get pending messages
40
- - **GIVEN** agent 'agent_1' has 3 pending messages
41
- - **WHEN** getMessages('agent_1') is called
42
- - **THEN** all 3 messages are returned in chronological order
43
- - **AND** each message includes id, from, content, timestamp
44
-
45
- #### Scenario: Get messages with limit
46
- - **GIVEN** agent 'agent_1' has 10 pending messages
47
- - **WHEN** getMessages('agent_1', { limit: 5 }) is called
48
- - **THEN** only the 5 oldest messages are returned
49
-
50
- #### Scenario: Get full message content
51
- - **GIVEN** a message 'msg_1' with truncated content in the queue
52
- - **WHEN** getFullMessage('msg_1') is called
53
- - **THEN** the complete message content is returned
54
-
55
- #### Scenario: Empty message queue
56
- - **GIVEN** agent 'agent_1' has no pending messages
57
- - **WHEN** getMessages('agent_1') is called
58
- - **THEN** an empty array is returned
59
-
60
- ---
61
-
62
- ### Requirement: Subscription Management
63
-
64
- The system SHALL manage agent subscriptions to message channels.
65
-
66
- #### Scenario: Subscribe to topic
67
- - **GIVEN** agent 'agent_1' with no topic subscriptions
68
- - **WHEN** subscribe('agent_1', { type: 'topic', target: 'discoveries' }) is called
69
- - **THEN** agent_1 is subscribed to topic 'discoveries'
70
- - **AND** future messages to topic 'discoveries' are routed to agent_1
71
-
72
- #### Scenario: Subscribe to agent channel
73
- - **GIVEN** agent 'agent_1'
74
- - **WHEN** subscribe('agent_1', { type: 'agent', target: 'agent_1' }) is called
75
- - **THEN** agent_1 receives direct messages addressed to it
76
-
77
- #### Scenario: Subscribe to subtree
78
- - **GIVEN** manager 'manager_1' spawned child 'child_1'
79
- - **WHEN** subscribe('manager_1', { type: 'subtree', target: 'child_1' }) is called
80
- - **THEN** manager_1 receives all events from child_1 and its descendants
81
-
82
- #### Scenario: Unsubscribe from topic
83
- - **GIVEN** agent 'agent_1' subscribed to topic 'updates'
84
- - **WHEN** unsubscribe('agent_1', { type: 'topic', target: 'updates' }) is called
85
- - **THEN** agent_1 no longer receives messages to topic 'updates'
86
-
87
- #### Scenario: Get agent subscriptions
88
- - **GIVEN** agent 'agent_1' with multiple subscriptions
89
- - **WHEN** getSubscriptions('agent_1') is called
90
- - **THEN** all subscriptions are returned as an array of { type, target }
91
-
92
- ---
93
-
94
- ### Requirement: Automatic Subscription Setup
95
-
96
- The system SHALL configure default subscriptions when agents spawn.
97
-
98
- #### Scenario: Default subscriptions on spawn
99
- - **GIVEN** spawning agent 'child_1' with parent 'parent_1'
100
- - **WHEN** default subscriptions are set up
101
- - **THEN** child_1 is subscribed to { type: 'agent', target: 'child_1' }
102
- - **AND** child_1 is subscribed to { type: 'lineage', target: 'child_1' }
103
- - **AND** if task_id provided, child_1 is subscribed to { type: 'task', target: task_id }
104
-
105
- #### Scenario: Parent subtree subscription
106
- - **GIVEN** spawning agent 'child_1' with parent 'parent_1' and subscribe_parent: true
107
- - **WHEN** default subscriptions are set up
108
- - **THEN** parent_1 is subscribed to { type: 'subtree', target: 'child_1' }
109
-
110
- #### Scenario: Skip parent subscription
111
- - **GIVEN** spawning agent 'child_1' with parent 'parent_1' and subscribe_parent: false
112
- - **WHEN** default subscriptions are set up
113
- - **THEN** parent_1 is NOT subscribed to child_1's subtree
114
-
115
- ---
116
-
117
- ### Requirement: Status Event Routing
118
-
119
- The system SHALL route status events to appropriate subscribers.
120
-
121
- #### Scenario: Route status to parent
122
- - **GIVEN** agent 'child_1' with parent 'parent_1' subscribed to subtree
123
- - **WHEN** child_1 emits a status event (e.g., 'checkpoint')
124
- - **THEN** the status event appears in parent_1's message queue
125
- - **AND** the event includes agent_id, task_id, status_type, summary
126
-
127
- #### Scenario: Route completed status
128
- - **GIVEN** agent 'worker_1' with manager 'manager_1' subscribed to subtree
129
- - **WHEN** worker_1 emits status { status_type: 'completed', summary: 'Task done' }
130
- - **THEN** manager_1 receives the completion notification
131
- - **AND** can query worker_1 for detailed results
132
-
133
- #### Scenario: Route failed status
134
- - **GIVEN** agent 'worker_1' with manager 'manager_1' subscribed to subtree
135
- - **WHEN** worker_1 emits status { status_type: 'failed', summary: 'Error occurred' }
136
- - **THEN** manager_1 receives the failure notification
137
- - **AND** the event includes error details for manager to decide on recovery
138
-
139
- ---
140
-
141
- ### Requirement: Message Truncation
142
-
143
- The system SHALL truncate large messages in the queue with reference to full content.
144
-
145
- #### Scenario: Truncate large message
146
- - **GIVEN** a message with content exceeding the configured limit (e.g., 1000 tokens)
147
- - **WHEN** the message is added to a recipient's queue
148
- - **THEN** the queued message content is truncated
149
- - **AND** the message is marked with truncated: true
150
- - **AND** the full content is retrievable via getFullMessage(message_id)
151
-
152
- #### Scenario: Small message not truncated
153
- - **GIVEN** a message with content under the configured limit
154
- - **WHEN** the message is added to a recipient's queue
155
- - **THEN** the full content is included
156
- - **AND** the message is marked with truncated: false
157
-
@@ -1,140 +0,0 @@
1
- # task-manager Specification
2
-
3
- ## Purpose
4
- TBD - created by archiving change add-mvp-foundation. Update Purpose after archive.
5
- ## Requirements
6
- ### Requirement: Task Creation
7
-
8
- The system SHALL create tasks with unique IDs and emit task events.
9
-
10
- #### Scenario: Create a new task
11
- - **GIVEN** an initialized TaskManager
12
- - **WHEN** create({ description: 'Implement user authentication', created_by: 'agent_1' }) is called
13
- - **THEN** a unique task_id is generated
14
- - **AND** a task event with action 'created' is emitted
15
- - **AND** the task appears in the tasks view with status 'pending'
16
- - **AND** the function returns the new task record
17
-
18
- #### Scenario: Create task with inputs
19
- - **GIVEN** an initialized TaskManager
20
- - **WHEN** create({ description: 'Review PR #123', created_by: 'manager_1', inputs: { pr_number: 123, repo: 'my-repo' } }) is called
21
- - **THEN** the task is created with the provided inputs
22
- - **AND** the inputs are stored in the task record
23
-
24
- ---
25
-
26
- ### Requirement: Task Retrieval
27
-
28
- The system SHALL support retrieving tasks by ID and filtering.
29
-
30
- #### Scenario: Get task by ID
31
- - **GIVEN** a task 'task_1' exists
32
- - **WHEN** get('task_1') is called
33
- - **THEN** the full task record is returned including id, description, status, assigned_agent, timestamps
34
-
35
- #### Scenario: Get non-existent task
36
- - **GIVEN** no task with id 'nonexistent'
37
- - **WHEN** get('nonexistent') is called
38
- - **THEN** null is returned
39
-
40
- #### Scenario: List tasks with status filter
41
- - **GIVEN** tasks in various statuses (pending, in_progress, completed)
42
- - **WHEN** list({ status: 'in_progress' }) is called
43
- - **THEN** only tasks with status 'in_progress' are returned
44
-
45
- #### Scenario: List tasks by assigned agent
46
- - **GIVEN** agent 'worker_1' assigned to tasks 'task_1' and 'task_2'
47
- - **WHEN** list({ assigned_agent: 'worker_1' }) is called
48
- - **THEN** both 'task_1' and 'task_2' are returned
49
-
50
- ---
51
-
52
- ### Requirement: Task Assignment
53
-
54
- The system SHALL support assigning and unassigning agents to tasks.
55
-
56
- #### Scenario: Assign agent to task
57
- - **GIVEN** a task 'task_1' in 'pending' status
58
- - **WHEN** assign('task_1', 'worker_1') is called
59
- - **THEN** a task event with action 'assigned' is emitted
60
- - **AND** the task's assigned_agent is set to 'worker_1'
61
- - **AND** the task's status changes to 'assigned'
62
- - **AND** an entry is added to the task's agent_history
63
-
64
- #### Scenario: Assign with role
65
- - **GIVEN** a task 'task_1' in 'pending' status
66
- - **WHEN** assign('task_1', 'reviewer_1', 'reviewer') is called
67
- - **THEN** the agent_history entry includes role 'reviewer'
68
-
69
- #### Scenario: Unassign agent from task
70
- - **GIVEN** a task 'task_1' assigned to 'worker_1'
71
- - **WHEN** unassign('task_1', 'worker_1') is called
72
- - **THEN** a task event with action 'unassigned' is emitted
73
- - **AND** the task's assigned_agent is cleared
74
- - **AND** the agent_history entry's ended_at is set
75
-
76
- ---
77
-
78
- ### Requirement: Task Status Updates
79
-
80
- The system SHALL support updating task status with appropriate transitions.
81
-
82
- #### Scenario: Start task
83
- - **GIVEN** a task 'task_1' in 'assigned' status
84
- - **WHEN** updateStatus('task_1', 'in_progress') is called
85
- - **THEN** a task event with action 'status_change' is emitted
86
- - **AND** the task's status changes to 'in_progress'
87
- - **AND** started_at is set if not already set
88
-
89
- #### Scenario: Complete task
90
- - **GIVEN** a task 'task_1' in 'in_progress' status
91
- - **WHEN** updateStatus('task_1', 'completed') is called
92
- - **THEN** a task event with action 'completed' is emitted
93
- - **AND** the task's status changes to 'completed'
94
- - **AND** completed_at is set to current timestamp
95
-
96
- #### Scenario: Fail task
97
- - **GIVEN** a task 'task_1' in 'in_progress' status
98
- - **WHEN** updateStatus('task_1', 'failed') is called
99
- - **THEN** a task event with action 'failed' is emitted
100
- - **AND** the task's status changes to 'failed'
101
-
102
- ---
103
-
104
- ### Requirement: Task Updates
105
-
106
- The system SHALL support updating task metadata.
107
-
108
- #### Scenario: Update task outputs
109
- - **GIVEN** a task 'task_1' in 'in_progress' status
110
- - **WHEN** update('task_1', { outputs: { result: 'success', files_changed: 5 } }) is called
111
- - **THEN** the task's outputs are updated
112
- - **AND** the change is reflected in the tasks view
113
-
114
- #### Scenario: Add artifact to task
115
- - **GIVEN** a task 'task_1'
116
- - **WHEN** update('task_1', { artifacts: [{ type: 'file', ref: 'src/auth.ts' }] }) is called
117
- - **THEN** the artifact is added to the task's artifacts array
118
-
119
- ---
120
-
121
- ### Requirement: Subtask Management
122
-
123
- The system SHALL support hierarchical task decomposition.
124
-
125
- #### Scenario: Create subtask
126
- - **GIVEN** a parent task 'task_1'
127
- - **WHEN** createSubtask('task_1', { description: 'Implement JWT validation', created_by: 'manager_1' }) is called
128
- - **THEN** a new task is created with parent_task set to 'task_1'
129
- - **AND** the new task_id is added to task_1's subtasks array
130
-
131
- #### Scenario: Get subtasks
132
- - **GIVEN** task 'task_1' with subtasks 'task_2' and 'task_3'
133
- - **WHEN** getSubtasks('task_1') is called
134
- - **THEN** both 'task_2' and 'task_3' task records are returned
135
-
136
- #### Scenario: Subtask status rollup
137
- - **GIVEN** task 'task_1' with subtasks 'task_2' (completed) and 'task_3' (in_progress)
138
- - **WHEN** querying task 'task_1'
139
- - **THEN** the parent task can derive aggregate status from subtask statuses
140
-
@@ -1,33 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ## [0.1.0] - 2024-XX-XX
11
-
12
- ### Added
13
-
14
- - Initial release
15
- - `AgentFactory` for registering and spawning agents
16
- - `AgentHandle` for managing agent processes
17
- - `Session` for interacting with agent sessions
18
- - Pre-registered `claude-code` agent
19
- - Streaming responses via async iterators
20
- - Permission handling modes: `auto-approve`, `auto-deny`, `callback`, `interactive`
21
- - Interactive permission requests as session updates
22
- - `session.interruptWith()` for interrupting and redirecting agents
23
- - `session.fork()` for creating independent session copies (experimental)
24
- - `agentHandle.forkSession()` for forking by session ID (experimental)
25
- - `session.addContext()` stub for future mid-execution messaging
26
- - Custom file read/write handlers
27
- - Terminal operation handlers
28
- - MCP server support
29
- - Full TypeScript type exports
30
-
31
- ### Dependencies
32
-
33
- - `@agentclientprotocol/sdk` ^0.10.0
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Sudocode AI
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.