@intrect/openswarm 0.17.1 → 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 (336) 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 +7 -4
  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 +35 -31
  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 +22 -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 +2 -1
  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 +2 -1
  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 +2 -1
  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 +62 -5
  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/auth/linearPkce.d.ts.map +1 -1
  86. package/dist/auth/linearPkce.js +1 -12
  87. package/dist/auth/linearPkce.js.map +1 -1
  88. package/dist/auth/oauthPkce.d.ts.map +1 -1
  89. package/dist/auth/oauthPkce.js +1 -14
  90. package/dist/auth/oauthPkce.js.map +1 -1
  91. package/dist/auth/oauthStore.d.ts.map +1 -1
  92. package/dist/auth/oauthStore.js +28 -2
  93. package/dist/auth/oauthStore.js.map +1 -1
  94. package/dist/auth/openBrowser.d.ts +2 -0
  95. package/dist/auth/openBrowser.d.ts.map +1 -0
  96. package/dist/auth/openBrowser.js +32 -0
  97. package/dist/auth/openBrowser.js.map +1 -0
  98. package/dist/auth/openrouterPkce.d.ts.map +1 -1
  99. package/dist/auth/openrouterPkce.js +1 -14
  100. package/dist/auth/openrouterPkce.js.map +1 -1
  101. package/dist/automation/autonomousRunner.d.ts +24 -6
  102. package/dist/automation/autonomousRunner.d.ts.map +1 -1
  103. package/dist/automation/autonomousRunner.js +242 -41
  104. package/dist/automation/autonomousRunner.js.map +1 -1
  105. package/dist/automation/backlogGrooming.d.ts +52 -0
  106. package/dist/automation/backlogGrooming.d.ts.map +1 -0
  107. package/dist/automation/backlogGrooming.js +231 -0
  108. package/dist/automation/backlogGrooming.js.map +1 -0
  109. package/dist/automation/runnerExecution.d.ts +1 -1
  110. package/dist/automation/runnerExecution.d.ts.map +1 -1
  111. package/dist/automation/runnerExecution.js +31 -9
  112. package/dist/automation/runnerExecution.js.map +1 -1
  113. package/dist/automation/runnerTypes.d.ts +3 -1
  114. package/dist/automation/runnerTypes.d.ts.map +1 -1
  115. package/dist/automation/taskSource.d.ts +6 -3
  116. package/dist/automation/taskSource.d.ts.map +1 -1
  117. package/dist/automation/taskSource.js +5 -0
  118. package/dist/automation/taskSource.js.map +1 -1
  119. package/dist/cli/daemon.d.ts +20 -3
  120. package/dist/cli/daemon.d.ts.map +1 -1
  121. package/dist/cli/daemon.js +42 -2
  122. package/dist/cli/daemon.js.map +1 -1
  123. package/dist/cli/fixBoard.d.ts +14 -0
  124. package/dist/cli/fixBoard.d.ts.map +1 -0
  125. package/dist/cli/fixBoard.js +32 -0
  126. package/dist/cli/fixBoard.js.map +1 -0
  127. package/dist/cli/fixCommand.d.ts +8 -0
  128. package/dist/cli/fixCommand.d.ts.map +1 -1
  129. package/dist/cli/fixCommand.js +47 -8
  130. package/dist/cli/fixCommand.js.map +1 -1
  131. package/dist/cli/memoryCommand.d.ts +37 -0
  132. package/dist/cli/memoryCommand.d.ts.map +1 -0
  133. package/dist/cli/memoryCommand.js +156 -0
  134. package/dist/cli/memoryCommand.js.map +1 -0
  135. package/dist/cli/reviewAudit.d.ts +68 -0
  136. package/dist/cli/reviewAudit.d.ts.map +1 -1
  137. package/dist/cli/reviewAudit.js +147 -4
  138. package/dist/cli/reviewAudit.js.map +1 -1
  139. package/dist/cli/reviewMaxCommand.d.ts +2 -0
  140. package/dist/cli/reviewMaxCommand.d.ts.map +1 -1
  141. package/dist/cli/reviewMaxCommand.js +61 -33
  142. package/dist/cli/reviewMaxCommand.js.map +1 -1
  143. package/dist/cli.js +68 -13
  144. package/dist/cli.js.map +1 -1
  145. package/dist/core/config.d.ts +413 -0
  146. package/dist/core/config.d.ts.map +1 -1
  147. package/dist/core/config.js +51 -5
  148. package/dist/core/config.js.map +1 -1
  149. package/dist/core/eventHub.d.ts +22 -0
  150. package/dist/core/eventHub.d.ts.map +1 -1
  151. package/dist/core/eventHub.js +1 -0
  152. package/dist/core/eventHub.js.map +1 -1
  153. package/dist/core/providerOverride.d.ts +9 -0
  154. package/dist/core/providerOverride.d.ts.map +1 -1
  155. package/dist/core/providerOverride.js +12 -0
  156. package/dist/core/providerOverride.js.map +1 -1
  157. package/dist/core/service.d.ts.map +1 -1
  158. package/dist/core/service.js +8 -2
  159. package/dist/core/service.js.map +1 -1
  160. package/dist/core/types.d.ts +61 -1
  161. package/dist/core/types.d.ts.map +1 -1
  162. package/dist/linear/linear.d.ts +2 -1
  163. package/dist/linear/linear.d.ts.map +1 -1
  164. package/dist/linear/linear.js +34 -12
  165. package/dist/linear/linear.js.map +1 -1
  166. package/dist/linear/projectUpdater.d.ts.map +1 -1
  167. package/dist/linear/projectUpdater.js +40 -13
  168. package/dist/linear/projectUpdater.js.map +1 -1
  169. package/dist/locale/prompts/en.d.ts.map +1 -1
  170. package/dist/locale/prompts/en.js +15 -5
  171. package/dist/locale/prompts/en.js.map +1 -1
  172. package/dist/locale/prompts/ko.d.ts.map +1 -1
  173. package/dist/locale/prompts/ko.js +15 -5
  174. package/dist/locale/prompts/ko.js.map +1 -1
  175. package/dist/mcp/mcpClient.d.ts.map +1 -1
  176. package/dist/mcp/mcpClient.js +85 -4
  177. package/dist/mcp/mcpClient.js.map +1 -1
  178. package/dist/memory/compaction.d.ts +2 -2
  179. package/dist/memory/compaction.d.ts.map +1 -1
  180. package/dist/memory/compaction.js +22 -17
  181. package/dist/memory/compaction.js.map +1 -1
  182. package/dist/memory/index.d.ts +3 -3
  183. package/dist/memory/index.js +3 -3
  184. package/dist/memory/memoryCore.d.ts +16 -27
  185. package/dist/memory/memoryCore.d.ts.map +1 -1
  186. package/dist/memory/memoryCore.js +160 -102
  187. package/dist/memory/memoryCore.js.map +1 -1
  188. package/dist/memory/memoryFilters.d.ts +8 -0
  189. package/dist/memory/memoryFilters.d.ts.map +1 -0
  190. package/dist/memory/memoryFilters.js +26 -0
  191. package/dist/memory/memoryFilters.js.map +1 -0
  192. package/dist/memory/memoryOps.d.ts +7 -23
  193. package/dist/memory/memoryOps.d.ts.map +1 -1
  194. package/dist/memory/memoryOps.js +54 -117
  195. package/dist/memory/memoryOps.js.map +1 -1
  196. package/dist/memory/repoKnowledge.d.ts.map +1 -1
  197. package/dist/memory/repoKnowledge.js +48 -3
  198. package/dist/memory/repoKnowledge.js.map +1 -1
  199. package/dist/notify/notifier.d.ts.map +1 -1
  200. package/dist/notify/notifier.js +23 -16
  201. package/dist/notify/notifier.js.map +1 -1
  202. package/dist/orchestration/conflictDetector.d.ts.map +1 -1
  203. package/dist/orchestration/conflictDetector.js +48 -12
  204. package/dist/orchestration/conflictDetector.js.map +1 -1
  205. package/dist/orchestration/taskParser.d.ts.map +1 -1
  206. package/dist/orchestration/taskParser.js +18 -7
  207. package/dist/orchestration/taskParser.js.map +1 -1
  208. package/dist/orchestration/taskScheduler.d.ts +5 -0
  209. package/dist/orchestration/taskScheduler.d.ts.map +1 -1
  210. package/dist/orchestration/taskScheduler.js +37 -12
  211. package/dist/orchestration/taskScheduler.js.map +1 -1
  212. package/dist/registry/bsDetector.d.ts.map +1 -1
  213. package/dist/registry/bsDetector.js +23 -3
  214. package/dist/registry/bsDetector.js.map +1 -1
  215. package/dist/registry/entityScanner.d.ts.map +1 -1
  216. package/dist/registry/entityScanner.js +10 -5
  217. package/dist/registry/entityScanner.js.map +1 -1
  218. package/dist/registry/graphql/resolvers.d.ts +1 -1
  219. package/dist/registry/graphql/resolvers.d.ts.map +1 -1
  220. package/dist/registry/graphql/resolvers.js +92 -15
  221. package/dist/registry/graphql/resolvers.js.map +1 -1
  222. package/dist/registry/memoryBridge.js +4 -4
  223. package/dist/registry/memoryBridge.js.map +1 -1
  224. package/dist/registry/sqliteStore.d.ts +1 -1
  225. package/dist/registry/sqliteStore.d.ts.map +1 -1
  226. package/dist/registry/sqliteStore.js +20 -5
  227. package/dist/registry/sqliteStore.js.map +1 -1
  228. package/dist/support/chatMemory.js +1 -1
  229. package/dist/support/chatMemory.js.map +1 -1
  230. package/dist/support/dashboardHtml.d.ts +1 -1
  231. package/dist/support/dashboardHtml.d.ts.map +1 -1
  232. package/dist/support/dashboardHtml.js +12 -0
  233. package/dist/support/dashboardHtml.js.map +1 -1
  234. package/dist/support/gitTracker.d.ts +30 -3
  235. package/dist/support/gitTracker.d.ts.map +1 -1
  236. package/dist/support/gitTracker.js +108 -29
  237. package/dist/support/gitTracker.js.map +1 -1
  238. package/dist/support/projectMapper.d.ts.map +1 -1
  239. package/dist/support/projectMapper.js +5 -0
  240. package/dist/support/projectMapper.js.map +1 -1
  241. package/dist/support/repoMetadata.d.ts +10 -0
  242. package/dist/support/repoMetadata.d.ts.map +1 -1
  243. package/dist/support/repoMetadata.js +31 -0
  244. package/dist/support/repoMetadata.js.map +1 -1
  245. package/dist/support/rollback.d.ts.map +1 -1
  246. package/dist/support/rollback.js +10 -3
  247. package/dist/support/rollback.js.map +1 -1
  248. package/dist/support/timeWindow.d.ts.map +1 -1
  249. package/dist/support/timeWindow.js +46 -40
  250. package/dist/support/timeWindow.js.map +1 -1
  251. package/dist/support/updateNotifier.d.ts +12 -0
  252. package/dist/support/updateNotifier.d.ts.map +1 -1
  253. package/dist/support/updateNotifier.js +71 -0
  254. package/dist/support/updateNotifier.js.map +1 -1
  255. package/dist/support/web.d.ts.map +1 -1
  256. package/dist/support/web.js +74 -8
  257. package/dist/support/web.js.map +1 -1
  258. package/dist/support/worktreeManager.d.ts +33 -0
  259. package/dist/support/worktreeManager.d.ts.map +1 -1
  260. package/dist/support/worktreeManager.js +172 -2
  261. package/dist/support/worktreeManager.js.map +1 -1
  262. package/dist/taskState/store.d.ts.map +1 -1
  263. package/dist/taskState/store.js +2 -3
  264. package/dist/taskState/store.js.map +1 -1
  265. package/dist/tui/App.js +1 -1
  266. package/dist/tui/App.js.map +1 -1
  267. package/dist/tui/chatModel.d.ts +2 -4
  268. package/dist/tui/chatModel.d.ts.map +1 -1
  269. package/dist/tui/chatModel.js +5 -10
  270. package/dist/tui/chatModel.js.map +1 -1
  271. package/dist/tui/components/AuditBoard.d.ts +3 -2
  272. package/dist/tui/components/AuditBoard.d.ts.map +1 -1
  273. package/dist/tui/components/AuditBoard.js +13 -4
  274. package/dist/tui/components/AuditBoard.js.map +1 -1
  275. package/dist/tui/components/ChatInput.js +1 -1
  276. package/dist/tui/components/ChatLog.js +1 -1
  277. package/dist/tui/components/ChatLog.js.map +1 -1
  278. package/dist/tui/components/DataTable.d.ts +3 -1
  279. package/dist/tui/components/DataTable.d.ts.map +1 -1
  280. package/dist/tui/components/DataTable.js +22 -4
  281. package/dist/tui/components/DataTable.js.map +1 -1
  282. package/dist/tui/components/LiveLog.js +1 -1
  283. package/dist/tui/components/LiveLog.js.map +1 -1
  284. package/dist/tui/components/StageTimeline.d.ts +1 -1
  285. package/dist/tui/components/StageTimeline.d.ts.map +1 -1
  286. package/dist/tui/components/StageTimeline.js +6 -3
  287. package/dist/tui/components/StageTimeline.js.map +1 -1
  288. package/dist/tui/components/SubagentTree.d.ts +6 -6
  289. package/dist/tui/components/SubagentTree.d.ts.map +1 -1
  290. package/dist/tui/components/SubagentTree.js +39 -7
  291. package/dist/tui/components/SubagentTree.js.map +1 -1
  292. package/dist/tui/eventCoalescer.d.ts +29 -0
  293. package/dist/tui/eventCoalescer.d.ts.map +1 -0
  294. package/dist/tui/eventCoalescer.js +56 -0
  295. package/dist/tui/eventCoalescer.js.map +1 -0
  296. package/dist/tui/hooks/useMonitor.d.ts +3 -1
  297. package/dist/tui/hooks/useMonitor.d.ts.map +1 -1
  298. package/dist/tui/hooks/useMonitor.js +17 -1
  299. package/dist/tui/hooks/useMonitor.js.map +1 -1
  300. package/dist/tui/hooks/usePipelineEvents.d.ts +1 -1
  301. package/dist/tui/hooks/usePipelineEvents.d.ts.map +1 -1
  302. package/dist/tui/hooks/usePipelineEvents.js +18 -4
  303. package/dist/tui/hooks/usePipelineEvents.js.map +1 -1
  304. package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -1
  305. package/dist/tui/hooks/useTerminalSize.js +3 -1
  306. package/dist/tui/hooks/useTerminalSize.js.map +1 -1
  307. package/dist/tui/monitorApi.d.ts +4 -4
  308. package/dist/tui/monitorApi.d.ts.map +1 -1
  309. package/dist/tui/monitorApi.js +13 -7
  310. package/dist/tui/monitorApi.js.map +1 -1
  311. package/dist/tui/monitorRows.d.ts +41 -2
  312. package/dist/tui/monitorRows.d.ts.map +1 -1
  313. package/dist/tui/monitorRows.js +86 -7
  314. package/dist/tui/monitorRows.js.map +1 -1
  315. package/dist/tui/panels/ChatPanel.d.ts.map +1 -1
  316. package/dist/tui/panels/ChatPanel.js +70 -15
  317. package/dist/tui/panels/ChatPanel.js.map +1 -1
  318. package/dist/tui/panels/MonitorPanel.d.ts +2 -1
  319. package/dist/tui/panels/MonitorPanel.d.ts.map +1 -1
  320. package/dist/tui/panels/MonitorPanel.js +2 -2
  321. package/dist/tui/panels/MonitorPanel.js.map +1 -1
  322. package/dist/tui/panels/PipelinePanel.d.ts.map +1 -1
  323. package/dist/tui/panels/PipelinePanel.js +6 -1
  324. package/dist/tui/panels/PipelinePanel.js.map +1 -1
  325. package/dist/tui/pipelineEvents.d.ts +14 -0
  326. package/dist/tui/pipelineEvents.d.ts.map +1 -1
  327. package/dist/tui/pipelineEvents.js +89 -1
  328. package/dist/tui/pipelineEvents.js.map +1 -1
  329. package/dist/tui/sse.d.ts.map +1 -1
  330. package/dist/tui/sse.js +29 -3
  331. package/dist/tui/sse.js.map +1 -1
  332. package/dist/tui/subagentTree.d.ts +26 -3
  333. package/dist/tui/subagentTree.d.ts.map +1 -1
  334. package/dist/tui/subagentTree.js +89 -14
  335. package/dist/tui/subagentTree.js.map +1 -1
  336. package/package.json +1 -1
@@ -5,8 +5,8 @@
5
5
  // ============================================
6
6
  import { createServer } from 'node:http';
7
7
  import { randomBytes, createHash } from 'node:crypto';
8
- import { exec } from 'node:child_process';
9
8
  import { AuthProfileStore } from './oauthStore.js';
9
+ import { openBrowser } from './openBrowser.js';
10
10
  // ----- Constants -----
11
11
  const OPENROUTER_AUTH_ENDPOINT = 'https://openrouter.ai/auth';
12
12
  const OPENROUTER_KEYS_ENDPOINT = 'https://openrouter.ai/api/v1/auth/keys';
@@ -24,19 +24,6 @@ function generateCodeChallenge(verifier) {
24
24
  function generateState() {
25
25
  return randomBytes(32).toString('hex');
26
26
  }
27
- // ----- Browser open (cross-platform) -----
28
- function openBrowser(url) {
29
- const platform = process.platform;
30
- const cmd = platform === 'darwin' ? 'open' :
31
- platform === 'win32' ? 'start' :
32
- 'xdg-open';
33
- exec(`${cmd} "${url}"`, (err) => {
34
- if (err) {
35
- console.error(`[Auth] 브라우저를 자동으로 열 수 없습니다. 직접 열어주세요:`);
36
- console.error(url);
37
- }
38
- });
39
- }
40
27
  /**
41
28
  * OpenRouter PKCE 흐름 실행.
42
29
  *
@@ -1 +1 @@
1
- {"version":3,"file":"openrouterPkce.js","sourceRoot":"","sources":["../../src/auth/openrouterPkce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openrouterPkce.js","sourceRoot":"","sources":["../../src/auth/openrouterPkce.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mCAAmC;AACnC,2DAA2D;AAC3D,2CAA2C;AAC3C,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wBAAwB;AAExB,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,wBAAwB,GAAG,wCAAwC,CAAC;AAC1E,MAAM,qBAAqB,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAC3E,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACjC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAElD,wDAAwD;AAExD,SAAS,oBAAoB;IAC3B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAaD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAiC,EAAE;IAEnC,MAAM,EAAE,IAAI,GAAG,qBAAqB,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,WAAW,GAAG,oBAAoB,IAAI,gBAAgB,CAAC;IAE7D,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC1D,sEAAsE;IACtE,gFAAgF;IAChF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC;QACrC,YAAY,EAAE,WAAW;QACzB,cAAc,EAAE,aAAa;QAC7B,qBAAqB,EAAE,MAAM;QAC7B,KAAK;KACN,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,wBAAwB,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;IAEvE,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3D,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAErB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;YAC9E,IAAI,OAAO,EAAE,CAAC;gBACZ,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAEhE,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBACtC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE5C,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACjD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,wBAAwB,EAAE;oBACxD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI;wBACJ,aAAa,EAAE,YAAY;wBAC3B,qBAAqB,EAAE,MAAM;qBAC9B,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACzD,MAAM,IAAI,KAAK,CACb,wBAAwB,WAAW,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACxE,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAGxC,CAAC;gBAEF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBAC1E,CAAC;gBAED,MAAM,MAAM,GAAyB;oBACnC,MAAM,EAAE,OAAO,CAAC,GAAG;oBACnB,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;iBACrC,CAAC;gBAEF,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBACvB,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,wDAAwD,IAAI,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,WAAW,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,MAAM,CAAC,gBAAgB;QAChC,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,IAAa;IAC/D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,MAAM,CAAC,gBAAgB;QAChC,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC,MAAM;KACzB,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,qCAAqC,sBAAsB,EAAE,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B,SAAS,WAAW;IAClB,OAAO;;;;;uHAK8G,CAAC;AACxH,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO;;;;;6CAKoC,UAAU,CAAC,KAAK,CAAC,gDAAgD,CAAC;AAC/G,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtG,CAAC"}
@@ -4,10 +4,13 @@ import type { AdapterName } from '../adapters/types.js';
4
4
  export { setNotifier, setTaskSource } from './runnerExecution.js';
5
5
  export type { AutonomousConfig, RunnerState } from './runnerTypes.js';
6
6
  export type { ProjectInfo } from './runnerState.js';
7
+ export declare function decisionSelectionBudget(availableSlots: number, candidateCount: number): number;
7
8
  export declare class AutonomousRunner {
8
9
  private config;
9
10
  private engine;
10
11
  private scheduler;
12
+ /** Adapter default-model cache for the dashboard PAIR bar (INT-2393). */
13
+ private defaultModelCache;
11
14
  private cronJob;
12
15
  private state;
13
16
  private _heartbeatRunning;
@@ -30,6 +33,9 @@ export declare class AutonomousRunner {
30
33
  * untouched stays the legacy "run all allowed projects" fallback. (INT-2207)
31
34
  */
32
35
  private shouldFilterByEnabled;
36
+ private sameProjectCandidateCap;
37
+ private currentProjectLoad;
38
+ private canQueueProjectCandidate;
33
39
  /** Persist the project selection so it survives a restart. No-op under dryRun
34
40
  * (tests) to avoid touching the real ~/.openswarm. (INT-2208) */
35
41
  private persistSelection;
@@ -44,6 +50,7 @@ export declare class AutonomousRunner {
44
50
  private static readonly MAX_RETRY_COUNT;
45
51
  private rateLimitUntil;
46
52
  private unresolvableIssueIds;
53
+ private lastBacklogGroomingAt;
47
54
  private get taskStateRef();
48
55
  private loadTaskState;
49
56
  private saveTaskState;
@@ -72,8 +79,19 @@ export declare class AutonomousRunner {
72
79
  private refreshKnowledgeGraphs;
73
80
  /** Send system message to dashboard LIVE LOG */
74
81
  private syslog;
82
+ private lastSkipSummary;
83
+ /**
84
+ * Log unmapped/disabled project skips as one aggregate line per category,
85
+ * and stay silent while the summary is identical to the previous heartbeat.
86
+ */
87
+ private syslogSkipSummary;
88
+ private groupTasksForGrooming;
89
+ private maybeRunBacklogGrooming;
75
90
  heartbeat(): Promise<void>;
76
91
  private heartbeatParallel;
92
+ private resolveRunnableCandidates;
93
+ private detectSafeCandidateIds;
94
+ private enqueueCandidate;
77
95
  /** Execute task in pair mode */
78
96
  private executeTaskPairMode;
79
97
  private getExecCtx;
@@ -104,29 +122,29 @@ export declare class AutonomousRunner {
104
122
  };
105
123
  getTurboMode(): boolean;
106
124
  setTurboMode(enabled: boolean): void;
107
- getAdapterSummary(): {
125
+ getAdapterSummary(): Promise<{
108
126
  defaultAdapter: "codex" | "local" | "codex-responses" | "gpt" | "lmstudio" | "openrouter" | "claude";
109
127
  worker: {
110
- adapter: "codex" | "local" | "codex-responses" | "gpt" | "lmstudio" | "openrouter" | "claude";
128
+ adapter: import("../core/types.js").AgentAdapterName;
111
129
  model: string | undefined;
112
130
  enabled: boolean;
113
131
  };
114
132
  reviewer: {
115
- adapter: "codex" | "local" | "codex-responses" | "gpt" | "lmstudio" | "openrouter" | "claude";
133
+ adapter: import("../core/types.js").AgentAdapterName;
116
134
  model: string | undefined;
117
135
  enabled: boolean;
118
136
  };
119
137
  tester: {
120
- adapter: "codex" | "local" | "codex-responses" | "gpt" | "lmstudio" | "openrouter" | "claude";
138
+ adapter: import("../core/types.js").AgentAdapterName;
121
139
  model: string | undefined;
122
140
  enabled: boolean;
123
141
  } | undefined;
124
142
  documenter: {
125
- adapter: "codex" | "local" | "codex-responses" | "gpt" | "lmstudio" | "openrouter" | "claude";
143
+ adapter: import("../core/types.js").AgentAdapterName;
126
144
  model: string | undefined;
127
145
  enabled: boolean;
128
146
  } | undefined;
129
- };
147
+ }>;
130
148
  switchProvider(adapter: AdapterName): void;
131
149
  pauseScheduler(): void;
132
150
  resumeScheduler(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"autonomousRunner.d.ts","sourceRoot":"","sources":["../../src/automation/autonomousRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autonomousRunner.d.ts","sourceRoot":"","sources":["../../src/automation/autonomousRunner.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { getDecisionEngine, classifyStuck, } from '../orchestration/decisionEngi
7
7
  import { checkWorkAllowed } from '../support/timeWindow.js';
8
8
  import { recordTaskOutcome } from '../memory/repoKnowledge.js';
9
9
  import { updateProjectAfterTask } from '../linear/projectUpdater.js';
10
- import { initScheduler } from '../orchestration/taskScheduler.js';
10
+ import { initScheduler, normalizeProjectPath } from '../orchestration/taskScheduler.js';
11
11
  import { formatPipelineResultEmbed, } from '../agents/pairPipeline.js';
12
12
  import * as planner from '../support/planner.js';
13
13
  import * as execution from './runnerExecution.js';
@@ -22,13 +22,25 @@ import { STUCK_LABEL } from '../linear/index.js';
22
22
  import { refreshGraph, toProjectSlug } from '../knowledge/index.js';
23
23
  import { checkAllMonitors, getActiveMonitors } from './longRunningMonitor.js';
24
24
  import { detectFileConflicts } from '../orchestration/conflictDetector.js';
25
+ import { resolveAdapterDefaultModel } from '../agents/stageModelResolver.js';
26
+ import { applyBacklogGrooming, filterGroomableTasks, runBacklogGroomingPlanner, summarizeGroomingDecision, } from './backlogGrooming.js';
25
27
  // Re-export types and integration setters (used by service.ts)
26
28
  export { setNotifier, setTaskSource } from './runnerExecution.js';
27
29
  let runnerInstance = null;
30
+ const DECISION_SELECTION_OVERSAMPLE = 3;
31
+ export function decisionSelectionBudget(availableSlots, candidateCount) {
32
+ const slots = Math.max(0, Math.floor(availableSlots));
33
+ const candidates = Math.max(0, Math.floor(candidateCount));
34
+ if (slots === 0 || candidates === 0)
35
+ return 0;
36
+ return Math.min(candidates, Math.max(slots, slots * DECISION_SELECTION_OVERSAMPLE));
37
+ }
28
38
  export class AutonomousRunner {
29
39
  config;
30
40
  engine;
31
41
  scheduler;
42
+ /** Adapter default-model cache for the dashboard PAIR bar (INT-2393). */
43
+ defaultModelCache = new Map();
32
44
  cronJob = null;
33
45
  state = {
34
46
  isRunning: false,
@@ -80,6 +92,30 @@ export class AutonomousRunner {
80
92
  shouldFilterByEnabled() {
81
93
  return this.projectSelectionTouched || this.enabledProjects.size > 0;
82
94
  }
95
+ sameProjectCandidateCap() {
96
+ const sameProjectParallel = (this.config.allowSameProjectConcurrent ?? true) && (this.config.worktreeMode ?? false);
97
+ if (!sameProjectParallel || this.config.maxConcurrentPerProject == null)
98
+ return null;
99
+ const cap = Math.floor(this.config.maxConcurrentPerProject);
100
+ const maxConcurrent = this.config.maxConcurrentTasks ?? 1;
101
+ return Math.max(1, Math.min(cap, maxConcurrent));
102
+ }
103
+ currentProjectLoad(projectPath) {
104
+ const target = normalizeProjectPath(projectPath);
105
+ const queued = this.scheduler.getQueuedTasks()
106
+ .filter(task => normalizeProjectPath(task.projectPath) === target)
107
+ .length;
108
+ const running = this.scheduler.getRunningTasks()
109
+ .filter(task => normalizeProjectPath(task.projectPath) === target)
110
+ .length;
111
+ return queued + running;
112
+ }
113
+ canQueueProjectCandidate(projectPath) {
114
+ const cap = this.sameProjectCandidateCap();
115
+ if (cap == null)
116
+ return true;
117
+ return this.currentProjectLoad(projectPath) < cap;
118
+ }
83
119
  /** Persist the project selection so it survives a restart. No-op under dryRun
84
120
  * (tests) to avoid touching the real ~/.openswarm. (INT-2208) */
85
121
  persistSelection() {
@@ -107,6 +143,7 @@ export class AutonomousRunner {
107
143
  // the first resolve failure so they aren't re-picked every heartbeat (which
108
144
  // starved other actionable tasks — they were top-priority but never runnable). (INT-1875)
109
145
  unresolvableIssueIds = new Set();
146
+ lastBacklogGroomingAt = 0;
110
147
  get taskStateRef() {
111
148
  return {
112
149
  completedTaskIds: this.completedTaskIds,
@@ -158,6 +195,7 @@ export class AutonomousRunner {
158
195
  this.scheduler = initScheduler({
159
196
  maxConcurrent: config.maxConcurrentTasks ?? 1,
160
197
  allowSameProjectConcurrent: config.allowSameProjectConcurrent ?? true,
198
+ maxConcurrentPerProject: config.maxConcurrentPerProject,
161
199
  worktreeMode: config.worktreeMode ?? false,
162
200
  });
163
201
  // Set up scheduler event handling
@@ -630,6 +668,112 @@ export class AutonomousRunner {
630
668
  console.log(`[HB] ${line}`);
631
669
  broadcastEvent({ type: 'log', data: { taskId: 'system', stage: 'heartbeat', line } });
632
670
  }
671
+ lastSkipSummary = '';
672
+ /**
673
+ * Log unmapped/disabled project skips as one aggregate line per category,
674
+ * and stay silent while the summary is identical to the previous heartbeat.
675
+ */
676
+ syslogSkipSummary(unmapped, disabled) {
677
+ const fmt = (m) => [...m.entries()]
678
+ .sort((a, b) => b[1] - a[1])
679
+ .map(([name, n]) => `${name} (${n})`)
680
+ .join(', ');
681
+ const total = (m) => [...m.values()].reduce((a, b) => a + b, 0);
682
+ const lines = [];
683
+ if (unmapped.size > 0) {
684
+ lines.push(` ⚠ Skipped ${total(unmapped)} issue(s) in ${unmapped.size} unmapped project(s): ${fmt(unmapped)} — run \`openswarm add\` to map`);
685
+ }
686
+ if (disabled.size > 0) {
687
+ lines.push(` ⚠ Skipped ${total(disabled)} issue(s) in ${disabled.size} disabled project(s): ${fmt(disabled)}`);
688
+ }
689
+ const summary = lines.join('\n');
690
+ if (summary === this.lastSkipSummary)
691
+ return;
692
+ this.lastSkipSummary = summary;
693
+ for (const line of lines)
694
+ this.syslog(line);
695
+ }
696
+ async groupTasksForGrooming(tasks) {
697
+ const byProjectId = new Map();
698
+ for (const repoPath of this.config.allowedProjects) {
699
+ try {
700
+ const resolvedPath = repoPath.replace('~', process.env.HOME || '');
701
+ const meta = await loadRepoMetadata(resolvedPath);
702
+ if (meta?.linear?.projectId)
703
+ byProjectId.set(meta.linear.projectId, resolvedPath);
704
+ }
705
+ catch {
706
+ // Grooming is advisory; unreadable metadata should not block normal work.
707
+ }
708
+ }
709
+ const groups = new Map();
710
+ for (const task of tasks) {
711
+ const projectPath = task.projectPath
712
+ ?? (task.linearProject?.id ? byProjectId.get(task.linearProject.id) : undefined)
713
+ ?? undefined;
714
+ if (!projectPath)
715
+ continue;
716
+ const list = groups.get(projectPath) ?? [];
717
+ list.push(task);
718
+ groups.set(projectPath, list);
719
+ }
720
+ return groups;
721
+ }
722
+ async maybeRunBacklogGrooming(tasks) {
723
+ const cfg = this.config.backlogGrooming;
724
+ if (!cfg?.enabled)
725
+ return tasks;
726
+ const cadenceMs = Math.max(1, cfg.cadenceHours ?? 24) * 60 * 60 * 1000;
727
+ const now = Date.now();
728
+ if (this.lastBacklogGroomingAt && now - this.lastBacklogGroomingAt < cadenceMs)
729
+ return tasks;
730
+ const source = getTaskSource();
731
+ if (!source) {
732
+ this.syslog('⚠ Backlog grooming skipped: no task source');
733
+ return tasks;
734
+ }
735
+ const groomable = filterGroomableTasks(tasks);
736
+ if (groomable.length === 0)
737
+ return tasks;
738
+ const mode = cfg.mode ?? 'comment';
739
+ const moved = new Set();
740
+ const groups = await this.groupTasksForGrooming(groomable);
741
+ if (groups.size === 0) {
742
+ this.syslog('⚠ Backlog grooming skipped: no mapped project paths');
743
+ return tasks;
744
+ }
745
+ let successfulPlannerRuns = 0;
746
+ for (const [projectPath, groupTasks] of groups) {
747
+ this.syslog(`⟳ Backlog grooming: ${groupTasks.length} issue(s) in ${projectPath.split('/').pop()}`);
748
+ const result = await runBacklogGroomingPlanner({
749
+ tasks: groupTasks,
750
+ projectPath,
751
+ projectName: groupTasks[0]?.linearProject?.name,
752
+ model: cfg.plannerModel ?? this.config.plannerModel,
753
+ timeoutMs: cfg.plannerTimeoutMs ?? this.config.plannerTimeoutMs,
754
+ maxIssues: cfg.maxIssues,
755
+ onLog: (line) => broadcastEvent({ type: 'log', data: { taskId: 'system', stage: 'groom', line } }),
756
+ });
757
+ if (!result.success) {
758
+ this.syslog(`⚠ Backlog grooming failed: ${result.error ?? 'unknown error'}`);
759
+ continue;
760
+ }
761
+ successfulPlannerRuns++;
762
+ const validIssueIds = new Set(groupTasks.map(task => task.issueId || task.id));
763
+ const applied = await applyBacklogGrooming(source, result, mode, validIssueIds);
764
+ for (const issueId of applied.movedIssueIds)
765
+ moved.add(issueId);
766
+ this.syslog(`✓ Backlog grooming: ${result.decisions.length} decision(s), ${applied.commented} comment(s), ${applied.failedComments} comment failure(s), ${applied.updatedDescriptions} description update(s), ${applied.moved} moved, ${applied.skippedUnknown} unknown skipped`);
767
+ for (const decision of result.decisions.slice(0, 5)) {
768
+ this.syslog(` ${summarizeGroomingDecision(decision)}`);
769
+ }
770
+ }
771
+ if (successfulPlannerRuns > 0)
772
+ this.lastBacklogGroomingAt = now;
773
+ if (moved.size === 0)
774
+ return tasks;
775
+ return tasks.filter(task => !moved.has(task.issueId || task.id));
776
+ }
633
777
  async heartbeat() {
634
778
  if (this._heartbeatRunning) {
635
779
  console.log('[AutonomousRunner] Heartbeat already running, skipping');
@@ -696,13 +840,19 @@ export class AutonomousRunner {
696
840
  await reportToDiscord(`⚠️ Linear fetch failed: ${fetchResult.error}`);
697
841
  return;
698
842
  }
699
- const tasks = fetchResult.tasks;
843
+ let tasks = fetchResult.tasks;
700
844
  if (tasks.length === 0) {
701
845
  this.syslog('— No tasks in backlog');
702
846
  return;
703
847
  }
704
848
  this.lastFetchedTasks = tasks;
705
849
  this.syslog(`✓ Found ${tasks.length} tasks from Linear`);
850
+ tasks = await this.maybeRunBacklogGrooming(tasks);
851
+ this.lastFetchedTasks = tasks;
852
+ if (tasks.length === 0) {
853
+ this.syslog('— No executable tasks after backlog grooming');
854
+ return;
855
+ }
706
856
  // Filter out completed and over-retried tasks
707
857
  const filteredTasks = this.filterAlreadyProcessed(tasks);
708
858
  if (filteredTasks.length === 0) {
@@ -777,6 +927,10 @@ export class AutonomousRunner {
777
927
  this.syslog(` ⚠ openswarm.json unreadable for ${repoPath.split('/').pop()}: ${e.message}`);
778
928
  }
779
929
  }
930
+ // Aggregate skip reasons per project instead of logging one line per issue —
931
+ // dozens of unmapped issues used to flood the LIVE LOG every heartbeat.
932
+ const skippedUnmapped = new Map();
933
+ const skippedDisabled = new Map();
780
934
  tasksForEngine = executableTasks.filter(task => {
781
935
  const projName = task.linearProject?.name;
782
936
  const projId = task.linearProject?.id;
@@ -788,15 +942,17 @@ export class AutonomousRunner {
788
942
  ?? this.projectPathCache.get(projName.toLowerCase())
789
943
  ?? this.projectPathCache.get(projName.replace(/-/g, ' '))));
790
944
  if (!cachedPath) {
791
- this.syslog(` ⚠ No repo mapped to Linear project "${projName ?? projId}" run \`openswarm add\` and pick it. Skipping ${task.issueIdentifier}`);
945
+ const key = projName ?? projId ?? 'unknown';
946
+ skippedUnmapped.set(key, (skippedUnmapped.get(key) ?? 0) + 1);
792
947
  return false;
793
948
  }
794
949
  const enabled = this.isProjectEnabled(cachedPath);
795
950
  if (!enabled) {
796
- this.syslog(` ⚠ Project "${projName}" (${cachedPath}) not enabled skipping ${task.issueIdentifier}`);
951
+ skippedDisabled.set(projName ?? cachedPath, (skippedDisabled.get(projName ?? cachedPath) ?? 0) + 1);
797
952
  }
798
953
  return enabled;
799
954
  });
955
+ this.syslogSkipSummary(skippedUnmapped, skippedDisabled);
800
956
  if (tasksForEngine.length === 0) {
801
957
  this.syslog(`⚠ No enabled tasks (${executableTasks.length} executable, ${tasks.length - executableTasks.length} backlog)`);
802
958
  this.syslog(` Path cache: [${[...this.projectPathCache.entries()].map(([k, v]) => `${k}→${v}`).join(', ')}]`);
@@ -805,20 +961,67 @@ export class AutonomousRunner {
805
961
  }
806
962
  this.syslog(` Tasks: ${tasksForEngine.length} enabled-or-uncached / ${executableTasks.length} executable / ${tasks.length} total`);
807
963
  }
808
- // Get validated task list from DecisionEngine
809
- this.syslog('⟳ Decision Engine evaluating tasks...');
810
- const decision = await this.engine.heartbeatMultiple(tasksForEngine, maxSlots, [] // No project exclusion — worktree mode isolates each task
811
- );
812
- console.log(`[AutonomousRunner] Decision: ${decision.action} — ${decision.reason} (${decision.tasks?.length ?? 0} tasks)`);
813
- if (decision.action === 'skip' || decision.action === 'defer') {
814
- this.syslog(`→ Decision: ${decision.action} — ${decision.reason}`);
815
- return;
816
- }
817
- // Add validated tasks to queue (with conflict detection)
818
964
  let enqueuedCount = 0;
819
- // Pre-filter: resolve project paths and skip invalid tasks
965
+ let skippedCount = 0;
966
+ const consideredTaskIds = new Set();
967
+ let pass = 0;
968
+ while (enqueuedCount < maxSlots) {
969
+ const remainingSlots = maxSlots - enqueuedCount;
970
+ const selectableTasks = tasksForEngine.filter(task => !consideredTaskIds.has(task.id));
971
+ const selectionBudget = decisionSelectionBudget(remainingSlots, selectableTasks.length);
972
+ if (selectionBudget === 0)
973
+ break;
974
+ this.syslog(pass === 0
975
+ ? '⟳ Decision Engine evaluating tasks...'
976
+ : `⟳ Backfill pass (${remainingSlots} slot(s) open)...`);
977
+ const decision = await this.engine.heartbeatMultiple(selectableTasks, selectionBudget, [] // No project exclusion — worktree mode isolates each task
978
+ );
979
+ console.log(`[AutonomousRunner] Decision: ${decision.action} — ${decision.reason} (${decision.tasks?.length ?? 0} tasks)`);
980
+ skippedCount += decision.skippedCount ?? 0;
981
+ if (decision.action === 'skip' || decision.action === 'defer') {
982
+ this.syslog(`→ Decision: ${decision.action} — ${decision.reason}`);
983
+ break;
984
+ }
985
+ for (const { task } of decision.tasks) {
986
+ consideredTaskIds.add(task.id);
987
+ }
988
+ const candidates = await this.resolveRunnableCandidates(decision.tasks);
989
+ const safeTasks = await this.detectSafeCandidateIds(candidates);
990
+ const before = enqueuedCount;
991
+ for (const { task, projectPath } of candidates) {
992
+ if (enqueuedCount >= maxSlots)
993
+ break;
994
+ if (!safeTasks.has(task.id))
995
+ continue;
996
+ if (!this.canQueueProjectCandidate(projectPath)) {
997
+ this.syslog(` Project cap reached: ${projectPath}`);
998
+ continue;
999
+ }
1000
+ this.enqueueCandidate(task, projectPath);
1001
+ enqueuedCount++;
1002
+ }
1003
+ pass++;
1004
+ if (enqueuedCount >= maxSlots)
1005
+ break;
1006
+ if (decision.tasks.length === 0)
1007
+ break;
1008
+ if (selectionBudget >= selectableTasks.length)
1009
+ break;
1010
+ if (enqueuedCount === before)
1011
+ continue;
1012
+ }
1013
+ if (enqueuedCount === 0 && skippedCount > 0) {
1014
+ this.syslog(`— No new tasks queued (skipped: ${skippedCount})`);
1015
+ }
1016
+ else {
1017
+ this.syslog(`✓ Enqueued ${enqueuedCount} task(s) | skipped: ${skippedCount}`);
1018
+ }
1019
+ // Execute tasks
1020
+ await this.runAvailableTasks();
1021
+ }
1022
+ async resolveRunnableCandidates(decisionTasks) {
820
1023
  const candidates = [];
821
- for (const { task } of decision.tasks) {
1024
+ for (const { task } of decisionTasks) {
822
1025
  if (this.scheduler.isTaskQueued(task.id) || this.scheduler.isTaskRunning(task.id)) {
823
1026
  this.syslog(` Skip (already queued/running): ${task.issueIdentifier || task.id.slice(0, 8)} ${task.title}`);
824
1027
  continue;
@@ -846,6 +1049,9 @@ export class AutonomousRunner {
846
1049
  // rate limiter only. Completions are still recorded for cost telemetry.
847
1050
  candidates.push({ task, projectPath });
848
1051
  }
1052
+ return candidates;
1053
+ }
1054
+ async detectSafeCandidateIds(candidates) {
849
1055
  // Group candidates by projectPath for conflict detection
850
1056
  const byProject = new Map();
851
1057
  for (const c of candidates) {
@@ -885,27 +1091,16 @@ export class AutonomousRunner {
885
1091
  safeTasks.add(c.task.id);
886
1092
  }
887
1093
  }
888
- // Enqueue safe tasks only
889
- for (const { task, projectPath } of candidates) {
890
- if (!safeTasks.has(task.id))
891
- continue;
892
- this.scheduler.enqueue(task, projectPath);
893
- broadcastEvent({ type: 'task:queued', data: { taskId: task.id, title: task.title, projectPath, issueIdentifier: task.issueIdentifier } });
894
- this.syslog(`✓ Queued: ${task.issueIdentifier || ''} ${task.title} ${projectPath.split('/').slice(-2).join('/')}`);
895
- enqueuedCount++;
896
- // Claim the task immediately: set Linear to 'In Progress' so restarts don't re-queue it
897
- if (task.issueId) {
898
- getTaskSource()?.updateState(task.issueId, 'In Progress').catch((err) => console.warn(`[AutonomousRunner] Failed to claim issue ${task.issueIdentifier}:`, err));
899
- }
900
- }
901
- if (enqueuedCount === 0 && decision.skippedCount > 0) {
902
- this.syslog(`— No new tasks queued (skipped: ${decision.skippedCount})`);
903
- }
904
- else {
905
- this.syslog(`✓ Enqueued ${enqueuedCount} task(s) | skipped: ${decision.skippedCount}`);
1094
+ return safeTasks;
1095
+ }
1096
+ enqueueCandidate(task, projectPath) {
1097
+ this.scheduler.enqueue(task, projectPath);
1098
+ broadcastEvent({ type: 'task:queued', data: { taskId: task.id, title: task.title, projectPath, issueIdentifier: task.issueIdentifier } });
1099
+ this.syslog(`✓ Queued: ${task.issueIdentifier || ''} ${task.title} → ${projectPath.split('/').slice(-2).join('/')}`);
1100
+ // Claim the task immediately: set Linear to 'In Progress' so restarts don't re-queue it
1101
+ if (task.issueId) {
1102
+ getTaskSource()?.updateState(task.issueId, 'In Progress').catch((err) => console.warn(`[AutonomousRunner] Failed to claim issue ${task.issueIdentifier}:`, err));
906
1103
  }
907
- // Execute tasks
908
- await this.runAvailableTasks();
909
1104
  }
910
1105
  /** Execute task in pair mode */
911
1106
  async executeTaskPairMode(task) {
@@ -1115,19 +1310,25 @@ export class AutonomousRunner {
1115
1310
  broadcastEvent({ type: 'log', data: { taskId: 'system', stage: 'turbo', line: 'TURBO OFF — normal pace resumed' } });
1116
1311
  }
1117
1312
  }
1118
- getAdapterSummary() {
1313
+ async getAdapterSummary() {
1119
1314
  const defaultAdapter = this.config.defaultAdapter ?? 'codex';
1120
1315
  const defaultRoles = this.config.defaultRoles;
1316
+ const workerAdapter = defaultRoles?.worker?.adapter ?? defaultAdapter;
1317
+ const reviewerAdapter = defaultRoles?.reviewer?.adapter ?? defaultAdapter;
1121
1318
  return {
1122
1319
  defaultAdapter,
1123
1320
  worker: {
1124
- adapter: defaultRoles?.worker?.adapter ?? defaultAdapter,
1125
- model: defaultRoles?.worker?.model ?? this.config.workerModel,
1321
+ adapter: workerAdapter,
1322
+ // Resolve the adapter's real default when config omits the model, so the
1323
+ // dashboard's PAIR bar shows what's running instead of "-". (INT-2393)
1324
+ model: defaultRoles?.worker?.model ?? this.config.workerModel
1325
+ ?? await resolveAdapterDefaultModel(workerAdapter, this.defaultModelCache),
1126
1326
  enabled: defaultRoles?.worker?.enabled !== false,
1127
1327
  },
1128
1328
  reviewer: {
1129
- adapter: defaultRoles?.reviewer?.adapter ?? defaultAdapter,
1130
- model: defaultRoles?.reviewer?.model ?? this.config.reviewerModel,
1329
+ adapter: reviewerAdapter,
1330
+ model: defaultRoles?.reviewer?.model ?? this.config.reviewerModel
1331
+ ?? await resolveAdapterDefaultModel(reviewerAdapter, this.defaultModelCache),
1131
1332
  enabled: defaultRoles?.reviewer?.enabled !== false,
1132
1333
  },
1133
1334
  tester: defaultRoles?.tester ? {