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
@@ -36,6 +36,7 @@ import type {
36
36
  SystemPromptContext,
37
37
  AgentLifecycleCallback,
38
38
  AgentConfig,
39
+ ContinueAgentOptions,
39
40
  } from "./types.js";
40
41
  import { AgentManagerError } from "./types.js";
41
42
  import type { RoleRegistry, Capability } from "../roles/types.js";
@@ -74,8 +75,10 @@ function getSpawnCapability(childRole: string): Capability {
74
75
  // or system-level agents can spawn coordinators
75
76
  return AGENT_CAPABILITIES.SPAWN_CUSTOM;
76
77
  default:
77
- // For custom roles, check against the custom spawn capability
78
- return AGENT_CAPABILITIES.SPAWN_CUSTOM;
78
+ // For team-defined roles (e.g., "grinder"), return the specific capability
79
+ // (e.g., "agent.spawn.grinder"). The spawn check also accepts
80
+ // "agent.spawn.custom" as a generic fallback.
81
+ return `agent.spawn.${childRole}` as Capability;
79
82
  }
80
83
  }
81
84
 
@@ -103,6 +106,20 @@ export interface AgentManager {
103
106
  */
104
107
  resume(agentId: AgentId): Promise<SpawnedAgent>;
105
108
 
109
+ /**
110
+ * Continue a terminated agent by spawning a new agent with the same
111
+ * role and task, injecting the prior conversation context as a
112
+ * resume prefix in the system prompt.
113
+ *
114
+ * @param agentId - ID of the agent to continue
115
+ * @param options - Continuation options
116
+ * @returns The newly spawned continuation agent
117
+ */
118
+ continueAgent(
119
+ agentId: AgentId,
120
+ options?: ContinueAgentOptions
121
+ ): Promise<SpawnedAgent>;
122
+
106
123
  // ── Queries ────────────────────────────────────────────────────
107
124
 
108
125
  /**
@@ -237,6 +254,32 @@ export interface AgentManager {
237
254
  */
238
255
  onLifecycleEvent(callback: AgentLifecycleCallback): () => void;
239
256
 
257
+ // ── Team Integration ─────────────────────────────────────────
258
+
259
+ /**
260
+ * Set a spawn interceptor that transforms SpawnAgentOptions before spawning.
261
+ * Used by TeamRuntime to inject team topics, prompts, MCP servers, and env vars.
262
+ */
263
+ setSpawnInterceptor(
264
+ interceptor: SpawnInterceptor | null
265
+ ): void;
266
+
267
+ /**
268
+ * Get the RoleRegistry used by this AgentManager.
269
+ */
270
+ getRoleRegistry(): RoleRegistry;
271
+
272
+ // ── Mail Services (Late Binding) ─────────────────────────────
273
+
274
+ /**
275
+ * Set mail services for conversation tracking.
276
+ * Used for late binding when mailService is created after AgentManager.
277
+ */
278
+ setMailServices(
279
+ mailService: import("../mail/mail-service.js").MailService,
280
+ conversationMap: import("../mail/conversation-map.js").ConversationMap
281
+ ): void;
282
+
240
283
  // ── Cleanup ────────────────────────────────────────────────────
241
284
 
242
285
  /**
@@ -280,8 +323,32 @@ export interface AgentManagerConfig {
280
323
  * with coordinator agent lifecycle.
281
324
  */
282
325
  healthCheckService?: HealthCheckService;
326
+
327
+ /**
328
+ * Optional MailService for conversation tracking.
329
+ * When provided, spawn creates task conversations and terminate closes them.
330
+ */
331
+ mailService?: import("../mail/mail-service.js").MailService;
332
+
333
+ /**
334
+ * Optional ConversationMap for agent-to-conversation tracking.
335
+ * Required when mailService is provided.
336
+ */
337
+ conversationMap?: import("../mail/conversation-map.js").ConversationMap;
283
338
  }
284
339
 
340
+ // ─────────────────────────────────────────────────────────────────
341
+ // Spawn Interceptor
342
+ // ─────────────────────────────────────────────────────────────────
343
+
344
+ /**
345
+ * Function that transforms SpawnAgentOptions before an agent is spawned.
346
+ * Used by TeamRuntime to inject team-specific configuration.
347
+ */
348
+ export type SpawnInterceptor = (
349
+ options: SpawnAgentOptions
350
+ ) => SpawnAgentOptions | Promise<SpawnAgentOptions>;
351
+
285
352
  // ─────────────────────────────────────────────────────────────────
286
353
  // AgentManager Implementation
287
354
  // ─────────────────────────────────────────────────────────────────
@@ -298,8 +365,17 @@ export function createAgentManager(
298
365
  workspaceManager,
299
366
  roleRegistry = new DefaultRoleRegistry(),
300
367
  healthCheckService,
368
+ mailService: initialMailService,
369
+ conversationMap: initialConversationMap,
301
370
  } = config;
302
371
 
372
+ // Mutable mail services (support late binding via setMailServices)
373
+ let mailService = initialMailService;
374
+ let conversationMap = initialConversationMap;
375
+
376
+ // Mutable spawn interceptor (set by TeamRuntime)
377
+ let spawnInterceptor: SpawnInterceptor | null = null;
378
+
303
379
  // Active sessions tracked in memory
304
380
  const activeSessions = new Map<AgentId, ActiveSession>();
305
381
 
@@ -313,7 +389,12 @@ export function createAgentManager(
313
389
  // Lifecycle
314
390
  // ─────────────────────────────────────────────────────────────────
315
391
 
316
- async function spawn(options: SpawnAgentOptions): Promise<SpawnedAgent> {
392
+ async function spawn(rawOptions: SpawnAgentOptions): Promise<SpawnedAgent> {
393
+ // Apply spawn interceptor if set (used by TeamRuntime for team context injection)
394
+ const options = spawnInterceptor
395
+ ? await spawnInterceptor(rawOptions)
396
+ : rawOptions;
397
+
317
398
  const {
318
399
  task,
319
400
  task_id,
@@ -324,6 +405,8 @@ export function createAgentManager(
324
405
  topics = [],
325
406
  config: agentConfig,
326
407
  agentType = defaultAgentType,
408
+ customPrompt,
409
+ interactionPatterns,
327
410
  // Workspace-related fields (Phase 2)
328
411
  role,
329
412
  streamId,
@@ -352,7 +435,13 @@ export function createAgentManager(
352
435
  const requiredCapability = getSpawnCapability(childRole);
353
436
  const parentRole = parentAgent.role ?? "worker";
354
437
 
355
- if (!roleRegistry.hasCapability(parentRole, requiredCapability)) {
438
+ // Accept either the specific capability (e.g., agent.spawn.grinder)
439
+ // or the generic agent.spawn.custom as a fallback for non-built-in roles
440
+ const hasSpecific = roleRegistry.hasCapability(parentRole, requiredCapability);
441
+ const hasGeneric = requiredCapability !== AGENT_CAPABILITIES.SPAWN_CUSTOM &&
442
+ roleRegistry.hasCapability(parentRole, AGENT_CAPABILITIES.SPAWN_CUSTOM);
443
+
444
+ if (!hasSpecific && !hasGeneric) {
356
445
  throw new AgentManagerError(
357
446
  `Parent agent with role '${parentRole}' does not have capability to spawn '${childRole}' agents. ` +
358
447
  `Required capability: ${requiredCapability}`,
@@ -388,12 +477,21 @@ export function createAgentManager(
388
477
 
389
478
  let systemPrompt = generateSystemPrompt(promptContext);
390
479
 
391
- // Append role-specific system prompt if defined
480
+ // Append role prompt: team customPrompt takes precedence over resolvedRole.systemPrompt
392
481
  const resolvedRole = roleRegistry.resolveRole(role ?? "worker");
393
- if (resolvedRole.systemPrompt) {
482
+ if (customPrompt) {
483
+ systemPrompt += `\n\n# Role Instructions\n\n${customPrompt}`;
484
+ } else if (resolvedRole.systemPrompt) {
394
485
  systemPrompt += `\n\n# Role-Specific Instructions\n\n${resolvedRole.systemPrompt}`;
395
486
  }
396
487
 
488
+ // Append team interaction pattern sections (pull mode, trunk integration, etc.)
489
+ if (interactionPatterns && interactionPatterns.length > 0) {
490
+ for (const pattern of interactionPatterns) {
491
+ systemPrompt += `\n\n${pattern}`;
492
+ }
493
+ }
494
+
397
495
  eventStore.emit({
398
496
  type: "spawn",
399
497
  source: { agent_id: parent ?? "system" },
@@ -488,6 +586,52 @@ export function createAgentManager(
488
586
  role: role ?? undefined,
489
587
  });
490
588
 
589
+ // ─────────────────────────────────────────────────────────────────
590
+ // Mail: Create task conversation for this agent
591
+ // ─────────────────────────────────────────────────────────────────
592
+ if (mailService && conversationMap) {
593
+ try {
594
+ const parentConversationId = parent
595
+ ? conversationMap.getAgentConversation(parent) ??
596
+ conversationMap.getSessionConversation(parent)
597
+ : undefined;
598
+
599
+ const { conversationId: taskConvId } =
600
+ mailService.createConversation({
601
+ type: "task",
602
+ subject: task?.slice(0, 80),
603
+ createdBy: parent ?? agentId,
604
+ parentConversationId: parentConversationId,
605
+ });
606
+
607
+ // Join parent and child as participants
608
+ if (parent) {
609
+ mailService.joinConversation({
610
+ conversationId: taskConvId,
611
+ participantId: parent,
612
+ participantType: "agent",
613
+ role: "initiator",
614
+ agentId: parent,
615
+ });
616
+ }
617
+ mailService.joinConversation({
618
+ conversationId: taskConvId,
619
+ participantId: agentId,
620
+ participantType: "agent",
621
+ role: "worker",
622
+ agentId,
623
+ });
624
+
625
+ conversationMap.setAgentConversation(agentId, taskConvId);
626
+ } catch (err) {
627
+ // Never fail spawn due to mail errors
628
+ console.warn(
629
+ `[AgentManager] Failed to create task conversation for ${agentId}:`,
630
+ err
631
+ );
632
+ }
633
+ }
634
+
491
635
  // Track active session
492
636
  const activeSession: ActiveSession = {
493
637
  agentId,
@@ -628,6 +772,38 @@ export function createAgentManager(
628
772
  }
629
773
  }
630
774
 
775
+ // ─────────────────────────────────────────────────────────────────
776
+ // Mail: Close task conversation on terminate
777
+ // ─────────────────────────────────────────────────────────────────
778
+ if (mailService && conversationMap) {
779
+ try {
780
+ const convId = conversationMap.getAgentConversation(agentId);
781
+ if (convId) {
782
+ mailService.closeConversation({
783
+ conversationId: convId,
784
+ closedBy: agentId,
785
+ reason: reason === "completed" ? "completed" : "failed",
786
+ });
787
+ }
788
+ // Close any peer conversations
789
+ const peerConvIds =
790
+ conversationMap.closePeerConversationsFor(agentId);
791
+ for (const peerConvId of peerConvIds) {
792
+ mailService.closeConversation({
793
+ conversationId: peerConvId,
794
+ closedBy: agentId,
795
+ reason: "participant_left",
796
+ });
797
+ }
798
+ conversationMap.removeAgent(agentId);
799
+ } catch (err) {
800
+ console.warn(
801
+ `[AgentManager] Failed to close conversation for ${agentId}:`,
802
+ err
803
+ );
804
+ }
805
+ }
806
+
631
807
  // Emit terminate event
632
808
  eventStore.emit({
633
809
  type: "terminate",
@@ -1160,6 +1336,18 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
1160
1336
  }
1161
1337
  }
1162
1338
 
1339
+ // ─────────────────────────────────────────────────────────────────
1340
+ // Mail Services (Late Binding)
1341
+ // ─────────────────────────────────────────────────────────────────
1342
+
1343
+ function setMailServices(
1344
+ ms: import("../mail/mail-service.js").MailService,
1345
+ cm: import("../mail/conversation-map.js").ConversationMap
1346
+ ): void {
1347
+ mailService = ms;
1348
+ conversationMap = cm;
1349
+ }
1350
+
1163
1351
  // ─────────────────────────────────────────────────────────────────
1164
1352
  // Cleanup
1165
1353
  // ─────────────────────────────────────────────────────────────────
@@ -1189,10 +1377,91 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
1189
1377
  lifecycleListeners.clear();
1190
1378
  }
1191
1379
 
1380
+ function setSpawnInterceptor(interceptor: SpawnInterceptor | null): void {
1381
+ spawnInterceptor = interceptor;
1382
+ }
1383
+
1384
+ function getRoleRegistry(): RoleRegistry {
1385
+ return roleRegistry;
1386
+ }
1387
+
1388
+ /**
1389
+ * Continue a terminated agent by spawning a new agent with the same
1390
+ * role and task, injecting prior conversation context as a resume prefix.
1391
+ */
1392
+ async function continueAgent(
1393
+ agentId: AgentId,
1394
+ options?: ContinueAgentOptions
1395
+ ): Promise<SpawnedAgent> {
1396
+ const agent = eventStore.getAgent(agentId);
1397
+ if (!agent) {
1398
+ throw new AgentManagerError(
1399
+ `Agent not found: ${agentId}`,
1400
+ "AGENT_NOT_FOUND",
1401
+ agentId
1402
+ );
1403
+ }
1404
+
1405
+ // Build resume context from EventStore events
1406
+ const maxMessages = options?.maxMessages ?? 50;
1407
+ const events = eventStore.query({
1408
+ type: "status",
1409
+ source_agent_id: agentId,
1410
+ limit: maxMessages,
1411
+ });
1412
+
1413
+ // Format conversation turns as resume context
1414
+ const contextLines: string[] = [];
1415
+ if (options?.additionalContext) {
1416
+ contextLines.push(options.additionalContext);
1417
+ }
1418
+
1419
+ if (events.length > 0) {
1420
+ contextLines.push("## Prior Session Context");
1421
+ contextLines.push(`Continuing from agent ${agentId} (${events.length} events).`);
1422
+ for (const event of events.slice(-20)) {
1423
+ const summary = event.payload?.summary;
1424
+ if (summary && typeof summary === "string") {
1425
+ contextLines.push(`- ${summary}`);
1426
+ }
1427
+ }
1428
+ }
1429
+
1430
+ const resumeContext = contextLines.join("\n");
1431
+
1432
+ // Spawn a continuation agent with same role, task, and context
1433
+ const taskDescription =
1434
+ options?.task ??
1435
+ agent.task ??
1436
+ `Continue work from ${agentId}`;
1437
+
1438
+ const newAgent = await spawn({
1439
+ task: taskDescription,
1440
+ role: agent.role,
1441
+ parent: agent.parent ?? undefined,
1442
+ cwd: agent.cwd ?? defaultCwd,
1443
+ customPrompt: resumeContext || undefined,
1444
+ });
1445
+
1446
+ // Emit continuation event
1447
+ eventStore.emit({
1448
+ type: "status",
1449
+ source: { agent_id: newAgent.id },
1450
+ payload: {
1451
+ status_type: "started",
1452
+ summary: `Continuation of agent ${agentId}`,
1453
+ continuation_of: agentId,
1454
+ },
1455
+ });
1456
+
1457
+ return newAgent;
1458
+ }
1459
+
1192
1460
  return {
1193
1461
  spawn,
1194
1462
  terminate,
1195
1463
  resume,
1464
+ continueAgent,
1196
1465
  get,
1197
1466
  list,
1198
1467
  getChildren,
@@ -1209,6 +1478,9 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
1209
1478
  respondToPermission,
1210
1479
  cancelPermission,
1211
1480
  onLifecycleEvent,
1481
+ setSpawnInterceptor,
1482
+ getRoleRegistry,
1483
+ setMailServices,
1212
1484
  close,
1213
1485
  };
1214
1486
  }
@@ -51,6 +51,19 @@ export interface SpawnAgentOptions {
51
51
  /** Optional agent type (defaults to "claude-code") */
52
52
  agentType?: string;
53
53
 
54
+ /**
55
+ * Custom prompt content injected as the role instructions section.
56
+ * When set, replaces resolvedRole.systemPrompt in prompt assembly.
57
+ * Used by team templates to provide static role prompts.
58
+ */
59
+ customPrompt?: string;
60
+
61
+ /**
62
+ * Interaction pattern sections to append after the role prompt.
63
+ * Auto-generated by TeamRuntime based on team config (pull mode, etc.).
64
+ */
65
+ interactionPatterns?: string[];
66
+
54
67
  // ─────────────────────────────────────────────────────────────────
55
68
  // Workspace-related fields (Phase 2)
56
69
  // ─────────────────────────────────────────────────────────────────
@@ -80,6 +93,20 @@ export interface SpawnAgentOptions {
80
93
  dataplaneTaskId?: string;
81
94
  }
82
95
 
96
+ /**
97
+ * Options for continuing a terminated agent
98
+ */
99
+ export interface ContinueAgentOptions {
100
+ /** Maximum number of conversation turns to include in context (default: 50) */
101
+ maxMessages?: number;
102
+
103
+ /** Override the task description for the continuation */
104
+ task?: string;
105
+
106
+ /** Additional context to prepend to the continuation prompt */
107
+ additionalContext?: string;
108
+ }
109
+
83
110
  /**
84
111
  * Custom agent configuration
85
112
  */
package/src/agent/wake.ts CHANGED
@@ -4,6 +4,21 @@
4
4
  * Implements progressive waking for agents based on activity and priority.
5
5
  * Supports inject/interrupt fallback chain.
6
6
  *
7
+ * ## Wake System Architecture
8
+ *
9
+ * This module provides **single-agent wake** functionality:
10
+ * - Immediately wake a single agent with an Activity
11
+ * - Priority-driven decision making (urgent/high/normal/low)
12
+ * - Inject → Interrupt → Queue fallback chain
13
+ * - Returns `WakeResult` from activity/types.ts
14
+ *
15
+ * For **batch wake cycles** (periodic delivery to multiple agents),
16
+ * see trigger/wake/wake-manager.ts which provides:
17
+ * - Heartbeat-based polling
18
+ * - Coalesced wake requests
19
+ * - Queue-based event delivery
20
+ * - Returns `WakeCycleStatus`
21
+ *
7
22
  * @module agent/wake
8
23
  * @see s-9rld In-Flight Steering spec section 3.4
9
24
  */