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
@@ -1,515 +0,0 @@
1
- /**
2
- * SudocodeClient Interface
3
- *
4
- * Abstracts over deployment modes (managed vs standalone) for sudocode integration.
5
- * This interface is the foundation for all sudocode interactions in the task backend.
6
- *
7
- * @module task/backend/sudocode/client
8
- * @see s-8472 Pluggable Task Backend Integration with Sudocode
9
- */
10
-
11
- // =============================================================================
12
- // Re-export Sudocode Types
13
- // =============================================================================
14
-
15
- // We re-export the core sudocode types that we use in the client interface.
16
- // These come from the @sudocode-ai/types package.
17
- export type {
18
- Issue,
19
- IssueStatus,
20
- Spec,
21
- Relationship,
22
- RelationshipType,
23
- EntityType,
24
- IssueFeedback,
25
- FeedbackType,
26
- FeedbackAnchor,
27
- } from "@sudocode-ai/types";
28
-
29
- // =============================================================================
30
- // Client Configuration Types
31
- // =============================================================================
32
-
33
- /**
34
- * Deployment mode for sudocode client
35
- *
36
- * - `managed`: Connect to sudocode server via REST + WebSocket
37
- * - `standalone`: Direct file/CLI access without server
38
- * - `auto`: Auto-detect based on server availability
39
- */
40
- export type SudocodeClientMode = "managed" | "standalone" | "auto";
41
-
42
- /**
43
- * Configuration for creating a SudocodeClient
44
- */
45
- export interface SudocodeClientConfig {
46
- /** Deployment mode */
47
- mode: SudocodeClientMode;
48
-
49
- /** Server URL for managed mode (default: 'http://localhost:3001') */
50
- serverUrl?: string;
51
-
52
- /** WebSocket URL for managed mode (derived from serverUrl if not specified) */
53
- wsUrl?: string;
54
-
55
- /** Path to project root for standalone mode (default: process.cwd()) */
56
- projectPath?: string;
57
-
58
- /** Options for auto-detection mode */
59
- autoDetect?: AutoDetectOptions;
60
- }
61
-
62
- /**
63
- * Options for auto-detection of deployment mode
64
- */
65
- export interface AutoDetectOptions {
66
- /** URL to check for running server (default: 'http://localhost:3001') */
67
- serverUrl?: string;
68
-
69
- /** Detection timeout in milliseconds (default: 2000) */
70
- timeout?: number;
71
-
72
- /** If both modes available, prefer managed (default: true) */
73
- preferManaged?: boolean;
74
- }
75
-
76
- /**
77
- * Configuration for ServerClient (managed mode)
78
- */
79
- export interface ServerClientConfig {
80
- /** Server URL (e.g., 'http://localhost:3001') */
81
- serverUrl: string;
82
-
83
- /** WebSocket URL (e.g., 'ws://localhost:3001/ws') */
84
- wsUrl?: string;
85
-
86
- /** Project ID for multi-project servers */
87
- projectId?: string;
88
- }
89
-
90
- /**
91
- * Configuration for StandaloneClient (standalone mode)
92
- */
93
- export interface StandaloneClientConfig {
94
- /** Path to project root (contains .sudocode/) */
95
- projectPath: string;
96
-
97
- /** Fallback polling interval in ms (default: 5000) */
98
- pollInterval?: number;
99
- }
100
-
101
- // =============================================================================
102
- // Filter and Input Types
103
- // =============================================================================
104
-
105
- /**
106
- * Options for listing issues
107
- */
108
- export interface ListIssuesOptions {
109
- /** Filter by status */
110
- status?: import("@sudocode-ai/types").IssueStatus;
111
-
112
- /** Filter by priority (0=highest, 4=lowest) */
113
- priority?: number;
114
-
115
- /** Search text in title/content */
116
- search?: string;
117
-
118
- /** Include archived issues (default: false) */
119
- archived?: boolean;
120
-
121
- /** Maximum results to return (default: 50) */
122
- limit?: number;
123
- }
124
-
125
- /**
126
- * Options for listing specs
127
- */
128
- export interface ListSpecsOptions {
129
- /** Search text in title/content */
130
- search?: string;
131
-
132
- /** Maximum results to return (default: 50) */
133
- limit?: number;
134
- }
135
-
136
- /**
137
- * Input for updating an issue
138
- */
139
- export interface UpdateIssueInput {
140
- /** Update title */
141
- title?: string;
142
-
143
- /** Update content/description */
144
- content?: string;
145
-
146
- /** Update status */
147
- status?: import("@sudocode-ai/types").IssueStatus;
148
-
149
- /** Update priority */
150
- priority?: number;
151
-
152
- /** Update assignee */
153
- assignee?: string | null;
154
-
155
- /** Archive/unarchive */
156
- archived?: boolean;
157
- }
158
-
159
- /**
160
- * Input for adding feedback to a spec or issue
161
- */
162
- export interface FeedbackInput {
163
- /** Feedback type */
164
- type: import("@sudocode-ai/types").FeedbackType;
165
-
166
- /** Feedback content */
167
- content: string;
168
-
169
- /** Optional agent identifier */
170
- agent?: string;
171
-
172
- /** Optional anchor to specific location */
173
- anchor?: {
174
- /** Line number to anchor to */
175
- line?: number;
176
- /** Text snippet to anchor to */
177
- text?: string;
178
- };
179
- }
180
-
181
- // =============================================================================
182
- // Event Types
183
- // =============================================================================
184
-
185
- /**
186
- * Types of issue change events
187
- */
188
- export type IssueChangeType =
189
- | "created"
190
- | "updated"
191
- | "deleted"
192
- | "status_changed"
193
- | "blocked"
194
- | "unblocked";
195
-
196
- /**
197
- * Issue change event emitted when an issue changes
198
- */
199
- export interface IssueChangeEvent {
200
- /** Type of change */
201
- type: IssueChangeType;
202
-
203
- /** Issue ID that changed */
204
- issueId: string;
205
-
206
- /** Current issue state (undefined if deleted) */
207
- issue?: import("@sudocode-ai/types").Issue;
208
-
209
- /** Previous issue state (for updates) */
210
- previousIssue?: import("@sudocode-ai/types").Issue;
211
-
212
- /** Additional metadata */
213
- metadata?: Record<string, unknown>;
214
- }
215
-
216
- /**
217
- * Callback for issue change events
218
- */
219
- export type IssueChangeCallback = (event: IssueChangeEvent) => void;
220
-
221
- /**
222
- * Unsubscribe function returned by event subscriptions
223
- */
224
- export type Unsubscribe = () => void;
225
-
226
- // =============================================================================
227
- // SudocodeClient Interface
228
- // =============================================================================
229
-
230
- /**
231
- * SudocodeClient Interface
232
- *
233
- * Abstracts over deployment modes for sudocode access:
234
- * - ServerClient: REST + WebSocket for managed mode
235
- * - StandaloneClient: CLI + file watcher for standalone mode
236
- *
237
- * @example
238
- * ```typescript
239
- * const client = await createSudocodeClient({
240
- * mode: 'auto',
241
- * serverUrl: 'http://localhost:3001',
242
- * projectPath: process.cwd(),
243
- * });
244
- *
245
- * const issue = await client.getIssue('i-abc123');
246
- * const ready = await client.getReadyIssues();
247
- *
248
- * client.onIssueChange((event) => {
249
- * console.log('Issue changed:', event.issueId, event.type);
250
- * });
251
- * ```
252
- */
253
- export interface SudocodeClient {
254
- // ─── Issue Operations ────────────────────────────────────────────────────────
255
-
256
- /**
257
- * Get an issue by ID
258
- * @param id Issue ID (e.g., 'i-abc123')
259
- * @returns Issue or null if not found
260
- */
261
- getIssue(
262
- id: string
263
- ): Promise<import("@sudocode-ai/types").Issue | null>;
264
-
265
- /**
266
- * List issues with optional filtering
267
- * @param filter Optional filter options
268
- * @returns Array of issues matching filter
269
- */
270
- listIssues(
271
- filter?: ListIssuesOptions
272
- ): Promise<import("@sudocode-ai/types").Issue[]>;
273
-
274
- /**
275
- * Get issues that are ready to work on (no blocking dependencies)
276
- * @returns Array of ready issues
277
- */
278
- getReadyIssues(): Promise<
279
- import("@sudocode-ai/types").Issue[]
280
- >;
281
-
282
- /**
283
- * Update an issue
284
- * @param id Issue ID
285
- * @param updates Fields to update
286
- * @returns Updated issue
287
- */
288
- updateIssue(
289
- id: string,
290
- updates: UpdateIssueInput
291
- ): Promise<import("@sudocode-ai/types").Issue>;
292
-
293
- // ─── Relationship Operations ─────────────────────────────────────────────────
294
-
295
- /**
296
- * Create a relationship between two entities
297
- * @param from Source entity ID (issue or spec)
298
- * @param to Target entity ID (issue or spec)
299
- * @param type Relationship type
300
- */
301
- createLink(
302
- from: string,
303
- to: string,
304
- type: import("@sudocode-ai/types").RelationshipType
305
- ): Promise<void>;
306
-
307
- /**
308
- * Remove a relationship between two entities
309
- * @param from Source entity ID
310
- * @param to Target entity ID
311
- * @param type Relationship type
312
- */
313
- removeLink(
314
- from: string,
315
- to: string,
316
- type: import("@sudocode-ai/types").RelationshipType
317
- ): Promise<void>;
318
-
319
- /**
320
- * Get issues that block a given issue
321
- * @param issueId Issue ID to check
322
- * @returns Array of blocking issues
323
- */
324
- getBlockers(
325
- issueId: string
326
- ): Promise<import("@sudocode-ai/types").Issue[]>;
327
-
328
- /**
329
- * Get issues that a given issue blocks
330
- * @param issueId Issue ID to check
331
- * @returns Array of issues blocked by this issue
332
- */
333
- getBlocking(
334
- issueId: string
335
- ): Promise<import("@sudocode-ai/types").Issue[]>;
336
-
337
- // ─── Spec Operations (read-only) ─────────────────────────────────────────────
338
-
339
- /**
340
- * Get a spec by ID
341
- * @param id Spec ID (e.g., 's-abc123')
342
- * @returns Spec or null if not found
343
- */
344
- getSpec(
345
- id: string
346
- ): Promise<import("@sudocode-ai/types").Spec | null>;
347
-
348
- /**
349
- * List specs with optional filtering
350
- * @param filter Optional filter options
351
- * @returns Array of specs matching filter
352
- */
353
- listSpecs(
354
- filter?: ListSpecsOptions
355
- ): Promise<import("@sudocode-ai/types").Spec[]>;
356
-
357
- // ─── Feedback Operations ─────────────────────────────────────────────────────
358
-
359
- /**
360
- * Add feedback to a spec or issue
361
- * @param fromIssueId Issue ID providing the feedback (optional for anonymous)
362
- * @param toId Target spec or issue ID receiving feedback
363
- * @param feedback Feedback content and metadata
364
- */
365
- addFeedback(
366
- fromIssueId: string | undefined,
367
- toId: string,
368
- feedback: FeedbackInput
369
- ): Promise<void>;
370
-
371
- // ─── Event Subscription ──────────────────────────────────────────────────────
372
-
373
- /**
374
- * Subscribe to all issue changes
375
- * @param callback Callback invoked on each change
376
- * @returns Unsubscribe function
377
- */
378
- onIssueChange(callback: IssueChangeCallback): Unsubscribe;
379
-
380
- /**
381
- * Subscribe to changes for a specific issue
382
- * @param issueId Issue ID to watch
383
- * @param callback Callback invoked on changes to this issue
384
- * @returns Unsubscribe function
385
- */
386
- onIssueChange(issueId: string, callback: IssueChangeCallback): Unsubscribe;
387
-
388
- // ─── Lifecycle ───────────────────────────────────────────────────────────────
389
-
390
- /**
391
- * Check if the client is connected/ready
392
- * @returns True if client is ready for operations
393
- */
394
- isReady(): boolean;
395
-
396
- /**
397
- * Close the client and release resources
398
- */
399
- close(): void;
400
- }
401
-
402
- // =============================================================================
403
- // Client Factory
404
- // =============================================================================
405
-
406
- /**
407
- * Default configuration values
408
- */
409
- export const DEFAULT_CLIENT_CONFIG: Required<
410
- Omit<SudocodeClientConfig, "mode">
411
- > = {
412
- serverUrl: "http://localhost:3001",
413
- wsUrl: "ws://localhost:3001/ws",
414
- projectPath: process.cwd(),
415
- autoDetect: {
416
- serverUrl: "http://localhost:3001",
417
- timeout: 2000,
418
- preferManaged: true,
419
- },
420
- };
421
-
422
- /**
423
- * Check if a sudocode server is available at the given URL
424
- * @param serverUrl Server URL to check
425
- * @param timeout Timeout in milliseconds
426
- * @returns True if server is available
427
- */
428
- export async function checkServerHealth(
429
- serverUrl: string,
430
- timeout: number = 2000
431
- ): Promise<boolean> {
432
- try {
433
- const controller = new AbortController();
434
- const timeoutId = setTimeout(() => controller.abort(), timeout);
435
-
436
- const response = await fetch(`${serverUrl}/health`, {
437
- signal: controller.signal,
438
- });
439
-
440
- clearTimeout(timeoutId);
441
- return response.ok;
442
- } catch {
443
- return false;
444
- }
445
- }
446
-
447
- /**
448
- * Create a SudocodeClient based on configuration
449
- *
450
- * @param config Client configuration
451
- * @returns Configured SudocodeClient
452
- *
453
- * @example
454
- * ```typescript
455
- * // Auto-detect mode
456
- * const client = await createSudocodeClient({ mode: 'auto' });
457
- *
458
- * // Explicit managed mode
459
- * const serverClient = await createSudocodeClient({
460
- * mode: 'managed',
461
- * serverUrl: 'http://localhost:3001',
462
- * });
463
- *
464
- * // Explicit standalone mode
465
- * const standaloneClient = await createSudocodeClient({
466
- * mode: 'standalone',
467
- * projectPath: '/path/to/project',
468
- * });
469
- * ```
470
- */
471
- export async function createSudocodeClient(
472
- config: SudocodeClientConfig
473
- ): Promise<SudocodeClient> {
474
- const {
475
- mode,
476
- serverUrl = DEFAULT_CLIENT_CONFIG.serverUrl,
477
- wsUrl,
478
- projectPath = DEFAULT_CLIENT_CONFIG.projectPath,
479
- autoDetect = DEFAULT_CLIENT_CONFIG.autoDetect,
480
- } = config;
481
-
482
- if (mode === "managed") {
483
- // Import and create ServerClient
484
- const { ServerClient } = await import("./server-client.js");
485
- return new ServerClient({
486
- serverUrl,
487
- wsUrl: wsUrl ?? serverUrl.replace(/^http/, "ws") + "/ws",
488
- });
489
- }
490
-
491
- if (mode === "standalone") {
492
- // Import and create StandaloneClient
493
- const { createStandaloneClient } = await import("./standalone-client.js");
494
- return createStandaloneClient({ projectPath });
495
- }
496
-
497
- // Auto mode: detect server availability
498
- const checkUrl = autoDetect.serverUrl ?? serverUrl;
499
- const timeout = autoDetect.timeout ?? 2000;
500
- const preferManaged = autoDetect.preferManaged ?? true;
501
-
502
- const serverAvailable = await checkServerHealth(checkUrl, timeout);
503
-
504
- if (serverAvailable && preferManaged) {
505
- const { ServerClient } = await import("./server-client.js");
506
- return new ServerClient({
507
- serverUrl: checkUrl,
508
- wsUrl: wsUrl ?? checkUrl.replace(/^http/, "ws") + "/ws",
509
- });
510
- }
511
-
512
- // Fall back to standalone
513
- const { createStandaloneClient } = await import("./standalone-client.js");
514
- return createStandaloneClient({ projectPath });
515
- }
@@ -1,120 +0,0 @@
1
- /**
2
- * Sudocode Task Backend Module
3
- *
4
- * Provides integration with sudocode for task management.
5
- *
6
- * @module task/backend/sudocode
7
- * @see s-8472 Pluggable Task Backend Integration with Sudocode
8
- */
9
-
10
- // =============================================================================
11
- // Client Types and Factory
12
- // =============================================================================
13
-
14
- export type {
15
- // Configuration types
16
- SudocodeClientMode,
17
- SudocodeClientConfig,
18
- AutoDetectOptions,
19
- ServerClientConfig,
20
- StandaloneClientConfig,
21
-
22
- // Filter and input types
23
- ListIssuesOptions,
24
- ListSpecsOptions,
25
- UpdateIssueInput,
26
- FeedbackInput,
27
-
28
- // Event types
29
- IssueChangeType,
30
- IssueChangeEvent,
31
- IssueChangeCallback,
32
- Unsubscribe,
33
-
34
- // Client interface
35
- SudocodeClient,
36
- } from "./client.js";
37
-
38
- export {
39
- DEFAULT_CLIENT_CONFIG,
40
- checkServerHealth,
41
- createSudocodeClient,
42
- } from "./client.js";
43
-
44
- // Re-export sudocode types for convenience
45
- export type {
46
- Issue,
47
- IssueStatus,
48
- Spec,
49
- Relationship,
50
- RelationshipType,
51
- EntityType,
52
- IssueFeedback,
53
- FeedbackType,
54
- FeedbackAnchor,
55
- } from "./client.js";
56
-
57
- // =============================================================================
58
- // Backend Implementation
59
- // =============================================================================
60
-
61
- export type { SudocodeTaskBackendConfig } from "./backend.js";
62
-
63
- export {
64
- SudocodeTaskBackend,
65
- SudocodeTaskBackendError,
66
- createSudocodeTaskBackend,
67
- } from "./backend.js";
68
-
69
- // =============================================================================
70
- // Mapping Utilities
71
- // =============================================================================
72
-
73
- export {
74
- mapSudocodeStatus,
75
- mapTaskStatus,
76
- mapIssuePriority,
77
- isIssueComplete,
78
- isIssueBlocked,
79
- } from "./mapping.js";
80
-
81
- // =============================================================================
82
- // Sync Policy
83
- // =============================================================================
84
-
85
- export type {
86
- SyncPolicy,
87
- IssueClosed,
88
- DescriptionChanged,
89
- BlockerChanged,
90
- UpdateIssueOnComplete,
91
- SyncEvent,
92
- SyncEventCallback,
93
- IssueClosedSyncEvent,
94
- IssueDeletedSyncEvent,
95
- BlockerAddedSyncEvent,
96
- BlockerRemovedSyncEvent,
97
- DescriptionChangedSyncEvent,
98
- } from "./sync-policy.js";
99
-
100
- export {
101
- SyncPolicyEngine,
102
- defaultSyncPolicy,
103
- createSyncPolicyEngine,
104
- } from "./sync-policy.js";
105
-
106
- // =============================================================================
107
- // Tool Provider
108
- // =============================================================================
109
-
110
- export type {
111
- TaskToolMode,
112
- SudocodeToolContext,
113
- GetSudocodeToolContext,
114
- SudocodeTaskToolProviderConfig,
115
- } from "./tools.js";
116
-
117
- export {
118
- SudocodeTaskToolProvider,
119
- createSudocodeTaskToolProvider,
120
- } from "./tools.js";