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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalCommands.js","sourceRoot":"","sources":["../../src/commands/evalCommands.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Defines local eval cases and shared CLI/shell eval command actions.\n *\n * Why this file exists:\n * - local evals catch new-agent regressions without needing a full benchmark harness\n * - checks should prefer user-visible output and stable shared runtime-log tokens\n * - stale architecture names should not stay in the default regression suite after cleanup\n * - `evalQueries` stay as smoke prompts, while `localEvalCases` stay the real regression suite\n * - CLI and shell eval commands should call one shared behavior owner\n * - slower transform coverage should live behind one explicit eval command\n *\n * Example eval shapes:\n * - explicit target -> answer mentions the right file or symbol\n * - search-heavy question -> shared logs still show the new runtime start and final answer\n * - repo-wide analysis -> answer stays grounded without relying on legacy trace phrases\n */\nimport fs from \"fs\";\nimport path from \"path\";\nimport { Script } from \"node:vm\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { RUN_LOG_PATH } from \"../constants.js\";\nimport { buildEvalReportMarkdown, getLatestTaskId, printEvalReport, runEvalReportCommand } from \"./EvalReportCmd.js\";\nimport { createHarnessArtifactDir, type HarnessArtifactFile, writeHarnessArtifacts } from \"../testing/harnessArtifacts.js\";\nimport { startLlmTraceSession, stopLlmTraceSession } from \"../testing/llmTraceSession.js\";\nimport { extractFinalAnswerTextFromRuntimeLog, normalizeRuntimeLogText } from \"../testing/runtimeLogReader.js\";\nimport { resolveCanonicalRepoIdentity } from \"../utils/repoIdentity.js\";\n\ntype EvalQueryOptions = {\n resumeTaskId?: number;\n resumeLatestTask?: boolean;\n continueCurrentTask?: boolean;\n bindAsCurrentTask?: boolean;\n runtime?: \"agent\";\n};\n\ntype EvalSetupStep = {\n query: string;\n options?: EvalQueryOptions;\n};\n\ntype EvalFileTokenCheck = {\n path: string;\n tokens: string[];\n};\n\ntype EvalFileAnyTokenCheck = {\n path: string;\n anyOf: string[];\n};\n\ntype ShellCommandFn = (...args: string[]) => Promise<void>;\ntype EvalRunQuery = (\n query: string,\n options?: { resumeTaskId?: number; continueCurrentTask?: boolean; bindAsCurrentTask?: boolean; runtime?: \"agent\" }\n) => Promise<unknown>;\nconst SUPPRESS_FINAL_CONTEXT_ENV = \"SCAI_SUPPRESS_FINAL_CONTEXT\";\n\nexport type EvalOutcomeKind = \"passed\" | \"failed\" | \"skipped\" | \"incomplete\";\n\nexport type EvalOutcomeRecord = {\n kind: EvalOutcomeKind;\n applicable: boolean;\n failures: string[];\n artifactDir?: string;\n};\n\nexport type EvalBatchSummary = {\n total: number;\n applicable: number;\n completed: number;\n passed: number;\n failed: number;\n skipped: number;\n incomplete: number;\n};\n\nfunction createInitialEvalOutcomes(evalIds: string[]): Map<string, EvalOutcomeRecord> {\n return new Map(evalIds.map((id) => [id, {\n kind: \"incomplete\" as EvalOutcomeKind,\n applicable: true,\n failures: [\"eval did not finish\"],\n }]));\n}\n\nfunction recordEvalOutcome(\n outcomesById: Map<string, EvalOutcomeRecord>,\n evalId: string,\n record: EvalOutcomeRecord\n): void {\n outcomesById.set(evalId, record);\n}\n\nexport function buildEvalBatchSummary(outcomesById: ReadonlyMap<string, EvalOutcomeRecord>): EvalBatchSummary {\n let applicable = 0;\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n let incomplete = 0;\n\n for (const outcome of outcomesById.values()) {\n if (outcome.applicable) {\n applicable += 1;\n }\n switch (outcome.kind) {\n case \"passed\":\n passed += 1;\n break;\n case \"failed\":\n failed += 1;\n break;\n case \"skipped\":\n skipped += 1;\n break;\n case \"incomplete\":\n default:\n incomplete += 1;\n break;\n }\n }\n\n return {\n total: outcomesById.size,\n applicable,\n completed: passed + failed,\n passed,\n failed,\n skipped,\n incomplete,\n };\n}\n\nexport function assertEvalSummaryInvariant(summary: EvalBatchSummary): void {\n const classifiedTotal = summary.passed + summary.failed + summary.skipped + summary.incomplete;\n const classifiedCompleted = summary.passed + summary.failed;\n if (\n summary.total !== classifiedTotal\n || summary.completed !== classifiedCompleted\n || summary.completed > summary.applicable\n || summary.applicable > summary.total\n ) {\n throw new Error(\n [\n \"Eval summary totals do not add up.\",\n `total=${summary.total} classified=${classifiedTotal}`,\n `completed=${summary.completed} classifiedCompleted=${classifiedCompleted}`,\n `applicable=${summary.applicable} total=${summary.total}`,\n ].join(\" \")\n );\n }\n}\n\nexport function formatEvalSummaryLine(summary: EvalBatchSummary, durationSec: string): string {\n return `\\n[EVAL SUMMARY] total=${summary.total}, applicable=${summary.applicable}, completed=${summary.completed}, passed=${summary.passed}, failed=${summary.failed}, skipped=${summary.skipped}, incomplete=${summary.incomplete}, duration=${durationSec}s`;\n}\n\nexport function writeEvalBatchSummaryArtifact(\n artifactDir: string,\n input: {\n selectedEvalIds: string[];\n summary: EvalBatchSummary;\n outcomesById: ReadonlyMap<string, EvalOutcomeRecord>;\n durationSec: string;\n }\n): string {\n fs.mkdirSync(artifactDir, { recursive: true });\n const outcomes = Object.fromEntries(Array.from(input.outcomesById.entries()).map(([evalId, outcome]) => [evalId, outcome]));\n const outputPath = path.join(artifactDir, \"batch_summary.json\");\n fs.writeFileSync(outputPath, JSON.stringify({\n selectedEvalIds: input.selectedEvalIds,\n durationSec: input.durationSec,\n summary: input.summary,\n outcomes,\n }, null, 2));\n return outputPath;\n}\n\nexport const evalQueries = [\n \"Explain how agentMemory, agentLoop, agentActions, and agentStateMachine divide responsibilities.\",\n \"Explain how the simple agent chooses between plan, search-db, search-regex, search-list-directory, triage-file, read-file, and final-answer.\",\n \"Trace one simple-agent run from understand through final answer and show where state transitions happen.\",\n \"How do runtime.log, runtime.ndjson, and llm_calls differ, and where is each written?\",\n \"Trace how generate() timing reaches structured logs and the console presentation layer.\",\n \"How does scai config dev-output affect console timing for both runtimes?\",\n \"Where is console presentation centralized, and which normal runtime messages flow through it?\",\n \"How are local-time timestamps formatted across runtime.log, runtime.ndjson, debug logs, and llm trace files?\",\n \"How does /resume for the simple agent work, and when does it reuse in-memory state?\",\n \"Where are readable runtime-local ids like session-001 and task-001 assigned, and where do they appear?\",\n \"Which simple-agent files under cli/src/agents are missing targeted test coverage?\",\n \"Summarize CLI architecture from index.ts, commands/factory.ts, and runQueryWithDaemonControl.ts.\",\n \"How does this repo run tests and where are the test entry points configured?\",\n \"Are there flaky-test signals in __tests__ or test scripts, and where would retries be added?\",\n \"Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?\",\n \"Map the full run lifecycle in MainAgent and point out where routing decisions are made.\",\n \"For repo-wide analysis questions, which method decides verify wave budget and why?\",\n \"Compare runSearch, runVerify, and runResearch responsibilities and identify overlap risks.\",\n \"List all gate checks (phase/scope/route/readiness/research) and the exact stop conditions.\",\n \"Explain why a repo-wide question might still end up analyzing only a few files.\",\n] as const;\n\n// Transform eval queries:\n// - playground/test/spatialmap.small.js\n// In playground/test/spatialmap.small.js, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.\n// - playground/test/spatialmap.small.extract.js\n// In playground/test/spatialmap.small.extract.js, extract the repeated /rest/profile/... URL building into a helper named buildProfileToolUrl and use it in buildPortalHtmlUrl, buildLayerPanelUrl, and buildSearchPanelUrl. Keep behavior the same.\n// - playground/test/spatialmap.small.multi.js\n// In playground/test/spatialmap.small.multi.js, rename the beginPortalFlow, beginWidgetFlow, and beginReadyFlow helper family to startPortalFlow, startWidgetFlow, and startReadyFlow, and update all call sites. Keep behavior the same.\n// - playground/test/spatialmap.small.multi.extract.js\n// In playground/test/spatialmap.small.multi.extract.js, extract the repeated /rest/profile/... portal request URL building into a helper named buildProfileToolRequestUrl and use it in buildPortalHtmlRequestUrl, buildLayerPanelRequestUrl, and buildSearchPanelRequestUrl. Keep behavior the same.\n// - playground/test/spatialmap.medium.js\n// In playground/test/spatialmap.medium.js, add a helper named getPageBody that returns document.body, then use it in prepareSurface, loadPortalMarkup, loadSidebarMarkup, loadSearchMarkup, syncSurfaceShell, syncSurfacePanels, syncSurfaceMessages, syncSurfaceLayout, and syncSurfaceTheme. Keep behavior the same.\n// - playground/test/spatialmap.medium.multi.js\n// In playground/test/spatialmap.medium.multi.js, add a helper named getPageBody that returns document.body, then use it in the markup-loading and syncSurface helpers instead of repeating document.querySelector(\"body\"). Keep behavior the same.\n// - playground/test/spatialmap.medium.extract.js\n// In playground/test/spatialmap.medium.extract.js, extract the repeated /rest/profile/... tool URL building into a helper named buildProfileToolUrl and use it in buildPortalHtmlUrl, buildSidebarHtmlUrl, buildSearchHtmlUrl, and buildPortalSourceUrl. Keep behavior the same.\n// - playground/test/spatialmap.js\n// In playground/test/spatialmap.js, cache sessionStorage.getItem(\"spatialmapSessionId\") in a const named sessionId inside doLoadNow and reuse it in loadToolsConfig, loadToolRequires, and initSpatialmapWidget. Keep behavior the same.\n\nexport type LocalEvalScenario = {\n id: string;\n query: string;\n setupSteps?: EvalSetupStep[];\n runOptions?: EvalQueryOptions;\n};\n\nexport const localEvalScenarios: LocalEvalScenario[] = [];\n\ntype LocalEvalSuite = \"default\" | \"transform\";\n\nexport type LocalEvalCase = {\n id: string;\n group?: \"main\" | \"agent\";\n suite?: LocalEvalSuite;\n scenarioId?: string;\n query?: string;\n setupSteps?: EvalSetupStep[];\n runOptions?: EvalQueryOptions;\n when?: {\n mustContainInRunLog?: string[];\n mustNotContainInRunLog?: string[];\n };\n syntaxCheckPaths?: string[];\n checks: {\n mustContain?: string[];\n mustNotContain?: string[];\n maxOccurrences?: Record<string, number>;\n mustContainAnswer?: string[];\n mustNotContainAnswer?: string[];\n fileMustContain?: EvalFileTokenCheck[];\n fileMustNotContain?: EvalFileTokenCheck[];\n fileMustContainAnyOf?: EvalFileAnyTokenCheck[];\n };\n};\n\ntype TransformEvalCaseOptions = {\n id: string;\n targetPath: string;\n queryTemplate: string;\n fileMustContain?: string[];\n fileMustNotContain?: string[];\n fileMustContainAnyOf?: EvalFileAnyTokenCheck[];\n};\n\nfunction createTransformEvalCase(options: TransformEvalCaseOptions): LocalEvalCase {\n return {\n id: options.id,\n group: \"agent\",\n suite: \"transform\",\n query: options.queryTemplate.split(\"$TARGET\").join(options.targetPath),\n runOptions: {\n runtime: \"agent\",\n },\n when: {\n mustContainInRunLog: [\n \"action=codeTransform\",\n ],\n },\n syntaxCheckPaths: [options.targetPath],\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n options.targetPath,\n ],\n fileMustContain: options.fileMustContain?.length\n ? [{ path: options.targetPath, tokens: options.fileMustContain }]\n : undefined,\n fileMustNotContain: options.fileMustNotContain?.length\n ? [{ path: options.targetPath, tokens: options.fileMustNotContain }]\n : undefined,\n fileMustContainAnyOf: options.fileMustContainAnyOf,\n },\n };\n}\n\nexport const localEvalCases: LocalEvalCase[] = [\n {\n id: \"agent_read_and_answer_simple_target\",\n group: \"agent\",\n query: \"Explain what cli/src/agents/agentTypes.ts is for.\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"agentTypes.ts\",\n ],\n },\n when: {\n mustContainInRunLog: [\n \"action=read-file\",\n ],\n mustNotContainInRunLog: [\n \"action=triage-file\",\n ],\n },\n },\n {\n id: \"agent_broad_triage_then_full_read\",\n group: \"agent\",\n query: \"Explain how the modular agent chooses between triage-file and read-file.\",\n runOptions: {\n runtime: \"agent\",\n },\n when: {\n mustContainInRunLog: [\n \"action=triage-file\",\n \"action=read-file\",\n ],\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"triage-file\",\n \"read-file\",\n ],\n },\n },\n {\n id: \"agent_ranked_candidate_promotion\",\n group: \"agent\",\n query: \"Explain how agentMemory, agentLoop, agentActions, and agentStateMachine divide responsibilities.\",\n runOptions: {\n runtime: \"agent\",\n },\n when: {\n mustContainInRunLog: [\n \"action=read-file\",\n ],\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"agentLoop\",\n \"agentActions\",\n ],\n },\n },\n {\n id: \"agent_list_plan_sections\",\n group: \"agent\",\n query: \"List the main sections in plan.md.\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"plan.md\",\n ],\n },\n },\n {\n id: \"agent_cli_architecture_summary\",\n group: \"agent\",\n query: \"Summarize CLI architecture from index.ts, commands/factory.ts, and runQueryWithDaemonControl.ts.\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"index.ts\",\n \"factory.ts\",\n \"runQueryWithDaemonControl.ts\",\n ],\n },\n },\n {\n id: \"routing_repo_wide_question\",\n group: \"agent\",\n query: \"summarize this repo architecture and identify weak coupling points\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"module\",\n \"architecture\",\n ],\n },\n },\n {\n id: \"verify_pipeline_sqlite_query\",\n group: \"agent\",\n query: \"Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"db/fileIndex.ts\",\n \"db/client.ts\",\n \"SQLite\",\n ],\n },\n },\n {\n id: \"search_folder_basename_exact_target\",\n group: \"agent\",\n query: \"check guards\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"executionPolicyResolver.ts\",\n \"guardState.ts\",\n \"resolveProgressState.ts\",\n ],\n },\n },\n {\n id: \"search_folder_path_exact_target\",\n group: \"agent\",\n query: \"check agents/guards\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"executionPolicyResolver.ts\",\n \"guardState.ts\",\n \"resolveProgressState.ts\",\n ],\n },\n },\n {\n id: \"search_folder_natural_language_exact_target\",\n group: \"agent\",\n query: \"please tell me what the three files in the guards folder do?\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"executionPolicyResolver.ts\",\n \"guardState.ts\",\n \"resolveProgressState.ts\",\n ],\n },\n },\n {\n id: \"search_folder_absolute_path_exact_target\",\n group: \"agent\",\n query: \"/Users/rzs/dev/repos/scai/cli/src/agents/guards\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"executionPolicyResolver.ts\",\n ],\n },\n },\n {\n id: \"search_file_without_extension_exact_target\",\n group: \"agent\",\n query: \"Explain EvalReportCmd\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"EvalReportCmd\",\n ],\n },\n },\n {\n id: \"search_file_with_extension_exact_target\",\n group: \"agent\",\n query: \"Explain loopReview.ts\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"loopReview.ts\",\n ],\n },\n },\n {\n id: \"search_filename_with_spaces_between_words\",\n group: \"agent\",\n query: \"Explain final answer module\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"Final Answer Module\",\n \"buildFinalAnswer\",\n ],\n },\n },\n {\n id: \"search_snippet_without_filename\",\n group: \"agent\",\n query: \"\\\"returns raw operator-pattern matches without semantic guessing\\\"\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"SearchOrchestrator.test.ts\",\n ],\n },\n },\n {\n id: \"search_identical_snippet_multiple_files\",\n group: \"agent\",\n query: \"\\\"const currentQuestionId = currentStep.questionId ?? (orderedQuestions.length === 1 ? orderedQuestions[0].id : undefined);\\\"\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"analysisPlanGenStep.ts\",\n \"transformPlanGenStep.ts\",\n ],\n },\n },\n {\n id: \"search_operator_pattern_query\",\n group: \"agent\",\n query: \"runSearch|semanticSearchFiles|plannerSearchFiles\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"runSearch\",\n ],\n },\n },\n {\n id: \"search_unresolved_folder_fallback\",\n group: \"agent\",\n query: \"check nonexistent-folder-name\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n ],\n },\n },\n {\n id: \"analysis_plan_and_semantic_pass\",\n group: \"agent\",\n query: \"Where does semanticAnalysis merge prior state, and what fields should remain semantic-only?\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n \"semanticAnalysisModule.ts\",\n ],\n },\n },\n {\n id: \"final_answer_for_test_entrypoints\",\n group: \"agent\",\n query: \"How does this repo run tests and where are the test entry points configured?\",\n runOptions: {\n runtime: \"agent\",\n },\n checks: {\n mustContain: [\n \"[agent] [task:created]\",\n \"artifact final-answer\",\n ],\n mustContainAnswer: [\n \"vitest\",\n \"package.json\",\n \"vitest.config.ts\",\n ],\n },\n },\n /**\n * Transform evals for the spatialmap practice files.\n *\n * These stay in a separate slow suite so the default `/evals` run stays fast.\n */\n createTransformEvalCase({\n id: \"transform_spatialmap_small_rename_run_bootstrap_flow\",\n targetPath: \"playground/test/spatialmap.small.js\",\n queryTemplate:\n \"In $TARGET, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.\",\n fileMustContain: [\n \"function bootstrapPortalFlow(\",\n \"bootstrapPortalFlow(context)\",\n ],\n fileMustNotContain: [\n \"runBootstrapFlow\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_small_extract_profile_url_helper\",\n targetPath: \"playground/test/spatialmap.small.extract.js\",\n queryTemplate:\n \"In $TARGET, extract the repeated /rest/profile/... URL building into a helper named buildProfileToolUrl and use it in buildPortalHtmlUrl, buildLayerPanelUrl, and buildSearchPanelUrl. Keep behavior the same.\",\n fileMustContain: [\n \"function buildProfileToolUrl(\",\n ],\n fileMustContainAnyOf: [\n {\n path: \"playground/test/spatialmap.small.extract.js\",\n anyOf: [\n \"return buildProfileToolUrl(profileName, \\\"html/client/portal\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/portal\\\"\",\n ],\n },\n {\n path: \"playground/test/spatialmap.small.extract.js\",\n anyOf: [\n \"return buildProfileToolUrl(profileName, \\\"html/client/layer-panel\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/layer-panel\\\"\",\n ],\n },\n {\n path: \"playground/test/spatialmap.small.extract.js\",\n anyOf: [\n \"return buildProfileToolUrl(profileName, \\\"html/client/search-panel\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/search-panel\\\"\",\n ],\n },\n ],\n fileMustNotContain: [\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/portal\\\";\",\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/layer-panel\\\";\",\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/search-panel\\\";\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_small_multi_rename_flow_helpers\",\n targetPath: \"playground/test/spatialmap.small.multi.js\",\n queryTemplate:\n \"In $TARGET, rename the beginPortalFlow, beginWidgetFlow, and beginReadyFlow helper family to startPortalFlow, startWidgetFlow, and startReadyFlow, and update all call sites. Keep behavior the same.\",\n fileMustContain: [\n \"function startPortalFlow(\",\n \"function startWidgetFlow(\",\n \"function startReadyFlow(\",\n ],\n fileMustNotContain: [\n \"beginPortalFlow\",\n \"beginWidgetFlow\",\n \"beginReadyFlow\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_small_multi_extract_portal_request_helpers\",\n targetPath: \"playground/test/spatialmap.small.multi.extract.js\",\n queryTemplate:\n \"In $TARGET, extract the repeated /rest/profile/... portal request URL building into a helper named buildProfileToolRequestUrl and use it in buildPortalHtmlRequestUrl, buildLayerPanelRequestUrl, and buildSearchPanelRequestUrl. Keep behavior the same.\",\n fileMustContain: [\n \"function buildProfileToolRequestUrl(\",\n \"return buildProfileToolRequestUrl(profileName, \\\"html/client/portal\\\")\",\n \"return buildProfileToolRequestUrl(profileName, \\\"html/client/layer-panel\\\")\",\n \"return buildProfileToolRequestUrl(profileName, \\\"html/client/search-panel\\\")\",\n ],\n fileMustNotContain: [\n \"function buildPortalHtmlRequestUrl(profileName) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/portal\\\"; }\",\n \"function buildLayerPanelRequestUrl(profileName) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/layer-panel\\\"; }\",\n \"function buildSearchPanelRequestUrl(profileName) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/search-panel\\\"; }\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_medium_document_body_cleanup\",\n targetPath: \"playground/test/spatialmap.medium.js\",\n queryTemplate:\n \"In $TARGET, add a helper named getPageBody that returns document.body, then use it in prepareSurface, loadPortalMarkup, loadSidebarMarkup, loadSearchMarkup, syncSurfaceShell, syncSurfacePanels, syncSurfaceMessages, syncSurfaceLayout, and syncSurfaceTheme. Keep behavior the same.\",\n fileMustContain: [\n \"function getPageBody()\",\n \"document.body\",\n ],\n fileMustNotContain: [\n \"document.querySelector(\\\"body\\\").insertAdjacentHTML(\",\n \"const pageBody = document.querySelector(\\\"body\\\");\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_medium_multi_dom_surface_cleanup\",\n targetPath: \"playground/test/spatialmap.medium.multi.js\",\n queryTemplate:\n \"In $TARGET, add a helper named getPageBody that returns document.body, then use it in the markup-loading and syncSurface helpers instead of repeating document.querySelector(\\\"body\\\"). Keep behavior the same.\",\n fileMustContain: [\n \"function getPageBody()\",\n \"return document.body;\",\n ],\n fileMustNotContain: [\n \"document.querySelector(\\\"body\\\")\",\n \"context.widget.body\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_medium_extract_profile_tool_url\",\n targetPath: \"playground/test/spatialmap.medium.extract.js\",\n queryTemplate:\n \"In $TARGET, extract the repeated /rest/profile/... tool URL building into a helper named buildProfileToolUrl and use it in buildPortalHtmlUrl, buildSidebarHtmlUrl, buildSearchHtmlUrl, and buildPortalSourceUrl. Keep behavior the same.\",\n fileMustContain: [\n \"function buildProfileToolUrl(\",\n \"return buildProfileToolUrl(profileName, \\\"html/client/portal\\\")\",\n \"return buildProfileToolUrl(profileName, \\\"html/client/sidebar\\\")\",\n \"return buildProfileToolUrl(profileName, \\\"html/client/search\\\")\",\n \"return buildProfileToolUrl(profileName, \\\"src/client/portal/\\\" + sessionId)\",\n ],\n fileMustNotContain: [\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/portal\\\";\",\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/sidebar\\\";\",\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/html/client/search\\\";\",\n \"return \\\"/rest/profile/\\\" + profileName + \\\"/tools/src/client/portal/\\\" + sessionId;\",\n ],\n }),\n createTransformEvalCase({\n id: \"transform_spatialmap_large_cache_session_id\",\n targetPath: \"playground/test/spatialmap.js\",\n queryTemplate:\n \"In $TARGET, cache sessionStorage.getItem(\\\"spatialmapSessionId\\\") in a const named sessionId inside doLoadNow and reuse it in loadToolsConfig, loadToolRequires, and initSpatialmapWidget. Keep behavior the same.\",\n fileMustContain: [\n \"const sessionId = sessionStorage.getItem(\\\"spatialmapSessionId\\\");\",\n \"sessionId: sessionId,\",\n ],\n fileMustNotContain: [\n \"sessionStorage.getItem(\\\"spatialmapSessionId\\\"),\",\n ],\n }),\n];\n\nexport async function runEvalSmokeCommand(runQuery: EvalRunQuery): Promise<void> {\n const query = evalQueries[0];\n console.log(chalk.bold(`[EVAL QUERY] ${query}`));\n await runQuery(query, { continueCurrentTask: false, runtime: \"agent\" });\n}\n\nexport async function runEvalRandomCommand(runQuery: EvalRunQuery): Promise<void> {\n const query = pickRandom(evalQueries);\n console.log(`\\n[eval-random] Selected query:\\n-> ${query}\\n`);\n await runQuery(query, { continueCurrentTask: false, runtime: \"agent\" });\n}\n\nexport async function runEvalBatchCommand(runQuery: EvalRunQuery): Promise<void> {\n await runLocalEvals(runQuery, { group: \"agent\", suite: \"default\" });\n}\n\nexport async function runEvalTransformBatchCommand(runQuery: EvalRunQuery): Promise<void> {\n await runLocalEvals(runQuery, { group: \"agent\", suite: \"transform\" });\n}\n\nexport async function runEvalByIdCommand(runQuery: EvalRunQuery, evalIds: string[]): Promise<void> {\n if (evalIds.length === 0) {\n console.log(chalk.yellow(\"Usage: eval-run <id> [id...]\"));\n console.log(chalk.yellow(`Available ids: ${localEvalCases.map(test => test.id).join(\", \")}`));\n return;\n }\n await runLocalEvals(runQuery, { includeIds: evalIds });\n}\n\nexport async function listEvalsCommand(): Promise<void> {\n console.log(chalk.cyan(\"\\nAvailable evals:\"));\n for (const test of localEvalCases) {\n const scenario = resolveEvalScenario(test);\n console.log(chalk.bold(`- ${test.id}`));\n console.log(` group: ${test.group ?? \"main\"}`);\n console.log(` suite: ${test.suite ?? \"default\"}`);\n console.log(` query: ${scenario.query}`);\n }\n console.log(\"\");\n}\n\nexport async function runEvalReportShellCommand(runQuery: EvalRunQuery): Promise<void> {\n await runLocalEvals(runQuery, { reportEachEval: true, group: \"agent\", suite: \"default\" });\n const latestTaskId = getLatestTaskId();\n if (typeof latestTaskId === \"number\") {\n printEvalReport(latestTaskId, {\n title: \"Eval Report | latest task\",\n mermaid: true,\n evaluate: true,\n });\n }\n}\n\nexport function registerEvalCommands(cmd: Command, runQuery: EvalRunQuery): void {\n cmd\n .command(\"eval\")\n .description(\"Run the default smoke eval query\")\n .action(async () => {\n await runEvalSmokeCommand(runQuery);\n });\n\n cmd\n .command(\"eval-random\")\n .description(\"Run one random smoke eval query\")\n .action(async () => {\n await runEvalRandomCommand(runQuery);\n });\n\n cmd\n .command(\"evals\")\n .description(\"Run the default local eval suite\")\n .action(async () => {\n await runEvalBatchCommand(runQuery);\n });\n\n cmd\n .command(\"evals-transform\")\n .description(\"Run the transform-only local eval suite\")\n .action(async () => {\n await runEvalTransformBatchCommand(runQuery);\n });\n\n cmd\n .command(\"eval-run <id> [ids...]\")\n .description(\"Run one or more local evals by id\")\n .action(async (id: string, ids?: string[]) => {\n await runEvalByIdCommand(runQuery, [id, ...(ids ?? [])]);\n });\n\n cmd\n .command(\"eval-list\")\n .description(\"List local eval ids and queries\")\n .action(async () => {\n await listEvalsCommand();\n });\n\n cmd\n .command(\"eval-report [taskId]\")\n .description(\"Show task flow timeline, eval checks, and Mermaid graph (defaults to latest task)\")\n .option(\"--no-mermaid\", \"Skip Mermaid graph output\")\n .option(\"--no-evaluate\", \"Skip flow eval checks\")\n .action((taskId: string | undefined, opts: { mermaid?: boolean; evaluate?: boolean }) => {\n runEvalReportCommand(taskId, {\n mermaid: opts.mermaid,\n evaluate: opts.evaluate,\n });\n });\n}\n\nexport function registerEvalShellCommands(\n customCommands: Record<string, ShellCommandFn>,\n runQuery: EvalRunQuery\n): void {\n customCommands.eval = async () => runEvalSmokeCommand(runQuery);\n customCommands[\"eval-random\"] = async () => runEvalRandomCommand(runQuery);\n customCommands.evals = async () => runEvalBatchCommand(runQuery);\n customCommands[\"evals-transform\"] = async () => runEvalTransformBatchCommand(runQuery);\n customCommands[\"eval-run\"] = async (...args: string[]) => runEvalByIdCommand(runQuery, args.map((arg) => arg.trim()).filter(Boolean));\n customCommands[\"eval-list\"] = async () => listEvalsCommand();\n customCommands[\"eval-report\"] = async () => runEvalReportShellCommand(runQuery);\n}\n\nfunction pickRandom<T>(items: readonly T[]): T {\n return items[Math.floor(Math.random() * items.length)];\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (!needle) return 0;\n return haystack.split(needle).length - 1;\n}\n\nfunction resolveRepoRelativePath(repoRootPath: string, repoRelativePath: string): string {\n return path.join(repoRootPath, repoRelativePath);\n}\n\n/**\n * Captures the real mutated fixture files that a transform eval asserted on.\n *\n * Example:\n * - syntax check path `playground/test/spatialmap.small.js`\n * - saved artifact snapshot uses that same committed path\n */\nfunction collectOutputFilesForAssertions(assertions: LocalEvalCase[], repoRootPath: string): HarnessArtifactFile[] {\n const filePaths = new Set<string>();\n for (const test of assertions) {\n for (const filePath of test.syntaxCheckPaths ?? []) {\n filePaths.add(filePath);\n }\n for (const check of test.checks.fileMustContain ?? []) {\n filePaths.add(check.path);\n }\n for (const check of test.checks.fileMustNotContain ?? []) {\n filePaths.add(check.path);\n }\n }\n\n const files: HarnessArtifactFile[] = [];\n for (const filePath of filePaths) {\n const absolutePath = resolveRepoRelativePath(repoRootPath, filePath);\n if (!fs.existsSync(absolutePath)) {\n continue;\n }\n files.push({\n path: filePath,\n content: fs.readFileSync(absolutePath, \"utf-8\"),\n });\n }\n return files;\n}\n\nfunction collectFileCheckFailures(\n checks: EvalFileTokenCheck[] | undefined,\n repoRootPath: string,\n mode: \"must-contain\" | \"must-not-contain\"\n): string[] {\n const failures: string[] = [];\n for (const check of checks ?? []) {\n const absolutePath = resolveRepoRelativePath(repoRootPath, check.path);\n if (!fs.existsSync(absolutePath)) {\n failures.push(`file missing: ${check.path}`);\n continue;\n }\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n for (const token of check.tokens) {\n const hasToken = content.includes(token);\n if (mode === \"must-contain\" && !hasToken) {\n failures.push(`file missing token: ${check.path} -> ${token}`);\n }\n if (mode === \"must-not-contain\" && hasToken) {\n failures.push(`file contains forbidden token: ${check.path} -> ${token}`);\n }\n }\n }\n return failures;\n}\n\nfunction collectFileAnyTokenFailures(\n checks: EvalFileAnyTokenCheck[] | undefined,\n repoRootPath: string\n): string[] {\n const failures: string[] = [];\n for (const check of checks ?? []) {\n const absolutePath = resolveRepoRelativePath(repoRootPath, check.path);\n if (!fs.existsSync(absolutePath)) {\n failures.push(`file missing: ${check.path}`);\n continue;\n }\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n if (!check.anyOf.some((token) => content.includes(token))) {\n failures.push(`file missing any accepted token: ${check.path} -> ${check.anyOf.join(\" || \")}`);\n }\n }\n return failures;\n}\n\nfunction collectSyntaxFailures(pathsToCheck: string[] | undefined, repoRootPath: string): string[] {\n const failures: string[] = [];\n for (const filePath of pathsToCheck ?? []) {\n const absolutePath = resolveRepoRelativePath(repoRootPath, filePath);\n if (!fs.existsSync(absolutePath)) {\n failures.push(`syntax check file missing: ${filePath}`);\n continue;\n }\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n try {\n new Script(content, { filename: filePath });\n } catch (error) {\n failures.push(`syntax check failed: ${filePath} -> ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n return failures;\n}\n\n/**\n * Saves one small metadata file for eval scenario runs that feed several assertions.\n */\nfunction writeEvalScenarioMetadata(\n artifactDir: string,\n scenario: LocalEvalScenario,\n assertions: LocalEvalCase[]\n): void {\n fs.writeFileSync(\n `${artifactDir}/scenario.json`,\n JSON.stringify(\n {\n scenarioId: scenario.id,\n query: scenario.query,\n assertionIds: assertions.map(test => test.id),\n },\n null,\n 2\n ),\n \"utf-8\"\n );\n}\n\n/**\n * Resolves the execution unit for one assertion.\n * Example:\n * - direct eval keeps its own query/setup/runOptions\n * - grouped mutating eval maps to one shared scenario and runs once\n */\nfunction resolveEvalScenario(test: LocalEvalCase): LocalEvalScenario {\n if (!test.scenarioId) {\n return {\n id: test.id,\n query: test.query ?? \"\",\n setupSteps: test.setupSteps,\n runOptions: test.runOptions,\n };\n }\n\n const sharedScenario = localEvalScenarios.find(scenario => scenario.id === test.scenarioId);\n if (!sharedScenario) {\n throw new Error(`Unknown eval scenario: ${test.scenarioId}`);\n }\n return sharedScenario;\n}\n\ntype EvalScenarioRunResult = {\n scenario: LocalEvalScenario;\n assertions: LocalEvalCase[];\n createdTaskId?: number;\n runLog: string;\n finalAnswerText: string;\n runtimeError?: string;\n harnessError?: string;\n artifactDir?: string;\n outputFiles?: HarnessArtifactFile[];\n};\n\ntype EvalLikelyFailureKind = \"harness-strictness\" | \"partial-transform-miss\" | \"runtime-failure\";\n\nfunction groupEvalCasesByScenario(selectedEvals: LocalEvalCase[]): EvalScenarioRunResult[] {\n const grouped = new Map<string, EvalScenarioRunResult>();\n\n for (const test of selectedEvals) {\n const scenario = resolveEvalScenario(test);\n const existing = grouped.get(scenario.id);\n if (existing) {\n existing.assertions.push(test);\n continue;\n }\n grouped.set(scenario.id, {\n scenario,\n assertions: [test],\n runLog: \"\",\n finalAnswerText: \"\",\n });\n }\n\n return Array.from(grouped.values());\n}\n\nfunction extractFinalAnswerText(runLog: string): string {\n return extractFinalAnswerTextFromRuntimeLog(runLog);\n}\n\n/**\n * Keeps only the latest visible run block for the current query when one exists.\n * Example: mixed shared output + `Query: check guards` -> slice from that query block onward.\n */\nfunction isolateRunLogForQuery(runLog: string, query: string): string {\n const normalizedRunLog = normalizeRuntimeLogText(runLog);\n const marker = `Query: ${query.trim()}`;\n const queryIndex = normalizedRunLog.lastIndexOf(marker);\n if (queryIndex < 0) {\n return normalizedRunLog;\n }\n const runStartIndex = normalizedRunLog.lastIndexOf(\"== \", queryIndex);\n return (runStartIndex >= 0 ? normalizedRunLog.slice(runStartIndex) : normalizedRunLog.slice(queryIndex)).trim();\n}\n\n/**\n * Detects whether the captured run log looks like the run that this eval just created.\n * Example: a log with `Query: Explain index.ts` or `[agent] [task:created]` is owned; stale shared output is not.\n */\nfunction hasOwnedEvalRunLog(runLog: string, query: string): boolean {\n if (!runLog.trim()) {\n return false;\n }\n return runLog.includes(`Query: ${query.trim()}`)\n || runLog.includes(\"[agent] [task:created]\")\n || runLog.includes(\"[main] [task:created]\");\n}\n\nfunction isEvalApplicable(test: LocalEvalCase, runLog: string): { ok: boolean; reason?: string } {\n const normalizedRunLog = normalizeRuntimeLogText(runLog);\n const mustContain = test.when?.mustContainInRunLog ?? [];\n for (const token of mustContain) {\n if (!normalizedRunLog.includes(token)) {\n return { ok: false, reason: `condition unmet: missing \"${token}\"` };\n }\n }\n\n const mustNotContain = test.when?.mustNotContainInRunLog ?? [];\n for (const token of mustNotContain) {\n if (normalizedRunLog.includes(token)) {\n return { ok: false, reason: `condition unmet: found forbidden \"${token}\"` };\n }\n }\n\n return { ok: true };\n}\n\nfunction deriveTuningHints(failures: string[], runLog: string): string[] {\n const hints = new Set<string>();\n const joined = failures.join(\" \").toLowerCase();\n const runLogLower = runLog.toLowerCase();\n\n if (joined.includes(\"targetsymbols\") || joined.includes(\"\\\"can\\\"\")) {\n hints.add(\"Symbol extraction is too permissive. Tune sentence-starter/stopword filtering in symbol heuristics.\");\n }\n\n if (joined.includes(\"domain-anchors:\") || joined.includes(\"missing token: domain-anchors:\")) {\n hints.add(\"Domain anchor recall is low. Tune phrase expansions or generic-token exclusions in query anchor extraction.\");\n }\n\n if (joined.includes(\"searchorchestrator\") || joined.includes(\"resolvedtargetfiles\")) {\n hints.add(\"Exact-target retrieval did not leave a visible search packet. Inspect orchestrator logging and downstream focus derivation.\");\n }\n\n if (joined.includes(\"output | infoplangen\") || joined.includes(\"output | filesearch\")) {\n hints.add(\"Expansion did not trigger as expected. Tune readiness weak-alignment guard or regex escalation thresholds.\");\n }\n\n if (runLogLower.includes(\"weakly aligned to domain anchors\") || runLogLower.includes(\"weak domain-anchor alignment\")) {\n hints.add(\"Weak-alignment gate fired. Consider lowering anchor strictness or adding a missing phrase synonym.\");\n }\n\n if (hints.size === 0 && failures.length > 0) {\n hints.add(\"Inspect failed tokens and tune the nearest retrieval gate (symbol, anchors, readiness, or expansion) with a minimal change.\");\n }\n\n return Array.from(hints);\n}\n\nfunction buildEvalArtifactReport(\n taskId: number | undefined,\n testId: string,\n artifactDir: string,\n options?: { reportEachEval?: boolean }\n): string | undefined {\n if (typeof taskId !== \"number\") {\n return undefined;\n }\n\n try {\n const reportText =\n buildEvalReportMarkdown(taskId, {\n title: `Eval Report | ${testId}`,\n mermaid: true,\n evaluate: true,\n artifactDir,\n }) ?? undefined;\n if (options?.reportEachEval) {\n printEvalReport(taskId, {\n title: `Eval Report | ${testId}`,\n mermaid: true,\n evaluate: true,\n artifactDir,\n });\n }\n return reportText;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.log(chalk.yellow(` - report error: ${message}`));\n return undefined;\n }\n}\n\nfunction resolveEvalQueryOptions(\n options: EvalQueryOptions | undefined,\n latestTaskId: number | undefined\n): { resumeTaskId?: number; continueCurrentTask?: boolean; bindAsCurrentTask?: boolean; runtime?: \"agent\" } {\n if (options?.resumeLatestTask) {\n return {\n resumeTaskId: latestTaskId,\n bindAsCurrentTask: options.bindAsCurrentTask,\n continueCurrentTask: false,\n runtime: options.runtime,\n };\n }\n\n return {\n resumeTaskId: options?.resumeTaskId,\n continueCurrentTask: options?.continueCurrentTask ?? false,\n bindAsCurrentTask: options?.bindAsCurrentTask,\n runtime: options?.runtime,\n };\n}\n\nfunction inferLikelyFailureKind(\n test: LocalEvalCase,\n failures: string[],\n runtimeError: string | undefined\n): EvalLikelyFailureKind | undefined {\n if ((test.suite ?? \"default\") !== \"transform\") {\n return undefined;\n }\n if (runtimeError || failures.some((failure) => failure.includes(\"runtime error\") || failure.includes(\"syntax check failed\"))) {\n return \"runtime-failure\";\n }\n if (test.id === \"transform_spatialmap_small_multi_extract_portal_request_helpers\") {\n return failures.length > 0 ? \"partial-transform-miss\" : undefined;\n }\n const onlyTokenShapeFailures = failures.length > 0 && failures.every((failure) =>\n failure.includes(\"file missing token:\")\n || failure.includes(\"file contains forbidden token:\")\n );\n if (onlyTokenShapeFailures && (\n test.id === \"transform_spatialmap_small_extract_profile_url_helper\"\n || test.id === \"transform_spatialmap_medium_extract_profile_tool_url\"\n )) {\n return \"harness-strictness\";\n }\n return failures.length > 0 ? \"partial-transform-miss\" : undefined;\n}\n\nexport async function runLocalEvals(\n runQuery: EvalRunQuery,\n options?: { reportEachEval?: boolean; includeIds?: string[]; group?: \"main\" | \"agent\"; suite?: LocalEvalSuite }\n): Promise<void> {\n const previousSuppress = process.env[SUPPRESS_FINAL_CONTEXT_ENV];\n process.env[SUPPRESS_FINAL_CONTEXT_ENV] = \"1\";\n\n const requestedIds = new Set(options?.includeIds ?? []);\n const selectedEvalsBase =\n requestedIds.size > 0\n ? localEvalCases.filter(test => requestedIds.has(test.id))\n : localEvalCases;\n const selectedEvals = options?.group\n ? selectedEvalsBase.filter((test) => (test.group ?? \"main\") === options.group)\n : selectedEvalsBase;\n const suiteFilteredEvals = options?.suite\n ? selectedEvals.filter((test) => (test.suite ?? \"default\") === options.suite)\n : selectedEvals;\n\n if (requestedIds.size > 0 && suiteFilteredEvals.length === 0) {\n console.log(chalk.yellow(\"[EVAL] No matching eval ids.\"));\n console.log(chalk.yellow(`Available ids: ${localEvalCases.map(test => test.id).join(\", \")}`));\n return;\n }\n if (!requestedIds.size && (options?.group || options?.suite) && suiteFilteredEvals.length === 0) {\n const groupLabel = options?.group ? `group \"${options.group}\"` : undefined;\n const suiteLabel = options?.suite ? `suite \"${options.suite}\"` : undefined;\n const filterSummary = [groupLabel, suiteLabel].filter(Boolean).join(\" and \");\n console.log(chalk.yellow(`[EVAL] No matching evals for ${filterSummary}.`));\n return;\n }\n\n const startedAt = Date.now();\n const selectedScenarioRuns = groupEvalCasesByScenario(suiteFilteredEvals);\n const repoRootPath = resolveCanonicalRepoIdentity().repoRootPath;\n const outcomesById = createInitialEvalOutcomes(suiteFilteredEvals.map((test) => test.id));\n let batchRunError: Error | undefined;\n\n try {\n for (const scenarioRun of selectedScenarioRuns) {\n const { scenario, assertions } = scenarioRun;\n scenarioRun.artifactDir = createHarnessArtifactDir(\"evals\", scenario.id);\n writeEvalScenarioMetadata(scenarioRun.artifactDir, scenario, assertions);\n fs.mkdirSync(requireRunLogDir(), { recursive: true });\n fs.writeFileSync(RUN_LOG_PATH, \"\", { flag: \"w\" });\n\n let latestTaskId = getLatestTaskId() ?? undefined;\n startLlmTraceSession(scenarioRun.artifactDir);\n try {\n for (const step of scenario.setupSteps ?? []) {\n const beforeSetupTaskId = getLatestTaskId();\n await runQuery(step.query, resolveEvalQueryOptions(step.options, latestTaskId));\n const afterSetupTaskId = getLatestTaskId();\n latestTaskId =\n typeof afterSetupTaskId === \"number\" &&\n (beforeSetupTaskId == null || afterSetupTaskId >= beforeSetupTaskId)\n ? afterSetupTaskId\n : latestTaskId;\n }\n\n const assertionIds = assertions.map(test => test.id).join(\", \");\n console.log(chalk.cyan(`\\n[EVAL] ${scenario.id}`));\n console.log(chalk.dim(` assertions: ${assertionIds}`));\n console.log(chalk.bold(`[EVAL QUERY] ${scenario.query}`));\n fs.appendFileSync(\n RUN_LOG_PATH,\n `\\n[EVAL] ${scenario.id}\\n[EVAL ASSERTIONS] ${assertionIds}\\n[EVAL QUERY] ${scenario.query}\\n`,\n \"utf-8\"\n );\n\n const beforeTaskId = getLatestTaskId();\n try {\n await runQuery(scenario.query, resolveEvalQueryOptions(scenario.runOptions, latestTaskId));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n scenarioRun.runtimeError = message;\n }\n const afterTaskId = getLatestTaskId();\n scenarioRun.createdTaskId =\n typeof afterTaskId === \"number\" &&\n (beforeTaskId == null || afterTaskId > beforeTaskId)\n ? afterTaskId\n : undefined;\n\n const rawRunLog = fs.existsSync(RUN_LOG_PATH)\n ? fs.readFileSync(RUN_LOG_PATH, \"utf-8\")\n : \"\";\n scenarioRun.runLog = isolateRunLogForQuery(rawRunLog, scenario.query);\n scenarioRun.finalAnswerText = extractFinalAnswerText(scenarioRun.runLog);\n scenarioRun.outputFiles = collectOutputFilesForAssertions(assertions, repoRootPath);\n if (!scenarioRun.createdTaskId && !hasOwnedEvalRunLog(scenarioRun.runLog, scenario.query)) {\n scenarioRun.harnessError = \"eval harness could not isolate the run log or created task for this scenario\";\n }\n } finally {\n stopLlmTraceSession();\n }\n\n for (const test of assertions) {\n let reportText: string | undefined;\n const testQuery = test.query ?? scenario.query;\n const normalizedRunLog = normalizeRuntimeLogText(scenarioRun.runLog);\n\n if (scenarioRun.harnessError) {\n console.log(chalk.yellow(`[INCOMPLETE] ${test.id}`));\n console.log(chalk.yellow(` - ${scenarioRun.harnessError}`));\n const artifactDir = writeHarnessArtifacts({\n kind: \"evals\",\n caseId: test.id,\n query: testQuery,\n taskId: scenarioRun.createdTaskId ?? undefined,\n artifactDir: scenarioRun.artifactDir,\n runLog: scenarioRun.runLog,\n finalAnswerText: scenarioRun.finalAnswerText,\n result: {\n id: test.id,\n applicable: true,\n passed: false,\n outcome: \"incomplete\",\n failures: [scenarioRun.harnessError],\n },\n outputFiles: scenarioRun.outputFiles,\n });\n recordEvalOutcome(outcomesById, test.id, {\n kind: \"incomplete\",\n applicable: true,\n failures: [scenarioRun.harnessError],\n artifactDir,\n });\n console.log(chalk.dim(` artifacts: ${artifactDir}`));\n continue;\n }\n\n if (scenarioRun.runtimeError) {\n recordEvalOutcome(outcomesById, test.id, {\n kind: \"failed\",\n applicable: true,\n failures: [`runtime error: ${scenarioRun.runtimeError}`],\n });\n console.log(chalk.red(`[FAIL] ${test.id}`));\n console.log(chalk.red(` - runtime error: ${scenarioRun.runtimeError}`));\n const artifactDir = writeHarnessArtifacts({\n kind: \"evals\",\n caseId: test.id,\n query: testQuery,\n artifactDir: scenarioRun.artifactDir,\n runLog: scenarioRun.runLog,\n finalAnswerText: scenarioRun.finalAnswerText,\n result: {\n id: test.id,\n applicable: true,\n passed: false,\n failures: [`runtime error: ${scenarioRun.runtimeError}`],\n likelyFailureKind: inferLikelyFailureKind(test, [`runtime error: ${scenarioRun.runtimeError}`], scenarioRun.runtimeError),\n },\n outputFiles: scenarioRun.outputFiles,\n });\n recordEvalOutcome(outcomesById, test.id, {\n kind: \"failed\",\n applicable: true,\n failures: [`runtime error: ${scenarioRun.runtimeError}`],\n artifactDir,\n });\n continue;\n }\n\n const applicability = isEvalApplicable(test, scenarioRun.runLog);\n if (!applicability.ok) {\n reportText = buildEvalArtifactReport(\n scenarioRun.createdTaskId,\n test.id,\n scenarioRun.artifactDir,\n options\n );\n console.log(chalk.blue(`[SKIP] ${test.id} (${applicability.reason})`));\n const artifactDir = writeHarnessArtifacts({\n kind: \"evals\",\n caseId: test.id,\n query: testQuery,\n taskId: scenarioRun.createdTaskId ?? undefined,\n artifactDir: scenarioRun.artifactDir,\n runLog: scenarioRun.runLog,\n finalAnswerText: scenarioRun.finalAnswerText,\n reportText,\n result: {\n id: test.id,\n applicable: false,\n passed: false,\n failures: [applicability.reason ?? \"skipped\"],\n likelyFailureKind: inferLikelyFailureKind(test, [applicability.reason ?? \"skipped\"], undefined),\n },\n outputFiles: scenarioRun.outputFiles,\n });\n recordEvalOutcome(outcomesById, test.id, {\n kind: \"skipped\",\n applicable: false,\n failures: [applicability.reason ?? \"skipped\"],\n artifactDir,\n });\n console.log(chalk.dim(` artifacts: ${artifactDir}`));\n continue;\n }\n\n const failures: string[] = [];\n for (const token of test.checks.mustContain ?? []) {\n if (!normalizedRunLog.includes(token)) {\n failures.push(`missing token: ${token}`);\n }\n }\n for (const token of test.checks.mustNotContain ?? []) {\n if (normalizedRunLog.includes(token)) {\n failures.push(`unexpected token: ${token}`);\n }\n }\n for (const [token, max] of Object.entries(test.checks.maxOccurrences ?? {})) {\n const count = countOccurrences(normalizedRunLog, token);\n if (count > max) {\n failures.push(`too many occurrences: \"${token}\" => ${count} (max ${max})`);\n }\n }\n for (const token of test.checks.mustContainAnswer ?? []) {\n if (!scenarioRun.finalAnswerText.toLowerCase().includes(token.toLowerCase())) {\n failures.push(`final answer missing token: ${token}`);\n }\n }\n for (const token of test.checks.mustNotContainAnswer ?? []) {\n if (scenarioRun.finalAnswerText.toLowerCase().includes(token.toLowerCase())) {\n failures.push(`final answer contains forbidden token: ${token}`);\n }\n }\n failures.push(\n ...collectFileCheckFailures(test.checks.fileMustContain, repoRootPath, \"must-contain\"),\n ...collectFileCheckFailures(test.checks.fileMustNotContain, repoRootPath, \"must-not-contain\"),\n ...collectFileAnyTokenFailures(test.checks.fileMustContainAnyOf, repoRootPath),\n ...collectSyntaxFailures(test.syntaxCheckPaths, repoRootPath),\n );\n\n if (failures.length === 0) {\n console.log(chalk.green(`[PASS] ${test.id}`));\n } else {\n console.log(chalk.red(`[FAIL] ${test.id}`));\n for (const failure of failures) {\n console.log(chalk.red(` - ${failure}`));\n }\n const tuningHints = deriveTuningHints(failures, scenarioRun.runLog);\n if (tuningHints.length > 0) {\n console.log(chalk.yellow(\" tuning hints:\"));\n for (const hint of tuningHints) {\n console.log(chalk.yellow(` - ${hint}`));\n }\n }\n }\n\n reportText = buildEvalArtifactReport(\n scenarioRun.createdTaskId,\n test.id,\n scenarioRun.artifactDir,\n options\n );\n\n const artifactDir = writeHarnessArtifacts({\n kind: \"evals\",\n caseId: test.id,\n query: testQuery,\n taskId: scenarioRun.createdTaskId ?? undefined,\n artifactDir: scenarioRun.artifactDir,\n runLog: scenarioRun.runLog,\n finalAnswerText: scenarioRun.finalAnswerText,\n reportText,\n result: {\n id: test.id,\n applicable: applicability.ok,\n passed: failures.length === 0,\n failures,\n likelyFailureKind: inferLikelyFailureKind(test, failures, scenarioRun.runtimeError),\n },\n outputFiles: scenarioRun.outputFiles,\n });\n recordEvalOutcome(outcomesById, test.id, {\n kind: failures.length === 0 ? \"passed\" : \"failed\",\n applicable: true,\n failures,\n artifactDir,\n });\n console.log(chalk.dim(` artifacts: ${artifactDir}`));\n }\n }\n } catch (err) {\n batchRunError = err instanceof Error ? err : new Error(String(err));\n } finally {\n if (previousSuppress === undefined) {\n delete process.env[SUPPRESS_FINAL_CONTEXT_ENV];\n } else {\n process.env[SUPPRESS_FINAL_CONTEXT_ENV] = previousSuppress;\n }\n }\n\n const durationSec = ((Date.now() - startedAt) / 1000).toFixed(1);\n const summary = buildEvalBatchSummary(outcomesById);\n assertEvalSummaryInvariant(summary);\n const batchSummaryArtifactDir = createHarnessArtifactDir(\"evals\", \"batch-summary\");\n const batchSummaryArtifact = writeEvalBatchSummaryArtifact(batchSummaryArtifactDir, {\n selectedEvalIds: suiteFilteredEvals.map((test) => test.id),\n summary,\n outcomesById,\n durationSec,\n });\n const color = summary.failed === 0 && summary.incomplete === 0 ? chalk.green : chalk.yellow;\n console.log(\n color(formatEvalSummaryLine(summary, durationSec))\n );\n console.log(chalk.dim(` batch summary: ${batchSummaryArtifact}`));\n if (batchRunError) {\n throw batchRunError;\n }\n}\n\nfunction requireRunLogDir(): string {\n const idx = RUN_LOG_PATH.lastIndexOf(\"/\");\n if (idx <= 0) return \".\";\n return RUN_LOG_PATH.slice(0, idx);\n}\n"]}
@@ -1,6 +1,13 @@
1
- // commands/factory.ts
1
+ /**
2
+ * Registers the public CLI commands for SCAI.
3
+ *
4
+ * Why this file exists:
5
+ * - it keeps the top-level command tree in one place
6
+ * - task and DB commands need simple wiring into built script entrypoints
7
+ * - command descriptions here should match the real CLI behavior
8
+ * - shell-only runtime entrypoints may need matching CLI commands for debugging
9
+ */
2
10
  import { Command } from 'commander';
3
- import { bootstrap } from '../modelSetup.js';
4
11
  import { runIndexCommand } from './IndexCmd.js';
5
12
  import { resetDatabase } from './ResetDbCmd.js';
6
13
  import { suggestCommitMessage } from './CommitSuggesterCmd.js';
@@ -8,7 +15,7 @@ import { reviewPullRequestCmd } from './ReviewCmd.js';
8
15
  import { checkGit } from './GitCmd.js';
9
16
  import { promptForToken } from '../github/token.js';
10
17
  import { validateGitHubTokenAgainstRepo } from '../github/githubAuthCheck.js';
11
- import { runInteractiveSwitch, runSwitchCommand, statusIndex } from './SwitchCmd.js';
18
+ import { runInteractiveSwitch, runSwitchCommand } from './SwitchCmd.js';
12
19
  import { runInteractiveDelete } from './DeleteIndex.js';
13
20
  import { startDaemon, stopDaemon, restartDaemon, statusDaemon, unlockConfig, showLogs } from './DaemonCmd.js';
14
21
  import { Config } from '../config.js';
@@ -20,52 +27,138 @@ import { runFindCommand } from './FindCmd.js';
20
27
  import { runBackupCommand } from './BackupCmd.js';
21
28
  import { updateContext } from '../context.js';
22
29
  import { createRequire } from 'module';
23
- import { runTasksCommand } from './TasksCmd.js';
30
+ import { resumeTaskCommand, runTasksCommand, showCurrentContextCommand, showTaskCommand, taskPathCommand } from './TasksCmd.js';
31
+ import { registerEvalCommands } from './evalCommands.js';
32
+ import { isDevCommandsEnabled } from './commandVisibility.js';
24
33
  import { getRepoKeyForPath } from '../utils/contentUtils.js';
25
34
  import { runQueryWithDaemonControl } from '../utils/runQueryWithDaemonControl.js';
35
+ import { registerDevCliCommands } from '../testing/registerDevCliCommands.js';
36
+ import { resolveCanonicalRepoIdentity } from '../utils/repoIdentity.js';
37
+ import { clearCurrentAgentTask } from '../agent/persistence/index.js';
38
+ import { getDbForRepo } from '../db/client.js';
39
+ import { restartModel, statusModel } from './ModelCmd.js';
40
+ import { unloadOllamaModelIfRunning } from '../utils/ollamaService.js';
41
+ import { ensureRegisteredRepoForCurrentDir, runSetupCommand } from '../setup/setupOwner.js';
42
+ import { showIndexStatusCommand, showStatusCommand } from './StatusCmd.js';
26
43
  const require = createRequire(import.meta.url);
27
44
  const { version } = require('../../package.json');
45
+ const enableDevTestCommands = isDevCommandsEnabled();
46
+ function registerCommitCommand(target) {
47
+ target
48
+ .command('commit')
49
+ .description('Suggest a commit message from staged changes')
50
+ .action(async () => {
51
+ await withContext(async () => {
52
+ await suggestCommitMessage();
53
+ });
54
+ });
55
+ }
28
56
  export async function withContext(action) {
29
- const ok = await updateContext();
30
- if (!ok)
31
- return; // or process.exit(1)
32
- await action();
57
+ try {
58
+ const ok = await updateContext();
59
+ if (!ok)
60
+ return;
61
+ await action();
62
+ }
63
+ catch (err) {
64
+ console.error(err instanceof Error ? err.message : err);
65
+ }
66
+ }
67
+ export async function withRegisteredRepo(action) {
68
+ try {
69
+ ensureRegisteredRepoForCurrentDir();
70
+ await action();
71
+ }
72
+ catch (err) {
73
+ console.error(err instanceof Error ? err.message : err);
74
+ }
33
75
  }
34
76
  export function createProgram() {
35
77
  const cmd = new Command('scai');
36
78
  cmd.version(version, '-v, --version', 'output the current version');
37
79
  // ---------------- Init commands ----------------
80
+ const runSetup = async () => {
81
+ await runSetupCommand();
82
+ };
83
+ cmd
84
+ .command('setup')
85
+ .description('Set up the current repository and local model runtime')
86
+ .action(runSetup);
38
87
  cmd
39
88
  .command('init')
40
- .description('Initialize the model and download required models')
89
+ .description('Alias for `scai setup`')
90
+ .action(runSetup);
91
+ cmd
92
+ .command('status')
93
+ .description('Show read-only readiness status for the current repository')
41
94
  .action(async () => {
42
- await bootstrap();
43
- console.log('✅ Model initialization completed!');
95
+ await showStatusCommand();
44
96
  });
45
97
  cmd
46
98
  .command("tasks")
47
99
  .description("List and inspect collaboration tasks")
48
100
  .action(runTasksCommand);
49
- // ---------------- Git commands ----------------
50
- const git = cmd.command('git').description('Git utilities');
51
- git
52
- .command('review')
53
- .description('Review an open pull request using AI')
54
- .option('-a, --all', 'Show all PRs requiring a review', false)
55
- .action(async (opts) => {
101
+ const task = cmd.command("task").description("Task lifecycle commands");
102
+ task
103
+ .command("resume <id> [question...]")
104
+ .description("Resume a saved task")
105
+ .action(async (id, parts) => {
56
106
  await withContext(async () => {
57
- await reviewPullRequestCmd('main', opts.all);
107
+ await resumeTaskCommand(Number(id), parts?.join(" "));
58
108
  });
59
109
  });
60
- git
61
- .command('commit')
62
- .description('Suggest a commit message from staged changes')
63
- .option('-l, --changelog', 'Generate and optionally stage a changelog entry')
64
- .action(async (opts) => {
110
+ task
111
+ .command("show <id>")
112
+ .description("Show details for one task")
113
+ .action(async (id) => {
114
+ await withContext(async () => {
115
+ showTaskCommand(Number(id));
116
+ });
117
+ });
118
+ task
119
+ .command("path <id>")
120
+ .description("Print the effective execution path for one task")
121
+ .action(async (id) => {
122
+ await withContext(async () => {
123
+ taskPathCommand(Number(id));
124
+ });
125
+ });
126
+ cmd
127
+ .command("new-context")
128
+ .description("Clear the current resumable context for the active repo")
129
+ .action(async () => {
130
+ await withContext(async () => {
131
+ clearCurrentAgentTask(getDbForRepo());
132
+ console.log("✅ Cleared current task context.");
133
+ });
134
+ });
135
+ cmd
136
+ .command("context")
137
+ .description("Show the current bound task context for the active repo")
138
+ .action(async () => {
65
139
  await withContext(async () => {
66
- await suggestCommitMessage(opts);
140
+ showCurrentContextCommand();
67
141
  });
68
142
  });
143
+ if (enableDevTestCommands) {
144
+ registerEvalCommands(cmd, runQueryWithDaemonControl);
145
+ registerDevCliCommands(cmd, runQueryWithDaemonControl);
146
+ }
147
+ registerCommitCommand(cmd);
148
+ // ---------------- Git commands ----------------
149
+ const git = cmd.command('git').description('Git utilities');
150
+ if (enableDevTestCommands) {
151
+ git
152
+ .command('review')
153
+ .description('Review an open pull request using AI')
154
+ .option('-a, --all', 'Show all PRs requiring a review', false)
155
+ .action(async (opts) => {
156
+ await withContext(async () => {
157
+ await reviewPullRequestCmd('main', opts.all);
158
+ });
159
+ });
160
+ }
161
+ registerCommitCommand(git);
69
162
  git
70
163
  .command('check')
71
164
  .description('Check Git working directory and branch status')
@@ -118,15 +211,42 @@ export function createProgram() {
118
211
  .option('-g, --global', 'Set globally instead of repo')
119
212
  .action(async (model, opts) => {
120
213
  await withContext(async () => {
214
+ const previousModel = Config.getModel();
121
215
  Config.setModel(model, opts.global ? 'global' : 'repo');
216
+ const nextModel = Config.getModel();
217
+ // Drop the old Ollama model only when the effective model changed.
218
+ if (previousModel && previousModel !== nextModel) {
219
+ const unloadResult = await unloadOllamaModelIfRunning(previousModel);
220
+ if (unloadResult.unloaded) {
221
+ console.log(`🧹 Unloaded previous Ollama model: ${previousModel}`);
222
+ }
223
+ else if (!unloadResult.ok) {
224
+ console.log(`⚠️ Could not unload previous Ollama model '${previousModel}': ${unloadResult.detail}`);
225
+ }
226
+ }
122
227
  Config.show();
123
228
  });
124
229
  });
125
230
  config
126
- .command('set-lang <lang>')
127
- .description('Set programming language')
128
- .action(async (lang) => {
129
- await withContext(async () => { Config.setLanguage(lang); Config.show(); });
231
+ .command('dev-output <mode>')
232
+ .description('Enable or disable developer debug output in user logs')
233
+ .action(async (mode) => {
234
+ await withContext(async () => {
235
+ const normalizedMode = mode.trim().toLowerCase();
236
+ const enabledByMode = {
237
+ on: true,
238
+ off: false,
239
+ true: true,
240
+ false: false,
241
+ };
242
+ if (!(normalizedMode in enabledByMode)) {
243
+ throw new Error("dev-output mode must be 'on', 'off', 'true', or 'false'");
244
+ }
245
+ const updated = Config.setDevOutput(enabledByMode[normalizedMode]);
246
+ if (!updated)
247
+ return;
248
+ console.log(`✅ Effective dev output: ${Config.getDevOutput() ? "on" : "off"}`);
249
+ });
130
250
  });
131
251
  config
132
252
  .command('show')
@@ -170,7 +290,7 @@ export function createProgram() {
170
290
  .action(async () => await withContext(runIndexCommand));
171
291
  index
172
292
  .command('set [dir]')
173
- .description('Set index directory')
293
+ .description('Register a repository and make it active')
174
294
  .action(async (dir = process.cwd()) => {
175
295
  await Config.setIndexDir(dir);
176
296
  Config.show();
@@ -180,13 +300,13 @@ export function createProgram() {
180
300
  .description('Switch active repo to the one for the current directory')
181
301
  .action(async () => {
182
302
  const config = Config.getRaw();
183
- const cwd = process.cwd();
303
+ const cwd = resolveCanonicalRepoIdentity(process.cwd()).repoRootPath;
184
304
  const repoKey = getRepoKeyForPath(cwd, config);
185
305
  if (!repoKey) {
186
306
  console.log(`❌ This directory is not an indexed repository.`);
187
307
  console.log(``);
188
308
  console.log(`• To see indexed repos: scai index list`);
189
- console.log(`• To index this repo: scai index set`);
309
+ console.log(`• To set up this repo: scai setup`);
190
310
  process.exit(1);
191
311
  }
192
312
  await withContext(async () => {
@@ -195,9 +315,9 @@ export function createProgram() {
195
315
  });
196
316
  index
197
317
  .command('status')
198
- .description('Show active indexed repository')
318
+ .description('Show active repository and indexing status')
199
319
  .action(async () => {
200
- await statusIndex();
320
+ await showIndexStatusCommand();
201
321
  });
202
322
  index
203
323
  .command('list')
@@ -213,7 +333,7 @@ export function createProgram() {
213
333
  const db = cmd.command('db').description('Database operations');
214
334
  db
215
335
  .command('check')
216
- .description('Run dbcheck script')
336
+ .description('Run DB health checks')
217
337
  .action(async () => {
218
338
  await withContext(async () => {
219
339
  const __filename = fileURLToPath(import.meta.url);
@@ -227,10 +347,26 @@ export function createProgram() {
227
347
  }
228
348
  });
229
349
  });
350
+ db
351
+ .command('overview')
352
+ .description('Show a readable DB overview')
353
+ .action(async () => {
354
+ await withContext(async () => {
355
+ const __filename = fileURLToPath(import.meta.url);
356
+ const __dirname = dirname(__filename);
357
+ const scriptPath = resolve(__dirname, '../..', 'dist/scripts', 'dboverview.js');
358
+ try {
359
+ execSync(`node "${scriptPath}"`, { stdio: 'inherit' });
360
+ }
361
+ catch (err) {
362
+ console.error('❌ DB overview failed:', err instanceof Error ? err.message : err);
363
+ }
364
+ });
365
+ });
230
366
  db
231
367
  .command('reset')
232
- .description('Reset SQLite database')
233
- .action(async () => await withContext(resetDatabase));
368
+ .description('Reset SQLite database and rebuild local index state')
369
+ .action(async () => await withRegisteredRepo(resetDatabase));
234
370
  db
235
371
  .command('inspect <filepath>')
236
372
  .description('Inspect a file in the index')
@@ -245,11 +381,43 @@ export function createProgram() {
245
381
  daemon.command('logs').option('-n, --lines <n>', 'Last N log lines', '20')
246
382
  .description('Show daemon logs')
247
383
  .action(async (opts) => withContext(() => showLogs(parseInt(opts.lines, 10))));
384
+ // ---------------- Model ----------------
385
+ const model = cmd.command('model').description('Ollama model server management');
386
+ model.command('status').description('Show Ollama server status').action(async () => statusModel());
387
+ model.command('restart').description('Restart the Ollama server').action(async () => restartModel());
248
388
  // ---------------- Backup / Find / Ask ----------------
249
389
  cmd.command('backup').description('Backup .scai folder').action(async () => await withContext(runBackupCommand));
250
390
  cmd.command('find <query>').description('Search indexed files').action(async (q) => await withContext(() => runFindCommand(q)));
251
- cmd.command('ask [question...]').description('Ask a question').action(async (parts) => {
391
+ if (enableDevTestCommands) {
392
+ cmd.command('plan [query...]').description('Create a plan with the new agent without starting execution').action(async (parts) => {
393
+ const query = (parts?.join(' ') ?? '').trim();
394
+ if (!query) {
395
+ console.error('❌ No planning query provided.\n👉 Usage: scai plan "your question"');
396
+ return;
397
+ }
398
+ await runQueryWithDaemonControl(query, {
399
+ continueCurrentTask: false,
400
+ bindAsCurrentTask: false,
401
+ runtime: "agent",
402
+ planOnly: true,
403
+ });
404
+ });
405
+ }
406
+ cmd.command('agent [question...]').description('Run the new simple agent runtime').action(async (parts) => {
407
+ const query = (parts?.join(' ') ?? '').trim();
408
+ if (!query) {
409
+ console.error('❌ No agent query provided.\n👉 Usage: scai agent "your question"');
410
+ return;
411
+ }
412
+ await runQueryWithDaemonControl(query, {
413
+ continueCurrentTask: false,
414
+ bindAsCurrentTask: false,
415
+ runtime: "agent",
416
+ });
417
+ });
418
+ cmd.command('ask [question...]').description('Ask a question with the new default agent runtime').action(async (parts) => {
252
419
  await runQueryWithDaemonControl(parts?.join(' '));
253
420
  });
254
421
  return cmd;
255
422
  }
423
+ //# sourceMappingURL=factory.js.map