scai 0.1.178 → 1.0.1

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 +171 -260
  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/README.md CHANGED
@@ -1,378 +1,289 @@
1
- # ⚙️ SCAI — Source Code AI 🌿
1
+ # SCAI
2
2
 
3
- > **A local-first AI CLI for understanding, querying, and iterating on large codebases.**
4
- > **100% local No token costs No cloud • No prompt injection • Private by design**
3
+ > A local-first AI CLI for understanding code in your repo.
4
+ > Private by default. No token costs. No cloud.
5
5
 
6
- 🔗 **Website:** [https://scai.dk](https://scai.dk)
7
- 🇪🇺 Built in Denmark / EU
6
+ **SCAI** helps you ask questions about a codebase, trace behavior across files, and make small focused improvements without sending your code to external AI services.
8
7
 
9
- ---
8
+ - **100% local**
9
+ - **No token costs**
10
+ - **No cloud**
11
+ - **No telemetry**
12
+ - **Your code stays on your machine**
10
13
 
11
- ## What is SCAI?
14
+ Built in Denmark and the EU with ❤️
12
15
 
13
- **SCAI** is an AI-powered command-line tool that helps developers explore and reason about source code using **local large language models only**.
16
+ ## Feedback And Support
14
17
 
15
- Inspired by tools such as *Claude Code* and *Gemini CLI*, SCAI is designed to feel like a natural extension of the terminal. It enables natural-language interaction with your codebase while deliberately avoiding cloud dependencies and network-connected agents.
18
+ Reach out with feedback or questions:
16
19
 
17
- SCAI runs entirely on your local system:
20
+ - Threads: [@scai.dk](https://threads.net/@scai.dk)
18
21
 
19
- * **No token costs** no usage-based pricing
20
- * **No internet access for agents**
21
- * **No prompt injection from web content**
22
- * No external AI APIs
23
- * No telemetry or tracking
24
- * No API keys
22
+ ## What SCAI Is Good At
25
23
 
26
- Your code never leaves your machine. All analysis and reasoning happens locally.
24
+ SCAI is strongest when you want help understanding an existing repository.
27
25
 
28
- > **Local model tradeoff**
29
- > SCAI uses local LLMs. Output quality depends on your hardware and selected model. Cloud-hosted systems may perform better on general reasoning tasks, but SCAI prioritizes privacy, predictability, and control.
26
+ It is good at:
30
27
 
31
- ---
28
+ - Explaining what a file, function, or module does
29
+ - Finding where logic lives across the repo
30
+ - Tracing auth, config, database, or API flow
31
+ - Summarizing a subsystem before you edit it
32
+ - Reviewing a small local change idea before you do it
33
+ - Writing comments or small docs updates
34
+ - Refactoring existing code in a small or medium-sized area
35
+ - Helping with small light code changes in a limited area
36
+ - Writing commit messages from staged changes
32
37
 
33
- ## ⚠️ Alpha Status
34
-
35
- SCAI is currently in **alpha**.
38
+ ## Getting Started
36
39
 
37
- If you have previously installed SCAI, reset the local database before upgrading:
40
+ Install the CLI:
38
41
 
39
42
  ```bash
40
- scai db reset
41
- scai index start
43
+ npm install -g scai
42
44
  ```
43
45
 
44
- Breaking changes and evolving behavior should be expected.
45
-
46
- ---
46
+ Move into the repository you want to work on:
47
47
 
48
- ## Why SCAI?
49
-
50
- ### 🔐 Local-Only by Design
51
-
52
- SCAI agents operate **entirely offline**.
48
+ ```bash
49
+ cd /path/to/repo
50
+ ```
53
51
 
54
- They do not:
52
+ Set up the repo and local model runtime:
55
53
 
56
- * Browse the web
57
- * Fetch URLs
58
- * Ingest external documents
59
- * Execute remote prompts
54
+ ```bash
55
+ scai setup
56
+ ```
60
57
 
61
- **Security implications:**
58
+ This will:
62
59
 
63
- * No prompt injection via web content
64
- * No data exfiltration
65
- * No hidden network calls
66
- * Fully auditable execution
60
+ - Register the current repository
61
+ - Check that Ollama is available
62
+ - Help you pick or install a local model
63
+ - Start local indexing
67
64
 
68
- This makes SCAI suitable for **private repositories, regulated environments, and GDPR-compliant workflows**.
65
+ For most users, this is enough. Start with `scai setup` and only use the manual model commands below if you want to pick a specific model yourself. Run:
69
66
 
70
- ---
67
+ ```bash
68
+ scai status
69
+ ```
70
+ ...to check that setup worked.
71
71
 
72
- ### 🧠 Codebase-Aware Analysis
72
+ For best results on a 64 GB machine, use:
73
73
 
74
- SCAI builds and maintains a structured internal representation of your repository using:
74
+ - `qwen3-coder:30b`
75
+ - `gemma4:26b-mlx`
75
76
 
76
- * Language-aware parsing
77
- * Symbol and dependency indexing
78
- * Static and heuristic analysis
79
- * Cross-file context tracking
77
+ For smaller machines, use:
80
78
 
81
- This enables repository-level questions that go beyond single-file inspection.
79
+ - `gemma4:e4b-mlx`
82
80
 
83
- ---
81
+ If you have a higher-memory system, larger parameter models may work better.
84
82
 
85
- ### ✂️ Assisted Code Iteration (Early)
83
+ Optional manual model install commands:
86
84
 
87
- SCAI can assist with **lightweight, example-driven code iteration**, primarily focused on understanding and improving existing code rather than large-scale automated refactoring.
85
+ ```bash
86
+ ollama pull qwen3-coder:30b
87
+ ollama pull gemma4:26b-mlx
88
+ ollama pull gemma4:e4b-mlx
89
+ ```
88
90
 
89
- Current strengths include:
91
+ To set the active model yourself, use:
90
92
 
91
- * Explaining what functions, files, or modules do
92
- * Identifying patterns and responsibilities across files
93
- * Generating or improving comments and documentation
94
- * Highlighting structural or readability issues
95
- * Suggesting small, localized improvements
93
+ ```bash
94
+ scai config set-model qwen3-coder:30b
95
+ ```
96
96
 
97
- Changes are **guided by indexed context and user prompts**, and are intended to support human review and decision-making.
97
+ Replace the model name with the one you want to use.
98
98
 
99
- Large-scale or fully automated repository-wide refactoring should currently be considered **experimental**.
99
+ Then start the interactive shell:
100
100
 
101
- ---
101
+ ```bash
102
+ scai
103
+ ```
102
104
 
103
- ### 🛠 Built for Developer Workflows
105
+ You can also ask one question directly:
104
106
 
105
- SCAI is a **terminal-native tool** designed to integrate cleanly into daily development:
107
+ ```bash
108
+ scai ask "Where is the auth token checked?"
109
+ ```
106
110
 
107
- * Natural-language queries over your codebase
108
- * Code understanding and exploration
109
- * Assisted iteration and suggestions
110
- * Commit message generation
111
- * Background indexing and analysis
112
- * Interactive REPL
111
+ ## Example Questions
113
112
 
114
- No browser UI. No cloud login. No vendor lock-in.
113
+ Good prompts are concrete and repo-focused.
115
114
 
116
- ---
115
+ Examples:
117
116
 
118
- ### 🇪🇺 Privacy & Compliance First
117
+ ```text
118
+ What does withContext do in cli/src/index.ts?
119
+ Where is the auth flow implemented?
120
+ Summarize the indexing pipeline.
121
+ Which files define database queries?
122
+ Show me the config loading path.
123
+ Help me add comments to this file.
124
+ Help me make a small cleanup in this module.
125
+ ```
119
126
 
120
- * Fully local execution
121
- * No telemetry
122
- * No cloud services
123
- * Developed in Denmark / EU
124
- * GDPR-friendly by default
127
+ ## Current Limits
125
128
 
126
- ---
129
+ SCAI is not a full replacement for a strong cloud coding agent.
127
130
 
128
- ## Language Support
131
+ Today it works best when:
129
132
 
130
- SCAI is currently **tested and supported** for:
133
+ - The task is about understanding code already in the repo
134
+ - The task is about changing code that already exists
135
+ - The change is small and local
136
+ - You want grounded answers tied to real files
131
137
 
132
- * **JavaScript**
133
- * **TypeScript**
134
- * **Java**
138
+ SCAI is not for:
135
139
 
136
- Other languages may work partially, but indexing quality, analysis accuracy, and agent behavior are **not guaranteed**.
140
+ - Building brand new features from scratch
141
+ - Large refactors across many files
142
+ - Broad automated rewrite requests
143
+ - Tasks that need bash actions, file creation, or other execution steps
144
+ - Tasks that depend on web access or external services
137
145
 
138
- SCAI should currently be considered **JS / TS / Java-first**.
146
+ Important current limit:
139
147
 
140
- ---
148
+ - SCAI can refactor code that already exists
149
+ - SCAI is not yet a good fit for building new features end to end
150
+ - SCAI does not currently act like a shell agent that runs bash steps to create files, wire systems together, or drive external tools
151
+ - SCAI does not handle large file refactors well. It's capped at 1000 lines.
141
152
 
142
- ## Getting Started
153
+ *SCAI was tested on an MacBook Pro M1 max (64GB). If you have a faster machine you may experience better performance and be able to use above 30b parameter models.*
143
154
 
144
- ### Install & Initialize
155
+ ## Privacy And Cost
145
156
 
146
- ```bash
147
- npm install -g scai
148
- scai init
149
- scai index start
150
- ```
157
+ SCAI runs with local models only.
151
158
 
152
- This:
159
+ That means:
153
160
 
154
- * Initializes local configuration
155
- * Starts the background daemon
156
- * Begins indexing the current repository
161
+ - No API keys
162
+ - No metered token billing
163
+ - No remote prompt processing
164
+ - No web browsing by the agent
165
+ - No prompt injection from fetched web content
157
166
 
158
- > **Note**
159
- > Initial indexing can take **minutes to hours**, depending on repository size and enabled analysis.
167
+ This makes it a good fit for private code, internal repos, and teams that want a simple offline workflow.
160
168
 
161
- ---
169
+ ## Tasks And Resume
162
170
 
163
- ### Starting SCAI
171
+ SCAI can keep task context so you can continue later.
164
172
 
165
- Running the `scai` command with no arguments starts the interactive shell:
173
+ Useful commands:
166
174
 
167
175
  ```bash
168
- scai
176
+ scai context
177
+ scai new-context
178
+ scai task show <id>
179
+ scai task resume <id>
180
+ scai task path <id>
169
181
  ```
170
182
 
171
- You can also start it explicitly:
183
+ Use these when you want to inspect what the agent already did or continue an earlier task.
172
184
 
173
- ```bash
174
- scai shell
175
- ```
185
+ ## Commit Messages
176
186
 
177
- ---
187
+ SCAI can write commit messages from your **staged** changes.
178
188
 
179
- ### View Available Commands
189
+ Stage your changes first:
180
190
 
181
191
  ```bash
182
- scai --help
192
+ git add <files>
183
193
  ```
184
194
 
185
- ---
186
-
187
- ## Interactive REPL
188
-
189
- The REPL is the primary interface for working with SCAI.
190
-
191
- ### Ask questions about your codebase
195
+ Then ask SCAI for a commit message:
192
196
 
193
- Be specific for better results.
194
-
195
- ```text
196
- scai> what does withContext function do in index.ts file?
197
- scai> How many functions in config.js are missing tests?
198
- scai> Write me comprehensive comments for componentMap.js and typescript.ts files
199
- scai> Summarize utils/helpers.ts
200
- scai> Where are all the database queries defined?
201
- scai> List files involved in authentication
197
+ ```bash
198
+ scai commit
202
199
  ```
203
200
 
204
- ### Run CLI commands inside the REPL
201
+ This is local too. Diff inspection and message generation stay on your machine.
205
202
 
206
- ```text
207
- /index list
208
- /index switch
209
- /git commit
210
- ```
203
+ ## Indexing And Repositories
211
204
 
212
- ### Execute shell commands
205
+ Most users only need:
213
206
 
214
- ```text
215
- !git status
216
- !ls -la
207
+ ```bash
208
+ scai setup
209
+ scai status
217
210
  ```
218
211
 
219
- All interactions remain **offline and free**, with **no token usage**.
212
+ Run that once in each repository you want SCAI to use.
220
213
 
221
- ---
214
+ Use `scai status` when you want a read-only check of repo, DB, indexing, daemon, and model readiness.
222
215
 
223
- ## Repository Indexing
216
+ After a repository has been set up with `scai setup`, SCAI will normally detect the current repository from your working directory and switch context automatically.
224
217
 
225
- Repositories must be indexed before querying:
218
+ Advanced multi-repo commands are still available if you need them:
226
219
 
227
220
  ```bash
228
- scai index set /path/to/repo
229
- scai index start
230
221
  scai index list
231
222
  scai index switch
232
- scai index delete
223
+ scai index start
224
+ scai index status
233
225
  ```
234
226
 
235
- Only indexed repositories are accessible to agents.
236
-
237
- ---
227
+ Only repositories that have been set up are available to the agent.
238
228
 
239
- ## Background Analysis (Daemon)
229
+ ## Model Help
240
230
 
241
- SCAI performs deep analysis in the background, including:
231
+ SCAI uses a local Ollama server.
242
232
 
243
- * File discovery
244
- * AST parsing
245
- * Dependency graph construction
246
- * Symbol resolution
247
- * Heuristic structure analysis
233
+ Download Ollama here: [https://ollama.com/download](https://ollama.com/download)
248
234
 
249
- Daemon control:
235
+ To download a model with Ollama, run:
250
236
 
251
237
  ```bash
252
- scai daemon start
253
- scai daemon stop
254
- scai daemon restart
255
- scai daemon status
256
- scai daemon logs
238
+ ollama pull qwen3-coder:30b
257
239
  ```
258
240
 
259
- Indexing progress resumes automatically after restart.
260
-
261
- ---
262
-
263
- ## Configuration
264
-
265
- Set a local model (recommended):
266
-
267
- ```bash
268
- scai config set-model qwen3-coder:30b
269
- ```
270
-
271
- View configuration:
241
+ Useful commands:
272
242
 
273
243
  ```bash
244
+ scai model status
245
+ scai model restart
274
246
  scai config show --raw
247
+ scai config set-model qwen3-coder:30b
275
248
  ```
276
249
 
277
- ---
278
-
279
- ## Git Commit Assistant
280
-
281
- Generate commit messages from staged changes:
250
+ Then point SCAI at the downloaded model:
282
251
 
283
252
  ```bash
284
- git add .
285
- scai git commit
253
+ scai config set-model qwen3-coder:30b
286
254
  ```
287
255
 
288
- All diff inspection and reasoning is performed locally.
289
-
290
- ---
256
+ If `scai setup` worked, you usually do not need to touch this often.
291
257
 
292
- ## GitHub Authentication
258
+ ## Upgrading
293
259
 
294
- Required only for GitHub-related features:
260
+ If you upgrade SCAI and local state looks wrong, reset the local DB:
295
261
 
296
262
  ```bash
297
- scai auth set
298
- scai auth check
299
- scai auth reset
263
+ scai db reset
300
264
  ```
301
265
 
302
- ---
303
-
304
- ## Privacy & Security Summary
305
-
306
- * 100% local execution
307
- * No internet access for agents
308
- * No prompt injection from web content
309
- * No API keys
310
- * No token costs
311
- * GDPR-friendly by default
266
+ General note:
312
267
 
313
- ---
268
+ - Results can still vary by repository, model, and hardware
269
+ - If behavior changes after an upgrade, re-run setup and check the selected model
314
270
 
315
- ## Feedback & Community
271
+ ## Troubleshooting
316
272
 
317
- * 🌍 [https://scai.dk](https://scai.dk)
318
- * 🧵 [https://threads.net/@scai.dk](https://threads.net/@scai.dk)
273
+ If SCAI is not answering well:
319
274
 
320
- ---
275
+ 1. Make sure the repo was set up with `scai setup`
276
+ 2. Check that Ollama is running with `scai model status`
277
+ 3. Ask a more concrete question with file names, symbols, or subsystem names
278
+ 4. Keep the task small if you want code changes
321
279
 
322
- # License & Usage Terms
280
+ If you need to inspect the current task state:
323
281
 
324
- © SCAI — All rights reserved.
325
-
326
- SCAI is **free for non-commercial use only**.
327
-
328
- ---
329
-
330
- ## Permitted Use
331
-
332
- You may use SCAI free of charge for:
333
-
334
- * Personal projects
335
- * Educational use
336
- * Research and experimentation
337
- * Non-commercial open-source work
338
- * Internal evaluation or proof-of-concepts
339
-
340
- You may fork and modify the source code **for non-commercial purposes only**.
341
-
342
- ---
343
-
344
- ## Restricted Use
345
-
346
- The following require a **commercial license**:
347
-
348
- * Any commercial or enterprise use
349
- * Consultancy or client work
350
- * Paid products or services
351
- * Internal enterprise tooling
352
- * Commercial redistribution or resale
353
-
354
- ---
355
-
356
- ## Commercial Licensing
357
-
358
- Commercial and enterprise use requires a **paid license** and explicit permission from the author.
359
-
360
- Please contact the author to discuss licensing terms.
361
-
362
- ---
363
-
364
- ## Disclaimer
365
-
366
- This software is provided **“as is”**, without warranty of any kind.
367
-
368
- The author is not liable for any damages arising from its use.
369
-
370
- ---
282
+ ```bash
283
+ scai context
284
+ scai task show <id>
285
+ ```
371
286
 
372
- ### Non-Binding Summary
287
+ ## Maintainer Release Flow
373
288
 
374
- * Free for personal and non-commercial use
375
- * Fully local, offline AI
376
- * No token costs
377
- * No prompt injection surface
378
- * Commercial use requires a license
289
+ The CLI release workflow is documented in [release-procedure.md](/Users/rzs/dev/repos/scai/release-procedure.md).
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Verifies file-only trace logging for the standalone commit command flow.
3
+ */
4
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
5
+ const buildStagedCommitSummary = vi.fn();
6
+ const moduleRun = vi.fn();
7
+ const logInputOutput = vi.fn();
8
+ const execSync = vi.fn();
9
+ const spawnSync = vi.fn();
10
+ const close = vi.fn();
11
+ const rl = {
12
+ question: vi.fn(),
13
+ close,
14
+ };
15
+ vi.mock('child_process', () => ({
16
+ execSync,
17
+ spawnSync,
18
+ }));
19
+ vi.mock('../git/commitSummary.js', () => ({
20
+ buildStagedCommitSummary,
21
+ }));
22
+ vi.mock('../pipeline/modules/commitSuggesterModule.js', () => ({
23
+ commitSuggesterModule: {
24
+ run: moduleRun,
25
+ },
26
+ }));
27
+ vi.mock('../utils/promptLogHelper.js', () => ({
28
+ logInputOutput,
29
+ }));
30
+ vi.mock('../commands/ReadlineSingleton.js', () => ({
31
+ getRl: () => ({
32
+ rl,
33
+ isTemporary: true,
34
+ }),
35
+ }));
36
+ describe('suggestCommitMessage logging', () => {
37
+ beforeEach(() => {
38
+ vi.resetModules();
39
+ buildStagedCommitSummary.mockReset();
40
+ moduleRun.mockReset();
41
+ logInputOutput.mockReset();
42
+ execSync.mockReset();
43
+ spawnSync.mockReset();
44
+ rl.question.mockReset();
45
+ close.mockReset();
46
+ });
47
+ it('logs an early exit when there are no staged changes', async () => {
48
+ buildStagedCommitSummary.mockReturnValue(undefined);
49
+ const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
50
+ const { suggestCommitMessage } = await import('../commands/CommitSuggesterCmd.js');
51
+ await suggestCommitMessage();
52
+ expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {
53
+ status: 'no-staged-changes',
54
+ });
55
+ expect(moduleRun).not.toHaveBeenCalled();
56
+ expect(close).toHaveBeenCalledTimes(1);
57
+ logSpy.mockRestore();
58
+ });
59
+ it('logs the staged summary and final selected message on the happy path', async () => {
60
+ buildStagedCommitSummary.mockReturnValue({
61
+ mode: 'staged-summary',
62
+ stagedOnly: true,
63
+ totalFiles: 1,
64
+ totalAdded: 5,
65
+ totalDeleted: 1,
66
+ categoryCounts: { source: 1, tests: 0, docs: 0, config: 0, other: 0 },
67
+ dominantCategories: ['source'],
68
+ topFiles: [],
69
+ omittedFileCount: 0,
70
+ });
71
+ moduleRun.mockResolvedValue({
72
+ suggestions: ['feat: add commit tracing'],
73
+ });
74
+ rl.question.mockImplementation((_prompt, cb) => cb('1'));
75
+ execSync.mockImplementation((command) => {
76
+ if (command === 'git diff --cached') {
77
+ return 'diff --git a/file b/file';
78
+ }
79
+ return '';
80
+ });
81
+ const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
82
+ const { suggestCommitMessage } = await import('../commands/CommitSuggesterCmd.js');
83
+ await suggestCommitMessage();
84
+ expect(logInputOutput).toHaveBeenNthCalledWith(1, 'commitSuggesterCmd', 'input', {
85
+ summary: {
86
+ mode: 'staged-summary',
87
+ stagedOnly: true,
88
+ totalFiles: 1,
89
+ totalAdded: 5,
90
+ totalDeleted: 1,
91
+ categoryCounts: { source: 1, tests: 0, docs: 0, config: 0, other: 0 },
92
+ dominantCategories: ['source'],
93
+ topFiles: [],
94
+ omittedFileCount: 0,
95
+ },
96
+ });
97
+ expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {
98
+ status: 'selected-message',
99
+ source: 'selected-suggestion',
100
+ regenerateCount: 0,
101
+ message: 'feat: add commit tracing',
102
+ });
103
+ expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {
104
+ status: 'committed',
105
+ message: 'feat: add commit tracing',
106
+ });
107
+ expect(execSync).toHaveBeenCalledWith('git commit -m "feat: add commit tracing"', { stdio: 'inherit' });
108
+ expect(close).toHaveBeenCalledTimes(1);
109
+ logSpy.mockRestore();
110
+ });
111
+ });
112
+ //# sourceMappingURL=CommitSuggesterCmd.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommitSuggesterCmd.test.js","sourceRoot":"","sources":["../../src/__tests__/CommitSuggesterCmd.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Verifies file-only trace logging for the standalone commit command flow.\n */\nimport { beforeEach, describe, expect, it, vi } from 'vitest';\n\nconst buildStagedCommitSummary = vi.fn();\nconst moduleRun = vi.fn();\nconst logInputOutput = vi.fn();\nconst execSync = vi.fn();\nconst spawnSync = vi.fn();\nconst close = vi.fn();\n\nconst rl = {\n question: vi.fn(),\n close,\n};\n\nvi.mock('child_process', () => ({\n execSync,\n spawnSync,\n}));\n\nvi.mock('../git/commitSummary.js', () => ({\n buildStagedCommitSummary,\n}));\n\nvi.mock('../pipeline/modules/commitSuggesterModule.js', () => ({\n commitSuggesterModule: {\n run: moduleRun,\n },\n}));\n\nvi.mock('../utils/promptLogHelper.js', () => ({\n logInputOutput,\n}));\n\nvi.mock('../commands/ReadlineSingleton.js', () => ({\n getRl: () => ({\n rl,\n isTemporary: true,\n }),\n}));\n\ndescribe('suggestCommitMessage logging', () => {\n beforeEach(() => {\n vi.resetModules();\n buildStagedCommitSummary.mockReset();\n moduleRun.mockReset();\n logInputOutput.mockReset();\n execSync.mockReset();\n spawnSync.mockReset();\n rl.question.mockReset();\n close.mockReset();\n });\n\n it('logs an early exit when there are no staged changes', async () => {\n buildStagedCommitSummary.mockReturnValue(undefined);\n const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n const { suggestCommitMessage } = await import('../commands/CommitSuggesterCmd.js');\n await suggestCommitMessage();\n\n expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {\n status: 'no-staged-changes',\n });\n expect(moduleRun).not.toHaveBeenCalled();\n expect(close).toHaveBeenCalledTimes(1);\n logSpy.mockRestore();\n });\n\n it('logs the staged summary and final selected message on the happy path', async () => {\n buildStagedCommitSummary.mockReturnValue({\n mode: 'staged-summary',\n stagedOnly: true,\n totalFiles: 1,\n totalAdded: 5,\n totalDeleted: 1,\n categoryCounts: { source: 1, tests: 0, docs: 0, config: 0, other: 0 },\n dominantCategories: ['source'],\n topFiles: [],\n omittedFileCount: 0,\n });\n moduleRun.mockResolvedValue({\n suggestions: ['feat: add commit tracing'],\n });\n rl.question.mockImplementation((_prompt: string, cb: (answer: string) => void) => cb('1'));\n execSync.mockImplementation((command: string) => {\n if (command === 'git diff --cached') {\n return 'diff --git a/file b/file';\n }\n return '';\n });\n const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n const { suggestCommitMessage } = await import('../commands/CommitSuggesterCmd.js');\n await suggestCommitMessage();\n\n expect(logInputOutput).toHaveBeenNthCalledWith(1, 'commitSuggesterCmd', 'input', {\n summary: {\n mode: 'staged-summary',\n stagedOnly: true,\n totalFiles: 1,\n totalAdded: 5,\n totalDeleted: 1,\n categoryCounts: { source: 1, tests: 0, docs: 0, config: 0, other: 0 },\n dominantCategories: ['source'],\n topFiles: [],\n omittedFileCount: 0,\n },\n });\n expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {\n status: 'selected-message',\n source: 'selected-suggestion',\n regenerateCount: 0,\n message: 'feat: add commit tracing',\n });\n expect(logInputOutput).toHaveBeenCalledWith('commitSuggesterCmd', 'output', {\n status: 'committed',\n message: 'feat: add commit tracing',\n });\n expect(execSync).toHaveBeenCalledWith('git commit -m \"feat: add commit tracing\"', { stdio: 'inherit' });\n expect(close).toHaveBeenCalledTimes(1);\n logSpy.mockRestore();\n });\n});\n"]}