@intrect/openswarm 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +544 -0
  3. package/config.example.yaml +107 -0
  4. package/dist/adapters/base.d.ts +8 -0
  5. package/dist/adapters/base.d.ts.map +1 -0
  6. package/dist/adapters/base.js +104 -0
  7. package/dist/adapters/base.js.map +1 -0
  8. package/dist/adapters/claude.d.ts +13 -0
  9. package/dist/adapters/claude.d.ts.map +1 -0
  10. package/dist/adapters/claude.js +318 -0
  11. package/dist/adapters/claude.js.map +1 -0
  12. package/dist/adapters/codex.d.ts +14 -0
  13. package/dist/adapters/codex.d.ts.map +1 -0
  14. package/dist/adapters/codex.js +366 -0
  15. package/dist/adapters/codex.js.map +1 -0
  16. package/dist/adapters/cryptoQuantAdapter.d.ts +85 -0
  17. package/dist/adapters/cryptoQuantAdapter.d.ts.map +1 -0
  18. package/dist/adapters/cryptoQuantAdapter.js +238 -0
  19. package/dist/adapters/cryptoQuantAdapter.js.map +1 -0
  20. package/dist/adapters/index.d.ts +17 -0
  21. package/dist/adapters/index.d.ts.map +1 -0
  22. package/dist/adapters/index.js +47 -0
  23. package/dist/adapters/index.js.map +1 -0
  24. package/dist/adapters/processRegistry.d.ts +38 -0
  25. package/dist/adapters/processRegistry.d.ts.map +1 -0
  26. package/dist/adapters/processRegistry.js +147 -0
  27. package/dist/adapters/processRegistry.js.map +1 -0
  28. package/dist/adapters/streamBuffer.d.ts +59 -0
  29. package/dist/adapters/streamBuffer.d.ts.map +1 -0
  30. package/dist/adapters/streamBuffer.js +123 -0
  31. package/dist/adapters/streamBuffer.js.map +1 -0
  32. package/dist/adapters/types.d.ts +65 -0
  33. package/dist/adapters/types.d.ts.map +1 -0
  34. package/dist/adapters/types.js +6 -0
  35. package/dist/adapters/types.js.map +1 -0
  36. package/dist/agents/agentBus.d.ts +160 -0
  37. package/dist/agents/agentBus.d.ts.map +1 -0
  38. package/dist/agents/agentBus.js +350 -0
  39. package/dist/agents/agentBus.js.map +1 -0
  40. package/dist/agents/agentPair.d.ts +210 -0
  41. package/dist/agents/agentPair.d.ts.map +1 -0
  42. package/dist/agents/agentPair.js +420 -0
  43. package/dist/agents/agentPair.js.map +1 -0
  44. package/dist/agents/auditor.d.ts +27 -0
  45. package/dist/agents/auditor.d.ts.map +1 -0
  46. package/dist/agents/auditor.js +237 -0
  47. package/dist/agents/auditor.js.map +1 -0
  48. package/dist/agents/cliStreamParser.d.ts +18 -0
  49. package/dist/agents/cliStreamParser.d.ts.map +1 -0
  50. package/dist/agents/cliStreamParser.js +156 -0
  51. package/dist/agents/cliStreamParser.js.map +1 -0
  52. package/dist/agents/documenter.d.ts +31 -0
  53. package/dist/agents/documenter.d.ts.map +1 -0
  54. package/dist/agents/documenter.js +285 -0
  55. package/dist/agents/documenter.js.map +1 -0
  56. package/dist/agents/index.d.ts +10 -0
  57. package/dist/agents/index.d.ts.map +1 -0
  58. package/dist/agents/index.js +10 -0
  59. package/dist/agents/index.js.map +1 -0
  60. package/dist/agents/pairMetrics.d.ts +63 -0
  61. package/dist/agents/pairMetrics.d.ts.map +1 -0
  62. package/dist/agents/pairMetrics.js +231 -0
  63. package/dist/agents/pairMetrics.js.map +1 -0
  64. package/dist/agents/pairPipeline.d.ts +155 -0
  65. package/dist/agents/pairPipeline.d.ts.map +1 -0
  66. package/dist/agents/pairPipeline.js +793 -0
  67. package/dist/agents/pairPipeline.js.map +1 -0
  68. package/dist/agents/pairWebhook.d.ts +59 -0
  69. package/dist/agents/pairWebhook.d.ts.map +1 -0
  70. package/dist/agents/pairWebhook.js +242 -0
  71. package/dist/agents/pairWebhook.js.map +1 -0
  72. package/dist/agents/pipelineFormat.d.ts +11 -0
  73. package/dist/agents/pipelineFormat.d.ts.map +1 -0
  74. package/dist/agents/pipelineFormat.js +164 -0
  75. package/dist/agents/pipelineFormat.js.map +1 -0
  76. package/dist/agents/pipelineGuards.d.ts +23 -0
  77. package/dist/agents/pipelineGuards.d.ts.map +1 -0
  78. package/dist/agents/pipelineGuards.js +175 -0
  79. package/dist/agents/pipelineGuards.js.map +1 -0
  80. package/dist/agents/reviewer.d.ts +37 -0
  81. package/dist/agents/reviewer.d.ts.map +1 -0
  82. package/dist/agents/reviewer.js +213 -0
  83. package/dist/agents/reviewer.js.map +1 -0
  84. package/dist/agents/skillDocumenter.d.ts +23 -0
  85. package/dist/agents/skillDocumenter.d.ts.map +1 -0
  86. package/dist/agents/skillDocumenter.js +218 -0
  87. package/dist/agents/skillDocumenter.js.map +1 -0
  88. package/dist/agents/tester.d.ts +37 -0
  89. package/dist/agents/tester.d.ts.map +1 -0
  90. package/dist/agents/tester.js +308 -0
  91. package/dist/agents/tester.js.map +1 -0
  92. package/dist/agents/worker.d.ts +30 -0
  93. package/dist/agents/worker.d.ts.map +1 -0
  94. package/dist/agents/worker.js +128 -0
  95. package/dist/agents/worker.js.map +1 -0
  96. package/dist/automation/autonomousRunner.d.ts +123 -0
  97. package/dist/automation/autonomousRunner.d.ts.map +1 -0
  98. package/dist/automation/autonomousRunner.js +1082 -0
  99. package/dist/automation/autonomousRunner.js.map +1 -0
  100. package/dist/automation/ciWorker.d.ts +51 -0
  101. package/dist/automation/ciWorker.d.ts.map +1 -0
  102. package/dist/automation/ciWorker.js +282 -0
  103. package/dist/automation/ciWorker.js.map +1 -0
  104. package/dist/automation/conflictResolver.d.ts +29 -0
  105. package/dist/automation/conflictResolver.d.ts.map +1 -0
  106. package/dist/automation/conflictResolver.js +261 -0
  107. package/dist/automation/conflictResolver.js.map +1 -0
  108. package/dist/automation/dailyReporter.d.ts +26 -0
  109. package/dist/automation/dailyReporter.d.ts.map +1 -0
  110. package/dist/automation/dailyReporter.js +132 -0
  111. package/dist/automation/dailyReporter.js.map +1 -0
  112. package/dist/automation/index.d.ts +7 -0
  113. package/dist/automation/index.d.ts.map +1 -0
  114. package/dist/automation/index.js +7 -0
  115. package/dist/automation/index.js.map +1 -0
  116. package/dist/automation/longRunningMonitor.d.ts +26 -0
  117. package/dist/automation/longRunningMonitor.d.ts.map +1 -0
  118. package/dist/automation/longRunningMonitor.js +231 -0
  119. package/dist/automation/longRunningMonitor.js.map +1 -0
  120. package/dist/automation/prOwnership.d.ts +18 -0
  121. package/dist/automation/prOwnership.d.ts.map +1 -0
  122. package/dist/automation/prOwnership.js +61 -0
  123. package/dist/automation/prOwnership.js.map +1 -0
  124. package/dist/automation/prProcessor.d.ts +62 -0
  125. package/dist/automation/prProcessor.d.ts.map +1 -0
  126. package/dist/automation/prProcessor.js +700 -0
  127. package/dist/automation/prProcessor.js.map +1 -0
  128. package/dist/automation/runnerExecution.d.ts +49 -0
  129. package/dist/automation/runnerExecution.d.ts.map +1 -0
  130. package/dist/automation/runnerExecution.js +663 -0
  131. package/dist/automation/runnerExecution.js.map +1 -0
  132. package/dist/automation/runnerState.d.ts +170 -0
  133. package/dist/automation/runnerState.d.ts.map +1 -0
  134. package/dist/automation/runnerState.js +495 -0
  135. package/dist/automation/runnerState.js.map +1 -0
  136. package/dist/automation/runnerTypes.d.ts +46 -0
  137. package/dist/automation/runnerTypes.d.ts.map +1 -0
  138. package/dist/automation/runnerTypes.js +5 -0
  139. package/dist/automation/runnerTypes.js.map +1 -0
  140. package/dist/automation/scheduler.d.ts +75 -0
  141. package/dist/automation/scheduler.d.ts.map +1 -0
  142. package/dist/automation/scheduler.js +394 -0
  143. package/dist/automation/scheduler.js.map +1 -0
  144. package/dist/cli/promptHandler.d.ts +13 -0
  145. package/dist/cli/promptHandler.d.ts.map +1 -0
  146. package/dist/cli/promptHandler.js +189 -0
  147. package/dist/cli/promptHandler.js.map +1 -0
  148. package/dist/cli.d.ts +3 -0
  149. package/dist/cli.d.ts.map +1 -0
  150. package/dist/cli.js +138 -0
  151. package/dist/cli.js.map +1 -0
  152. package/dist/core/config.d.ts +308 -0
  153. package/dist/core/config.d.ts.map +1 -0
  154. package/dist/core/config.js +529 -0
  155. package/dist/core/config.js.map +1 -0
  156. package/dist/core/eventHub.d.ts +194 -0
  157. package/dist/core/eventHub.d.ts.map +1 -0
  158. package/dist/core/eventHub.js +136 -0
  159. package/dist/core/eventHub.js.map +1 -0
  160. package/dist/core/index.d.ts +6 -0
  161. package/dist/core/index.d.ts.map +1 -0
  162. package/dist/core/index.js +6 -0
  163. package/dist/core/index.js.map +1 -0
  164. package/dist/core/service.d.ts +27 -0
  165. package/dist/core/service.d.ts.map +1 -0
  166. package/dist/core/service.js +438 -0
  167. package/dist/core/service.js.map +1 -0
  168. package/dist/core/traceCollector.d.ts +105 -0
  169. package/dist/core/traceCollector.d.ts.map +1 -0
  170. package/dist/core/traceCollector.js +141 -0
  171. package/dist/core/traceCollector.js.map +1 -0
  172. package/dist/core/types.d.ts +413 -0
  173. package/dist/core/types.d.ts.map +1 -0
  174. package/dist/core/types.js +5 -0
  175. package/dist/core/types.js.map +1 -0
  176. package/dist/discord/discordCore.d.ts +104 -0
  177. package/dist/discord/discordCore.d.ts.map +1 -0
  178. package/dist/discord/discordCore.js +698 -0
  179. package/dist/discord/discordCore.js.map +1 -0
  180. package/dist/discord/discordHandlers.d.ts +86 -0
  181. package/dist/discord/discordHandlers.d.ts.map +1 -0
  182. package/dist/discord/discordHandlers.js +849 -0
  183. package/dist/discord/discordHandlers.js.map +1 -0
  184. package/dist/discord/discordPair.d.ts +6 -0
  185. package/dist/discord/discordPair.d.ts.map +1 -0
  186. package/dist/discord/discordPair.js +567 -0
  187. package/dist/discord/discordPair.js.map +1 -0
  188. package/dist/discord/index.d.ts +4 -0
  189. package/dist/discord/index.d.ts.map +1 -0
  190. package/dist/discord/index.js +11 -0
  191. package/dist/discord/index.js.map +1 -0
  192. package/dist/github/github.d.ts +236 -0
  193. package/dist/github/github.d.ts.map +1 -0
  194. package/dist/github/github.js +535 -0
  195. package/dist/github/github.js.map +1 -0
  196. package/dist/github/index.d.ts +2 -0
  197. package/dist/github/index.d.ts.map +1 -0
  198. package/dist/github/index.js +2 -0
  199. package/dist/github/index.js.map +1 -0
  200. package/dist/index.d.ts +3 -0
  201. package/dist/index.d.ts.map +1 -0
  202. package/dist/index.js +60 -0
  203. package/dist/index.js.map +1 -0
  204. package/dist/knowledge/analyzer.d.ts +36 -0
  205. package/dist/knowledge/analyzer.d.ts.map +1 -0
  206. package/dist/knowledge/analyzer.js +170 -0
  207. package/dist/knowledge/analyzer.js.map +1 -0
  208. package/dist/knowledge/gitInfo.d.ts +10 -0
  209. package/dist/knowledge/gitInfo.d.ts.map +1 -0
  210. package/dist/knowledge/gitInfo.js +134 -0
  211. package/dist/knowledge/gitInfo.js.map +1 -0
  212. package/dist/knowledge/graph.d.ts +45 -0
  213. package/dist/knowledge/graph.d.ts.map +1 -0
  214. package/dist/knowledge/graph.js +262 -0
  215. package/dist/knowledge/graph.js.map +1 -0
  216. package/dist/knowledge/graphqlExporter.d.ts +64 -0
  217. package/dist/knowledge/graphqlExporter.d.ts.map +1 -0
  218. package/dist/knowledge/graphqlExporter.js +333 -0
  219. package/dist/knowledge/graphqlExporter.js.map +1 -0
  220. package/dist/knowledge/index.d.ts +58 -0
  221. package/dist/knowledge/index.d.ts.map +1 -0
  222. package/dist/knowledge/index.js +212 -0
  223. package/dist/knowledge/index.js.map +1 -0
  224. package/dist/knowledge/repository.d.ts +64 -0
  225. package/dist/knowledge/repository.d.ts.map +1 -0
  226. package/dist/knowledge/repository.js +250 -0
  227. package/dist/knowledge/repository.js.map +1 -0
  228. package/dist/knowledge/riskOnAnalyzer.d.ts +79 -0
  229. package/dist/knowledge/riskOnAnalyzer.d.ts.map +1 -0
  230. package/dist/knowledge/riskOnAnalyzer.js +243 -0
  231. package/dist/knowledge/riskOnAnalyzer.js.map +1 -0
  232. package/dist/knowledge/scanner.d.ts +14 -0
  233. package/dist/knowledge/scanner.d.ts.map +1 -0
  234. package/dist/knowledge/scanner.js +350 -0
  235. package/dist/knowledge/scanner.js.map +1 -0
  236. package/dist/knowledge/store.d.ts +23 -0
  237. package/dist/knowledge/store.d.ts.map +1 -0
  238. package/dist/knowledge/store.js +86 -0
  239. package/dist/knowledge/store.js.map +1 -0
  240. package/dist/knowledge/types.d.ts +288 -0
  241. package/dist/knowledge/types.d.ts.map +1 -0
  242. package/dist/knowledge/types.js +111 -0
  243. package/dist/knowledge/types.js.map +1 -0
  244. package/dist/linear/index.d.ts +3 -0
  245. package/dist/linear/index.d.ts.map +1 -0
  246. package/dist/linear/index.js +3 -0
  247. package/dist/linear/index.js.map +1 -0
  248. package/dist/linear/linear.d.ts +160 -0
  249. package/dist/linear/linear.d.ts.map +1 -0
  250. package/dist/linear/linear.js +983 -0
  251. package/dist/linear/linear.js.map +1 -0
  252. package/dist/linear/projectUpdater.d.ts +23 -0
  253. package/dist/linear/projectUpdater.d.ts.map +1 -0
  254. package/dist/linear/projectUpdater.js +347 -0
  255. package/dist/linear/projectUpdater.js.map +1 -0
  256. package/dist/locale/en.d.ts +3 -0
  257. package/dist/locale/en.d.ts.map +1 -0
  258. package/dist/locale/en.js +436 -0
  259. package/dist/locale/en.js.map +1 -0
  260. package/dist/locale/index.d.ts +28 -0
  261. package/dist/locale/index.d.ts.map +1 -0
  262. package/dist/locale/index.js +89 -0
  263. package/dist/locale/index.js.map +1 -0
  264. package/dist/locale/ko.d.ts +3 -0
  265. package/dist/locale/ko.d.ts.map +1 -0
  266. package/dist/locale/ko.js +436 -0
  267. package/dist/locale/ko.js.map +1 -0
  268. package/dist/locale/prompts/en.d.ts +3 -0
  269. package/dist/locale/prompts/en.d.ts.map +1 -0
  270. package/dist/locale/prompts/en.js +278 -0
  271. package/dist/locale/prompts/en.js.map +1 -0
  272. package/dist/locale/prompts/ko.d.ts +3 -0
  273. package/dist/locale/prompts/ko.d.ts.map +1 -0
  274. package/dist/locale/prompts/ko.js +279 -0
  275. package/dist/locale/prompts/ko.js.map +1 -0
  276. package/dist/locale/types.d.ts +407 -0
  277. package/dist/locale/types.d.ts.map +1 -0
  278. package/dist/locale/types.js +5 -0
  279. package/dist/locale/types.js.map +1 -0
  280. package/dist/memory/codex.d.ts +93 -0
  281. package/dist/memory/codex.d.ts.map +1 -0
  282. package/dist/memory/codex.js +366 -0
  283. package/dist/memory/codex.js.map +1 -0
  284. package/dist/memory/compaction.d.ts +21 -0
  285. package/dist/memory/compaction.d.ts.map +1 -0
  286. package/dist/memory/compaction.js +205 -0
  287. package/dist/memory/compaction.js.map +1 -0
  288. package/dist/memory/index.d.ts +13 -0
  289. package/dist/memory/index.d.ts.map +1 -0
  290. package/dist/memory/index.js +13 -0
  291. package/dist/memory/index.js.map +1 -0
  292. package/dist/memory/memoryCore.d.ts +178 -0
  293. package/dist/memory/memoryCore.d.ts.map +1 -0
  294. package/dist/memory/memoryCore.js +623 -0
  295. package/dist/memory/memoryCore.js.map +1 -0
  296. package/dist/memory/memoryOps.d.ts +90 -0
  297. package/dist/memory/memoryOps.d.ts.map +1 -0
  298. package/dist/memory/memoryOps.js +606 -0
  299. package/dist/memory/memoryOps.js.map +1 -0
  300. package/dist/orchestration/conflictDetector.d.ts +15 -0
  301. package/dist/orchestration/conflictDetector.d.ts.map +1 -0
  302. package/dist/orchestration/conflictDetector.js +130 -0
  303. package/dist/orchestration/conflictDetector.js.map +1 -0
  304. package/dist/orchestration/decisionEngine.d.ts +177 -0
  305. package/dist/orchestration/decisionEngine.d.ts.map +1 -0
  306. package/dist/orchestration/decisionEngine.js +496 -0
  307. package/dist/orchestration/decisionEngine.js.map +1 -0
  308. package/dist/orchestration/index.d.ts +5 -0
  309. package/dist/orchestration/index.d.ts.map +1 -0
  310. package/dist/orchestration/index.js +5 -0
  311. package/dist/orchestration/index.js.map +1 -0
  312. package/dist/orchestration/taskParser.d.ts +67 -0
  313. package/dist/orchestration/taskParser.d.ts.map +1 -0
  314. package/dist/orchestration/taskParser.js +542 -0
  315. package/dist/orchestration/taskParser.js.map +1 -0
  316. package/dist/orchestration/taskScheduler.d.ts +141 -0
  317. package/dist/orchestration/taskScheduler.d.ts.map +1 -0
  318. package/dist/orchestration/taskScheduler.js +317 -0
  319. package/dist/orchestration/taskScheduler.js.map +1 -0
  320. package/dist/orchestration/workflow.d.ts +145 -0
  321. package/dist/orchestration/workflow.d.ts.map +1 -0
  322. package/dist/orchestration/workflow.js +301 -0
  323. package/dist/orchestration/workflow.js.map +1 -0
  324. package/dist/runners/cliRunner.d.ts +11 -0
  325. package/dist/runners/cliRunner.d.ts.map +1 -0
  326. package/dist/runners/cliRunner.js +194 -0
  327. package/dist/runners/cliRunner.js.map +1 -0
  328. package/dist/support/apiCache.d.ts +85 -0
  329. package/dist/support/apiCache.d.ts.map +1 -0
  330. package/dist/support/apiCache.js +163 -0
  331. package/dist/support/apiCache.js.map +1 -0
  332. package/dist/support/chat.d.ts +3 -0
  333. package/dist/support/chat.d.ts.map +1 -0
  334. package/dist/support/chat.js +304 -0
  335. package/dist/support/chat.js.map +1 -0
  336. package/dist/support/chatBackend.d.ts +25 -0
  337. package/dist/support/chatBackend.d.ts.map +1 -0
  338. package/dist/support/chatBackend.js +235 -0
  339. package/dist/support/chatBackend.js.map +1 -0
  340. package/dist/support/chatMemory.d.ts +71 -0
  341. package/dist/support/chatMemory.d.ts.map +1 -0
  342. package/dist/support/chatMemory.js +119 -0
  343. package/dist/support/chatMemory.js.map +1 -0
  344. package/dist/support/chatTui.d.ts +3 -0
  345. package/dist/support/chatTui.d.ts.map +1 -0
  346. package/dist/support/chatTui.js +998 -0
  347. package/dist/support/chatTui.js.map +1 -0
  348. package/dist/support/costTracker.d.ts +29 -0
  349. package/dist/support/costTracker.d.ts.map +1 -0
  350. package/dist/support/costTracker.js +113 -0
  351. package/dist/support/costTracker.js.map +1 -0
  352. package/dist/support/dashboardHtml.d.ts +3 -0
  353. package/dist/support/dashboardHtml.d.ts.map +1 -0
  354. package/dist/support/dashboardHtml.js +2070 -0
  355. package/dist/support/dashboardHtml.js.map +1 -0
  356. package/dist/support/delete-beliefs.d.ts +2 -0
  357. package/dist/support/delete-beliefs.d.ts.map +1 -0
  358. package/dist/support/delete-beliefs.js +34 -0
  359. package/dist/support/delete-beliefs.js.map +1 -0
  360. package/dist/support/dev.d.ts +55 -0
  361. package/dist/support/dev.d.ts.map +1 -0
  362. package/dist/support/dev.js +298 -0
  363. package/dist/support/dev.js.map +1 -0
  364. package/dist/support/editParser.d.ts +37 -0
  365. package/dist/support/editParser.d.ts.map +1 -0
  366. package/dist/support/editParser.js +365 -0
  367. package/dist/support/editParser.js.map +1 -0
  368. package/dist/support/gitStatus.d.ts +21 -0
  369. package/dist/support/gitStatus.d.ts.map +1 -0
  370. package/dist/support/gitStatus.js +108 -0
  371. package/dist/support/gitStatus.js.map +1 -0
  372. package/dist/support/gitTracker.d.ts +30 -0
  373. package/dist/support/gitTracker.d.ts.map +1 -0
  374. package/dist/support/gitTracker.js +143 -0
  375. package/dist/support/gitTracker.js.map +1 -0
  376. package/dist/support/index.d.ts +13 -0
  377. package/dist/support/index.d.ts.map +1 -0
  378. package/dist/support/index.js +13 -0
  379. package/dist/support/index.js.map +1 -0
  380. package/dist/support/planner.d.ts +58 -0
  381. package/dist/support/planner.d.ts.map +1 -0
  382. package/dist/support/planner.js +395 -0
  383. package/dist/support/planner.js.map +1 -0
  384. package/dist/support/projectMapper.d.ts +46 -0
  385. package/dist/support/projectMapper.d.ts.map +1 -0
  386. package/dist/support/projectMapper.js +259 -0
  387. package/dist/support/projectMapper.js.map +1 -0
  388. package/dist/support/quotaTracker.d.ts +29 -0
  389. package/dist/support/quotaTracker.d.ts.map +1 -0
  390. package/dist/support/quotaTracker.js +89 -0
  391. package/dist/support/quotaTracker.js.map +1 -0
  392. package/dist/support/rateLimiter.d.ts +101 -0
  393. package/dist/support/rateLimiter.d.ts.map +1 -0
  394. package/dist/support/rateLimiter.js +219 -0
  395. package/dist/support/rateLimiter.js.map +1 -0
  396. package/dist/support/rollback.d.ts +61 -0
  397. package/dist/support/rollback.d.ts.map +1 -0
  398. package/dist/support/rollback.js +328 -0
  399. package/dist/support/rollback.js.map +1 -0
  400. package/dist/support/stuckDetector.d.ts +68 -0
  401. package/dist/support/stuckDetector.d.ts.map +1 -0
  402. package/dist/support/stuckDetector.js +174 -0
  403. package/dist/support/stuckDetector.js.map +1 -0
  404. package/dist/support/timeWindow.d.ts +60 -0
  405. package/dist/support/timeWindow.d.ts.map +1 -0
  406. package/dist/support/timeWindow.js +236 -0
  407. package/dist/support/timeWindow.js.map +1 -0
  408. package/dist/support/web.d.ts +11 -0
  409. package/dist/support/web.d.ts.map +1 -0
  410. package/dist/support/web.js +938 -0
  411. package/dist/support/web.js.map +1 -0
  412. package/dist/support/workflowLinear.d.ts +99 -0
  413. package/dist/support/workflowLinear.d.ts.map +1 -0
  414. package/dist/support/workflowLinear.js +257 -0
  415. package/dist/support/workflowLinear.js.map +1 -0
  416. package/dist/support/worktreeManager.d.ts +20 -0
  417. package/dist/support/worktreeManager.d.ts.map +1 -0
  418. package/dist/support/worktreeManager.js +144 -0
  419. package/dist/support/worktreeManager.js.map +1 -0
  420. package/dist/taskState/store.d.ts +101 -0
  421. package/dist/taskState/store.d.ts.map +1 -0
  422. package/dist/taskState/store.js +346 -0
  423. package/dist/taskState/store.js.map +1 -0
  424. package/package.json +70 -0
  425. package/templates/AGENTS.md +432 -0
  426. package/templates/BOOT.md +25 -0
  427. package/templates/BOOTSTRAP.md +50 -0
  428. package/templates/CHANGELOG_AUDIT.md +74 -0
  429. package/templates/HEARTBEAT.md +86 -0
  430. package/templates/IDENTITY.md +27 -0
  431. package/templates/ISSUE_ANALYSIS.md +31 -0
  432. package/templates/PR_LAND.md +75 -0
  433. package/templates/PR_REVIEW.md +97 -0
  434. package/templates/SOUL.dev.md +52 -0
  435. package/templates/SOUL.md +81 -0
  436. package/templates/TOOLS.md +52 -0
  437. package/templates/USER.md +22 -0
@@ -0,0 +1,143 @@
1
+ // ============================================
2
+ // OpenSwarm - Git Tracker
3
+ // Aider-style Git diff-based file change tracking
4
+ // ============================================
5
+ import { spawn } from 'node:child_process';
6
+ /**
7
+ * Extract changed file list via git diff
8
+ * Track actual changed files without relying on Worker JSON parsing
9
+ */
10
+ export async function getChangedFiles(projectPath, since // commit hash or HEAD~1
11
+ ) {
12
+ try {
13
+ const args = since
14
+ ? ['diff', '--name-only', since]
15
+ : ['diff', '--name-only', 'HEAD'];
16
+ const output = await runGitCommand(projectPath, args);
17
+ // Include staged files
18
+ const stagedOutput = await runGitCommand(projectPath, ['diff', '--name-only', '--cached']);
19
+ const files = new Set();
20
+ output.split('\n').filter(Boolean).forEach(f => files.add(f));
21
+ stagedOutput.split('\n').filter(Boolean).forEach(f => files.add(f));
22
+ return Array.from(files);
23
+ }
24
+ catch (error) {
25
+ console.error('[GitTracker] getChangedFiles error:', error);
26
+ return [];
27
+ }
28
+ }
29
+ /**
30
+ * Save pre-work snapshot (stash or commit hash)
31
+ */
32
+ export async function takeSnapshot(projectPath) {
33
+ try {
34
+ // Return current HEAD commit hash
35
+ const output = await runGitCommand(projectPath, ['rev-parse', 'HEAD']);
36
+ return output.trim();
37
+ }
38
+ catch (error) {
39
+ console.error('[GitTracker] takeSnapshot error:', error);
40
+ return '';
41
+ }
42
+ }
43
+ /**
44
+ * Get files changed since snapshot
45
+ */
46
+ export async function getChangedFilesSinceSnapshot(projectPath, snapshotHash) {
47
+ if (!snapshotHash)
48
+ return [];
49
+ try {
50
+ // Committed changes
51
+ const committedOutput = await runGitCommand(projectPath, [
52
+ 'diff', '--name-only', snapshotHash, 'HEAD'
53
+ ]);
54
+ // Uncommitted changes (staged + unstaged)
55
+ const uncommittedOutput = await runGitCommand(projectPath, [
56
+ 'diff', '--name-only'
57
+ ]);
58
+ const stagedOutput = await runGitCommand(projectPath, [
59
+ 'diff', '--name-only', '--cached'
60
+ ]);
61
+ const files = new Set();
62
+ committedOutput.split('\n').filter(Boolean).forEach(f => files.add(f));
63
+ uncommittedOutput.split('\n').filter(Boolean).forEach(f => files.add(f));
64
+ stagedOutput.split('\n').filter(Boolean).forEach(f => files.add(f));
65
+ return Array.from(files);
66
+ }
67
+ catch (error) {
68
+ console.error('[GitTracker] getChangedFilesSinceSnapshot error:', error);
69
+ return [];
70
+ }
71
+ }
72
+ /**
73
+ * Auto-commit with attribution
74
+ */
75
+ export async function autoCommit(projectPath, message, model = 'claude') {
76
+ try {
77
+ // 1. Stage all changes
78
+ await runGitCommand(projectPath, ['add', '-A']);
79
+ // 2. Check if there are changes to commit
80
+ const status = await runGitCommand(projectPath, ['status', '--porcelain']);
81
+ if (!status.trim()) {
82
+ return { success: true, hash: undefined }; // Nothing to commit
83
+ }
84
+ // 3. Commit with Co-Authored-By
85
+ const fullMessage = `${message}\n\nCo-Authored-By: ${model} <noreply@anthropic.com>`;
86
+ await runGitCommand(projectPath, ['commit', '-m', fullMessage]);
87
+ // 4. Get commit hash
88
+ const hash = await runGitCommand(projectPath, ['rev-parse', 'HEAD']);
89
+ return { success: true, hash: hash.trim() };
90
+ }
91
+ catch (error) {
92
+ return {
93
+ success: false,
94
+ error: error instanceof Error ? error.message : String(error)
95
+ };
96
+ }
97
+ }
98
+ /**
99
+ * Git command execution utility
100
+ */
101
+ function runGitCommand(cwd, args) {
102
+ return new Promise((resolve, reject) => {
103
+ const proc = spawn('git', args, { cwd });
104
+ let stdout = '';
105
+ let stderr = '';
106
+ proc.stdout.on('data', (data) => { stdout += data.toString(); });
107
+ proc.stderr.on('data', (data) => { stderr += data.toString(); });
108
+ proc.on('close', (code) => {
109
+ if (code === 0) {
110
+ resolve(stdout);
111
+ }
112
+ else {
113
+ reject(new Error(`git ${args.join(' ')} failed: ${stderr}`));
114
+ }
115
+ });
116
+ proc.on('error', reject);
117
+ });
118
+ }
119
+ /**
120
+ * Check if project is a git repository
121
+ */
122
+ export async function isGitRepo(projectPath) {
123
+ try {
124
+ await runGitCommand(projectPath, ['rev-parse', '--git-dir']);
125
+ return true;
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ /**
132
+ * Check dirty state (uncommitted changes)
133
+ */
134
+ export async function isDirty(projectPath) {
135
+ try {
136
+ const status = await runGitCommand(projectPath, ['status', '--porcelain']);
137
+ return status.trim().length > 0;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ //# sourceMappingURL=gitTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitTracker.js","sourceRoot":"","sources":["../../src/support/gitTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export * from './editParser.js';
2
+ export * from './gitTracker.js';
3
+ export * from './planner.js';
4
+ export * from './projectMapper.js';
5
+ export * from './rollback.js';
6
+ export * from './stuckDetector.js';
7
+ export * from './timeWindow.js';
8
+ export * from './web.js';
9
+ export * from './chat.js';
10
+ export * from './dev.js';
11
+ export * from './workflowLinear.js';
12
+ export * from './costTracker.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/support/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from './editParser.js';
2
+ export * from './gitTracker.js';
3
+ export * from './planner.js';
4
+ export * from './projectMapper.js';
5
+ export * from './rollback.js';
6
+ export * from './stuckDetector.js';
7
+ export * from './timeWindow.js';
8
+ export * from './web.js';
9
+ export * from './chat.js';
10
+ export * from './dev.js';
11
+ export * from './workflowLinear.js';
12
+ export * from './costTracker.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { TaskItem } from '../orchestration/decisionEngine.js';
2
+ import { type CostInfo } from './costTracker.js';
3
+ import type { ImpactAnalysis } from '../knowledge/types.js';
4
+ export interface PlannerOptions {
5
+ taskTitle: string;
6
+ taskDescription: string;
7
+ projectPath: string;
8
+ projectName?: string;
9
+ timeoutMs?: number;
10
+ model?: string;
11
+ targetMinutes?: number;
12
+ onLog?: (line: string) => void;
13
+ impactAnalysis?: ImpactAnalysis;
14
+ }
15
+ export interface SubTask {
16
+ title: string;
17
+ description: string;
18
+ estimatedMinutes: number;
19
+ priority: number;
20
+ dependencies?: string[];
21
+ }
22
+ export interface PlannerResult {
23
+ success: boolean;
24
+ originalIssue: string;
25
+ needsDecomposition: boolean;
26
+ reason?: string;
27
+ subTasks: SubTask[];
28
+ totalEstimatedMinutes: number;
29
+ error?: string;
30
+ costInfo?: CostInfo;
31
+ }
32
+ /**
33
+ * Run Planner agent
34
+ */
35
+ export declare function runPlanner(options: PlannerOptions): Promise<PlannerResult>;
36
+ /**
37
+ * Create sub-tasks as Linear sub-issues
38
+ */
39
+ export declare function createLinearSubIssues(parentIssueId: string, subTasks: SubTask[], _teamId: string, _projectId?: string): Promise<{
40
+ success: boolean;
41
+ createdIds: string[];
42
+ error?: string;
43
+ }>;
44
+ /**
45
+ * Estimate issue duration (heuristic)
46
+ */
47
+ export declare function estimateTaskDuration(task: TaskItem): number;
48
+ /**
49
+ * Determine whether decomposition is needed.
50
+ * Always returns true when enableDecomposition is set — the LLM planner decides.
51
+ * The pre-LLM heuristic only applies if explicitly requested via checkHeuristic flag.
52
+ */
53
+ export declare function needsDecomposition(task: TaskItem, maxMinutes?: number, checkHeuristic?: boolean): boolean;
54
+ /**
55
+ * Format Planner result as a Discord message
56
+ */
57
+ export declare function formatPlannerResult(result: PlannerResult): string;
58
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/support/planner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,kBAAkB,CAAC;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAgBD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BhF;AA6RD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAwB3D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,GAAE,MAAW,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CAOpH;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA6BjE"}
@@ -0,0 +1,395 @@
1
+ // ============================================
2
+ // OpenSwarm - Planner Agent
3
+ // Decompose large issues into 30-min sub-tasks
4
+ // ============================================
5
+ import { spawn } from 'node:child_process';
6
+ import { writeFileSync, unlinkSync } from 'node:fs';
7
+ import { extractCostFromStreamJson, formatCost } from './costTracker.js';
8
+ import { t, getPrompts } from '../locale/index.js';
9
+ // Prompts
10
+ function buildPlannerPrompt(options) {
11
+ return getPrompts().buildPlannerPrompt({
12
+ taskTitle: options.taskTitle,
13
+ taskDescription: options.taskDescription,
14
+ projectName: options.projectName || options.projectPath,
15
+ targetMinutes: options.targetMinutes ?? 25,
16
+ impactAnalysis: options.impactAnalysis ?? undefined,
17
+ });
18
+ }
19
+ // Planner Execution
20
+ /**
21
+ * Run Planner agent
22
+ */
23
+ export async function runPlanner(options) {
24
+ const prompt = buildPlannerPrompt(options);
25
+ try {
26
+ const output = await runClaudeCli(prompt, options.timeoutMs ?? 120000, // 2 min timeout
27
+ options.model, options.onLog);
28
+ const costInfo = extractCostFromStreamJson(output);
29
+ if (costInfo) {
30
+ console.log(`[Planner] Cost: ${formatCost(costInfo)}`);
31
+ }
32
+ const result = parsePlannerOutput(output, options.taskTitle);
33
+ result.costInfo = costInfo;
34
+ return result;
35
+ }
36
+ catch (error) {
37
+ return {
38
+ success: false,
39
+ originalIssue: options.taskTitle,
40
+ needsDecomposition: false,
41
+ subTasks: [],
42
+ totalEstimatedMinutes: 0,
43
+ error: error instanceof Error ? error.message : String(error),
44
+ };
45
+ }
46
+ }
47
+ /**
48
+ * Convert planner JSON output to human-readable log line.
49
+ * Handles both the final JSON result and intermediate text.
50
+ */
51
+ function humanizePlannerOutput(text) {
52
+ const trimmed = text.trim();
53
+ // Try to parse as planner result JSON
54
+ try {
55
+ const obj = JSON.parse(trimmed);
56
+ if (typeof obj === 'object' && obj !== null && 'needsDecomposition' in obj) {
57
+ if (!obj.needsDecomposition) {
58
+ const reason = obj.reason ? `: ${obj.reason.slice(0, 120)}` : '';
59
+ return `✓ No decomposition needed (est. ${obj.totalEstimatedMinutes || '?'}min)${reason}`;
60
+ }
61
+ const tasks = (obj.subTasks || []);
62
+ const taskList = tasks.map((t, i) => ` ${i + 1}. ${t.title || '?'} (~${t.estimatedMinutes || '?'}min)`).join('\n');
63
+ return `🔀 Decomposed into ${tasks.length} sub-tasks (total ${obj.totalEstimatedMinutes || '?'}min)\n${taskList}`;
64
+ }
65
+ }
66
+ catch {
67
+ // Not JSON — return as-is
68
+ }
69
+ // Strip markdown code fences
70
+ if (trimmed.startsWith('```'))
71
+ return '';
72
+ return trimmed;
73
+ }
74
+ /**
75
+ * Run Claude CLI from /tmp to avoid project-specific MCP servers and hooks.
76
+ * STONKS has session-start.sh + playwright/pykis/linear MCP servers that
77
+ * cause >10min startup when claude runs from the project directory.
78
+ */
79
+ async function runClaudeCli(prompt, timeoutMs, model, onLog) {
80
+ const tmpFile = `/tmp/planner-prompt-${Date.now()}.txt`;
81
+ writeFileSync(tmpFile, prompt);
82
+ const args = ['--output-format', 'stream-json', '--verbose', '--max-turns', '1'];
83
+ if (model) {
84
+ args.push('--model', model);
85
+ }
86
+ args.push('-p', prompt);
87
+ return new Promise((resolve, reject) => {
88
+ const proc = spawn('claude', args, {
89
+ shell: false,
90
+ cwd: '/tmp', // Neutral dir — no project .claude/ settings loaded
91
+ env: process.env,
92
+ stdio: ['ignore', 'pipe', 'pipe'],
93
+ });
94
+ let output = '';
95
+ let stderrOutput = '';
96
+ proc.stdout?.on('data', (chunk) => {
97
+ const text = chunk.toString();
98
+ output += text;
99
+ if (onLog) {
100
+ // Stream assistant text lines to dashboard
101
+ for (const line of text.split('\n').filter((l) => l.trim())) {
102
+ try {
103
+ const event = JSON.parse(line);
104
+ if (event.type === 'assistant' && event.message?.content) {
105
+ for (const block of event.message.content) {
106
+ if (block.type === 'text') {
107
+ // Convert planner JSON result to human-readable summary
108
+ const humanized = humanizePlannerOutput(block.text);
109
+ onLog(humanized);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ catch {
115
+ // Not a JSON line — skip raw stream noise (tool calls, etc)
116
+ if (!line.startsWith('{') && !line.startsWith('[')) {
117
+ onLog(line);
118
+ }
119
+ }
120
+ }
121
+ }
122
+ });
123
+ proc.stderr?.on('data', (chunk) => {
124
+ const text = chunk.toString();
125
+ stderrOutput += text;
126
+ // Log stderr in real-time for debugging
127
+ console.error('[Planner stderr]', text.slice(0, 500));
128
+ });
129
+ const timer = setTimeout(() => {
130
+ proc.kill('SIGTERM');
131
+ reject(new Error(`Planner timeout after ${timeoutMs}ms`));
132
+ }, timeoutMs);
133
+ proc.on('close', (code) => {
134
+ clearTimeout(timer);
135
+ try {
136
+ unlinkSync(tmpFile);
137
+ }
138
+ catch { /* ignore */ }
139
+ // Success: exit code 0, or non-zero but we got parseable output
140
+ if (code === 0) {
141
+ resolve(output);
142
+ return;
143
+ }
144
+ // Non-zero exit: check if we got usable output anyway
145
+ if (output.trim()) {
146
+ console.warn(`[Planner] Non-zero exit (${code}) but got output, attempting to parse`);
147
+ if (stderrOutput.trim()) {
148
+ console.warn('[Planner] stderr:', stderrOutput.slice(0, 500));
149
+ }
150
+ resolve(output);
151
+ return;
152
+ }
153
+ // Complete failure: no output and non-zero exit
154
+ const errorMsg = stderrOutput.trim() || 'No error output captured';
155
+ const truncatedStderr = errorMsg.length > 1000 ? errorMsg.slice(0, 1000) + '... (truncated)' : errorMsg;
156
+ console.error('[Planner] Process exited with code', code);
157
+ console.error('[Planner] Full stderr:', errorMsg);
158
+ console.error('[Planner] stdout length:', output.length);
159
+ reject(new Error(`Claude CLI exited with code ${code}. stderr: ${truncatedStderr}`));
160
+ });
161
+ proc.on('error', (err) => {
162
+ clearTimeout(timer);
163
+ try {
164
+ unlinkSync(tmpFile);
165
+ }
166
+ catch { /* ignore */ }
167
+ reject(err);
168
+ });
169
+ });
170
+ }
171
+ /**
172
+ * Parse Planner output (plain text or stream-json fallback)
173
+ */
174
+ function parsePlannerOutput(output, originalTitle) {
175
+ try {
176
+ // Primary: plain text output — find ```json block directly
177
+ const jsonBlockMatch = output.match(/```json\s*([\s\S]*?)\s*```/);
178
+ if (jsonBlockMatch) {
179
+ try {
180
+ const parsed = JSON.parse(jsonBlockMatch[1]);
181
+ if ('needsDecomposition' in parsed) {
182
+ console.log('[Planner] Parsed JSON block from plain text output');
183
+ return {
184
+ success: true,
185
+ originalIssue: originalTitle,
186
+ needsDecomposition: Boolean(parsed.needsDecomposition),
187
+ reason: parsed.reason,
188
+ subTasks: Array.isArray(parsed.subTasks) ? parsed.subTasks : [],
189
+ totalEstimatedMinutes: parsed.totalEstimatedMinutes || 0,
190
+ };
191
+ }
192
+ }
193
+ catch { /* not valid JSON, try other methods */ }
194
+ }
195
+ // Fallback: stream-json format (newline-delimited JSON events)
196
+ const lines = output.split('\n').filter(l => l.trim());
197
+ for (const line of lines) {
198
+ try {
199
+ const event = JSON.parse(line);
200
+ if (event.type === 'result' && typeof event.result === 'string') {
201
+ return parsePlanResult(event.result, originalTitle);
202
+ }
203
+ }
204
+ catch { /* not a complete JSON line */ }
205
+ }
206
+ // Fallback: direct JSON object in text
207
+ const objMatch = output.match(/\{\s*"needsDecomposition"/);
208
+ if (objMatch) {
209
+ return parseDirectJson(output, objMatch.index, originalTitle);
210
+ }
211
+ return extractFromText(output, originalTitle);
212
+ }
213
+ catch (error) {
214
+ console.error('[Planner] Parse error:', error);
215
+ return extractFromText(output, originalTitle);
216
+ }
217
+ }
218
+ /**
219
+ * Parse the planner result text (extracted from Claude output)
220
+ */
221
+ function parsePlanResult(resultText, originalTitle) {
222
+ // Extract JSON block
223
+ const jsonMatch = resultText.match(/```json\s*([\s\S]*?)\s*```/);
224
+ if (!jsonMatch) {
225
+ // Find JSON object directly
226
+ const objMatch = resultText.match(/\{\s*"needsDecomposition"/);
227
+ if (objMatch) {
228
+ return parseDirectJson(resultText, objMatch.index, originalTitle);
229
+ }
230
+ return extractFromText(resultText, originalTitle);
231
+ }
232
+ const parsed = JSON.parse(jsonMatch[1]);
233
+ return {
234
+ success: true,
235
+ originalIssue: originalTitle,
236
+ needsDecomposition: Boolean(parsed.needsDecomposition),
237
+ reason: parsed.reason,
238
+ subTasks: Array.isArray(parsed.subTasks) ? parsed.subTasks : [],
239
+ totalEstimatedMinutes: parsed.totalEstimatedMinutes || 0,
240
+ };
241
+ }
242
+ /**
243
+ * Parse JSON directly
244
+ */
245
+ function parseDirectJson(text, startIdx, originalTitle) {
246
+ let depth = 0;
247
+ let endIdx = startIdx;
248
+ for (let i = startIdx; i < text.length; i++) {
249
+ if (text[i] === '{')
250
+ depth++;
251
+ if (text[i] === '}') {
252
+ depth--;
253
+ if (depth === 0) {
254
+ endIdx = i + 1;
255
+ break;
256
+ }
257
+ }
258
+ }
259
+ try {
260
+ const parsed = JSON.parse(text.slice(startIdx, endIdx));
261
+ return {
262
+ success: true,
263
+ originalIssue: originalTitle,
264
+ needsDecomposition: Boolean(parsed.needsDecomposition),
265
+ reason: parsed.reason,
266
+ subTasks: Array.isArray(parsed.subTasks) ? parsed.subTasks : [],
267
+ totalEstimatedMinutes: parsed.totalEstimatedMinutes || 0,
268
+ };
269
+ }
270
+ catch {
271
+ return extractFromText(text, originalTitle);
272
+ }
273
+ }
274
+ /**
275
+ * Extract from text (fallback)
276
+ */
277
+ function extractFromText(text, originalTitle) {
278
+ // Determined that decomposition is not needed
279
+ if (text.toLowerCase().includes('no decomposition') ||
280
+ text.includes('no decomposition needed') ||
281
+ text.includes('single task')) {
282
+ return {
283
+ success: true,
284
+ originalIssue: originalTitle,
285
+ needsDecomposition: false,
286
+ reason: 'Planner determined no decomposition needed',
287
+ subTasks: [],
288
+ totalEstimatedMinutes: 30,
289
+ };
290
+ }
291
+ // Parse failure - log raw output for debugging
292
+ console.error('[Planner] Parse failed - raw output (first 1000 chars):');
293
+ console.error(text.slice(0, 1000));
294
+ // Parse failure - assume decomposition needed by default
295
+ return {
296
+ success: false,
297
+ originalIssue: originalTitle,
298
+ needsDecomposition: true,
299
+ reason: 'Failed to parse planner output',
300
+ subTasks: [],
301
+ totalEstimatedMinutes: 0,
302
+ error: 'Could not parse planner output',
303
+ };
304
+ }
305
+ // Linear Integration
306
+ /**
307
+ * Create sub-tasks as Linear sub-issues
308
+ */
309
+ export async function createLinearSubIssues(parentIssueId, subTasks, _teamId, _projectId) {
310
+ // This function needs to call Linear MCP directly,
311
+ // so autonomousRunner uses mcp__linear-server__create_issue
312
+ // Here we only prepare data
313
+ const createdIds = [];
314
+ // Note: actual Linear API calls are made in autonomousRunner
315
+ console.log(`[Planner] Prepared ${subTasks.length} sub-issues for ${parentIssueId}`);
316
+ return { success: true, createdIds };
317
+ }
318
+ /**
319
+ * Estimate issue duration (heuristic)
320
+ */
321
+ export function estimateTaskDuration(task) {
322
+ const title = task.title.toLowerCase();
323
+ const desc = (task.description || '').toLowerCase();
324
+ const combined = `${title} ${desc}`;
325
+ // Keyword-based estimation
326
+ let estimate = 30; // Default 30 min
327
+ // Complexity increasing factors
328
+ if (combined.includes('optimization') || combined.includes('optimize'))
329
+ estimate += 30;
330
+ if (combined.includes('refactor') || combined.includes('refactoring'))
331
+ estimate += 20;
332
+ if (combined.includes('test') || combined.includes('testing'))
333
+ estimate += 15;
334
+ if (combined.includes('migration') || combined.includes('migrate'))
335
+ estimate += 40;
336
+ if (combined.includes('all') || combined.includes('entire') || combined.includes('every'))
337
+ estimate += 30;
338
+ if (combined.includes('ci/cd') || combined.includes('pipeline'))
339
+ estimate += 25;
340
+ if (combined.includes('frontend') && combined.includes('backend'))
341
+ estimate += 40;
342
+ if (combined.includes('playwright') || combined.includes('e2e'))
343
+ estimate += 30;
344
+ // Complexity decreasing factors
345
+ if (combined.includes('bug') || combined.includes('fix') || combined.includes('bugfix'))
346
+ estimate -= 10;
347
+ if (combined.includes('docs') || combined.includes('documentation'))
348
+ estimate -= 15;
349
+ if (combined.includes('simple') || combined.includes('trivial'))
350
+ estimate -= 15;
351
+ return Math.max(10, estimate);
352
+ }
353
+ /**
354
+ * Determine whether decomposition is needed.
355
+ * Always returns true when enableDecomposition is set — the LLM planner decides.
356
+ * The pre-LLM heuristic only applies if explicitly requested via checkHeuristic flag.
357
+ */
358
+ export function needsDecomposition(task, maxMinutes = 30, checkHeuristic = false) {
359
+ if (checkHeuristic) {
360
+ const estimated = estimateTaskDuration(task);
361
+ return estimated > maxMinutes;
362
+ }
363
+ // Always run planner for all tasks; planner itself will return needsDecomposition:false for small tasks
364
+ return true;
365
+ }
366
+ // Formatting
367
+ /**
368
+ * Format Planner result as a Discord message
369
+ */
370
+ export function formatPlannerResult(result) {
371
+ const lines = [];
372
+ if (!result.success) {
373
+ lines.push(`❌ ${t('agents.planner.report.analysisFailed')}`);
374
+ lines.push(`${t('agents.planner.report.reason', { text: result.error || 'Unknown error' })}`);
375
+ return lines.join('\n');
376
+ }
377
+ if (!result.needsDecomposition) {
378
+ lines.push(`✅ ${t('agents.planner.report.noDecomposition')}`);
379
+ lines.push(t('agents.planner.report.reason', { text: result.reason || '' }));
380
+ lines.push(t('agents.planner.report.estimatedTime', { n: result.totalEstimatedMinutes }));
381
+ return lines.join('\n');
382
+ }
383
+ lines.push(`📋 ${t('agents.planner.report.decompositionDone')}`);
384
+ lines.push(t('agents.planner.report.original', { text: result.originalIssue }));
385
+ lines.push(t('agents.planner.report.reason', { text: result.reason || '' }));
386
+ lines.push('');
387
+ lines.push(t('agents.planner.report.subTasksHeader', { count: result.subTasks.length, totalMinutes: result.totalEstimatedMinutes }));
388
+ for (let i = 0; i < result.subTasks.length; i++) {
389
+ const st = result.subTasks[i];
390
+ const deps = st.dependencies?.length ? t('agents.planner.report.dependency', { deps: st.dependencies.join(', ') }) : '';
391
+ lines.push(`${i + 1}. ${st.title} (~${st.estimatedMinutes}min)${deps}`);
392
+ }
393
+ return lines.join('\n');
394
+ }
395
+ //# sourceMappingURL=planner.js.map