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
@@ -0,0 +1,85 @@
1
+ /**
2
+ * MailService — Central facade for mail conversation tracking.
3
+ *
4
+ * Provides conversation lifecycle management, turn recording,
5
+ * and participant tracking backed by EventStore materialized views.
6
+ *
7
+ * Since the MAP SDK server module is not importable, this implements
8
+ * the business logic directly rather than delegating to SDK managers.
9
+ */
10
+ import type { EventStore } from "../store/event-store.js";
11
+ import type { Conversation, ConversationTurn, ConversationParticipant, ConversationFilter, TurnFilter, ConversationType, ConversationChangeCallback, TurnChangeCallback } from "../store/types/index.js";
12
+ import type { Unsubscribe } from "../store/event-store.js";
13
+ import { type ConversationStore, type TurnStore, type ThreadStore, type ParticipantStore } from "./stores/index.js";
14
+ export interface CreateConversationOptions {
15
+ type: ConversationType;
16
+ subject?: string;
17
+ createdBy: string;
18
+ parentConversationId?: string;
19
+ metadata?: Record<string, unknown>;
20
+ }
21
+ export interface RecordTurnOptions {
22
+ conversationId: string;
23
+ participant: string;
24
+ contentType: string;
25
+ content: unknown;
26
+ threadId?: string;
27
+ inReplyTo?: string;
28
+ sourceType?: "explicit" | "intercepted";
29
+ sourceMessageId?: string;
30
+ metadata?: Record<string, unknown>;
31
+ }
32
+ export interface CloseConversationOptions {
33
+ conversationId: string;
34
+ closedBy: string;
35
+ reason?: string;
36
+ }
37
+ export interface JoinConversationOptions {
38
+ conversationId: string;
39
+ participantId: string;
40
+ participantType?: "user" | "agent" | "system";
41
+ role?: string;
42
+ agentId?: string;
43
+ }
44
+ export interface MailServiceConfig {
45
+ eventStore: EventStore;
46
+ }
47
+ export interface MailService {
48
+ /** Create a new conversation. */
49
+ createConversation(opts: CreateConversationOptions): {
50
+ conversationId: string;
51
+ };
52
+ /** Record a turn in a conversation. */
53
+ recordTurn(opts: RecordTurnOptions): {
54
+ turnId: string;
55
+ };
56
+ /** Close a conversation. */
57
+ closeConversation(opts: CloseConversationOptions): void;
58
+ /** Join a participant to a conversation. */
59
+ joinConversation(opts: JoinConversationOptions): void;
60
+ /** Remove a participant from a conversation. */
61
+ leaveConversation(conversationId: string, participantId: string): void;
62
+ /** Get a conversation by ID. */
63
+ getConversation(id: string): Conversation | null;
64
+ /** List conversations with optional filter. */
65
+ listConversations(filter?: ConversationFilter): Conversation[];
66
+ /** List turns for a conversation. */
67
+ listTurns(filter: TurnFilter): ConversationTurn[];
68
+ /** List participants for a conversation. */
69
+ listParticipants(conversationId: string, active?: boolean): ConversationParticipant[];
70
+ /** Count turns in a conversation. */
71
+ countTurns(conversationId: string, threadId?: string): number;
72
+ /** Subscribe to conversation changes. */
73
+ onConversationChange(callback: ConversationChangeCallback): Unsubscribe;
74
+ /** Subscribe to turn changes. */
75
+ onTurnChange(callback: TurnChangeCallback): Unsubscribe;
76
+ /** Access to underlying stores for MAP handler integration. */
77
+ readonly stores: {
78
+ conversations: ConversationStore;
79
+ turns: TurnStore;
80
+ threads: ThreadStore;
81
+ participants: ParticipantStore;
82
+ };
83
+ }
84
+ export declare function createMailService(config: MailServiceConfig): MailService;
85
+ //# sourceMappingURL=mail-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-service.d.ts","sourceRoot":"","sources":["../../src/mail/mail-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * MailService — Central facade for mail conversation tracking.
3
+ *
4
+ * Provides conversation lifecycle management, turn recording,
5
+ * and participant tracking backed by EventStore materialized views.
6
+ *
7
+ * Since the MAP SDK server module is not importable, this implements
8
+ * the business logic directly rather than delegating to SDK managers.
9
+ */
10
+ import { nanoid } from "nanoid";
11
+ import { EventStoreConversationStore, EventStoreTurnStore, EventStoreThreadStore, EventStoreParticipantStore, } from "./stores/index.js";
12
+ // =============================================================================
13
+ // Implementation
14
+ // =============================================================================
15
+ export function createMailService(config) {
16
+ const { eventStore } = config;
17
+ // Create EventStore-backed stores
18
+ const conversationStore = new EventStoreConversationStore(eventStore);
19
+ const turnStore = new EventStoreTurnStore(eventStore);
20
+ const threadStore = new EventStoreThreadStore(eventStore);
21
+ const participantStore = new EventStoreParticipantStore(eventStore);
22
+ function createConversation(opts) {
23
+ const conversationId = `conv_${nanoid(12)}`;
24
+ eventStore.emit({
25
+ type: "conversation",
26
+ source: { agent_id: opts.createdBy },
27
+ payload: {
28
+ action: "created",
29
+ conversation_id: conversationId,
30
+ conversation_type: opts.type,
31
+ subject: opts.subject,
32
+ parent_conversation_id: opts.parentConversationId,
33
+ metadata: opts.metadata,
34
+ },
35
+ });
36
+ return { conversationId };
37
+ }
38
+ function recordTurn(opts) {
39
+ const conv = eventStore.getConversation(opts.conversationId);
40
+ if (!conv) {
41
+ throw new Error(`Cannot record turn: conversation not found: ${opts.conversationId}`);
42
+ }
43
+ const turnId = `turn_${nanoid(12)}`;
44
+ eventStore.emit({
45
+ type: "turn",
46
+ source: { agent_id: opts.participant },
47
+ payload: {
48
+ action: "recorded",
49
+ turn_id: turnId,
50
+ conversation_id: opts.conversationId,
51
+ participant: opts.participant,
52
+ content_type: opts.contentType,
53
+ content: opts.content,
54
+ thread_id: opts.threadId,
55
+ in_reply_to: opts.inReplyTo,
56
+ source_type: opts.sourceType ?? "explicit",
57
+ source_message_id: opts.sourceMessageId,
58
+ metadata: opts.metadata,
59
+ },
60
+ });
61
+ return { turnId };
62
+ }
63
+ function closeConversation(opts) {
64
+ eventStore.emit({
65
+ type: "conversation",
66
+ source: { agent_id: opts.closedBy },
67
+ payload: {
68
+ action: "closed",
69
+ conversation_id: opts.conversationId,
70
+ closed_by: opts.closedBy,
71
+ close_reason: opts.reason ?? "completed",
72
+ },
73
+ });
74
+ }
75
+ function joinConversation(opts) {
76
+ eventStore.emit({
77
+ type: "conversation",
78
+ source: { agent_id: opts.participantId },
79
+ payload: {
80
+ action: "participant_joined",
81
+ conversation_id: opts.conversationId,
82
+ participant_id: opts.participantId,
83
+ participant_type: opts.participantType ?? "agent",
84
+ participant_role: opts.role ?? "worker",
85
+ agent_id: opts.agentId,
86
+ },
87
+ });
88
+ }
89
+ function leaveConversation(conversationId, participantId) {
90
+ eventStore.emit({
91
+ type: "conversation",
92
+ source: { agent_id: participantId },
93
+ payload: {
94
+ action: "participant_left",
95
+ conversation_id: conversationId,
96
+ participant_id: participantId,
97
+ },
98
+ });
99
+ }
100
+ return {
101
+ createConversation,
102
+ recordTurn,
103
+ closeConversation,
104
+ joinConversation,
105
+ leaveConversation,
106
+ getConversation: (id) => eventStore.getConversation(id),
107
+ listConversations: (filter) => eventStore.listConversations(filter),
108
+ listTurns: (filter) => eventStore.listTurns(filter),
109
+ listParticipants: (conversationId, active) => eventStore.listParticipants(conversationId, active),
110
+ countTurns: (conversationId, threadId) => turnStore.count(conversationId, threadId),
111
+ onConversationChange: (callback) => eventStore.onConversationChange(callback),
112
+ onTurnChange: (callback) => eventStore.onTurnChange(callback),
113
+ stores: {
114
+ conversations: conversationStore,
115
+ turns: turnStore,
116
+ threads: threadStore,
117
+ participants: participantStore,
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=mail-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-service.js","sourceRoot":"","sources":["../../src/mail/mail-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * EventStore-backed ConversationStore adapter.
3
+ *
4
+ * Implements the MAP-compatible ConversationStore interface by:
5
+ * - save() → emits a `conversation` event with action `created` or `updated`
6
+ * - get()/list() → reads from EventStore materialized views
7
+ * - delete() → not supported (conversations are closed, not deleted)
8
+ *
9
+ * All state is derived from the EventStore event log — this adapter
10
+ * is a thin translation layer between MAP server types and EventStore.
11
+ */
12
+ import type { EventStore } from "../../store/event-store.js";
13
+ import type { ConversationStore, ServerConversation, MAPConversationFilter } from "./types.js";
14
+ export declare class EventStoreConversationStore implements ConversationStore {
15
+ private readonly eventStore;
16
+ constructor(eventStore: EventStore);
17
+ /**
18
+ * Save a conversation by emitting a conversation event.
19
+ * If the conversation already exists, emits an update.
20
+ */
21
+ save(conversation: ServerConversation): void;
22
+ /**
23
+ * Get a conversation by ID.
24
+ */
25
+ get(id: string): ServerConversation | undefined;
26
+ /**
27
+ * List conversations matching filter criteria.
28
+ */
29
+ list(filter?: MAPConversationFilter): ServerConversation[];
30
+ /**
31
+ * Delete a conversation. Not supported — conversations are closed, not deleted.
32
+ * Returns false as no deletion occurs.
33
+ */
34
+ delete(_id: string): boolean;
35
+ /**
36
+ * Clear all conversations. Not supported — EventStore is append-only.
37
+ */
38
+ clear(): void;
39
+ }
40
+ //# sourceMappingURL=eventstore-conversation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventstore-conversation-store.d.ts","sourceRoot":"","sources":["../../../src/mail/stores/eventstore-conversation-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAsBpB,qBAAa,2BAA4B,YAAW,iBAAiB;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;;OAGG;IACH,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAmC5C;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAK/C;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,kBAAkB,EAAE;IAuC1D;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * EventStore-backed ConversationStore adapter.
3
+ *
4
+ * Implements the MAP-compatible ConversationStore interface by:
5
+ * - save() → emits a `conversation` event with action `created` or `updated`
6
+ * - get()/list() → reads from EventStore materialized views
7
+ * - delete() → not supported (conversations are closed, not deleted)
8
+ *
9
+ * All state is derived from the EventStore event log — this adapter
10
+ * is a thin translation layer between MAP server types and EventStore.
11
+ */
12
+ /**
13
+ * Convert internal Conversation to MAP ServerConversation.
14
+ */
15
+ function toServerConversation(conv) {
16
+ return {
17
+ id: conv.id,
18
+ type: conv.type,
19
+ status: conv.status,
20
+ subject: conv.subject,
21
+ participantCount: conv.participantCount,
22
+ parentConversationId: conv.parentConversationId,
23
+ createdAt: conv.createdAt,
24
+ updatedAt: conv.updatedAt,
25
+ closedAt: conv.closedAt,
26
+ createdBy: conv.createdBy,
27
+ metadata: conv.metadata ?? {},
28
+ };
29
+ }
30
+ export class EventStoreConversationStore {
31
+ eventStore;
32
+ constructor(eventStore) {
33
+ this.eventStore = eventStore;
34
+ }
35
+ /**
36
+ * Save a conversation by emitting a conversation event.
37
+ * If the conversation already exists, emits an update.
38
+ */
39
+ save(conversation) {
40
+ const existing = this.eventStore.getConversation(conversation.id);
41
+ if (existing) {
42
+ // Update: emit a conversation event with action "updated"
43
+ // For now we handle status changes (e.g., closing)
44
+ if (existing.status !== conversation.status && (conversation.status === "completed" || conversation.status === "failed")) {
45
+ this.eventStore.emit({
46
+ type: "conversation",
47
+ source: { agent_id: conversation.createdBy },
48
+ payload: {
49
+ action: "closed",
50
+ conversation_id: conversation.id,
51
+ closed_by: conversation.createdBy,
52
+ close_reason: conversation.status,
53
+ },
54
+ });
55
+ }
56
+ }
57
+ else {
58
+ // Create: emit conversation created event
59
+ this.eventStore.emit({
60
+ type: "conversation",
61
+ source: { agent_id: conversation.createdBy },
62
+ payload: {
63
+ action: "created",
64
+ conversation_id: conversation.id,
65
+ conversation_type: conversation.type,
66
+ subject: conversation.subject,
67
+ parent_conversation_id: conversation.parentConversationId,
68
+ metadata: conversation.metadata,
69
+ },
70
+ });
71
+ }
72
+ }
73
+ /**
74
+ * Get a conversation by ID.
75
+ */
76
+ get(id) {
77
+ const conv = this.eventStore.getConversation(id);
78
+ return conv ? toServerConversation(conv) : undefined;
79
+ }
80
+ /**
81
+ * List conversations matching filter criteria.
82
+ */
83
+ list(filter) {
84
+ // Translate MAP filter to internal filter
85
+ const internalFilter = filter
86
+ ? {
87
+ // MAP uses arrays for type/status, internal uses single values
88
+ // Use first value if provided
89
+ type: filter.type?.[0],
90
+ status: filter.status?.[0],
91
+ participantId: filter.participantId,
92
+ parentConversationId: filter.parentConversationId,
93
+ }
94
+ : undefined;
95
+ const conversations = this.eventStore.listConversations(internalFilter);
96
+ // Apply additional MAP-specific filters not in internal filter
97
+ let results = conversations.map(toServerConversation);
98
+ if (filter) {
99
+ // Multi-value type filter
100
+ if (filter.type && filter.type.length > 1) {
101
+ results = results.filter((c) => filter.type.includes(c.type));
102
+ }
103
+ // Multi-value status filter
104
+ if (filter.status && filter.status.length > 1) {
105
+ results = results.filter((c) => filter.status.includes(c.status));
106
+ }
107
+ // Timestamp range filters
108
+ if (filter.createdAfter !== undefined) {
109
+ results = results.filter((c) => c.createdAt > filter.createdAfter);
110
+ }
111
+ if (filter.createdBefore !== undefined) {
112
+ results = results.filter((c) => c.createdAt < filter.createdBefore);
113
+ }
114
+ }
115
+ return results;
116
+ }
117
+ /**
118
+ * Delete a conversation. Not supported — conversations are closed, not deleted.
119
+ * Returns false as no deletion occurs.
120
+ */
121
+ delete(_id) {
122
+ return false;
123
+ }
124
+ /**
125
+ * Clear all conversations. Not supported — EventStore is append-only.
126
+ */
127
+ clear() {
128
+ // No-op: EventStore is append-only, views are rebuilt on replay
129
+ }
130
+ }
131
+ //# sourceMappingURL=eventstore-conversation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventstore-conversation-store.js","sourceRoot":"","sources":["../../../src/mail/stores/eventstore-conversation-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * EventStore-backed ParticipantStore adapter.
3
+ *
4
+ * Implements the MAP-compatible ParticipantStore interface by:
5
+ * - save() → emits conversation events with action `participant_joined`
6
+ * - get()/list() → reads from EventStore materialized views
7
+ * - Bidirectional lookup: conversation→participants and participant→conversations
8
+ */
9
+ import type { EventStore } from "../../store/event-store.js";
10
+ import type { ParticipantStore, ServerParticipant, MAPParticipantFilter } from "./types.js";
11
+ export declare class EventStoreParticipantStore implements ParticipantStore {
12
+ private readonly eventStore;
13
+ constructor(eventStore: EventStore);
14
+ /**
15
+ * Save a participant by emitting a conversation participant_joined event.
16
+ */
17
+ save(participant: ServerParticipant): void;
18
+ /**
19
+ * Get a specific participant in a conversation.
20
+ */
21
+ get(conversationId: string, participantId: string): ServerParticipant | undefined;
22
+ /**
23
+ * List participants matching filter criteria.
24
+ */
25
+ list(filter: MAPParticipantFilter): ServerParticipant[];
26
+ /**
27
+ * Remove a participant from a conversation by emitting a participant_left event.
28
+ */
29
+ delete(conversationId: string, participantId: string): boolean;
30
+ /**
31
+ * Delete all participants for a conversation. Not supported.
32
+ */
33
+ deleteByConversation(_conversationId: string): number;
34
+ /**
35
+ * Get all conversation IDs a participant belongs to.
36
+ */
37
+ getConversationsForParticipant(participantId: string, active?: boolean): string[];
38
+ /**
39
+ * Clear all participants. Not supported — EventStore is append-only.
40
+ */
41
+ clear(): void;
42
+ }
43
+ //# sourceMappingURL=eventstore-participant-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventstore-participant-store.d.ts","sourceRoot":"","sources":["../../../src/mail/stores/eventstore-participant-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA8BpB,qBAAa,0BAA2B,YAAW,gBAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;OAEG;IACH,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAe1C;;OAEG;IACH,GAAG,CACD,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,iBAAiB,GAAG,SAAS;IAMhC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,EAAE;IAsCvD;;OAEG;IACH,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAiB9D;;OAEG;IACH,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAIrD;;OAEG;IACH,8BAA8B,CAC5B,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,OAAO,GACf,MAAM,EAAE;IAcX;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * EventStore-backed ParticipantStore adapter.
3
+ *
4
+ * Implements the MAP-compatible ParticipantStore interface by:
5
+ * - save() → emits conversation events with action `participant_joined`
6
+ * - get()/list() → reads from EventStore materialized views
7
+ * - Bidirectional lookup: conversation→participants and participant→conversations
8
+ */
9
+ /** Default permissions for participants. */
10
+ const DEFAULT_PERMISSIONS = {
11
+ canSend: true,
12
+ canObserve: true,
13
+ canInvite: false,
14
+ canRemove: false,
15
+ canCreateThreads: true,
16
+ historyAccess: "full",
17
+ canSeeInternal: false,
18
+ };
19
+ /**
20
+ * Convert internal ConversationParticipant to MAP ServerParticipant.
21
+ */
22
+ function toServerParticipant(p) {
23
+ return {
24
+ id: p.id,
25
+ conversationId: p.conversationId,
26
+ type: p.type,
27
+ role: p.role,
28
+ joinedAt: p.joinedAt,
29
+ leftAt: p.leftAt,
30
+ permissions: DEFAULT_PERMISSIONS,
31
+ agentInfo: p.agentId ? { agentId: p.agentId } : undefined,
32
+ };
33
+ }
34
+ export class EventStoreParticipantStore {
35
+ eventStore;
36
+ constructor(eventStore) {
37
+ this.eventStore = eventStore;
38
+ }
39
+ /**
40
+ * Save a participant by emitting a conversation participant_joined event.
41
+ */
42
+ save(participant) {
43
+ this.eventStore.emit({
44
+ type: "conversation",
45
+ source: { agent_id: participant.id },
46
+ payload: {
47
+ action: "participant_joined",
48
+ conversation_id: participant.conversationId,
49
+ participant_id: participant.id,
50
+ participant_type: participant.type,
51
+ participant_role: participant.role,
52
+ agent_id: participant.agentInfo?.agentId,
53
+ },
54
+ });
55
+ }
56
+ /**
57
+ * Get a specific participant in a conversation.
58
+ */
59
+ get(conversationId, participantId) {
60
+ const participants = this.eventStore.listParticipants(conversationId);
61
+ const found = participants.find((p) => p.id === participantId);
62
+ return found ? toServerParticipant(found) : undefined;
63
+ }
64
+ /**
65
+ * List participants matching filter criteria.
66
+ */
67
+ list(filter) {
68
+ if (filter.conversationId) {
69
+ const participants = this.eventStore
70
+ .listParticipants(filter.conversationId, filter.active)
71
+ .map(toServerParticipant);
72
+ return participants.filter((p) => {
73
+ if (filter.participantId && p.id !== filter.participantId)
74
+ return false;
75
+ if (filter.role && p.role !== filter.role)
76
+ return false;
77
+ return true;
78
+ });
79
+ }
80
+ // Without conversationId, we need to scan all conversations
81
+ if (filter.participantId) {
82
+ const convIds = this.getConversationsForParticipant(filter.participantId, filter.active);
83
+ const results = [];
84
+ for (const convId of convIds) {
85
+ const participants = this.eventStore.listParticipants(convId);
86
+ const found = participants.find((p) => p.id === filter.participantId);
87
+ if (found) {
88
+ const sp = toServerParticipant(found);
89
+ if (!filter.role || sp.role === filter.role) {
90
+ results.push(sp);
91
+ }
92
+ }
93
+ }
94
+ return results;
95
+ }
96
+ // No conversationId and no participantId — return empty
97
+ // (listing all participants across all conversations is expensive and rarely needed)
98
+ return [];
99
+ }
100
+ /**
101
+ * Remove a participant from a conversation by emitting a participant_left event.
102
+ */
103
+ delete(conversationId, participantId) {
104
+ const existing = this.get(conversationId, participantId);
105
+ if (!existing)
106
+ return false;
107
+ this.eventStore.emit({
108
+ type: "conversation",
109
+ source: { agent_id: participantId },
110
+ payload: {
111
+ action: "participant_left",
112
+ conversation_id: conversationId,
113
+ participant_id: participantId,
114
+ },
115
+ });
116
+ return true;
117
+ }
118
+ /**
119
+ * Delete all participants for a conversation. Not supported.
120
+ */
121
+ deleteByConversation(_conversationId) {
122
+ return 0;
123
+ }
124
+ /**
125
+ * Get all conversation IDs a participant belongs to.
126
+ */
127
+ getConversationsForParticipant(participantId, active) {
128
+ const conversations = this.eventStore.listConversations();
129
+ const result = [];
130
+ for (const conv of conversations) {
131
+ const participants = this.eventStore.listParticipants(conv.id, active);
132
+ if (participants.some((p) => p.id === participantId)) {
133
+ result.push(conv.id);
134
+ }
135
+ }
136
+ return result;
137
+ }
138
+ /**
139
+ * Clear all participants. Not supported — EventStore is append-only.
140
+ */
141
+ clear() {
142
+ // No-op
143
+ }
144
+ }
145
+ //# sourceMappingURL=eventstore-participant-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventstore-participant-store.js","sourceRoot":"","sources":["../../../src/mail/stores/eventstore-participant-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * EventStore-backed ThreadStore adapter.
3
+ *
4
+ * Minimal implementation — threads are a secondary feature.
5
+ * Implements the MAP-compatible ThreadStore interface by:
6
+ * - save() → emits a `thread` event with action `created`
7
+ * - get()/list() → reads from EventStore materialized views
8
+ * - turnCount computed from actual turns with matching threadId
9
+ */
10
+ import type { EventStore } from "../../store/event-store.js";
11
+ import type { ThreadStore, ServerThread, MAPThreadFilter } from "./types.js";
12
+ export declare class EventStoreThreadStore implements ThreadStore {
13
+ private readonly eventStore;
14
+ constructor(eventStore: EventStore);
15
+ /**
16
+ * Save a thread by emitting a thread event.
17
+ */
18
+ save(thread: ServerThread): void;
19
+ /**
20
+ * Get a thread by ID.
21
+ * Scans the EventStore events since threads don't have a dedicated
22
+ * lookup-by-ID query method on EventStore.
23
+ */
24
+ get(id: string): ServerThread | undefined;
25
+ /**
26
+ * List threads matching filter criteria.
27
+ */
28
+ list(filter: MAPThreadFilter): ServerThread[];
29
+ /**
30
+ * Count turns that belong to a specific thread.
31
+ */
32
+ private countTurnsForThread;
33
+ /**
34
+ * Delete a thread. Not supported — EventStore is append-only.
35
+ */
36
+ delete(_id: string): boolean;
37
+ /**
38
+ * Delete all threads for a conversation. Not supported.
39
+ */
40
+ deleteByConversation(_conversationId: string): number;
41
+ /**
42
+ * Clear all threads. Not supported.
43
+ */
44
+ clear(): void;
45
+ }
46
+ //# sourceMappingURL=eventstore-thread-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventstore-thread-store.d.ts","sourceRoot":"","sources":["../../../src/mail/stores/eventstore-thread-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7E,qBAAa,qBAAsB,YAAW,WAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAehC;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAwBzC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,EAAE;IAkC7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAIrD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}