macro-agent 0.1.0 → 0.1.2

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 (660) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/.sudocode/issues.jsonl +28 -0
  3. package/.sudocode/specs.jsonl +8 -0
  4. package/CLAUDE.md +25 -17
  5. package/README.md +11 -29
  6. package/dist/acp/macro-agent.d.ts +15 -0
  7. package/dist/acp/macro-agent.d.ts.map +1 -1
  8. package/dist/acp/macro-agent.js +131 -35
  9. package/dist/acp/macro-agent.js.map +1 -1
  10. package/dist/acp/types.d.ts +32 -1
  11. package/dist/acp/types.d.ts.map +1 -1
  12. package/dist/acp/types.js.map +1 -1
  13. package/dist/agent/agent-manager.d.ts +65 -1
  14. package/dist/agent/agent-manager.d.ts.map +1 -1
  15. package/dist/agent/agent-manager.js +544 -200
  16. package/dist/agent/agent-manager.js.map +1 -1
  17. package/dist/agent/types.d.ts +8 -1
  18. package/dist/agent/types.d.ts.map +1 -1
  19. package/dist/agent/types.js.map +1 -1
  20. package/dist/api/server.d.ts +8 -1
  21. package/dist/api/server.d.ts.map +1 -1
  22. package/dist/api/server.js +136 -8
  23. package/dist/api/server.js.map +1 -1
  24. package/dist/api/types.d.ts +1 -1
  25. package/dist/api/types.d.ts.map +1 -1
  26. package/dist/auth/index.d.ts +2 -0
  27. package/dist/auth/index.d.ts.map +1 -0
  28. package/dist/auth/index.js +2 -0
  29. package/dist/auth/index.js.map +1 -0
  30. package/dist/auth/token.d.ts +41 -0
  31. package/dist/auth/token.d.ts.map +1 -0
  32. package/dist/auth/token.js +73 -0
  33. package/dist/auth/token.js.map +1 -0
  34. package/dist/cli/acp.d.ts +2 -23
  35. package/dist/cli/acp.d.ts.map +1 -1
  36. package/dist/cli/acp.js +197 -61
  37. package/dist/cli/acp.js.map +1 -1
  38. package/dist/cli/index.js +152 -16
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/mcp.d.ts +6 -0
  41. package/dist/cli/mcp.d.ts.map +1 -1
  42. package/dist/cli/mcp.js +279 -173
  43. package/dist/cli/mcp.js.map +1 -1
  44. package/dist/cli/parse-args.d.ts +20 -0
  45. package/dist/cli/parse-args.d.ts.map +1 -0
  46. package/dist/cli/parse-args.js +43 -0
  47. package/dist/cli/parse-args.js.map +1 -0
  48. package/dist/cli/stable-instance-id.d.ts +8 -0
  49. package/dist/cli/stable-instance-id.d.ts.map +1 -0
  50. package/dist/cli/stable-instance-id.js +14 -0
  51. package/dist/cli/stable-instance-id.js.map +1 -0
  52. package/dist/config/project-config.d.ts +85 -7
  53. package/dist/config/project-config.d.ts.map +1 -1
  54. package/dist/config/project-config.js +133 -20
  55. package/dist/config/project-config.js.map +1 -1
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/lifecycle/handlers/index.d.ts +7 -3
  61. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  62. package/dist/lifecycle/handlers/index.js +25 -8
  63. package/dist/lifecycle/handlers/index.js.map +1 -1
  64. package/dist/lifecycle/types.d.ts +2 -0
  65. package/dist/lifecycle/types.d.ts.map +1 -1
  66. package/dist/lifecycle/types.js.map +1 -1
  67. package/dist/map/adapter/acp-over-map.d.ts +17 -0
  68. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  69. package/dist/map/adapter/acp-over-map.js +384 -23
  70. package/dist/map/adapter/acp-over-map.js.map +1 -1
  71. package/dist/map/adapter/connection-manager.d.ts.map +1 -1
  72. package/dist/map/adapter/connection-manager.js +3 -0
  73. package/dist/map/adapter/connection-manager.js.map +1 -1
  74. package/dist/map/adapter/event-log.d.ts +87 -0
  75. package/dist/map/adapter/event-log.d.ts.map +1 -0
  76. package/dist/map/adapter/event-log.js +122 -0
  77. package/dist/map/adapter/event-log.js.map +1 -0
  78. package/dist/map/adapter/event-translator.js +6 -6
  79. package/dist/map/adapter/event-translator.js.map +1 -1
  80. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  81. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  82. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  83. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  84. package/dist/map/adapter/extensions/index.d.ts +13 -1
  85. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  86. package/dist/map/adapter/extensions/index.js +61 -0
  87. package/dist/map/adapter/extensions/index.js.map +1 -1
  88. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  89. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  90. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  91. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  92. package/dist/map/adapter/extensions/rename.d.ts +29 -0
  93. package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
  94. package/dist/map/adapter/extensions/rename.js +49 -0
  95. package/dist/map/adapter/extensions/rename.js.map +1 -0
  96. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  97. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  98. package/dist/map/adapter/extensions/streams.js +515 -0
  99. package/dist/map/adapter/extensions/streams.js.map +1 -0
  100. package/dist/map/adapter/extensions/task.d.ts.map +1 -1
  101. package/dist/map/adapter/extensions/task.js +10 -0
  102. package/dist/map/adapter/extensions/task.js.map +1 -1
  103. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  104. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  105. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  106. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  107. package/dist/map/adapter/index.d.ts +2 -1
  108. package/dist/map/adapter/index.d.ts.map +1 -1
  109. package/dist/map/adapter/index.js +10 -2
  110. package/dist/map/adapter/index.js.map +1 -1
  111. package/dist/map/adapter/interface.d.ts +2 -0
  112. package/dist/map/adapter/interface.d.ts.map +1 -1
  113. package/dist/map/adapter/map-adapter.d.ts +3 -0
  114. package/dist/map/adapter/map-adapter.d.ts.map +1 -1
  115. package/dist/map/adapter/map-adapter.js +258 -35
  116. package/dist/map/adapter/map-adapter.js.map +1 -1
  117. package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
  118. package/dist/map/adapter/subscription-manager.js +5 -1
  119. package/dist/map/adapter/subscription-manager.js.map +1 -1
  120. package/dist/map/adapter/types.d.ts +3 -1
  121. package/dist/map/adapter/types.d.ts.map +1 -1
  122. package/dist/mcp/map-client.d.ts +39 -0
  123. package/dist/mcp/map-client.d.ts.map +1 -0
  124. package/dist/mcp/map-client.js +129 -0
  125. package/dist/mcp/map-client.js.map +1 -0
  126. package/dist/mcp/mcp-server.d.ts +16 -0
  127. package/dist/mcp/mcp-server.d.ts.map +1 -1
  128. package/dist/mcp/mcp-server.js +125 -88
  129. package/dist/mcp/mcp-server.js.map +1 -1
  130. package/dist/mcp/tools/done.d.ts.map +1 -1
  131. package/dist/mcp/tools/done.js +18 -0
  132. package/dist/mcp/tools/done.js.map +1 -1
  133. package/dist/mcp/types.d.ts +9 -1
  134. package/dist/mcp/types.d.ts.map +1 -1
  135. package/dist/mcp/types.js.map +1 -1
  136. package/dist/metrics/metrics.js +1 -1
  137. package/dist/metrics/metrics.js.map +1 -1
  138. package/dist/roles/builtin/coordinator.d.ts.map +1 -1
  139. package/dist/roles/builtin/coordinator.js +2 -1
  140. package/dist/roles/builtin/coordinator.js.map +1 -1
  141. package/dist/roles/builtin/integrator.d.ts.map +1 -1
  142. package/dist/roles/builtin/integrator.js +2 -1
  143. package/dist/roles/builtin/integrator.js.map +1 -1
  144. package/dist/roles/builtin/worker.d.ts.map +1 -1
  145. package/dist/roles/builtin/worker.js +3 -1
  146. package/dist/roles/builtin/worker.js.map +1 -1
  147. package/dist/roles/capabilities.d.ts +9 -1
  148. package/dist/roles/capabilities.d.ts.map +1 -1
  149. package/dist/roles/capabilities.js +27 -7
  150. package/dist/roles/capabilities.js.map +1 -1
  151. package/dist/roles/config-loader.d.ts +6 -6
  152. package/dist/roles/config-loader.d.ts.map +1 -1
  153. package/dist/roles/config-loader.js +8 -7
  154. package/dist/roles/config-loader.js.map +1 -1
  155. package/dist/roles/registry.d.ts +2 -2
  156. package/dist/roles/registry.js +2 -2
  157. package/dist/roles/types.d.ts +3 -1
  158. package/dist/roles/types.d.ts.map +1 -1
  159. package/dist/server/combined-server.d.ts +28 -1
  160. package/dist/server/combined-server.d.ts.map +1 -1
  161. package/dist/server/combined-server.js +111 -8
  162. package/dist/server/combined-server.js.map +1 -1
  163. package/dist/store/event-store.d.ts +2 -1
  164. package/dist/store/event-store.d.ts.map +1 -1
  165. package/dist/store/event-store.js +80 -24
  166. package/dist/store/event-store.js.map +1 -1
  167. package/dist/store/instance.d.ts +1 -1
  168. package/dist/store/instance.d.ts.map +1 -1
  169. package/dist/store/instance.js +2 -2
  170. package/dist/store/instance.js.map +1 -1
  171. package/dist/store/types/agents.d.ts +23 -0
  172. package/dist/store/types/agents.d.ts.map +1 -1
  173. package/dist/store/types/events.d.ts +1 -1
  174. package/dist/store/types/events.d.ts.map +1 -1
  175. package/dist/task/backend/index.d.ts +47 -29
  176. package/dist/task/backend/index.d.ts.map +1 -1
  177. package/dist/task/backend/index.js +109 -71
  178. package/dist/task/backend/index.js.map +1 -1
  179. package/dist/task/backend/memory.d.ts +1 -0
  180. package/dist/task/backend/memory.d.ts.map +1 -1
  181. package/dist/task/backend/memory.js +3 -0
  182. package/dist/task/backend/memory.js.map +1 -1
  183. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  184. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  185. package/dist/task/backend/opentasks/backend.js +1023 -0
  186. package/dist/task/backend/opentasks/backend.js.map +1 -0
  187. package/dist/task/backend/opentasks/client.d.ts +337 -0
  188. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  189. package/dist/task/backend/opentasks/client.js +225 -0
  190. package/dist/task/backend/opentasks/client.js.map +1 -0
  191. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  192. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  193. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  194. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  195. package/dist/task/backend/opentasks/index.d.ts +21 -0
  196. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  197. package/dist/task/backend/opentasks/index.js +21 -0
  198. package/dist/task/backend/opentasks/index.js.map +1 -0
  199. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  200. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  201. package/dist/task/backend/opentasks/mapping.js +77 -0
  202. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  203. package/dist/task/backend/types.d.ts +33 -53
  204. package/dist/task/backend/types.d.ts.map +1 -1
  205. package/dist/task/backend/types.js +7 -11
  206. package/dist/task/backend/types.js.map +1 -1
  207. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  208. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  209. package/dist/task/backend/unified-tool-provider.js +623 -0
  210. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  211. package/dist/teams/index.d.ts +3 -1
  212. package/dist/teams/index.d.ts.map +1 -1
  213. package/dist/teams/index.js +2 -0
  214. package/dist/teams/index.js.map +1 -1
  215. package/dist/teams/seed-defaults.d.ts +20 -0
  216. package/dist/teams/seed-defaults.d.ts.map +1 -0
  217. package/dist/teams/seed-defaults.js +71 -0
  218. package/dist/teams/seed-defaults.js.map +1 -0
  219. package/dist/teams/team-loader.d.ts +7 -3
  220. package/dist/teams/team-loader.d.ts.map +1 -1
  221. package/dist/teams/team-loader.js +156 -164
  222. package/dist/teams/team-loader.js.map +1 -1
  223. package/dist/teams/team-manager.d.ts +112 -0
  224. package/dist/teams/team-manager.d.ts.map +1 -0
  225. package/dist/teams/team-manager.js +305 -0
  226. package/dist/teams/team-manager.js.map +1 -0
  227. package/dist/teams/team-runtime.d.ts +125 -19
  228. package/dist/teams/team-runtime.d.ts.map +1 -1
  229. package/dist/teams/team-runtime.js +529 -119
  230. package/dist/teams/team-runtime.js.map +1 -1
  231. package/dist/teams/types.d.ts +41 -151
  232. package/dist/teams/types.d.ts.map +1 -1
  233. package/dist/teams/types.js +2 -3
  234. package/dist/teams/types.js.map +1 -1
  235. package/docs/architecture.md +7 -6
  236. package/docs/configuration.md +26 -62
  237. package/docs/implementation-details.md +5 -5
  238. package/docs/implementation-summary.md +17 -17
  239. package/docs/plan-self-driving-support.md +4 -4
  240. package/docs/spec-self-driving-support.md +10 -10
  241. package/docs/team-templates.md +2 -2
  242. package/docs/teams.md +76 -3
  243. package/docs/troubleshooting.md +10 -11
  244. package/package.json +7 -4
  245. package/references/minimem/.claude/settings.json +7 -0
  246. package/references/minimem/.sudocode/issues.jsonl +18 -0
  247. package/references/minimem/.sudocode/specs.jsonl +1 -0
  248. package/references/minimem/CLAUDE.md +310 -0
  249. package/references/minimem/README.md +562 -0
  250. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  251. package/references/minimem/claude-plugin/.mcp.json +7 -0
  252. package/references/minimem/claude-plugin/README.md +158 -0
  253. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  254. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  255. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  256. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  257. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  258. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  259. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  260. package/references/minimem/media/banner.png +0 -0
  261. package/references/minimem/package-lock.json +5373 -0
  262. package/references/minimem/package.json +72 -0
  263. package/references/minimem/scripts/postbuild.js +35 -0
  264. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  265. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  266. package/references/minimem/src/__tests__/helpers.ts +199 -0
  267. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  268. package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
  269. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  270. package/references/minimem/src/__tests__/session.test.ts +190 -0
  271. package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
  272. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  273. package/references/minimem/src/cli/commands/append.ts +76 -0
  274. package/references/minimem/src/cli/commands/config.ts +262 -0
  275. package/references/minimem/src/cli/commands/conflicts.ts +413 -0
  276. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  277. package/references/minimem/src/cli/commands/index.ts +12 -0
  278. package/references/minimem/src/cli/commands/init.ts +88 -0
  279. package/references/minimem/src/cli/commands/mcp.ts +177 -0
  280. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  281. package/references/minimem/src/cli/commands/search.ts +158 -0
  282. package/references/minimem/src/cli/commands/status.ts +84 -0
  283. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  284. package/references/minimem/src/cli/commands/sync.ts +70 -0
  285. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  286. package/references/minimem/src/cli/config.ts +584 -0
  287. package/references/minimem/src/cli/index.ts +264 -0
  288. package/references/minimem/src/cli/shared.ts +161 -0
  289. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  290. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  291. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  292. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  293. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  294. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  295. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  296. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  297. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  298. package/references/minimem/src/cli/sync/central.ts +292 -0
  299. package/references/minimem/src/cli/sync/conflicts.ts +204 -0
  300. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  301. package/references/minimem/src/cli/sync/detection.ts +138 -0
  302. package/references/minimem/src/cli/sync/index.ts +107 -0
  303. package/references/minimem/src/cli/sync/operations.ts +373 -0
  304. package/references/minimem/src/cli/sync/registry.ts +279 -0
  305. package/references/minimem/src/cli/sync/state.ts +355 -0
  306. package/references/minimem/src/cli/sync/validation.ts +206 -0
  307. package/references/minimem/src/cli/sync/watcher.ts +234 -0
  308. package/references/minimem/src/cli/version.ts +34 -0
  309. package/references/minimem/src/core/index.ts +9 -0
  310. package/references/minimem/src/core/indexer.ts +628 -0
  311. package/references/minimem/src/core/searcher.ts +221 -0
  312. package/references/minimem/src/db/schema.ts +183 -0
  313. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  314. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  315. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  316. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  317. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  318. package/references/minimem/src/index.ts +109 -0
  319. package/references/minimem/src/internal.ts +299 -0
  320. package/references/minimem/src/minimem.ts +1276 -0
  321. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  322. package/references/minimem/src/search/graph.ts +234 -0
  323. package/references/minimem/src/search/hybrid.ts +151 -0
  324. package/references/minimem/src/search/search.ts +256 -0
  325. package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
  326. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  327. package/references/minimem/src/server/mcp.ts +326 -0
  328. package/references/minimem/src/server/tools.ts +720 -0
  329. package/references/minimem/src/session.ts +460 -0
  330. package/references/minimem/tsconfig.json +19 -0
  331. package/references/minimem/tsup.config.ts +26 -0
  332. package/references/minimem/vitest.config.ts +24 -0
  333. package/references/openteams/.claude/settings.json +6 -0
  334. package/references/openteams/README.md +1 -0
  335. package/references/openteams/SKILL.md +341 -0
  336. package/references/openteams/design.md +411 -0
  337. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
  338. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
  339. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
  340. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
  341. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
  342. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
  343. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
  344. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
  345. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
  346. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
  347. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
  348. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
  349. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
  350. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
  351. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
  352. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
  353. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
  354. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
  355. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
  356. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
  357. package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
  358. package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
  359. package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
  360. package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
  361. package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
  362. package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
  363. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
  364. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
  365. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
  366. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
  367. package/references/openteams/examples/bmad-method/team.yaml +161 -0
  368. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
  369. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
  370. package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
  371. package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
  372. package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
  373. package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
  374. package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
  375. package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
  376. package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
  377. package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
  378. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
  379. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
  380. package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
  381. package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
  382. package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
  383. package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
  384. package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
  385. package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
  386. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
  387. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
  388. package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
  389. package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
  390. package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
  391. package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
  392. package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
  393. package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
  394. package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
  395. package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
  396. package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
  397. package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
  398. package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
  399. package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
  400. package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
  401. package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
  402. package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
  403. package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
  404. package/references/openteams/examples/get-shit-done/team.yaml +154 -0
  405. package/references/openteams/package-lock.json +2181 -0
  406. package/references/openteams/package.json +48 -0
  407. package/references/openteams/schema/role.schema.json +125 -0
  408. package/references/openteams/schema/team.schema.json +284 -0
  409. package/references/openteams/src/cli/agent.ts +104 -0
  410. package/references/openteams/src/cli/cli.test.ts +381 -0
  411. package/references/openteams/src/cli/generate.ts +220 -0
  412. package/references/openteams/src/cli/message.ts +241 -0
  413. package/references/openteams/src/cli/task.ts +154 -0
  414. package/references/openteams/src/cli/team.ts +104 -0
  415. package/references/openteams/src/cli/template.ts +207 -0
  416. package/references/openteams/src/cli.ts +45 -0
  417. package/references/openteams/src/db/database.test.ts +185 -0
  418. package/references/openteams/src/db/database.ts +240 -0
  419. package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
  420. package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
  421. package/references/openteams/src/generators/package-generator.test.ts +129 -0
  422. package/references/openteams/src/generators/package-generator.ts +102 -0
  423. package/references/openteams/src/generators/skill-generator.test.ts +246 -0
  424. package/references/openteams/src/generators/skill-generator.ts +374 -0
  425. package/references/openteams/src/index.ts +104 -0
  426. package/references/openteams/src/services/agent-service.test.ts +158 -0
  427. package/references/openteams/src/services/agent-service.ts +84 -0
  428. package/references/openteams/src/services/communication-service.test.ts +455 -0
  429. package/references/openteams/src/services/communication-service.ts +371 -0
  430. package/references/openteams/src/services/message-service.test.ts +342 -0
  431. package/references/openteams/src/services/message-service.ts +203 -0
  432. package/references/openteams/src/services/task-service.test.ts +434 -0
  433. package/references/openteams/src/services/task-service.ts +239 -0
  434. package/references/openteams/src/services/team-service.test.ts +181 -0
  435. package/references/openteams/src/services/team-service.ts +139 -0
  436. package/references/openteams/src/services/template-service.test.ts +306 -0
  437. package/references/openteams/src/services/template-service.ts +182 -0
  438. package/references/openteams/src/spawner/acp-factory.ts +96 -0
  439. package/references/openteams/src/spawner/interface.ts +31 -0
  440. package/references/openteams/src/spawner/mock.test.ts +93 -0
  441. package/references/openteams/src/spawner/mock.ts +59 -0
  442. package/references/openteams/src/template/loader.test.ts +1319 -0
  443. package/references/openteams/src/template/loader.ts +698 -0
  444. package/references/openteams/src/template/types.ts +200 -0
  445. package/references/openteams/src/types.ts +205 -0
  446. package/references/openteams/tsconfig.json +18 -0
  447. package/references/openteams/vitest.config.ts +9 -0
  448. package/references/skill-tree/.claude/settings.json +6 -0
  449. package/references/skill-tree/.sudocode/issues.jsonl +11 -0
  450. package/references/skill-tree/.sudocode/specs.jsonl +1 -0
  451. package/references/skill-tree/CLAUDE.md +150 -0
  452. package/references/skill-tree/README.md +324 -0
  453. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  454. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  455. package/references/skill-tree/docs/TODOS.md +91 -0
  456. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  457. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  458. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  459. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  460. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  461. package/references/skill-tree/docs/scraper/README.md +170 -0
  462. package/references/skill-tree/examples/basic-usage.ts +190 -0
  463. package/references/skill-tree/package-lock.json +1509 -0
  464. package/references/skill-tree/package.json +66 -0
  465. package/references/skill-tree/scraper/README.md +123 -0
  466. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  467. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  468. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  469. package/references/skill-tree/scraper/package-lock.json +6329 -0
  470. package/references/skill-tree/scraper/package.json +68 -0
  471. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  472. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  473. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  474. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  475. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  476. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  477. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  478. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  479. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  480. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  481. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  482. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  483. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  484. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  485. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  486. package/references/skill-tree/test/run-all.ts +106 -0
  487. package/references/skill-tree/test/utils.ts +128 -0
  488. package/references/skill-tree/vitest.config.ts +16 -0
  489. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
  490. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
  491. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
  492. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
  493. package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
  494. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
  495. package/src/acp/__tests__/integration.test.ts +56 -31
  496. package/src/acp/__tests__/macro-agent.test.ts +16 -7
  497. package/src/acp/macro-agent.ts +170 -36
  498. package/src/acp/types.ts +46 -1
  499. package/src/agent/__tests__/agent-manager.test.ts +228 -2
  500. package/src/agent/agent-manager.ts +809 -285
  501. package/src/agent/types.ts +12 -1
  502. package/src/api/__tests__/server.test.ts +203 -4
  503. package/src/api/server.ts +169 -10
  504. package/src/api/types.ts +3 -1
  505. package/src/auth/__tests__/token.test.ts +100 -0
  506. package/src/auth/index.ts +1 -0
  507. package/src/auth/token.ts +82 -0
  508. package/src/cli/__tests__/acp.test.ts +1 -1
  509. package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
  510. package/src/cli/acp.ts +197 -72
  511. package/src/cli/index.ts +125 -15
  512. package/src/cli/mcp.ts +315 -197
  513. package/src/cli/parse-args.ts +54 -0
  514. package/src/cli/stable-instance-id.ts +14 -0
  515. package/src/config/project-config.ts +214 -27
  516. package/src/index.ts +3 -0
  517. package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
  518. package/src/lifecycle/__tests__/handlers.test.ts +53 -0
  519. package/src/lifecycle/handlers/index.ts +25 -8
  520. package/src/lifecycle/types.ts +3 -0
  521. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
  522. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
  523. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
  524. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
  525. package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
  526. package/src/map/adapter/__tests__/event-log.test.ts +527 -0
  527. package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
  528. package/src/map/adapter/__tests__/extensions.test.ts +408 -0
  529. package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
  530. package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
  531. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
  532. package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
  533. package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
  534. package/src/map/adapter/acp-over-map.ts +678 -66
  535. package/src/map/adapter/connection-manager.ts +3 -0
  536. package/src/map/adapter/event-log.ts +208 -0
  537. package/src/map/adapter/event-translator.ts +6 -6
  538. package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
  539. package/src/map/adapter/extensions/index.ts +96 -0
  540. package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
  541. package/src/map/adapter/extensions/streams.ts +839 -0
  542. package/src/map/adapter/extensions/task.ts +11 -0
  543. package/src/map/adapter/extensions/update-metadata.ts +126 -0
  544. package/src/map/adapter/index.ts +33 -0
  545. package/src/map/adapter/interface.ts +2 -0
  546. package/src/map/adapter/map-adapter.ts +312 -47
  547. package/src/map/adapter/subscription-manager.ts +5 -1
  548. package/src/map/adapter/types.ts +10 -1
  549. package/src/mcp/__tests__/map-client.test.ts +386 -0
  550. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
  551. package/src/mcp/__tests__/mcp-server.test.ts +100 -1
  552. package/src/mcp/map-client.ts +177 -0
  553. package/src/mcp/mcp-server.ts +205 -103
  554. package/src/mcp/tools/done.ts +19 -0
  555. package/src/mcp/types.ts +6 -1
  556. package/src/metrics/metrics.ts +1 -1
  557. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
  558. package/src/roles/__tests__/config-loader.test.ts +7 -7
  559. package/src/roles/builtin/coordinator.ts +2 -0
  560. package/src/roles/builtin/integrator.ts +2 -0
  561. package/src/roles/builtin/worker.ts +3 -0
  562. package/src/roles/capabilities.ts +28 -7
  563. package/src/roles/config-loader.ts +8 -7
  564. package/src/roles/registry.ts +2 -2
  565. package/src/roles/types.ts +7 -0
  566. package/src/server/__tests__/combined-server.test.ts +94 -21
  567. package/src/server/combined-server.ts +203 -33
  568. package/src/steering/__tests__/steering-integration.test.ts +1 -1
  569. package/src/store/__tests__/event-store-oob.test.ts +109 -0
  570. package/src/store/__tests__/event-store.test.ts +196 -1
  571. package/src/store/__tests__/instance.test.ts +3 -3
  572. package/src/store/event-store.ts +92 -23
  573. package/src/store/instance.ts +2 -2
  574. package/src/store/types/agents.ts +20 -0
  575. package/src/store/types/events.ts +1 -1
  576. package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
  577. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
  578. package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
  579. package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
  580. package/src/task/backend/index.ts +156 -106
  581. package/src/task/backend/memory.ts +4 -0
  582. package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
  583. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
  584. package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
  585. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
  586. package/src/task/backend/opentasks/backend.ts +1323 -0
  587. package/src/task/backend/opentasks/client.ts +652 -0
  588. package/src/task/backend/opentasks/daemon-manager.ts +256 -0
  589. package/src/task/backend/opentasks/index.ts +69 -0
  590. package/src/task/backend/opentasks/mapping.ts +94 -0
  591. package/src/task/backend/types.ts +42 -66
  592. package/src/task/backend/unified-tool-provider.ts +779 -0
  593. package/src/teams/CLAUDE.md +180 -0
  594. package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
  595. package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
  596. package/src/teams/__tests__/team-manager.test.ts +814 -0
  597. package/src/teams/__tests__/team-system.test.ts +1291 -8
  598. package/src/teams/index.ts +21 -3
  599. package/src/teams/seed-defaults.ts +79 -0
  600. package/src/teams/team-loader.ts +202 -236
  601. package/src/teams/team-manager.ts +387 -0
  602. package/src/teams/team-runtime.ts +592 -121
  603. package/src/teams/types.ts +99 -200
  604. package/test_fixtures/README.md +2 -3
  605. package/test_fixtures/fixtures/index.ts +0 -3
  606. package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
  607. package/test_fixtures/fixtures/repos/index.ts +1 -3
  608. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
  609. package/test_fixtures/fixtures/repos/types.ts +0 -11
  610. package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
  611. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
  612. package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
  613. package/vitest.config.ts +1 -1
  614. package/vitest.e2e.config.ts +1 -1
  615. package/vitest.setup.ts +1 -30
  616. package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
  617. package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
  618. package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
  619. package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
  620. package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
  621. package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
  622. package/.macro-agent/teams/self-driving/team.yaml +0 -103
  623. package/.macro-agent/teams/structured/prompts/developer.md +0 -26
  624. package/.macro-agent/teams/structured/prompts/lead.md +0 -25
  625. package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
  626. package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
  627. package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
  628. package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
  629. package/.macro-agent/teams/structured/team.yaml +0 -89
  630. package/docs/sudocode-integration.md +0 -383
  631. package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
  632. package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
  633. package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
  634. package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
  635. package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
  636. package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
  637. package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
  638. package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
  639. package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
  640. package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
  641. package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
  642. package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
  643. package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
  644. package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
  645. package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
  646. package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
  647. package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
  648. package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
  649. package/src/task/backend/sudocode/backend.ts +0 -1237
  650. package/src/task/backend/sudocode/client.ts +0 -515
  651. package/src/task/backend/sudocode/index.ts +0 -120
  652. package/src/task/backend/sudocode/mapping.ts +0 -93
  653. package/src/task/backend/sudocode/server-client.ts +0 -522
  654. package/src/task/backend/sudocode/standalone-client.ts +0 -623
  655. package/src/task/backend/sudocode/sync-policy.ts +0 -387
  656. package/src/task/backend/sudocode/tools.ts +0 -896
  657. package/src/task/backend/tool-provider.ts +0 -506
  658. package/test_fixtures/fixtures/sudocode/index.ts +0 -29
  659. package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
  660. package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
@@ -0,0 +1,89 @@
1
+ /**
2
+ * OpenTasks Daemon Manager
3
+ *
4
+ * Manages the lifecycle of the central opentasks daemon as part of the
5
+ * task backend lifecycle. The daemon is auto-started by createTaskBackend()
6
+ * and stopped via TaskBackendResult.shutdown().
7
+ *
8
+ * Architecture:
9
+ * - Central daemon lives at ~/.multiagent/opentasks/
10
+ * - If a daemon is already running, we connect to it (ownsDaemon=false)
11
+ * - If not, we start one and own its lifecycle (ownsDaemon=true)
12
+ * - On shutdown, we only stop the daemon if we started it
13
+ *
14
+ * @module task/backend/opentasks/daemon-manager
15
+ */
16
+ import type { OpenTasksClient } from "./client.js";
17
+ /**
18
+ * Configuration for the DaemonManager.
19
+ */
20
+ export interface DaemonManagerConfig {
21
+ /** Central daemon location (default: ~/.multiagent/opentasks) */
22
+ centralPath?: string;
23
+ /** Whether to auto-connect project .opentasks/ on connectProject() */
24
+ connectOnSpawn?: boolean;
25
+ }
26
+ /**
27
+ * Result from ensureDaemon() — the running daemon's connection info.
28
+ */
29
+ export interface DaemonManagerResult {
30
+ /** Connected OpenTasks client */
31
+ client: OpenTasksClient;
32
+ /** Daemon socket path */
33
+ socketPath: string;
34
+ /** Whether we started the daemon (vs connecting to existing) */
35
+ ownsDaemon: boolean;
36
+ }
37
+ /**
38
+ * Manages the central opentasks daemon lifecycle.
39
+ *
40
+ * Internal to the opentasks backend module — not exposed as a standalone service.
41
+ */
42
+ export declare class DaemonManager {
43
+ private readonly centralPath;
44
+ private readonly connectOnSpawn;
45
+ private daemon;
46
+ private client;
47
+ private ownsDaemon;
48
+ private connectedProjects;
49
+ constructor(config?: DaemonManagerConfig);
50
+ /**
51
+ * Ensure the central daemon is running and return a connected client.
52
+ *
53
+ * 1. Check if a daemon is already running at the central path
54
+ * 2. If running, connect to it (ownsDaemon=false)
55
+ * 3. If not running, start one (ownsDaemon=true)
56
+ * 4. Return connected client + socket path
57
+ */
58
+ ensureDaemon(): Promise<DaemonManagerResult>;
59
+ /**
60
+ * Connect a project's .opentasks/ directory to the central daemon.
61
+ *
62
+ * This is a fire-and-forget operation — connection failures are logged
63
+ * but do not affect the caller.
64
+ *
65
+ * @param projectPath - Path to the project root (will look for .opentasks/ subdirectory)
66
+ */
67
+ connectProject(projectPath: string): Promise<void>;
68
+ /**
69
+ * Check if a project is already connected to the central daemon.
70
+ */
71
+ isProjectConnected(projectPath: string): boolean;
72
+ /**
73
+ * Get list of connected project .opentasks/ paths.
74
+ */
75
+ getConnectedProjects(): string[];
76
+ /**
77
+ * Shut down the daemon manager.
78
+ *
79
+ * - Disconnects the client
80
+ * - Stops the daemon if we started it (ownsDaemon=true)
81
+ * - Leaves the daemon running if someone else started it
82
+ */
83
+ shutdown(): Promise<void>;
84
+ }
85
+ /**
86
+ * Create a DaemonManager instance.
87
+ */
88
+ export declare function createDaemonManager(config?: DaemonManagerConfig): DaemonManager;
89
+ //# sourceMappingURL=daemon-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-manager.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/daemon-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,MAAM,EAAE,eAAe,CAAC;IAExB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;CACrB;AAkBD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,CAAC,EAAE,mBAAmB;IAKxC;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAsDlD;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxD;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKhD;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA2BhC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,aAAa,CAEf"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * OpenTasks Daemon Manager
3
+ *
4
+ * Manages the lifecycle of the central opentasks daemon as part of the
5
+ * task backend lifecycle. The daemon is auto-started by createTaskBackend()
6
+ * and stopped via TaskBackendResult.shutdown().
7
+ *
8
+ * Architecture:
9
+ * - Central daemon lives at ~/.multiagent/opentasks/
10
+ * - If a daemon is already running, we connect to it (ownsDaemon=false)
11
+ * - If not, we start one and own its lifecycle (ownsDaemon=true)
12
+ * - On shutdown, we only stop the daemon if we started it
13
+ *
14
+ * @module task/backend/opentasks/daemon-manager
15
+ */
16
+ import * as fs from "node:fs";
17
+ import * as os from "node:os";
18
+ import * as path from "node:path";
19
+ import { checkExistingDaemon, createDaemonWithStore } from "opentasks";
20
+ import { IPCOpenTasksClient } from "./client.js";
21
+ // =============================================================================
22
+ // Constants
23
+ // =============================================================================
24
+ const DEFAULT_CENTRAL_PATH = path.join(process.env.MACRO_AGENT_HOME || path.join(os.homedir(), ".multiagent"), "opentasks");
25
+ /** Grace period (ms) between client disconnect and daemon.stop() to let children finish disconnecting */
26
+ const DAEMON_DRAIN_MS = 500;
27
+ // =============================================================================
28
+ // DaemonManager Implementation
29
+ // =============================================================================
30
+ /**
31
+ * Manages the central opentasks daemon lifecycle.
32
+ *
33
+ * Internal to the opentasks backend module — not exposed as a standalone service.
34
+ */
35
+ export class DaemonManager {
36
+ centralPath;
37
+ connectOnSpawn;
38
+ daemon = null;
39
+ client = null;
40
+ ownsDaemon = false;
41
+ connectedProjects = new Set();
42
+ constructor(config) {
43
+ this.centralPath = config?.centralPath ?? DEFAULT_CENTRAL_PATH;
44
+ this.connectOnSpawn = config?.connectOnSpawn ?? true;
45
+ }
46
+ /**
47
+ * Ensure the central daemon is running and return a connected client.
48
+ *
49
+ * 1. Check if a daemon is already running at the central path
50
+ * 2. If running, connect to it (ownsDaemon=false)
51
+ * 3. If not running, start one (ownsDaemon=true)
52
+ * 4. Return connected client + socket path
53
+ */
54
+ async ensureDaemon() {
55
+ // Ensure the central directory exists
56
+ fs.mkdirSync(this.centralPath, { recursive: true });
57
+ // Check if a daemon is already running at this location
58
+ const existing = await checkExistingDaemon(this.centralPath);
59
+ if (existing.running && existing.socketPath) {
60
+ // Connect to the existing daemon
61
+ console.error(`[opentasks] Connecting to existing daemon at ${existing.socketPath} (pid: ${existing.pid})`);
62
+ const client = new IPCOpenTasksClient({
63
+ socketPath: existing.socketPath,
64
+ });
65
+ await client.connect();
66
+ this.client = client;
67
+ this.ownsDaemon = false;
68
+ return {
69
+ client,
70
+ socketPath: existing.socketPath,
71
+ ownsDaemon: false,
72
+ };
73
+ }
74
+ // No daemon running — start one
75
+ console.error(`[opentasks] Starting daemon at ${this.centralPath}`);
76
+ const daemon = await createDaemonWithStore({
77
+ locationPath: this.centralPath,
78
+ version: "0.0.3",
79
+ });
80
+ await daemon.start();
81
+ this.daemon = daemon;
82
+ this.ownsDaemon = true;
83
+ const socketPath = daemon.socketPath;
84
+ console.error(`[opentasks] Daemon started (socket: ${socketPath})`);
85
+ // Connect client to the daemon
86
+ const client = new IPCOpenTasksClient({ socketPath });
87
+ await client.connect();
88
+ this.client = client;
89
+ return {
90
+ client,
91
+ socketPath,
92
+ ownsDaemon: true,
93
+ };
94
+ }
95
+ /**
96
+ * Connect a project's .opentasks/ directory to the central daemon.
97
+ *
98
+ * This is a fire-and-forget operation — connection failures are logged
99
+ * but do not affect the caller.
100
+ *
101
+ * @param projectPath - Path to the project root (will look for .opentasks/ subdirectory)
102
+ */
103
+ async connectProject(projectPath) {
104
+ if (!this.connectOnSpawn)
105
+ return;
106
+ if (!this.client)
107
+ return;
108
+ const opentasksDir = path.join(projectPath, ".opentasks");
109
+ // Check if project has .opentasks/
110
+ if (!fs.existsSync(opentasksDir))
111
+ return;
112
+ // Check if already connected
113
+ if (this.connectedProjects.has(opentasksDir))
114
+ return;
115
+ try {
116
+ // Read the project's config.json to get its location hash
117
+ const configPath = path.join(opentasksDir, "config.json");
118
+ const configContent = fs.readFileSync(configPath, "utf-8");
119
+ const config = JSON.parse(configContent);
120
+ const hash = config?.location?.hash;
121
+ if (!hash) {
122
+ console.error(`[opentasks] No location hash in ${configPath}, skipping`);
123
+ return;
124
+ }
125
+ // Register the location with the daemon via IPC
126
+ const client = this.client;
127
+ if (typeof client.call === "function") {
128
+ await client.call("location.register", {
129
+ hash,
130
+ opentasksPath: opentasksDir,
131
+ });
132
+ }
133
+ this.connectedProjects.add(opentasksDir);
134
+ console.error(`[opentasks] Connected to project: ${opentasksDir}`);
135
+ }
136
+ catch (error) {
137
+ // Non-fatal — log and continue
138
+ console.error(`[opentasks] Failed to connect project ${opentasksDir}: ${error}`);
139
+ }
140
+ }
141
+ /**
142
+ * Check if a project is already connected to the central daemon.
143
+ */
144
+ isProjectConnected(projectPath) {
145
+ const opentasksDir = path.join(projectPath, ".opentasks");
146
+ return this.connectedProjects.has(opentasksDir);
147
+ }
148
+ /**
149
+ * Get list of connected project .opentasks/ paths.
150
+ */
151
+ getConnectedProjects() {
152
+ return Array.from(this.connectedProjects);
153
+ }
154
+ /**
155
+ * Shut down the daemon manager.
156
+ *
157
+ * - Disconnects the client
158
+ * - Stops the daemon if we started it (ownsDaemon=true)
159
+ * - Leaves the daemon running if someone else started it
160
+ */
161
+ async shutdown() {
162
+ // Disconnect client
163
+ if (this.client) {
164
+ try {
165
+ this.client.disconnect();
166
+ }
167
+ catch {
168
+ // Ignore disconnect errors
169
+ }
170
+ this.client = null;
171
+ }
172
+ // Stop daemon only if we own it
173
+ if (this.ownsDaemon && this.daemon) {
174
+ try {
175
+ // Grace period to let child agents finish disconnecting from the daemon
176
+ await new Promise(resolve => setTimeout(resolve, DAEMON_DRAIN_MS));
177
+ console.error("[opentasks] Stopping daemon");
178
+ await this.daemon.stop();
179
+ }
180
+ catch (error) {
181
+ console.error(`[opentasks] Error stopping daemon: ${error}`);
182
+ }
183
+ this.daemon = null;
184
+ this.ownsDaemon = false;
185
+ }
186
+ this.connectedProjects.clear();
187
+ }
188
+ }
189
+ /**
190
+ * Create a DaemonManager instance.
191
+ */
192
+ export function createDaemonManager(config) {
193
+ return new DaemonManager(config);
194
+ }
195
+ //# sourceMappingURL=daemon-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-manager.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/daemon-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * OpenTasks Task Backend Module
3
+ *
4
+ * Integrates macro-agent's task system with OpenTasks, a graph connector
5
+ * for linking heterogeneous task and issue systems.
6
+ *
7
+ * Tasks are stored as OpenTasks issues with bidirectional ID mapping.
8
+ * Blocking dependencies use OpenTasks 'blocks' edges.
9
+ * The pull model leverages OpenTasks' ready query and claimed_by field.
10
+ *
11
+ * @module task/backend/opentasks
12
+ */
13
+ export { OpenTasksTaskBackend, OpenTasksBackendError, createOpenTasksTaskBackend, } from "./backend.js";
14
+ export type { OpenTasksBackendConfig } from "./backend.js";
15
+ export { IPCOpenTasksClient, OpenTasksClientError, createOpenTasksClient, } from "./client.js";
16
+ export type { OpenTasksClient, OpenTasksClientConfig, OpenTasksIssue, OpenTasksEdge, OpenTasksNodeSummary, CreateIssueInput, UpdateIssueInput, IssueChangeType, IssueChangeEvent, IssueChangeCallback, ClientUnsubscribe, TaskAction, TaskParams, TaskResult, TaskTransitionData, TaskReadyData, TaskAssignData, TaskValidActionsData, TaskNodeSummary, ProviderSummary, } from "./client.js";
17
+ export { DaemonManager, createDaemonManager, } from "./daemon-manager.js";
18
+ export type { DaemonManagerConfig, DaemonManagerResult, } from "./daemon-manager.js";
19
+ export { mapOpenTasksStatus, mapTaskStatus, isIssueComplete, isIssueBlocked, } from "./mapping.js";
20
+ export type { OpenTasksIssueStatus } from "./mapping.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAEjB,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * OpenTasks Task Backend Module
3
+ *
4
+ * Integrates macro-agent's task system with OpenTasks, a graph connector
5
+ * for linking heterogeneous task and issue systems.
6
+ *
7
+ * Tasks are stored as OpenTasks issues with bidirectional ID mapping.
8
+ * Blocking dependencies use OpenTasks 'blocks' edges.
9
+ * The pull model leverages OpenTasks' ready query and claimed_by field.
10
+ *
11
+ * @module task/backend/opentasks
12
+ */
13
+ // Backend
14
+ export { OpenTasksTaskBackend, OpenTasksBackendError, createOpenTasksTaskBackend, } from "./backend.js";
15
+ // Client
16
+ export { IPCOpenTasksClient, OpenTasksClientError, createOpenTasksClient, } from "./client.js";
17
+ // Daemon Manager
18
+ export { DaemonManager, createDaemonManager, } from "./daemon-manager.js";
19
+ // Mapping
20
+ export { mapOpenTasksStatus, mapTaskStatus, isIssueComplete, isIssueBlocked, } from "./mapping.js";
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,UAAU;AACV,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAGtB,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAyBrB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAM7B,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Status Mapping Utilities for OpenTasks Integration
3
+ *
4
+ * Maps between OpenTasks issue statuses and macro-agent task statuses.
5
+ *
6
+ * @module task/backend/opentasks/mapping
7
+ */
8
+ import type { TaskStatus } from "../../../store/types/index.js";
9
+ /**
10
+ * OpenTasks issue status values.
11
+ * These are the canonical statuses used by OpenTasks issues.
12
+ */
13
+ export type OpenTasksIssueStatus = "open" | "in_progress" | "blocked" | "closed";
14
+ /**
15
+ * Map OpenTasks issue status to macro-agent task status.
16
+ *
17
+ * OpenTasks statuses:
18
+ * - open: Not started
19
+ * - in_progress: Currently being worked on
20
+ * - blocked: Blocked by dependencies (handled via isBlocked flag)
21
+ * - closed: Completed
22
+ *
23
+ * Macro-agent statuses:
24
+ * - pending: Not started
25
+ * - assigned: Assigned to an agent but not started
26
+ * - in_progress: Currently executing
27
+ * - completed: Finished successfully
28
+ * - failed: Finished with error
29
+ */
30
+ export declare function mapOpenTasksStatus(openTasksStatus: string): TaskStatus;
31
+ /**
32
+ * Map macro-agent task status to OpenTasks issue status.
33
+ *
34
+ * Note: Some task statuses don't have direct OpenTasks equivalents:
35
+ * - assigned: No direct equivalent (maps to open, assignee set separately)
36
+ * - failed: No direct equivalent (maps to closed with error in metadata)
37
+ */
38
+ export declare function mapTaskStatus(taskStatus: TaskStatus): OpenTasksIssueStatus;
39
+ /**
40
+ * Check if an OpenTasks issue status indicates completion.
41
+ */
42
+ export declare function isIssueComplete(status: string): boolean;
43
+ /**
44
+ * Check if an OpenTasks issue has an explicit blocked status.
45
+ * Note: This is the explicit 'blocked' status, not dependency-based blocking.
46
+ */
47
+ export declare function isIssueBlocked(status: string): boolean;
48
+ //# sourceMappingURL=mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/mapping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,aAAa,GACb,SAAS,GACT,QAAQ,CAAC;AAEb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,GACtB,UAAU,CAcZ;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,oBAAoB,CAiB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Status Mapping Utilities for OpenTasks Integration
3
+ *
4
+ * Maps between OpenTasks issue statuses and macro-agent task statuses.
5
+ *
6
+ * @module task/backend/opentasks/mapping
7
+ */
8
+ /**
9
+ * Map OpenTasks issue status to macro-agent task status.
10
+ *
11
+ * OpenTasks statuses:
12
+ * - open: Not started
13
+ * - in_progress: Currently being worked on
14
+ * - blocked: Blocked by dependencies (handled via isBlocked flag)
15
+ * - closed: Completed
16
+ *
17
+ * Macro-agent statuses:
18
+ * - pending: Not started
19
+ * - assigned: Assigned to an agent but not started
20
+ * - in_progress: Currently executing
21
+ * - completed: Finished successfully
22
+ * - failed: Finished with error
23
+ */
24
+ export function mapOpenTasksStatus(openTasksStatus) {
25
+ switch (openTasksStatus) {
26
+ case "open":
27
+ return "pending";
28
+ case "in_progress":
29
+ return "in_progress";
30
+ case "blocked":
31
+ // Blocked issues map to pending - the isBlocked flag handles blocking
32
+ return "pending";
33
+ case "closed":
34
+ return "completed";
35
+ default:
36
+ return "pending";
37
+ }
38
+ }
39
+ /**
40
+ * Map macro-agent task status to OpenTasks issue status.
41
+ *
42
+ * Note: Some task statuses don't have direct OpenTasks equivalents:
43
+ * - assigned: No direct equivalent (maps to open, assignee set separately)
44
+ * - failed: No direct equivalent (maps to closed with error in metadata)
45
+ */
46
+ export function mapTaskStatus(taskStatus) {
47
+ switch (taskStatus) {
48
+ case "pending":
49
+ return "open";
50
+ case "assigned":
51
+ // Assigned tasks remain open in OpenTasks; assignee field handles assignment
52
+ return "open";
53
+ case "in_progress":
54
+ return "in_progress";
55
+ case "completed":
56
+ return "closed";
57
+ case "failed":
58
+ // Failed tasks are closed in OpenTasks (failure tracked in metadata)
59
+ return "closed";
60
+ default:
61
+ return "open";
62
+ }
63
+ }
64
+ /**
65
+ * Check if an OpenTasks issue status indicates completion.
66
+ */
67
+ export function isIssueComplete(status) {
68
+ return status === "closed";
69
+ }
70
+ /**
71
+ * Check if an OpenTasks issue has an explicit blocked status.
72
+ * Note: This is the explicit 'blocked' status, not dependency-based blocking.
73
+ */
74
+ export function isIssueBlocked(status) {
75
+ return status === "blocked";
76
+ }
77
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/mapping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAuB;IAEvB,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,SAAS;YACZ,sEAAsE;YACtE,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU;YACb,6EAA6E;YAC7E,OAAO,MAAM,CAAC;QAChB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,qEAAqE;YACrE,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,KAAK,SAAS,CAAC;AAC9B,CAAC"}
@@ -5,7 +5,6 @@
5
5
  * internal task system to be backed by external task management systems.
6
6
  *
7
7
  * @module task/backend
8
- * @see s-8472 Pluggable Task Backend Integration with Sudocode
9
8
  */
10
9
  import type { AgentId, TaskId, Timestamp, Task, TaskStatus, ArtifactRef, AgentHistoryEntry } from "../../store/types/index.js";
11
10
  export type { Task, TaskStatus, ArtifactRef, AgentHistoryEntry };
@@ -16,8 +15,10 @@ export type { Task, TaskStatus, ArtifactRef, AgentHistoryEntry };
16
15
  export interface ExtendedTask extends Task {
17
16
  /** True if blocked by dependencies (computed, not stored) */
18
17
  isBlocked?: boolean;
19
- /** Binding to external system (e.g., sudocode issue ID "i-xxxx") */
18
+ /** Binding to external system (e.g., OpenTasks issue ID "i-xxxx") */
20
19
  external_id?: string;
20
+ /** Source project location (e.g., opentasks path or URI) for federated tasks */
21
+ source_location?: string;
21
22
  }
22
23
  /**
23
24
  * Options for creating a new task
@@ -29,7 +30,7 @@ export interface CreateTaskOptions {
29
30
  created_by: AgentId;
30
31
  /** Optional parent task for subtask hierarchy */
31
32
  parent_task?: TaskId;
32
- /** Optional binding to external system (e.g., sudocode issue ID) */
33
+ /** Optional binding to external system (e.g., OpenTasks issue ID) */
33
34
  external_id?: string;
34
35
  /** Optional tags for classification and filtering (pull model) */
35
36
  tags?: string[];
@@ -156,10 +157,11 @@ export type Unsubscribe = () => void;
156
157
  *
157
158
  * Abstraction over task storage allowing different implementations:
158
159
  * - InMemoryTaskBackend - Current behavior (default)
159
- * - SudocodeTaskBackend - Backed by sudocode issues
160
- * - Future: LinearTaskBackend, JiraTaskBackend, etc.
160
+ * - OpenTasksTaskBackend - Backed by OpenTasks graph
161
161
  */
162
162
  export interface TaskBackend {
163
+ /** Gracefully close the backend. After close(), write operations may throw. */
164
+ close?(): Promise<void>;
163
165
  /** Create a new task */
164
166
  create(options: CreateTaskOptions): Promise<ExtendedTask>;
165
167
  /** Get a task by ID */
@@ -212,6 +214,14 @@ export interface TaskBackend {
212
214
  listClaimable?(filter?: ClaimFilter): Promise<ExtendedTask[]>;
213
215
  /** Get agent assignment history for a task */
214
216
  getAgentHistory(taskId: TaskId): Promise<AgentHistoryEntry[]>;
217
+ /**
218
+ * Sync a task transition that happened externally (e.g., via opentasks daemon).
219
+ * Updates the internal store without re-syncing to the external system.
220
+ * @param externalId - The external system's task ID (e.g., opentasks issue ID)
221
+ * @param action - The transition action (e.g., "complete", "start", "close")
222
+ * @param agentId - The agent that performed the transition
223
+ */
224
+ syncExternalTransition?(externalId: string, action: string, agentId?: string): Promise<void>;
215
225
  /** Subscribe to all task changes */
216
226
  onTaskChange(callback: TaskChangeCallback): Unsubscribe;
217
227
  /** Subscribe to changes for a specific task */
@@ -230,10 +240,6 @@ export interface MCPToolDefinition {
230
240
  /** Tool handler function */
231
241
  handler: (params: unknown) => Promise<unknown>;
232
242
  }
233
- /**
234
- * Task tool mode
235
- */
236
- export type TaskToolMode = "abstract" | "native" | "both" | "auto";
237
243
  /**
238
244
  * Task Tool Provider Interface
239
245
  *
@@ -252,66 +258,40 @@ export interface InMemoryBackendConfig {
252
258
  type: "memory";
253
259
  }
254
260
  /**
255
- * Execution tracking configuration
256
- */
257
- export type ExecutionTrackingConfig = {
258
- mode: "none";
259
- } | {
260
- mode: "bound-only";
261
- } | {
262
- mode: "all";
263
- } | {
264
- mode: "filter";
265
- filter: ExecutionFilter;
266
- };
267
- /**
268
- * Execution filter options
269
- */
270
- export interface ExecutionFilter {
271
- /** Only create executions for these agent roles */
272
- roles?: string[];
273
- /** Only when task has external binding */
274
- requireExternalBinding?: boolean;
275
- /** Exclude coordination-only agents (no code changes) */
276
- excludeCoordinationOnly?: boolean;
277
- }
278
- /**
279
- * Sudocode backend configuration
261
+ * OpenTasks backend configuration
280
262
  */
281
- export interface SudocodeBackendConfig {
282
- type: "sudocode";
283
- /** Path to sudocode project root (contains .sudocode/) */
284
- projectPath: string;
285
- /** ID strategy (default: 'dual') */
286
- idStrategy?: "dual";
287
- /** Sync mode for event subscriptions */
288
- syncMode?: "realtime" | "batch";
289
- /** Execution tracking configuration */
290
- executionTracking?: ExecutionTrackingConfig;
291
- /** Auto-link tasks to specs when created from spec context */
292
- autoLinkSpecs?: boolean;
293
- /** Tool mode for this backend (overrides global if set) */
294
- toolMode?: "native" | "mapped" | "both";
263
+ export interface OpenTasksBackendConfig {
264
+ type: "opentasks";
265
+ /** Path to the OpenTasks daemon socket (auto-discovered if not set) */
266
+ socketPath?: string;
267
+ /** Whether to sync status changes to OpenTasks (default: true) */
268
+ syncStatus?: boolean;
269
+ /** Source label for issues created by this backend (default: "macro-agent") */
270
+ sourceLabel?: string;
271
+ /** Auto-start the central opentasks daemon (default: true) */
272
+ autoStart?: boolean;
273
+ /** Central daemon location (default: ~/.multiagent/opentasks) */
274
+ centralPath?: string;
275
+ /** Auto-connect project .opentasks/ dirs on agent spawn (default: true) */
276
+ connectOnSpawn?: boolean;
295
277
  }
296
278
  /**
297
279
  * Task backend configuration
298
280
  */
299
- export type TaskBackendConfig = InMemoryBackendConfig | SudocodeBackendConfig;
281
+ export type TaskBackendConfig = InMemoryBackendConfig | OpenTasksBackendConfig;
300
282
  /**
301
283
  * Macro-agent task configuration
302
284
  */
303
285
  export interface TaskConfig {
304
286
  /** Task backend configuration */
305
287
  backend: TaskBackendConfig;
306
- /** Task tool mode (default: 'auto') */
307
- toolMode?: TaskToolMode;
308
288
  }
309
289
  /**
310
290
  * Default task configuration
311
291
  */
312
292
  export declare const DEFAULT_TASK_CONFIG: TaskConfig;
313
293
  /**
314
- * Default sudocode backend configuration
294
+ * Default OpenTasks backend configuration
315
295
  */
316
- export declare const DEFAULT_SUDOCODE_CONFIG: Omit<SudocodeBackendConfig, "type">;
296
+ export declare const DEFAULT_OPENTASKS_CONFIG: Omit<OpenTasksBackendConfig, "type">;
317
297
  //# sourceMappingURL=types.d.ts.map