macro-agent 0.2.5 → 0.2.6

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 (992) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -56
  3. package/dist/acp/websocket-server.d.ts +6 -0
  4. package/dist/acp/websocket-server.d.ts.map +1 -1
  5. package/dist/acp/websocket-server.js +13 -0
  6. package/dist/acp/websocket-server.js.map +1 -1
  7. package/dist/acp/websocket-stream.d.ts +30 -0
  8. package/dist/acp/websocket-stream.d.ts.map +1 -0
  9. package/dist/acp/websocket-stream.js +118 -0
  10. package/dist/acp/websocket-stream.js.map +1 -0
  11. package/dist/activity/deduplication.d.ts +85 -0
  12. package/dist/activity/deduplication.d.ts.map +1 -0
  13. package/dist/activity/deduplication.js +149 -0
  14. package/dist/activity/deduplication.js.map +1 -0
  15. package/dist/activity/index.d.ts +16 -0
  16. package/dist/activity/index.d.ts.map +1 -0
  17. package/dist/activity/index.js +17 -0
  18. package/dist/activity/index.js.map +1 -0
  19. package/dist/activity/relevance.d.ts +81 -0
  20. package/dist/activity/relevance.d.ts.map +1 -0
  21. package/dist/activity/relevance.js +161 -0
  22. package/dist/activity/relevance.js.map +1 -0
  23. package/dist/activity/types.d.ts +169 -0
  24. package/dist/activity/types.d.ts.map +1 -0
  25. package/dist/activity/types.js +33 -0
  26. package/dist/activity/types.js.map +1 -0
  27. package/dist/activity/watcher.d.ts +64 -0
  28. package/dist/activity/watcher.d.ts.map +1 -0
  29. package/dist/activity/watcher.js +212 -0
  30. package/dist/activity/watcher.js.map +1 -0
  31. package/dist/adapters/federation.d.ts +8 -1
  32. package/dist/adapters/federation.d.ts.map +1 -1
  33. package/dist/adapters/federation.js +33 -2
  34. package/dist/adapters/federation.js.map +1 -1
  35. package/dist/agent/agent-manager-v2.d.ts.map +1 -1
  36. package/dist/agent/agent-manager-v2.js +7 -24
  37. package/dist/agent/agent-manager-v2.js.map +1 -1
  38. package/dist/agent/wake.d.ts +85 -0
  39. package/dist/agent/wake.d.ts.map +1 -0
  40. package/dist/agent/wake.js +278 -0
  41. package/dist/agent/wake.js.map +1 -0
  42. package/dist/api/server.d.ts.map +1 -1
  43. package/dist/api/server.js +41 -25
  44. package/dist/api/server.js.map +1 -1
  45. package/dist/api/types.d.ts +6 -0
  46. package/dist/api/types.d.ts.map +1 -1
  47. package/dist/auth/server-auth.d.ts +43 -0
  48. package/dist/auth/server-auth.d.ts.map +1 -0
  49. package/dist/auth/server-auth.js +80 -0
  50. package/dist/auth/server-auth.js.map +1 -0
  51. package/dist/auth/token.d.ts +4 -0
  52. package/dist/auth/token.d.ts.map +1 -1
  53. package/dist/auth/token.js +7 -6
  54. package/dist/auth/token.js.map +1 -1
  55. package/dist/boot-v2.d.ts +6 -3
  56. package/dist/boot-v2.d.ts.map +1 -1
  57. package/dist/boot-v2.js +44 -25
  58. package/dist/boot-v2.js.map +1 -1
  59. package/dist/cognitive/team-lifecycle.d.ts +82 -0
  60. package/dist/cognitive/team-lifecycle.d.ts.map +1 -0
  61. package/dist/cognitive/team-lifecycle.js +121 -0
  62. package/dist/cognitive/team-lifecycle.js.map +1 -0
  63. package/dist/cognitive/trajectory-extractor.d.ts +25 -0
  64. package/dist/cognitive/trajectory-extractor.d.ts.map +1 -0
  65. package/dist/cognitive/trajectory-extractor.js +134 -0
  66. package/dist/cognitive/trajectory-extractor.js.map +1 -0
  67. package/dist/control/control-server.d.ts.map +1 -1
  68. package/dist/control/control-server.js +10 -0
  69. package/dist/control/control-server.js.map +1 -1
  70. package/dist/dispatch/mail-inbound-consumer.d.ts.map +1 -1
  71. package/dist/dispatch/mail-inbound-consumer.js +43 -10
  72. package/dist/dispatch/mail-inbound-consumer.js.map +1 -1
  73. package/dist/index.d.ts +4 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +6 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/lifecycle/handlers/generic.d.ts +27 -0
  78. package/dist/lifecycle/handlers/generic.d.ts.map +1 -0
  79. package/dist/lifecycle/handlers/generic.js +56 -0
  80. package/dist/lifecycle/handlers/generic.js.map +1 -0
  81. package/dist/lifecycle/handlers/index.d.ts +51 -0
  82. package/dist/lifecycle/handlers/index.d.ts.map +1 -0
  83. package/dist/lifecycle/handlers/index.js +110 -0
  84. package/dist/lifecycle/handlers/index.js.map +1 -0
  85. package/dist/lifecycle/handlers/integrator.d.ts +81 -0
  86. package/dist/lifecycle/handlers/integrator.d.ts.map +1 -0
  87. package/dist/lifecycle/handlers/integrator.js +451 -0
  88. package/dist/lifecycle/handlers/integrator.js.map +1 -0
  89. package/dist/lifecycle/handlers/monitor.d.ts +29 -0
  90. package/dist/lifecycle/handlers/monitor.d.ts.map +1 -0
  91. package/dist/lifecycle/handlers/monitor.js +79 -0
  92. package/dist/lifecycle/handlers/monitor.js.map +1 -0
  93. package/dist/lifecycle/handlers/worker.d.ts +56 -0
  94. package/dist/lifecycle/handlers/worker.d.ts.map +1 -0
  95. package/dist/lifecycle/handlers/worker.js +381 -0
  96. package/dist/lifecycle/handlers/worker.js.map +1 -0
  97. package/dist/lifecycle/handlers-v2.d.ts +0 -2
  98. package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
  99. package/dist/lifecycle/handlers-v2.js +4 -55
  100. package/dist/lifecycle/handlers-v2.js.map +1 -1
  101. package/dist/mail/conversation-map.d.ts +33 -0
  102. package/dist/mail/conversation-map.d.ts.map +1 -0
  103. package/dist/mail/conversation-map.js +61 -0
  104. package/dist/mail/conversation-map.js.map +1 -0
  105. package/dist/mail/index.d.ts +11 -0
  106. package/dist/mail/index.d.ts.map +1 -0
  107. package/dist/mail/index.js +11 -0
  108. package/dist/mail/index.js.map +1 -0
  109. package/dist/mail/mail-service.d.ts +85 -0
  110. package/dist/mail/mail-service.d.ts.map +1 -0
  111. package/dist/mail/mail-service.js +121 -0
  112. package/dist/mail/mail-service.js.map +1 -0
  113. package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
  114. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
  115. package/dist/mail/stores/eventstore-conversation-store.js +131 -0
  116. package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
  117. package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
  118. package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
  119. package/dist/mail/stores/eventstore-participant-store.js +145 -0
  120. package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
  121. package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
  122. package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
  123. package/dist/mail/stores/eventstore-thread-store.js +118 -0
  124. package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
  125. package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
  126. package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
  127. package/dist/mail/stores/eventstore-turn-store.js +153 -0
  128. package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
  129. package/dist/mail/stores/index.d.ts +12 -0
  130. package/dist/mail/stores/index.d.ts.map +1 -0
  131. package/dist/mail/stores/index.js +12 -0
  132. package/dist/mail/stores/index.js.map +1 -0
  133. package/dist/mail/stores/types.d.ts +146 -0
  134. package/dist/mail/stores/types.d.ts.map +1 -0
  135. package/dist/mail/stores/types.js +13 -0
  136. package/dist/mail/stores/types.js.map +1 -0
  137. package/dist/mail/turn-recorder.d.ts +30 -0
  138. package/dist/mail/turn-recorder.d.ts.map +1 -0
  139. package/dist/mail/turn-recorder.js +98 -0
  140. package/dist/mail/turn-recorder.js.map +1 -0
  141. package/dist/map/adapter/acp-over-map.d.ts +115 -0
  142. package/dist/map/adapter/acp-over-map.d.ts.map +1 -0
  143. package/dist/map/adapter/acp-over-map.js +1024 -0
  144. package/dist/map/adapter/acp-over-map.js.map +1 -0
  145. package/dist/map/adapter/connection-manager.d.ts +150 -0
  146. package/dist/map/adapter/connection-manager.d.ts.map +1 -0
  147. package/dist/map/adapter/connection-manager.js +207 -0
  148. package/dist/map/adapter/connection-manager.js.map +1 -0
  149. package/dist/map/adapter/event-log.d.ts +87 -0
  150. package/dist/map/adapter/event-log.d.ts.map +1 -0
  151. package/dist/map/adapter/event-log.js +122 -0
  152. package/dist/map/adapter/event-log.js.map +1 -0
  153. package/dist/map/adapter/event-translator.d.ts +85 -0
  154. package/dist/map/adapter/event-translator.d.ts.map +1 -0
  155. package/dist/map/adapter/event-translator.js +295 -0
  156. package/dist/map/adapter/event-translator.js.map +1 -0
  157. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  158. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  159. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  160. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  161. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  162. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  163. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  164. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  165. package/dist/map/adapter/extensions/cognitive.d.ts +27 -0
  166. package/dist/map/adapter/extensions/cognitive.d.ts.map +1 -0
  167. package/dist/map/adapter/extensions/cognitive.js +158 -0
  168. package/dist/map/adapter/extensions/cognitive.js.map +1 -0
  169. package/dist/map/adapter/extensions/index.d.ts +95 -0
  170. package/dist/map/adapter/extensions/index.d.ts.map +1 -0
  171. package/dist/map/adapter/extensions/index.js +228 -0
  172. package/dist/map/adapter/extensions/index.js.map +1 -0
  173. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  174. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  175. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  176. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  177. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  178. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  179. package/dist/map/adapter/extensions/resume.js +59 -0
  180. package/dist/map/adapter/extensions/resume.js.map +1 -0
  181. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  182. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  183. package/dist/map/adapter/extensions/streams.js +515 -0
  184. package/dist/map/adapter/extensions/streams.js.map +1 -0
  185. package/dist/map/adapter/extensions/task.d.ts +40 -0
  186. package/dist/map/adapter/extensions/task.d.ts.map +1 -0
  187. package/dist/map/adapter/extensions/task.js +197 -0
  188. package/dist/map/adapter/extensions/task.js.map +1 -0
  189. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  190. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  191. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  192. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  193. package/dist/map/adapter/extensions/wake.d.ts +60 -0
  194. package/dist/map/adapter/extensions/wake.d.ts.map +1 -0
  195. package/dist/map/adapter/extensions/wake.js +144 -0
  196. package/dist/map/adapter/extensions/wake.js.map +1 -0
  197. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  198. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  199. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  200. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  201. package/dist/map/adapter/extensions/workspace.d.ts +57 -0
  202. package/dist/map/adapter/extensions/workspace.d.ts.map +1 -0
  203. package/dist/map/adapter/extensions/workspace.js +81 -0
  204. package/dist/map/adapter/extensions/workspace.js.map +1 -0
  205. package/dist/map/adapter/index.d.ts +20 -0
  206. package/dist/map/adapter/index.d.ts.map +1 -0
  207. package/dist/map/adapter/index.js +40 -0
  208. package/dist/map/adapter/index.js.map +1 -0
  209. package/dist/map/adapter/interface.d.ts +450 -0
  210. package/dist/map/adapter/interface.d.ts.map +1 -0
  211. package/dist/map/adapter/interface.js +24 -0
  212. package/dist/map/adapter/interface.js.map +1 -0
  213. package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
  214. package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
  215. package/dist/map/adapter/mail-handler-adapter.js +292 -0
  216. package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
  217. package/dist/map/adapter/map-adapter.d.ts +200 -0
  218. package/dist/map/adapter/map-adapter.d.ts.map +1 -0
  219. package/dist/map/adapter/map-adapter.js +1199 -0
  220. package/dist/map/adapter/map-adapter.js.map +1 -0
  221. package/dist/map/adapter/rpc-handler.d.ts +263 -0
  222. package/dist/map/adapter/rpc-handler.d.ts.map +1 -0
  223. package/dist/map/adapter/rpc-handler.js +365 -0
  224. package/dist/map/adapter/rpc-handler.js.map +1 -0
  225. package/dist/map/adapter/subscription-manager.d.ts +174 -0
  226. package/dist/map/adapter/subscription-manager.d.ts.map +1 -0
  227. package/dist/map/adapter/subscription-manager.js +248 -0
  228. package/dist/map/adapter/subscription-manager.js.map +1 -0
  229. package/dist/map/adapter/types.d.ts +194 -0
  230. package/dist/map/adapter/types.d.ts.map +1 -0
  231. package/dist/map/adapter/types.js +27 -0
  232. package/dist/map/adapter/types.js.map +1 -0
  233. package/dist/map/adapter/websocket-integration.d.ts +113 -0
  234. package/dist/map/adapter/websocket-integration.d.ts.map +1 -0
  235. package/dist/map/adapter/websocket-integration.js +134 -0
  236. package/dist/map/adapter/websocket-integration.js.map +1 -0
  237. package/dist/map/cascade-action-handler.d.ts.map +1 -1
  238. package/dist/map/cascade-action-handler.js +19 -5
  239. package/dist/map/cascade-action-handler.js.map +1 -1
  240. package/dist/map/federation/envelope.d.ts +98 -0
  241. package/dist/map/federation/envelope.d.ts.map +1 -0
  242. package/dist/map/federation/envelope.js +160 -0
  243. package/dist/map/federation/envelope.js.map +1 -0
  244. package/dist/map/federation/federation-handler.d.ts +50 -0
  245. package/dist/map/federation/federation-handler.d.ts.map +1 -0
  246. package/dist/map/federation/federation-handler.js +306 -0
  247. package/dist/map/federation/federation-handler.js.map +1 -0
  248. package/dist/map/federation/index.d.ts +14 -0
  249. package/dist/map/federation/index.d.ts.map +1 -0
  250. package/dist/map/federation/index.js +13 -0
  251. package/dist/map/federation/index.js.map +1 -0
  252. package/dist/map/federation/types.d.ts +239 -0
  253. package/dist/map/federation/types.d.ts.map +1 -0
  254. package/dist/map/federation/types.js +23 -0
  255. package/dist/map/federation/types.js.map +1 -0
  256. package/dist/map/server.d.ts.map +1 -1
  257. package/dist/map/server.js +17 -2
  258. package/dist/map/server.js.map +1 -1
  259. package/dist/map/types.d.ts +6 -0
  260. package/dist/map/types.d.ts.map +1 -1
  261. package/dist/mcp/map-client.d.ts +39 -0
  262. package/dist/mcp/map-client.d.ts.map +1 -0
  263. package/dist/mcp/map-client.js +129 -0
  264. package/dist/mcp/map-client.js.map +1 -0
  265. package/dist/mcp/mcp-server.d.ts +72 -0
  266. package/dist/mcp/mcp-server.d.ts.map +1 -0
  267. package/dist/mcp/mcp-server.js +1027 -0
  268. package/dist/mcp/mcp-server.js.map +1 -0
  269. package/dist/mcp/tools/claim_task.d.ts +35 -0
  270. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  271. package/dist/mcp/tools/claim_task.js +58 -0
  272. package/dist/mcp/tools/claim_task.js.map +1 -0
  273. package/dist/mcp/tools/done-v2.d.ts +0 -1
  274. package/dist/mcp/tools/done-v2.d.ts.map +1 -1
  275. package/dist/mcp/tools/done-v2.js +0 -1
  276. package/dist/mcp/tools/done-v2.js.map +1 -1
  277. package/dist/mcp/tools/done.d.ts +102 -0
  278. package/dist/mcp/tools/done.d.ts.map +1 -0
  279. package/dist/mcp/tools/done.js +253 -0
  280. package/dist/mcp/tools/done.js.map +1 -0
  281. package/dist/mcp/tools/inject_context.d.ts +61 -0
  282. package/dist/mcp/tools/inject_context.d.ts.map +1 -0
  283. package/dist/mcp/tools/inject_context.js +123 -0
  284. package/dist/mcp/tools/inject_context.js.map +1 -0
  285. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  286. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  287. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  288. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  289. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  290. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  291. package/dist/mcp/tools/unclaim_task.js +47 -0
  292. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  293. package/dist/mcp/tools/wait_for_activity.d.ts +60 -0
  294. package/dist/mcp/tools/wait_for_activity.d.ts.map +1 -0
  295. package/dist/mcp/tools/wait_for_activity.js +135 -0
  296. package/dist/mcp/tools/wait_for_activity.js.map +1 -0
  297. package/dist/monitor/health-check-service.d.ts +143 -0
  298. package/dist/monitor/health-check-service.d.ts.map +1 -0
  299. package/dist/monitor/health-check-service.js +240 -0
  300. package/dist/monitor/health-check-service.js.map +1 -0
  301. package/dist/monitor/index.d.ts +14 -0
  302. package/dist/monitor/index.d.ts.map +1 -0
  303. package/dist/monitor/index.js +14 -0
  304. package/dist/monitor/index.js.map +1 -0
  305. package/dist/monitor/stall-detector.d.ts +109 -0
  306. package/dist/monitor/stall-detector.d.ts.map +1 -0
  307. package/dist/monitor/stall-detector.js +152 -0
  308. package/dist/monitor/stall-detector.js.map +1 -0
  309. package/dist/peer/capability-manager.d.ts +56 -0
  310. package/dist/peer/capability-manager.d.ts.map +1 -0
  311. package/dist/peer/capability-manager.js +186 -0
  312. package/dist/peer/capability-manager.js.map +1 -0
  313. package/dist/peer/encapsulation-manager.d.ts +190 -0
  314. package/dist/peer/encapsulation-manager.d.ts.map +1 -0
  315. package/dist/peer/encapsulation-manager.js +486 -0
  316. package/dist/peer/encapsulation-manager.js.map +1 -0
  317. package/dist/peer/federation-manager.d.ts +223 -0
  318. package/dist/peer/federation-manager.d.ts.map +1 -0
  319. package/dist/peer/federation-manager.js +528 -0
  320. package/dist/peer/federation-manager.js.map +1 -0
  321. package/dist/peer/hierarchy-errors.d.ts +208 -0
  322. package/dist/peer/hierarchy-errors.d.ts.map +1 -0
  323. package/dist/peer/hierarchy-errors.js +268 -0
  324. package/dist/peer/hierarchy-errors.js.map +1 -0
  325. package/dist/peer/hierarchy-protocol.d.ts +159 -0
  326. package/dist/peer/hierarchy-protocol.d.ts.map +1 -0
  327. package/dist/peer/hierarchy-protocol.js +142 -0
  328. package/dist/peer/hierarchy-protocol.js.map +1 -0
  329. package/dist/peer/index.d.ts +15 -0
  330. package/dist/peer/index.d.ts.map +1 -0
  331. package/dist/peer/index.js +15 -0
  332. package/dist/peer/index.js.map +1 -0
  333. package/dist/peer/peer-manager.d.ts +99 -0
  334. package/dist/peer/peer-manager.d.ts.map +1 -0
  335. package/dist/peer/peer-manager.js +333 -0
  336. package/dist/peer/peer-manager.js.map +1 -0
  337. package/dist/peer/task-delegation.d.ts +189 -0
  338. package/dist/peer/task-delegation.d.ts.map +1 -0
  339. package/dist/peer/task-delegation.js +303 -0
  340. package/dist/peer/task-delegation.js.map +1 -0
  341. package/dist/peer/transports/index.d.ts +8 -0
  342. package/dist/peer/transports/index.d.ts.map +1 -0
  343. package/dist/peer/transports/index.js +8 -0
  344. package/dist/peer/transports/index.js.map +1 -0
  345. package/dist/peer/transports/local-transport.d.ts +56 -0
  346. package/dist/peer/transports/local-transport.d.ts.map +1 -0
  347. package/dist/peer/transports/local-transport.js +263 -0
  348. package/dist/peer/transports/local-transport.js.map +1 -0
  349. package/dist/peer/transports/websocket-transport.d.ts +86 -0
  350. package/dist/peer/transports/websocket-transport.d.ts.map +1 -0
  351. package/dist/peer/transports/websocket-transport.js +338 -0
  352. package/dist/peer/transports/websocket-transport.js.map +1 -0
  353. package/dist/peer/types.d.ts +268 -0
  354. package/dist/peer/types.d.ts.map +1 -0
  355. package/dist/peer/types.js +36 -0
  356. package/dist/peer/types.js.map +1 -0
  357. package/dist/router/address-resolver.d.ts +102 -0
  358. package/dist/router/address-resolver.d.ts.map +1 -0
  359. package/dist/router/address-resolver.js +198 -0
  360. package/dist/router/address-resolver.js.map +1 -0
  361. package/dist/router/broadcast.d.ts +53 -0
  362. package/dist/router/broadcast.d.ts.map +1 -0
  363. package/dist/router/broadcast.js +75 -0
  364. package/dist/router/broadcast.js.map +1 -0
  365. package/dist/router/channels.d.ts +148 -0
  366. package/dist/router/channels.d.ts.map +1 -0
  367. package/dist/router/channels.js +126 -0
  368. package/dist/router/channels.js.map +1 -0
  369. package/dist/router/index.d.ts +21 -0
  370. package/dist/router/index.d.ts.map +1 -0
  371. package/dist/router/index.js +18 -0
  372. package/dist/router/index.js.map +1 -0
  373. package/dist/router/message-router.d.ts +197 -0
  374. package/dist/router/message-router.d.ts.map +1 -0
  375. package/dist/router/message-router.js +903 -0
  376. package/dist/router/message-router.js.map +1 -0
  377. package/dist/router/message-types.d.ts +183 -0
  378. package/dist/router/message-types.d.ts.map +1 -0
  379. package/dist/router/message-types.js +79 -0
  380. package/dist/router/message-types.js.map +1 -0
  381. package/dist/router/role-resolver.d.ts +67 -0
  382. package/dist/router/role-resolver.d.ts.map +1 -0
  383. package/dist/router/role-resolver.js +106 -0
  384. package/dist/router/role-resolver.js.map +1 -0
  385. package/dist/router/signals.d.ts +253 -0
  386. package/dist/router/signals.d.ts.map +1 -0
  387. package/dist/router/signals.js +53 -0
  388. package/dist/router/signals.js.map +1 -0
  389. package/dist/router/types.d.ts +191 -0
  390. package/dist/router/types.d.ts.map +1 -0
  391. package/dist/router/types.js +34 -0
  392. package/dist/router/types.js.map +1 -0
  393. package/dist/router/wake.d.ts +111 -0
  394. package/dist/router/wake.d.ts.map +1 -0
  395. package/dist/router/wake.js +180 -0
  396. package/dist/router/wake.js.map +1 -0
  397. package/dist/server/combined-server.d.ts +95 -0
  398. package/dist/server/combined-server.d.ts.map +1 -0
  399. package/dist/server/combined-server.js +335 -0
  400. package/dist/server/combined-server.js.map +1 -0
  401. package/dist/steering/index.d.ts +11 -0
  402. package/dist/steering/index.d.ts.map +1 -0
  403. package/dist/steering/index.js +11 -0
  404. package/dist/steering/index.js.map +1 -0
  405. package/dist/steering/inject.d.ts +39 -0
  406. package/dist/steering/inject.d.ts.map +1 -0
  407. package/dist/steering/inject.js +197 -0
  408. package/dist/steering/inject.js.map +1 -0
  409. package/dist/steering/types.d.ts +100 -0
  410. package/dist/steering/types.d.ts.map +1 -0
  411. package/dist/steering/types.js +11 -0
  412. package/dist/steering/types.js.map +1 -0
  413. package/dist/store/backends/index.d.ts +11 -0
  414. package/dist/store/backends/index.d.ts.map +1 -0
  415. package/dist/store/backends/index.js +15 -0
  416. package/dist/store/backends/index.js.map +1 -0
  417. package/dist/store/backends/json-backend.d.ts +23 -0
  418. package/dist/store/backends/json-backend.d.ts.map +1 -0
  419. package/dist/store/backends/json-backend.js +220 -0
  420. package/dist/store/backends/json-backend.js.map +1 -0
  421. package/dist/store/backends/memory-backend.d.ts +12 -0
  422. package/dist/store/backends/memory-backend.d.ts.map +1 -0
  423. package/dist/store/backends/memory-backend.js +205 -0
  424. package/dist/store/backends/memory-backend.js.map +1 -0
  425. package/dist/store/backends/sqlite-backend.d.ts +27 -0
  426. package/dist/store/backends/sqlite-backend.d.ts.map +1 -0
  427. package/dist/store/backends/sqlite-backend.js +231 -0
  428. package/dist/store/backends/sqlite-backend.js.map +1 -0
  429. package/dist/store/backends/tinybase-backend.d.ts +22 -0
  430. package/dist/store/backends/tinybase-backend.d.ts.map +1 -0
  431. package/dist/store/backends/tinybase-backend.js +203 -0
  432. package/dist/store/backends/tinybase-backend.js.map +1 -0
  433. package/dist/store/backends/types.d.ts +175 -0
  434. package/dist/store/backends/types.d.ts.map +1 -0
  435. package/dist/store/backends/types.js +28 -0
  436. package/dist/store/backends/types.js.map +1 -0
  437. package/dist/store/event-store.d.ts +128 -0
  438. package/dist/store/event-store.d.ts.map +1 -0
  439. package/dist/store/event-store.js +1751 -0
  440. package/dist/store/event-store.js.map +1 -0
  441. package/dist/store/instance.d.ts +290 -0
  442. package/dist/store/instance.d.ts.map +1 -0
  443. package/dist/store/instance.js +363 -0
  444. package/dist/store/instance.js.map +1 -0
  445. package/dist/store/migrations.d.ts +41 -0
  446. package/dist/store/migrations.d.ts.map +1 -0
  447. package/dist/store/migrations.js +79 -0
  448. package/dist/store/migrations.js.map +1 -0
  449. package/dist/store/test-utils.d.ts +63 -0
  450. package/dist/store/test-utils.d.ts.map +1 -0
  451. package/dist/store/test-utils.js +63 -0
  452. package/dist/store/test-utils.js.map +1 -0
  453. package/dist/store/types/config.d.ts +16 -0
  454. package/dist/store/types/config.d.ts.map +1 -0
  455. package/dist/store/types/config.js +8 -0
  456. package/dist/store/types/config.js.map +1 -0
  457. package/dist/store/types/conversations.d.ts +91 -0
  458. package/dist/store/types/conversations.d.ts.map +1 -0
  459. package/dist/store/types/conversations.js +8 -0
  460. package/dist/store/types/conversations.js.map +1 -0
  461. package/dist/store/types/sessions.d.ts +44 -0
  462. package/dist/store/types/sessions.d.ts.map +1 -0
  463. package/dist/store/types/sessions.js +9 -0
  464. package/dist/store/types/sessions.js.map +1 -0
  465. package/dist/store/types.d.ts +115 -0
  466. package/dist/store/types.d.ts.map +1 -0
  467. package/dist/store/types.js +6 -0
  468. package/dist/store/types.js.map +1 -0
  469. package/dist/task/backend/index.d.ts +93 -0
  470. package/dist/task/backend/index.d.ts.map +1 -0
  471. package/dist/task/backend/index.js +178 -0
  472. package/dist/task/backend/index.js.map +1 -0
  473. package/dist/task/backend/memory.d.ts +70 -0
  474. package/dist/task/backend/memory.d.ts.map +1 -0
  475. package/dist/task/backend/memory.js +621 -0
  476. package/dist/task/backend/memory.js.map +1 -0
  477. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  478. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  479. package/dist/task/backend/opentasks/backend.js +1023 -0
  480. package/dist/task/backend/opentasks/backend.js.map +1 -0
  481. package/dist/task/backend/opentasks/client.d.ts +337 -0
  482. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  483. package/dist/task/backend/opentasks/client.js +225 -0
  484. package/dist/task/backend/opentasks/client.js.map +1 -0
  485. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  486. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  487. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  488. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  489. package/dist/task/backend/opentasks/index.d.ts +21 -0
  490. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  491. package/dist/task/backend/opentasks/index.js +21 -0
  492. package/dist/task/backend/opentasks/index.js.map +1 -0
  493. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  494. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  495. package/dist/task/backend/opentasks/mapping.js +77 -0
  496. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  497. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +54 -0
  498. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +1 -0
  499. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +88 -0
  500. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +1 -0
  501. package/dist/task/backend/sudocode/backend.d.ts +155 -0
  502. package/dist/task/backend/sudocode/backend.d.ts.map +1 -0
  503. package/dist/task/backend/sudocode/backend.js +942 -0
  504. package/dist/task/backend/sudocode/backend.js.map +1 -0
  505. package/dist/task/backend/sudocode/client.d.ts +303 -0
  506. package/dist/task/backend/sudocode/client.d.ts.map +1 -0
  507. package/dist/task/backend/sudocode/client.js +101 -0
  508. package/dist/task/backend/sudocode/client.js.map +1 -0
  509. package/dist/task/backend/sudocode/index.d.ts +19 -0
  510. package/dist/task/backend/sudocode/index.d.ts.map +1 -0
  511. package/dist/task/backend/sudocode/index.js +17 -0
  512. package/dist/task/backend/sudocode/index.js.map +1 -0
  513. package/dist/task/backend/sudocode/mapping.d.ts +51 -0
  514. package/dist/task/backend/sudocode/mapping.d.ts.map +1 -0
  515. package/dist/task/backend/sudocode/mapping.js +86 -0
  516. package/dist/task/backend/sudocode/mapping.js.map +1 -0
  517. package/dist/task/backend/sudocode/server-client.d.ts +56 -0
  518. package/dist/task/backend/sudocode/server-client.d.ts.map +1 -0
  519. package/dist/task/backend/sudocode/server-client.js +367 -0
  520. package/dist/task/backend/sudocode/server-client.js.map +1 -0
  521. package/dist/task/backend/sudocode/standalone-client.d.ts +91 -0
  522. package/dist/task/backend/sudocode/standalone-client.d.ts.map +1 -0
  523. package/dist/task/backend/sudocode/standalone-client.js +476 -0
  524. package/dist/task/backend/sudocode/standalone-client.js.map +1 -0
  525. package/dist/task/backend/sudocode/sync-policy.d.ts +166 -0
  526. package/dist/task/backend/sudocode/sync-policy.d.ts.map +1 -0
  527. package/dist/task/backend/sudocode/sync-policy.js +221 -0
  528. package/dist/task/backend/sudocode/sync-policy.js.map +1 -0
  529. package/dist/task/backend/sudocode/tools.d.ts +87 -0
  530. package/dist/task/backend/sudocode/tools.d.ts.map +1 -0
  531. package/dist/task/backend/sudocode/tools.js +743 -0
  532. package/dist/task/backend/sudocode/tools.js.map +1 -0
  533. package/dist/task/backend/tool-provider.d.ts +56 -0
  534. package/dist/task/backend/tool-provider.d.ts.map +1 -0
  535. package/dist/task/backend/tool-provider.js +424 -0
  536. package/dist/task/backend/tool-provider.js.map +1 -0
  537. package/dist/task/backend/types.d.ts +297 -0
  538. package/dist/task/backend/types.d.ts.map +1 -0
  539. package/dist/task/backend/types.js +27 -0
  540. package/dist/task/backend/types.js.map +1 -0
  541. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  542. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  543. package/dist/task/backend/unified-tool-provider.js +623 -0
  544. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  545. package/dist/task/index.d.ts +7 -0
  546. package/dist/task/index.d.ts.map +1 -0
  547. package/dist/task/index.js +7 -0
  548. package/dist/task/index.js.map +1 -0
  549. package/dist/task/retry-policy.d.ts +89 -0
  550. package/dist/task/retry-policy.d.ts.map +1 -0
  551. package/dist/task/retry-policy.js +160 -0
  552. package/dist/task/retry-policy.js.map +1 -0
  553. package/dist/task/task-manager.d.ts +70 -0
  554. package/dist/task/task-manager.d.ts.map +1 -0
  555. package/dist/task/task-manager.js +319 -0
  556. package/dist/task/task-manager.js.map +1 -0
  557. package/dist/task/types.d.ts +72 -0
  558. package/dist/task/types.d.ts.map +1 -0
  559. package/dist/task/types.js +33 -0
  560. package/dist/task/types.js.map +1 -0
  561. package/dist/teams/team-loader.d.ts +2 -1
  562. package/dist/teams/team-loader.d.ts.map +1 -1
  563. package/dist/teams/team-loader.js +2 -1
  564. package/dist/teams/team-loader.js.map +1 -1
  565. package/dist/teams/team-manager.d.ts +101 -0
  566. package/dist/teams/team-manager.d.ts.map +1 -0
  567. package/dist/teams/team-manager.js +260 -0
  568. package/dist/teams/team-manager.js.map +1 -0
  569. package/dist/teams/team-runtime-v2.d.ts +0 -3
  570. package/dist/teams/team-runtime-v2.d.ts.map +1 -1
  571. package/dist/teams/team-runtime-v2.js +8 -87
  572. package/dist/teams/team-runtime-v2.js.map +1 -1
  573. package/dist/teams/team-runtime.d.ts +245 -0
  574. package/dist/teams/team-runtime.d.ts.map +1 -0
  575. package/dist/teams/team-runtime.js +1023 -0
  576. package/dist/teams/team-runtime.js.map +1 -0
  577. package/dist/trigger/router/index.d.ts +11 -0
  578. package/dist/trigger/router/index.d.ts.map +1 -0
  579. package/dist/trigger/router/index.js +10 -0
  580. package/dist/trigger/router/index.js.map +1 -0
  581. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +34 -0
  582. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +1 -0
  583. package/dist/trigger/router/strategies/ai-router-strategy.js +359 -0
  584. package/dist/trigger/router/strategies/ai-router-strategy.js.map +1 -0
  585. package/dist/trigger/router/strategies/direct-strategy.d.ts +32 -0
  586. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +1 -0
  587. package/dist/trigger/router/strategies/direct-strategy.js +119 -0
  588. package/dist/trigger/router/strategies/direct-strategy.js.map +1 -0
  589. package/dist/trigger/router/strategies/index.d.ts +11 -0
  590. package/dist/trigger/router/strategies/index.d.ts.map +1 -0
  591. package/dist/trigger/router/strategies/index.js +11 -0
  592. package/dist/trigger/router/strategies/index.js.map +1 -0
  593. package/dist/trigger/router/strategies/role-strategy.d.ts +39 -0
  594. package/dist/trigger/router/strategies/role-strategy.d.ts.map +1 -0
  595. package/dist/trigger/router/strategies/role-strategy.js +207 -0
  596. package/dist/trigger/router/strategies/role-strategy.js.map +1 -0
  597. package/dist/trigger/router/trigger-router.d.ts +54 -0
  598. package/dist/trigger/router/trigger-router.d.ts.map +1 -0
  599. package/dist/trigger/router/trigger-router.js +362 -0
  600. package/dist/trigger/router/trigger-router.js.map +1 -0
  601. package/dist/trigger/router/types.d.ts +225 -0
  602. package/dist/trigger/router/types.d.ts.map +1 -0
  603. package/dist/trigger/router/types.js +10 -0
  604. package/dist/trigger/router/types.js.map +1 -0
  605. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  606. package/dist/trigger/sources/cron/cron-service.js +6 -3
  607. package/dist/trigger/sources/cron/cron-service.js.map +1 -1
  608. package/dist/trigger/trigger-system.d.ts +77 -0
  609. package/dist/trigger/trigger-system.d.ts.map +1 -0
  610. package/dist/trigger/trigger-system.js +84 -0
  611. package/dist/trigger/trigger-system.js.map +1 -0
  612. package/dist/util/git-safety.d.ts +33 -0
  613. package/dist/util/git-safety.d.ts.map +1 -0
  614. package/dist/util/git-safety.js +94 -0
  615. package/dist/util/git-safety.js.map +1 -0
  616. package/dist/workspace/dataplane-adapter.d.ts +260 -0
  617. package/dist/workspace/dataplane-adapter.d.ts.map +1 -0
  618. package/dist/workspace/dataplane-adapter.js +416 -0
  619. package/dist/workspace/dataplane-adapter.js.map +1 -0
  620. package/dist/workspace/index.d.ts +0 -1
  621. package/dist/workspace/index.d.ts.map +1 -1
  622. package/dist/workspace/index.js +0 -2
  623. package/dist/workspace/index.js.map +1 -1
  624. package/dist/workspace/landing/direct-push.d.ts.map +1 -1
  625. package/dist/workspace/landing/direct-push.js +22 -7
  626. package/dist/workspace/landing/direct-push.js.map +1 -1
  627. package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -1
  628. package/dist/workspace/landing/queue-to-branch.js +1 -3
  629. package/dist/workspace/landing/queue-to-branch.js.map +1 -1
  630. package/dist/workspace/types.d.ts +0 -13
  631. package/dist/workspace/types.d.ts.map +1 -1
  632. package/dist/workspace/workspace-manager.d.ts +0 -11
  633. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  634. package/dist/workspace/workspace-manager.js +0 -30
  635. package/dist/workspace/workspace-manager.js.map +1 -1
  636. package/package.json +28 -2
  637. package/templates/teams/self-driving/prompts/grinder.md +1 -0
  638. package/templates/teams/self-driving/prompts/judge.md +1 -0
  639. package/templates/teams/self-driving/prompts/planner.md +1 -0
  640. package/templates/teams/self-driving/roles/grinder.yaml +15 -0
  641. package/templates/teams/self-driving/roles/judge.yaml +10 -0
  642. package/templates/teams/self-driving/roles/planner.yaml +16 -0
  643. package/.claude/commands/openspec/apply.md +0 -23
  644. package/.claude/commands/openspec/archive.md +0 -27
  645. package/.claude/commands/openspec/proposal.md +0 -28
  646. package/.claude/settings.json +0 -133
  647. package/.gitattributes +0 -3
  648. package/.opentasks/config.json +0 -9
  649. package/.opentasks/graph.jsonl +0 -0
  650. package/.sessionlog/settings.json +0 -4
  651. package/.sudocode/issues.jsonl +0 -183
  652. package/.sudocode/specs.jsonl +0 -56
  653. package/AGENTS.md +0 -18
  654. package/CLAUDE.md +0 -923
  655. package/docs/architecture.md +0 -508
  656. package/docs/configuration.md +0 -323
  657. package/docs/conflict-recovery.md +0 -472
  658. package/docs/design/task-dispatcher.md +0 -880
  659. package/docs/design-subsystem-extraction.md +0 -627
  660. package/docs/git-cascade-integration-gaps.md +0 -678
  661. package/docs/implementation-details.md +0 -1127
  662. package/docs/implementation-summary.md +0 -448
  663. package/docs/lifecycle-events-design.md +0 -111
  664. package/docs/mail-integration.md +0 -608
  665. package/docs/openhive-capability-summary.md +0 -415
  666. package/docs/openhive-integration.md +0 -415
  667. package/docs/plan-self-driving-support.md +0 -433
  668. package/docs/roadmap-v2-gaps.md +0 -216
  669. package/docs/spec-self-driving-support.md +0 -462
  670. package/docs/team-templates.md +0 -860
  671. package/docs/teams.md +0 -306
  672. package/docs/trigger-system-design.md +0 -333
  673. package/docs/troubleshooting.md +0 -489
  674. package/docs/workspace-interfaces.md +0 -731
  675. package/docs/workspace-redesign-plan.md +0 -302
  676. package/examples/distributed-peer-communication.ts +0 -202
  677. package/examples/local-peer-communication.ts +0 -165
  678. package/index.js +0 -2
  679. package/mvp_docs/agent-execution-system.md +0 -347
  680. package/mvp_docs/agent-interface.md +0 -580
  681. package/mvp_docs/data-structures.md +0 -701
  682. package/mvp_docs/dynamic-meta-orchestration.md +0 -116
  683. package/mvp_docs/multi-agent-interaction-design.md +0 -779
  684. package/mvp_docs/mvp-implementation-plan.md +0 -1148
  685. package/renovate.json5 +0 -6
  686. package/scripts/test-acp-integration.ts +0 -422
  687. package/src/__tests__/boot-v2.test.ts +0 -631
  688. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +0 -496
  689. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +0 -457
  690. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +0 -770
  691. package/src/__tests__/e2e/auto-sync.e2e.test.ts +0 -257
  692. package/src/__tests__/e2e/bootstrap.e2e.test.ts +0 -319
  693. package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +0 -254
  694. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +0 -253
  695. package/src/__tests__/e2e/cli-run.e2e.test.ts +0 -167
  696. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +0 -282
  697. package/src/__tests__/e2e/dispatch-coordination.e2e.test.ts +0 -495
  698. package/src/__tests__/e2e/dispatch-live.e2e.test.ts +0 -564
  699. package/src/__tests__/e2e/dispatch-opentasks.e2e.test.ts +0 -496
  700. package/src/__tests__/e2e/dispatch-phase2-live.e2e.test.ts +0 -456
  701. package/src/__tests__/e2e/dispatch-phase2.e2e.test.ts +0 -386
  702. package/src/__tests__/e2e/dispatch.e2e.test.ts +0 -376
  703. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +0 -322
  704. package/src/__tests__/e2e/live-agent.e2e.test.ts +0 -1330
  705. package/src/__tests__/e2e/map-server.e2e.test.ts +0 -128
  706. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +0 -139
  707. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +0 -280
  708. package/src/__tests__/e2e/pull-mode.e2e.test.ts +0 -632
  709. package/src/__tests__/e2e/resume-continue.e2e.test.ts +0 -312
  710. package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +0 -197
  711. package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +0 -200
  712. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +0 -562
  713. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +0 -1049
  714. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +0 -258
  715. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +0 -257
  716. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +0 -383
  717. package/src/__tests__/e2e/workspace-v3.e2e.test.ts +0 -413
  718. package/src/acp/__tests__/claude-code-replay.test.ts +0 -225
  719. package/src/acp/__tests__/macro-agent.test.ts +0 -387
  720. package/src/acp/__tests__/session-mapper.test.ts +0 -152
  721. package/src/acp/__tests__/websocket-server.test.ts +0 -194
  722. package/src/acp/claude-code-replay.ts +0 -208
  723. package/src/acp/index.ts +0 -32
  724. package/src/acp/macro-agent.ts +0 -995
  725. package/src/acp/map-bridge.ts +0 -193
  726. package/src/acp/session-mapper.ts +0 -116
  727. package/src/acp/types.ts +0 -99
  728. package/src/acp/websocket-server.ts +0 -213
  729. package/src/adapters/__tests__/federation.test.ts +0 -256
  730. package/src/adapters/__tests__/inbox-adapter.test.ts +0 -316
  731. package/src/adapters/__tests__/tasks-adapter.test.ts +0 -270
  732. package/src/adapters/federation.ts +0 -185
  733. package/src/adapters/inbox-adapter.ts +0 -292
  734. package/src/adapters/inbox-client-adapter.ts +0 -173
  735. package/src/adapters/index.ts +0 -44
  736. package/src/adapters/opentasks-daemon.ts +0 -252
  737. package/src/adapters/tasks-adapter.ts +0 -330
  738. package/src/adapters/types.ts +0 -286
  739. package/src/agent/__tests__/agent-manager-topology.test.ts +0 -73
  740. package/src/agent/__tests__/agent-manager-v2.completion-signal.test.ts +0 -284
  741. package/src/agent/__tests__/agent-manager-v2.permission-interception.test.ts +0 -296
  742. package/src/agent/__tests__/agent-manager-v2.permissions.test.ts +0 -233
  743. package/src/agent/__tests__/agent-manager-v2.test.ts +0 -614
  744. package/src/agent/__tests__/agent-store.test.ts +0 -465
  745. package/src/agent/__tests__/task-ref-resolution.test.ts +0 -231
  746. package/src/agent/agent-manager-v2.ts +0 -2187
  747. package/src/agent/agent-manager.ts +0 -403
  748. package/src/agent/agent-store.ts +0 -409
  749. package/src/agent/index.ts +0 -7
  750. package/src/agent/prompts/coordinator-signals.ts +0 -115
  751. package/src/agent/prompts/index.ts +0 -7
  752. package/src/agent/system-prompt.ts +0 -298
  753. package/src/agent/types.ts +0 -480
  754. package/src/agent-detection/__tests__/command-builder.test.ts +0 -336
  755. package/src/agent-detection/__tests__/detector.test.ts +0 -768
  756. package/src/agent-detection/__tests__/registry.test.ts +0 -254
  757. package/src/agent-detection/command-builder.ts +0 -90
  758. package/src/agent-detection/detector.ts +0 -307
  759. package/src/agent-detection/index.ts +0 -36
  760. package/src/agent-detection/registry.ts +0 -200
  761. package/src/agent-detection/types.ts +0 -184
  762. package/src/api/__tests__/server.test.ts +0 -292
  763. package/src/api/index.ts +0 -8
  764. package/src/api/server.ts +0 -380
  765. package/src/api/types.ts +0 -39
  766. package/src/auth/__tests__/token.test.ts +0 -100
  767. package/src/auth/index.ts +0 -1
  768. package/src/auth/token.ts +0 -82
  769. package/src/boot-v2.ts +0 -1343
  770. package/src/cli/__tests__/stable-instance-id.test.ts +0 -57
  771. package/src/cli/acp.ts +0 -101
  772. package/src/cli/inbox-mcp-proxy.ts +0 -56
  773. package/src/cli/index.ts +0 -566
  774. package/src/cli/mcp.ts +0 -305
  775. package/src/cli/parse-args.ts +0 -54
  776. package/src/cli/stable-instance-id.ts +0 -14
  777. package/src/cognitive/__tests__/macro-agent-backend.test.ts +0 -673
  778. package/src/cognitive/__tests__/session-converter.test.ts +0 -423
  779. package/src/cognitive/__tests__/workspace-handler.test.ts +0 -221
  780. package/src/cognitive/analyst-role.ts +0 -59
  781. package/src/cognitive/index.ts +0 -49
  782. package/src/cognitive/macro-agent-backend.ts +0 -402
  783. package/src/cognitive/session-converter.ts +0 -151
  784. package/src/cognitive/types.ts +0 -187
  785. package/src/cognitive/workspace-handler.ts +0 -163
  786. package/src/config/index.ts +0 -9
  787. package/src/config/project-config.ts +0 -294
  788. package/src/control/__tests__/control-resilience.test.ts +0 -251
  789. package/src/control/__tests__/control-socket.test.ts +0 -240
  790. package/src/control/control-client.ts +0 -337
  791. package/src/control/control-server.ts +0 -298
  792. package/src/control/index.ts +0 -17
  793. package/src/control/types.ts +0 -95
  794. package/src/dispatch/CLAUDE.md +0 -129
  795. package/src/dispatch/__tests__/loadout-translation.test.ts +0 -141
  796. package/src/dispatch/__tests__/mail-inbound-consumer.integration.test.ts +0 -519
  797. package/src/dispatch/__tests__/mail-inbound-consumer.test.ts +0 -800
  798. package/src/dispatch/__tests__/mail-inbound-reuse-consumer.test.ts +0 -575
  799. package/src/dispatch/__tests__/permission-evaluator.test.ts +0 -196
  800. package/src/dispatch/__tests__/permission-overlay.test.ts +0 -56
  801. package/src/dispatch/__tests__/permissions-handler.test.ts +0 -168
  802. package/src/dispatch/__tests__/spawn-agent-handler.test.ts +0 -282
  803. package/src/dispatch/loadout-translation.ts +0 -138
  804. package/src/dispatch/mail-inbound-consumer.ts +0 -560
  805. package/src/dispatch/mail-inbound-reuse-consumer.ts +0 -479
  806. package/src/dispatch/permission-evaluator.ts +0 -191
  807. package/src/dispatch/permission-overlay.ts +0 -89
  808. package/src/dispatch/permissions-handler.ts +0 -112
  809. package/src/dispatch/spawn-agent-handler.ts +0 -160
  810. package/src/index.ts +0 -117
  811. package/src/integrations/__tests__/context-builder.test.ts +0 -218
  812. package/src/integrations/__tests__/sessionlog.test.ts +0 -498
  813. package/src/integrations/__tests__/skilltree.test.ts +0 -136
  814. package/src/integrations/context-builder.ts +0 -280
  815. package/src/integrations/sessionlog.ts +0 -194
  816. package/src/integrations/skilltree.ts +0 -184
  817. package/src/lifecycle/__tests__/cascade-consolidation.test.ts +0 -240
  818. package/src/lifecycle/__tests__/handlers-v2.test.ts +0 -565
  819. package/src/lifecycle/cascade.ts +0 -335
  820. package/src/lifecycle/cleanup.ts +0 -373
  821. package/src/lifecycle/handlers-v2.ts +0 -508
  822. package/src/lifecycle/index.ts +0 -76
  823. package/src/lifecycle/types.ts +0 -260
  824. package/src/map/__tests__/cascade-bridge.test.ts +0 -229
  825. package/src/map/__tests__/cascade-diff-server.test.ts +0 -434
  826. package/src/map/__tests__/emit-event.test.ts +0 -71
  827. package/src/map/__tests__/lifecycle-bridge.test.ts +0 -430
  828. package/src/map/__tests__/mail-bridge.test.ts +0 -321
  829. package/src/map/__tests__/permission-forwarding.test.ts +0 -143
  830. package/src/map/__tests__/sidecar-diff-install-smoke.test.ts +0 -90
  831. package/src/map/__tests__/sidecar-integration.test.ts +0 -190
  832. package/src/map/__tests__/task-bridge.test.ts +0 -153
  833. package/src/map/__tests__/trajectory-reporter.test.ts +0 -173
  834. package/src/map/acp-bridge.ts +0 -293
  835. package/src/map/cascade-action-handler.ts +0 -205
  836. package/src/map/cascade-bridge.ts +0 -339
  837. package/src/map/cascade-diff-server.ts +0 -404
  838. package/src/map/cc-swarm-hooks.ts +0 -242
  839. package/src/map/coordination-handler.ts +0 -232
  840. package/src/map/index.ts +0 -18
  841. package/src/map/lifecycle-bridge.ts +0 -236
  842. package/src/map/mail-bridge.ts +0 -263
  843. package/src/map/repo-workspace.ts +0 -82
  844. package/src/map/server.ts +0 -758
  845. package/src/map/sidecar.ts +0 -826
  846. package/src/map/task-bridge.ts +0 -89
  847. package/src/map/trajectory-reporter.ts +0 -124
  848. package/src/map/types.ts +0 -304
  849. package/src/mcp/__tests__/mcp-server-v2.test.ts +0 -236
  850. package/src/mcp/index.ts +0 -6
  851. package/src/mcp/mcp-server-v2.ts +0 -485
  852. package/src/mcp/tools/done-v2.ts +0 -213
  853. package/src/mcp/types.ts +0 -432
  854. package/src/metrics/__tests__/metrics.test.ts +0 -205
  855. package/src/metrics/index.ts +0 -13
  856. package/src/metrics/metrics.ts +0 -151
  857. package/src/metrics/types.ts +0 -63
  858. package/src/roles/__tests__/config-loader.test.ts +0 -540
  859. package/src/roles/builtin/coordinator.ts +0 -75
  860. package/src/roles/builtin/generic.ts +0 -39
  861. package/src/roles/builtin/index.ts +0 -51
  862. package/src/roles/builtin/integrator.ts +0 -62
  863. package/src/roles/builtin/monitor.ts +0 -65
  864. package/src/roles/builtin/worker.ts +0 -134
  865. package/src/roles/capabilities.ts +0 -257
  866. package/src/roles/config-loader.ts +0 -405
  867. package/src/roles/index.ts +0 -141
  868. package/src/roles/registry.ts +0 -713
  869. package/src/roles/types.ts +0 -344
  870. package/src/store/index.ts +0 -8
  871. package/src/store/types/agents.ts +0 -69
  872. package/src/store/types/events.ts +0 -91
  873. package/src/store/types/index.ts +0 -9
  874. package/src/store/types/messages.ts +0 -32
  875. package/src/store/types/primitives.ts +0 -9
  876. package/src/store/types/tasks.ts +0 -124
  877. package/src/teams/__tests__/team-manager-v2.test.ts +0 -425
  878. package/src/teams/__tests__/team-runtime-v2.test.ts +0 -402
  879. package/src/teams/index.ts +0 -29
  880. package/src/teams/seed-defaults.ts +0 -83
  881. package/src/teams/team-loader.ts +0 -476
  882. package/src/teams/team-manager-v2.ts +0 -343
  883. package/src/teams/team-runtime-v2.ts +0 -943
  884. package/src/teams/types.ts +0 -276
  885. package/src/trigger/__tests__/cron-service.test.ts +0 -548
  886. package/src/trigger/__tests__/scheduler.test.ts +0 -371
  887. package/src/trigger/__tests__/system-event-queue.test.ts +0 -147
  888. package/src/trigger/__tests__/trigger-system-v2.test.ts +0 -257
  889. package/src/trigger/__tests__/wake-manager.test.ts +0 -356
  890. package/src/trigger/__tests__/webhook-handler.test.ts +0 -567
  891. package/src/trigger/index.ts +0 -110
  892. package/src/trigger/queue/index.ts +0 -21
  893. package/src/trigger/queue/system-event-queue.ts +0 -232
  894. package/src/trigger/queue/types.ts +0 -149
  895. package/src/trigger/sources/cron/cron-service.ts +0 -499
  896. package/src/trigger/sources/cron/index.ts +0 -41
  897. package/src/trigger/sources/cron/scheduler.ts +0 -344
  898. package/src/trigger/sources/cron/types.ts +0 -333
  899. package/src/trigger/sources/index.ts +0 -10
  900. package/src/trigger/sources/webhook/index.ts +0 -25
  901. package/src/trigger/sources/webhook/types.ts +0 -205
  902. package/src/trigger/sources/webhook/webhook-handler.ts +0 -410
  903. package/src/trigger/strategies/ai-router.ts +0 -170
  904. package/src/trigger/trigger-system-v2.ts +0 -536
  905. package/src/trigger/types.ts +0 -228
  906. package/src/trigger/wake/index.ts +0 -22
  907. package/src/trigger/wake/types.ts +0 -162
  908. package/src/trigger/wake/wake-manager.ts +0 -390
  909. package/src/workspace/__tests__/git-cascade-adapter.test.ts +0 -563
  910. package/src/workspace/__tests__/land-dispatch.test.ts +0 -214
  911. package/src/workspace/__tests__/self-driving-yaml.test.ts +0 -122
  912. package/src/workspace/__tests__/shared-worktree-refcount.test.ts +0 -154
  913. package/src/workspace/__tests__/standalone-mode.test.ts +0 -118
  914. package/src/workspace/__tests__/workspace-manager-v3.test.ts +0 -245
  915. package/src/workspace/__tests__/yaml-schema.test.ts +0 -210
  916. package/src/workspace/config.ts +0 -165
  917. package/src/workspace/git-cascade-adapter.ts +0 -1213
  918. package/src/workspace/index.ts +0 -110
  919. package/src/workspace/landing/__tests__/strategies.test.ts +0 -184
  920. package/src/workspace/landing/direct-push.ts +0 -91
  921. package/src/workspace/landing/index.ts +0 -40
  922. package/src/workspace/landing/merge-to-parent.ts +0 -229
  923. package/src/workspace/landing/optimistic-push.ts +0 -36
  924. package/src/workspace/landing/queue-to-branch.ts +0 -108
  925. package/src/workspace/merge-queue/__tests__/conflict-resolution-git.e2e.test.ts +0 -641
  926. package/src/workspace/merge-queue/__tests__/conflict-resolution.test.ts +0 -707
  927. package/src/workspace/merge-queue/__tests__/merge-queue-concurrent.test.ts +0 -628
  928. package/src/workspace/merge-queue/__tests__/merge-queue-edge-cases.test.ts +0 -1217
  929. package/src/workspace/merge-queue/__tests__/merge-queue.test.ts +0 -506
  930. package/src/workspace/merge-queue/__tests__/real-git-operations.e2e.test.ts +0 -556
  931. package/src/workspace/merge-queue/__tests__/resolver-flow.test.ts +0 -472
  932. package/src/workspace/merge-queue/index.ts +0 -38
  933. package/src/workspace/merge-queue/merge-queue.ts +0 -585
  934. package/src/workspace/merge-queue/schema.ts +0 -98
  935. package/src/workspace/merge-queue/types.ts +0 -316
  936. package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +0 -1281
  937. package/src/workspace/pool/__tests__/worktree-pool.test.ts +0 -590
  938. package/src/workspace/pool/index.ts +0 -26
  939. package/src/workspace/pool/types.ts +0 -276
  940. package/src/workspace/pool/worktree-pool.ts +0 -659
  941. package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +0 -127
  942. package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +0 -139
  943. package/src/workspace/recovery/__tests__/strategies.test.ts +0 -145
  944. package/src/workspace/recovery/abandon.ts +0 -51
  945. package/src/workspace/recovery/auto-resolve.ts +0 -119
  946. package/src/workspace/recovery/defer.ts +0 -23
  947. package/src/workspace/recovery/escalate.ts +0 -30
  948. package/src/workspace/recovery/index.ts +0 -58
  949. package/src/workspace/recovery/spawn-resolver.ts +0 -152
  950. package/src/workspace/recovery/types.ts +0 -54
  951. package/src/workspace/strategies/index.ts +0 -18
  952. package/src/workspace/strategies/optimistic.ts +0 -139
  953. package/src/workspace/strategies/queue.ts +0 -81
  954. package/src/workspace/strategies/registry.ts +0 -89
  955. package/src/workspace/strategies/trunk.ts +0 -123
  956. package/src/workspace/strategies/types.ts +0 -145
  957. package/src/workspace/topology/__tests__/yaml-driven.test.ts +0 -345
  958. package/src/workspace/topology/index.ts +0 -18
  959. package/src/workspace/topology/no-workspace.ts +0 -39
  960. package/src/workspace/topology/types.ts +0 -116
  961. package/src/workspace/topology/yaml-driven.ts +0 -316
  962. package/src/workspace/types-v3.ts +0 -162
  963. package/src/workspace/types.ts +0 -541
  964. package/src/workspace/workspace-manager.ts +0 -1577
  965. package/src/workspace/yaml-schema.ts +0 -216
  966. package/test_fixtures/README.md +0 -425
  967. package/test_fixtures/fixtures/behaviors/coordinators.ts +0 -196
  968. package/test_fixtures/fixtures/behaviors/index.ts +0 -62
  969. package/test_fixtures/fixtures/behaviors/integrators.ts +0 -143
  970. package/test_fixtures/fixtures/behaviors/monitors.ts +0 -199
  971. package/test_fixtures/fixtures/behaviors/workers.ts +0 -348
  972. package/test_fixtures/fixtures/index.ts +0 -7
  973. package/test_fixtures/fixtures/projects/index.ts +0 -23
  974. package/test_fixtures/fixtures/projects/project-with-specs.ts +0 -44
  975. package/test_fixtures/fixtures/projects/typescript-project.ts +0 -200
  976. package/test_fixtures/fixtures/repos/index.ts +0 -6
  977. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -299
  978. package/test_fixtures/fixtures/repos/types.ts +0 -174
  979. package/test_fixtures/harness/assertions/harness-assertions.ts +0 -752
  980. package/test_fixtures/harness/assertions/index.ts +0 -8
  981. package/test_fixtures/harness/index.ts +0 -15
  982. package/test_fixtures/harness/simulator/agent-simulator.ts +0 -768
  983. package/test_fixtures/harness/simulator/behavior-executor.ts +0 -580
  984. package/test_fixtures/harness/simulator/index.ts +0 -14
  985. package/test_fixtures/harness/simulator/types.ts +0 -459
  986. package/test_fixtures/harness/test-harness.ts +0 -770
  987. package/test_fixtures/harness/timing/event-stepper.ts +0 -344
  988. package/test_fixtures/harness/timing/index.ts +0 -8
  989. package/tsconfig.json +0 -21
  990. package/vitest.config.ts +0 -30
  991. package/vitest.e2e.config.ts +0 -28
  992. package/vitest.setup.ts +0 -12
@@ -1,880 +0,0 @@
1
- # Task Dispatcher Design
2
-
3
- ## Implementation Status
4
-
5
- **Extracted to standalone package: [`swarm-dispatch`](https://www.npmjs.com/package/swarm-dispatch).**
6
-
7
- The dispatch logic originally described in this document was first implemented inside macro-agent's `trigger/dispatch/` directory, then extracted to a runtime-agnostic npm package. macro-agent now consumes `swarm-dispatch` via two thin adapters in `boot-v2.ts`:
8
-
9
- - **DispatchTaskSource** — wraps `TasksAdapter` (opentasks IPC)
10
- - **DispatchAgentRuntime** — wraps `AgentManagerV2` (spawn, terminate, onStopped)
11
-
12
- The dispatcher is exposed on `MacroAgentSystemV2.taskDispatcher` (optional). Dispatch events are bridged to MAP via `mapSidecar.emitEvent()` for observability.
13
-
14
- **What moved to swarm-dispatch:**
15
- - Dispatch tracker (concurrency, retry, state reconstruction)
16
- - Eligibility checker (static filters + heuristic scoring)
17
- - Prompt builder (default markdown template)
18
- - Reconciliation (external state change detection)
19
- - The dispatch loop itself (poll → claim → spawn → monitor)
20
- - OpenTasks adapter (`createOpenTasksSource`)
21
-
22
- **What stays in macro-agent:**
23
- - Boot wiring (~40 lines in `boot-v2.ts`)
24
- - AgentManagerV2 adapter (spawn with `parent: null`, lifecycle events)
25
- - MAP event bridge (dispatch events → MAP sidecar)
26
- - E2E tests (3 files: mocked, live agent, live agent + opentasks)
27
-
28
- The rest of this document is the original design that informed the implementation.
29
-
30
- ---
31
-
32
- ## Overview (Original Design)
33
-
34
- A dispatch mode for macro-agent's trigger system that polls opentasks for ready work and spawns agents to execute it. Turns the existing event-driven trigger architecture into an autonomous work processor — the swarmkit equivalent of Symphony's daemon loop, built on primitives that already exist.
35
-
36
- ## Problem
37
-
38
- Swarmkit can coordinate agents and track tasks across systems, but has no "point at a backlog, walk away" mode. Today, agents must be manually spawned or externally triggered. There's no continuous loop that:
39
-
40
- 1. Watches for ready tasks
41
- 2. Claims and dispatches them to agents
42
- 3. Manages concurrency, retries, and cleanup
43
-
44
- ## Architecture
45
-
46
- The dispatcher is **not a new system** — it's three components wired into the existing trigger pipeline:
47
-
48
- ```
49
- ┌─────────────────────────────────────────────────────────────────┐
50
- │ trigger system v2 │
51
- │ │
52
- │ ┌──────────┐ ┌──────────────┐ ┌───────────────────┐ │
53
- │ │ CronJob │────▶│ TriggerEvent │────▶│ TaskDispatch │ │
54
- │ │ "poll" │ │ (internal) │ │ RoutingStrategy │ │
55
- │ │ every N │ └──────────────┘ │ │ │
56
- │ └──────────┘ │ query ready ─────┼──▶ opentasks
57
- │ ┌─────────────│ check capacity │ │
58
- │ ┌──────────┐ │ │ claim + spawn ───┼──▶ agentManager
59
- │ │ Reconcile│────────────┘ │ reconcile state │ │
60
- │ │ CronJob │ (separate cadence) │ track dispatch │ │
61
- │ │ every M │ └───────────────────┘ │
62
- │ └──────────┘ │
63
- │ │
64
- │ ┌──────────────────┐ ┌─────────────────────────────────┐ │
65
- │ │ DispatchLifecycle │────▶│ onLifecycleEvent() callback │ │
66
- │ │ Listener │ │ + inbox signal filter │ │
67
- │ │ │ │ + retry on failure │ │
68
- │ └──────────────────┘ └─────────────────────────────────┘ │
69
- │ │
70
- │ ┌──────────────────┐ │
71
- │ │ DispatchTracker │ in-memory state: active dispatches, │
72
- │ │ │ retry queue, concurrency counts │
73
- │ │ │ + reconstruction from opentasks on boot │
74
- │ └──────────────────┘ │
75
- └─────────────────────────────────────────────────────────────────┘
76
- ```
77
-
78
- ---
79
-
80
- ## Design Decisions
81
-
82
- ### 1. Parentless Agents
83
-
84
- **Decision: Dispatched agents spawn as root agents (`parent: null`).**
85
-
86
- AgentManagerV2 already supports parentless agents — they're treated as "head managers" with `isHeadManager: true`. The lifecycle works without a parent:
87
-
88
- - `spawn()` accepts `parent: undefined` with no validation error (agent-manager-v2.ts:348)
89
- - Signal emission is skipped when `!context.parentId` (handlers-v2.ts:59)
90
- - Cascade termination works regardless of parent (agent-manager-v2.ts:801-822)
91
-
92
- This means dispatched agents are **peers, not children**. They don't report upward via signals — the dispatcher tracks them directly via lifecycle events (see §7 below).
93
-
94
- **Why not a synthetic coordinator parent?** A headless coordinator that nobody interacts with adds complexity for no benefit. The dispatcher itself is the coordination layer — it tracks state, manages retries, and handles lifecycle. A parent agent would just be a proxy for logic that already lives in the dispatch strategy.
95
-
96
- **Implication:** Dispatched agents can't use the `done()` signal path to notify a parent. Instead, the dispatcher listens to `onLifecycleEvent()` callbacks (type `"stopped"`) and inbox signals via `addSignalFilter()`. See §7.
97
-
98
- ---
99
-
100
- ### 2. Hybrid Push/Pull Dispatch
101
-
102
- **Decision: Support both modes, configurable per dispatch config. Default to push.**
103
-
104
- The dispatcher supports three modes:
105
-
106
- ```typescript
107
- export type DispatchMode =
108
- | "push" // Dispatcher assigns task, spawns dedicated agent
109
- | "pull" // Dispatcher maintains a pool of idle workers that self-claim
110
- | "hybrid"; // Dispatcher pushes high-priority, workers pull the rest
111
- ```
112
-
113
- #### Push Mode (default)
114
-
115
- Dispatcher claims task → spawns agent with task prompt → agent works on assigned task → done.
116
-
117
- - **Pros:** Predictable, simple lifecycle, one agent per task
118
- - **Cons:** Cold start per task (agent spawn overhead)
119
- - **Best for:** Heavy tasks, tasks needing specific roles/prompts
120
-
121
- #### Pull Mode
122
-
123
- Dispatcher maintains N idle worker agents. Workers call `claim_task` / `list_claimable_tasks` to self-select work. Dispatcher respawns workers when they terminate or the pool drops below threshold.
124
-
125
- ```typescript
126
- export interface PullModeConfig {
127
- /** Target number of idle workers to maintain */
128
- poolSize: number;
129
- /** Role for pool workers */
130
- workerRole: string;
131
- /** How long a worker can be idle before termination (ms) */
132
- idleTimeoutMs?: number;
133
- /** Whether workers should loop (claim next task after completing one) */
134
- workerLoop: boolean;
135
- }
136
- ```
137
-
138
- - **Pros:** Amortizes spawn cost, workers self-select based on capability
139
- - **Cons:** Pool management complexity, workers may compete for same tasks
140
- - **Best for:** Many small tasks, fast throughput
141
-
142
- #### Hybrid Mode
143
-
144
- High-priority tasks (priority >= threshold) get push-dispatched. Everything else is available for pool workers to pull.
145
-
146
- ```typescript
147
- export interface HybridConfig {
148
- push: DispatchConfig;
149
- pull: PullModeConfig;
150
- /** Tasks at or above this priority get push-dispatched */
151
- pushPriorityThreshold: number;
152
- }
153
- ```
154
-
155
- ---
156
-
157
- ### 3. Workspace Lifecycle Across Retries
158
-
159
- **Decision: Configurable per dispatch config. Three strategies:**
160
-
161
- ```typescript
162
- export type RetryWorkspaceStrategy =
163
- | "reuse" // Keep worktree, agent resumes from existing state
164
- | "fresh" // Delete worktree, agent starts clean
165
- | "branch"; // Keep worktree but create a new branch from the pre-failure state
166
- ```
167
-
168
- ```yaml
169
- dispatch:
170
- retry:
171
- maxRetries: 3
172
- workspaceStrategy: reuse # or "fresh" or "branch"
173
- preserveOnExhaustion: true # keep workspace for inspection after final failure
174
- cleanupDelayMs: 300000 # wait 5 min before cleaning completed workspaces
175
- ```
176
-
177
- **`reuse` (default):** The agent gets the workspace as-is. Its prompt includes retry context (attempt number, previous error). This matches Symphony's behavior — workspace persists across turns/retries.
178
-
179
- **`fresh`:** The worktree is deleted and recreated. Appropriate when failures leave corrupted state (bad merges, broken dependencies).
180
-
181
- **`branch`:** Creates a new branch from the current worktree state before retrying. Preserves progress while giving the agent a clean commit history to work from.
182
-
183
- **Cleanup:** On final completion, worktree cleanup happens after `cleanupDelayMs` (default: 5 min, configurable to 0 for immediate). On retry exhaustion with `preserveOnExhaustion: true`, the workspace is preserved and a MAP event is emitted so operators can inspect it.
184
-
185
- ---
186
-
187
- ### 4. Task-to-Prompt Mapping via Opentasks
188
-
189
- **Decision: Extend opentasks with a `context` field and a prompt assembly pipeline.**
190
-
191
- The current opentasks `TaskRecord` has `title`, `content`, and `metadata` — not enough for rich agent prompts. Rather than building prompt logic into the dispatcher, extend opentasks to carry structured context that any consumer (dispatcher, agent, dashboard) can use:
192
-
193
- ```typescript
194
- // Extension to opentasks TaskRecord
195
- export interface TaskContext {
196
- /** Structured description (markdown) */
197
- description?: string;
198
- /** File paths relevant to this task */
199
- files?: string[];
200
- /** Related task IDs for cross-reference */
201
- related?: string[];
202
- /** Acceptance criteria */
203
- criteria?: string[];
204
- /** Labels/categories from the source tracker */
205
- labels?: string[];
206
- /** Source tracker URL (e.g., Linear issue URL) */
207
- sourceUrl?: string;
208
- /** Free-form key-value context from the tracker */
209
- extra?: Record<string, unknown>;
210
- }
211
- ```
212
-
213
- The dispatcher's prompt pipeline then becomes composable:
214
-
215
- ```typescript
216
- export interface PromptPipeline {
217
- /** Ordered list of prompt builders — each appends context */
218
- stages: PromptStage[];
219
- }
220
-
221
- export interface PromptStage {
222
- name: string;
223
- build(task: TaskRecord, context: PromptContext): Promise<string | null>;
224
- }
225
-
226
- // Built-in stages:
227
- // 1. "task-core" — title, description, criteria, files
228
- // 2. "retry-context" — attempt number, previous error, workspace state
229
- // 3. "playbook" — query cognitive-core for relevant playbooks (opt-in)
230
- // 4. "role-prompt" — append role-specific instructions from openteams
231
- // 5. "custom" — user-provided function
232
- ```
233
-
234
- This keeps the dispatcher thin (it calls the pipeline) while making prompt assembly extensible. The playbook stage is opt-in — only active if cognitive-core is configured.
235
-
236
- ---
237
-
238
- ### 5. Task Eligibility: Heuristic + Configurable + Agent-Driven
239
-
240
- **Decision: Three-layer eligibility check before dispatch.**
241
-
242
- "Ready" (no blockers in opentasks) is necessary but not sufficient. The dispatcher applies:
243
-
244
- #### Layer 1: Static Filters (config-driven)
245
-
246
- ```yaml
247
- dispatch:
248
- eligibility:
249
- tags: [backend, auto] # Only tasks with these tags
250
- excludeTags: [manual, blocked] # Skip tasks with these tags
251
- trackers: [linear, github] # Only from these tracker types
252
- minPriority: 2 # Skip low-priority tasks
253
- maxAge: 86400000 # Skip tasks older than 24h (ms)
254
- requireFields: [description] # Skip tasks missing required fields
255
- ```
256
-
257
- #### Layer 2: Heuristic Scoring (built-in)
258
-
259
- Tasks that pass static filters get a dispatch score:
260
-
261
- ```typescript
262
- export interface EligibilityScore {
263
- taskId: string;
264
- score: number; // 0-1, higher = more eligible
265
- reasons: string[]; // Why this score
266
- }
267
-
268
- function scoreTask(task: TaskRecord): EligibilityScore {
269
- let score = 1.0;
270
- const reasons: string[] = [];
271
-
272
- // Penalize tasks with no description
273
- if (!task.content && !task.metadata?.description) {
274
- score *= 0.3;
275
- reasons.push("no description — agent may lack context");
276
- }
277
-
278
- // Penalize tasks with too many prior failures
279
- const failures = task.metadata?.failureCount as number ?? 0;
280
- if (failures > 0) {
281
- score *= Math.pow(0.7, failures);
282
- reasons.push(`${failures} prior failures`);
283
- }
284
-
285
- // Boost tasks with acceptance criteria
286
- if (task.metadata?.criteria) {
287
- score *= 1.2;
288
- reasons.push("has acceptance criteria");
289
- }
290
-
291
- // Boost tasks with file references
292
- if (task.metadata?.files) {
293
- score *= 1.1;
294
- reasons.push("has file references");
295
- }
296
-
297
- return { taskId: task.id, score: Math.min(score, 1), reasons };
298
- }
299
- ```
300
-
301
- Tasks below a configurable `minScore` threshold (default: 0.3) are skipped. They stay in opentasks as ready but aren't dispatched until they gain more context.
302
-
303
- #### Layer 3: Agent-Driven Triage (opt-in)
304
-
305
- For teams that want smarter triage, the dispatcher can spawn a lightweight triage agent that evaluates borderline tasks:
306
-
307
- ```yaml
308
- dispatch:
309
- eligibility:
310
- agentTriage:
311
- enabled: true
312
- role: triage # Role from openteams
313
- minScoreForTriage: 0.3 # Only triage tasks in this range
314
- maxScoreForTriage: 0.7
315
- maxTriagePerCycle: 3 # Don't triage too many per poll
316
- ```
317
-
318
- The triage agent gets a batch of borderline tasks and returns a verdict per task: `dispatch`, `skip`, or `needs-context` (which creates an opentasks annotation requesting more info from the human).
319
-
320
- This is the AI router pattern applied to task eligibility — same trade-off (expensive but intelligent).
321
-
322
- ---
323
-
324
- ### 6. Multi-Instance Safety
325
-
326
- **Decision: Opentasks daemon is the coordination point. Add atomic claim to opentasks.**
327
-
328
- macro-agent is single-process-per-project by design. But multiple instances (different machines, CI environments) may share the same opentasks task pool. The current `claimTask` is not atomic (query → assign is TOCTOU).
329
-
330
- #### Required: Atomic Claim in Opentasks
331
-
332
- ```typescript
333
- // New opentasks operation: atomic claim-if-unclaimed
334
- interface AtomicClaimRequest {
335
- action: "claim";
336
- taskId: string;
337
- claimant: string; // Unique claimant ID (instance + agent)
338
- ttlMs?: number; // Claim expires if not renewed (heartbeat)
339
- }
340
-
341
- interface AtomicClaimResponse {
342
- success: boolean;
343
- claimedBy?: string; // Who currently holds the claim (if failed)
344
- }
345
- ```
346
-
347
- This must be atomic at the opentasks daemon level — a single IPC operation that checks and sets. If two dispatchers race, one gets `success: false` and moves on.
348
-
349
- #### Instance Identity
350
-
351
- Each dispatcher registers with a unique claimant prefix:
352
-
353
- ```typescript
354
- const claimantId = `${hostname}:${pid}:${instanceId}`;
355
- // e.g., "dev-laptop:12345:inst_a1b2c3d4"
356
- ```
357
-
358
- This uses the existing `stable-instance-id.ts` (path-derived hash) plus hostname/pid for uniqueness.
359
-
360
- #### Claim TTL + Heartbeat
361
-
362
- Claims have a TTL (default: 5 min). The dispatch poll loop doubles as a heartbeat — each cycle renews claims for active dispatches. If an instance crashes, its claims expire and other instances can pick up the work.
363
-
364
- ```typescript
365
- // In the dispatch strategy's route(), after spawning:
366
- tracker.track(taskId, spawned.id, attempt);
367
-
368
- // In every poll cycle, renew claims for active dispatches:
369
- for (const record of tracker.listActive()) {
370
- await tasksAdapter.renewClaim(record.taskId, claimantId);
371
- }
372
- ```
373
-
374
- #### What NOT to Add
375
-
376
- - No leader election — dispatchers are peers, not primary/secondary
377
- - No distributed lock service — opentasks daemon's atomic claim is sufficient
378
- - No shared state beyond opentasks — each instance has its own DispatchTracker (in-memory), reconstructed from opentasks on boot
379
-
380
- ---
381
-
382
- ### 7. Lifecycle Integration via Existing Signals
383
-
384
- **Decision: Use `onLifecycleEvent()` callback + inbox signal filter. No new event surface.**
385
-
386
- AgentManagerV2 already emits lifecycle events via `onLifecycleEvent()`:
387
-
388
- - `{ type: "spawned", agent }` — on spawn (agent-manager-v2.ts:629)
389
- - `{ type: "started", agent }` — on session start (agent-manager-v2.ts:630)
390
- - `{ type: "stopped", agent, reason }` — on terminate (agent-manager-v2.ts:799)
391
-
392
- And agents emit inbox signals via done handlers:
393
-
394
- - `WORKER_DONE` — worker completed (handlers-v2.ts:49-80)
395
- - `HELP_NEEDED` — worker blocked
396
- - `WORKER_DEFERRED` — worker deferred
397
-
398
- The dispatcher hooks into both:
399
-
400
- ```typescript
401
- // trigger/dispatch/dispatch-lifecycle.ts
402
-
403
- export function createDispatchLifecycleListener(
404
- tracker: DispatchTracker,
405
- tasksAdapter: TasksAdapter,
406
- agentManager: AgentManager,
407
- inboxAdapter: InboxAdapter,
408
- claimantId: string
409
- ): DispatchLifecycleListener {
410
-
411
- // Hook 1: AgentManager lifecycle callback
412
- // Catches all terminations (normal, crash, external kill)
413
- const unsubscribe = agentManager.onLifecycleEvent((event) => {
414
- if (event.type !== "stopped") return;
415
-
416
- const taskId = tracker.findTaskForAgent(event.agent.id);
417
- if (!taskId) return; // Not a dispatched agent
418
-
419
- const reason = event.reason;
420
- if (reason === "done" || reason === "completed") {
421
- tracker.complete(taskId);
422
- tasksAdapter.transitionTask(taskId, "complete");
423
- tasksAdapter.releaseClaim(taskId, claimantId);
424
- } else {
425
- tracker.fail(taskId, `agent stopped: ${reason}`);
426
- if (!tracker.isTracked(taskId)) {
427
- // Retries exhausted
428
- tasksAdapter.transitionTask(taskId, "fail");
429
- tasksAdapter.releaseClaim(taskId, claimantId);
430
- }
431
- // If still tracked (retry queued), claim is kept — retry will reuse it
432
- }
433
- });
434
-
435
- // Hook 2: Inbox signal filter for richer status
436
- // Captures HELP_NEEDED, WORKER_DEFERRED for status tracking
437
- inboxAdapter.addSignalFilter("dispatch-lifecycle", (message) => {
438
- const signal = message.content?.event;
439
- if (!signal) return true; // Pass through
440
-
441
- const agentId = message.from;
442
- const taskId = tracker.findTaskForAgent(agentId);
443
- if (!taskId) return true; // Not dispatched, pass through
444
-
445
- if (signal === "HELP_NEEDED") {
446
- tracker.updateStatus(taskId, "blocked");
447
- // Emit MAP event for observability
448
- }
449
-
450
- return true; // Always pass through — we're observing, not filtering
451
- });
452
-
453
- return { unsubscribe };
454
- }
455
- ```
456
-
457
- **Why not new events?** The lifecycle callback handles the critical path (agent stopped → update tracker). Inbox signals provide richer status (blocked, deferred) but are supplementary. No changes needed to AgentManagerV2 or the handler chain.
458
-
459
- **Edge case: agent crash without done().** The `"stopped"` lifecycle event fires on all terminations, including crashes. The stop reason distinguishes normal completion from crashes. If an agent crashes, the dispatcher treats it as a failure and queues retry.
460
-
461
- ---
462
-
463
- ### 8. Team-Aware Dispatch
464
-
465
- **Decision: Task metadata specifies spawn mode. Dispatcher supports single agent, team template, or custom topology.**
466
-
467
- ```typescript
468
- export type SpawnMode =
469
- | { type: "agent"; role?: string } // Single agent (default)
470
- | { type: "team"; template: string; config?: object } // Full team from openteams
471
- | { type: "custom"; spawn: (task: TaskRecord, context: RoutingContext) => Promise<string[]> };
472
- ```
473
-
474
- In opentasks, task metadata carries the spawn hint:
475
-
476
- ```json
477
- {
478
- "id": "task-123",
479
- "title": "Security audit for auth module",
480
- "metadata": {
481
- "spawn": {
482
- "type": "team",
483
- "template": "security-audit"
484
- }
485
- }
486
- }
487
- ```
488
-
489
- The dispatch strategy checks `task.metadata.spawn` and delegates:
490
-
491
- ```typescript
492
- // In the dispatch strategy
493
- async function spawnForTask(
494
- task: TaskRecord,
495
- attempt: number,
496
- context: RoutingContext,
497
- config: DispatchConfig
498
- ): Promise<string[]> {
499
- const spawnMode = task.metadata?.spawn as SpawnMode
500
- ?? { type: "agent", role: config.defaultRole };
501
-
502
- switch (spawnMode.type) {
503
- case "agent":
504
- const spawned = await context.agentManager.spawn({
505
- task: buildPrompt(task, attempt),
506
- task_id: task.id,
507
- role: spawnMode.role ?? config.defaultRole,
508
- parent: null,
509
- });
510
- return [spawned.id];
511
-
512
- case "team":
513
- // Use TeamManagerV2 to start a team instance for this task
514
- const team = await teamManager.startTeam(spawnMode.template, {
515
- taskId: task.id,
516
- config: spawnMode.config,
517
- });
518
- return team.agents.map(a => a.id);
519
-
520
- case "custom":
521
- return spawnMode.spawn(task, context);
522
- }
523
- }
524
- ```
525
-
526
- **Lifecycle for teams:** When a team is dispatched, the tracker records all agent IDs. The team's coordinator handles internal lifecycle. The dispatcher watches for the coordinator's `"stopped"` event as the signal that the team is done.
527
-
528
- ---
529
-
530
- ### 9. Configurable Concurrency Scoping
531
-
532
- **Decision: Concurrency limits are hierarchical and composable.**
533
-
534
- ```yaml
535
- dispatch:
536
- concurrency:
537
- # Global cap across everything
538
- global: 10
539
-
540
- # Per-project limits (project = opentasks project context)
541
- perProject:
542
- backend-api: 5
543
- frontend: 3
544
-
545
- # Per-tracker limits
546
- perTracker:
547
- linear: 8
548
- github: 4
549
-
550
- # Per-role limits
551
- perRole:
552
- worker: 8
553
- security-auditor: 2
554
-
555
- # Per-tag limits (useful for resource-bound work)
556
- perTag:
557
- gpu: 1
558
- database-migration: 1
559
- ```
560
-
561
- Enforcement is **most restrictive wins** — a dispatch only happens if ALL applicable limits have available slots:
562
-
563
- ```typescript
564
- function hasCapacity(task: TaskRecord, tracker: DispatchTracker, config: ConcurrencyConfig): boolean {
565
- const checks = [
566
- tracker.activeCount() < config.global,
567
- tracker.activeByProject(task.project) < (config.perProject?.[task.project] ?? Infinity),
568
- tracker.activeByTracker(task.tracker) < (config.perTracker?.[task.tracker] ?? Infinity),
569
- tracker.activeByRole(task.role) < (config.perRole?.[task.role] ?? Infinity),
570
- ...task.tags.map(tag =>
571
- tracker.activeByTag(tag) < (config.perTag?.[tag] ?? Infinity)
572
- ),
573
- ];
574
- return checks.every(Boolean);
575
- }
576
- ```
577
-
578
- The DispatchTracker is extended with indexed counts:
579
-
580
- ```typescript
581
- export interface DispatchTracker {
582
- // ... existing methods ...
583
- activeByProject(project: string): number;
584
- activeByTracker(tracker: string): number;
585
- activeByRole(role: string): number;
586
- activeByTag(tag: string): number;
587
- }
588
- ```
589
-
590
- ---
591
-
592
- ### 10. External State Reconciliation
593
-
594
- **Decision: Separate reconciliation cron job, following Symphony's approach.**
595
-
596
- Symphony handles this in its orchestrator tick loop (orchestrator.ex:275-298):
597
-
598
- 1. Each tick, fetches current state from Linear for all running issues
599
- 2. Compares against configured `active_states` / `terminal_states`
600
- 3. If issue moved to terminal state externally → stop agent + cleanup workspace
601
- 4. If issue reassigned → stop agent (no cleanup)
602
- 5. If issue moved to non-active state (e.g., "blocked") → stop agent (no cleanup)
603
-
604
- **Our equivalent:** A second cron job (separate from the dispatch poll) that reconciles external tracker state:
605
-
606
- ```typescript
607
- // Reconciliation strategy — registered alongside dispatch strategy
608
- export function createReconcileStrategy(
609
- tasksAdapter: TasksAdapter,
610
- tracker: DispatchTracker,
611
- agentManager: AgentManager,
612
- config: ReconcileConfig
613
- ): RoutingStrategy {
614
- return {
615
- name: "task-reconcile",
616
- canHandle: (e) => e.source.type === "cron" && e.source.jobName === "task-reconcile",
617
-
618
- async route(_event, context): Promise<RoutingDecision> {
619
- const active = tracker.listActive();
620
-
621
- for (const record of active) {
622
- const task = await tasksAdapter.getTask(record.taskId);
623
-
624
- // Task was closed/completed externally
625
- if (task.status === "closed") {
626
- await agentManager.terminate(record.agentId, "external_completion");
627
- tracker.complete(record.taskId);
628
- continue;
629
- }
630
-
631
- // Task was reassigned to someone else
632
- if (task.assignee && task.assignee !== record.claimantId) {
633
- await agentManager.terminate(record.agentId, "reassigned");
634
- tracker.complete(record.taskId); // Don't retry — human took over
635
- continue;
636
- }
637
-
638
- // Task moved to blocked state
639
- if (task.status === "blocked") {
640
- await agentManager.terminate(record.agentId, "blocked_externally");
641
- // Don't retry immediately — wait for unblock via normal poll
642
- tracker.complete(record.taskId);
643
- continue;
644
- }
645
-
646
- // Task disappeared (deleted from tracker)
647
- if (!task) {
648
- await agentManager.terminate(record.agentId, "task_deleted");
649
- tracker.complete(record.taskId);
650
- continue;
651
- }
652
- }
653
-
654
- return { targetAgents: [], reason: "reconciliation complete" };
655
- },
656
- };
657
- }
658
- ```
659
-
660
- ```yaml
661
- dispatch:
662
- reconcile:
663
- enabled: true
664
- intervalMs: 60000 # Check every 60s (slower than dispatch poll)
665
- ```
666
-
667
- **Why a separate cron job?** Reconciliation is read-heavy (fetches current state from external tracker per active task) and less time-sensitive than dispatch. Running it at a slower cadence (60s vs 15s) reduces API load on Linear/GitHub/Jira.
668
-
669
- **Agent-cooperative check:** In addition to dispatcher-side reconciliation, agents should also check task state between turns (like Symphony's `continue_with_issue?()` check). This can be added as a standard instruction in the prompt pipeline: "Before starting a new turn, verify your task is still active via the `task` tool."
670
-
671
- ---
672
-
673
- ## Updated Component Design
674
-
675
- ### Component 1: DispatchTracker
676
-
677
- Extended from original design with multi-dimensional concurrency, claim management, and state reconstruction.
678
-
679
- ```typescript
680
- // trigger/dispatch/dispatch-tracker.ts
681
-
682
- export interface DispatchRecord {
683
- taskId: string;
684
- agentIds: string[]; // Multiple for team dispatch
685
- spawnedAt: number;
686
- attempt: number;
687
- status: "running" | "completed" | "failed" | "retrying" | "blocked";
688
- project?: string;
689
- tracker?: string;
690
- role?: string;
691
- tags?: string[];
692
- claimantId: string;
693
- workspacePath?: string;
694
- }
695
-
696
- export interface DispatchTracker {
697
- track(record: Omit<DispatchRecord, "spawnedAt" | "status">): void;
698
- complete(taskId: string): void;
699
- fail(taskId: string, error?: string): void;
700
- updateStatus(taskId: string, status: DispatchRecord["status"]): void;
701
- getRetryReady(): RetryEntry[];
702
- isTracked(taskId: string): boolean;
703
- findTaskForAgent(agentId: string): string | undefined;
704
-
705
- // Concurrency queries
706
- activeCount(): number;
707
- activeByProject(project: string): number;
708
- activeByTracker(tracker: string): number;
709
- activeByRole(role: string): number;
710
- activeByTag(tag: string): number;
711
- availableSlots(config: ConcurrencyConfig, task?: TaskRecord): number;
712
-
713
- // Observability
714
- listActive(): DispatchRecord[];
715
- listRetries(): RetryEntry[];
716
-
717
- // Reconstruction
718
- reconstructFromTasks(tasks: TaskRecord[], claimantId: string): void;
719
- }
720
- ```
721
-
722
- **Reconstruction on boot:** When the dispatcher starts, it queries opentasks for all tasks claimed by this instance's `claimantId` that are still `in_progress`. These become the initial `active` set. This handles process restarts without losing track of running agents.
723
-
724
- ### Component 2: TaskDispatch Routing Strategy
725
-
726
- Updated to support push/pull/hybrid modes, team dispatch, eligibility checking, and atomic claiming.
727
-
728
- ```typescript
729
- // trigger/strategies/task-dispatch.ts
730
-
731
- export interface TaskDispatchStrategyDeps {
732
- tasksAdapter: TasksAdapter;
733
- tracker: DispatchTracker;
734
- agentManager: AgentManager;
735
- teamManager?: TeamManagerV2; // Optional, for team dispatch
736
- promptPipeline: PromptPipeline;
737
- eligibility: EligibilityChecker;
738
- }
739
-
740
- export interface TaskDispatchStrategyConfig {
741
- mode: DispatchMode;
742
- concurrency: ConcurrencyConfig;
743
- retry: RetryConfig;
744
- claimantId: string;
745
- push?: { defaultRole: string; tags?: string[] };
746
- pull?: PullModeConfig;
747
- hybrid?: HybridConfig;
748
- }
749
- ```
750
-
751
- ### Component 3: Dispatch Lifecycle Listener
752
-
753
- Updated to use `onLifecycleEvent()` + inbox signal filter (see §7 above).
754
-
755
- ### Component 4: Reconciliation Strategy
756
-
757
- New component (see §10 above).
758
-
759
- ---
760
-
761
- ## Configuration
762
-
763
- Full dispatch config:
764
-
765
- ```yaml
766
- dispatch:
767
- enabled: true
768
-
769
- mode: push # push | pull | hybrid
770
-
771
- poll:
772
- intervalMs: 15000 # Dispatch poll cadence
773
-
774
- reconcile:
775
- enabled: true
776
- intervalMs: 60000 # External state check cadence
777
-
778
- concurrency:
779
- global: 10
780
- perProject: { backend: 5 }
781
- perTracker: { linear: 8 }
782
- perRole: { worker: 8 }
783
- perTag: { gpu: 1 }
784
-
785
- retry:
786
- maxRetries: 3
787
- baseDelayMs: 10000
788
- maxDelayMs: 300000
789
- workspaceStrategy: reuse # reuse | fresh | branch
790
- preserveOnExhaustion: true
791
- cleanupDelayMs: 300000
792
-
793
- eligibility:
794
- tags: [auto]
795
- excludeTags: [manual]
796
- minPriority: 2
797
- minScore: 0.3
798
- requireFields: [description]
799
- agentTriage:
800
- enabled: false
801
- role: triage
802
- minScoreForTriage: 0.3
803
- maxScoreForTriage: 0.7
804
-
805
- prompt:
806
- stages: [task-core, retry-context, role-prompt]
807
- # Add "playbook" to include cognitive-core context
808
-
809
- push:
810
- defaultRole: worker
811
-
812
- pull:
813
- poolSize: 3
814
- workerRole: worker
815
- idleTimeoutMs: 300000
816
- workerLoop: true
817
-
818
- hybrid:
819
- pushPriorityThreshold: 3
820
- ```
821
-
822
- ---
823
-
824
- ## What This Reuses (Not New)
825
-
826
- | Concern | Existing Component | How Dispatch Uses It |
827
- |---|---|---|
828
- | Scheduling | CronService | `every` jobs for poll + reconcile |
829
- | Routing | TriggerRouter + RoutingStrategy | Two strategies (dispatch + reconcile) |
830
- | Agent spawn | AgentManagerV2.spawn() | Parentless root agents |
831
- | Team spawn | TeamManagerV2.startTeam() | Team-aware dispatch |
832
- | Workspace isolation | WorkspaceManager | createWorkspaceForRole() called by spawn |
833
- | Task state | TasksAdapter + opentasks | Atomic claim, transition, release |
834
- | Lifecycle events | onLifecycleEvent() | Agent stopped → update tracker |
835
- | Inbox signals | addSignalFilter() | WORKER_DONE, HELP_NEEDED observation |
836
- | Event delivery | SystemEventQueue + WakeManager | Cron → event → route → dispatch |
837
-
838
- ## What This Adds
839
-
840
- | File | ~Lines | Purpose |
841
- |---|---|---|
842
- | `trigger/dispatch/dispatch-tracker.ts` | 200 | Multi-dimensional concurrency + retry + reconstruction |
843
- | `trigger/strategies/task-dispatch.ts` | 200 | Routing strategy (push/pull/hybrid + eligibility) |
844
- | `trigger/strategies/task-reconcile.ts` | 80 | External state reconciliation |
845
- | `trigger/dispatch/dispatch-lifecycle.ts` | 80 | Lifecycle + signal listener |
846
- | `trigger/dispatch/eligibility.ts` | 120 | Scoring + filtering + triage |
847
- | `trigger/dispatch/prompt-pipeline.ts` | 100 | Composable prompt assembly |
848
- | `trigger/dispatch/types.ts` | 80 | All dispatch-specific types |
849
- | Boot wiring | 40 | Opt-in init |
850
- | **Total** | **~900** | |
851
-
852
- ## What Needs to Change in Opentasks
853
-
854
- | Change | Scope | Purpose |
855
- |---|---|---|
856
- | Atomic `claim` operation | opentasks daemon | Prevent TOCTOU race in multi-instance |
857
- | Claim TTL + heartbeat renewal | opentasks daemon | Auto-release on instance crash |
858
- | `TaskContext` extension | opentasks schema | Richer task metadata for prompts |
859
- | `releaseClaim` operation | opentasks daemon | Explicit claim release on completion |
860
-
861
- ## Comparison to Symphony
862
-
863
- | Feature | Symphony | This Design |
864
- |---|---|---|
865
- | Polling | GenServer tick | CronService `every` job |
866
- | Dispatch | Orchestrator.dispatch | TaskDispatch routing strategy |
867
- | Workspace isolation | Per-issue directory + git clone | WorkspaceManager worktrees |
868
- | Retry | In-orchestrator backoff queue | DispatchTracker retry map |
869
- | Concurrency | max_concurrent_agents | Multi-dimensional (global/project/tracker/role/tag) |
870
- | Agent hierarchy | None (flat) | None (parentless root agents) |
871
- | Reconciliation | In tick loop, checks Linear | Separate reconcile cron, checks opentasks |
872
- | Multi-instance | Disjoint issue sets via Linear assignee | Atomic claims + TTL in opentasks |
873
- | Agent runtime | Codex only | Any AgentFactory (Claude Code, Codex, etc.) |
874
- | Configuration | WORKFLOW.md (single file) | macro-agent config (composable) |
875
- | Observability | Phoenix LiveView dashboard | MAP protocol events |
876
- | Task source | Linear only | Any tracker via opentasks federation |
877
- | Memory/learning | None | cognitive-core + minimem (opt-in) |
878
- | Team dispatch | No | Yes (openteams templates) |
879
- | Push/pull | Push only | Push, pull, or hybrid |
880
- | Task eligibility | None (all active issues) | Configurable filters + scoring + AI triage |