@stoneforge/smithy 0.1.0

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 (497) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +114 -0
  3. package/dist/api/index.d.ts +7 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +7 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/orchestrator-api.d.ts +153 -0
  8. package/dist/api/orchestrator-api.d.ts.map +1 -0
  9. package/dist/api/orchestrator-api.js +374 -0
  10. package/dist/api/orchestrator-api.js.map +1 -0
  11. package/dist/bin/sf.d.ts +3 -0
  12. package/dist/bin/sf.d.ts.map +1 -0
  13. package/dist/bin/sf.js +10 -0
  14. package/dist/bin/sf.js.map +1 -0
  15. package/dist/cli/commands/agent.d.ts +20 -0
  16. package/dist/cli/commands/agent.d.ts.map +1 -0
  17. package/dist/cli/commands/agent.js +861 -0
  18. package/dist/cli/commands/agent.js.map +1 -0
  19. package/dist/cli/commands/daemon.d.ts +14 -0
  20. package/dist/cli/commands/daemon.d.ts.map +1 -0
  21. package/dist/cli/commands/daemon.js +272 -0
  22. package/dist/cli/commands/daemon.js.map +1 -0
  23. package/dist/cli/commands/dispatch.d.ts +9 -0
  24. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  25. package/dist/cli/commands/dispatch.js +128 -0
  26. package/dist/cli/commands/dispatch.js.map +1 -0
  27. package/dist/cli/commands/merge.d.ts +11 -0
  28. package/dist/cli/commands/merge.d.ts.map +1 -0
  29. package/dist/cli/commands/merge.js +246 -0
  30. package/dist/cli/commands/merge.js.map +1 -0
  31. package/dist/cli/commands/pool.d.ts +21 -0
  32. package/dist/cli/commands/pool.d.ts.map +1 -0
  33. package/dist/cli/commands/pool.js +762 -0
  34. package/dist/cli/commands/pool.js.map +1 -0
  35. package/dist/cli/commands/serve.d.ts +54 -0
  36. package/dist/cli/commands/serve.d.ts.map +1 -0
  37. package/dist/cli/commands/serve.js +57 -0
  38. package/dist/cli/commands/serve.js.map +1 -0
  39. package/dist/cli/commands/task.d.ts +36 -0
  40. package/dist/cli/commands/task.d.ts.map +1 -0
  41. package/dist/cli/commands/task.js +889 -0
  42. package/dist/cli/commands/task.js.map +1 -0
  43. package/dist/cli/commands/test-orchestration.d.ts +32 -0
  44. package/dist/cli/commands/test-orchestration.d.ts.map +1 -0
  45. package/dist/cli/commands/test-orchestration.js +392 -0
  46. package/dist/cli/commands/test-orchestration.js.map +1 -0
  47. package/dist/cli/index.d.ts +13 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +15 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/plugin.d.ts +23 -0
  52. package/dist/cli/plugin.d.ts.map +1 -0
  53. package/dist/cli/plugin.js +36 -0
  54. package/dist/cli/plugin.js.map +1 -0
  55. package/dist/git/index.d.ts +10 -0
  56. package/dist/git/index.d.ts.map +1 -0
  57. package/dist/git/index.js +12 -0
  58. package/dist/git/index.js.map +1 -0
  59. package/dist/git/merge.d.ts +79 -0
  60. package/dist/git/merge.d.ts.map +1 -0
  61. package/dist/git/merge.js +254 -0
  62. package/dist/git/merge.js.map +1 -0
  63. package/dist/git/worktree-manager.d.ts +299 -0
  64. package/dist/git/worktree-manager.d.ts.map +1 -0
  65. package/dist/git/worktree-manager.js +744 -0
  66. package/dist/git/worktree-manager.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +31 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/prompts/director.md +272 -0
  72. package/dist/prompts/index.d.ts +100 -0
  73. package/dist/prompts/index.d.ts.map +1 -0
  74. package/dist/prompts/index.js +294 -0
  75. package/dist/prompts/index.js.map +1 -0
  76. package/dist/prompts/message-triage.md +50 -0
  77. package/dist/prompts/persistent-worker.md +240 -0
  78. package/dist/prompts/steward-base.md +64 -0
  79. package/dist/prompts/steward-docs.md +118 -0
  80. package/dist/prompts/steward-health.md +39 -0
  81. package/dist/prompts/steward-merge.md +168 -0
  82. package/dist/prompts/steward-ops.md +28 -0
  83. package/dist/prompts/steward-reminder.md +26 -0
  84. package/dist/prompts/worker.md +282 -0
  85. package/dist/providers/claude/headless.d.ts +18 -0
  86. package/dist/providers/claude/headless.d.ts.map +1 -0
  87. package/dist/providers/claude/headless.js +307 -0
  88. package/dist/providers/claude/headless.js.map +1 -0
  89. package/dist/providers/claude/index.d.ts +24 -0
  90. package/dist/providers/claude/index.d.ts.map +1 -0
  91. package/dist/providers/claude/index.js +80 -0
  92. package/dist/providers/claude/index.js.map +1 -0
  93. package/dist/providers/claude/interactive.d.ts +21 -0
  94. package/dist/providers/claude/interactive.d.ts.map +1 -0
  95. package/dist/providers/claude/interactive.js +142 -0
  96. package/dist/providers/claude/interactive.js.map +1 -0
  97. package/dist/providers/codex/event-mapper.d.ts +91 -0
  98. package/dist/providers/codex/event-mapper.d.ts.map +1 -0
  99. package/dist/providers/codex/event-mapper.js +299 -0
  100. package/dist/providers/codex/event-mapper.js.map +1 -0
  101. package/dist/providers/codex/headless.d.ts +20 -0
  102. package/dist/providers/codex/headless.d.ts.map +1 -0
  103. package/dist/providers/codex/headless.js +174 -0
  104. package/dist/providers/codex/headless.js.map +1 -0
  105. package/dist/providers/codex/index.d.ts +30 -0
  106. package/dist/providers/codex/index.d.ts.map +1 -0
  107. package/dist/providers/codex/index.js +55 -0
  108. package/dist/providers/codex/index.js.map +1 -0
  109. package/dist/providers/codex/interactive.d.ts +21 -0
  110. package/dist/providers/codex/interactive.d.ts.map +1 -0
  111. package/dist/providers/codex/interactive.js +141 -0
  112. package/dist/providers/codex/interactive.js.map +1 -0
  113. package/dist/providers/codex/jsonrpc-client.d.ts +52 -0
  114. package/dist/providers/codex/jsonrpc-client.d.ts.map +1 -0
  115. package/dist/providers/codex/jsonrpc-client.js +141 -0
  116. package/dist/providers/codex/jsonrpc-client.js.map +1 -0
  117. package/dist/providers/codex/server-manager.d.ts +100 -0
  118. package/dist/providers/codex/server-manager.d.ts.map +1 -0
  119. package/dist/providers/codex/server-manager.js +153 -0
  120. package/dist/providers/codex/server-manager.js.map +1 -0
  121. package/dist/providers/index.d.ts +15 -0
  122. package/dist/providers/index.d.ts.map +1 -0
  123. package/dist/providers/index.js +19 -0
  124. package/dist/providers/index.js.map +1 -0
  125. package/dist/providers/opencode/async-queue.d.ts +21 -0
  126. package/dist/providers/opencode/async-queue.d.ts.map +1 -0
  127. package/dist/providers/opencode/async-queue.js +51 -0
  128. package/dist/providers/opencode/async-queue.js.map +1 -0
  129. package/dist/providers/opencode/event-mapper.d.ts +132 -0
  130. package/dist/providers/opencode/event-mapper.d.ts.map +1 -0
  131. package/dist/providers/opencode/event-mapper.js +204 -0
  132. package/dist/providers/opencode/event-mapper.js.map +1 -0
  133. package/dist/providers/opencode/headless.d.ts +25 -0
  134. package/dist/providers/opencode/headless.d.ts.map +1 -0
  135. package/dist/providers/opencode/headless.js +190 -0
  136. package/dist/providers/opencode/headless.js.map +1 -0
  137. package/dist/providers/opencode/index.d.ts +33 -0
  138. package/dist/providers/opencode/index.d.ts.map +1 -0
  139. package/dist/providers/opencode/index.js +42 -0
  140. package/dist/providers/opencode/index.js.map +1 -0
  141. package/dist/providers/opencode/interactive.d.ts +21 -0
  142. package/dist/providers/opencode/interactive.d.ts.map +1 -0
  143. package/dist/providers/opencode/interactive.js +135 -0
  144. package/dist/providers/opencode/interactive.js.map +1 -0
  145. package/dist/providers/opencode/server-manager.d.ts +145 -0
  146. package/dist/providers/opencode/server-manager.d.ts.map +1 -0
  147. package/dist/providers/opencode/server-manager.js +163 -0
  148. package/dist/providers/opencode/server-manager.js.map +1 -0
  149. package/dist/providers/registry.d.ts +38 -0
  150. package/dist/providers/registry.d.ts.map +1 -0
  151. package/dist/providers/registry.js +82 -0
  152. package/dist/providers/registry.js.map +1 -0
  153. package/dist/providers/types.d.ts +144 -0
  154. package/dist/providers/types.d.ts.map +1 -0
  155. package/dist/providers/types.js +25 -0
  156. package/dist/providers/types.js.map +1 -0
  157. package/dist/runtime/event-utils.d.ts +8 -0
  158. package/dist/runtime/event-utils.d.ts.map +1 -0
  159. package/dist/runtime/event-utils.js +23 -0
  160. package/dist/runtime/event-utils.js.map +1 -0
  161. package/dist/runtime/handoff.d.ts +195 -0
  162. package/dist/runtime/handoff.d.ts.map +1 -0
  163. package/dist/runtime/handoff.js +332 -0
  164. package/dist/runtime/handoff.js.map +1 -0
  165. package/dist/runtime/index.d.ts +17 -0
  166. package/dist/runtime/index.d.ts.map +1 -0
  167. package/dist/runtime/index.js +60 -0
  168. package/dist/runtime/index.js.map +1 -0
  169. package/dist/runtime/message-mapper.d.ts +99 -0
  170. package/dist/runtime/message-mapper.d.ts.map +1 -0
  171. package/dist/runtime/message-mapper.js +202 -0
  172. package/dist/runtime/message-mapper.js.map +1 -0
  173. package/dist/runtime/predecessor-query.d.ts +212 -0
  174. package/dist/runtime/predecessor-query.d.ts.map +1 -0
  175. package/dist/runtime/predecessor-query.js +283 -0
  176. package/dist/runtime/predecessor-query.js.map +1 -0
  177. package/dist/runtime/session-manager.d.ts +466 -0
  178. package/dist/runtime/session-manager.d.ts.map +1 -0
  179. package/dist/runtime/session-manager.js +986 -0
  180. package/dist/runtime/session-manager.js.map +1 -0
  181. package/dist/runtime/spawner.d.ts +407 -0
  182. package/dist/runtime/spawner.d.ts.map +1 -0
  183. package/dist/runtime/spawner.js +781 -0
  184. package/dist/runtime/spawner.js.map +1 -0
  185. package/dist/server/config.d.ts +22 -0
  186. package/dist/server/config.d.ts.map +1 -0
  187. package/dist/server/config.js +59 -0
  188. package/dist/server/config.js.map +1 -0
  189. package/dist/server/daemon-state.d.ts +50 -0
  190. package/dist/server/daemon-state.d.ts.map +1 -0
  191. package/dist/server/daemon-state.js +100 -0
  192. package/dist/server/daemon-state.js.map +1 -0
  193. package/dist/server/events-websocket.d.ts +32 -0
  194. package/dist/server/events-websocket.d.ts.map +1 -0
  195. package/dist/server/events-websocket.js +96 -0
  196. package/dist/server/events-websocket.js.map +1 -0
  197. package/dist/server/formatters.d.ts +94 -0
  198. package/dist/server/formatters.d.ts.map +1 -0
  199. package/dist/server/formatters.js +142 -0
  200. package/dist/server/formatters.js.map +1 -0
  201. package/dist/server/index.d.ts +17 -0
  202. package/dist/server/index.d.ts.map +1 -0
  203. package/dist/server/index.js +153 -0
  204. package/dist/server/index.js.map +1 -0
  205. package/dist/server/lsp-websocket.d.ts +33 -0
  206. package/dist/server/lsp-websocket.d.ts.map +1 -0
  207. package/dist/server/lsp-websocket.js +161 -0
  208. package/dist/server/lsp-websocket.js.map +1 -0
  209. package/dist/server/routes/agents.d.ts +9 -0
  210. package/dist/server/routes/agents.d.ts.map +1 -0
  211. package/dist/server/routes/agents.js +369 -0
  212. package/dist/server/routes/agents.js.map +1 -0
  213. package/dist/server/routes/daemon.d.ts +13 -0
  214. package/dist/server/routes/daemon.d.ts.map +1 -0
  215. package/dist/server/routes/daemon.js +187 -0
  216. package/dist/server/routes/daemon.js.map +1 -0
  217. package/dist/server/routes/events.d.ts +23 -0
  218. package/dist/server/routes/events.d.ts.map +1 -0
  219. package/dist/server/routes/events.js +282 -0
  220. package/dist/server/routes/events.js.map +1 -0
  221. package/dist/server/routes/extensions.d.ts +9 -0
  222. package/dist/server/routes/extensions.d.ts.map +1 -0
  223. package/dist/server/routes/extensions.js +202 -0
  224. package/dist/server/routes/extensions.js.map +1 -0
  225. package/dist/server/routes/health.d.ts +7 -0
  226. package/dist/server/routes/health.d.ts.map +1 -0
  227. package/dist/server/routes/health.js +33 -0
  228. package/dist/server/routes/health.js.map +1 -0
  229. package/dist/server/routes/index.d.ts +21 -0
  230. package/dist/server/routes/index.d.ts.map +1 -0
  231. package/dist/server/routes/index.js +21 -0
  232. package/dist/server/routes/index.js.map +1 -0
  233. package/dist/server/routes/lsp.d.ts +9 -0
  234. package/dist/server/routes/lsp.d.ts.map +1 -0
  235. package/dist/server/routes/lsp.js +50 -0
  236. package/dist/server/routes/lsp.js.map +1 -0
  237. package/dist/server/routes/plugins.d.ts +9 -0
  238. package/dist/server/routes/plugins.d.ts.map +1 -0
  239. package/dist/server/routes/plugins.js +109 -0
  240. package/dist/server/routes/plugins.js.map +1 -0
  241. package/dist/server/routes/pools.d.ts +9 -0
  242. package/dist/server/routes/pools.d.ts.map +1 -0
  243. package/dist/server/routes/pools.js +189 -0
  244. package/dist/server/routes/pools.js.map +1 -0
  245. package/dist/server/routes/scheduler.d.ts +9 -0
  246. package/dist/server/routes/scheduler.d.ts.map +1 -0
  247. package/dist/server/routes/scheduler.js +162 -0
  248. package/dist/server/routes/scheduler.js.map +1 -0
  249. package/dist/server/routes/sessions.d.ts +27 -0
  250. package/dist/server/routes/sessions.d.ts.map +1 -0
  251. package/dist/server/routes/sessions.js +773 -0
  252. package/dist/server/routes/sessions.js.map +1 -0
  253. package/dist/server/routes/tasks.d.ts +9 -0
  254. package/dist/server/routes/tasks.d.ts.map +1 -0
  255. package/dist/server/routes/tasks.js +954 -0
  256. package/dist/server/routes/tasks.js.map +1 -0
  257. package/dist/server/routes/upload.d.ts +8 -0
  258. package/dist/server/routes/upload.d.ts.map +1 -0
  259. package/dist/server/routes/upload.js +40 -0
  260. package/dist/server/routes/upload.js.map +1 -0
  261. package/dist/server/routes/workflows.d.ts +9 -0
  262. package/dist/server/routes/workflows.d.ts.map +1 -0
  263. package/dist/server/routes/workflows.js +532 -0
  264. package/dist/server/routes/workflows.js.map +1 -0
  265. package/dist/server/routes/workspace-files.d.ts +12 -0
  266. package/dist/server/routes/workspace-files.d.ts.map +1 -0
  267. package/dist/server/routes/workspace-files.js +520 -0
  268. package/dist/server/routes/workspace-files.js.map +1 -0
  269. package/dist/server/routes/worktrees.d.ts +9 -0
  270. package/dist/server/routes/worktrees.d.ts.map +1 -0
  271. package/dist/server/routes/worktrees.js +94 -0
  272. package/dist/server/routes/worktrees.js.map +1 -0
  273. package/dist/server/server.d.ts +14 -0
  274. package/dist/server/server.d.ts.map +1 -0
  275. package/dist/server/server.js +258 -0
  276. package/dist/server/server.js.map +1 -0
  277. package/dist/server/services/lsp-manager.d.ts +93 -0
  278. package/dist/server/services/lsp-manager.d.ts.map +1 -0
  279. package/dist/server/services/lsp-manager.js +291 -0
  280. package/dist/server/services/lsp-manager.js.map +1 -0
  281. package/dist/server/services/session-messages.d.ts +61 -0
  282. package/dist/server/services/session-messages.d.ts.map +1 -0
  283. package/dist/server/services/session-messages.js +101 -0
  284. package/dist/server/services/session-messages.js.map +1 -0
  285. package/dist/server/services.d.ts +35 -0
  286. package/dist/server/services.d.ts.map +1 -0
  287. package/dist/server/services.js +159 -0
  288. package/dist/server/services.js.map +1 -0
  289. package/dist/server/static.d.ts +18 -0
  290. package/dist/server/static.d.ts.map +1 -0
  291. package/dist/server/static.js +71 -0
  292. package/dist/server/static.js.map +1 -0
  293. package/dist/server/types.d.ts +20 -0
  294. package/dist/server/types.d.ts.map +1 -0
  295. package/dist/server/types.js +7 -0
  296. package/dist/server/types.js.map +1 -0
  297. package/dist/server/websocket.d.ts +16 -0
  298. package/dist/server/websocket.d.ts.map +1 -0
  299. package/dist/server/websocket.js +143 -0
  300. package/dist/server/websocket.js.map +1 -0
  301. package/dist/services/agent-pool-service.d.ts +181 -0
  302. package/dist/services/agent-pool-service.d.ts.map +1 -0
  303. package/dist/services/agent-pool-service.js +590 -0
  304. package/dist/services/agent-pool-service.js.map +1 -0
  305. package/dist/services/agent-registry.d.ts +185 -0
  306. package/dist/services/agent-registry.d.ts.map +1 -0
  307. package/dist/services/agent-registry.js +432 -0
  308. package/dist/services/agent-registry.js.map +1 -0
  309. package/dist/services/dispatch-daemon.d.ts +429 -0
  310. package/dist/services/dispatch-daemon.d.ts.map +1 -0
  311. package/dist/services/dispatch-daemon.js +1833 -0
  312. package/dist/services/dispatch-daemon.js.map +1 -0
  313. package/dist/services/dispatch-service.d.ts +148 -0
  314. package/dist/services/dispatch-service.d.ts.map +1 -0
  315. package/dist/services/dispatch-service.js +170 -0
  316. package/dist/services/dispatch-service.js.map +1 -0
  317. package/dist/services/docs-steward-service.d.ts +199 -0
  318. package/dist/services/docs-steward-service.d.ts.map +1 -0
  319. package/dist/services/docs-steward-service.js +599 -0
  320. package/dist/services/docs-steward-service.js.map +1 -0
  321. package/dist/services/health-steward-service.d.ts +446 -0
  322. package/dist/services/health-steward-service.d.ts.map +1 -0
  323. package/dist/services/health-steward-service.js +866 -0
  324. package/dist/services/health-steward-service.js.map +1 -0
  325. package/dist/services/index.d.ts +26 -0
  326. package/dist/services/index.d.ts.map +1 -0
  327. package/dist/services/index.js +111 -0
  328. package/dist/services/index.js.map +1 -0
  329. package/dist/services/merge-request-provider.d.ts +59 -0
  330. package/dist/services/merge-request-provider.d.ts.map +1 -0
  331. package/dist/services/merge-request-provider.js +89 -0
  332. package/dist/services/merge-request-provider.js.map +1 -0
  333. package/dist/services/merge-steward-service.d.ts +268 -0
  334. package/dist/services/merge-steward-service.d.ts.map +1 -0
  335. package/dist/services/merge-steward-service.js +568 -0
  336. package/dist/services/merge-steward-service.js.map +1 -0
  337. package/dist/services/plugin-executor.d.ts +247 -0
  338. package/dist/services/plugin-executor.d.ts.map +1 -0
  339. package/dist/services/plugin-executor.js +451 -0
  340. package/dist/services/plugin-executor.js.map +1 -0
  341. package/dist/services/role-definition-service.d.ts +117 -0
  342. package/dist/services/role-definition-service.d.ts.map +1 -0
  343. package/dist/services/role-definition-service.js +289 -0
  344. package/dist/services/role-definition-service.js.map +1 -0
  345. package/dist/services/steward-scheduler.d.ts +336 -0
  346. package/dist/services/steward-scheduler.d.ts.map +1 -0
  347. package/dist/services/steward-scheduler.js +732 -0
  348. package/dist/services/steward-scheduler.js.map +1 -0
  349. package/dist/services/task-assignment-service.d.ts +291 -0
  350. package/dist/services/task-assignment-service.d.ts.map +1 -0
  351. package/dist/services/task-assignment-service.js +454 -0
  352. package/dist/services/task-assignment-service.js.map +1 -0
  353. package/dist/services/worker-task-service.d.ts +202 -0
  354. package/dist/services/worker-task-service.d.ts.map +1 -0
  355. package/dist/services/worker-task-service.js +228 -0
  356. package/dist/services/worker-task-service.js.map +1 -0
  357. package/dist/testing/index.d.ts +13 -0
  358. package/dist/testing/index.d.ts.map +1 -0
  359. package/dist/testing/index.js +17 -0
  360. package/dist/testing/index.js.map +1 -0
  361. package/dist/testing/orchestration-tests.d.ts +62 -0
  362. package/dist/testing/orchestration-tests.d.ts.map +1 -0
  363. package/dist/testing/orchestration-tests.js +1115 -0
  364. package/dist/testing/orchestration-tests.js.map +1 -0
  365. package/dist/testing/test-context.d.ts +171 -0
  366. package/dist/testing/test-context.d.ts.map +1 -0
  367. package/dist/testing/test-context.js +665 -0
  368. package/dist/testing/test-context.js.map +1 -0
  369. package/dist/testing/test-prompts.d.ts +46 -0
  370. package/dist/testing/test-prompts.d.ts.map +1 -0
  371. package/dist/testing/test-prompts.js +140 -0
  372. package/dist/testing/test-prompts.js.map +1 -0
  373. package/dist/testing/test-utils.d.ts +200 -0
  374. package/dist/testing/test-utils.d.ts.map +1 -0
  375. package/dist/testing/test-utils.js +378 -0
  376. package/dist/testing/test-utils.js.map +1 -0
  377. package/dist/types/agent-pool.d.ts +215 -0
  378. package/dist/types/agent-pool.d.ts.map +1 -0
  379. package/dist/types/agent-pool.js +143 -0
  380. package/dist/types/agent-pool.js.map +1 -0
  381. package/dist/types/agent.d.ts +265 -0
  382. package/dist/types/agent.d.ts.map +1 -0
  383. package/dist/types/agent.js +127 -0
  384. package/dist/types/agent.js.map +1 -0
  385. package/dist/types/index.d.ts +11 -0
  386. package/dist/types/index.d.ts.map +1 -0
  387. package/dist/types/index.js +40 -0
  388. package/dist/types/index.js.map +1 -0
  389. package/dist/types/message-types.d.ts +294 -0
  390. package/dist/types/message-types.d.ts.map +1 -0
  391. package/dist/types/message-types.js +354 -0
  392. package/dist/types/message-types.js.map +1 -0
  393. package/dist/types/role-definition.d.ts +272 -0
  394. package/dist/types/role-definition.d.ts.map +1 -0
  395. package/dist/types/role-definition.js +144 -0
  396. package/dist/types/role-definition.js.map +1 -0
  397. package/dist/types/task-meta.d.ts +248 -0
  398. package/dist/types/task-meta.d.ts.map +1 -0
  399. package/dist/types/task-meta.js +213 -0
  400. package/dist/types/task-meta.js.map +1 -0
  401. package/package.json +120 -0
  402. package/web/assets/abap-BrgZPUOV.js +6 -0
  403. package/web/assets/apex-DyP6w7ZV.js +6 -0
  404. package/web/assets/azcli-BaLxmfj-.js +6 -0
  405. package/web/assets/bat-CFOPXBzS.js +6 -0
  406. package/web/assets/bicep-BfEKNvv3.js +7 -0
  407. package/web/assets/cameligo-BFG1Mk7z.js +6 -0
  408. package/web/assets/clojure-DTECt2xU.js +6 -0
  409. package/web/assets/codicon-DCmgc-ay.ttf +0 -0
  410. package/web/assets/coffee-CDGzqUPQ.js +6 -0
  411. package/web/assets/cpp-CLLBncYj.js +6 -0
  412. package/web/assets/csharp-dUCx_-0o.js +6 -0
  413. package/web/assets/csp-5Rap-vPy.js +6 -0
  414. package/web/assets/css-D3h14YRZ.js +8 -0
  415. package/web/assets/cssMode-DMo-5YLA.js +9 -0
  416. package/web/assets/cypher-DrQuvNYM.js +6 -0
  417. package/web/assets/dart-CFKIUWau.js +6 -0
  418. package/web/assets/dockerfile-Zznr-cwX.js +6 -0
  419. package/web/assets/ecl-Ce3n6wWz.js +6 -0
  420. package/web/assets/elixir-deUWdS0T.js +6 -0
  421. package/web/assets/flow9-i9-g7ZhI.js +6 -0
  422. package/web/assets/freemarker2-D4qgkQzN.js +8 -0
  423. package/web/assets/fsharp-CzKuDChf.js +6 -0
  424. package/web/assets/go-Cphgjts3.js +6 -0
  425. package/web/assets/graphql-Cg7bfA9N.js +6 -0
  426. package/web/assets/handlebars-CXFvNjQC.js +6 -0
  427. package/web/assets/hcl-0cvrggvQ.js +6 -0
  428. package/web/assets/html-oyuB_D-B.js +6 -0
  429. package/web/assets/htmlMode-iWuZ24-r.js +9 -0
  430. package/web/assets/index-DqP-_E4F.css +32 -0
  431. package/web/assets/index-R1cylSgw.js +1665 -0
  432. package/web/assets/ini-Drc7WvVn.js +6 -0
  433. package/web/assets/java-B_fMsGYe.js +6 -0
  434. package/web/assets/javascript-CRIkN2Pg.js +6 -0
  435. package/web/assets/jsonMode-DVDkDgex.js +15 -0
  436. package/web/assets/julia-Bqgm2twL.js +6 -0
  437. package/web/assets/kotlin-BSkB5QuD.js +6 -0
  438. package/web/assets/less-BsTHnhdd.js +7 -0
  439. package/web/assets/lexon-YWi4-JPR.js +6 -0
  440. package/web/assets/liquid-CSfldbB5.js +6 -0
  441. package/web/assets/lua-nf6ki56Z.js +6 -0
  442. package/web/assets/m3-Cpb6xl2v.js +6 -0
  443. package/web/assets/markdown-DSZPf7rp.js +6 -0
  444. package/web/assets/mdx-Dd58iymR.js +6 -0
  445. package/web/assets/mips-B_c3zf-v.js +6 -0
  446. package/web/assets/monaco-editor-B4lwqA13.js +751 -0
  447. package/web/assets/monaco-editor-CQpyCxOA.css +1 -0
  448. package/web/assets/msdax-rUNN04Wq.js +6 -0
  449. package/web/assets/mysql-DDwshQtU.js +6 -0
  450. package/web/assets/objective-c-B5zXfXm9.js +6 -0
  451. package/web/assets/pascal-CXOwvkN_.js +6 -0
  452. package/web/assets/pascaligo-Bc-ZgV77.js +6 -0
  453. package/web/assets/perl-CwNk8-XU.js +6 -0
  454. package/web/assets/pgsql-tGk8EFnU.js +6 -0
  455. package/web/assets/php-CpIb_Oan.js +6 -0
  456. package/web/assets/pla-B03wrqEc.js +6 -0
  457. package/web/assets/postiats-BKlk5iyT.js +6 -0
  458. package/web/assets/powerquery-Bhzvs7bI.js +6 -0
  459. package/web/assets/powershell-Dd3NCNK9.js +6 -0
  460. package/web/assets/protobuf-COyEY5Pt.js +7 -0
  461. package/web/assets/pug-BaJupSGV.js +6 -0
  462. package/web/assets/python-XWrMqdhO.js +6 -0
  463. package/web/assets/qsharp-DXyYeYxl.js +6 -0
  464. package/web/assets/r-CdQndTaG.js +6 -0
  465. package/web/assets/razor-DPlhCpIs.js +6 -0
  466. package/web/assets/redis-CVwtpugi.js +6 -0
  467. package/web/assets/redshift-25W9uPmb.js +6 -0
  468. package/web/assets/restructuredtext-DfzH4Xui.js +6 -0
  469. package/web/assets/router-vendor-DHlGizSU.js +41 -0
  470. package/web/assets/ruby-Cp1zYvxS.js +6 -0
  471. package/web/assets/rust-D5C2fndG.js +6 -0
  472. package/web/assets/sb-CDntyWJ8.js +6 -0
  473. package/web/assets/scala-BoFRg7Ot.js +6 -0
  474. package/web/assets/scheme-Bio4gycK.js +6 -0
  475. package/web/assets/scss-4Ik7cdeQ.js +8 -0
  476. package/web/assets/shell-CX-rkNHf.js +6 -0
  477. package/web/assets/solidity-Tw7wswEv.js +6 -0
  478. package/web/assets/sophia-C5WLch3f.js +6 -0
  479. package/web/assets/sparql-DHaeiCBh.js +6 -0
  480. package/web/assets/sql-CCSDG5nI.js +6 -0
  481. package/web/assets/st-pnP8ivHi.js +6 -0
  482. package/web/assets/swift-DwJ7jVG9.js +8 -0
  483. package/web/assets/systemverilog-B9Xyijhd.js +6 -0
  484. package/web/assets/tcl-DnHyzjbg.js +6 -0
  485. package/web/assets/tsMode-BbA1Jbf3.js +16 -0
  486. package/web/assets/twig-CPajHgWi.js +6 -0
  487. package/web/assets/typescript-DcLHYzvH.js +6 -0
  488. package/web/assets/typespec-D-MeaMDU.js +6 -0
  489. package/web/assets/ui-vendor-BSco96uv.js +51 -0
  490. package/web/assets/utils-vendor-DaJ2Dubl.js +911 -0
  491. package/web/assets/vb-DgyLZaXg.js +6 -0
  492. package/web/assets/wgsl-DYQUnd45.js +303 -0
  493. package/web/assets/xml-xKYS3dO6.js +6 -0
  494. package/web/assets/yaml-CNmlXqzH.js +6 -0
  495. package/web/favicon.ico +0 -0
  496. package/web/index.html +22 -0
  497. package/web/logo.png +0 -0
@@ -0,0 +1,568 @@
1
+ /**
2
+ * Merge Steward Service
3
+ *
4
+ * This service implements the auto-merge functionality for the orchestration system.
5
+ * The Merge Steward detects completed tasks and merges their branches.
6
+ *
7
+ * Key features:
8
+ * - Detect tasks with mergeStatus 'pending'
9
+ * - Run tests on the task's branch
10
+ * - Auto-merge if tests pass
11
+ * - Create fix tasks if tests fail
12
+ * - Handle merge conflicts
13
+ * - Clean up worktrees after successful merge
14
+ *
15
+ * TB-O21: Merge Steward Auto-Merge
16
+ *
17
+ * @module
18
+ */
19
+ import { exec } from 'node:child_process';
20
+ import { promisify } from 'node:util';
21
+ import { createTimestamp, TaskStatus, createTask } from '@stoneforge/core';
22
+ import { updateOrchestratorTaskMeta, getOrchestratorTaskMeta, } from '../types/index.js';
23
+ import { mergeBranch, syncLocalBranch } from '../git/merge.js';
24
+ const execAsync = promisify(exec);
25
+ // ============================================================================
26
+ // Merge Steward Service Implementation
27
+ // ============================================================================
28
+ /**
29
+ * Default configuration values
30
+ */
31
+ const DEFAULT_CONFIG = {
32
+ testCommand: 'npm test',
33
+ testTimeoutMs: 5 * 60 * 1000, // 5 minutes
34
+ autoMerge: true,
35
+ autoCleanup: true,
36
+ deleteBranchAfterMerge: true,
37
+ mergeStrategy: 'squash',
38
+ autoPushAfterMerge: true,
39
+ };
40
+ /**
41
+ * Implementation of the Merge Steward Service.
42
+ */
43
+ export class MergeStewardServiceImpl {
44
+ api;
45
+ config;
46
+ taskAssignment;
47
+ dispatchService;
48
+ worktreeManager;
49
+ agentRegistry;
50
+ targetBranch;
51
+ constructor(api, taskAssignment, dispatchService, agentRegistry, config, worktreeManager) {
52
+ this.api = api;
53
+ this.taskAssignment = taskAssignment;
54
+ this.dispatchService = dispatchService;
55
+ this.agentRegistry = agentRegistry;
56
+ this.worktreeManager = worktreeManager;
57
+ this.config = {
58
+ ...DEFAULT_CONFIG,
59
+ ...config,
60
+ };
61
+ }
62
+ // ----------------------------------------
63
+ // Task Discovery
64
+ // ----------------------------------------
65
+ async getTasksAwaitingMerge() {
66
+ // Query for tasks in REVIEW status with pending/testing merge status
67
+ // TaskAssignmentService.getTasksAwaitingMerge() now handles this correctly
68
+ return this.taskAssignment.getTasksAwaitingMerge();
69
+ }
70
+ // ----------------------------------------
71
+ // Merge Processing
72
+ // ----------------------------------------
73
+ async processTask(taskId, options = {}) {
74
+ const processedAt = createTimestamp();
75
+ try {
76
+ // 1. Get and validate task
77
+ const task = await this.api.get(taskId);
78
+ if (!task) {
79
+ return {
80
+ taskId,
81
+ status: 'failed',
82
+ merged: false,
83
+ error: `Task not found: ${taskId}`,
84
+ processedAt,
85
+ };
86
+ }
87
+ const orchestratorMeta = getOrchestratorTaskMeta(task.metadata);
88
+ if (!orchestratorMeta?.branch) {
89
+ return {
90
+ taskId,
91
+ status: 'failed',
92
+ merged: false,
93
+ error: 'Task has no branch associated',
94
+ processedAt,
95
+ };
96
+ }
97
+ // Early exit: Skip if task is already closed and merged
98
+ // This prevents re-processing of already-merged tasks
99
+ if (task.status === TaskStatus.CLOSED && orchestratorMeta.mergeStatus === 'merged') {
100
+ console.log(`[merge-steward] Task ${taskId} is already closed and merged, skipping`);
101
+ return {
102
+ taskId,
103
+ status: 'merged',
104
+ merged: true,
105
+ processedAt,
106
+ };
107
+ }
108
+ // 2. Run tests (unless skipped)
109
+ let testResult;
110
+ if (!options.skipTests) {
111
+ await this.updateMergeStatus(taskId, 'testing');
112
+ const testRunResult = await this.runTests(taskId);
113
+ testResult = testRunResult.testResult;
114
+ if (!testRunResult.passed) {
115
+ // Tests failed - create fix task
116
+ await this.updateMergeStatus(taskId, 'test_failed', { testResult });
117
+ const fixTaskId = await this.createFixTask(taskId, {
118
+ type: 'test_failure',
119
+ errorDetails: testRunResult.output.substring(0, 2000), // Limit size
120
+ });
121
+ return {
122
+ taskId,
123
+ status: 'test_failed',
124
+ merged: false,
125
+ testResult,
126
+ fixTaskId,
127
+ processedAt,
128
+ };
129
+ }
130
+ }
131
+ // 3. Attempt merge (unless auto-merge disabled)
132
+ if (!this.config.autoMerge && !options.forceMerge) {
133
+ // Just update status to indicate tests passed
134
+ await this.updateMergeStatus(taskId, 'pending', { testResult });
135
+ return {
136
+ taskId,
137
+ status: 'pending',
138
+ merged: false,
139
+ testResult,
140
+ processedAt,
141
+ };
142
+ }
143
+ await this.updateMergeStatus(taskId, 'merging');
144
+ const mergeResult = await this.attemptMerge(taskId, options.mergeCommitMessage);
145
+ if (!mergeResult.success) {
146
+ if (mergeResult.hasConflict) {
147
+ // Merge conflict - create fix task
148
+ await this.updateMergeStatus(taskId, 'conflict', {
149
+ failureReason: `Merge conflict in: ${mergeResult.conflictFiles?.join(', ') ?? 'unknown files'}`,
150
+ });
151
+ const fixTaskId = await this.createFixTask(taskId, {
152
+ type: 'merge_conflict',
153
+ errorDetails: mergeResult.error ?? 'Merge conflict detected',
154
+ affectedFiles: mergeResult.conflictFiles,
155
+ });
156
+ return {
157
+ taskId,
158
+ status: 'conflict',
159
+ merged: false,
160
+ testResult,
161
+ fixTaskId,
162
+ error: mergeResult.error,
163
+ processedAt,
164
+ };
165
+ }
166
+ else {
167
+ // Other merge failure
168
+ await this.updateMergeStatus(taskId, 'failed', {
169
+ failureReason: mergeResult.error,
170
+ });
171
+ return {
172
+ taskId,
173
+ status: 'failed',
174
+ merged: false,
175
+ testResult,
176
+ error: mergeResult.error,
177
+ processedAt,
178
+ };
179
+ }
180
+ }
181
+ // 4. Merge succeeded - update status and cleanup
182
+ await this.updateMergeStatus(taskId, 'merged', { testResult });
183
+ // 5. Cleanup worktree if auto-cleanup enabled
184
+ if (this.config.autoCleanup) {
185
+ await this.cleanupAfterMerge(taskId, this.config.deleteBranchAfterMerge);
186
+ }
187
+ // 6. Sync local target branch (best-effort, after all bookkeeping)
188
+ const targetBranch = await this.getTargetBranch();
189
+ try {
190
+ await execAsync('git fetch origin', { cwd: this.config.workspaceRoot, encoding: 'utf8' });
191
+ }
192
+ catch { /* best-effort */ }
193
+ await syncLocalBranch(this.config.workspaceRoot, targetBranch);
194
+ return {
195
+ taskId,
196
+ status: 'merged',
197
+ merged: true,
198
+ testResult,
199
+ mergeCommitHash: mergeResult.commitHash,
200
+ processedAt,
201
+ };
202
+ }
203
+ catch (error) {
204
+ const errorMessage = error instanceof Error ? error.message : String(error);
205
+ await this.updateMergeStatus(taskId, 'failed', {
206
+ failureReason: errorMessage,
207
+ });
208
+ return {
209
+ taskId,
210
+ status: 'failed',
211
+ merged: false,
212
+ error: errorMessage,
213
+ processedAt,
214
+ };
215
+ }
216
+ }
217
+ async processAllPending(options = {}) {
218
+ const startTime = Date.now();
219
+ const tasks = await this.getTasksAwaitingMerge();
220
+ const results = [];
221
+ let mergedCount = 0;
222
+ let testFailedCount = 0;
223
+ let conflictCount = 0;
224
+ let errorCount = 0;
225
+ for (const { taskId } of tasks) {
226
+ const result = await this.processTask(taskId, options);
227
+ results.push(result);
228
+ switch (result.status) {
229
+ case 'merged':
230
+ mergedCount++;
231
+ break;
232
+ case 'test_failed':
233
+ testFailedCount++;
234
+ break;
235
+ case 'conflict':
236
+ conflictCount++;
237
+ break;
238
+ case 'failed':
239
+ errorCount++;
240
+ break;
241
+ }
242
+ }
243
+ return {
244
+ totalProcessed: tasks.length,
245
+ mergedCount,
246
+ testFailedCount,
247
+ conflictCount,
248
+ errorCount,
249
+ results,
250
+ durationMs: Date.now() - startTime,
251
+ };
252
+ }
253
+ // ----------------------------------------
254
+ // Individual Operations
255
+ // ----------------------------------------
256
+ async runTests(taskId) {
257
+ const startTime = Date.now();
258
+ // Get task and worktree info
259
+ const task = await this.api.get(taskId);
260
+ if (!task) {
261
+ return {
262
+ passed: false,
263
+ output: `Task not found: ${taskId}`,
264
+ exitCode: 1,
265
+ durationMs: 0,
266
+ testResult: {
267
+ passed: false,
268
+ completedAt: createTimestamp(),
269
+ errorMessage: `Task not found: ${taskId}`,
270
+ },
271
+ };
272
+ }
273
+ const orchestratorMeta = getOrchestratorTaskMeta(task.metadata);
274
+ // Determine working directory
275
+ let cwd = this.config.workspaceRoot;
276
+ if (orchestratorMeta?.worktree && this.worktreeManager) {
277
+ const worktree = await this.worktreeManager.getWorktree(orchestratorMeta.worktree);
278
+ if (worktree) {
279
+ cwd = worktree.path;
280
+ }
281
+ else {
282
+ console.warn(`[merge-steward] Worktree not found for task ${taskId}, falling back to main repo`);
283
+ }
284
+ }
285
+ else {
286
+ console.warn(`[merge-steward] No worktree configured for task ${taskId}, running tests in main repo`);
287
+ }
288
+ try {
289
+ const { stdout, stderr } = await execAsync(this.config.testCommand, {
290
+ cwd,
291
+ timeout: this.config.testTimeoutMs,
292
+ encoding: 'utf8',
293
+ });
294
+ const durationMs = Date.now() - startTime;
295
+ const output = stdout + (stderr ? `\n${stderr}` : '');
296
+ return {
297
+ passed: true,
298
+ output,
299
+ exitCode: 0,
300
+ durationMs,
301
+ testResult: {
302
+ passed: true,
303
+ completedAt: createTimestamp(),
304
+ durationMs,
305
+ },
306
+ };
307
+ }
308
+ catch (error) {
309
+ const durationMs = Date.now() - startTime;
310
+ const execError = error;
311
+ const output = (execError.stdout ?? '') + (execError.stderr ?? '') + (execError.message ?? '');
312
+ const exitCode = execError.code ?? 1;
313
+ return {
314
+ passed: false,
315
+ output,
316
+ exitCode,
317
+ durationMs,
318
+ testResult: {
319
+ passed: false,
320
+ completedAt: createTimestamp(),
321
+ durationMs,
322
+ errorMessage: output.substring(0, 500), // Truncate for storage
323
+ },
324
+ };
325
+ }
326
+ }
327
+ async attemptMerge(taskId, commitMessage) {
328
+ // Get task info
329
+ const task = await this.api.get(taskId);
330
+ if (!task) {
331
+ return {
332
+ success: false,
333
+ hasConflict: false,
334
+ error: `Task not found: ${taskId}`,
335
+ };
336
+ }
337
+ const orchestratorMeta = getOrchestratorTaskMeta(task.metadata);
338
+ if (!orchestratorMeta?.branch) {
339
+ return {
340
+ success: false,
341
+ hasConflict: false,
342
+ error: 'Task has no branch associated',
343
+ };
344
+ }
345
+ const targetBranch = await this.getTargetBranch();
346
+ const sourceBranch = orchestratorMeta.branch;
347
+ const defaultMessage = this.config.mergeStrategy === 'squash'
348
+ ? `${task.title} (${taskId})`
349
+ : `Merge branch '${sourceBranch}' (Task: ${taskId})`;
350
+ return mergeBranch({
351
+ workspaceRoot: this.config.workspaceRoot,
352
+ sourceBranch,
353
+ targetBranch,
354
+ mergeStrategy: this.config.mergeStrategy,
355
+ autoPush: this.config.autoPushAfterMerge,
356
+ commitMessage: commitMessage ?? defaultMessage,
357
+ preflight: true,
358
+ syncLocal: false,
359
+ });
360
+ }
361
+ async createFixTask(originalTaskId, options) {
362
+ // Get original task info
363
+ const originalTask = await this.api.get(originalTaskId);
364
+ if (!originalTask) {
365
+ throw new Error(`Original task not found: ${originalTaskId}`);
366
+ }
367
+ const orchestratorMeta = getOrchestratorTaskMeta(originalTask.metadata);
368
+ // Check if a fix task already exists for this original task and fix type
369
+ // This prevents creating duplicate fix tasks when tests fail repeatedly
370
+ const existingFixTasks = await this.findExistingFixTasks(originalTaskId, options.type);
371
+ if (existingFixTasks.length > 0) {
372
+ // Return the existing fix task ID instead of creating a duplicate
373
+ console.log(`[merge-steward] Fix task already exists for ${originalTaskId} (type: ${options.type}): ${existingFixTasks[0].id}`);
374
+ return existingFixTasks[0].id;
375
+ }
376
+ // Determine title based on fix type
377
+ let title;
378
+ switch (options.type) {
379
+ case 'test_failure':
380
+ title = `Fix failing tests: ${originalTask.title}`;
381
+ break;
382
+ case 'merge_conflict':
383
+ title = `Resolve merge conflict: ${originalTask.title}`;
384
+ break;
385
+ default:
386
+ title = `Fix: ${originalTask.title}`;
387
+ }
388
+ // Build description
389
+ const lines = [
390
+ `This task was created by the Merge Steward to fix issues with task ${originalTaskId}.`,
391
+ '',
392
+ `## Issue Type`,
393
+ options.type === 'test_failure' ? 'Test failures' :
394
+ options.type === 'merge_conflict' ? 'Merge conflict' : 'General issue',
395
+ '',
396
+ `## Details`,
397
+ options.errorDetails,
398
+ ];
399
+ if (options.affectedFiles && options.affectedFiles.length > 0) {
400
+ lines.push('', '## Affected Files', ...options.affectedFiles.map((f) => `- ${f}`));
401
+ }
402
+ lines.push('', '## Instructions', '1. Fix the issue(s) described above', '2. Run tests to verify: `npm test`', `3. Close the task: \`sf task close <task-id>\``, '', 'The Merge Steward will automatically attempt to merge again.');
403
+ // Create the fix task
404
+ const createdBy = this.config.stewardEntityId ?? originalTask.createdBy;
405
+ const fixTaskData = await createTask({
406
+ title,
407
+ status: TaskStatus.OPEN,
408
+ tags: ['fix', options.type, 'auto-created'],
409
+ priority: originalTask.priority,
410
+ complexity: originalTask.complexity,
411
+ assignee: orchestratorMeta?.assignedAgent,
412
+ createdBy,
413
+ metadata: {
414
+ description: lines.join('\n'),
415
+ orchestrator: {
416
+ branch: orchestratorMeta?.branch,
417
+ worktree: orchestratorMeta?.worktree,
418
+ assignedAgent: orchestratorMeta?.assignedAgent,
419
+ mergeStatus: 'pending',
420
+ },
421
+ originalTaskId,
422
+ fixType: options.type,
423
+ },
424
+ });
425
+ // Save the task to the database
426
+ const fixTask = await this.api.create(fixTaskData);
427
+ // If there's an assigned agent, notify them
428
+ if (orchestratorMeta?.assignedAgent) {
429
+ const agentChannel = await this.agentRegistry.getAgentChannel(orchestratorMeta.assignedAgent);
430
+ if (agentChannel) {
431
+ // Create a notification document
432
+ const notificationContent = [
433
+ `# Fix Task Created: ${fixTask.id}`,
434
+ '',
435
+ `A fix task has been created for: ${originalTask.title}`,
436
+ '',
437
+ `**Issue:** ${options.type === 'test_failure' ? 'Tests are failing' : 'Merge conflict detected'}`,
438
+ '',
439
+ 'Please review and fix the issue, then close the task.',
440
+ ].join('\n');
441
+ await this.dispatchService.notifyAgent(orchestratorMeta.assignedAgent, 'task-assignment', notificationContent, {
442
+ fixTaskId: fixTask.id,
443
+ originalTaskId,
444
+ fixType: options.type,
445
+ });
446
+ }
447
+ }
448
+ return fixTask.id;
449
+ }
450
+ async cleanupAfterMerge(taskId, deleteBranch = true) {
451
+ if (!this.worktreeManager) {
452
+ return true; // No worktree manager, nothing to clean up
453
+ }
454
+ const task = await this.api.get(taskId);
455
+ if (!task) {
456
+ return false;
457
+ }
458
+ const orchestratorMeta = getOrchestratorTaskMeta(task.metadata);
459
+ if (!orchestratorMeta?.worktree) {
460
+ return true; // No worktree to clean up
461
+ }
462
+ try {
463
+ await this.worktreeManager.removeWorktree(orchestratorMeta.worktree, {
464
+ deleteBranch,
465
+ deleteRemoteBranch: deleteBranch, // Delete remote branch when deleting local
466
+ force: false,
467
+ });
468
+ return true;
469
+ }
470
+ catch {
471
+ return false;
472
+ }
473
+ }
474
+ // ----------------------------------------
475
+ // Status Updates
476
+ // ----------------------------------------
477
+ async updateMergeStatus(taskId, status, details) {
478
+ const task = await this.api.get(taskId);
479
+ if (!task) {
480
+ throw new Error(`Task not found: ${taskId}`);
481
+ }
482
+ const updates = {
483
+ mergeStatus: status,
484
+ };
485
+ if (status === 'merged') {
486
+ updates.mergedAt = createTimestamp();
487
+ }
488
+ if (details?.failureReason) {
489
+ updates.mergeFailureReason = details.failureReason;
490
+ }
491
+ if (details?.testResult) {
492
+ const existingMeta = getOrchestratorTaskMeta(task.metadata);
493
+ updates.lastTestResult = details.testResult;
494
+ updates.testRunCount = (existingMeta?.testRunCount ?? 0) + 1;
495
+ }
496
+ const newMetadata = updateOrchestratorTaskMeta(task.metadata, updates);
497
+ // When merge succeeds or is not applicable, transition task from REVIEW to CLOSED
498
+ // This unblocks dependent tasks via the blocked cache
499
+ const taskUpdates = { metadata: newMetadata };
500
+ if (status === 'merged' || status === 'not_applicable') {
501
+ taskUpdates.status = TaskStatus.CLOSED;
502
+ taskUpdates.closedAt = createTimestamp();
503
+ taskUpdates.assignee = undefined;
504
+ }
505
+ return this.api.update(taskId, taskUpdates);
506
+ }
507
+ // ----------------------------------------
508
+ // Private Helpers
509
+ // ----------------------------------------
510
+ /**
511
+ * Finds existing fix tasks for a given original task and fix type.
512
+ * This prevents creating duplicate fix tasks when tests fail repeatedly.
513
+ */
514
+ async findExistingFixTasks(originalTaskId, fixType) {
515
+ // Query for all tasks with the 'fix' tag
516
+ const allTasks = await this.api.list({
517
+ type: 'task',
518
+ tags: ['fix'],
519
+ });
520
+ // Filter for tasks that:
521
+ // 1. Have metadata.originalTaskId matching our original task
522
+ // 2. Have metadata.fixType matching the requested fix type
523
+ // 3. Are not closed (still relevant)
524
+ const activeStatuses = [TaskStatus.OPEN, TaskStatus.IN_PROGRESS, TaskStatus.REVIEW];
525
+ return allTasks.filter((task) => {
526
+ const meta = task.metadata;
527
+ return (meta?.originalTaskId === originalTaskId &&
528
+ meta?.fixType === fixType &&
529
+ activeStatuses.includes(task.status));
530
+ });
531
+ }
532
+ async getTargetBranch() {
533
+ if (this.targetBranch) {
534
+ return this.targetBranch;
535
+ }
536
+ if (this.config.targetBranch) {
537
+ this.targetBranch = this.config.targetBranch;
538
+ return this.targetBranch;
539
+ }
540
+ // Auto-detect via worktree manager if available
541
+ if (this.worktreeManager) {
542
+ this.targetBranch = await this.worktreeManager.getDefaultBranch();
543
+ return this.targetBranch;
544
+ }
545
+ // Fallback to detecting from git
546
+ try {
547
+ const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD', {
548
+ cwd: this.config.workspaceRoot,
549
+ encoding: 'utf8',
550
+ });
551
+ this.targetBranch = stdout.trim();
552
+ return this.targetBranch;
553
+ }
554
+ catch {
555
+ return 'main';
556
+ }
557
+ }
558
+ }
559
+ // ============================================================================
560
+ // Factory Function
561
+ // ============================================================================
562
+ /**
563
+ * Creates a MergeStewardService instance
564
+ */
565
+ export function createMergeStewardService(api, taskAssignment, dispatchService, agentRegistry, config, worktreeManager) {
566
+ return new MergeStewardServiceImpl(api, taskAssignment, dispatchService, agentRegistry, config, worktreeManager);
567
+ }
568
+ //# sourceMappingURL=merge-steward-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-steward-service.js","sourceRoot":"","sources":["../../src/services/merge-steward-service.ts"],"names":[],"mappings":"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"}