scai 0.1.178 → 1.0.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 (770) hide show
  1. package/README.md +162 -267
  2. package/dist/__tests__/CommitSuggesterCmd.test.js +112 -0
  3. package/dist/__tests__/CommitSuggesterCmd.test.js.map +1 -0
  4. package/dist/__tests__/EvalReportCmd.test.js +645 -0
  5. package/dist/__tests__/EvalReportCmd.test.js.map +1 -0
  6. package/dist/__tests__/ModelCmd.test.js +64 -0
  7. package/dist/__tests__/ModelCmd.test.js.map +1 -0
  8. package/dist/__tests__/agents/agentActions.test.js +345 -0
  9. package/dist/__tests__/agents/agentActions.test.js.map +1 -0
  10. package/dist/__tests__/agents/agentFeedback.test.js +118 -0
  11. package/dist/__tests__/agents/agentFeedback.test.js.map +1 -0
  12. package/dist/__tests__/agents/agentGeneralScope.test.js +74 -0
  13. package/dist/__tests__/agents/agentGeneralScope.test.js.map +1 -0
  14. package/dist/__tests__/agents/agentLoop.test.js +1723 -0
  15. package/dist/__tests__/agents/agentLoop.test.js.map +1 -0
  16. package/dist/__tests__/agents/agentPolicyState.test.js +948 -0
  17. package/dist/__tests__/agents/agentPolicyState.test.js.map +1 -0
  18. package/dist/__tests__/agents/agentReadEvidence.test.js +170 -0
  19. package/dist/__tests__/agents/agentReadEvidence.test.js.map +1 -0
  20. package/dist/__tests__/agents/agentReadPersistence.test.js +129 -0
  21. package/dist/__tests__/agents/agentReadPersistence.test.js.map +1 -0
  22. package/dist/__tests__/agents/agentResumeCheckpoint.test.js +90 -0
  23. package/dist/__tests__/agents/agentResumeCheckpoint.test.js.map +1 -0
  24. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js +289 -0
  25. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js.map +1 -0
  26. package/dist/__tests__/agents/agentSearchOwnership.test.js +166 -0
  27. package/dist/__tests__/agents/agentSearchOwnership.test.js.map +1 -0
  28. package/dist/__tests__/agents/agentSearchRanking.test.js +139 -0
  29. package/dist/__tests__/agents/agentSearchRanking.test.js.map +1 -0
  30. package/dist/__tests__/agents/agentSearchRouting.test.js +584 -0
  31. package/dist/__tests__/agents/agentSearchRouting.test.js.map +1 -0
  32. package/dist/__tests__/agents/agentSearchScoring.test.js +23 -0
  33. package/dist/__tests__/agents/agentSearchScoring.test.js.map +1 -0
  34. package/dist/__tests__/agents/agentSearchShared.test.js +78 -0
  35. package/dist/__tests__/agents/agentSearchShared.test.js.map +1 -0
  36. package/dist/__tests__/agents/agentStateMachine.test.js +58 -0
  37. package/dist/__tests__/agents/agentStateMachine.test.js.map +1 -0
  38. package/dist/__tests__/agents/agentTaskPersistence.test.js +156 -0
  39. package/dist/__tests__/agents/agentTaskPersistence.test.js.map +1 -0
  40. package/dist/__tests__/agents/agentTools.test.js +69 -0
  41. package/dist/__tests__/agents/agentTools.test.js.map +1 -0
  42. package/dist/__tests__/agents/agentTransform.test.js +779 -0
  43. package/dist/__tests__/agents/agentTransform.test.js.map +1 -0
  44. package/dist/__tests__/agents/analysisPlanGenStep.test.js +157 -0
  45. package/dist/__tests__/agents/analysisPlanGenStep.test.js.map +1 -0
  46. package/dist/__tests__/agents/answerOnlyCompletion.test.js +75 -0
  47. package/dist/__tests__/agents/answerOnlyCompletion.test.js.map +1 -0
  48. package/dist/__tests__/agents/decideNextAction.test.js +1662 -0
  49. package/dist/__tests__/agents/decideNextAction.test.js.map +1 -0
  50. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js +258 -0
  51. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js.map +1 -0
  52. package/dist/__tests__/agents/evidenceVerifierStep.test.js +113 -0
  53. package/dist/__tests__/agents/evidenceVerifierStep.test.js.map +1 -0
  54. package/dist/__tests__/agents/executionPolicyResolver.test.js +208 -0
  55. package/dist/__tests__/agents/executionPolicyResolver.test.js.map +1 -0
  56. package/dist/__tests__/agents/fileCheckStep.test.js +299 -0
  57. package/dist/__tests__/agents/fileCheckStep.test.js.map +1 -0
  58. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js +35 -0
  59. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js.map +1 -0
  60. package/dist/__tests__/agents/guardState.test.js +297 -0
  61. package/dist/__tests__/agents/guardState.test.js.map +1 -0
  62. package/dist/__tests__/agents/mainAgentHeuristics.test.js +72 -0
  63. package/dist/__tests__/agents/mainAgentHeuristics.test.js.map +1 -0
  64. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js +60 -0
  65. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js.map +1 -0
  66. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js +207 -0
  67. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js.map +1 -0
  68. package/dist/__tests__/agents/prompting.test.js +363 -0
  69. package/dist/__tests__/agents/prompting.test.js.map +1 -0
  70. package/dist/__tests__/agents/readinessGateStep.test.js +180 -0
  71. package/dist/__tests__/agents/readinessGateStep.test.js.map +1 -0
  72. package/dist/__tests__/agents/reasonNextStep.test.js +56 -0
  73. package/dist/__tests__/agents/reasonNextStep.test.js.map +1 -0
  74. package/dist/__tests__/agents/reasonNextTaskStep.test.js +284 -0
  75. package/dist/__tests__/agents/reasonNextTaskStep.test.js.map +1 -0
  76. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js +170 -0
  77. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js.map +1 -0
  78. package/dist/__tests__/agents/resolveProgressState.test.js +526 -0
  79. package/dist/__tests__/agents/resolveProgressState.test.js.map +1 -0
  80. package/dist/__tests__/agents/resumeCheckpoint.test.js +50 -0
  81. package/dist/__tests__/agents/resumeCheckpoint.test.js.map +1 -0
  82. package/dist/__tests__/agents/routingDecisionStep.test.js +134 -0
  83. package/dist/__tests__/agents/routingDecisionStep.test.js.map +1 -0
  84. package/dist/__tests__/agents/scopeClassificationStep.test.js +118 -0
  85. package/dist/__tests__/agents/scopeClassificationStep.test.js.map +1 -0
  86. package/dist/__tests__/agents/searchContext.test.js +97 -0
  87. package/dist/__tests__/agents/searchContext.test.js.map +1 -0
  88. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js +73 -0
  89. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js.map +1 -0
  90. package/dist/__tests__/agents/structuredOutput.test.js +45 -0
  91. package/dist/__tests__/agents/structuredOutput.test.js.map +1 -0
  92. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js +59 -0
  93. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js.map +1 -0
  94. package/dist/__tests__/agents/transformPlanGenStep.test.js +92 -0
  95. package/dist/__tests__/agents/transformPlanGenStep.test.js.map +1 -0
  96. package/dist/__tests__/agents/understandIntentStep.test.js +237 -0
  97. package/dist/__tests__/agents/understandIntentStep.test.js.map +1 -0
  98. package/dist/__tests__/agents/understandResumeContext.test.js +65 -0
  99. package/dist/__tests__/agents/understandResumeContext.test.js.map +1 -0
  100. package/dist/__tests__/agents/understandScope.test.js +227 -0
  101. package/dist/__tests__/agents/understandScope.test.js.map +1 -0
  102. package/dist/__tests__/agents/validateChangesStep.test.js +52 -0
  103. package/dist/__tests__/agents/validateChangesStep.test.js.map +1 -0
  104. package/dist/__tests__/askCommandTaskBinding.test.js +176 -0
  105. package/dist/__tests__/askCommandTaskBinding.test.js.map +1 -0
  106. package/dist/__tests__/commandVisibility.test.js +25 -0
  107. package/dist/__tests__/commandVisibility.test.js.map +1 -0
  108. package/dist/__tests__/config.devOutput.test.js +82 -0
  109. package/dist/__tests__/config.devOutput.test.js.map +1 -0
  110. package/dist/__tests__/currentContext.test.js +43 -0
  111. package/dist/__tests__/currentContext.test.js.map +1 -0
  112. package/dist/__tests__/daemonWorker.test.js +51 -0
  113. package/dist/__tests__/daemonWorker.test.js.map +1 -0
  114. package/dist/__tests__/dialogState.test.js +113 -0
  115. package/dist/__tests__/dialogState.test.js.map +1 -0
  116. package/dist/__tests__/evalCommands.test.js +506 -0
  117. package/dist/__tests__/evalCommands.test.js.map +1 -0
  118. package/dist/__tests__/evalCommandsSummary.test.js +68 -0
  119. package/dist/__tests__/evalCommandsSummary.test.js.map +1 -0
  120. package/dist/__tests__/example.test.js +1 -0
  121. package/dist/__tests__/example.test.js.map +1 -0
  122. package/dist/__tests__/factory.commitCommand.test.js +45 -0
  123. package/dist/__tests__/factory.commitCommand.test.js.map +1 -0
  124. package/dist/__tests__/factory.devOutputCommand.test.js +122 -0
  125. package/dist/__tests__/factory.devOutputCommand.test.js.map +1 -0
  126. package/dist/__tests__/factory.evalCommands.test.js +38 -0
  127. package/dist/__tests__/factory.evalCommands.test.js.map +1 -0
  128. package/dist/__tests__/factory.planCommand.test.js +35 -0
  129. package/dist/__tests__/factory.planCommand.test.js.map +1 -0
  130. package/dist/__tests__/factory.setupCommand.test.js +34 -0
  131. package/dist/__tests__/factory.setupCommand.test.js.map +1 -0
  132. package/dist/__tests__/factory.statusCommand.test.js +54 -0
  133. package/dist/__tests__/factory.statusCommand.test.js.map +1 -0
  134. package/dist/__tests__/fileRules/queryTokenRules.test.js +35 -0
  135. package/dist/__tests__/fileRules/queryTokenRules.test.js.map +1 -0
  136. package/dist/__tests__/fileRules/searchPathClassification.test.js +57 -0
  137. package/dist/__tests__/fileRules/searchPathClassification.test.js.map +1 -0
  138. package/dist/__tests__/generate.ollamaRecovery.test.js +344 -0
  139. package/dist/__tests__/generate.ollamaRecovery.test.js.map +1 -0
  140. package/dist/__tests__/index.modelStartup.test.js +24 -0
  141. package/dist/__tests__/index.modelStartup.test.js.map +1 -0
  142. package/dist/__tests__/indexCmd.test.js +85 -0
  143. package/dist/__tests__/indexCmd.test.js.map +1 -0
  144. package/dist/__tests__/indexSlashCommand.test.js +50 -0
  145. package/dist/__tests__/indexSlashCommand.test.js.map +1 -0
  146. package/dist/__tests__/ollamaService.test.js +103 -0
  147. package/dist/__tests__/ollamaService.test.js.map +1 -0
  148. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js +68 -0
  149. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js.map +1 -0
  150. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js +68 -0
  151. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js.map +1 -0
  152. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js +284 -0
  153. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js.map +1 -0
  154. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js +1139 -0
  155. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js.map +1 -0
  156. package/dist/__tests__/pipeline/modules/readFileModule.test.js +146 -0
  157. package/dist/__tests__/pipeline/modules/readFileModule.test.js.map +1 -0
  158. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js +192 -0
  159. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js.map +1 -0
  160. package/dist/__tests__/repoIdentity.test.js +31 -0
  161. package/dist/__tests__/repoIdentity.test.js.map +1 -0
  162. package/dist/__tests__/resumeContext.test.js +87 -0
  163. package/dist/__tests__/resumeContext.test.js.map +1 -0
  164. package/dist/__tests__/resumeState.test.js +239 -0
  165. package/dist/__tests__/resumeState.test.js.map +1 -0
  166. package/dist/__tests__/search/SearchOrchestrator.test.js +836 -0
  167. package/dist/__tests__/search/SearchOrchestrator.test.js.map +1 -0
  168. package/dist/__tests__/shellDialogUi.test.js +52 -0
  169. package/dist/__tests__/shellDialogUi.test.js.map +1 -0
  170. package/dist/__tests__/shellSession.test.js +102 -0
  171. package/dist/__tests__/shellSession.test.js.map +1 -0
  172. package/dist/__tests__/statusOwner.test.js +215 -0
  173. package/dist/__tests__/statusOwner.test.js.map +1 -0
  174. package/dist/__tests__/testing/contextEval.test.js +244 -0
  175. package/dist/__tests__/testing/contextEval.test.js.map +1 -0
  176. package/dist/__tests__/testing/harnessArtifacts.test.js +124 -0
  177. package/dist/__tests__/testing/harnessArtifacts.test.js.map +1 -0
  178. package/dist/__tests__/testing/llmTraceSession.test.js +67 -0
  179. package/dist/__tests__/testing/llmTraceSession.test.js.map +1 -0
  180. package/dist/__tests__/testing/registerDevCliCommands.test.js +35 -0
  181. package/dist/__tests__/testing/registerDevCliCommands.test.js.map +1 -0
  182. package/dist/__tests__/testing/runDiagnosis.test.js +159 -0
  183. package/dist/__tests__/testing/runDiagnosis.test.js.map +1 -0
  184. package/dist/__tests__/testing/runtimeLogReader.test.js +66 -0
  185. package/dist/__tests__/testing/runtimeLogReader.test.js.map +1 -0
  186. package/dist/__tests__/testing/testCommands.test.js +53 -0
  187. package/dist/__tests__/testing/testCommands.test.js.map +1 -0
  188. package/dist/__tests__/utils/compileSearchQuery.test.js +38 -0
  189. package/dist/__tests__/utils/compileSearchQuery.test.js.map +1 -0
  190. package/dist/__tests__/utils/consolePresentation.test.js +105 -0
  191. package/dist/__tests__/utils/consolePresentation.test.js.map +1 -0
  192. package/dist/__tests__/utils/extractFileReferences.test.js +41 -0
  193. package/dist/__tests__/utils/extractFileReferences.test.js.map +1 -0
  194. package/dist/__tests__/utils/log.test.js +34 -0
  195. package/dist/__tests__/utils/log.test.js.map +1 -0
  196. package/dist/__tests__/utils/runtimeLogger.test.js +200 -0
  197. package/dist/__tests__/utils/runtimeLogger.test.js.map +1 -0
  198. package/dist/__tests__/utils/spinner.test.js +31 -0
  199. package/dist/__tests__/utils/spinner.test.js.map +1 -0
  200. package/dist/__tests__/utils/verifyFocusPreference.test.js +41 -0
  201. package/dist/__tests__/utils/verifyFocusPreference.test.js.map +1 -0
  202. package/dist/agent/actions/index.js +301 -0
  203. package/dist/agent/actions/index.js.map +1 -0
  204. package/dist/agent/actions/normalize.js +360 -0
  205. package/dist/agent/actions/normalize.js.map +1 -0
  206. package/dist/agent/actions/schemas.js +129 -0
  207. package/dist/agent/actions/schemas.js.map +1 -0
  208. package/dist/agent/evidence/index.js +320 -0
  209. package/dist/agent/evidence/index.js.map +1 -0
  210. package/dist/agent/feedback/index.js +187 -0
  211. package/dist/agent/feedback/index.js.map +1 -0
  212. package/dist/agent/finalization/index.js +35 -0
  213. package/dist/agent/finalization/index.js.map +1 -0
  214. package/dist/agent/index.js +126 -0
  215. package/dist/agent/index.js.map +1 -0
  216. package/dist/agent/logging/index.js +350 -0
  217. package/dist/agent/logging/index.js.map +1 -0
  218. package/dist/agent/persistence/boot.js +58 -0
  219. package/dist/agent/persistence/boot.js.map +1 -0
  220. package/dist/agent/persistence/currentTask.js +36 -0
  221. package/dist/agent/persistence/currentTask.js.map +1 -0
  222. package/dist/agent/persistence/hydrate.js +42 -0
  223. package/dist/agent/persistence/hydrate.js.map +1 -0
  224. package/dist/agent/persistence/index.js +15 -0
  225. package/dist/agent/persistence/index.js.map +1 -0
  226. package/dist/agent/persistence/snapshots.js +97 -0
  227. package/dist/agent/persistence/snapshots.js.map +1 -0
  228. package/dist/agent/persistence/steps.js +95 -0
  229. package/dist/agent/persistence/steps.js.map +1 -0
  230. package/dist/agent/persistence/tasks.js +195 -0
  231. package/dist/agent/persistence/tasks.js.map +1 -0
  232. package/dist/agent/persistence/turns.js +92 -0
  233. package/dist/agent/persistence/turns.js.map +1 -0
  234. package/dist/agent/policy/ambiguityResolution.js +226 -0
  235. package/dist/agent/policy/ambiguityResolution.js.map +1 -0
  236. package/dist/agent/policy/contracts.js +2 -0
  237. package/dist/agent/policy/contracts.js.map +1 -0
  238. package/dist/agent/policy/coveragePolicy.js +309 -0
  239. package/dist/agent/policy/coveragePolicy.js.map +1 -0
  240. package/dist/agent/policy/endDecisionPolicy.js +31 -0
  241. package/dist/agent/policy/endDecisionPolicy.js.map +1 -0
  242. package/dist/agent/policy/index.js +344 -0
  243. package/dist/agent/policy/index.js.map +1 -0
  244. package/dist/agent/policy/loopReview.js +778 -0
  245. package/dist/agent/policy/loopReview.js.map +1 -0
  246. package/dist/agent/policy/readinessPolicy.js +108 -0
  247. package/dist/agent/policy/readinessPolicy.js.map +1 -0
  248. package/dist/agent/policy/resolutionPipeline.js +356 -0
  249. package/dist/agent/policy/resolutionPipeline.js.map +1 -0
  250. package/dist/agent/policy/targetClassification.js +33 -0
  251. package/dist/agent/policy/targetClassification.js.map +1 -0
  252. package/dist/agent/prompting/actionChoice.js +90 -0
  253. package/dist/agent/prompting/actionChoice.js.map +1 -0
  254. package/dist/agent/prompting/finalAnswer.js +38 -0
  255. package/dist/agent/prompting/finalAnswer.js.map +1 -0
  256. package/dist/agent/prompting/index.js +14 -0
  257. package/dist/agent/prompting/index.js.map +1 -0
  258. package/dist/agent/prompting/plan.js +59 -0
  259. package/dist/agent/prompting/plan.js.map +1 -0
  260. package/dist/agent/prompting/transform.js +175 -0
  261. package/dist/agent/prompting/transform.js.map +1 -0
  262. package/dist/agent/prompting/understand.js +70 -0
  263. package/dist/agent/prompting/understand.js.map +1 -0
  264. package/dist/agent/read/freshness.js +29 -0
  265. package/dist/agent/read/freshness.js.map +1 -0
  266. package/dist/agent/read/fullReadPrompt.js +43 -0
  267. package/dist/agent/read/fullReadPrompt.js.map +1 -0
  268. package/dist/agent/read/index.js +140 -0
  269. package/dist/agent/read/index.js.map +1 -0
  270. package/dist/agent/read/persistence.js +88 -0
  271. package/dist/agent/read/persistence.js.map +1 -0
  272. package/dist/agent/read/summarizeReadEvidence.js +733 -0
  273. package/dist/agent/read/summarizeReadEvidence.js.map +1 -0
  274. package/dist/agent/read/targetResolution.js +126 -0
  275. package/dist/agent/read/targetResolution.js.map +1 -0
  276. package/dist/agent/resume/checkpoint.js +41 -0
  277. package/dist/agent/resume/checkpoint.js.map +1 -0
  278. package/dist/agent/runtime/lifecycle.js +67 -0
  279. package/dist/agent/runtime/lifecycle.js.map +1 -0
  280. package/dist/agent/runtime/progress.js +178 -0
  281. package/dist/agent/runtime/progress.js.map +1 -0
  282. package/dist/agent/runtime/runAgentLoop.js +402 -0
  283. package/dist/agent/runtime/runAgentLoop.js.map +1 -0
  284. package/dist/agent/runtime/runAgentPlanOnly.js +127 -0
  285. package/dist/agent/runtime/runAgentPlanOnly.js.map +1 -0
  286. package/dist/agent/runtime/understand.js +336 -0
  287. package/dist/agent/runtime/understand.js.map +1 -0
  288. package/dist/agent/search/batchPlanner.js +274 -0
  289. package/dist/agent/search/batchPlanner.js.map +1 -0
  290. package/dist/agent/search/candidateRetentionPolicy.js +184 -0
  291. package/dist/agent/search/candidateRetentionPolicy.js.map +1 -0
  292. package/dist/agent/search/directory.js +51 -0
  293. package/dist/agent/search/directory.js.map +1 -0
  294. package/dist/agent/search/exactTarget.js +151 -0
  295. package/dist/agent/search/exactTarget.js.map +1 -0
  296. package/dist/agent/search/fragment.js +110 -0
  297. package/dist/agent/search/fragment.js.map +1 -0
  298. package/dist/agent/search/index.js +166 -0
  299. package/dist/agent/search/index.js.map +1 -0
  300. package/dist/agent/search/laneClassifier.js +119 -0
  301. package/dist/agent/search/laneClassifier.js.map +1 -0
  302. package/dist/agent/search/limits.js +10 -0
  303. package/dist/agent/search/limits.js.map +1 -0
  304. package/dist/agent/search/ranking.js +22 -0
  305. package/dist/agent/search/ranking.js.map +1 -0
  306. package/dist/agent/search/regex.js +83 -0
  307. package/dist/agent/search/regex.js.map +1 -0
  308. package/dist/agent/search/routePolicy.js +11 -0
  309. package/dist/agent/search/routePolicy.js.map +1 -0
  310. package/dist/agent/search/searchContext.js +128 -0
  311. package/dist/agent/search/searchContext.js.map +1 -0
  312. package/dist/agent/search/semantic.js +113 -0
  313. package/dist/agent/search/semantic.js.map +1 -0
  314. package/dist/agent/search/semanticIndexSearch.js +202 -0
  315. package/dist/agent/search/semanticIndexSearch.js.map +1 -0
  316. package/dist/agent/search/shared.js +283 -0
  317. package/dist/agent/search/shared.js.map +1 -0
  318. package/dist/agent/search/shell.js +202 -0
  319. package/dist/agent/search/shell.js.map +1 -0
  320. package/dist/agent/search/snippetEvidence.js +57 -0
  321. package/dist/agent/search/snippetEvidence.js.map +1 -0
  322. package/dist/agent/search/types.js +2 -0
  323. package/dist/agent/search/types.js.map +1 -0
  324. package/dist/agent/state/index.js +99 -0
  325. package/dist/agent/state/index.js.map +1 -0
  326. package/dist/agent/state/memory.js +56 -0
  327. package/dist/agent/state/memory.js.map +1 -0
  328. package/dist/agent/structuredOutput/index.js +28 -0
  329. package/dist/agent/structuredOutput/index.js.map +1 -0
  330. package/dist/agent/tools/index.js +199 -0
  331. package/dist/agent/tools/index.js.map +1 -0
  332. package/dist/agent/transform/index.js +519 -0
  333. package/dist/agent/transform/index.js.map +1 -0
  334. package/dist/agent/transform/syntax.js +49 -0
  335. package/dist/agent/transform/syntax.js.map +1 -0
  336. package/dist/agent/types.js +20 -0
  337. package/dist/agent/types.js.map +1 -0
  338. package/dist/agents/actionRegistry.js +114 -0
  339. package/dist/agents/actionRegistry.js.map +1 -0
  340. package/dist/agents/agent.js +5 -0
  341. package/dist/agents/agent.js.map +1 -0
  342. package/dist/agents/agentActions.js +5 -0
  343. package/dist/agents/agentActions.js.map +1 -0
  344. package/dist/agents/agentEvidence.js +5 -0
  345. package/dist/agents/agentEvidence.js.map +1 -0
  346. package/dist/agents/agentFeedback.js +5 -0
  347. package/dist/agents/agentFeedback.js.map +1 -0
  348. package/dist/agents/agentLogging.js +5 -0
  349. package/dist/agents/agentLogging.js.map +1 -0
  350. package/dist/agents/agentLoop.js +5 -0
  351. package/dist/agents/agentLoop.js.map +1 -0
  352. package/dist/agents/agentMemory.js +5 -0
  353. package/dist/agents/agentMemory.js.map +1 -0
  354. package/dist/agents/agentPlanMode.js +5 -0
  355. package/dist/agents/agentPlanMode.js.map +1 -0
  356. package/dist/agents/agentPolicyState.js +5 -0
  357. package/dist/agents/agentPolicyState.js.map +1 -0
  358. package/dist/agents/agentProgress.js +93 -0
  359. package/dist/agents/agentProgress.js.map +1 -0
  360. package/dist/agents/agentSchemas.js +5 -0
  361. package/dist/agents/agentSchemas.js.map +1 -0
  362. package/dist/agents/agentSearchScoring.js +5 -0
  363. package/dist/agents/agentSearchScoring.js.map +1 -0
  364. package/dist/agents/agentStateMachine.js +5 -0
  365. package/dist/agents/agentStateMachine.js.map +1 -0
  366. package/dist/agents/agentTools.js +5 -0
  367. package/dist/agents/agentTools.js.map +1 -0
  368. package/dist/agents/agentTypes.js +5 -0
  369. package/dist/agents/agentTypes.js.map +1 -0
  370. package/dist/agents/agentUnderstand.js +5 -0
  371. package/dist/agents/agentUnderstand.js.map +1 -0
  372. package/dist/agents/analysisPlanGenStep.js +194 -17
  373. package/dist/agents/analysisPlanGenStep.js.map +1 -0
  374. package/dist/agents/answerOnlyCompletion.js +32 -0
  375. package/dist/agents/answerOnlyCompletion.js.map +1 -0
  376. package/dist/agents/collaboratorStep.js +1 -0
  377. package/dist/agents/collaboratorStep.js.map +1 -0
  378. package/dist/agents/decideNextAction.js +444 -0
  379. package/dist/agents/decideNextAction.js.map +1 -0
  380. package/dist/agents/deriveFocusFromSearchStep.js +83 -0
  381. package/dist/agents/deriveFocusFromSearchStep.js.map +1 -0
  382. package/dist/agents/evidenceVerifierStep.js +104 -13
  383. package/dist/agents/evidenceVerifierStep.js.map +1 -0
  384. package/dist/agents/fileCheckStep.js +381 -12
  385. package/dist/agents/fileCheckStep.js.map +1 -0
  386. package/dist/agents/giveUpEvaluatorStep.js +63 -0
  387. package/dist/agents/giveUpEvaluatorStep.js.map +1 -0
  388. package/dist/agents/guardPolicy.js +20 -0
  389. package/dist/agents/guardPolicy.js.map +1 -0
  390. package/dist/agents/guards/executionPolicyResolver.js +165 -0
  391. package/dist/agents/guards/executionPolicyResolver.js.map +1 -0
  392. package/dist/agents/guards/guardState.js +195 -0
  393. package/dist/agents/guards/guardState.js.map +1 -0
  394. package/dist/agents/guards/resolveProgressState.js +403 -0
  395. package/dist/agents/guards/resolveProgressState.js.map +1 -0
  396. package/dist/agents/infoPlanGenStep.js +66 -8
  397. package/dist/agents/infoPlanGenStep.js.map +1 -0
  398. package/dist/agents/integrateFeedbackStep.js +1 -0
  399. package/dist/agents/integrateFeedbackStep.js.map +1 -0
  400. package/dist/agents/iterationFileSelector.js +8 -7
  401. package/dist/agents/iterationFileSelector.js.map +1 -0
  402. package/dist/agents/mainAgentActivityLog.js +85 -0
  403. package/dist/agents/mainAgentActivityLog.js.map +1 -0
  404. package/dist/agents/mainAgentHeuristics.js +173 -0
  405. package/dist/agents/mainAgentHeuristics.js.map +1 -0
  406. package/dist/agents/mainAgentVerify.js +159 -0
  407. package/dist/agents/mainAgentVerify.js.map +1 -0
  408. package/dist/agents/objectiveEvaluatorStep.js +103 -0
  409. package/dist/agents/objectiveEvaluatorStep.js.map +1 -0
  410. package/dist/agents/outerLoopRecoveryEvaluator.js +108 -0
  411. package/dist/agents/outerLoopRecoveryEvaluator.js.map +1 -0
  412. package/dist/agents/readinessGateStep.js +95 -9
  413. package/dist/agents/readinessGateStep.js.map +1 -0
  414. package/dist/agents/reasonNextStep.js +9 -8
  415. package/dist/agents/reasonNextStep.js.map +1 -0
  416. package/dist/agents/reasonNextTaskStep.js +267 -144
  417. package/dist/agents/reasonNextTaskStep.js.map +1 -0
  418. package/dist/agents/researchPlanGenStep.js +61 -25
  419. package/dist/agents/researchPlanGenStep.js.map +1 -0
  420. package/dist/agents/resolveAgentTargetClassification.js +5 -0
  421. package/dist/agents/resolveAgentTargetClassification.js.map +1 -0
  422. package/dist/agents/resolveExecutionModeStep.js +1 -0
  423. package/dist/agents/resolveExecutionModeStep.js.map +1 -0
  424. package/dist/agents/resolveExplicitTargetsStep.js +74 -0
  425. package/dist/agents/resolveExplicitTargetsStep.js.map +1 -0
  426. package/dist/agents/routingDecisionStep.js +58 -11
  427. package/dist/agents/routingDecisionStep.js.map +1 -0
  428. package/dist/agents/scopeClassificationStep.js +66 -3
  429. package/dist/agents/scopeClassificationStep.js.map +1 -0
  430. package/dist/agents/selectRelevantSourcesStep.js +13 -5
  431. package/dist/agents/selectRelevantSourcesStep.js.map +1 -0
  432. package/dist/agents/structuralPreloadStep.js +3 -4
  433. package/dist/agents/structuralPreloadStep.js.map +1 -0
  434. package/dist/agents/transformPlanGenStep.js +105 -18
  435. package/dist/agents/transformPlanGenStep.js.map +1 -0
  436. package/dist/agents/understandIntentStep.js +237 -17
  437. package/dist/agents/understandIntentStep.js.map +1 -0
  438. package/dist/agents/validateChangesStep.js +16 -2
  439. package/dist/agents/validateChangesStep.js.map +1 -0
  440. package/dist/agents/writeFileStep.js +1 -0
  441. package/dist/agents/writeFileStep.js.map +1 -0
  442. package/dist/commands/AskCmd.js +139 -44
  443. package/dist/commands/AskCmd.js.map +1 -0
  444. package/dist/commands/BackupCmd.js +1 -0
  445. package/dist/commands/BackupCmd.js.map +1 -0
  446. package/dist/commands/ChangeLogUpdateCmd.js +1 -0
  447. package/dist/commands/ChangeLogUpdateCmd.js.map +1 -0
  448. package/dist/commands/CommitSuggesterCmd.js +55 -13
  449. package/dist/commands/CommitSuggesterCmd.js.map +1 -0
  450. package/dist/commands/DaemonCmd.js +52 -14
  451. package/dist/commands/DaemonCmd.js.map +1 -0
  452. package/dist/commands/DeleteIndex.js +1 -0
  453. package/dist/commands/DeleteIndex.js.map +1 -0
  454. package/dist/commands/EvalReportCmd.js +374 -0
  455. package/dist/commands/EvalReportCmd.js.map +1 -0
  456. package/dist/commands/FindCmd.js +1 -0
  457. package/dist/commands/FindCmd.js.map +1 -0
  458. package/dist/commands/GitCmd.js +1 -0
  459. package/dist/commands/GitCmd.js.map +1 -0
  460. package/dist/commands/IndexCmd.js +11 -79
  461. package/dist/commands/IndexCmd.js.map +1 -0
  462. package/dist/commands/InspectCmd.js +1 -0
  463. package/dist/commands/InspectCmd.js.map +1 -0
  464. package/dist/commands/ModelCmd.js +24 -0
  465. package/dist/commands/ModelCmd.js.map +1 -0
  466. package/dist/commands/ReadlineSingleton.js +1 -0
  467. package/dist/commands/ReadlineSingleton.js.map +1 -0
  468. package/dist/commands/ResetDbCmd.js +18 -1
  469. package/dist/commands/ResetDbCmd.js.map +1 -0
  470. package/dist/commands/ReviewCmd.js +1 -0
  471. package/dist/commands/ReviewCmd.js.map +1 -0
  472. package/dist/commands/StatusCmd.js +22 -0
  473. package/dist/commands/StatusCmd.js.map +1 -0
  474. package/dist/commands/StopDaemonCmd.js +1 -0
  475. package/dist/commands/StopDaemonCmd.js.map +1 -0
  476. package/dist/commands/SummaryCmd.js +1 -0
  477. package/dist/commands/SummaryCmd.js.map +1 -0
  478. package/dist/commands/SwitchCmd.js +9 -15
  479. package/dist/commands/SwitchCmd.js.map +1 -0
  480. package/dist/commands/TasksCmd.js +142 -57
  481. package/dist/commands/TasksCmd.js.map +1 -0
  482. package/dist/commands/TestCmd.js +66 -0
  483. package/dist/commands/TestCmd.js.map +1 -0
  484. package/dist/commands/WorkflowCmd.js +1 -0
  485. package/dist/commands/WorkflowCmd.js.map +1 -0
  486. package/dist/commands/commandVisibility.js +27 -0
  487. package/dist/commands/commandVisibility.js.map +1 -0
  488. package/dist/commands/evalCommands.js +1337 -0
  489. package/dist/commands/evalCommands.js.map +1 -0
  490. package/dist/commands/factory.js +206 -38
  491. package/dist/commands/factory.js.map +1 -0
  492. package/dist/config.js +62 -11
  493. package/dist/config.js.map +1 -0
  494. package/dist/constants.js +21 -3
  495. package/dist/constants.js.map +1 -0
  496. package/dist/context.js +33 -32
  497. package/dist/context.js.map +1 -0
  498. package/dist/daemon/daemonQueues.js +1 -20
  499. package/dist/daemon/daemonQueues.js.map +1 -0
  500. package/dist/daemon/daemonWorker.js +26 -37
  501. package/dist/daemon/daemonWorker.js.map +1 -0
  502. package/dist/daemon/generateSummaries.js +1 -0
  503. package/dist/daemon/generateSummaries.js.map +1 -0
  504. package/dist/daemon/runFolderCapsuleBatch.js +1 -0
  505. package/dist/daemon/runFolderCapsuleBatch.js.map +1 -0
  506. package/dist/daemon/runIndexingBatch.js +1 -0
  507. package/dist/daemon/runIndexingBatch.js.map +1 -0
  508. package/dist/daemon/runKgBatch.js +9 -1
  509. package/dist/daemon/runKgBatch.js.map +1 -0
  510. package/dist/db/backup.js +1 -0
  511. package/dist/db/backup.js.map +1 -0
  512. package/dist/db/client.js +18 -3
  513. package/dist/db/client.js.map +1 -0
  514. package/dist/db/fileIndex.js +110 -152
  515. package/dist/db/fileIndex.js.map +1 -0
  516. package/dist/db/functionExtractors/extractFromJava.js +1 -0
  517. package/dist/db/functionExtractors/extractFromJava.js.map +1 -0
  518. package/dist/db/functionExtractors/extractFromJs.js +1 -0
  519. package/dist/db/functionExtractors/extractFromJs.js.map +1 -0
  520. package/dist/db/functionExtractors/extractFromTs.js +1 -0
  521. package/dist/db/functionExtractors/extractFromTs.js.map +1 -0
  522. package/dist/db/functionExtractors/extractFromXML.js +1 -0
  523. package/dist/db/functionExtractors/extractFromXML.js.map +1 -0
  524. package/dist/db/functionExtractors/index.js +1 -0
  525. package/dist/db/functionExtractors/index.js.map +1 -0
  526. package/dist/db/functionIndex.js +9 -0
  527. package/dist/db/functionIndex.js.map +1 -0
  528. package/dist/db/schema.js +314 -99
  529. package/dist/db/schema.js.map +1 -0
  530. package/dist/db/sqlTemplates.js +1 -0
  531. package/dist/db/sqlTemplates.js.map +1 -0
  532. package/dist/fileRules/builtins.js +1 -0
  533. package/dist/fileRules/builtins.js.map +1 -0
  534. package/dist/fileRules/classifyFile.js +1 -0
  535. package/dist/fileRules/classifyFile.js.map +1 -0
  536. package/dist/fileRules/codeAllowedExtensions.js +1 -0
  537. package/dist/fileRules/codeAllowedExtensions.js.map +1 -0
  538. package/dist/fileRules/detectFileType.js +1 -0
  539. package/dist/fileRules/detectFileType.js.map +1 -0
  540. package/dist/fileRules/fileClassifier.js +1 -0
  541. package/dist/fileRules/fileClassifier.js.map +1 -0
  542. package/dist/fileRules/fileExceptions.js +1 -0
  543. package/dist/fileRules/fileExceptions.js.map +1 -0
  544. package/dist/fileRules/ignoredExtensions.js +1 -0
  545. package/dist/fileRules/ignoredExtensions.js.map +1 -0
  546. package/dist/fileRules/ignoredPaths.js +48 -5
  547. package/dist/fileRules/ignoredPaths.js.map +1 -0
  548. package/dist/fileRules/queryTokenRules.js +176 -0
  549. package/dist/fileRules/queryTokenRules.js.map +1 -0
  550. package/dist/fileRules/searchPathClassification.js +58 -0
  551. package/dist/fileRules/searchPathClassification.js.map +1 -0
  552. package/dist/fileRules/shouldIgnoreFiles.js +1 -0
  553. package/dist/fileRules/shouldIgnoreFiles.js.map +1 -0
  554. package/dist/fileRules/stopWords.js +9 -0
  555. package/dist/fileRules/stopWords.js.map +1 -0
  556. package/dist/fileRules/wellKnownRepoFiles.js +1 -0
  557. package/dist/fileRules/wellKnownRepoFiles.js.map +1 -0
  558. package/dist/git/commitSummary.js +227 -0
  559. package/dist/git/commitSummary.js.map +1 -0
  560. package/dist/github/api.js +1 -0
  561. package/dist/github/api.js.map +1 -0
  562. package/dist/github/auth.js +1 -0
  563. package/dist/github/auth.js.map +1 -0
  564. package/dist/github/github.js +1 -0
  565. package/dist/github/github.js.map +1 -0
  566. package/dist/github/githubAuthCheck.js +1 -0
  567. package/dist/github/githubAuthCheck.js.map +1 -0
  568. package/dist/github/postComments.js +1 -0
  569. package/dist/github/postComments.js.map +1 -0
  570. package/dist/github/repo.js +15 -24
  571. package/dist/github/repo.js.map +1 -0
  572. package/dist/github/token.js +1 -0
  573. package/dist/github/token.js.map +1 -0
  574. package/dist/github/types.js +1 -0
  575. package/dist/github/types.js.map +1 -0
  576. package/dist/index.js +318 -37
  577. package/dist/index.js.map +1 -0
  578. package/dist/lib/generate.js +264 -20
  579. package/dist/lib/generate.js.map +1 -0
  580. package/dist/lib/generateFolderCapsules.js +1 -0
  581. package/dist/lib/generateFolderCapsules.js.map +1 -0
  582. package/dist/lib/ollamaModelPolicy.js +59 -0
  583. package/dist/lib/ollamaModelPolicy.js.map +1 -0
  584. package/dist/lib/spinner.js +29 -9
  585. package/dist/lib/spinner.js.map +1 -0
  586. package/dist/modelSetup.js +25 -78
  587. package/dist/modelSetup.js.map +1 -0
  588. package/dist/pipeline/modules/changeLogModule.js +10 -1
  589. package/dist/pipeline/modules/changeLogModule.js.map +1 -0
  590. package/dist/pipeline/modules/cleanupModule.js +1 -0
  591. package/dist/pipeline/modules/cleanupModule.js.map +1 -0
  592. package/dist/pipeline/modules/codeTransformModule.js +10 -16
  593. package/dist/pipeline/modules/codeTransformModule.js.map +1 -0
  594. package/dist/pipeline/modules/commentModule.js +12 -0
  595. package/dist/pipeline/modules/commentModule.js.map +1 -0
  596. package/dist/pipeline/modules/commitSuggesterModule.js +82 -12
  597. package/dist/pipeline/modules/commitSuggesterModule.js.map +1 -0
  598. package/dist/pipeline/modules/contextReviewModule.js +12 -1
  599. package/dist/pipeline/modules/contextReviewModule.js.map +1 -0
  600. package/dist/pipeline/modules/dialogAnswerModule.js +58 -0
  601. package/dist/pipeline/modules/dialogAnswerModule.js.map +1 -0
  602. package/dist/pipeline/modules/fileSearchModule.js +5 -143
  603. package/dist/pipeline/modules/fileSearchModule.js.map +1 -0
  604. package/dist/pipeline/modules/finalAnswerModule.js +1176 -151
  605. package/dist/pipeline/modules/finalAnswerModule.js.map +1 -0
  606. package/dist/pipeline/modules/kgModule.js +18 -1
  607. package/dist/pipeline/modules/kgModule.js.map +1 -0
  608. package/dist/pipeline/modules/planAnswerModule.js +99 -0
  609. package/dist/pipeline/modules/planAnswerModule.js.map +1 -0
  610. package/dist/pipeline/modules/readFileModule.js +300 -0
  611. package/dist/pipeline/modules/readFileModule.js.map +1 -0
  612. package/dist/pipeline/modules/reviewModule.js +10 -1
  613. package/dist/pipeline/modules/reviewModule.js.map +1 -0
  614. package/dist/pipeline/modules/searchDbModule.js +159 -0
  615. package/dist/pipeline/modules/searchDbModule.js.map +1 -0
  616. package/dist/pipeline/modules/searchListDirectoryModule.js +62 -0
  617. package/dist/pipeline/modules/searchListDirectoryModule.js.map +1 -0
  618. package/dist/pipeline/modules/searchModuleShared.js +71 -0
  619. package/dist/pipeline/modules/searchModuleShared.js.map +1 -0
  620. package/dist/pipeline/modules/searchRegexModule.js +59 -0
  621. package/dist/pipeline/modules/searchRegexModule.js.map +1 -0
  622. package/dist/pipeline/modules/semanticAnalysisModule.js +185 -28
  623. package/dist/pipeline/modules/semanticAnalysisModule.js.map +1 -0
  624. package/dist/pipeline/modules/summaryModule.js +11 -1
  625. package/dist/pipeline/modules/summaryModule.js.map +1 -0
  626. package/dist/pipeline/registry/moduleRegistry.js +9 -0
  627. package/dist/pipeline/registry/moduleRegistry.js.map +1 -0
  628. package/dist/pipeline/runModulePipeline.js +1 -0
  629. package/dist/pipeline/runModulePipeline.js.map +1 -0
  630. package/dist/scripts/dbScriptSupport.js +172 -0
  631. package/dist/scripts/dbScriptSupport.js.map +1 -0
  632. package/dist/scripts/dbcheck.js +173 -267
  633. package/dist/scripts/dbcheck.js.map +1 -0
  634. package/dist/scripts/dboverview.js +161 -0
  635. package/dist/scripts/dboverview.js.map +1 -0
  636. package/dist/scripts/migrateDb.js +1 -0
  637. package/dist/scripts/migrateDb.js.map +1 -0
  638. package/dist/search/SearchOrchestrator.js +928 -0
  639. package/dist/search/SearchOrchestrator.js.map +1 -0
  640. package/dist/search/sharedRankingPolicy.js +283 -0
  641. package/dist/search/sharedRankingPolicy.js.map +1 -0
  642. package/dist/setup/reindexOwner.js +97 -0
  643. package/dist/setup/reindexOwner.js.map +1 -0
  644. package/dist/setup/setupOwner.js +100 -0
  645. package/dist/setup/setupOwner.js.map +1 -0
  646. package/dist/shell/dialogUi.js +81 -0
  647. package/dist/shell/dialogUi.js.map +1 -0
  648. package/dist/shellSession.js +126 -0
  649. package/dist/shellSession.js.map +1 -0
  650. package/dist/status/statusOwner.js +239 -0
  651. package/dist/status/statusOwner.js.map +1 -0
  652. package/dist/testing/contextEval.js +514 -0
  653. package/dist/testing/contextEval.js.map +1 -0
  654. package/dist/testing/fixtures/transform/small-file.input.js +5 -0
  655. package/dist/testing/fixtures/transform/small-file.input.js.map +1 -0
  656. package/dist/testing/harnessArtifacts.js +112 -0
  657. package/dist/testing/harnessArtifacts.js.map +1 -0
  658. package/dist/testing/llmTraceSession.js +67 -0
  659. package/dist/testing/llmTraceSession.js.map +1 -0
  660. package/dist/testing/registerDevCliCommands.js +43 -0
  661. package/dist/testing/registerDevCliCommands.js.map +1 -0
  662. package/dist/testing/runDiagnosis.js +248 -0
  663. package/dist/testing/runDiagnosis.js.map +1 -0
  664. package/dist/testing/runtimeLogReader.js +144 -0
  665. package/dist/testing/runtimeLogReader.js.map +1 -0
  666. package/dist/testing/testCommands.js +35 -303
  667. package/dist/testing/testCommands.js.map +1 -0
  668. package/dist/testing/testRegistry.js +233 -0
  669. package/dist/testing/testRegistry.js.map +1 -0
  670. package/dist/types.js +1 -0
  671. package/dist/types.js.map +1 -0
  672. package/dist/utils/buildContextualPrompt.js +26 -75
  673. package/dist/utils/buildContextualPrompt.js.map +1 -0
  674. package/dist/utils/changeLogPrompt.js +1 -0
  675. package/dist/utils/changeLogPrompt.js.map +1 -0
  676. package/dist/utils/checkModel.js +17 -92
  677. package/dist/utils/checkModel.js.map +1 -0
  678. package/dist/utils/commentMap.js +1 -0
  679. package/dist/utils/commentMap.js.map +1 -0
  680. package/dist/utils/compileSearchQuery.js +23 -9
  681. package/dist/utils/compileSearchQuery.js.map +1 -0
  682. package/dist/utils/consolePresentation.js +208 -0
  683. package/dist/utils/consolePresentation.js.map +1 -0
  684. package/dist/utils/contentUtils.js +17 -2
  685. package/dist/utils/contentUtils.js.map +1 -0
  686. package/dist/utils/debugContext.js +1 -0
  687. package/dist/utils/debugContext.js.map +1 -0
  688. package/dist/utils/dialogState.js +201 -0
  689. package/dist/utils/dialogState.js.map +1 -0
  690. package/dist/utils/editor.js +1 -0
  691. package/dist/utils/editor.js.map +1 -0
  692. package/dist/utils/executionEvidence.js +50 -0
  693. package/dist/utils/executionEvidence.js.map +1 -0
  694. package/dist/utils/extractFileReferences.js +140 -6
  695. package/dist/utils/extractFileReferences.js.map +1 -0
  696. package/dist/utils/fileEvidenceCache.js +50 -0
  697. package/dist/utils/fileEvidenceCache.js.map +1 -0
  698. package/dist/utils/fileTree.js +1 -0
  699. package/dist/utils/fileTree.js.map +1 -0
  700. package/dist/utils/loadRelevantFolderCapsules.js +35 -5
  701. package/dist/utils/loadRelevantFolderCapsules.js.map +1 -0
  702. package/dist/utils/log.js +10 -1
  703. package/dist/utils/log.js.map +1 -0
  704. package/dist/utils/normalizeData.js +1 -0
  705. package/dist/utils/normalizeData.js.map +1 -0
  706. package/dist/utils/ollamaModelStatus.js +28 -0
  707. package/dist/utils/ollamaModelStatus.js.map +1 -0
  708. package/dist/utils/ollamaService.js +294 -0
  709. package/dist/utils/ollamaService.js.map +1 -0
  710. package/dist/utils/outputFormatter.js +1 -0
  711. package/dist/utils/outputFormatter.js.map +1 -0
  712. package/dist/utils/parseTaggedContent.js +1 -0
  713. package/dist/utils/parseTaggedContent.js.map +1 -0
  714. package/dist/utils/planActions.js +27 -46
  715. package/dist/utils/planActions.js.map +1 -0
  716. package/dist/utils/promptBuilderHelper.js +1 -0
  717. package/dist/utils/promptBuilderHelper.js.map +1 -0
  718. package/dist/utils/promptLogHelper.js +29 -13
  719. package/dist/utils/promptLogHelper.js.map +1 -0
  720. package/dist/utils/queryAnchors.js +71 -0
  721. package/dist/utils/queryAnchors.js.map +1 -0
  722. package/dist/utils/repoIdentity.js +82 -0
  723. package/dist/utils/repoIdentity.js.map +1 -0
  724. package/dist/utils/repoKey.js +1 -0
  725. package/dist/utils/repoKey.js.map +1 -0
  726. package/dist/utils/resolveTargetsToFiles.js +1 -0
  727. package/dist/utils/resolveTargetsToFiles.js.map +1 -0
  728. package/dist/utils/resumeContext.js +219 -0
  729. package/dist/utils/resumeContext.js.map +1 -0
  730. package/dist/utils/resumeState.js +310 -0
  731. package/dist/utils/resumeState.js.map +1 -0
  732. package/dist/utils/rollingPlan.js +118 -0
  733. package/dist/utils/rollingPlan.js.map +1 -0
  734. package/dist/utils/runQueryWithDaemonControl.js +11 -3
  735. package/dist/utils/runQueryWithDaemonControl.js.map +1 -0
  736. package/dist/utils/runtimeLogger.js +252 -0
  737. package/dist/utils/runtimeLogger.js.map +1 -0
  738. package/dist/utils/sanitizeQuery.js +1 -0
  739. package/dist/utils/sanitizeQuery.js.map +1 -0
  740. package/dist/utils/sharedUtils.js +1 -0
  741. package/dist/utils/sharedUtils.js.map +1 -0
  742. package/dist/utils/sleep.js +1 -0
  743. package/dist/utils/sleep.js.map +1 -0
  744. package/dist/utils/splitCodeIntoChunk.js +1 -0
  745. package/dist/utils/splitCodeIntoChunk.js.map +1 -0
  746. package/dist/utils/time.js +66 -0
  747. package/dist/utils/time.js.map +1 -0
  748. package/dist/utils/verifyFocusPreference.js +107 -0
  749. package/dist/utils/verifyFocusPreference.js.map +1 -0
  750. package/dist/utils/vscode.js +1 -0
  751. package/dist/utils/vscode.js.map +1 -0
  752. package/dist/workflow/workflowResolver.js +1 -0
  753. package/dist/workflow/workflowResolver.js.map +1 -0
  754. package/dist/workflow/workflowRunner.js +1 -0
  755. package/dist/workflow/workflowRunner.js.map +1 -0
  756. package/package.json +3 -3
  757. package/dist/agents/MainAgent.js +0 -1886
  758. package/dist/agents/contextReviewStep.js +0 -101
  759. package/dist/agents/finalPlanGenStep.js +0 -107
  760. package/dist/agents/structuralAnalysisStep.js +0 -46
  761. package/dist/agents/validationAnalysisStep.js +0 -87
  762. package/dist/pipeline/modules/chunkManagerModule.js +0 -24
  763. package/dist/pipeline/modules/cleanGeneratedTestsModule.js +0 -33
  764. package/dist/pipeline/modules/fileReaderModule.js +0 -72
  765. package/dist/pipeline/modules/gatherInfoModule.js +0 -181
  766. package/dist/pipeline/modules/generateTestsModule.js +0 -68
  767. package/dist/pipeline/modules/preserveCodeModule.js +0 -195
  768. package/dist/pipeline/modules/refactorModule.js +0 -40
  769. package/dist/pipeline/modules/repairTestsModule.js +0 -48
  770. package/dist/pipeline/modules/runTestsModule.js +0 -37
package/dist/index.js CHANGED
@@ -1,34 +1,203 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * Starts the SCAI CLI in shell mode or command mode.
4
+ *
5
+ * Why this file exists:
6
+ * - it owns the top-level shell loop and command boot path
7
+ * - shell shortcuts like `/resume` should stay aligned with the public CLI commands
8
+ * - shell command UX like `/resume` should stay friendly and consistent in one place
9
+ * - shell mode controls like `/cancel` should stay shallow and not touch task state
10
+ * - query routing here should stay thin and delegate real work to the shared ask pipeline
11
+ */
2
12
  import { spawn } from 'child_process';
3
13
  import { createRequire } from 'module';
4
14
  import fs from 'fs';
5
15
  import os from 'os';
6
16
  import path from 'path';
17
+ import { fileURLToPath } from 'url';
7
18
  import chalk from 'chalk';
8
19
  const require = createRequire(import.meta.url);
9
20
  const shellQuote = require('shell-quote');
10
21
  import { createProgram as cmdFactory } from './commands/factory.js';
22
+ import { isDevCommandsEnabled } from './commands/commandVisibility.js';
23
+ import { registerEvalShellCommands } from './commands/evalCommands.js';
11
24
  import enquirer from 'enquirer';
12
25
  import { runQueryWithDaemonControl } from './utils/runQueryWithDaemonControl.js';
13
- import { RUN_LOG_PATH } from './constants.js';
14
26
  import { registerTestingCommands } from './testing/testCommands.js';
27
+ import { resumeTaskCommand } from './commands/TasksCmd.js';
28
+ import { clearRuntimeLogs } from './utils/runtimeLogger.js';
29
+ import { buildShellAgentRunOptions, buildShellPromptLabel, cancelShellInputMode, clearShellInputMode, clearShellTaskBinding, getAwaitingAgentDialog, printShellCurrentContext, setShellInputMode, updateShellTaskBindingFromAgentMemory, } from './shellSession.js';
30
+ import { buildDialogDisplayLines, normalizeShellDialogReply, resolveShellInputKind } from './shell/dialogUi.js';
15
31
  const { prompt } = enquirer;
16
32
  const program = cmdFactory();
33
+ const enableDevTestCommands = isDevCommandsEnabled();
17
34
  const customCommands = {};
35
+ const shellSession = { inputMode: 'normal' };
18
36
  // ---------------- Run Query with Daemon Control ----------------
19
- async function runQuery(query) {
20
- await runQueryWithDaemonControl(query);
37
+ async function runQuery(query, options) {
38
+ await runQueryWithDaemonControl(query, options);
39
+ }
40
+ function isAgentMemory(memory) {
41
+ return !!memory && typeof memory === "object" && "session" in memory && "events" in memory && "steps" in memory;
42
+ }
43
+ function bindShellResult(result) {
44
+ if (isAgentMemory(result)) {
45
+ updateShellTaskBindingFromAgentMemory(shellSession, result);
46
+ }
47
+ }
48
+ async function runShellAgentQuery(query) {
49
+ const trimmed = query.trim();
50
+ const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, false));
51
+ bindShellResult(memory);
52
+ clearShellInputMode(shellSession);
53
+ }
54
+ async function runShellAgentResumeQuery(query) {
55
+ const trimmed = query.trim();
56
+ if (!trimmed) {
57
+ console.log(chalk.yellow(buildResumeHelpText()));
58
+ return;
59
+ }
60
+ if (!shellSession.agentMemory) {
61
+ console.log(chalk.yellow('No current task to resume.'));
62
+ return;
63
+ }
64
+ const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, true));
65
+ bindShellResult(memory);
66
+ clearShellInputMode(shellSession);
67
+ }
68
+ /**
69
+ * Parses one slash command while keeping the original free-text tail intact.
70
+ *
71
+ * Why this helper exists:
72
+ * - shell-quote token parsing is useful for command dispatch
73
+ * - free-text query commands like `/resume` must keep punctuation exactly as typed
74
+ * - raw tails and tokenized args should be derived once in one place
75
+ */
76
+ export function parseSlashCommand(trimmed) {
77
+ const withoutSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
78
+ const parsed = shellQuote
79
+ .parse(withoutSlash)
80
+ .map((tok) => typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok))
81
+ .filter(Boolean);
82
+ const cmdName = String(parsed[0] ?? '');
83
+ const rawArgs = cmdName
84
+ ? withoutSlash.slice(cmdName.length).trim()
85
+ : '';
86
+ return {
87
+ cmdName,
88
+ argvParts: parsed,
89
+ rawArgs,
90
+ };
91
+ }
92
+ export function buildResumeHelpText() {
93
+ return [
94
+ '/resume continue the current task by prompting for the next query',
95
+ '/resume <query> continue the current task immediately',
96
+ '/resume --help show resume command help',
97
+ ].join('\n');
98
+ }
99
+ export function resolveResumeCommandAction(rawArgs, hasCurrentTask) {
100
+ const trimmed = rawArgs.trim();
101
+ if (!trimmed) {
102
+ return hasCurrentTask ? { kind: 'enter-input-mode' } : { kind: 'missing-context' };
103
+ }
104
+ if (trimmed === '--help' || trimmed === '-h') {
105
+ return { kind: 'show-help' };
106
+ }
107
+ return hasCurrentTask
108
+ ? { kind: 'run-query', query: trimmed }
109
+ : { kind: 'missing-context' };
110
+ }
111
+ function extractTaskResumeQuery(rawArgs) {
112
+ const trimmed = rawArgs.trim();
113
+ if (!trimmed) {
114
+ return '';
115
+ }
116
+ const parts = trimmed.split(/\s+/);
117
+ if (parts[0] !== 'resume') {
118
+ return '';
119
+ }
120
+ if (parts.length < 2) {
121
+ return '';
122
+ }
123
+ return trimmed.slice(`resume ${parts[1]}`.length).trim();
124
+ }
125
+ async function runShellPlanQuery(query) {
126
+ const trimmed = query.trim();
127
+ if (!trimmed) {
128
+ throw new Error('Usage: /plan <query>');
129
+ }
130
+ await runQueryWithDaemonControl(trimmed, {
131
+ continueCurrentTask: false,
132
+ bindAsCurrentTask: false,
133
+ planOnly: true,
134
+ });
135
+ clearShellInputMode(shellSession);
136
+ }
137
+ async function handleResumeShellCommand(rawArgs) {
138
+ const action = resolveResumeCommandAction(rawArgs, !!shellSession.task);
139
+ switch (action.kind) {
140
+ case 'show-help':
141
+ console.log(chalk.yellow(buildResumeHelpText()));
142
+ return;
143
+ case 'missing-context':
144
+ console.log(chalk.yellow('No current task to resume.'));
145
+ return;
146
+ case 'enter-input-mode':
147
+ setShellInputMode(shellSession, 'resume-query');
148
+ console.log(chalk.yellow(`Resume mode enabled for task ${shellSession.task?.taskId}. Describe what to do next.`));
149
+ return;
150
+ case 'run-query':
151
+ await runShellAgentResumeQuery(action.query);
152
+ return;
153
+ }
21
154
  }
22
155
  // ---------------- Testing Commands ----------------
23
- registerTestingCommands(customCommands, runQuery);
156
+ if (enableDevTestCommands) {
157
+ registerEvalShellCommands(customCommands, runQuery);
158
+ registerTestingCommands(customCommands, runQuery);
159
+ }
24
160
  // ---------------- Built-in Commands ----------------
161
+ export function buildShellHelpText() {
162
+ const devSection = enableDevTestCommands
163
+ ? `\nDev:\n` +
164
+ ` /plan [query]\n` +
165
+ ` /eval /eval-random /evals /evals-transform /eval-run <id> [id...] /eval-list /eval-report\n` +
166
+ ` /tests /test-run <id> /test-list /test-cmd [id]`
167
+ : '';
168
+ return (`${chalk.green('SCAI shell commands')}\n\n` +
169
+ `Query: type normally to continue the current task\n` +
170
+ `Shell: !command\n` +
171
+ `CLI: scai --help\n\n` +
172
+ `Common:\n` +
173
+ ` /help\n` +
174
+ ` /clear\n` +
175
+ ` /cancel\n` +
176
+ ` /edit\n` +
177
+ ` /resume [query]\n` +
178
+ ` /context\n` +
179
+ ` /new-context\n` +
180
+ ` /task resume <id>\n` +
181
+ ` /task show <id>\n` +
182
+ ` /task path <id>\n` +
183
+ ` /commit` +
184
+ `${devSection}\n`);
185
+ }
25
186
  customCommands.clear = async () => {
26
187
  // Clear screen and move cursor to top-left
27
188
  process.stdout.write('\x1Bc');
28
189
  };
190
+ customCommands.cancel = async () => {
191
+ const previousMode = cancelShellInputMode(shellSession);
192
+ if (!previousMode) {
193
+ console.log(chalk.yellow('No active input mode to cancel.'));
194
+ return;
195
+ }
196
+ console.log(chalk.yellow(`Cancelled ${previousMode}.`));
197
+ };
29
198
  customCommands.help = async () => {
30
- console.log(chalk.green('\n✔ SCAI Help:\n'));
31
- console.log(program.helpInformation());
199
+ console.log('');
200
+ console.log(buildShellHelpText());
32
201
  };
33
202
  customCommands.exit = async () => {
34
203
  console.log('Exiting...');
@@ -36,6 +205,60 @@ customCommands.exit = async () => {
36
205
  };
37
206
  customCommands.q = customCommands.exit;
38
207
  customCommands.quit = customCommands.exit;
208
+ function printPromptContextHint() {
209
+ console.log('');
210
+ if (shellSession.inputMode === 'plan-query') {
211
+ console.log(chalk.yellow('Plan mode is waiting for a task description.'));
212
+ return;
213
+ }
214
+ const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);
215
+ if (awaitingAgentDialog) {
216
+ for (const line of buildDialogDisplayLines(awaitingAgentDialog)) {
217
+ console.log(chalk.yellow(line));
218
+ }
219
+ return;
220
+ }
221
+ if (shellSession.task?.dialogState?.status === 'awaiting-user') {
222
+ console.log(chalk.yellow('Reply to the active task dialog, or use /context to inspect it.'));
223
+ return;
224
+ }
225
+ console.log(chalk.yellow('/context to inspect, /new-context to clear, type a query to continue'));
226
+ }
227
+ customCommands.context = async () => {
228
+ printShellCurrentContext(shellSession);
229
+ };
230
+ customCommands['new-context'] = async () => {
231
+ await program.parseAsync(['new-context'], { from: 'user' });
232
+ clearShellTaskBinding(shellSession);
233
+ };
234
+ if (enableDevTestCommands) {
235
+ customCommands.plan = async (...args) => {
236
+ const query = args.join(' ').trim();
237
+ if (!query) {
238
+ setShellInputMode(shellSession, 'plan-query');
239
+ console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));
240
+ return;
241
+ }
242
+ await runShellPlanQuery(query);
243
+ };
244
+ }
245
+ customCommands.resume = async (...args) => {
246
+ await handleResumeShellCommand(args.join(' '));
247
+ };
248
+ customCommands.task = async (...args) => {
249
+ const subcommand = args[0];
250
+ if (subcommand === 'resume') {
251
+ const taskId = Number(args[1]);
252
+ if (!Number.isInteger(taskId)) {
253
+ throw new Error('Usage: /task resume <id> [question]');
254
+ }
255
+ const query = args.slice(2).join(' ').trim();
256
+ const context = await resumeTaskCommand(taskId, query || undefined);
257
+ bindShellResult(context);
258
+ return;
259
+ }
260
+ await program.parseAsync(['task', ...args], { from: 'user' });
261
+ };
39
262
  // ---------------- Extension API ----------------
40
263
  export function registerCommand(name, fn) {
41
264
  customCommands[name] = fn;
@@ -68,29 +291,33 @@ async function startShell() {
68
291
  // Clear screen first
69
292
  process.stdout.write('\x1Bc');
70
293
  console.log(chalk.yellow("Welcome to SCAI shell!") + "\n" +
71
- chalk.blueBright(`- Type your query directly for short commands or questions.
72
- - Use !command to run terminal commands.
73
- - Use /command for built-in or custom commands.
74
- - /help
75
- - /clear
76
- - /edit for pasting long queries & multi-line input
77
- - /test, /test-random, /test-evals
78
- - /git commit\n`));
294
+ chalk.blueBright('Use /help for shell commands'));
79
295
  while (true) {
80
296
  try {
297
+ printPromptContextHint();
81
298
  const { line } = (await prompt({
82
299
  type: 'input',
83
300
  name: 'line',
84
- message: 'Write your query:',
301
+ message: chalk.cyan(buildShellPromptLabel(shellSession)),
85
302
  validate: (input) => !!input.trim() || 'Please enter something',
86
303
  }));
87
304
  const trimmed = line.trim();
305
+ const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);
306
+ const inputKind = resolveShellInputKind(trimmed, awaitingAgentDialog);
88
307
  // --- Exit immediately
89
308
  if (['exit', 'quit', 'q'].includes(trimmed)) {
90
309
  await customCommands.exit();
91
310
  }
311
+ if (inputKind === 'dialog-reply' && awaitingAgentDialog) {
312
+ const reply = normalizeShellDialogReply(awaitingAgentDialog, trimmed);
313
+ if (!reply.response.trim()) {
314
+ continue;
315
+ }
316
+ await runShellAgentQuery(reply.response);
317
+ continue;
318
+ }
92
319
  // --- Shell commands (!)
93
- if (trimmed.startsWith('!')) {
320
+ if (inputKind === 'shell-command' && trimmed.startsWith('!')) {
94
321
  const child = spawn(trimmed.slice(1), {
95
322
  shell: true,
96
323
  stdio: 'inherit',
@@ -99,32 +326,60 @@ async function startShell() {
99
326
  continue;
100
327
  }
101
328
  // --- Slash commands (/)
102
- if (trimmed.startsWith('/')) {
103
- const argvParts = shellQuote
104
- .parse(trimmed.slice(1))
105
- .map((tok) => typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok))
106
- .filter(Boolean);
107
- const cmdName = argvParts[0];
329
+ if (inputKind === 'shell-command' && trimmed.startsWith('/')) {
330
+ const { argvParts, cmdName, rawArgs } = parseSlashCommand(trimmed);
108
331
  // Special case: open editor
109
332
  if (cmdName === 'edit') {
110
333
  const content = await editInEditorAsync();
111
334
  const trimmedContent = content.trim();
112
335
  if (trimmedContent) {
113
336
  console.log(chalk.hex('#FFA500')('\n[Editor input]:\n' + trimmedContent + '\n'));
114
- await runQuery(trimmedContent);
337
+ await runShellAgentQuery(trimmedContent);
338
+ }
339
+ continue;
340
+ }
341
+ if (cmdName === 'resume') {
342
+ await handleResumeShellCommand(rawArgs);
343
+ continue;
344
+ }
345
+ if (enableDevTestCommands && cmdName === 'plan') {
346
+ if (!rawArgs) {
347
+ setShellInputMode(shellSession, 'plan-query');
348
+ console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));
349
+ }
350
+ else {
351
+ await runShellPlanQuery(rawArgs);
115
352
  }
116
353
  continue;
117
354
  }
355
+ if (cmdName === 'task' && String(argvParts[1] ?? '') === 'resume') {
356
+ const taskId = Number(argvParts[2]);
357
+ if (!Number.isInteger(taskId)) {
358
+ throw new Error('Usage: /task resume <id> [question]');
359
+ }
360
+ const query = extractTaskResumeQuery(rawArgs);
361
+ const context = await resumeTaskCommand(taskId, query || undefined);
362
+ bindShellResult(context);
363
+ continue;
364
+ }
118
365
  if (customCommands[cmdName]) {
119
- await customCommands[cmdName]();
366
+ await customCommands[cmdName](...argvParts.slice(1));
120
367
  }
121
368
  else {
122
369
  await program.parseAsync(argvParts, { from: 'user' });
123
370
  }
124
371
  continue;
125
372
  }
373
+ if (shellSession.inputMode === 'plan-query') {
374
+ await runShellPlanQuery(trimmed);
375
+ continue;
376
+ }
377
+ if (shellSession.inputMode === 'resume-query') {
378
+ await runShellAgentResumeQuery(trimmed);
379
+ continue;
380
+ }
126
381
  // --- Otherwise → treat as normal query
127
- await runQuery(trimmed);
382
+ await runShellAgentQuery(trimmed);
128
383
  }
129
384
  catch (err) {
130
385
  console.error('REPL error:', err instanceof Error ? err.stack : err);
@@ -132,8 +387,18 @@ async function startShell() {
132
387
  }
133
388
  }
134
389
  function initRunLog() {
135
- fs.mkdirSync(path.dirname(RUN_LOG_PATH), { recursive: true });
136
- fs.writeFileSync(RUN_LOG_PATH, '', { flag: 'w' });
390
+ clearRuntimeLogs();
391
+ }
392
+ /**
393
+ * Decides if CLI startup should auto-check or auto-start Ollama.
394
+ *
395
+ * Example:
396
+ * - ["model", "status"] -> false because the model command owns its own output
397
+ * - ["setup"] -> false because setup owns its own model bootstrap
398
+ * - ["find", "query"] -> true because normal command flow still wants the model gate
399
+ */
400
+ export function shouldAutoStartModel(args) {
401
+ return args[0] !== 'model' && args[0] !== 'setup' && args[0] !== 'init';
137
402
  }
138
403
  // ---------------- Main ----------------
139
404
  async function main() {
@@ -144,18 +409,20 @@ async function main() {
144
409
  console.error('Uncaught Exception:', err.stack ?? err);
145
410
  process.exit(1);
146
411
  });
147
- // ---------------- Start Model Once ----------------
148
- try {
149
- const { startModelProcess } = await import('./utils/checkModel.js');
150
- await startModelProcess(); // 🔒 ensures only one startup
151
- }
152
- catch (err) {
153
- console.error('❌ Failed to start model process:', err);
154
- process.exit(1);
155
- }
156
412
  // ---------------- Determine CLI Mode ----------------
157
413
  const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
158
414
  const args = process.argv.slice(2);
415
+ // ---------------- Start Model Once ----------------
416
+ if (shouldAutoStartModel(args)) {
417
+ try {
418
+ const { startModelProcess } = await import('./utils/checkModel.js');
419
+ await startModelProcess(); // 🔒 ensures only one startup
420
+ }
421
+ catch (err) {
422
+ console.error('❌ Failed to start the Ollama server:', err instanceof Error ? err.message : err);
423
+ process.exit(1);
424
+ }
425
+ }
159
426
  if (isInteractive && (args.length === 0 || (args.length === 1 && args[0] === 'shell'))) {
160
427
  await startShell(); // REPL mode
161
428
  return;
@@ -163,4 +430,18 @@ async function main() {
163
430
  // ---------------- Non-interactive / command mode ----------------
164
431
  await program.parseAsync(process.argv);
165
432
  }
166
- main();
433
+ function isMainEntrypoint() {
434
+ if (!process.argv[1]) {
435
+ return false;
436
+ }
437
+ try {
438
+ return fs.realpathSync(process.argv[1]) === fs.realpathSync(fileURLToPath(import.meta.url));
439
+ }
440
+ catch {
441
+ return path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
442
+ }
443
+ }
444
+ if (isMainEntrypoint()) {
445
+ main();
446
+ }
447
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Starts the SCAI CLI in shell mode or command mode.\n *\n * Why this file exists:\n * - it owns the top-level shell loop and command boot path\n * - shell shortcuts like `/resume` should stay aligned with the public CLI commands\n * - shell command UX like `/resume` should stay friendly and consistent in one place\n * - shell mode controls like `/cancel` should stay shallow and not touch task state\n * - query routing here should stay thin and delegate real work to the shared ask pipeline\n */\nimport { spawn } from 'child_process';\nimport { createRequire } from 'module';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport chalk from 'chalk';\nconst require = createRequire(import.meta.url);\nconst shellQuote = require('shell-quote');\n\nimport { createProgram as cmdFactory } from './commands/factory.js';\nimport { isDevCommandsEnabled } from './commands/commandVisibility.js';\nimport { registerEvalShellCommands } from './commands/evalCommands.js';\nimport enquirer from 'enquirer';\nimport { runQueryWithDaemonControl } from './utils/runQueryWithDaemonControl.js';\nimport { registerTestingCommands } from './testing/testCommands.js';\nimport { resumeTaskCommand } from './commands/TasksCmd.js';\nimport { clearRuntimeLogs } from './utils/runtimeLogger.js';\nimport {\n buildShellAgentRunOptions,\n buildShellPromptLabel,\n cancelShellInputMode,\n clearShellInputMode,\n clearShellTaskBinding,\n getAwaitingAgentDialog,\n printShellCurrentContext,\n setShellInputMode,\n type ShellSessionState,\n updateShellTaskBindingFromAgentMemory,\n} from './shellSession.js';\nimport { buildDialogDisplayLines, normalizeShellDialogReply, resolveShellInputKind } from './shell/dialogUi.js';\nimport type { AgentMemory } from './agents/agentTypes.js';\n\nconst { prompt } = enquirer;\n\nconst program = cmdFactory();\nconst enableDevTestCommands = isDevCommandsEnabled();\n\n// ---------------- Command Registry ----------------\ntype CommandFn = (...args: string[]) => Promise<void>;\nconst customCommands: Record<string, CommandFn> = {};\n\nconst shellSession: ShellSessionState = { inputMode: 'normal' };\n\ntype ParsedSlashCommand = {\n cmdName: string;\n argvParts: string[];\n rawArgs: string;\n};\n\ntype ResumeCommandAction =\n | { kind: 'show-help' }\n | { kind: 'missing-context' }\n | { kind: 'enter-input-mode' }\n | { kind: 'run-query'; query: string };\n\n// ---------------- Run Query with Daemon Control ----------------\nasync function runQuery(\n query: string,\n options?: {\n resumeTaskId?: number;\n continueCurrentTask?: boolean;\n bindAsCurrentTask?: boolean;\n runtime?: \"agent\";\n agentMemory?: AgentMemory;\n planOnly?: boolean;\n }\n) {\n await runQueryWithDaemonControl(query, options);\n}\n\nfunction isAgentMemory(memory: unknown): memory is AgentMemory {\n return !!memory && typeof memory === \"object\" && \"session\" in memory && \"events\" in memory && \"steps\" in memory;\n}\n\nfunction bindShellResult(result: AgentMemory | undefined): void {\n if (isAgentMemory(result)) {\n updateShellTaskBindingFromAgentMemory(shellSession, result);\n }\n}\n\nasync function runShellAgentQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, false));\n bindShellResult(memory);\n clearShellInputMode(shellSession);\n}\n\nasync function runShellAgentResumeQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n if (!trimmed) {\n console.log(chalk.yellow(buildResumeHelpText()));\n return;\n }\n if (!shellSession.agentMemory) {\n console.log(chalk.yellow('No current task to resume.'));\n return;\n }\n const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, true));\n bindShellResult(memory);\n clearShellInputMode(shellSession);\n}\n\n/**\n * Parses one slash command while keeping the original free-text tail intact.\n *\n * Why this helper exists:\n * - shell-quote token parsing is useful for command dispatch\n * - free-text query commands like `/resume` must keep punctuation exactly as typed\n * - raw tails and tokenized args should be derived once in one place\n */\nexport function parseSlashCommand(trimmed: string): ParsedSlashCommand {\n const withoutSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;\n const parsed = shellQuote\n .parse(withoutSlash)\n .map((tok: any) =>\n typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok)\n )\n .filter(Boolean);\n const cmdName = String(parsed[0] ?? '');\n const rawArgs = cmdName\n ? withoutSlash.slice(cmdName.length).trim()\n : '';\n return {\n cmdName,\n argvParts: parsed,\n rawArgs,\n };\n}\n\nexport function buildResumeHelpText(): string {\n return [\n '/resume continue the current task by prompting for the next query',\n '/resume <query> continue the current task immediately',\n '/resume --help show resume command help',\n ].join('\\n');\n}\n\nexport function resolveResumeCommandAction(\n rawArgs: string,\n hasCurrentTask: boolean\n): ResumeCommandAction {\n const trimmed = rawArgs.trim();\n if (!trimmed) {\n return hasCurrentTask ? { kind: 'enter-input-mode' } : { kind: 'missing-context' };\n }\n if (trimmed === '--help' || trimmed === '-h') {\n return { kind: 'show-help' };\n }\n return hasCurrentTask\n ? { kind: 'run-query', query: trimmed }\n : { kind: 'missing-context' };\n}\n\nfunction extractTaskResumeQuery(rawArgs: string): string {\n const trimmed = rawArgs.trim();\n if (!trimmed) {\n return '';\n }\n const parts = trimmed.split(/\\s+/);\n if (parts[0] !== 'resume') {\n return '';\n }\n if (parts.length < 2) {\n return '';\n }\n return trimmed.slice(`resume ${parts[1]}`.length).trim();\n}\n\nasync function runShellPlanQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n if (!trimmed) {\n throw new Error('Usage: /plan <query>');\n }\n await runQueryWithDaemonControl(trimmed, {\n continueCurrentTask: false,\n bindAsCurrentTask: false,\n planOnly: true,\n });\n clearShellInputMode(shellSession);\n}\n\nasync function handleResumeShellCommand(rawArgs: string): Promise<void> {\n const action = resolveResumeCommandAction(rawArgs, !!shellSession.task);\n switch (action.kind) {\n case 'show-help':\n console.log(chalk.yellow(buildResumeHelpText()));\n return;\n case 'missing-context':\n console.log(chalk.yellow('No current task to resume.'));\n return;\n case 'enter-input-mode':\n setShellInputMode(shellSession, 'resume-query');\n console.log(chalk.yellow(`Resume mode enabled for task ${shellSession.task?.taskId}. Describe what to do next.`));\n return;\n case 'run-query':\n await runShellAgentResumeQuery(action.query);\n return;\n }\n}\n\n// ---------------- Testing Commands ----------------\nif (enableDevTestCommands) {\n registerEvalShellCommands(customCommands, runQuery);\n registerTestingCommands(customCommands, runQuery);\n}\n\n// ---------------- Built-in Commands ----------------\nexport function buildShellHelpText(): string {\n const devSection = enableDevTestCommands\n ? `\\nDev:\\n` +\n ` /plan [query]\\n` +\n ` /eval /eval-random /evals /evals-transform /eval-run <id> [id...] /eval-list /eval-report\\n` +\n ` /tests /test-run <id> /test-list /test-cmd [id]`\n : '';\n\n return (\n `${chalk.green('SCAI shell commands')}\\n\\n` +\n `Query: type normally to continue the current task\\n` +\n `Shell: !command\\n` +\n `CLI: scai --help\\n\\n` +\n `Common:\\n` +\n ` /help\\n` +\n ` /clear\\n` +\n ` /cancel\\n` +\n ` /edit\\n` +\n ` /resume [query]\\n` +\n ` /context\\n` +\n ` /new-context\\n` +\n ` /task resume <id>\\n` +\n ` /task show <id>\\n` +\n ` /task path <id>\\n` +\n ` /commit` +\n `${devSection}\\n`\n );\n}\n\ncustomCommands.clear = async () => {\n // Clear screen and move cursor to top-left\n process.stdout.write('\\x1Bc');\n};\n\ncustomCommands.cancel = async () => {\n const previousMode = cancelShellInputMode(shellSession);\n if (!previousMode) {\n console.log(chalk.yellow('No active input mode to cancel.'));\n return;\n }\n console.log(chalk.yellow(`Cancelled ${previousMode}.`));\n};\n\ncustomCommands.help = async () => {\n console.log('');\n console.log(buildShellHelpText());\n};\n\ncustomCommands.exit = async () => {\n console.log('Exiting...');\n process.exit(0);\n};\n\ncustomCommands.q = customCommands.exit;\ncustomCommands.quit = customCommands.exit;\n\nfunction printPromptContextHint(): void {\n console.log('');\n if (shellSession.inputMode === 'plan-query') {\n console.log(chalk.yellow('Plan mode is waiting for a task description.'));\n return;\n }\n const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);\n if (awaitingAgentDialog) {\n for (const line of buildDialogDisplayLines(awaitingAgentDialog)) {\n console.log(chalk.yellow(line));\n }\n return;\n }\n if (shellSession.task?.dialogState?.status === 'awaiting-user') {\n console.log(chalk.yellow('Reply to the active task dialog, or use /context to inspect it.'));\n return;\n }\n console.log(chalk.yellow('/context to inspect, /new-context to clear, type a query to continue'));\n}\n\ncustomCommands.context = async () => {\n printShellCurrentContext(shellSession);\n};\n\ncustomCommands['new-context'] = async () => {\n await program.parseAsync(['new-context'], { from: 'user' });\n clearShellTaskBinding(shellSession);\n};\n\nif (enableDevTestCommands) {\n customCommands.plan = async (...args: string[]) => {\n const query = args.join(' ').trim();\n if (!query) {\n setShellInputMode(shellSession, 'plan-query');\n console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));\n return;\n }\n await runShellPlanQuery(query);\n };\n}\n\ncustomCommands.resume = async (...args: string[]) => {\n await handleResumeShellCommand(args.join(' '));\n};\n\ncustomCommands.task = async (...args: string[]) => {\n const subcommand = args[0];\n if (subcommand === 'resume') {\n const taskId = Number(args[1]);\n if (!Number.isInteger(taskId)) {\n throw new Error('Usage: /task resume <id> [question]');\n }\n const query = args.slice(2).join(' ').trim();\n const context = await resumeTaskCommand(taskId, query || undefined);\n bindShellResult(context);\n return;\n }\n\n await program.parseAsync(['task', ...args], { from: 'user' });\n};\n\n// ---------------- Extension API ----------------\nexport function registerCommand(name: string, fn: CommandFn) {\n customCommands[name] = fn;\n}\n\n// ---------------- Editor Helper ----------------\nfunction editInEditorAsync(initialContent = ''): Promise<string> {\n return new Promise((resolve, reject) => {\n const tmpFile = path.join(os.tmpdir(), `scai_input_${Date.now()}.txt`);\n fs.writeFileSync(tmpFile, initialContent);\n\n const editor = process.env.EDITOR || 'vi';\n const child = spawn(editor, [tmpFile], { stdio: 'inherit' });\n\n child.on('exit', (code) => {\n try {\n const content = fs.readFileSync(tmpFile, 'utf-8');\n fs.unlinkSync(tmpFile);\n resolve(content);\n } catch (err) {\n reject(err);\n }\n });\n\n child.on('error', (err) => reject(err));\n });\n}\n\n\n// ---------------- REPL / Shell ----------------\n// The startShell function initializes an interactive shell for the CLI.\n// It allows users to input queries directly, use built-in commands with '/',\n// run terminal commands with '!', or edit input in an external editor with '/edit'.\nasync function startShell() {\n // Clear screen first\n process.stdout.write('\\x1Bc');\n\n console.log(\n chalk.yellow(\"Welcome to SCAI shell!\") + \"\\n\" +\n chalk.blueBright('Use /help for shell commands')\n );\n\n while (true) {\n try {\n printPromptContextHint();\n const { line } = (await prompt({\n type: 'input',\n name: 'line',\n message: chalk.cyan(buildShellPromptLabel(shellSession)),\n validate: (input: string) =>\n !!input.trim() || 'Please enter something',\n })) as { line: string };\n\n const trimmed = line.trim();\n const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);\n const inputKind = resolveShellInputKind(trimmed, awaitingAgentDialog);\n\n // --- Exit immediately\n if (['exit', 'quit', 'q'].includes(trimmed)) {\n await customCommands.exit();\n }\n\n if (inputKind === 'dialog-reply' && awaitingAgentDialog) {\n const reply = normalizeShellDialogReply(awaitingAgentDialog, trimmed);\n if (!reply.response.trim()) {\n continue;\n }\n await runShellAgentQuery(reply.response);\n continue;\n }\n\n // --- Shell commands (!)\n if (inputKind === 'shell-command' && trimmed.startsWith('!')) {\n const child = spawn(trimmed.slice(1), {\n shell: true,\n stdio: 'inherit',\n });\n await new Promise((resolve) => child.on('exit', resolve));\n continue;\n }\n\n // --- Slash commands (/)\n if (inputKind === 'shell-command' && trimmed.startsWith('/')) {\n const { argvParts, cmdName, rawArgs } = parseSlashCommand(trimmed);\n\n // Special case: open editor\n if (cmdName === 'edit') {\n const content = await editInEditorAsync();\n const trimmedContent = content.trim();\n if (trimmedContent) {\n console.log(chalk.hex('#FFA500')('\\n[Editor input]:\\n' + trimmedContent + '\\n'));\n await runShellAgentQuery(trimmedContent);\n }\n continue;\n }\n\n if (cmdName === 'resume') {\n await handleResumeShellCommand(rawArgs);\n continue;\n }\n\n if (enableDevTestCommands && cmdName === 'plan') {\n if (!rawArgs) {\n setShellInputMode(shellSession, 'plan-query');\n console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));\n } else {\n await runShellPlanQuery(rawArgs);\n }\n continue;\n }\n\n if (cmdName === 'task' && String(argvParts[1] ?? '') === 'resume') {\n const taskId = Number(argvParts[2]);\n if (!Number.isInteger(taskId)) {\n throw new Error('Usage: /task resume <id> [question]');\n }\n const query = extractTaskResumeQuery(rawArgs);\n const context = await resumeTaskCommand(taskId, query || undefined);\n bindShellResult(context);\n continue;\n }\n\n if (customCommands[cmdName]) {\n await customCommands[cmdName](...argvParts.slice(1));\n } else {\n await program.parseAsync(argvParts, { from: 'user' });\n }\n continue;\n }\n\n if (shellSession.inputMode === 'plan-query') {\n await runShellPlanQuery(trimmed);\n continue;\n }\n\n if (shellSession.inputMode === 'resume-query') {\n await runShellAgentResumeQuery(trimmed);\n continue;\n }\n\n // --- Otherwise → treat as normal query\n await runShellAgentQuery(trimmed);\n\n } catch (err) {\n console.error('REPL error:', err instanceof Error ? err.stack : err);\n }\n }\n}\n\nfunction initRunLog() {\n clearRuntimeLogs();\n}\n\n/**\n * Decides if CLI startup should auto-check or auto-start Ollama.\n *\n * Example:\n * - [\"model\", \"status\"] -> false because the model command owns its own output\n * - [\"setup\"] -> false because setup owns its own model bootstrap\n * - [\"find\", \"query\"] -> true because normal command flow still wants the model gate\n */\nexport function shouldAutoStartModel(args: string[]): boolean {\n return args[0] !== 'model' && args[0] !== 'setup' && args[0] !== 'init';\n}\n\n// ---------------- Main ----------------\nasync function main() {\n initRunLog();\n\n // ---------------- Global Error Handlers ----------------\n process.on('unhandledRejection', (reason) =>\n console.error('Unhandled Rejection:', reason)\n );\n\n process.on('uncaughtException', (err) => {\n console.error('Uncaught Exception:', err.stack ?? err);\n process.exit(1);\n });\n\n // ---------------- Determine CLI Mode ----------------\n const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n const args = process.argv.slice(2);\n\n // ---------------- Start Model Once ----------------\n if (shouldAutoStartModel(args)) {\n try {\n const { startModelProcess } = await import('./utils/checkModel.js');\n await startModelProcess(); // 🔒 ensures only one startup\n } catch (err) {\n console.error('❌ Failed to start the Ollama server:', err instanceof Error ? err.message : err);\n process.exit(1);\n }\n }\n\n if (isInteractive && (args.length === 0 || (args.length === 1 && args[0] === 'shell'))) {\n await startShell(); // REPL mode\n return;\n }\n\n // ---------------- Non-interactive / command mode ----------------\n await program.parseAsync(process.argv);\n}\n\nfunction isMainEntrypoint(): boolean {\n if (!process.argv[1]) {\n return false;\n }\n try {\n return fs.realpathSync(process.argv[1]) === fs.realpathSync(fileURLToPath(import.meta.url));\n } catch {\n return path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);\n }\n}\n\nif (isMainEntrypoint()) {\n main();\n}\n"]}