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/README.md CHANGED
@@ -1,378 +1,273 @@
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
+ Website: [https://scai.dk](https://scai.dk)
15
+ Built in Denmark / EU
12
16
 
13
- **SCAI** is an AI-powered command-line tool that helps developers explore and reason about source code using **local large language models only**.
17
+ ## What SCAI Is Good At
14
18
 
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.
19
+ SCAI is strongest when you want help understanding an existing repository.
16
20
 
17
- SCAI runs entirely on your local system:
21
+ It is good at:
18
22
 
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
23
+ - Explaining what a file, function, or module does
24
+ - Finding where logic lives across the repo
25
+ - Tracing auth, config, database, or API flow
26
+ - Summarizing a subsystem before you edit it
27
+ - Reviewing a small local change idea before you do it
28
+ - Writing comments or small docs updates
29
+ - Refactoring existing code in a small or medium-sized area
30
+ - Helping with small light code changes in a limited area
31
+ - Writing commit messages from staged changes
25
32
 
26
- Your code never leaves your machine. All analysis and reasoning happens locally.
33
+ ## Current Limits
27
34
 
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.
35
+ SCAI is not a full replacement for a strong cloud coding agent.
30
36
 
31
- ---
37
+ Today it works best when:
32
38
 
33
- ## ⚠️ Alpha Status
39
+ - The task is about understanding code already in the repo
40
+ - The task is about changing code that already exists
41
+ - The change is small and local
42
+ - You want grounded answers tied to real files
34
43
 
35
- SCAI is currently in **alpha**.
44
+ Scai is not for:
36
45
 
37
- If you have previously installed SCAI, reset the local database before upgrading:
46
+ - Building brand new features from scratch
47
+ - Large refactors across many files
48
+ - Broad automated rewrite requests
49
+ - Tasks that need bash actions, file creation, or other execution steps
50
+ - Tasks that depend on web access or external services
38
51
 
39
- ```bash
40
- scai db reset
41
- scai index start
42
- ```
43
-
44
- Breaking changes and evolving behavior should be expected.
45
-
46
- ---
47
-
48
- ## Why SCAI?
49
-
50
- ### 🔐 Local-Only by Design
51
-
52
- SCAI agents operate **entirely offline**.
53
-
54
- They do not:
55
-
56
- * Browse the web
57
- * Fetch URLs
58
- * Ingest external documents
59
- * Execute remote prompts
60
-
61
- **Security implications:**
62
-
63
- * No prompt injection via web content
64
- * No data exfiltration
65
- * No hidden network calls
66
- * Fully auditable execution
67
-
68
- This makes SCAI suitable for **private repositories, regulated environments, and GDPR-compliant workflows**.
69
-
70
- ---
71
-
72
- ### 🧠 Codebase-Aware Analysis
73
-
74
- SCAI builds and maintains a structured internal representation of your repository using:
75
-
76
- * Language-aware parsing
77
- * Symbol and dependency indexing
78
- * Static and heuristic analysis
79
- * Cross-file context tracking
80
-
81
- This enables repository-level questions that go beyond single-file inspection.
82
-
83
- ---
84
-
85
- ### ✂️ Assisted Code Iteration (Early)
86
-
87
- SCAI can assist with **lightweight, example-driven code iteration**, primarily focused on understanding and improving existing code rather than large-scale automated refactoring.
52
+ Important current limit:
88
53
 
89
- Current strengths include:
54
+ - SCAI can refactor code that already exists
55
+ - SCAI is not yet a good fit for building new features end to end
56
+ - SCAI does not currently act like a shell agent that runs bash steps to create files, wire systems together, or drive external tools
57
+ - SCAI does not handle large file refactors well. It's capped at 1000 lines.
90
58
 
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
59
+ *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.*
96
60
 
97
- Changes are **guided by indexed context and user prompts**, and are intended to support human review and decision-making.
61
+ ## Privacy And Cost
98
62
 
99
- Large-scale or fully automated repository-wide refactoring should currently be considered **experimental**.
63
+ SCAI runs with local models only.
100
64
 
101
- ---
65
+ That means:
102
66
 
103
- ### 🛠 Built for Developer Workflows
67
+ - No API keys
68
+ - No metered token billing
69
+ - No remote prompt processing
70
+ - No web browsing by the agent
71
+ - No prompt injection from fetched web content
104
72
 
105
- SCAI is a **terminal-native tool** designed to integrate cleanly into daily development:
106
-
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
113
-
114
- No browser UI. No cloud login. No vendor lock-in.
115
-
116
- ---
117
-
118
- ### 🇪🇺 Privacy & Compliance First
119
-
120
- * Fully local execution
121
- * No telemetry
122
- * No cloud services
123
- * Developed in Denmark / EU
124
- * GDPR-friendly by default
125
-
126
- ---
127
-
128
- ## Language Support
129
-
130
- SCAI is currently **tested and supported** for:
131
-
132
- * **JavaScript**
133
- * **TypeScript**
134
- * **Java**
135
-
136
- Other languages may work partially, but indexing quality, analysis accuracy, and agent behavior are **not guaranteed**.
137
-
138
- SCAI should currently be considered **JS / TS / Java-first**.
139
-
140
- ---
73
+ This makes it a good fit for private code, internal repos, and teams that want a simple offline workflow.
141
74
 
142
75
  ## Getting Started
143
76
 
144
- ### Install & Initialize
77
+ Install the CLI:
145
78
 
146
79
  ```bash
147
80
  npm install -g scai
148
- scai init
149
- scai index start
150
81
  ```
151
82
 
152
- This:
153
-
154
- * Initializes local configuration
155
- * Starts the background daemon
156
- * Begins indexing the current repository
157
-
158
- > **Note**
159
- > Initial indexing can take **minutes to hours**, depending on repository size and enabled analysis.
160
-
161
- ---
162
-
163
- ### Starting SCAI
164
-
165
- Running the `scai` command with no arguments starts the interactive shell:
83
+ Move into the repository you want to work on:
166
84
 
167
85
  ```bash
168
- scai
86
+ cd /path/to/repo
169
87
  ```
170
88
 
171
- You can also start it explicitly:
89
+ Set up the repo and local model runtime:
172
90
 
173
91
  ```bash
174
- scai shell
92
+ scai setup
175
93
  ```
176
94
 
177
- ---
178
-
179
- ### View Available Commands
95
+ This will:
180
96
 
181
- ```bash
182
- scai --help
183
- ```
97
+ - Register the current repository
98
+ - Check that Ollama is available
99
+ - Help you pick or install a local model
100
+ - Start local indexing
184
101
 
185
- ---
102
+ 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.
186
103
 
187
- ## Interactive REPL
104
+ For best results on a 64 GB machine, use:
188
105
 
189
- The REPL is the primary interface for working with SCAI.
106
+ - `qwen3-coder:30b`
107
+ - `gemma4:26b-mlx`
190
108
 
191
- ### Ask questions about your codebase
109
+ For smaller machines, use:
192
110
 
193
- Be specific for better results.
111
+ - `gemma4:e4b-mlx`
194
112
 
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
202
- ```
113
+ If you have a higher-memory system, larger parameter models may work better.
203
114
 
204
- ### Run CLI commands inside the REPL
115
+ Optional manual model install commands:
205
116
 
206
- ```text
207
- /index list
208
- /index switch
209
- /git commit
117
+ ```bash
118
+ ollama pull qwen3-coder:30b
119
+ ollama pull gemma4:26b-mlx
120
+ ollama pull gemma4:e4b-mlx
210
121
  ```
211
122
 
212
- ### Execute shell commands
123
+ To set the active model yourself, use:
213
124
 
214
- ```text
215
- !git status
216
- !ls -la
125
+ ```bash
126
+ scai config set-model qwen3-coder:30b
217
127
  ```
218
128
 
219
- All interactions remain **offline and free**, with **no token usage**.
129
+ Replace the model name with the one you want to use.
220
130
 
221
- ---
131
+ Then start the interactive shell:
222
132
 
223
- ## Repository Indexing
133
+ ```bash
134
+ scai
135
+ ```
224
136
 
225
- Repositories must be indexed before querying:
137
+ You can also ask one question directly:
226
138
 
227
139
  ```bash
228
- scai index set /path/to/repo
229
- scai index start
230
- scai index list
231
- scai index switch
232
- scai index delete
140
+ scai ask "Where is the auth token checked?"
233
141
  ```
234
142
 
235
- Only indexed repositories are accessible to agents.
143
+ ## Example Questions
144
+
145
+ Good prompts are concrete and repo-focused.
236
146
 
237
- ---
147
+ Examples:
238
148
 
239
- ## Background Analysis (Daemon)
149
+ ```text
150
+ What does withContext do in cli/src/index.ts?
151
+ Where is the auth flow implemented?
152
+ Summarize the indexing pipeline.
153
+ Which files define database queries?
154
+ Show me the config loading path.
155
+ Help me add comments to this file.
156
+ Help me make a small cleanup in this module.
157
+ ```
240
158
 
241
- SCAI performs deep analysis in the background, including:
159
+ ## Tasks And Resume
242
160
 
243
- * File discovery
244
- * AST parsing
245
- * Dependency graph construction
246
- * Symbol resolution
247
- * Heuristic structure analysis
161
+ SCAI can keep task context so you can continue later.
248
162
 
249
- Daemon control:
163
+ Useful commands:
250
164
 
251
165
  ```bash
252
- scai daemon start
253
- scai daemon stop
254
- scai daemon restart
255
- scai daemon status
256
- scai daemon logs
166
+ scai context
167
+ scai new-context
168
+ scai task show <id>
169
+ scai task resume <id>
170
+ scai task path <id>
257
171
  ```
258
172
 
259
- Indexing progress resumes automatically after restart.
173
+ Use these when you want to inspect what the agent already did or continue an earlier task.
260
174
 
261
- ---
175
+ ## Commit Messages
262
176
 
263
- ## Configuration
177
+ SCAI can write commit messages from your **staged** changes.
264
178
 
265
- Set a local model (recommended):
179
+ Stage your changes first:
266
180
 
267
181
  ```bash
268
- scai config set-model qwen3-coder:30b
182
+ git add <files>
269
183
  ```
270
184
 
271
- View configuration:
185
+ Then ask SCAI for a commit message:
272
186
 
273
187
  ```bash
274
- scai config show --raw
188
+ scai commit
275
189
  ```
276
190
 
277
- ---
191
+ This is local too. Diff inspection and message generation stay on your machine.
278
192
 
279
- ## Git Commit Assistant
193
+ ## Indexing And Repositories
280
194
 
281
- Generate commit messages from staged changes:
195
+ Most users only need:
282
196
 
283
197
  ```bash
284
- git add .
285
- scai git commit
198
+ scai setup
199
+ scai status
286
200
  ```
287
201
 
288
- All diff inspection and reasoning is performed locally.
202
+ Run that once in each repository you want SCAI to use.
289
203
 
290
- ---
204
+ Use `scai status` when you want a read-only check of repo, DB, indexing, daemon, and model readiness.
291
205
 
292
- ## GitHub Authentication
206
+ 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.
293
207
 
294
- Required only for GitHub-related features:
208
+ Advanced multi-repo commands are still available if you need them:
295
209
 
296
210
  ```bash
297
- scai auth set
298
- scai auth check
299
- scai auth reset
211
+ scai index list
212
+ scai index switch
213
+ scai index start
214
+ scai index status
300
215
  ```
301
216
 
302
- ---
303
-
304
- ## Privacy & Security Summary
217
+ Only repositories that have been set up are available to the agent.
305
218
 
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
219
+ ## Model Help
312
220
 
313
- ---
221
+ SCAI uses a local Ollama server.
314
222
 
315
- ## Feedback & Community
223
+ Useful commands:
316
224
 
317
- * 🌍 [https://scai.dk](https://scai.dk)
318
- * 🧵 [https://threads.net/@scai.dk](https://threads.net/@scai.dk)
319
-
320
- ---
321
-
322
- # License & Usage Terms
323
-
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**.
225
+ ```bash
226
+ scai model status
227
+ scai model restart
228
+ scai config show --raw
229
+ scai config set-model qwen3-coder:30b
230
+ ```
341
231
 
342
- ---
232
+ If you want to manage models manually, download one with Ollama:
343
233
 
344
- ## Restricted Use
234
+ ```bash
235
+ ollama pull gemma4:e4b-mlx
236
+ ```
345
237
 
346
- The following require a **commercial license**:
238
+ Then point SCAI at that model:
347
239
 
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
240
+ ```bash
241
+ scai config set-model gemma4:e4b-mlx
242
+ ```
353
243
 
354
- ---
244
+ If `scai setup` worked, you usually do not need to touch this often.
355
245
 
356
- ## Commercial Licensing
246
+ ## Upgrading
357
247
 
358
- Commercial and enterprise use requires a **paid license** and explicit permission from the author.
248
+ If you upgrade SCAI and local state looks wrong, reset the local DB:
359
249
 
360
- Please contact the author to discuss licensing terms.
250
+ ```bash
251
+ scai db reset
252
+ ```
361
253
 
362
- ---
254
+ General note:
363
255
 
364
- ## Disclaimer
256
+ - Results can still vary by repository, model, and hardware
257
+ - If behavior changes after an upgrade, re-run setup and check the selected model
365
258
 
366
- This software is provided **“as is”**, without warranty of any kind.
259
+ ## Troubleshooting
367
260
 
368
- The author is not liable for any damages arising from its use.
261
+ If SCAI is not answering well:
369
262
 
370
- ---
263
+ 1. Make sure the repo was set up with `scai setup`
264
+ 2. Check that Ollama is running with `scai model status`
265
+ 3. Ask a more concrete question with file names, symbols, or subsystem names
266
+ 4. Keep the task small if you want code changes
371
267
 
372
- ### Non-Binding Summary
268
+ If you need to inspect the current task state:
373
269
 
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
270
+ ```bash
271
+ scai context
272
+ scai task show <id>
273
+ ```
@@ -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"]}