macro-agent 0.1.0 → 0.1.1

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 (337) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/.sudocode/specs.jsonl +4 -0
  3. package/CLAUDE.md +16 -14
  4. package/README.md +11 -29
  5. package/dist/acp/macro-agent.d.ts +15 -0
  6. package/dist/acp/macro-agent.d.ts.map +1 -1
  7. package/dist/acp/macro-agent.js +131 -35
  8. package/dist/acp/macro-agent.js.map +1 -1
  9. package/dist/acp/types.d.ts +32 -1
  10. package/dist/acp/types.d.ts.map +1 -1
  11. package/dist/acp/types.js.map +1 -1
  12. package/dist/agent/agent-manager.d.ts +65 -1
  13. package/dist/agent/agent-manager.d.ts.map +1 -1
  14. package/dist/agent/agent-manager.js +464 -183
  15. package/dist/agent/agent-manager.js.map +1 -1
  16. package/dist/agent/types.d.ts +1 -1
  17. package/dist/agent/types.d.ts.map +1 -1
  18. package/dist/api/server.d.ts +3 -0
  19. package/dist/api/server.d.ts.map +1 -1
  20. package/dist/api/server.js +37 -6
  21. package/dist/api/server.js.map +1 -1
  22. package/dist/auth/index.d.ts +2 -0
  23. package/dist/auth/index.d.ts.map +1 -0
  24. package/dist/auth/index.js +2 -0
  25. package/dist/auth/index.js.map +1 -0
  26. package/dist/auth/token.d.ts +41 -0
  27. package/dist/auth/token.d.ts.map +1 -0
  28. package/dist/auth/token.js +73 -0
  29. package/dist/auth/token.js.map +1 -0
  30. package/dist/cli/acp.d.ts +2 -23
  31. package/dist/cli/acp.d.ts.map +1 -1
  32. package/dist/cli/acp.js +127 -61
  33. package/dist/cli/acp.js.map +1 -1
  34. package/dist/cli/index.js +147 -15
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/mcp.d.ts +6 -0
  37. package/dist/cli/mcp.d.ts.map +1 -1
  38. package/dist/cli/mcp.js +268 -181
  39. package/dist/cli/mcp.js.map +1 -1
  40. package/dist/cli/parse-args.d.ts +20 -0
  41. package/dist/cli/parse-args.d.ts.map +1 -0
  42. package/dist/cli/parse-args.js +43 -0
  43. package/dist/cli/parse-args.js.map +1 -0
  44. package/dist/cli/stable-instance-id.d.ts +8 -0
  45. package/dist/cli/stable-instance-id.d.ts.map +1 -0
  46. package/dist/cli/stable-instance-id.js +14 -0
  47. package/dist/cli/stable-instance-id.js.map +1 -0
  48. package/dist/config/project-config.d.ts +74 -7
  49. package/dist/config/project-config.d.ts.map +1 -1
  50. package/dist/config/project-config.js +123 -20
  51. package/dist/config/project-config.js.map +1 -1
  52. package/dist/map/adapter/acp-over-map.d.ts +17 -0
  53. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  54. package/dist/map/adapter/acp-over-map.js +384 -23
  55. package/dist/map/adapter/acp-over-map.js.map +1 -1
  56. package/dist/map/adapter/connection-manager.d.ts.map +1 -1
  57. package/dist/map/adapter/connection-manager.js +3 -0
  58. package/dist/map/adapter/connection-manager.js.map +1 -1
  59. package/dist/map/adapter/event-log.d.ts +87 -0
  60. package/dist/map/adapter/event-log.d.ts.map +1 -0
  61. package/dist/map/adapter/event-log.js +122 -0
  62. package/dist/map/adapter/event-log.js.map +1 -0
  63. package/dist/map/adapter/event-translator.js +6 -6
  64. package/dist/map/adapter/event-translator.js.map +1 -1
  65. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  66. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  67. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  68. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  69. package/dist/map/adapter/extensions/index.d.ts +10 -1
  70. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  71. package/dist/map/adapter/extensions/index.js +34 -0
  72. package/dist/map/adapter/extensions/index.js.map +1 -1
  73. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  74. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  75. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  76. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  77. package/dist/map/adapter/extensions/rename.d.ts +29 -0
  78. package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
  79. package/dist/map/adapter/extensions/rename.js +49 -0
  80. package/dist/map/adapter/extensions/rename.js.map +1 -0
  81. package/dist/map/adapter/extensions/task.d.ts.map +1 -1
  82. package/dist/map/adapter/extensions/task.js +10 -0
  83. package/dist/map/adapter/extensions/task.js.map +1 -1
  84. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  85. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  86. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  87. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  88. package/dist/map/adapter/index.d.ts +2 -1
  89. package/dist/map/adapter/index.d.ts.map +1 -1
  90. package/dist/map/adapter/index.js +8 -2
  91. package/dist/map/adapter/index.js.map +1 -1
  92. package/dist/map/adapter/interface.d.ts +2 -0
  93. package/dist/map/adapter/interface.d.ts.map +1 -1
  94. package/dist/map/adapter/map-adapter.d.ts +3 -0
  95. package/dist/map/adapter/map-adapter.d.ts.map +1 -1
  96. package/dist/map/adapter/map-adapter.js +258 -35
  97. package/dist/map/adapter/map-adapter.js.map +1 -1
  98. package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
  99. package/dist/map/adapter/subscription-manager.js +5 -1
  100. package/dist/map/adapter/subscription-manager.js.map +1 -1
  101. package/dist/map/adapter/types.d.ts +2 -0
  102. package/dist/map/adapter/types.d.ts.map +1 -1
  103. package/dist/mcp/map-client.d.ts +39 -0
  104. package/dist/mcp/map-client.d.ts.map +1 -0
  105. package/dist/mcp/map-client.js +129 -0
  106. package/dist/mcp/map-client.js.map +1 -0
  107. package/dist/mcp/mcp-server.d.ts +14 -0
  108. package/dist/mcp/mcp-server.d.ts.map +1 -1
  109. package/dist/mcp/mcp-server.js +113 -85
  110. package/dist/mcp/mcp-server.js.map +1 -1
  111. package/dist/mcp/types.d.ts +9 -1
  112. package/dist/mcp/types.d.ts.map +1 -1
  113. package/dist/mcp/types.js.map +1 -1
  114. package/dist/metrics/metrics.js +1 -1
  115. package/dist/metrics/metrics.js.map +1 -1
  116. package/dist/roles/capabilities.d.ts +3 -1
  117. package/dist/roles/capabilities.d.ts.map +1 -1
  118. package/dist/roles/capabilities.js +17 -7
  119. package/dist/roles/capabilities.js.map +1 -1
  120. package/dist/roles/config-loader.d.ts +6 -6
  121. package/dist/roles/config-loader.d.ts.map +1 -1
  122. package/dist/roles/config-loader.js +6 -6
  123. package/dist/roles/config-loader.js.map +1 -1
  124. package/dist/roles/registry.d.ts +2 -2
  125. package/dist/roles/registry.js +2 -2
  126. package/dist/server/combined-server.d.ts +20 -0
  127. package/dist/server/combined-server.d.ts.map +1 -1
  128. package/dist/server/combined-server.js +107 -8
  129. package/dist/server/combined-server.js.map +1 -1
  130. package/dist/store/event-store.d.ts +2 -1
  131. package/dist/store/event-store.d.ts.map +1 -1
  132. package/dist/store/event-store.js +69 -20
  133. package/dist/store/event-store.js.map +1 -1
  134. package/dist/store/types/agents.d.ts +18 -0
  135. package/dist/store/types/agents.d.ts.map +1 -1
  136. package/dist/store/types/events.d.ts +1 -1
  137. package/dist/store/types/events.d.ts.map +1 -1
  138. package/dist/task/backend/index.d.ts +47 -29
  139. package/dist/task/backend/index.d.ts.map +1 -1
  140. package/dist/task/backend/index.js +109 -71
  141. package/dist/task/backend/index.js.map +1 -1
  142. package/dist/task/backend/memory.d.ts +1 -0
  143. package/dist/task/backend/memory.d.ts.map +1 -1
  144. package/dist/task/backend/memory.js +3 -0
  145. package/dist/task/backend/memory.js.map +1 -1
  146. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  147. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  148. package/dist/task/backend/opentasks/backend.js +1023 -0
  149. package/dist/task/backend/opentasks/backend.js.map +1 -0
  150. package/dist/task/backend/opentasks/client.d.ts +337 -0
  151. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  152. package/dist/task/backend/opentasks/client.js +225 -0
  153. package/dist/task/backend/opentasks/client.js.map +1 -0
  154. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  155. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  156. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  157. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  158. package/dist/task/backend/opentasks/index.d.ts +21 -0
  159. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  160. package/dist/task/backend/opentasks/index.js +21 -0
  161. package/dist/task/backend/opentasks/index.js.map +1 -0
  162. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  163. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  164. package/dist/task/backend/opentasks/mapping.js +77 -0
  165. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  166. package/dist/task/backend/types.d.ts +33 -53
  167. package/dist/task/backend/types.d.ts.map +1 -1
  168. package/dist/task/backend/types.js +7 -11
  169. package/dist/task/backend/types.js.map +1 -1
  170. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  171. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  172. package/dist/task/backend/unified-tool-provider.js +623 -0
  173. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  174. package/dist/teams/team-loader.d.ts +2 -2
  175. package/dist/teams/team-loader.js +3 -3
  176. package/dist/teams/team-loader.js.map +1 -1
  177. package/dist/teams/team-runtime.d.ts.map +1 -1
  178. package/dist/teams/team-runtime.js +2 -0
  179. package/dist/teams/team-runtime.js.map +1 -1
  180. package/docs/architecture.md +7 -6
  181. package/docs/configuration.md +26 -62
  182. package/docs/implementation-details.md +5 -5
  183. package/docs/implementation-summary.md +17 -17
  184. package/docs/plan-self-driving-support.md +4 -4
  185. package/docs/spec-self-driving-support.md +10 -10
  186. package/docs/team-templates.md +2 -2
  187. package/docs/teams.md +3 -3
  188. package/docs/troubleshooting.md +10 -11
  189. package/package.json +6 -4
  190. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
  191. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
  192. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
  193. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
  194. package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
  195. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
  196. package/src/acp/__tests__/integration.test.ts +56 -31
  197. package/src/acp/__tests__/macro-agent.test.ts +16 -7
  198. package/src/acp/macro-agent.ts +170 -36
  199. package/src/acp/types.ts +46 -1
  200. package/src/agent/__tests__/agent-manager.test.ts +228 -2
  201. package/src/agent/agent-manager.ts +714 -261
  202. package/src/agent/types.ts +3 -1
  203. package/src/api/server.ts +41 -7
  204. package/src/auth/__tests__/token.test.ts +100 -0
  205. package/src/auth/index.ts +1 -0
  206. package/src/auth/token.ts +82 -0
  207. package/src/cli/__tests__/acp.test.ts +1 -1
  208. package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
  209. package/src/cli/acp.ts +130 -72
  210. package/src/cli/index.ts +120 -14
  211. package/src/cli/mcp.ts +311 -207
  212. package/src/cli/parse-args.ts +54 -0
  213. package/src/cli/stable-instance-id.ts +14 -0
  214. package/src/config/project-config.ts +190 -27
  215. package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
  216. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
  217. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
  218. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
  219. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
  220. package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
  221. package/src/map/adapter/__tests__/event-log.test.ts +527 -0
  222. package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
  223. package/src/map/adapter/__tests__/extensions.test.ts +408 -0
  224. package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
  225. package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
  226. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
  227. package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
  228. package/src/map/adapter/acp-over-map.ts +678 -66
  229. package/src/map/adapter/connection-manager.ts +3 -0
  230. package/src/map/adapter/event-log.ts +208 -0
  231. package/src/map/adapter/event-translator.ts +6 -6
  232. package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
  233. package/src/map/adapter/extensions/index.ts +60 -0
  234. package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
  235. package/src/map/adapter/extensions/task.ts +11 -0
  236. package/src/map/adapter/extensions/update-metadata.ts +126 -0
  237. package/src/map/adapter/index.ts +28 -0
  238. package/src/map/adapter/interface.ts +2 -0
  239. package/src/map/adapter/map-adapter.ts +312 -47
  240. package/src/map/adapter/subscription-manager.ts +5 -1
  241. package/src/map/adapter/types.ts +2 -0
  242. package/src/mcp/__tests__/map-client.test.ts +386 -0
  243. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
  244. package/src/mcp/__tests__/mcp-server.test.ts +100 -1
  245. package/src/mcp/map-client.ts +177 -0
  246. package/src/mcp/mcp-server.ts +191 -100
  247. package/src/mcp/types.ts +6 -1
  248. package/src/metrics/metrics.ts +1 -1
  249. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
  250. package/src/roles/__tests__/config-loader.test.ts +7 -7
  251. package/src/roles/capabilities.ts +17 -7
  252. package/src/roles/config-loader.ts +6 -6
  253. package/src/roles/registry.ts +2 -2
  254. package/src/server/__tests__/combined-server.test.ts +94 -21
  255. package/src/server/combined-server.ts +189 -33
  256. package/src/steering/__tests__/steering-integration.test.ts +1 -1
  257. package/src/store/__tests__/event-store.test.ts +196 -1
  258. package/src/store/__tests__/instance.test.ts +3 -3
  259. package/src/store/event-store.ts +80 -21
  260. package/src/store/types/agents.ts +15 -0
  261. package/src/store/types/events.ts +1 -1
  262. package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
  263. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
  264. package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
  265. package/src/task/backend/index.ts +156 -106
  266. package/src/task/backend/memory.ts +4 -0
  267. package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
  268. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
  269. package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
  270. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
  271. package/src/task/backend/opentasks/backend.ts +1323 -0
  272. package/src/task/backend/opentasks/client.ts +652 -0
  273. package/src/task/backend/opentasks/daemon-manager.ts +253 -0
  274. package/src/task/backend/opentasks/index.ts +69 -0
  275. package/src/task/backend/opentasks/mapping.ts +94 -0
  276. package/src/task/backend/types.ts +42 -66
  277. package/src/task/backend/unified-tool-provider.ts +779 -0
  278. package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
  279. package/src/teams/team-loader.ts +3 -3
  280. package/src/teams/team-runtime.ts +2 -0
  281. package/test_fixtures/README.md +2 -3
  282. package/test_fixtures/fixtures/index.ts +0 -3
  283. package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
  284. package/test_fixtures/fixtures/repos/index.ts +1 -3
  285. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
  286. package/test_fixtures/fixtures/repos/types.ts +0 -11
  287. package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
  288. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
  289. package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
  290. package/vitest.config.ts +1 -1
  291. package/vitest.e2e.config.ts +1 -1
  292. package/vitest.setup.ts +1 -30
  293. package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
  294. package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
  295. package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
  296. package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
  297. package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
  298. package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
  299. package/.macro-agent/teams/self-driving/team.yaml +0 -103
  300. package/.macro-agent/teams/structured/prompts/developer.md +0 -26
  301. package/.macro-agent/teams/structured/prompts/lead.md +0 -25
  302. package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
  303. package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
  304. package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
  305. package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
  306. package/.macro-agent/teams/structured/team.yaml +0 -89
  307. package/docs/sudocode-integration.md +0 -383
  308. package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
  309. package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
  310. package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
  311. package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
  312. package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
  313. package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
  314. package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
  315. package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
  316. package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
  317. package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
  318. package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
  319. package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
  320. package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
  321. package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
  322. package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
  323. package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
  324. package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
  325. package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
  326. package/src/task/backend/sudocode/backend.ts +0 -1237
  327. package/src/task/backend/sudocode/client.ts +0 -515
  328. package/src/task/backend/sudocode/index.ts +0 -120
  329. package/src/task/backend/sudocode/mapping.ts +0 -93
  330. package/src/task/backend/sudocode/server-client.ts +0 -522
  331. package/src/task/backend/sudocode/standalone-client.ts +0 -623
  332. package/src/task/backend/sudocode/sync-policy.ts +0 -387
  333. package/src/task/backend/sudocode/tools.ts +0 -896
  334. package/src/task/backend/tool-provider.ts +0 -506
  335. package/test_fixtures/fixtures/sudocode/index.ts +0 -29
  336. package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
  337. package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Authentication Token Utilities
3
+ *
4
+ * Provides token generation, secure comparison, and per-agent
5
+ * token management for the macro-agent server.
6
+ */
7
+ import * as crypto from "crypto";
8
+ // =============================================================================
9
+ // Token Generation
10
+ // =============================================================================
11
+ /**
12
+ * Generate a cryptographically random hex token.
13
+ */
14
+ export function generateToken(bytes = 32) {
15
+ return crypto.randomBytes(bytes).toString("hex");
16
+ }
17
+ // =============================================================================
18
+ // Secure Comparison
19
+ // =============================================================================
20
+ /**
21
+ * Constant-time string comparison to prevent timing attacks.
22
+ */
23
+ export function secureCompare(a, b) {
24
+ if (a.length !== b.length) {
25
+ return false;
26
+ }
27
+ const bufA = Buffer.from(a);
28
+ const bufB = Buffer.from(b);
29
+ return crypto.timingSafeEqual(bufA, bufB);
30
+ }
31
+ // =============================================================================
32
+ // Agent Token Manager
33
+ // =============================================================================
34
+ /**
35
+ * Manages per-agent authentication tokens.
36
+ *
37
+ * Each spawned agent gets a unique token at spawn time. The token is
38
+ * passed to the subprocess via environment variable and validated on
39
+ * every MCP bridge RPC call.
40
+ */
41
+ export class AgentTokenManager {
42
+ tokens = new Map();
43
+ /**
44
+ * Create and store a token for an agent. Returns the generated token.
45
+ */
46
+ createToken(agentId) {
47
+ const token = generateToken();
48
+ this.tokens.set(agentId, token);
49
+ return token;
50
+ }
51
+ /**
52
+ * Verify that a token matches the one stored for an agent.
53
+ */
54
+ verifyToken(agentId, token) {
55
+ const stored = this.tokens.get(agentId);
56
+ if (!stored)
57
+ return false;
58
+ return secureCompare(stored, token);
59
+ }
60
+ /**
61
+ * Revoke an agent's token (e.g., on terminate).
62
+ */
63
+ revokeToken(agentId) {
64
+ return this.tokens.delete(agentId);
65
+ }
66
+ /**
67
+ * Check if an agent has a registered token.
68
+ */
69
+ hasToken(agentId) {
70
+ return this.tokens.has(agentId);
71
+ }
72
+ }
73
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAK,GAAG,EAAE;IACtC,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C;;OAEG;IACH,WAAW,CAAC,OAAe;QACzB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe,EAAE,KAAa;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;CACF"}
package/dist/cli/acp.d.ts CHANGED
@@ -37,27 +37,6 @@
37
37
  * args: ['multiagent', '--acp'],
38
38
  * });
39
39
  */
40
- export interface ACPServerOptions {
41
- /** Working directory for agents */
42
- cwd?: string;
43
- /** Stdio ACP-only mode (for embedded use with acp-factory) */
44
- acp?: boolean;
45
- /** Port for server (default: 3001) */
46
- port?: number;
47
- /** Host for server (default: localhost) */
48
- host?: string;
49
- /** Instance ID to reuse an existing event store (omit for new instance) */
50
- instanceId?: string;
51
- }
52
- /**
53
- * Parse command line arguments.
54
- * @param argv Optional array of arguments (defaults to process.argv.slice(2))
55
- */
56
- export declare function parseArgs(argv?: string[]): ACPServerOptions;
57
- /**
58
- * Generate a stable instance ID from the working directory.
59
- * This ensures the same project always uses the same EventStore,
60
- * so agents and sessions persist across server restarts.
61
- */
62
- export declare function getStableInstanceId(cwd: string): string;
40
+ export { parseArgs, type ACPServerOptions } from "./parse-args.js";
41
+ export { getStableInstanceId } from "./stable-instance-id.js";
63
42
  //# sourceMappingURL=acp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/cli/acp.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAqCH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA4B3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvD"}
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/cli/acp.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAsCH,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/cli/acp.js CHANGED
@@ -37,11 +37,7 @@
37
37
  * args: ['multiagent', '--acp'],
38
38
  * });
39
39
  */
40
- import { readFileSync } from "node:fs";
41
- import { createHash } from "node:crypto";
42
- import { dirname, join, resolve } from "node:path";
43
40
  import { Readable } from "node:stream";
44
- import { fileURLToPath } from "node:url";
45
41
  import { AgentSideConnection, ndJsonStream, } from "@agentclientprotocol/sdk";
46
42
  import { createEventStore } from "../store/event-store.js";
47
43
  import { createAgentManager } from "../agent/agent-manager.js";
@@ -51,52 +47,15 @@ import { MacroAgent } from "../acp/macro-agent.js";
51
47
  import { createCombinedServer, } from "../server/combined-server.js";
52
48
  import { createActivityWatcher, subscribeAgentToEvents, MONITOR_DEFAULT_EVENT_TYPES, } from "../activity/index.js";
53
49
  import { createWakeHandler, createSessionProviderFromAgentManager, } from "../agent/wake.js";
54
- /**
55
- * Parse command line arguments.
56
- * @param argv Optional array of arguments (defaults to process.argv.slice(2))
57
- */
58
- export function parseArgs(argv) {
59
- const args = argv ?? process.argv.slice(2);
60
- const options = {};
61
- for (let i = 0; i < args.length; i++) {
62
- if (args[i] === "--version" || args[i] === "-v") {
63
- const __dirname = dirname(fileURLToPath(import.meta.url));
64
- const pkg = JSON.parse(readFileSync(join(__dirname, "../../package.json"), "utf-8"));
65
- console.log(pkg.version);
66
- process.exit(0);
67
- }
68
- else if (args[i] === "--cwd" && args[i + 1]) {
69
- options.cwd = args[i + 1];
70
- i++;
71
- }
72
- else if (args[i] === "--acp") {
73
- options.acp = true;
74
- }
75
- else if (args[i] === "--port" && args[i + 1]) {
76
- options.port = parseInt(args[i + 1], 10);
77
- i++;
78
- }
79
- else if (args[i] === "--host" && args[i + 1]) {
80
- options.host = args[i + 1];
81
- i++;
82
- }
83
- else if (args[i] === "--instance-id" && args[i + 1]) {
84
- options.instanceId = args[i + 1];
85
- i++;
86
- }
87
- }
88
- return options;
89
- }
90
- /**
91
- * Generate a stable instance ID from the working directory.
92
- * This ensures the same project always uses the same EventStore,
93
- * so agents and sessions persist across server restarts.
94
- */
95
- export function getStableInstanceId(cwd) {
96
- const normalizedPath = resolve(cwd);
97
- const hash = createHash("sha256").update(normalizedPath).digest("hex").slice(0, 12);
98
- return `inst_${hash}`;
99
- }
50
+ // ─────────────────────────────────────────────────────────────────
51
+ // Configuration
52
+ // ─────────────────────────────────────────────────────────────────
53
+ import { parseArgs } from "./parse-args.js";
54
+ import { getStableInstanceId } from "./stable-instance-id.js";
55
+ import { loadMergedConfig } from "../config/project-config.js";
56
+ // Re-export utilities for backwards compatibility
57
+ export { parseArgs } from "./parse-args.js";
58
+ export { getStableInstanceId } from "./stable-instance-id.js";
100
59
  // ─────────────────────────────────────────────────────────────────
101
60
  // Stream Setup
102
61
  // ─────────────────────────────────────────────────────────────────
@@ -226,9 +185,74 @@ async function main() {
226
185
  sessionChecker,
227
186
  wakeHandler: routerWakeHandler,
228
187
  });
188
+ // Load merged config (global → project → env vars)
189
+ const mergedConfig = loadMergedConfig(defaultCwd);
190
+ // Compute server URL for thin-client MCP mode (only in server mode, not stdio ACP)
191
+ const serverUrl = options.acp
192
+ ? undefined
193
+ : `http://${options.host ?? mergedConfig.host ?? "localhost"}:${options.port ?? mergedConfig.port ?? 3001}`;
194
+ // Set up authentication tokens from merged config
195
+ const noAuth = options.noAuth || mergedConfig.auth?.disabled === true;
196
+ let serverToken;
197
+ let agentTokenManager;
198
+ if (!noAuth && mergedConfig.auth?.secret) {
199
+ const { AgentTokenManager } = await import("../auth/token.js");
200
+ serverToken = mergedConfig.auth.secret;
201
+ agentTokenManager = new AgentTokenManager();
202
+ }
229
203
  // Now create the agentManager with the real router
230
- agentManager = createAgentManager(eventStore, messageRouter);
204
+ agentManager = createAgentManager(eventStore, messageRouter, {
205
+ serverUrl,
206
+ serverToken: serverUrl ? serverToken : undefined,
207
+ agentTokenManager: serverUrl ? agentTokenManager : undefined,
208
+ taskBackend: mergedConfig.task?.backend,
209
+ openTasksSocketPath: mergedConfig.task?.opentasks?.socket_path,
210
+ });
231
211
  const taskManager = createTaskManager(eventStore);
212
+ // Create task backend for dynamic task tools (create_task, get_task, etc.)
213
+ const { createTaskBackend, loadTaskConfigFromMerged } = await import("../task/backend/index.js");
214
+ const { UnifiedTaskToolProvider } = await import("../task/backend/unified-tool-provider.js");
215
+ let taskBackend;
216
+ let taskToolProvider;
217
+ let taskBackendShutdown;
218
+ // Mutable context holder for the task tool provider. Bridge handlers set
219
+ // this before each tool call so the provider uses the calling agent's ID.
220
+ // Safe because Node.js is single-threaded.
221
+ const taskToolContext = { agent_id: "" };
222
+ // Connect-on-spawn callback: auto-connect project .opentasks/ dirs to central daemon
223
+ let connectProject;
224
+ let getConnectedProjects;
225
+ try {
226
+ const taskConfig = loadTaskConfigFromMerged(mergedConfig);
227
+ const result = await createTaskBackend(taskConfig, eventStore);
228
+ taskBackend = result.backend;
229
+ taskBackendShutdown = result.shutdown;
230
+ connectProject = result.connectProject;
231
+ getConnectedProjects = result.getConnectedProjects;
232
+ taskToolProvider = new UnifiedTaskToolProvider(taskBackend, () => taskToolContext, result.openTasksClient);
233
+ console.error(`[acp] Task backend created: ${taskConfig.backend.type}`);
234
+ // Propagate runtime socket path to child agents so they skip daemon discovery
235
+ if (result.socketPath) {
236
+ agentManager.setOpenTasksSocketPath(result.socketPath);
237
+ }
238
+ // Auto-connect the server's own project directory on startup
239
+ if (connectProject) {
240
+ connectProject(defaultCwd).catch(() => { });
241
+ }
242
+ }
243
+ catch (err) {
244
+ // Fall back to in-memory backend if opentasks connection fails
245
+ console.error(`[acp] Failed to create task backend (${err}), falling back to memory`);
246
+ try {
247
+ const fallbackResult = await createTaskBackend({ backend: { type: "memory" } }, eventStore);
248
+ taskBackend = fallbackResult.backend;
249
+ taskToolProvider = new UnifiedTaskToolProvider(taskBackend, () => taskToolContext);
250
+ console.error(`[acp] Task backend created: memory (fallback)`);
251
+ }
252
+ catch (fallbackErr) {
253
+ console.error(`[acp] Memory fallback also failed: ${fallbackErr}. Task tools will be unavailable.`);
254
+ }
255
+ }
232
256
  // Create ActivityWatcher for event-driven agent waking
233
257
  const sessionProvider = createSessionProviderFromAgentManager(agentManager);
234
258
  const wakeHandler = createWakeHandler(sessionProvider, agentManager);
@@ -278,6 +302,7 @@ async function main() {
278
302
  // Start the ActivityWatcher
279
303
  activityWatcher.start();
280
304
  // Auto-subscribe Monitor agents to health events when they spawn
305
+ // and auto-connect project .opentasks/ directories to central daemon
281
306
  agentManager.onLifecycleEvent((event) => {
282
307
  if (event.type === "spawned") {
283
308
  const agent = event.agent;
@@ -288,20 +313,52 @@ async function main() {
288
313
  );
289
314
  console.error(`[acp] Auto-subscribed Monitor ${agent.id} to health events`);
290
315
  }
316
+ // Connect-on-spawn: auto-connect project .opentasks/ to central daemon
317
+ if (connectProject && agent.cwd) {
318
+ connectProject(agent.cwd).catch(() => {
319
+ // Non-fatal — logged inside connectProject
320
+ });
321
+ }
291
322
  }
292
323
  });
293
324
  // Combined server (when --ws is enabled)
294
325
  let combinedServer;
295
- // Cleanup function
326
+ // Cleanup function — best-effort, each step isolated
296
327
  const cleanup = async () => {
297
- // Stop ActivityWatcher
298
- activityWatcher.stop();
299
- // Stop combined server if running
328
+ try {
329
+ activityWatcher.stop();
330
+ }
331
+ catch (err) {
332
+ console.error(`[cleanup] ActivityWatcher stop failed: ${err}`);
333
+ }
300
334
  if (combinedServer) {
301
- await combinedServer.stop();
335
+ try {
336
+ await combinedServer.stop();
337
+ }
338
+ catch (err) {
339
+ console.error(`[cleanup] Combined server stop failed: ${err}`);
340
+ }
341
+ }
342
+ try {
343
+ await agentManager.close();
344
+ }
345
+ catch (err) {
346
+ console.error(`[cleanup] AgentManager close failed: ${err}`);
347
+ }
348
+ if (taskBackendShutdown) {
349
+ try {
350
+ await taskBackendShutdown();
351
+ }
352
+ catch (err) {
353
+ console.error(`[cleanup] Task backend shutdown failed: ${err}`);
354
+ }
355
+ }
356
+ try {
357
+ await eventStore.close();
358
+ }
359
+ catch (err) {
360
+ console.error(`[cleanup] EventStore close failed: ${err}`);
302
361
  }
303
- await agentManager.close();
304
- await eventStore.close();
305
362
  };
306
363
  try {
307
364
  // Handle graceful shutdown
@@ -331,10 +388,19 @@ async function main() {
331
388
  }
332
389
  else {
333
390
  // Full server mode (default): WebSocket ACP + MAP + REST API
334
- const host = options.host ?? "localhost";
335
- const port = options.port ?? 3001;
336
- combinedServer = createCombinedServer({ eventStore, agentManager, taskManager, messageRouter, activityWatcher }, { port, host, defaultCwd });
391
+ const host = options.host ?? mergedConfig.host ?? "localhost";
392
+ const port = options.port ?? mergedConfig.port ?? 3001;
393
+ combinedServer = createCombinedServer({ eventStore, agentManager, taskManager, messageRouter, activityWatcher, taskBackend, taskToolProvider, taskToolContext, agentTokenManager, getConnectedProjects }, { port, host, defaultCwd, serverToken, noAuth });
337
394
  await combinedServer.start();
395
+ if (serverToken) {
396
+ console.error(`[acp] Server token: ${serverToken.substring(0, 8)}...`);
397
+ }
398
+ else if (noAuth) {
399
+ console.error(`[acp] Auth: explicitly disabled`);
400
+ }
401
+ else {
402
+ console.error(`[acp] Auth: off (set auth.secret in config or MACRO_SERVER_SECRET to enable)`);
403
+ }
338
404
  // Keep process alive - will exit via SIGINT/SIGTERM handlers
339
405
  await new Promise(() => {
340
406
  // Never resolves - process stays alive until signal
@@ -1 +1 @@
1
- {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/cli/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/cli/acp.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -15,8 +15,9 @@ import { createAgentManager } from "../agent/agent-manager.js";
15
15
  import { createTaskManager } from "../task/task-manager.js";
16
16
  import { createMessageRouter } from "../router/message-router.js";
17
17
  import { createAPIServer } from "../api/server.js";
18
- import { loadProjectConfig } from "../config/project-config.js";
18
+ import { loadMergedConfig } from "../config/project-config.js";
19
19
  import { loadTeam, TeamRuntime } from "../teams/index.js";
20
+ import { createTaskBackend, loadTaskConfigFromMerged } from "../task/backend/index.js";
20
21
  // ─────────────────────────────────────────────────────────────────
21
22
  // Formatting Helpers
22
23
  // ─────────────────────────────────────────────────────────────────
@@ -105,14 +106,46 @@ program
105
106
  .action(async (options) => {
106
107
  console.log(chalk.blue("Starting multi-agent server..."));
107
108
  try {
109
+ // Load merged config (global → project → env vars)
110
+ const mergedConfig = loadMergedConfig(options.cwd);
108
111
  // Initialize services
109
112
  const eventStore = await createEventStore({ inMemory: false });
110
113
  const messageRouter = createMessageRouter(eventStore);
111
- const agentManager = createAgentManager(eventStore, messageRouter);
114
+ const serverUrl = `http://${options.host}:${options.port}`;
115
+ const agentManager = createAgentManager(eventStore, messageRouter, {
116
+ serverUrl,
117
+ taskBackend: mergedConfig.task?.backend,
118
+ openTasksSocketPath: mergedConfig.task?.opentasks?.socket_path,
119
+ });
112
120
  const taskManager = createTaskManager(eventStore);
113
- // Determine team name: CLI flag > project config > none
114
- const projectConfig = loadProjectConfig(options.cwd);
115
- const teamName = options.team ?? projectConfig.team;
121
+ // Create task backend from merged config
122
+ const taskConfig = loadTaskConfigFromMerged(mergedConfig);
123
+ let taskBackendShutdown;
124
+ let connectProject;
125
+ try {
126
+ const result = await createTaskBackend(taskConfig, eventStore);
127
+ taskBackendShutdown = result.shutdown;
128
+ connectProject = result.connectProject;
129
+ console.log(chalk.blue(`Task backend: ${taskConfig.backend.type}`));
130
+ // Propagate runtime socket path to child agents so they skip daemon discovery
131
+ if (result.socketPath) {
132
+ agentManager.setOpenTasksSocketPath(result.socketPath);
133
+ }
134
+ // Auto-connect the server's own project directory on startup
135
+ if (connectProject) {
136
+ connectProject(options.cwd ?? process.cwd()).catch(() => { });
137
+ }
138
+ }
139
+ catch (err) {
140
+ // Fall back to in-memory backend if opentasks connection fails
141
+ console.log(chalk.yellow(`Task backend creation failed (${err}), falling back to memory`));
142
+ try {
143
+ await createTaskBackend({ backend: { type: "memory" } }, eventStore);
144
+ }
145
+ catch { /* non-critical */ }
146
+ }
147
+ // Determine team name: CLI flag > merged config
148
+ const teamName = options.team ?? mergedConfig.team;
116
149
  // Load and initialize team if specified
117
150
  let teamRuntime = null;
118
151
  if (teamName) {
@@ -126,11 +159,20 @@ program
126
159
  await teamRuntime.initialize();
127
160
  console.log(chalk.green(`Team '${teamName}' loaded: ${manifest.roles.join(", ")}`));
128
161
  }
162
+ // Resolve auth from merged config
163
+ const noAuth = mergedConfig.auth?.disabled ?? false;
164
+ const serverToken = noAuth ? undefined : (mergedConfig.auth?.secret ?? undefined);
129
165
  // Create API server
130
- const server = createAPIServer({ eventStore, agentManager, taskManager, messageRouter }, { port: parseInt(options.port), host: options.host });
166
+ const server = createAPIServer({ eventStore, agentManager, taskManager, messageRouter }, { port: parseInt(options.port), host: options.host, serverToken });
131
167
  // Start server
132
168
  await server.start();
133
169
  console.log(chalk.green(`Server running at http://${options.host}:${options.port}`));
170
+ if (serverToken) {
171
+ console.log(chalk.gray(`Server token: ${serverToken.substring(0, 8)}...`));
172
+ }
173
+ else {
174
+ console.log(chalk.yellow(`Auth: disabled (MACRO_NO_AUTH)`));
175
+ }
134
176
  // Bootstrap team agents after server is running
135
177
  if (teamRuntime) {
136
178
  const { rootId, companionIds } = await teamRuntime.bootstrap();
@@ -139,15 +181,52 @@ program
139
181
  ? `, companions=${companionIds.join(", ")}`
140
182
  : "")));
141
183
  }
184
+ // Connect-on-spawn: auto-connect project .opentasks/ dirs when agents spawn
185
+ if (connectProject) {
186
+ agentManager.onLifecycleEvent((event) => {
187
+ if (event.type === "spawned" && event.agent.cwd && connectProject) {
188
+ connectProject(event.agent.cwd).catch(() => { });
189
+ }
190
+ });
191
+ }
142
192
  console.log(chalk.gray("Press Ctrl+C to stop"));
143
- // Handle shutdown
193
+ // Handle shutdown — best-effort, each step isolated
144
194
  process.on("SIGINT", async () => {
145
195
  console.log(chalk.yellow("\nShutting down..."));
146
- if (teamRuntime)
147
- await teamRuntime.teardown();
148
- await server.stop();
149
- await agentManager.close();
150
- await eventStore.close();
196
+ if (teamRuntime) {
197
+ try {
198
+ await teamRuntime.teardown();
199
+ }
200
+ catch (err) {
201
+ console.error(`[cleanup] Team teardown failed: ${err}`);
202
+ }
203
+ }
204
+ try {
205
+ await server.stop();
206
+ }
207
+ catch (err) {
208
+ console.error(`[cleanup] Server stop failed: ${err}`);
209
+ }
210
+ try {
211
+ await agentManager.close();
212
+ }
213
+ catch (err) {
214
+ console.error(`[cleanup] AgentManager close failed: ${err}`);
215
+ }
216
+ if (taskBackendShutdown) {
217
+ try {
218
+ await taskBackendShutdown();
219
+ }
220
+ catch (err) {
221
+ console.error(`[cleanup] Task backend shutdown failed: ${err}`);
222
+ }
223
+ }
224
+ try {
225
+ await eventStore.close();
226
+ }
227
+ catch (err) {
228
+ console.error(`[cleanup] EventStore close failed: ${err}`);
229
+ }
151
230
  process.exit(0);
152
231
  });
153
232
  }
@@ -184,6 +263,26 @@ program
184
263
  input: process.stdin,
185
264
  output: process.stdout,
186
265
  });
266
+ // Handle Ctrl+C and SIGTERM to clean up child processes
267
+ const cleanup = async () => {
268
+ console.log(chalk.yellow("\nShutting down..."));
269
+ try {
270
+ await agentManager.close();
271
+ }
272
+ catch (err) {
273
+ console.error(`[cleanup] AgentManager close failed: ${err}`);
274
+ }
275
+ try {
276
+ await eventStore.close();
277
+ }
278
+ catch (err) {
279
+ console.error(`[cleanup] EventStore close failed: ${err}`);
280
+ }
281
+ rl.close();
282
+ process.exit(0);
283
+ };
284
+ process.on("SIGINT", cleanup);
285
+ process.on("SIGTERM", cleanup);
187
286
  const prompt = () => {
188
287
  rl.question(chalk.cyan("You: "), async (input) => {
189
288
  const trimmed = input.trim();
@@ -622,6 +721,21 @@ program
622
721
  const messageRouter = createMessageRouter(eventStore);
623
722
  agentManager = createAgentManager(eventStore, messageRouter);
624
723
  const taskManager = createTaskManager(eventStore);
724
+ // Create task backend from merged config
725
+ const acpMergedConfig = loadMergedConfig(defaultCwd);
726
+ const taskConfig = loadTaskConfigFromMerged(acpMergedConfig);
727
+ let acpTaskBackendShutdown;
728
+ try {
729
+ const result = await createTaskBackend(taskConfig, eventStore);
730
+ acpTaskBackendShutdown = result.shutdown;
731
+ }
732
+ catch {
733
+ // Fall back to memory if opentasks connection fails
734
+ try {
735
+ await createTaskBackend({ backend: { type: "memory" } }, eventStore);
736
+ }
737
+ catch { /* non-critical */ }
738
+ }
625
739
  // Create stdio streams for ACP communication
626
740
  const input = Readable.toWeb(process.stdin);
627
741
  const output = new WritableStream({
@@ -647,13 +761,31 @@ program
647
761
  taskManager,
648
762
  defaultCwd,
649
763
  }), stream);
650
- // Handle graceful shutdown
764
+ // Handle graceful shutdown — best-effort, each step isolated
651
765
  const cleanup = async () => {
652
766
  if (agentManager) {
653
- await agentManager.close();
767
+ try {
768
+ await agentManager.close();
769
+ }
770
+ catch (err) {
771
+ console.error(`[cleanup] AgentManager close failed: ${err}`);
772
+ }
773
+ }
774
+ if (acpTaskBackendShutdown) {
775
+ try {
776
+ await acpTaskBackendShutdown();
777
+ }
778
+ catch (err) {
779
+ console.error(`[cleanup] Task backend shutdown failed: ${err}`);
780
+ }
654
781
  }
655
782
  if (eventStore) {
656
- await eventStore.close();
783
+ try {
784
+ await eventStore.close();
785
+ }
786
+ catch (err) {
787
+ console.error(`[cleanup] EventStore close failed: ${err}`);
788
+ }
657
789
  }
658
790
  process.exit(0);
659
791
  };