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
@@ -0,0 +1,1023 @@
1
+ /**
2
+ * OpenTasksTaskBackend Implementation
3
+ *
4
+ * Implements TaskBackend using OpenTasks as the source of truth for task storage,
5
+ * with EventStore for local event tracking and subscriptions.
6
+ *
7
+ * Tasks are stored as OpenTasks issues. Blocking dependencies use OpenTasks
8
+ * 'blocks' edges. The pull model uses OpenTasks' ready query and claimed_by field.
9
+ *
10
+ * @module task/backend/opentasks/backend
11
+ */
12
+ import { nanoid } from "nanoid";
13
+ import { mapOpenTasksStatus, mapTaskStatus, isIssueComplete } from "./mapping.js";
14
+ // Valid status transitions
15
+ const VALID_STATUS_TRANSITIONS = {
16
+ pending: ["assigned", "in_progress", "failed"],
17
+ assigned: ["in_progress", "pending", "failed"],
18
+ in_progress: ["completed", "failed", "pending"],
19
+ completed: [],
20
+ failed: ["pending"],
21
+ };
22
+ /**
23
+ * Error thrown by OpenTasksTaskBackend operations
24
+ */
25
+ export class OpenTasksBackendError extends Error {
26
+ code;
27
+ taskId;
28
+ constructor(message, code, taskId) {
29
+ super(message);
30
+ this.code = code;
31
+ this.taskId = taskId;
32
+ this.name = "OpenTasksBackendError";
33
+ }
34
+ }
35
+ const DEFAULT_CONFIG = {
36
+ socketPath: "",
37
+ syncStatus: true,
38
+ sourceLabel: "macro-agent",
39
+ };
40
+ /**
41
+ * OpenTasksTaskBackend implements TaskBackend using:
42
+ * - OpenTasks daemon for issue storage and graph relationships
43
+ * - EventStore for local event tracking and subscriptions
44
+ *
45
+ * Key features:
46
+ * - Tasks are stored as OpenTasks issues with macro-agent metadata
47
+ * - Blocking dependencies use OpenTasks 'blocks' edges
48
+ * - Pull model uses OpenTasks ready query and claimed_by
49
+ * - Bidirectional ID mapping (task_id <-> issue_id) via metadata
50
+ */
51
+ export class OpenTasksTaskBackend {
52
+ eventStore;
53
+ client;
54
+ config;
55
+ closed = false;
56
+ /** Map from macro-agent task ID to OpenTasks issue ID */
57
+ taskToIssue = new Map();
58
+ /** Map from OpenTasks issue ID to macro-agent task ID */
59
+ issueToTask = new Map();
60
+ constructor(eventStore, client, config) {
61
+ this.eventStore = eventStore;
62
+ this.client = client;
63
+ this.config = { ...DEFAULT_CONFIG, ...config };
64
+ }
65
+ /**
66
+ * Throw if the backend has been closed.
67
+ */
68
+ ensureOpen() {
69
+ if (this.closed) {
70
+ throw new OpenTasksBackendError("Backend is closed", "BACKEND_CLOSED");
71
+ }
72
+ }
73
+ // ─────────────────────────────────────────────────────────────────────────────
74
+ // Lifecycle
75
+ // ─────────────────────────────────────────────────────────────────────────────
76
+ async close() {
77
+ this.closed = true;
78
+ }
79
+ async create(options) {
80
+ this.ensureOpen();
81
+ const taskId = `task_${nanoid(12)}`;
82
+ // Resolve parent issue ID if parent task specified
83
+ let parentIssueId;
84
+ if (options.parent_task) {
85
+ parentIssueId = this.taskToIssue.get(options.parent_task);
86
+ if (!parentIssueId) {
87
+ // Check EventStore as fallback
88
+ const parent = this.eventStore.getTask(options.parent_task);
89
+ if (!parent) {
90
+ throw new OpenTasksBackendError(`Parent task not found: ${options.parent_task}`, "PARENT_TASK_NOT_FOUND", options.parent_task);
91
+ }
92
+ }
93
+ }
94
+ // Create issue in OpenTasks
95
+ const issue = await this.client.createIssue({
96
+ title: options.description,
97
+ status: "open",
98
+ tags: options.tags,
99
+ parent_id: parentIssueId,
100
+ metadata: {
101
+ macro_agent_task_id: taskId,
102
+ created_by: options.created_by,
103
+ source: this.config.sourceLabel,
104
+ },
105
+ });
106
+ // Store bidirectional mapping
107
+ this.taskToIssue.set(taskId, issue.id);
108
+ this.issueToTask.set(issue.id, taskId);
109
+ // Emit to EventStore for local tracking
110
+ this.eventStore.emit({
111
+ type: "task",
112
+ source: { agent_id: options.created_by },
113
+ payload: {
114
+ task_id: taskId,
115
+ action: "created",
116
+ details: {
117
+ description: options.description,
118
+ parent_task: options.parent_task,
119
+ tags: options.tags,
120
+ external_id: issue.id,
121
+ },
122
+ },
123
+ });
124
+ // Update parent subtasks in EventStore
125
+ if (options.parent_task) {
126
+ this.eventStore.emit({
127
+ type: "task",
128
+ source: { agent_id: options.created_by },
129
+ payload: {
130
+ task_id: options.parent_task,
131
+ action: "status_change",
132
+ details: { subtask_added: taskId },
133
+ },
134
+ });
135
+ }
136
+ // Return from EventStore (which has the canonical local state)
137
+ const task = this.eventStore.getTask(taskId);
138
+ return this.toExtendedTask(task);
139
+ }
140
+ async get(id) {
141
+ // EventStore is the local mirror with richer state
142
+ // (assigned status, outputs, agent_history, etc.)
143
+ const task = this.eventStore.getTask(id);
144
+ if (!task)
145
+ return null;
146
+ return this.toExtendedTask(task);
147
+ }
148
+ async update(id, updates) {
149
+ this.ensureOpen();
150
+ const task = this.eventStore.getTask(id);
151
+ if (!task) {
152
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
153
+ }
154
+ const source = task.assigned_agent ?? task.created_by;
155
+ // Handle status update with validation
156
+ if (updates.status !== undefined) {
157
+ const validTransitions = VALID_STATUS_TRANSITIONS[task.status];
158
+ if (!validTransitions.includes(updates.status)) {
159
+ throw new OpenTasksBackendError(`Invalid status transition: ${task.status} -> ${updates.status}`, "INVALID_STATUS_TRANSITION", id);
160
+ }
161
+ this.eventStore.emit({
162
+ type: "task",
163
+ source: { agent_id: source },
164
+ payload: {
165
+ task_id: id,
166
+ action: "status_change",
167
+ details: { status: updates.status },
168
+ },
169
+ });
170
+ // Sync to OpenTasks
171
+ await this.syncStatusToOpenTasks(id, updates.status);
172
+ }
173
+ // Handle other updates
174
+ if (updates.outputs !== undefined) {
175
+ this.eventStore.emit({
176
+ type: "task",
177
+ source: { agent_id: source },
178
+ payload: {
179
+ task_id: id,
180
+ action: "status_change",
181
+ details: { outputs: updates.outputs },
182
+ },
183
+ });
184
+ }
185
+ if (updates.artifacts !== undefined) {
186
+ this.eventStore.emit({
187
+ type: "task",
188
+ source: { agent_id: source },
189
+ payload: {
190
+ task_id: id,
191
+ action: "status_change",
192
+ details: { artifacts: updates.artifacts },
193
+ },
194
+ });
195
+ }
196
+ if (updates.description !== undefined) {
197
+ this.eventStore.emit({
198
+ type: "task",
199
+ source: { agent_id: source },
200
+ payload: {
201
+ task_id: id,
202
+ action: "status_change",
203
+ details: { description: updates.description },
204
+ },
205
+ });
206
+ // Sync description to OpenTasks
207
+ const issueId = this.taskToIssue.get(id);
208
+ if (issueId) {
209
+ await this.client.updateIssue(issueId, {
210
+ title: updates.description,
211
+ });
212
+ }
213
+ }
214
+ const updated = this.eventStore.getTask(id);
215
+ return this.toExtendedTask(updated);
216
+ }
217
+ async delete(id) {
218
+ this.ensureOpen();
219
+ const issueId = this.taskToIssue.get(id);
220
+ if (issueId) {
221
+ await this.client.deleteIssue(issueId);
222
+ this.taskToIssue.delete(id);
223
+ this.issueToTask.delete(issueId);
224
+ }
225
+ }
226
+ // ─────────────────────────────────────────────────────────────────────────────
227
+ // Status Transitions
228
+ // ─────────────────────────────────────────────────────────────────────────────
229
+ async assign(id, agentId, options) {
230
+ this.ensureOpen();
231
+ const task = this.eventStore.getTask(id);
232
+ if (!task) {
233
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
234
+ }
235
+ this.eventStore.emit({
236
+ type: "task",
237
+ source: { agent_id: agentId },
238
+ payload: {
239
+ task_id: id,
240
+ action: "assigned",
241
+ details: {
242
+ agent_id: agentId,
243
+ role: options?.role,
244
+ },
245
+ },
246
+ });
247
+ // Sync assignee to OpenTasks
248
+ const issueId = this.taskToIssue.get(id);
249
+ if (issueId) {
250
+ await this.client.updateIssue(issueId, {
251
+ assignee: agentId,
252
+ metadata: { claimed_by: agentId },
253
+ });
254
+ }
255
+ }
256
+ async unassign(id) {
257
+ this.ensureOpen();
258
+ const task = this.eventStore.getTask(id);
259
+ if (!task) {
260
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
261
+ }
262
+ if (!task.assigned_agent) {
263
+ throw new OpenTasksBackendError(`Task is not assigned: ${id}`, "TASK_NOT_ASSIGNED", id);
264
+ }
265
+ this.eventStore.emit({
266
+ type: "task",
267
+ source: { agent_id: task.assigned_agent },
268
+ payload: {
269
+ task_id: id,
270
+ action: "unassigned",
271
+ details: { agent_id: task.assigned_agent },
272
+ },
273
+ });
274
+ // Clear assignee in OpenTasks
275
+ const issueId = this.taskToIssue.get(id);
276
+ if (issueId) {
277
+ await this.client.updateIssue(issueId, {
278
+ assignee: null,
279
+ metadata: { claimed_by: null },
280
+ });
281
+ }
282
+ }
283
+ async start(id) {
284
+ this.ensureOpen();
285
+ const task = this.eventStore.getTask(id);
286
+ if (!task) {
287
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
288
+ }
289
+ const validTransitions = VALID_STATUS_TRANSITIONS[task.status];
290
+ if (!validTransitions.includes("in_progress")) {
291
+ throw new OpenTasksBackendError(`Invalid status transition: ${task.status} -> in_progress`, "INVALID_STATUS_TRANSITION", id);
292
+ }
293
+ this.eventStore.emit({
294
+ type: "task",
295
+ source: { agent_id: task.assigned_agent ?? task.created_by },
296
+ payload: {
297
+ task_id: id,
298
+ action: "status_change",
299
+ details: { status: "in_progress" },
300
+ },
301
+ });
302
+ await this.syncStatusToOpenTasks(id, "in_progress");
303
+ }
304
+ async complete(id, outputs) {
305
+ this.ensureOpen();
306
+ const task = this.eventStore.getTask(id);
307
+ if (!task) {
308
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
309
+ }
310
+ const validTransitions = VALID_STATUS_TRANSITIONS[task.status];
311
+ if (!validTransitions.includes("completed")) {
312
+ throw new OpenTasksBackendError(`Invalid status transition: ${task.status} -> completed`, "INVALID_STATUS_TRANSITION", id);
313
+ }
314
+ const agent = task.assigned_agent ?? task.created_by;
315
+ // Store outputs
316
+ if (outputs) {
317
+ const outputsToStore = {
318
+ ...(outputs.data ?? {}),
319
+ };
320
+ if (outputs.summary !== undefined) {
321
+ outputsToStore.summary = outputs.summary;
322
+ }
323
+ if (Object.keys(outputsToStore).length > 0) {
324
+ this.eventStore.emit({
325
+ type: "task",
326
+ source: { agent_id: agent },
327
+ payload: {
328
+ task_id: id,
329
+ action: "status_change",
330
+ details: { outputs: outputsToStore },
331
+ },
332
+ });
333
+ }
334
+ if (outputs.artifacts) {
335
+ this.eventStore.emit({
336
+ type: "task",
337
+ source: { agent_id: agent },
338
+ payload: {
339
+ task_id: id,
340
+ action: "status_change",
341
+ details: { artifacts: outputs.artifacts },
342
+ },
343
+ });
344
+ }
345
+ }
346
+ this.eventStore.emit({
347
+ type: "task",
348
+ source: { agent_id: agent },
349
+ payload: {
350
+ task_id: id,
351
+ action: "completed",
352
+ details: {},
353
+ },
354
+ });
355
+ // Close the issue in OpenTasks
356
+ await this.syncStatusToOpenTasks(id, "completed");
357
+ }
358
+ async fail(id, error) {
359
+ this.ensureOpen();
360
+ const task = this.eventStore.getTask(id);
361
+ if (!task) {
362
+ throw new OpenTasksBackendError(`Task not found: ${id}`, "TASK_NOT_FOUND", id);
363
+ }
364
+ const validTransitions = VALID_STATUS_TRANSITIONS[task.status];
365
+ if (!validTransitions.includes("failed")) {
366
+ throw new OpenTasksBackendError(`Invalid status transition: ${task.status} -> failed`, "INVALID_STATUS_TRANSITION", id);
367
+ }
368
+ const agent = task.assigned_agent ?? task.created_by;
369
+ // Store error in outputs
370
+ this.eventStore.emit({
371
+ type: "task",
372
+ source: { agent_id: agent },
373
+ payload: {
374
+ task_id: id,
375
+ action: "status_change",
376
+ details: {
377
+ outputs: {
378
+ error: {
379
+ message: error.message,
380
+ code: error.code,
381
+ details: error.details,
382
+ },
383
+ },
384
+ },
385
+ },
386
+ });
387
+ this.eventStore.emit({
388
+ type: "task",
389
+ source: { agent_id: agent },
390
+ payload: {
391
+ task_id: id,
392
+ action: "failed",
393
+ details: {},
394
+ },
395
+ });
396
+ // Close in OpenTasks with error metadata
397
+ const issueId = this.taskToIssue.get(id);
398
+ if (issueId) {
399
+ await this.client.updateIssue(issueId, {
400
+ status: "closed",
401
+ metadata: {
402
+ macro_agent_failed: true,
403
+ macro_agent_error: error.message,
404
+ },
405
+ });
406
+ }
407
+ }
408
+ // ─────────────────────────────────────────────────────────────────────────────
409
+ // Queries
410
+ // ─────────────────────────────────────────────────────────────────────────────
411
+ async list(filter) {
412
+ let tasks = this.eventStore.listTasks();
413
+ if (filter) {
414
+ if (filter.status) {
415
+ const statuses = Array.isArray(filter.status)
416
+ ? filter.status
417
+ : [filter.status];
418
+ tasks = tasks.filter((t) => statuses.includes(t.status));
419
+ }
420
+ if (filter.assigned_agent) {
421
+ tasks = tasks.filter((t) => t.assigned_agent === filter.assigned_agent);
422
+ }
423
+ if (filter.parent_task) {
424
+ tasks = tasks.filter((t) => t.parent_task === filter.parent_task);
425
+ }
426
+ if (filter.created_by) {
427
+ tasks = tasks.filter((t) => t.created_by === filter.created_by);
428
+ }
429
+ if (filter.rootTasksOnly) {
430
+ tasks = tasks.filter((t) => !t.parent_task);
431
+ }
432
+ if (filter.tags && filter.tags.length > 0) {
433
+ const filterTags = new Set(filter.tags);
434
+ tasks = tasks.filter((t) => t.tags?.some((tag) => filterTags.has(tag)));
435
+ }
436
+ }
437
+ // Compute isBlocked using OpenTasks graph for mapped tasks,
438
+ // EventStore blockers for unmapped tasks
439
+ const extended = await Promise.all(tasks.map((t) => this.toExtendedTaskAsync(t)));
440
+ if (!filter?.includeBlocked) {
441
+ return extended.filter((t) => !t.isBlocked);
442
+ }
443
+ return extended;
444
+ }
445
+ async listReady(filter) {
446
+ return this.list({
447
+ ...filter,
448
+ status: filter?.status ?? ["pending", "assigned"],
449
+ includeBlocked: false,
450
+ });
451
+ }
452
+ async getChildren(parentId) {
453
+ const tasks = this.eventStore.listTasks();
454
+ const children = tasks.filter((t) => t.parent_task === parentId);
455
+ return Promise.all(children.map((t) => this.toExtendedTaskAsync(t)));
456
+ }
457
+ async getSubtaskStatus(parentId) {
458
+ const children = await this.getChildren(parentId);
459
+ const status = {
460
+ total: children.length,
461
+ pending: 0,
462
+ assigned: 0,
463
+ in_progress: 0,
464
+ completed: 0,
465
+ failed: 0,
466
+ allCompleted: false,
467
+ anyFailed: false,
468
+ };
469
+ for (const task of children) {
470
+ switch (task.status) {
471
+ case "pending":
472
+ status.pending++;
473
+ break;
474
+ case "assigned":
475
+ status.assigned++;
476
+ break;
477
+ case "in_progress":
478
+ status.in_progress++;
479
+ break;
480
+ case "completed":
481
+ status.completed++;
482
+ break;
483
+ case "failed":
484
+ status.failed++;
485
+ break;
486
+ }
487
+ }
488
+ status.allCompleted =
489
+ status.total > 0 && status.completed === status.total;
490
+ status.anyFailed = status.failed > 0;
491
+ return status;
492
+ }
493
+ // ─────────────────────────────────────────────────────────────────────────────
494
+ // Hierarchy
495
+ // ─────────────────────────────────────────────────────────────────────────────
496
+ async createSubtask(parentId, options) {
497
+ return this.create({
498
+ ...options,
499
+ parent_task: parentId,
500
+ });
501
+ }
502
+ // ─────────────────────────────────────────────────────────────────────────────
503
+ // Dependencies (via OpenTasks edges)
504
+ // ─────────────────────────────────────────────────────────────────────────────
505
+ async addBlocker(taskId, blockerId) {
506
+ this.ensureOpen();
507
+ const task = this.eventStore.getTask(taskId);
508
+ if (!task) {
509
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
510
+ }
511
+ const blocker = this.eventStore.getTask(blockerId);
512
+ if (!blocker) {
513
+ throw new OpenTasksBackendError(`Blocker task not found: ${blockerId}`, "TASK_NOT_FOUND", blockerId);
514
+ }
515
+ // Record in EventStore
516
+ this.eventStore.emit({
517
+ type: "task",
518
+ source: { agent_id: task.assigned_agent ?? task.created_by },
519
+ payload: {
520
+ task_id: taskId,
521
+ action: "blocker_added",
522
+ details: { blocker_id: blockerId },
523
+ },
524
+ });
525
+ // Create 'blocks' edge in OpenTasks if both tasks are mapped
526
+ const blockerIssueId = this.taskToIssue.get(blockerId);
527
+ const taskIssueId = this.taskToIssue.get(taskId);
528
+ if (blockerIssueId && taskIssueId) {
529
+ await this.client.createEdge(blockerIssueId, taskIssueId, "blocks");
530
+ }
531
+ }
532
+ async removeBlocker(taskId, blockerId) {
533
+ this.ensureOpen();
534
+ const task = this.eventStore.getTask(taskId);
535
+ if (!task) {
536
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
537
+ }
538
+ // Record in EventStore
539
+ this.eventStore.emit({
540
+ type: "task",
541
+ source: { agent_id: task.assigned_agent ?? task.created_by },
542
+ payload: {
543
+ task_id: taskId,
544
+ action: "blocker_removed",
545
+ details: { blocker_id: blockerId },
546
+ },
547
+ });
548
+ // Remove 'blocks' edge in OpenTasks if both are mapped
549
+ const blockerIssueId = this.taskToIssue.get(blockerId);
550
+ const taskIssueId = this.taskToIssue.get(taskId);
551
+ if (blockerIssueId && taskIssueId) {
552
+ await this.client.removeEdge(blockerIssueId, taskIssueId, "blocks");
553
+ }
554
+ }
555
+ async getBlockers(taskId) {
556
+ const task = this.eventStore.getTask(taskId);
557
+ if (!task) {
558
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
559
+ }
560
+ // Try OpenTasks first for mapped tasks
561
+ const issueId = this.taskToIssue.get(taskId);
562
+ if (issueId) {
563
+ try {
564
+ const blockerSummaries = await this.client.getBlockers(issueId);
565
+ const blockers = [];
566
+ for (const summary of blockerSummaries) {
567
+ const blockerTaskId = this.issueToTask.get(summary.id);
568
+ if (blockerTaskId) {
569
+ const blockerTask = this.eventStore.getTask(blockerTaskId);
570
+ if (blockerTask) {
571
+ blockers.push(this.toExtendedTask(blockerTask));
572
+ }
573
+ }
574
+ }
575
+ return blockers;
576
+ }
577
+ catch {
578
+ // Fall through to EventStore
579
+ }
580
+ }
581
+ // Fallback: use EventStore blockers
582
+ const blockerIds = task.blockers ?? [];
583
+ const blockers = [];
584
+ for (const blockerId of blockerIds) {
585
+ const blocker = this.eventStore.getTask(blockerId);
586
+ if (blocker) {
587
+ blockers.push(this.toExtendedTask(blocker));
588
+ }
589
+ }
590
+ return blockers;
591
+ }
592
+ async getBlocking(taskId) {
593
+ const task = this.eventStore.getTask(taskId);
594
+ if (!task) {
595
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
596
+ }
597
+ // Try OpenTasks first for mapped tasks
598
+ const issueId = this.taskToIssue.get(taskId);
599
+ if (issueId) {
600
+ try {
601
+ const blockingSummaries = await this.client.getBlocking(issueId);
602
+ const blocking = [];
603
+ for (const summary of blockingSummaries) {
604
+ const blockedTaskId = this.issueToTask.get(summary.id);
605
+ if (blockedTaskId) {
606
+ const blockedTask = this.eventStore.getTask(blockedTaskId);
607
+ if (blockedTask) {
608
+ blocking.push(this.toExtendedTask(blockedTask));
609
+ }
610
+ }
611
+ }
612
+ return blocking;
613
+ }
614
+ catch {
615
+ // Fall through to EventStore
616
+ }
617
+ }
618
+ // Fallback: scan EventStore
619
+ const allTasks = this.eventStore.listTasks();
620
+ const blocking = allTasks.filter((t) => t.blockers?.includes(taskId));
621
+ return blocking.map((t) => this.toExtendedTask(t));
622
+ }
623
+ // ─────────────────────────────────────────────────────────────────────────────
624
+ // Pull Model (Claim/Unclaim)
625
+ // ─────────────────────────────────────────────────────────────────────────────
626
+ async claim(agentId, filter) {
627
+ this.ensureOpen();
628
+ const candidates = await this.listClaimable(filter);
629
+ if (candidates.length === 0) {
630
+ return null;
631
+ }
632
+ const task = candidates[0];
633
+ // Re-check for contention
634
+ const current = this.eventStore.getTask(task.id);
635
+ if (!current || current.status !== "pending" || current.assigned_agent) {
636
+ return null;
637
+ }
638
+ // Assign locally
639
+ this.eventStore.emit({
640
+ type: "task",
641
+ source: { agent_id: agentId },
642
+ payload: {
643
+ task_id: task.id,
644
+ action: "assigned",
645
+ details: { agent_id: agentId },
646
+ },
647
+ });
648
+ // Claim in OpenTasks
649
+ const issueId = this.taskToIssue.get(task.id);
650
+ if (issueId) {
651
+ await this.client.updateIssue(issueId, {
652
+ assignee: agentId,
653
+ metadata: { claimed_by: agentId },
654
+ });
655
+ }
656
+ const assigned = this.eventStore.getTask(task.id);
657
+ return this.toExtendedTask(assigned);
658
+ }
659
+ async unclaim(taskId) {
660
+ this.ensureOpen();
661
+ const task = this.eventStore.getTask(taskId);
662
+ if (!task) {
663
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
664
+ }
665
+ if (!task.assigned_agent) {
666
+ throw new OpenTasksBackendError(`Task is not assigned: ${taskId}`, "TASK_NOT_ASSIGNED", taskId);
667
+ }
668
+ this.eventStore.emit({
669
+ type: "task",
670
+ source: { agent_id: task.assigned_agent },
671
+ payload: {
672
+ task_id: taskId,
673
+ action: "unassigned",
674
+ details: { agent_id: task.assigned_agent },
675
+ },
676
+ });
677
+ // Unclaim in OpenTasks
678
+ const issueId = this.taskToIssue.get(taskId);
679
+ if (issueId) {
680
+ await this.client.updateIssue(issueId, {
681
+ assignee: null,
682
+ metadata: { claimed_by: null },
683
+ });
684
+ }
685
+ }
686
+ async listClaimable(filter) {
687
+ let tasks = this.eventStore.listTasks();
688
+ // Only pending, unassigned tasks
689
+ tasks = tasks.filter((t) => t.status === "pending" && !t.assigned_agent);
690
+ if (filter) {
691
+ if (filter.tags && filter.tags.length > 0) {
692
+ const filterTags = new Set(filter.tags);
693
+ tasks = tasks.filter((t) => t.tags?.some((tag) => filterTags.has(tag)));
694
+ }
695
+ if (filter.rootTasksOnly) {
696
+ tasks = tasks.filter((t) => !t.parent_task);
697
+ }
698
+ if (filter.created_by) {
699
+ tasks = tasks.filter((t) => t.created_by === filter.created_by);
700
+ }
701
+ }
702
+ // Filter out blocked tasks
703
+ const extended = await Promise.all(tasks.map((t) => this.toExtendedTaskAsync(t)));
704
+ return extended.filter((t) => !t.isBlocked);
705
+ }
706
+ // ─────────────────────────────────────────────────────────────────────────────
707
+ // History
708
+ // ─────────────────────────────────────────────────────────────────────────────
709
+ async getAgentHistory(taskId) {
710
+ const task = this.eventStore.getTask(taskId);
711
+ if (!task) {
712
+ throw new OpenTasksBackendError(`Task not found: ${taskId}`, "TASK_NOT_FOUND", taskId);
713
+ }
714
+ return task.agent_history ?? [];
715
+ }
716
+ onTaskChange(callbackOrTaskId, maybeCallback) {
717
+ const filterTaskId = typeof callbackOrTaskId === "string" ? callbackOrTaskId : undefined;
718
+ const callback = typeof callbackOrTaskId === "function"
719
+ ? callbackOrTaskId
720
+ : maybeCallback;
721
+ const seenTaskIds = new Set();
722
+ return this.eventStore.onTaskChange((taskId, task) => {
723
+ if (filterTaskId && taskId !== filterTaskId)
724
+ return;
725
+ let eventType;
726
+ if (!task) {
727
+ eventType = "deleted";
728
+ }
729
+ else if (seenTaskIds.has(taskId)) {
730
+ eventType = "updated";
731
+ }
732
+ else {
733
+ eventType = "created";
734
+ seenTaskIds.add(taskId);
735
+ }
736
+ const event = {
737
+ type: eventType,
738
+ taskId,
739
+ task: task ? this.toExtendedTask(task) : {},
740
+ };
741
+ callback(event);
742
+ });
743
+ }
744
+ // ─────────────────────────────────────────────────────────────────────────────
745
+ // Public Utility Methods
746
+ // ─────────────────────────────────────────────────────────────────────────────
747
+ /**
748
+ * Get the OpenTasks issue ID for a macro-agent task.
749
+ * Returns undefined if the task is not mapped to an issue.
750
+ */
751
+ getIssueForTask(taskId) {
752
+ return this.taskToIssue.get(taskId);
753
+ }
754
+ /**
755
+ * Get the macro-agent task ID for an OpenTasks issue.
756
+ * Returns undefined if the issue is not mapped to a task.
757
+ */
758
+ getTaskForIssue(issueId) {
759
+ return this.issueToTask.get(issueId);
760
+ }
761
+ /**
762
+ * Import an existing OpenTasks issue as a macro-agent task.
763
+ * This is useful for pulling tasks from OpenTasks into macro-agent.
764
+ */
765
+ async importIssue(issueId, createdBy) {
766
+ this.ensureOpen();
767
+ // Check if already imported
768
+ const existingTaskId = this.issueToTask.get(issueId);
769
+ if (existingTaskId) {
770
+ const existing = await this.get(existingTaskId);
771
+ if (existing)
772
+ return existing;
773
+ }
774
+ const issue = await this.client.getIssue(issueId);
775
+ if (!issue) {
776
+ throw new OpenTasksBackendError(`OpenTasks issue not found: ${issueId}`, "NOT_FOUND");
777
+ }
778
+ const taskId = `task_${nanoid(12)}`;
779
+ // Store mapping
780
+ this.taskToIssue.set(taskId, issueId);
781
+ this.issueToTask.set(issueId, taskId);
782
+ // Determine task status from issue
783
+ const taskStatus = mapOpenTasksStatus(issue.status);
784
+ // Create in EventStore
785
+ this.eventStore.emit({
786
+ type: "task",
787
+ source: { agent_id: createdBy },
788
+ payload: {
789
+ task_id: taskId,
790
+ action: "created",
791
+ details: {
792
+ description: issue.title,
793
+ tags: issue.tags,
794
+ external_id: issueId,
795
+ },
796
+ },
797
+ });
798
+ // If issue is not open/pending, transition to the right status
799
+ if (taskStatus === "in_progress") {
800
+ this.eventStore.emit({
801
+ type: "task",
802
+ source: { agent_id: createdBy },
803
+ payload: {
804
+ task_id: taskId,
805
+ action: "status_change",
806
+ details: { status: "in_progress" },
807
+ },
808
+ });
809
+ }
810
+ else if (taskStatus === "completed") {
811
+ this.eventStore.emit({
812
+ type: "task",
813
+ source: { agent_id: createdBy },
814
+ payload: {
815
+ task_id: taskId,
816
+ action: "completed",
817
+ details: {},
818
+ },
819
+ });
820
+ }
821
+ // If issue has an assignee, assign
822
+ if (issue.assignee) {
823
+ this.eventStore.emit({
824
+ type: "task",
825
+ source: { agent_id: issue.assignee },
826
+ payload: {
827
+ task_id: taskId,
828
+ action: "assigned",
829
+ details: { agent_id: issue.assignee },
830
+ },
831
+ });
832
+ }
833
+ return this.issueToExtendedTask(issue, taskId);
834
+ }
835
+ /**
836
+ * Bulk import all open issues from OpenTasks as tasks.
837
+ */
838
+ async importOpenIssues(createdBy) {
839
+ this.ensureOpen();
840
+ const issues = await this.client.listIssues({
841
+ status: ["open", "in_progress"],
842
+ archived: false,
843
+ });
844
+ const tasks = [];
845
+ for (const issue of issues) {
846
+ // Skip already-imported issues
847
+ if (this.issueToTask.has(issue.id))
848
+ continue;
849
+ // Skip issues not created by macro-agent (unless they have no source)
850
+ // This allows importing issues from other sources too
851
+ const task = await this.importIssue(issue.id, createdBy);
852
+ tasks.push(task);
853
+ }
854
+ return tasks;
855
+ }
856
+ // ─────────────────────────────────────────────────────────────────────────────
857
+ // Private Helpers
858
+ // ─────────────────────────────────────────────────────────────────────────────
859
+ /**
860
+ * Sync a task status change to OpenTasks.
861
+ */
862
+ async syncStatusToOpenTasks(taskId, status) {
863
+ if (!this.config.syncStatus)
864
+ return;
865
+ const issueId = this.taskToIssue.get(taskId);
866
+ if (!issueId)
867
+ return;
868
+ const openTasksStatus = mapTaskStatus(status);
869
+ try {
870
+ await this.client.updateIssue(issueId, {
871
+ status: openTasksStatus,
872
+ });
873
+ }
874
+ catch (error) {
875
+ // Log but don't fail - sync is best-effort
876
+ console.warn(`Failed to sync status to OpenTasks for ${taskId} (${issueId}): ${error}`);
877
+ }
878
+ }
879
+ /**
880
+ * Sync a transition that happened via the opentasks daemon's `task` tool.
881
+ * Updates the EventStore without re-syncing back to opentasks (since the
882
+ * daemon already processed the transition).
883
+ *
884
+ * Accepts either an opentasks issue ID (e.g., "i-xxxx") or an EventStore
885
+ * task ID (e.g., "task-xxx") — resolves to the EventStore ID either way.
886
+ *
887
+ * @param externalId - The opentasks issue ID or EventStore task ID
888
+ * @param action - The transition action ("complete", "start", "close", "block", "reopen", "assign")
889
+ * @param agentId - The agent that performed the transition or the assignee for "assign"
890
+ */
891
+ async syncExternalTransition(externalId, action, agentId) {
892
+ // Resolve to EventStore task ID: try opentasks ID lookup first, then direct
893
+ const taskId = this.issueToTask.get(externalId)
894
+ ?? (this.eventStore.getTask(externalId) ? externalId : undefined);
895
+ if (!taskId)
896
+ return;
897
+ const task = this.eventStore.getTask(taskId);
898
+ if (!task)
899
+ return;
900
+ const agent = agentId ?? task.assigned_agent ?? task.created_by;
901
+ // Handle assignment separately — it updates assignee, not status
902
+ if (action === "assign") {
903
+ if (task.assigned_agent !== agent) {
904
+ this.eventStore.emit({
905
+ type: "task",
906
+ source: { agent_id: agent },
907
+ payload: {
908
+ task_id: taskId,
909
+ action: "assigned",
910
+ details: { agent_id: agent },
911
+ },
912
+ });
913
+ }
914
+ return;
915
+ }
916
+ // Map action to target status
917
+ const ACTION_TO_STATUS = {
918
+ complete: "completed",
919
+ close: "completed",
920
+ start: "in_progress",
921
+ block: "pending",
922
+ reopen: "pending",
923
+ };
924
+ const targetStatus = ACTION_TO_STATUS[action];
925
+ if (!targetStatus || task.status === targetStatus)
926
+ return;
927
+ // Emit the appropriate EventStore event
928
+ if (targetStatus === "completed") {
929
+ this.eventStore.emit({
930
+ type: "task",
931
+ source: { agent_id: agent },
932
+ payload: { task_id: taskId, action: "completed", details: {} },
933
+ });
934
+ }
935
+ else {
936
+ this.eventStore.emit({
937
+ type: "task",
938
+ source: { agent_id: agent },
939
+ payload: {
940
+ task_id: taskId,
941
+ action: "status_change",
942
+ details: { status: targetStatus },
943
+ },
944
+ });
945
+ }
946
+ }
947
+ /**
948
+ * Convert an EventStore Task to ExtendedTask with isBlocked computed
949
+ * from local blockers.
950
+ */
951
+ toExtendedTask(task) {
952
+ const blockerIds = task.blockers ?? [];
953
+ let isBlocked = false;
954
+ for (const blockerId of blockerIds) {
955
+ const blocker = this.eventStore.getTask(blockerId);
956
+ if (blocker && blocker.status !== "completed") {
957
+ isBlocked = true;
958
+ break;
959
+ }
960
+ }
961
+ return {
962
+ ...task,
963
+ isBlocked,
964
+ external_id: this.taskToIssue.get(task.id),
965
+ };
966
+ }
967
+ /**
968
+ * Convert an EventStore Task to ExtendedTask with isBlocked computed
969
+ * from OpenTasks graph (async, checks remote blockers).
970
+ */
971
+ async toExtendedTaskAsync(task) {
972
+ const issueId = this.taskToIssue.get(task.id);
973
+ // If mapped to OpenTasks, use graph-based blocking
974
+ if (issueId) {
975
+ try {
976
+ const blockers = await this.client.getBlockers(issueId);
977
+ const hasActiveBlockers = blockers.some((b) => b.status && !isIssueComplete(b.status));
978
+ return {
979
+ ...task,
980
+ isBlocked: hasActiveBlockers,
981
+ external_id: issueId,
982
+ };
983
+ }
984
+ catch {
985
+ // Fall through to local check
986
+ }
987
+ }
988
+ return this.toExtendedTask(task);
989
+ }
990
+ /**
991
+ * Convert an OpenTasks issue to an ExtendedTask.
992
+ */
993
+ issueToExtendedTask(issue, taskId) {
994
+ const taskStatus = mapOpenTasksStatus(issue.status);
995
+ return {
996
+ id: taskId,
997
+ description: issue.title,
998
+ status: taskStatus,
999
+ assigned_agent: issue.assignee,
1000
+ parent_task: undefined, // Resolved separately if needed
1001
+ subtasks: undefined,
1002
+ blockers: undefined,
1003
+ created_at: new Date(issue.created_at).getTime(),
1004
+ started_at: taskStatus === "in_progress"
1005
+ ? new Date(issue.updated_at).getTime()
1006
+ : undefined,
1007
+ completed_at: issue.closed_at
1008
+ ? new Date(issue.closed_at).getTime()
1009
+ : undefined,
1010
+ created_by: issue.metadata?.created_by ?? "unknown",
1011
+ tags: issue.tags,
1012
+ isBlocked: issue.status === "blocked",
1013
+ external_id: issue.id,
1014
+ };
1015
+ }
1016
+ }
1017
+ /**
1018
+ * Create an OpenTasksTaskBackend instance.
1019
+ */
1020
+ export function createOpenTasksTaskBackend(eventStore, client, config) {
1021
+ return new OpenTasksTaskBackend(eventStore, client, config);
1022
+ }
1023
+ //# sourceMappingURL=backend.js.map