@intrect/openswarm 0.17.2 → 0.17.3

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 (256) hide show
  1. package/README.md +21 -5
  2. package/config.example.yaml +18 -0
  3. package/dist/adapters/agenticLoop.d.ts +2 -0
  4. package/dist/adapters/agenticLoop.d.ts.map +1 -1
  5. package/dist/adapters/agenticLoop.js +6 -3
  6. package/dist/adapters/agenticLoop.js.map +1 -1
  7. package/dist/adapters/base.d.ts.map +1 -1
  8. package/dist/adapters/base.js +9 -0
  9. package/dist/adapters/base.js.map +1 -1
  10. package/dist/adapters/claude.d.ts.map +1 -1
  11. package/dist/adapters/claude.js +6 -3
  12. package/dist/adapters/claude.js.map +1 -1
  13. package/dist/adapters/codex.d.ts.map +1 -1
  14. package/dist/adapters/codex.js +3 -2
  15. package/dist/adapters/codex.js.map +1 -1
  16. package/dist/adapters/codexResponses.d.ts +2 -1
  17. package/dist/adapters/codexResponses.d.ts.map +1 -1
  18. package/dist/adapters/codexResponses.js +34 -30
  19. package/dist/adapters/codexResponses.js.map +1 -1
  20. package/dist/adapters/errorClassification.d.ts +11 -0
  21. package/dist/adapters/errorClassification.d.ts.map +1 -1
  22. package/dist/adapters/errorClassification.js +21 -0
  23. package/dist/adapters/errorClassification.js.map +1 -1
  24. package/dist/adapters/gpt.d.ts.map +1 -1
  25. package/dist/adapters/gpt.js +1 -0
  26. package/dist/adapters/gpt.js.map +1 -1
  27. package/dist/adapters/local.d.ts.map +1 -1
  28. package/dist/adapters/local.js +1 -0
  29. package/dist/adapters/local.js.map +1 -1
  30. package/dist/adapters/openrouter.d.ts.map +1 -1
  31. package/dist/adapters/openrouter.js +1 -0
  32. package/dist/adapters/openrouter.js.map +1 -1
  33. package/dist/adapters/processRegistry.d.ts.map +1 -1
  34. package/dist/adapters/processRegistry.js +8 -0
  35. package/dist/adapters/processRegistry.js.map +1 -1
  36. package/dist/adapters/types.d.ts +2 -0
  37. package/dist/adapters/types.d.ts.map +1 -1
  38. package/dist/agents/pairPipeline.d.ts +10 -139
  39. package/dist/agents/pairPipeline.d.ts.map +1 -1
  40. package/dist/agents/pairPipeline.js +127 -35
  41. package/dist/agents/pairPipeline.js.map +1 -1
  42. package/dist/agents/pairPipelineTypes.d.ts +109 -0
  43. package/dist/agents/pairPipelineTypes.d.ts.map +1 -0
  44. package/dist/agents/pairPipelineTypes.js +2 -0
  45. package/dist/agents/pairPipelineTypes.js.map +1 -0
  46. package/dist/agents/pipelineGuards.d.ts.map +1 -1
  47. package/dist/agents/pipelineGuards.js +346 -0
  48. package/dist/agents/pipelineGuards.js.map +1 -1
  49. package/dist/agents/pipelineTaskPrefix.d.ts +3 -0
  50. package/dist/agents/pipelineTaskPrefix.d.ts.map +1 -0
  51. package/dist/agents/pipelineTaskPrefix.js +16 -0
  52. package/dist/agents/pipelineTaskPrefix.js.map +1 -0
  53. package/dist/agents/reflection.d.ts +1 -1
  54. package/dist/agents/reflection.d.ts.map +1 -1
  55. package/dist/agents/reflection.js +3 -1
  56. package/dist/agents/reflection.js.map +1 -1
  57. package/dist/agents/reviewer.d.ts +6 -0
  58. package/dist/agents/reviewer.d.ts.map +1 -1
  59. package/dist/agents/reviewer.js +4 -1
  60. package/dist/agents/reviewer.js.map +1 -1
  61. package/dist/agents/stageErrorClassification.d.ts +16 -0
  62. package/dist/agents/stageErrorClassification.d.ts.map +1 -0
  63. package/dist/agents/stageErrorClassification.js +38 -0
  64. package/dist/agents/stageErrorClassification.js.map +1 -0
  65. package/dist/agents/stageModelResolver.d.ts +8 -0
  66. package/dist/agents/stageModelResolver.d.ts.map +1 -0
  67. package/dist/agents/stageModelResolver.js +22 -0
  68. package/dist/agents/stageModelResolver.js.map +1 -0
  69. package/dist/agents/worker.d.ts +33 -0
  70. package/dist/agents/worker.d.ts.map +1 -1
  71. package/dist/agents/worker.js +59 -4
  72. package/dist/agents/worker.js.map +1 -1
  73. package/dist/agents/workerFanout.d.ts +38 -0
  74. package/dist/agents/workerFanout.d.ts.map +1 -0
  75. package/dist/agents/workerFanout.js +277 -0
  76. package/dist/agents/workerFanout.js.map +1 -0
  77. package/dist/agents/workerFanoutGate.d.ts +48 -0
  78. package/dist/agents/workerFanoutGate.d.ts.map +1 -0
  79. package/dist/agents/workerFanoutGate.js +146 -0
  80. package/dist/agents/workerFanoutGate.js.map +1 -0
  81. package/dist/agents/workerValidationEvidence.d.ts +5 -0
  82. package/dist/agents/workerValidationEvidence.d.ts.map +1 -0
  83. package/dist/agents/workerValidationEvidence.js +75 -0
  84. package/dist/agents/workerValidationEvidence.js.map +1 -0
  85. package/dist/automation/autonomousRunner.d.ts +18 -6
  86. package/dist/automation/autonomousRunner.d.ts.map +1 -1
  87. package/dist/automation/autonomousRunner.js +209 -39
  88. package/dist/automation/autonomousRunner.js.map +1 -1
  89. package/dist/automation/backlogGrooming.d.ts +52 -0
  90. package/dist/automation/backlogGrooming.d.ts.map +1 -0
  91. package/dist/automation/backlogGrooming.js +231 -0
  92. package/dist/automation/backlogGrooming.js.map +1 -0
  93. package/dist/automation/runnerExecution.d.ts +1 -1
  94. package/dist/automation/runnerExecution.d.ts.map +1 -1
  95. package/dist/automation/runnerExecution.js +31 -9
  96. package/dist/automation/runnerExecution.js.map +1 -1
  97. package/dist/automation/runnerTypes.d.ts +3 -1
  98. package/dist/automation/runnerTypes.d.ts.map +1 -1
  99. package/dist/automation/taskSource.d.ts +6 -3
  100. package/dist/automation/taskSource.d.ts.map +1 -1
  101. package/dist/automation/taskSource.js +5 -0
  102. package/dist/automation/taskSource.js.map +1 -1
  103. package/dist/cli/daemon.d.ts +20 -3
  104. package/dist/cli/daemon.d.ts.map +1 -1
  105. package/dist/cli/daemon.js +42 -2
  106. package/dist/cli/daemon.js.map +1 -1
  107. package/dist/cli/fixBoard.d.ts +14 -0
  108. package/dist/cli/fixBoard.d.ts.map +1 -0
  109. package/dist/cli/fixBoard.js +32 -0
  110. package/dist/cli/fixBoard.js.map +1 -0
  111. package/dist/cli/fixCommand.d.ts +8 -0
  112. package/dist/cli/fixCommand.d.ts.map +1 -1
  113. package/dist/cli/fixCommand.js +47 -8
  114. package/dist/cli/fixCommand.js.map +1 -1
  115. package/dist/cli/memoryCommand.d.ts +37 -0
  116. package/dist/cli/memoryCommand.d.ts.map +1 -0
  117. package/dist/cli/memoryCommand.js +156 -0
  118. package/dist/cli/memoryCommand.js.map +1 -0
  119. package/dist/cli/reviewAudit.d.ts +68 -0
  120. package/dist/cli/reviewAudit.d.ts.map +1 -1
  121. package/dist/cli/reviewAudit.js +147 -4
  122. package/dist/cli/reviewAudit.js.map +1 -1
  123. package/dist/cli/reviewMaxCommand.d.ts +2 -0
  124. package/dist/cli/reviewMaxCommand.d.ts.map +1 -1
  125. package/dist/cli/reviewMaxCommand.js +61 -36
  126. package/dist/cli/reviewMaxCommand.js.map +1 -1
  127. package/dist/cli.js +68 -13
  128. package/dist/cli.js.map +1 -1
  129. package/dist/core/config.d.ts +413 -0
  130. package/dist/core/config.d.ts.map +1 -1
  131. package/dist/core/config.js +51 -5
  132. package/dist/core/config.js.map +1 -1
  133. package/dist/core/eventHub.d.ts +22 -0
  134. package/dist/core/eventHub.d.ts.map +1 -1
  135. package/dist/core/eventHub.js +1 -0
  136. package/dist/core/eventHub.js.map +1 -1
  137. package/dist/core/providerOverride.d.ts +9 -0
  138. package/dist/core/providerOverride.d.ts.map +1 -1
  139. package/dist/core/providerOverride.js +12 -0
  140. package/dist/core/providerOverride.js.map +1 -1
  141. package/dist/core/service.d.ts.map +1 -1
  142. package/dist/core/service.js +8 -2
  143. package/dist/core/service.js.map +1 -1
  144. package/dist/core/types.d.ts +61 -1
  145. package/dist/core/types.d.ts.map +1 -1
  146. package/dist/linear/linear.d.ts +2 -1
  147. package/dist/linear/linear.d.ts.map +1 -1
  148. package/dist/linear/linear.js +16 -6
  149. package/dist/linear/linear.js.map +1 -1
  150. package/dist/locale/prompts/en.d.ts.map +1 -1
  151. package/dist/locale/prompts/en.js +11 -1
  152. package/dist/locale/prompts/en.js.map +1 -1
  153. package/dist/locale/prompts/ko.d.ts.map +1 -1
  154. package/dist/locale/prompts/ko.js +11 -1
  155. package/dist/locale/prompts/ko.js.map +1 -1
  156. package/dist/memory/compaction.d.ts +2 -2
  157. package/dist/memory/compaction.d.ts.map +1 -1
  158. package/dist/memory/compaction.js +22 -17
  159. package/dist/memory/compaction.js.map +1 -1
  160. package/dist/memory/index.d.ts +3 -3
  161. package/dist/memory/index.js +3 -3
  162. package/dist/memory/memoryCore.d.ts +15 -27
  163. package/dist/memory/memoryCore.d.ts.map +1 -1
  164. package/dist/memory/memoryCore.js +112 -97
  165. package/dist/memory/memoryCore.js.map +1 -1
  166. package/dist/memory/memoryFilters.d.ts +8 -0
  167. package/dist/memory/memoryFilters.d.ts.map +1 -0
  168. package/dist/memory/memoryFilters.js +26 -0
  169. package/dist/memory/memoryFilters.js.map +1 -0
  170. package/dist/memory/memoryOps.d.ts +7 -23
  171. package/dist/memory/memoryOps.d.ts.map +1 -1
  172. package/dist/memory/memoryOps.js +49 -109
  173. package/dist/memory/memoryOps.js.map +1 -1
  174. package/dist/memory/repoKnowledge.d.ts.map +1 -1
  175. package/dist/memory/repoKnowledge.js +48 -3
  176. package/dist/memory/repoKnowledge.js.map +1 -1
  177. package/dist/orchestration/conflictDetector.d.ts.map +1 -1
  178. package/dist/orchestration/conflictDetector.js +26 -7
  179. package/dist/orchestration/conflictDetector.js.map +1 -1
  180. package/dist/orchestration/taskScheduler.d.ts +5 -0
  181. package/dist/orchestration/taskScheduler.d.ts.map +1 -1
  182. package/dist/orchestration/taskScheduler.js +36 -12
  183. package/dist/orchestration/taskScheduler.js.map +1 -1
  184. package/dist/registry/memoryBridge.js +4 -4
  185. package/dist/registry/memoryBridge.js.map +1 -1
  186. package/dist/support/chatMemory.js +1 -1
  187. package/dist/support/chatMemory.js.map +1 -1
  188. package/dist/support/dashboardHtml.d.ts +1 -1
  189. package/dist/support/dashboardHtml.d.ts.map +1 -1
  190. package/dist/support/dashboardHtml.js +12 -0
  191. package/dist/support/dashboardHtml.js.map +1 -1
  192. package/dist/support/gitTracker.d.ts +30 -3
  193. package/dist/support/gitTracker.d.ts.map +1 -1
  194. package/dist/support/gitTracker.js +108 -29
  195. package/dist/support/gitTracker.js.map +1 -1
  196. package/dist/support/repoMetadata.d.ts +10 -0
  197. package/dist/support/repoMetadata.d.ts.map +1 -1
  198. package/dist/support/repoMetadata.js +31 -0
  199. package/dist/support/repoMetadata.js.map +1 -1
  200. package/dist/support/updateNotifier.d.ts +12 -0
  201. package/dist/support/updateNotifier.d.ts.map +1 -1
  202. package/dist/support/updateNotifier.js +71 -0
  203. package/dist/support/updateNotifier.js.map +1 -1
  204. package/dist/support/web.d.ts.map +1 -1
  205. package/dist/support/web.js +5 -3
  206. package/dist/support/web.js.map +1 -1
  207. package/dist/support/worktreeManager.d.ts +33 -0
  208. package/dist/support/worktreeManager.d.ts.map +1 -1
  209. package/dist/support/worktreeManager.js +172 -2
  210. package/dist/support/worktreeManager.js.map +1 -1
  211. package/dist/tui/App.js +1 -1
  212. package/dist/tui/App.js.map +1 -1
  213. package/dist/tui/components/AuditBoard.d.ts +3 -2
  214. package/dist/tui/components/AuditBoard.d.ts.map +1 -1
  215. package/dist/tui/components/AuditBoard.js +13 -4
  216. package/dist/tui/components/AuditBoard.js.map +1 -1
  217. package/dist/tui/components/DataTable.d.ts +3 -1
  218. package/dist/tui/components/DataTable.d.ts.map +1 -1
  219. package/dist/tui/components/DataTable.js +22 -5
  220. package/dist/tui/components/DataTable.js.map +1 -1
  221. package/dist/tui/components/StageTimeline.d.ts +1 -1
  222. package/dist/tui/components/StageTimeline.d.ts.map +1 -1
  223. package/dist/tui/components/StageTimeline.js +5 -2
  224. package/dist/tui/components/StageTimeline.js.map +1 -1
  225. package/dist/tui/components/SubagentTree.d.ts +6 -6
  226. package/dist/tui/components/SubagentTree.d.ts.map +1 -1
  227. package/dist/tui/components/SubagentTree.js +33 -5
  228. package/dist/tui/components/SubagentTree.js.map +1 -1
  229. package/dist/tui/eventCoalescer.d.ts +29 -0
  230. package/dist/tui/eventCoalescer.d.ts.map +1 -0
  231. package/dist/tui/eventCoalescer.js +56 -0
  232. package/dist/tui/eventCoalescer.js.map +1 -0
  233. package/dist/tui/hooks/usePipelineEvents.d.ts +1 -1
  234. package/dist/tui/hooks/usePipelineEvents.d.ts.map +1 -1
  235. package/dist/tui/hooks/usePipelineEvents.js +18 -4
  236. package/dist/tui/hooks/usePipelineEvents.js.map +1 -1
  237. package/dist/tui/monitorRows.d.ts +41 -2
  238. package/dist/tui/monitorRows.d.ts.map +1 -1
  239. package/dist/tui/monitorRows.js +86 -7
  240. package/dist/tui/monitorRows.js.map +1 -1
  241. package/dist/tui/panels/MonitorPanel.d.ts +2 -1
  242. package/dist/tui/panels/MonitorPanel.d.ts.map +1 -1
  243. package/dist/tui/panels/MonitorPanel.js +2 -2
  244. package/dist/tui/panels/MonitorPanel.js.map +1 -1
  245. package/dist/tui/panels/PipelinePanel.d.ts.map +1 -1
  246. package/dist/tui/panels/PipelinePanel.js +6 -1
  247. package/dist/tui/panels/PipelinePanel.js.map +1 -1
  248. package/dist/tui/pipelineEvents.d.ts +14 -0
  249. package/dist/tui/pipelineEvents.d.ts.map +1 -1
  250. package/dist/tui/pipelineEvents.js +89 -1
  251. package/dist/tui/pipelineEvents.js.map +1 -1
  252. package/dist/tui/subagentTree.d.ts +26 -3
  253. package/dist/tui/subagentTree.d.ts.map +1 -1
  254. package/dist/tui/subagentTree.js +89 -14
  255. package/dist/tui/subagentTree.js.map +1 -1
  256. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ // ============================================
2
+ // OpenSwarm - Stage error classification helpers (INT-2424)
3
+ // ============================================
4
+ //
5
+ // runStage() must rethrow rate-limit/infra errors so run()'s top-level catch
6
+ // can classify them as 'rate_limited'/'infra_error' (INT-1906, INT-2010)
7
+ // instead of counting them toward the STUCK failure budget like a genuine
8
+ // bad edit. These helpers carry the StageResult runStage() already built
9
+ // onto the rethrown error, so run() can restore it into PipelineResult.stages
10
+ // instead of silently dropping the failed stage.
11
+ import { RateLimitError } from '../adapters/rateLimitError.js';
12
+ import { isInfraError } from '../adapters/errorClassification.js';
13
+ /** Thrown when the pipeline is cancelled mid-run (project disable / manual stop). */
14
+ export class PipelineCancelledError extends Error {
15
+ constructor() {
16
+ super('Pipeline cancelled');
17
+ this.name = 'PipelineCancelledError';
18
+ }
19
+ }
20
+ export function isClassifiedStageError(error) {
21
+ return error instanceof RateLimitError || isInfraError(error);
22
+ }
23
+ /**
24
+ * Attaches `stageResult` to `error` and rethrows it. `isInfraError()` also
25
+ * classifies raw primitives (e.g. a rejected string) — assigning a property
26
+ * onto one throws under ESM strict mode, so non-Error values are wrapped
27
+ * first (preserving `.message`, which is all isInfraError()/RateLimitError
28
+ * downstream care about).
29
+ */
30
+ export function rethrowClassified(error, stageResult) {
31
+ const err = error instanceof Error ? error : new Error(String(error));
32
+ err.stageResult = stageResult;
33
+ throw err;
34
+ }
35
+ export function extractClassifiedStageResult(error) {
36
+ return error?.stageResult;
37
+ }
38
+ //# sourceMappingURL=stageErrorClassification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stageErrorClassification.js","sourceRoot":"","sources":["../../src/agents/stageErrorClassification.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,4DAA4D;AAC5D,+CAA+C;AAC/C,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,iDAAiD;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIlE,qFAAqF;AACrF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,cAAc,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,WAAwB;IACxE,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,GAA4B,CAAC,WAAW,GAAG,WAAW,CAAC;IACxD,MAAM,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,OAAQ,KAA8B,EAAE,WAAW,CAAC;AACtD,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resolve (and cache) an adapter's default model. `getDefaultModel` is heavy
3
+ * (OAuth + live catalog), so results are cached per adapter name; failures
4
+ * degrade to undefined. Used to fill the display model when a role omits it and
5
+ * relies on the adapter default, so the TUI/dashboard aren't left blank.
6
+ */
7
+ export declare function resolveAdapterDefaultModel(adapterName: string | undefined, cache: Map<string, Promise<string | undefined>>): Promise<string | undefined>;
8
+ //# sourceMappingURL=stageModelResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stageModelResolver.d.ts","sourceRoot":"","sources":["../../src/agents/stageModelResolver.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GAC9C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B"}
@@ -0,0 +1,22 @@
1
+ // ============================================
2
+ // OpenSwarm - Stage model resolution (INT-2393)
3
+ // ============================================
4
+ import { getAdapter } from '../adapters/index.js';
5
+ /**
6
+ * Resolve (and cache) an adapter's default model. `getDefaultModel` is heavy
7
+ * (OAuth + live catalog), so results are cached per adapter name; failures
8
+ * degrade to undefined. Used to fill the display model when a role omits it and
9
+ * relies on the adapter default, so the TUI/dashboard aren't left blank.
10
+ */
11
+ export function resolveAdapterDefaultModel(adapterName, cache) {
12
+ const cacheKey = adapterName ?? '<default>';
13
+ let pending = cache.get(cacheKey);
14
+ if (!pending) {
15
+ pending = Promise.resolve()
16
+ .then(() => getAdapter(adapterName).getDefaultModel())
17
+ .catch(() => undefined);
18
+ cache.set(cacheKey, pending);
19
+ }
20
+ return pending;
21
+ }
22
+ //# sourceMappingURL=stageModelResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stageModelResolver.js","sourceRoot":"","sources":["../../src/agents/stageModelResolver.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,gDAAgD;AAChD,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAA+B,EAC/B,KAA+C;IAE/C,MAAM,QAAQ,GAAG,WAAW,IAAI,WAAW,CAAC;IAC5C,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE;aACxB,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,eAAe,EAAE,CAAC;aACrD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -17,6 +17,8 @@ export interface WorkerOptions {
17
17
  issueIdentifier?: string;
18
18
  projectName?: string;
19
19
  onLog?: (line: string) => void;
20
+ /** Route worker status through onLog without printing raw console lines. */
21
+ suppressStatusLogs?: boolean;
20
22
  processContext?: ProcessContext;
21
23
  /** 코드 컨텍스트 (impact analysis + registry briefs) */
22
24
  workerContext?: WorkerContext;
@@ -28,6 +30,8 @@ export interface WorkerOptions {
28
30
  bashTimeoutMs?: number;
29
31
  /** Expose web_fetch + web_search tools (default true). Set false for SWE-bench integrity. */
30
32
  webTools?: boolean;
33
+ /** Expose repository memory search (default true). Set false for isolated/temp repo benchmarks. */
34
+ memoryTools?: boolean;
31
35
  /** MCP tools to expose to the agentic loop (server__tool). When unset the adapter
32
36
  * self-sources from the registry (INT-1951); set to pin a specific set. (INT-1950) */
33
37
  mcpTools?: ToolDefinition[];
@@ -40,7 +44,36 @@ export interface WorkerOptions {
40
44
  */
41
45
  editFormat?: EditFormat;
42
46
  }
47
+ /**
48
+ * Default worker bash timeout (5min). The tools.ts DEFAULT_BASH_TIMEOUT_MS (30s)
49
+ * is the floor for non-worker callers, but the autonomous worker runs real
50
+ * verification (pytest / playwright / backtests / retraining) that needs minutes,
51
+ * not seconds — a 30s cap made every such command time out, so reviewers demanded
52
+ * "live/E2E verification" the worker could never physically complete.
53
+ */
54
+ export declare const WORKER_BASH_TIMEOUT_DEFAULT_MS = 300000;
55
+ /**
56
+ * Resolve the worker's bash tool timeout (ms). Pure + total.
57
+ *
58
+ * Precedence (INT-2415):
59
+ * 1. matched jobProfile `effort` (low/medium/high) — task-shaped budget
60
+ * 2. repo override — openswarm.json `sandbox.bashTimeoutMs`
61
+ * 3. a 5min default (WORKER_BASH_TIMEOUT_DEFAULT_MS)
62
+ *
63
+ * A non-positive/NaN repo override is ignored (falls through to the default).
64
+ */
65
+ export declare function resolveWorkerBashTimeoutMs(input: {
66
+ effort?: 'low' | 'medium' | 'high';
67
+ repoOverrideMs?: number;
68
+ }): number;
69
+ /**
70
+ * Async convenience over resolveWorkerBashTimeoutMs: reads the repo override
71
+ * (openswarm.json `sandbox.bashTimeoutMs`) from `projectPath` itself, so callers
72
+ * pass only the matched jobProfile effort. Best-effort I/O. (INT-2415)
73
+ */
74
+ export declare function resolveWorkerBashTimeout(projectPath: string, effort?: 'low' | 'medium' | 'high'): Promise<number>;
43
75
  export declare function isProviderQuotaError(message?: string): boolean;
76
+ export declare function formatWorkerGitChangeStatus(files: string[]): string;
44
77
  /**
45
78
  * Run Worker agent
46
79
  * Integrates Git-based file change tracking (Aider style)
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIxH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4HAA4H;IAC5H,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;0FACsF;IACtF,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAyBD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CA2B9D;AAYD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA8J7E;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CA0CT"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKxH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4HAA4H;IAC5H,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;0FACsF;IACtF,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAID;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,SAAU,CAAC;AAStD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAMT;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GACjC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAyBD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CA2B9D;AAeD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAKnE;AAID;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA+J7E;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CA0CT"}
@@ -9,6 +9,48 @@ import { expandPath } from '../core/config.js';
9
9
  import { RateLimitError } from '../adapters/rateLimitError.js';
10
10
  import { isInfraError } from '../adapters/errorClassification.js';
11
11
  import { resolveEditFormat, SEARCH_REPLACE_PROMPT, WHOLE_FILE_PROMPT } from '../support/editParser.js';
12
+ import { loadSandboxBashTimeoutMs } from '../support/repoMetadata.js';
13
+ // Bash timeout policy (INT-2415)
14
+ /**
15
+ * Default worker bash timeout (5min). The tools.ts DEFAULT_BASH_TIMEOUT_MS (30s)
16
+ * is the floor for non-worker callers, but the autonomous worker runs real
17
+ * verification (pytest / playwright / backtests / retraining) that needs minutes,
18
+ * not seconds — a 30s cap made every such command time out, so reviewers demanded
19
+ * "live/E2E verification" the worker could never physically complete.
20
+ */
21
+ export const WORKER_BASH_TIMEOUT_DEFAULT_MS = 300_000;
22
+ /** jobProfile effort → bash timeout. Heavier tasks get longer verification budgets. */
23
+ const EFFORT_BASH_TIMEOUT_MS = {
24
+ low: 120_000, // 2min
25
+ medium: 300_000, // 5min
26
+ high: 900_000, // 15min
27
+ };
28
+ /**
29
+ * Resolve the worker's bash tool timeout (ms). Pure + total.
30
+ *
31
+ * Precedence (INT-2415):
32
+ * 1. matched jobProfile `effort` (low/medium/high) — task-shaped budget
33
+ * 2. repo override — openswarm.json `sandbox.bashTimeoutMs`
34
+ * 3. a 5min default (WORKER_BASH_TIMEOUT_DEFAULT_MS)
35
+ *
36
+ * A non-positive/NaN repo override is ignored (falls through to the default).
37
+ */
38
+ export function resolveWorkerBashTimeoutMs(input) {
39
+ if (input.effort)
40
+ return EFFORT_BASH_TIMEOUT_MS[input.effort];
41
+ if (typeof input.repoOverrideMs === 'number' && input.repoOverrideMs > 0) {
42
+ return input.repoOverrideMs;
43
+ }
44
+ return WORKER_BASH_TIMEOUT_DEFAULT_MS;
45
+ }
46
+ /**
47
+ * Async convenience over resolveWorkerBashTimeoutMs: reads the repo override
48
+ * (openswarm.json `sandbox.bashTimeoutMs`) from `projectPath` itself, so callers
49
+ * pass only the matched jobProfile effort. Best-effort I/O. (INT-2415)
50
+ */
51
+ export async function resolveWorkerBashTimeout(projectPath, effort) {
52
+ return resolveWorkerBashTimeoutMs({ effort, repoOverrideMs: await loadSandboxBashTimeoutMs(projectPath) });
53
+ }
12
54
  // Prompts
13
55
  /**
14
56
  * Build Worker prompt using locale templates
@@ -59,6 +101,18 @@ function isWorkerQuotaFailure(result) {
59
101
  isProviderQuotaError(result.summary) ||
60
102
  isProviderQuotaError(result.haltReason));
61
103
  }
104
+ function emitWorkerStatus(options, line) {
105
+ options.onLog?.(line);
106
+ if (!options.suppressStatusLogs)
107
+ console.log(line);
108
+ }
109
+ export function formatWorkerGitChangeStatus(files) {
110
+ if (files.length === 0)
111
+ return '[Worker] No file changes detected by Git or LLM';
112
+ const shown = files.slice(0, 4).join(', ');
113
+ const more = files.length > 4 ? ` +${files.length - 4} more` : '';
114
+ return `[Worker] Git detected ${files.length} changed file(s): ${shown}${more}`;
115
+ }
62
116
  // Worker Execution
63
117
  /**
64
118
  * Run Worker agent
@@ -74,7 +128,7 @@ export async function runWorker(options) {
74
128
  const isGitRepo = await gitTracker.isGitRepo(cwd);
75
129
  if (isGitRepo) {
76
130
  snapshotHash = await gitTracker.takeSnapshot(cwd);
77
- console.log(`[Worker] Git snapshot: ${snapshotHash.slice(0, 8)}`);
131
+ emitWorkerStatus(options, `[Worker] Git snapshot: ${snapshotHash.slice(0, 8)}`);
78
132
  }
79
133
  const runAttempt = async (adapterName, isFallbackAttempt) => {
80
134
  const adapter = getAdapter(adapterName);
@@ -111,6 +165,7 @@ export async function runWorker(options) {
111
165
  protectedFiles: options.protectedFiles,
112
166
  bashTimeoutMs: options.bashTimeoutMs,
113
167
  webTools: options.webTools,
168
+ memoryTools: options.memoryTools,
114
169
  mcpTools: options.mcpTools,
115
170
  signal: options.signal,
116
171
  });
@@ -124,7 +179,7 @@ export async function runWorker(options) {
124
179
  if (isGitRepo && snapshotHash) {
125
180
  const gitChangedFiles = await gitTracker.getChangedFilesSinceSnapshot(cwd, snapshotHash);
126
181
  if (gitChangedFiles.length > 0) {
127
- console.log(`[Worker] Git detected changes: ${gitChangedFiles.join(', ')}`);
182
+ emitWorkerStatus(options, formatWorkerGitChangeStatus(gitChangedFiles));
128
183
  // Merge with LLM-reported files (Git results take priority)
129
184
  const mergedFiles = new Set([
130
185
  ...gitChangedFiles,
@@ -135,7 +190,7 @@ export async function runWorker(options) {
135
190
  // the model never produced a JSON block. Only an explicit error/halt in the
136
191
  // output should keep success=false here.
137
192
  if (!parsedResult.success && !parsedResult.error && !parsedResult.haltReason) {
138
- console.log('[Worker] Promoting to success: git changes present, no error signal');
193
+ emitWorkerStatus(options, '[Worker] Promoting to success: git changes present, no error signal');
139
194
  parsedResult.success = true;
140
195
  if (!parsedResult.summary || parsedResult.summary === t('common.fallback.noSummary')) {
141
196
  parsedResult.summary = `Modified ${gitChangedFiles.length} file(s): ${gitChangedFiles.slice(0, 5).join(', ')}`;
@@ -143,7 +198,7 @@ export async function runWorker(options) {
143
198
  }
144
199
  }
145
200
  else if (parsedResult.filesChanged.length === 0) {
146
- console.log('[Worker] No file changes detected by Git or LLM');
201
+ emitWorkerStatus(options, formatWorkerGitChangeStatus([]));
147
202
  }
148
203
  }
149
204
  return parsedResult;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { WorkerFanoutCandidateConfig, PipelineGuardsConfig } from '../core/types.js';
2
+ import type { WorkerResult } from './agentPair.js';
3
+ import { type WorkerOptions } from './worker.js';
4
+ import { type GuardsRunResult } from './pipelineGuards.js';
5
+ export interface WorkerFanoutCandidateRun {
6
+ id: string;
7
+ projectPath: string;
8
+ result: WorkerResult;
9
+ filesChanged: string[];
10
+ guards?: GuardsRunResult;
11
+ durationMs: number;
12
+ score: number;
13
+ eligible: boolean;
14
+ error?: string;
15
+ }
16
+ export interface WorkerFanoutRunResult {
17
+ winner?: WorkerFanoutCandidateRun;
18
+ candidates: WorkerFanoutCandidateRun[];
19
+ fallbackReason?: string;
20
+ }
21
+ export interface RunWorkerFanoutOptions {
22
+ projectPath: string;
23
+ baseWorkerOptions: WorkerOptions;
24
+ candidates: WorkerFanoutCandidateConfig[];
25
+ concurrency: number;
26
+ keepSandboxes?: boolean;
27
+ /**
28
+ * Shared deps/data handling:
29
+ * - undefined: copy shared paths into each sandbox (verification works, no loser write leak)
30
+ * - true: symlink shared paths (faster, but writes hit the original shared path)
31
+ * - false: do not provide shared paths
32
+ */
33
+ linkSharedPaths?: boolean;
34
+ guards?: Partial<PipelineGuardsConfig>;
35
+ onLog?: (line: string) => void;
36
+ }
37
+ export declare function runWorkerFanout(options: RunWorkerFanoutOptions): Promise<WorkerFanoutRunResult>;
38
+ //# sourceMappingURL=workerFanout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerFanout.d.ts","sourceRoot":"","sources":["../../src/agents/workerFanout.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItE,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,aAAa,CAAC;IACjC,UAAU,EAAE,2BAA2B,EAAE,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAkOD,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2DrG"}
@@ -0,0 +1,277 @@
1
+ // ============================================
2
+ // OpenSwarm - Adaptive worker fan-out
3
+ // ============================================
4
+ //
5
+ // Runs candidate workers in isolated temporary git clones and promotes only the
6
+ // selected winner's diff back into the real project path.
7
+ import { execFile } from 'node:child_process';
8
+ import { existsSync } from 'node:fs';
9
+ import { cp, mkdir, mkdtemp, rm, symlink, writeFile } from 'node:fs/promises';
10
+ import { tmpdir } from 'node:os';
11
+ import { dirname, join, resolve } from 'node:path';
12
+ import { promisify } from 'node:util';
13
+ import { runPool } from '../support/concurrencyPool.js';
14
+ import { loadRepoMetadata } from '../support/repoMetadata.js';
15
+ import { resolveSharedPaths } from '../support/worktreeManager.js';
16
+ import { runWorker } from './worker.js';
17
+ import { runGuards } from './pipelineGuards.js';
18
+ const exec = promisify(execFile);
19
+ function safeCandidateId(id, index) {
20
+ const safe = id.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-|-$/g, '').slice(0, 48);
21
+ return safe || `candidate-${index + 1}`;
22
+ }
23
+ async function git(cwd, args, opts) {
24
+ const { stdout } = await exec('git', args, {
25
+ cwd,
26
+ encoding: 'utf8',
27
+ env: opts?.env,
28
+ maxBuffer: 20 * 1024 * 1024,
29
+ });
30
+ return String(stdout);
31
+ }
32
+ // Capture ALL uncommitted work in the project (tracked edits, deletions, and
33
+ // untracked new files) as a binary patch vs HEAD, WITHOUT mutating the project's
34
+ // real index or worktree — everything is staged into a throwaway temporary index
35
+ // selected via GIT_INDEX_FILE. Returns '' when the worktree is clean. This lets
36
+ // fan-out run on a dirty tree (e.g. a self-repair retry that still holds the
37
+ // previous iteration's edits) by seeding that state into each sandbox.
38
+ async function captureBaselinePatch(projectPath) {
39
+ const idxDir = await mkdtemp(join(tmpdir(), 'openswarm-fanout-idx-'));
40
+ const env = { ...process.env, GIT_INDEX_FILE: join(idxDir, 'index') };
41
+ try {
42
+ await git(projectPath, ['add', '-A'], { env });
43
+ return await git(projectPath, ['diff', '--cached', '--binary', 'HEAD'], { env });
44
+ }
45
+ finally {
46
+ await rm(idxDir, { recursive: true, force: true });
47
+ }
48
+ }
49
+ async function cloneSandbox(projectPath, root, id, sharedPathMode) {
50
+ const sandbox = join(root, id);
51
+ await git(projectPath, ['clone', '--quiet', '--no-hardlinks', '--', projectPath, sandbox]);
52
+ if (sharedPathMode === 'link')
53
+ await linkSharedPaths(projectPath, sandbox);
54
+ if (sharedPathMode === 'copy')
55
+ await copySharedPaths(projectPath, sandbox);
56
+ return sandbox;
57
+ }
58
+ async function linkSharedPaths(projectPath, sandboxPath) {
59
+ let metadata = null;
60
+ try {
61
+ metadata = await loadRepoMetadata(projectPath);
62
+ }
63
+ catch {
64
+ metadata = null;
65
+ }
66
+ for (const rel of resolveSharedPaths(projectPath, metadata)) {
67
+ const target = resolve(projectPath, rel);
68
+ const linkPath = resolve(sandboxPath, rel);
69
+ if (existsSync(linkPath))
70
+ continue;
71
+ await mkdir(dirname(linkPath), { recursive: true });
72
+ await symlink(target, linkPath);
73
+ }
74
+ }
75
+ async function copySharedPaths(projectPath, sandboxPath) {
76
+ let metadata = null;
77
+ try {
78
+ metadata = await loadRepoMetadata(projectPath);
79
+ }
80
+ catch {
81
+ metadata = null;
82
+ }
83
+ for (const rel of resolveSharedPaths(projectPath, metadata)) {
84
+ const source = resolve(projectPath, rel);
85
+ const target = resolve(sandboxPath, rel);
86
+ if (existsSync(target))
87
+ continue;
88
+ await mkdir(dirname(target), { recursive: true });
89
+ await cp(source, target, {
90
+ recursive: true,
91
+ force: false,
92
+ errorOnExist: false,
93
+ verbatimSymlinks: true,
94
+ });
95
+ }
96
+ }
97
+ function sharedPathModeFor(linkSharedPaths) {
98
+ if (linkSharedPaths === true)
99
+ return 'link';
100
+ if (linkSharedPaths === false)
101
+ return 'off';
102
+ return 'copy';
103
+ }
104
+ async function changedFiles(projectPath) {
105
+ const out = await git(projectPath, ['status', '--porcelain']).catch(() => '');
106
+ return out
107
+ .split('\n')
108
+ .map((line) => line.trimEnd())
109
+ .filter(Boolean)
110
+ .map((line) => {
111
+ const file = line.slice(3);
112
+ return file.includes(' -> ') ? file.split(' -> ').pop() ?? file : file;
113
+ })
114
+ .filter(Boolean);
115
+ }
116
+ async function diffBinary(projectPath) {
117
+ await git(projectPath, ['add', '-A']);
118
+ return git(projectPath, ['diff', '--cached', '--binary', 'HEAD']);
119
+ }
120
+ async function applyDiff(projectPath, patchRoot, diff) {
121
+ const patchPath = join(patchRoot, 'winner.patch');
122
+ await writeFile(patchPath, diff, 'utf8');
123
+ await git(projectPath, ['apply', '--3way', '--whitespace=nowarn', patchPath]);
124
+ }
125
+ function scoreCandidate(input) {
126
+ const blockingIssues = input.guards?.results.filter((r) => !r.passed && r.blocking).flatMap((r) => r.issues) ?? [];
127
+ const hasDiff = input.filesChanged.length > 0;
128
+ const guardsPass = blockingIssues.length === 0;
129
+ const eligible = input.result.success && hasDiff && guardsPass && !input.error;
130
+ let score = 0;
131
+ if (input.result.success)
132
+ score += 100;
133
+ if (hasDiff)
134
+ score += 25;
135
+ if (guardsPass)
136
+ score += 25;
137
+ if (typeof input.result.confidencePercent === 'number')
138
+ score += Math.max(0, Math.min(100, input.result.confidencePercent)) / 10;
139
+ score -= Math.min(input.filesChanged.length, 20);
140
+ score -= Math.min(Math.round(input.durationMs / 30_000), 20);
141
+ if (input.error)
142
+ score -= 100;
143
+ if (blockingIssues.length > 0)
144
+ score -= 50 + blockingIssues.length * 5;
145
+ return { score, eligible };
146
+ }
147
+ // Seed the project's pre-existing uncommitted state into a freshly-cloned
148
+ // sandbox and commit it, so the candidate continues from the dirty base and the
149
+ // winner's promoted diff is the incremental delta (not base+delta, which would
150
+ // double-apply onto the already-dirty project).
151
+ async function seedBaseline(sandbox, root, id, baseline) {
152
+ if (!baseline.trim())
153
+ return;
154
+ const patchPath = join(root, `${id}-base.patch`);
155
+ await writeFile(patchPath, baseline, 'utf8');
156
+ await git(sandbox, ['apply', '--whitespace=nowarn', patchPath]);
157
+ await rm(patchPath, { force: true });
158
+ await git(sandbox, ['add', '-A']);
159
+ await git(sandbox, [
160
+ '-c', 'user.email=fanout@openswarm.local',
161
+ '-c', 'user.name=OpenSwarm Fanout',
162
+ 'commit', '--quiet', '--no-verify', '-m', 'fanout: seed pre-existing worktree state',
163
+ ]);
164
+ }
165
+ async function runCandidate(options, candidate, index, root, baseline) {
166
+ const id = safeCandidateId(candidate.id, index);
167
+ const started = Date.now();
168
+ let sandbox = '';
169
+ try {
170
+ sandbox = await cloneSandbox(options.projectPath, root, id, sharedPathModeFor(options.linkSharedPaths));
171
+ await seedBaseline(sandbox, root, id, baseline);
172
+ const result = await runWorker({
173
+ ...options.baseWorkerOptions,
174
+ projectPath: sandbox,
175
+ model: candidate.model ?? options.baseWorkerOptions.model,
176
+ adapterName: candidate.adapter ?? options.baseWorkerOptions.adapterName,
177
+ reasoningEffort: candidate.reasoningEffort ?? options.baseWorkerOptions.reasoningEffort,
178
+ maxTurns: candidate.maxTurns ?? options.baseWorkerOptions.maxTurns,
179
+ nudgeMaxOnNoEdit: candidate.nudgeMaxOnNoEdit ?? options.baseWorkerOptions.nudgeMaxOnNoEdit,
180
+ webTools: candidate.webTools ?? options.baseWorkerOptions.webTools,
181
+ memoryTools: candidate.memoryTools ?? options.baseWorkerOptions.memoryTools,
182
+ processContext: options.baseWorkerOptions.processContext
183
+ ? { ...options.baseWorkerOptions.processContext, stage: `worker:${id}` }
184
+ : undefined,
185
+ onLog: (line) => options.onLog?.(`[${id}] ${line}`),
186
+ });
187
+ const files = await changedFiles(sandbox);
188
+ const guards = options.guards && files.length > 0
189
+ ? await runGuards({ ...result, filesChanged: files }, sandbox, options.guards)
190
+ : undefined;
191
+ const scored = scoreCandidate({ result, filesChanged: files, guards, durationMs: Date.now() - started });
192
+ return {
193
+ id,
194
+ projectPath: sandbox,
195
+ result,
196
+ filesChanged: files,
197
+ guards,
198
+ durationMs: Date.now() - started,
199
+ score: scored.score,
200
+ eligible: scored.eligible,
201
+ };
202
+ }
203
+ catch (err) {
204
+ const result = {
205
+ success: false,
206
+ summary: `Fan-out candidate ${id} failed`,
207
+ filesChanged: [],
208
+ commands: [],
209
+ output: '',
210
+ error: err instanceof Error ? err.message : String(err),
211
+ };
212
+ const scored = scoreCandidate({ result, filesChanged: [], durationMs: Date.now() - started, error: result.error });
213
+ return {
214
+ id,
215
+ projectPath: sandbox,
216
+ result,
217
+ filesChanged: [],
218
+ durationMs: Date.now() - started,
219
+ score: scored.score,
220
+ eligible: false,
221
+ error: result.error,
222
+ };
223
+ }
224
+ }
225
+ export async function runWorkerFanout(options) {
226
+ if (options.candidates.length < 2) {
227
+ return { candidates: [], fallbackReason: 'fan-out needs at least two candidates' };
228
+ }
229
+ // A dirty worktree is expected on self-repair retries (the gate scores fan-out
230
+ // mainly on retry signals). Rather than bail, snapshot the uncommitted state
231
+ // and seed it into each sandbox so candidates continue from it and only the
232
+ // incremental winner diff is promoted back. Falls back to '' (clean) on error.
233
+ const baseline = await captureBaselinePatch(options.projectPath).catch(() => '');
234
+ const root = await mkdtemp(join(tmpdir(), 'openswarm-worker-fanout-'));
235
+ try {
236
+ options.onLog?.(`[fanout] launching ${options.candidates.length} candidate worker(s)${baseline.trim() ? ' (seeded from dirty worktree)' : ''}`);
237
+ const settled = await runPool(options.candidates, options.concurrency, (candidate, index) => runCandidate(options, candidate, index, root, baseline), (item) => {
238
+ if (item.value) {
239
+ options.onLog?.(`[fanout] ${item.value.id}: score=${item.value.score.toFixed(1)} eligible=${item.value.eligible} files=${item.value.filesChanged.length}`);
240
+ }
241
+ else if (item.error) {
242
+ options.onLog?.(`[fanout] candidate ${item.index + 1} failed: ${item.error instanceof Error ? item.error.message : String(item.error)}`);
243
+ }
244
+ });
245
+ const candidates = settled
246
+ .map((item) => item.value)
247
+ .filter((item) => Boolean(item));
248
+ const winner = candidates
249
+ .filter((candidate) => candidate.eligible)
250
+ .sort((a, b) => b.score - a.score)[0];
251
+ if (!winner) {
252
+ return { candidates, fallbackReason: 'no eligible fan-out candidate produced a guarded diff' };
253
+ }
254
+ const diff = await diffBinary(winner.projectPath);
255
+ if (!diff.trim()) {
256
+ return { candidates, fallbackReason: 'selected fan-out candidate had no diff to promote' };
257
+ }
258
+ await applyDiff(options.projectPath, root, diff);
259
+ const promotedFiles = await changedFiles(options.projectPath);
260
+ winner.result = {
261
+ ...winner.result,
262
+ summary: `[fanout:${winner.id}] ${winner.result.summary}`,
263
+ filesChanged: promotedFiles,
264
+ };
265
+ options.onLog?.(`[fanout] promoted ${winner.id}: ${promotedFiles.length} file(s)`);
266
+ return { winner, candidates };
267
+ }
268
+ finally {
269
+ if (!options.keepSandboxes) {
270
+ await rm(root, { recursive: true, force: true });
271
+ }
272
+ else {
273
+ options.onLog?.(`[fanout] kept sandboxes at ${root}`);
274
+ }
275
+ }
276
+ }
277
+ //# sourceMappingURL=workerFanout.js.map