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,506 @@
1
+ /**
2
+ * Covers shared eval command actions and shell adapters.
3
+ *
4
+ * Why this file exists:
5
+ * - `/evals` should default to the fast converted new-agent suite
6
+ * - `/evals-transform` should isolate the slower transform suite
7
+ * - `/eval-run` and `/eval-list` should stay aligned with the trimmed eval registry
8
+ */
9
+ import { beforeEach, describe, expect, it, vi } from "vitest";
10
+ const mockState = vi.hoisted(() => ({
11
+ currentTaskId: undefined,
12
+ runLog: "",
13
+ files: {},
14
+ artifactCalls: [],
15
+ createHarnessArtifactDir: vi.fn((kind, caseId) => `/tmp/${kind}/${caseId}`),
16
+ startLlmTraceSession: vi.fn(),
17
+ stopLlmTraceSession: vi.fn(),
18
+ }));
19
+ vi.mock("fs", () => {
20
+ const normalize = (value) => String(value);
21
+ const writeFileSync = vi.fn((_path, data, options) => {
22
+ const filePath = normalize(_path);
23
+ mockState.files[filePath] = String(data);
24
+ if (options?.flag === "w" && filePath === "/tmp/scai-eval-run.log") {
25
+ mockState.runLog = String(data);
26
+ }
27
+ });
28
+ const appendFileSync = vi.fn((_path, data) => {
29
+ const filePath = normalize(_path);
30
+ const next = (mockState.files[filePath] ?? "") + String(data);
31
+ mockState.files[filePath] = next;
32
+ if (filePath === "/tmp/scai-eval-run.log") {
33
+ mockState.runLog = next;
34
+ }
35
+ });
36
+ const readFileSync = vi.fn((filePath) => mockState.files[normalize(filePath)] ?? "");
37
+ const existsSync = vi.fn((filePath) => {
38
+ const normalized = normalize(filePath);
39
+ return normalized in mockState.files
40
+ || Object.keys(mockState.files).some((candidate) => candidate.startsWith(`${normalized}/`));
41
+ });
42
+ const mkdirSync = vi.fn();
43
+ return {
44
+ default: { writeFileSync, appendFileSync, readFileSync, existsSync, mkdirSync },
45
+ writeFileSync,
46
+ appendFileSync,
47
+ readFileSync,
48
+ existsSync,
49
+ mkdirSync,
50
+ };
51
+ });
52
+ vi.mock("../constants.js", async (importOriginal) => {
53
+ const actual = await importOriginal();
54
+ return {
55
+ ...actual,
56
+ RUN_LOG_PATH: "/tmp/scai-eval-run.log",
57
+ };
58
+ });
59
+ vi.mock("../commands/EvalReportCmd.js", () => ({
60
+ buildEvalReportMarkdown: vi.fn(() => "report"),
61
+ getLatestTaskId: vi.fn(() => mockState.currentTaskId),
62
+ printEvalReport: vi.fn(),
63
+ runEvalReportCommand: vi.fn(),
64
+ }));
65
+ vi.mock("../testing/harnessArtifacts.js", () => ({
66
+ createHarnessArtifactDir: mockState.createHarnessArtifactDir,
67
+ writeHarnessArtifacts: vi.fn((input) => {
68
+ mockState.artifactCalls.push(input);
69
+ return String(input.artifactDir ?? `/tmp/artifacts/${String(input.caseId)}`);
70
+ }),
71
+ }));
72
+ vi.mock("../testing/llmTraceSession.js", () => ({
73
+ startLlmTraceSession: mockState.startLlmTraceSession,
74
+ stopLlmTraceSession: mockState.stopLlmTraceSession,
75
+ }));
76
+ vi.mock("../utils/repoIdentity.js", () => ({
77
+ resolveCanonicalRepoIdentity: vi.fn(() => ({
78
+ repoRootPath: "/repo",
79
+ executionPath: "/repo",
80
+ currentBranch: "main",
81
+ })),
82
+ }));
83
+ import { buildEvalReportMarkdown } from "../commands/EvalReportCmd.js";
84
+ import { evalQueries, listEvalsCommand, localEvalCases, registerEvalCommands, registerEvalShellCommands, runEvalBatchCommand, runEvalByIdCommand, runEvalSmokeCommand, runEvalTransformBatchCommand, runLocalEvals, } from "../commands/evalCommands.js";
85
+ import { Command } from "commander";
86
+ function getAgentEvalCountForSuite(suite) {
87
+ return localEvalCases.filter((test) => (test.group ?? "main") === "agent" && (test.suite ?? "default") === suite).length;
88
+ }
89
+ describe("eval shell commands", () => {
90
+ beforeEach(() => {
91
+ mockState.currentTaskId = undefined;
92
+ mockState.runLog = "";
93
+ mockState.files = {
94
+ "/repo/playground/test/spatialmap.small.js": "function runBootstrapFlow(context) {}\nrunBootstrapFlow(context)\n",
95
+ "/repo/playground/test/spatialmap.small.extract.js": "function buildProfileToolUrl(profileName, toolPath) { return \"/rest/profile/\" + profileName + \"/tools/\" + toolPath; }\n" +
96
+ "function buildPortalHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/portal\"); }\n" +
97
+ "function buildLayerPanelUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/layer-panel\"); }\n" +
98
+ "function buildSearchPanelUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/search-panel\"); }\n",
99
+ "/repo/playground/test/spatialmap.small.multi.js": "function beginPortalFlow(context) {}\nfunction beginWidgetFlow(context) {}\nfunction beginReadyFlow(context) {}\n",
100
+ "/repo/playground/test/spatialmap.small.multi.extract.js": "function buildProfileToolRequestUrl(profileName, toolPath) { return \"/rest/profile/\" + profileName + \"/tools/\" + toolPath; }\n" +
101
+ "function buildPortalHtmlRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \"html/client/portal\"); }\n" +
102
+ "function buildLayerPanelRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \"html/client/layer-panel\"); }\n" +
103
+ "function buildSearchPanelRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \"html/client/search-panel\"); }\n" +
104
+ "function buildPortalSourceRequestUrl(profileName, sessionId) { return \"/rest/profile/\" + profileName + \"/tools/src/client/portal/\" + sessionId; }\n",
105
+ "/repo/playground/test/spatialmap.medium.js": "document.querySelector(\"body\").insertAdjacentHTML(\"beforeend\", html);\nconst pageBody = document.querySelector(\"body\");\n",
106
+ "/repo/playground/test/spatialmap.medium.extract.js": "function buildProfileToolUrl(profileName, toolPath) { return \"/rest/profile/\" + profileName + \"/tools/\" + toolPath; }\n" +
107
+ "function buildPortalHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/portal\"); }\n" +
108
+ "function buildSidebarHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/sidebar\"); }\n" +
109
+ "function buildSearchHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \"html/client/search\"); }\n" +
110
+ "function buildPortalSourceUrl(profileName, sessionId) { return buildProfileToolUrl(profileName, \"src/client/portal/\" + sessionId); }\n",
111
+ "/repo/playground/test/spatialmap.medium.multi.js": "document.querySelector(\"body\").insertAdjacentHTML(\"beforeend\", html);\nconst pageBody = document.querySelector(\"body\");\n",
112
+ "/repo/playground/test/spatialmap.js": "const sessionId = sessionStorage.getItem(\"spatialmapSessionId\");\n" +
113
+ "sessionId: sessionStorage.getItem(\"spatialmapSessionId\"),\n",
114
+ };
115
+ mockState.artifactCalls = [];
116
+ mockState.createHarnessArtifactDir.mockClear();
117
+ mockState.startLlmTraceSession.mockClear();
118
+ mockState.stopLlmTraceSession.mockClear();
119
+ vi.clearAllMocks();
120
+ vi.spyOn(console, "log").mockImplementation(() => { });
121
+ });
122
+ it("starts eval queries without continuing the current task", async () => {
123
+ const runQuery = vi.fn().mockResolvedValue(undefined);
124
+ await runEvalSmokeCommand(runQuery);
125
+ expect(runQuery).toHaveBeenCalledWith(evalQueries[0], {
126
+ continueCurrentTask: false,
127
+ runtime: "agent",
128
+ });
129
+ });
130
+ it("defaults /evals to the fast new-agent suite", async () => {
131
+ const runQuery = vi.fn().mockImplementation(async () => {
132
+ mockState.currentTaskId = (mockState.currentTaskId ?? 500) + 1;
133
+ mockState.runLog += [
134
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
135
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
136
+ "agentTypes.ts",
137
+ ].join("\n");
138
+ });
139
+ await runEvalBatchCommand(runQuery);
140
+ expect(runQuery).toHaveBeenCalledTimes(getAgentEvalCountForSuite("default"));
141
+ expect(runQuery.mock.calls.every(([, options]) => options?.runtime === "agent")).toBe(true);
142
+ });
143
+ it("runs the slow transform suite only through /evals-transform", async () => {
144
+ const runQuery = vi.fn().mockImplementation(async () => {
145
+ mockState.currentTaskId = (mockState.currentTaskId ?? 600) + 1;
146
+ mockState.files["/repo/playground/test/spatialmap.small.js"] =
147
+ "function bootstrapPortalFlow(context) {}\nbootstrapPortalFlow(context);\n";
148
+ mockState.runLog += [
149
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
150
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
151
+ "playground/test/spatialmap.small.js",
152
+ "action=codeTransform",
153
+ ].join("\n");
154
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
155
+ });
156
+ await runEvalTransformBatchCommand(runQuery);
157
+ expect(runQuery).toHaveBeenCalledTimes(getAgentEvalCountForSuite("transform"));
158
+ expect(runQuery.mock.calls.every(([, options]) => options?.runtime === "agent")).toBe(true);
159
+ });
160
+ it("keeps the transform suite populated with the expected spatialmap eval ids", () => {
161
+ const transformIds = localEvalCases
162
+ .filter((test) => (test.group ?? "main") === "agent" && (test.suite ?? "default") === "transform")
163
+ .map((test) => test.id);
164
+ expect(transformIds).toEqual(expect.arrayContaining([
165
+ "transform_spatialmap_small_rename_run_bootstrap_flow",
166
+ "transform_spatialmap_small_extract_profile_url_helper",
167
+ "transform_spatialmap_small_multi_rename_flow_helpers",
168
+ "transform_spatialmap_small_multi_extract_portal_request_helpers",
169
+ "transform_spatialmap_medium_document_body_cleanup",
170
+ "transform_spatialmap_medium_multi_dom_surface_cleanup",
171
+ "transform_spatialmap_medium_extract_profile_tool_url",
172
+ "transform_spatialmap_large_cache_session_id",
173
+ ]));
174
+ expect(transformIds).toHaveLength(8);
175
+ });
176
+ it("eval-run resolves one converted agent eval directly", async () => {
177
+ const runQuery = vi.fn().mockImplementation(async (query) => {
178
+ mockState.currentTaskId = (mockState.currentTaskId ?? 200) + 1;
179
+ mockState.runLog += [
180
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
181
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
182
+ "EvalReportCmd",
183
+ ].join("\n");
184
+ });
185
+ await runEvalByIdCommand(runQuery, ["search_file_without_extension_exact_target"]);
186
+ expect(runQuery).toHaveBeenCalledTimes(1);
187
+ expect(runQuery).toHaveBeenCalledWith("Explain EvalReportCmd", { continueCurrentTask: false, resumeTaskId: undefined, bindAsCurrentTask: undefined, runtime: "agent" });
188
+ expect(mockState.artifactCalls).toHaveLength(1);
189
+ expect(mockState.artifactCalls[0]?.caseId).toBe("search_file_without_extension_exact_target");
190
+ expect(mockState.artifactCalls[0]?.artifactDir).toBe("/tmp/evals/search_file_without_extension_exact_target");
191
+ });
192
+ it("writes report text for converted agent eval artifacts even without per-eval console reporting", async () => {
193
+ const runQuery = vi.fn().mockImplementation(async (query) => {
194
+ mockState.currentTaskId = (mockState.currentTaskId ?? 300) + 1;
195
+ mockState.runLog += [
196
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
197
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
198
+ "EvalReportCmd",
199
+ ].join("\n");
200
+ });
201
+ await runLocalEvals(runQuery, {
202
+ includeIds: ["search_file_without_extension_exact_target"],
203
+ });
204
+ expect(buildEvalReportMarkdown).toHaveBeenCalled();
205
+ expect(buildEvalReportMarkdown).toHaveBeenCalledWith(301, expect.any(Object));
206
+ expect(mockState.artifactCalls).toHaveLength(1);
207
+ expect(mockState.artifactCalls[0]?.reportText).toBe("report");
208
+ });
209
+ it("eval-list omits deleted legacy-only eval ids", async () => {
210
+ const logSpy = vi.spyOn(console, "log").mockImplementation(() => { });
211
+ await listEvalsCommand();
212
+ const output = logSpy.mock.calls.map((args) => args.join(" ")).join("\n");
213
+ expect(output).toContain("search_file_without_extension_exact_target");
214
+ expect(output).toContain("suite: default");
215
+ expect(output).toContain("suite: transform");
216
+ expect(output).not.toContain("multifile_no_early_complete_regression");
217
+ expect(output).not.toContain("resume_continuity_answer_now");
218
+ logSpy.mockRestore();
219
+ });
220
+ it("keeps the refreshed stale-default eval checks aligned with the new agent", () => {
221
+ const exactTargetEval = localEvalCases.find((test) => test.id === "search_file_with_extension_exact_target");
222
+ const sqliteEval = localEvalCases.find((test) => test.id === "verify_pipeline_sqlite_query");
223
+ const testEntrypointsEval = localEvalCases.find((test) => test.id === "final_answer_for_test_entrypoints");
224
+ const naturalLanguageFolderEval = localEvalCases.find((test) => test.id === "search_folder_natural_language_exact_target");
225
+ expect(exactTargetEval?.query).toBe("Explain loopReview.ts");
226
+ expect(exactTargetEval?.checks.mustContainAnswer).toEqual(["loopReview.ts"]);
227
+ expect(sqliteEval?.checks.mustContainAnswer).toEqual([
228
+ "db/fileIndex.ts",
229
+ "db/client.ts",
230
+ "SQLite",
231
+ ]);
232
+ expect(testEntrypointsEval?.checks.mustContainAnswer).toEqual([
233
+ "vitest",
234
+ "package.json",
235
+ "vitest.config.ts",
236
+ ]);
237
+ expect(naturalLanguageFolderEval?.checks.mustContain).toEqual([
238
+ "artifact final-answer",
239
+ ]);
240
+ });
241
+ it("eval-run still resolves one transform eval directly", async () => {
242
+ const runQuery = vi.fn().mockImplementation(async () => {
243
+ mockState.currentTaskId = (mockState.currentTaskId ?? 700) + 1;
244
+ mockState.files["/repo/playground/test/spatialmap.small.js"] =
245
+ "function bootstrapPortalFlow(context) {}\nbootstrapPortalFlow(context);\n";
246
+ mockState.runLog += [
247
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
248
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
249
+ "playground/test/spatialmap.small.js",
250
+ "action=codeTransform",
251
+ ].join("\n");
252
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
253
+ });
254
+ await runEvalByIdCommand(runQuery, ["transform_spatialmap_small_rename_run_bootstrap_flow"]);
255
+ expect(runQuery).toHaveBeenCalledTimes(1);
256
+ expect(runQuery).toHaveBeenCalledWith("In playground/test/spatialmap.small.js, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.", { continueCurrentTask: false, resumeTaskId: undefined, bindAsCurrentTask: undefined, runtime: "agent" });
257
+ expect(mockState.artifactCalls[0]?.caseId).toBe("transform_spatialmap_small_rename_run_bootstrap_flow");
258
+ });
259
+ it("captures the direct committed target file in transform eval artifacts", async () => {
260
+ const runQuery = vi.fn().mockImplementation(async () => {
261
+ mockState.currentTaskId = 801;
262
+ mockState.files["/repo/playground/test/spatialmap.small.js"] =
263
+ "function bootstrapPortalFlow(context) {}\nbootstrapPortalFlow(context);\n";
264
+ mockState.runLog = [
265
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
266
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
267
+ "playground/test/spatialmap.small.js",
268
+ "action=codeTransform",
269
+ ].join("\n");
270
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
271
+ });
272
+ await runLocalEvals(runQuery, {
273
+ includeIds: ["transform_spatialmap_small_rename_run_bootstrap_flow"],
274
+ });
275
+ expect(mockState.artifactCalls).toHaveLength(1);
276
+ expect((mockState.artifactCalls[0]?.outputFiles)[0]?.path)
277
+ .toBe("playground/test/spatialmap.small.js");
278
+ });
279
+ it("fails a transform eval when the output file keeps the old symbol", async () => {
280
+ const runQuery = vi.fn().mockImplementation(async () => {
281
+ mockState.currentTaskId = 950;
282
+ mockState.runLog = [
283
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
284
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
285
+ "playground/test/spatialmap.small.js",
286
+ "action=codeTransform",
287
+ ].join("\n");
288
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
289
+ });
290
+ await runLocalEvals(runQuery, {
291
+ includeIds: ["transform_spatialmap_small_rename_run_bootstrap_flow"],
292
+ });
293
+ const result = mockState.artifactCalls[0]?.result;
294
+ expect(result.failures?.some((failure) => failure.includes("forbidden token"))).toBe(true);
295
+ });
296
+ it("fails a transform eval when the direct target file is not valid JavaScript", async () => {
297
+ const runQuery = vi.fn().mockImplementation(async () => {
298
+ mockState.currentTaskId = 975;
299
+ mockState.files["/repo/playground/test/spatialmap.small.js"] =
300
+ "function bootstrapPortalFlow(context) {\n";
301
+ mockState.runLog = [
302
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
303
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
304
+ "playground/test/spatialmap.small.js",
305
+ "action=codeTransform",
306
+ ].join("\n");
307
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
308
+ });
309
+ await runLocalEvals(runQuery, {
310
+ includeIds: ["transform_spatialmap_small_rename_run_bootstrap_flow"],
311
+ });
312
+ const result = mockState.artifactCalls[0]?.result;
313
+ expect(result.failures?.some((failure) => failure.includes("syntax check failed"))).toBe(true);
314
+ });
315
+ it("points transform eval queries at direct committed fixtures with one unique target file per eval", () => {
316
+ const transformCases = localEvalCases
317
+ .filter((test) => (test.group ?? "main") === "agent" && (test.suite ?? "default") === "transform")
318
+ .map((test) => ({
319
+ query: test.query ?? "",
320
+ path: test.checks.fileMustContain?.[0]?.path ?? test.syntaxCheckPaths?.[0] ?? "",
321
+ }));
322
+ expect(transformCases.every((test) => !test.query.includes("playground/test/eval-work/"))).toBe(true);
323
+ expect(new Set(transformCases.map((test) => test.path)).size).toBe(transformCases.length);
324
+ });
325
+ it("accepts helper-call forms that omit the literal /tools prefix in extraction eval definitions", () => {
326
+ const smallExtractEval = localEvalCases.find((test) => test.id === "transform_spatialmap_small_extract_profile_url_helper");
327
+ const mediumExtractEval = localEvalCases.find((test) => test.id === "transform_spatialmap_medium_extract_profile_tool_url");
328
+ expect(smallExtractEval?.checks.fileMustContainAnyOf).toEqual(expect.arrayContaining([
329
+ expect.objectContaining({
330
+ anyOf: expect.arrayContaining([
331
+ "return buildProfileToolUrl(profileName, \"html/client/portal\")",
332
+ "return buildProfileToolUrl(profileName) + \"/html/client/portal\"",
333
+ ]),
334
+ }),
335
+ expect.objectContaining({
336
+ anyOf: expect.arrayContaining([
337
+ "return buildProfileToolUrl(profileName, \"html/client/layer-panel\")",
338
+ "return buildProfileToolUrl(profileName) + \"/html/client/layer-panel\"",
339
+ ]),
340
+ }),
341
+ expect.objectContaining({
342
+ anyOf: expect.arrayContaining([
343
+ "return buildProfileToolUrl(profileName, \"html/client/search-panel\")",
344
+ "return buildProfileToolUrl(profileName) + \"/html/client/search-panel\"",
345
+ ]),
346
+ }),
347
+ ]));
348
+ expect(mediumExtractEval?.checks.fileMustContain?.[0]?.tokens).toEqual(expect.arrayContaining([
349
+ "return buildProfileToolUrl(profileName, \"html/client/portal\")",
350
+ "return buildProfileToolUrl(profileName, \"html/client/sidebar\")",
351
+ "return buildProfileToolUrl(profileName, \"html/client/search\")",
352
+ "return buildProfileToolUrl(profileName, \"src/client/portal/\" + sessionId)",
353
+ ]));
354
+ });
355
+ it("does not require the small multi extraction eval to rewrite the portal source request helper", () => {
356
+ const smallMultiExtractEval = localEvalCases.find((test) => test.id === "transform_spatialmap_small_multi_extract_portal_request_helpers");
357
+ const fileMustContain = smallMultiExtractEval?.checks.fileMustContain?.[0]?.tokens ?? [];
358
+ const fileMustNotContain = smallMultiExtractEval?.checks.fileMustNotContain?.[0]?.tokens ?? [];
359
+ const query = smallMultiExtractEval?.query ?? "";
360
+ expect(query).not.toContain("buildPortalSourceRequestUrl");
361
+ expect(fileMustContain.some((token) => token.includes("portal/\" + sessionId"))).toBe(false);
362
+ expect(fileMustNotContain.some((token) => token.includes("buildPortalSourceRequestUrl"))).toBe(false);
363
+ });
364
+ it("keeps the active transform queries copyable with direct committed target paths", () => {
365
+ const transformQueries = localEvalCases
366
+ .filter((test) => (test.group ?? "main") === "agent" && (test.suite ?? "default") === "transform")
367
+ .map((test) => test.query ?? "");
368
+ expect(transformQueries).toEqual(expect.arrayContaining([
369
+ "In playground/test/spatialmap.small.js, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.",
370
+ "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.",
371
+ "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.",
372
+ ]));
373
+ });
374
+ it("labels extraction assertion misses with a likely failure kind in saved eval results", async () => {
375
+ const runQuery = vi.fn().mockImplementation(async () => {
376
+ mockState.currentTaskId = 990;
377
+ mockState.runLog = [
378
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
379
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
380
+ "playground/test/spatialmap.medium.extract.js",
381
+ "action=codeTransform",
382
+ ].join("\n");
383
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
384
+ mockState.files["/repo/playground/test/spatialmap.medium.extract.js"] = [
385
+ "function buildProfileToolUrl(profileName) {",
386
+ " return \"/rest/profile/\" + profileName + \"/tools\";",
387
+ "}",
388
+ "function buildPortalHtmlUrl(profileName) {",
389
+ " return buildProfileToolUrl(profileName) + \"/html/client/portal\";",
390
+ "}",
391
+ ].join("\n");
392
+ });
393
+ await runLocalEvals(runQuery, {
394
+ includeIds: ["transform_spatialmap_medium_extract_profile_tool_url"],
395
+ });
396
+ const result = mockState.artifactCalls[0]?.result;
397
+ expect(result.failures?.length).toBeGreaterThan(0);
398
+ expect(result.likelyFailureKind).toBe("harness-strictness");
399
+ });
400
+ it("accepts the small extract eval when the helper is used through string concatenation", async () => {
401
+ const runQuery = vi.fn().mockImplementation(async () => {
402
+ mockState.currentTaskId = 991;
403
+ mockState.runLog = [
404
+ `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,
405
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
406
+ "playground/test/spatialmap.small.extract.js",
407
+ "action=codeTransform",
408
+ ].join("\n");
409
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
410
+ mockState.files["/repo/playground/test/spatialmap.small.extract.js"] = [
411
+ "function buildProfileToolUrl(profileName) {",
412
+ " return \"/rest/profile/\" + profileName + \"/tools\";",
413
+ "}",
414
+ "function buildPortalHtmlUrl(profileName) {",
415
+ " return buildProfileToolUrl(profileName) + \"/html/client/portal\";",
416
+ "}",
417
+ "function buildLayerPanelUrl(profileName) {",
418
+ " return buildProfileToolUrl(profileName) + \"/html/client/layer-panel\";",
419
+ "}",
420
+ "function buildSearchPanelUrl(profileName) {",
421
+ " return buildProfileToolUrl(profileName) + \"/html/client/search-panel\";",
422
+ "}",
423
+ ].join("\n");
424
+ });
425
+ await runLocalEvals(runQuery, {
426
+ includeIds: ["transform_spatialmap_small_extract_profile_url_helper"],
427
+ });
428
+ const result = mockState.artifactCalls[0]?.result;
429
+ expect(result.passed).toBe(true);
430
+ expect(result.failures).toEqual([]);
431
+ });
432
+ it("matches eval log tokens after stripping ANSI color codes", async () => {
433
+ const runQuery = vi.fn().mockImplementation(async (query) => {
434
+ mockState.currentTaskId = (mockState.currentTaskId ?? 400) + 1;
435
+ mockState.runLog += [
436
+ `[2026-05-04 07:36:54 +02:00] [agent] [\x1b[33mtask:created\x1b[39m] status=active run started`,
437
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
438
+ "agentTypes.ts",
439
+ ].join("\n");
440
+ });
441
+ await runLocalEvals(runQuery, {
442
+ includeIds: ["agent_read_and_answer_simple_target"],
443
+ });
444
+ expect(mockState.artifactCalls).toHaveLength(1);
445
+ expect(mockState.artifactCalls[0]?.caseId).toBe("agent_read_and_answer_simple_target");
446
+ expect(mockState.artifactCalls[0]?.reportText).toBe("report");
447
+ });
448
+ it("does not attach a stale report task when the scenario did not create a new task id", async () => {
449
+ mockState.currentTaskId = 1547;
450
+ const runQuery = vi.fn().mockImplementation(async (_query) => {
451
+ mockState.currentTaskId = 1547;
452
+ mockState.runLog += [
453
+ `[2026-05-04 07:36:54 +02:00] [agent] [\x1b[33mtask:created\x1b[39m] status=active run started`,
454
+ `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,
455
+ "agentTypes.ts",
456
+ ].join("\n");
457
+ });
458
+ await runLocalEvals(runQuery, {
459
+ includeIds: ["agent_read_and_answer_simple_target"],
460
+ });
461
+ expect(buildEvalReportMarkdown).not.toHaveBeenCalled();
462
+ expect(mockState.artifactCalls).toHaveLength(1);
463
+ expect(mockState.artifactCalls[0]?.reportText).toBeUndefined();
464
+ });
465
+ it("marks an eval incomplete when the run did not create its own task or owned run log", async () => {
466
+ mockState.currentTaskId = 2200;
467
+ mockState.runLog = [
468
+ `[2026-05-04 07:36:54 +02:00] [shared] [legacy:output] SearchOrchestrator output`,
469
+ `{"stepName":"SearchOrchestrator","type":"output","content":{"route":"db"}}`,
470
+ ].join("\n");
471
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
472
+ const runQuery = vi.fn().mockImplementation(async () => {
473
+ mockState.currentTaskId = 2200;
474
+ mockState.files["/tmp/scai-eval-run.log"] = mockState.runLog;
475
+ });
476
+ await runLocalEvals(runQuery, {
477
+ includeIds: ["search_folder_natural_language_exact_target"],
478
+ });
479
+ const result = mockState.artifactCalls[0]?.result;
480
+ expect(result.outcome).toBe("incomplete");
481
+ expect(result.failures?.[0]).toContain("could not isolate the run log or created task");
482
+ });
483
+ it("keeps shell adapters wired to the shared eval actions", async () => {
484
+ const customCommands = {};
485
+ const runQuery = vi.fn().mockResolvedValue(undefined);
486
+ registerEvalShellCommands(customCommands, runQuery);
487
+ await customCommands.eval();
488
+ await customCommands["eval-random"]();
489
+ expect(runQuery).toHaveBeenCalledTimes(2);
490
+ });
491
+ it("registers eval CLI commands alongside eval-report", async () => {
492
+ const cmd = new Command();
493
+ const runQuery = vi.fn().mockResolvedValue(undefined);
494
+ registerEvalCommands(cmd, runQuery);
495
+ expect(cmd.commands.map((command) => command.name())).toEqual(expect.arrayContaining([
496
+ "eval",
497
+ "eval-random",
498
+ "evals",
499
+ "evals-transform",
500
+ "eval-run",
501
+ "eval-list",
502
+ "eval-report",
503
+ ]));
504
+ });
505
+ });
506
+ //# sourceMappingURL=evalCommands.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalCommands.test.js","sourceRoot":"","sources":["../../src/__tests__/evalCommands.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers shared eval command actions and shell adapters.\n *\n * Why this file exists:\n * - `/evals` should default to the fast converted new-agent suite\n * - `/evals-transform` should isolate the slower transform suite\n * - `/eval-run` and `/eval-list` should stay aligned with the trimmed eval registry\n */\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst mockState = vi.hoisted(() => ({\n currentTaskId: undefined as number | undefined,\n runLog: \"\",\n files: {} as Record<string, string>,\n artifactCalls: [] as Array<Record<string, unknown>>,\n createHarnessArtifactDir: vi.fn((kind: string, caseId: string) => `/tmp/${kind}/${caseId}`),\n startLlmTraceSession: vi.fn(),\n stopLlmTraceSession: vi.fn(),\n}));\n\nvi.mock(\"fs\", () => {\n const normalize = (value: string) => String(value);\n const writeFileSync = vi.fn((_path: string, data: string, options?: { flag?: string }) => {\n const filePath = normalize(_path);\n mockState.files[filePath] = String(data);\n if (options?.flag === \"w\" && filePath === \"/tmp/scai-eval-run.log\") {\n mockState.runLog = String(data);\n }\n });\n const appendFileSync = vi.fn((_path: string, data: string) => {\n const filePath = normalize(_path);\n const next = (mockState.files[filePath] ?? \"\") + String(data);\n mockState.files[filePath] = next;\n if (filePath === \"/tmp/scai-eval-run.log\") {\n mockState.runLog = next;\n }\n });\n const readFileSync = vi.fn((filePath: string) => mockState.files[normalize(filePath)] ?? \"\");\n const existsSync = vi.fn((filePath: string) => {\n const normalized = normalize(filePath);\n return normalized in mockState.files\n || Object.keys(mockState.files).some((candidate) => candidate.startsWith(`${normalized}/`));\n });\n const mkdirSync = vi.fn();\n\n return {\n default: { writeFileSync, appendFileSync, readFileSync, existsSync, mkdirSync },\n writeFileSync,\n appendFileSync,\n readFileSync,\n existsSync,\n mkdirSync,\n };\n});\n\nvi.mock(\"../constants.js\", async importOriginal => {\n const actual = await importOriginal<typeof import(\"../constants.js\")>();\n return {\n ...actual,\n RUN_LOG_PATH: \"/tmp/scai-eval-run.log\",\n };\n});\n\nvi.mock(\"../commands/EvalReportCmd.js\", () => ({\n buildEvalReportMarkdown: vi.fn(() => \"report\"),\n getLatestTaskId: vi.fn(() => mockState.currentTaskId),\n printEvalReport: vi.fn(),\n runEvalReportCommand: vi.fn(),\n}));\n\nvi.mock(\"../testing/harnessArtifacts.js\", () => ({\n createHarnessArtifactDir: mockState.createHarnessArtifactDir,\n writeHarnessArtifacts: vi.fn((input: Record<string, unknown>) => {\n mockState.artifactCalls.push(input);\n return String(input.artifactDir ?? `/tmp/artifacts/${String(input.caseId)}`);\n }),\n}));\n\nvi.mock(\"../testing/llmTraceSession.js\", () => ({\n startLlmTraceSession: mockState.startLlmTraceSession,\n stopLlmTraceSession: mockState.stopLlmTraceSession,\n}));\n\nvi.mock(\"../utils/repoIdentity.js\", () => ({\n resolveCanonicalRepoIdentity: vi.fn(() => ({\n repoRootPath: \"/repo\",\n executionPath: \"/repo\",\n currentBranch: \"main\",\n })),\n}));\n\nimport { buildEvalReportMarkdown } from \"../commands/EvalReportCmd.js\";\nimport {\n evalQueries,\n listEvalsCommand,\n localEvalCases,\n registerEvalCommands,\n registerEvalShellCommands,\n runEvalBatchCommand,\n runEvalByIdCommand,\n runEvalRandomCommand,\n runEvalSmokeCommand,\n runEvalTransformBatchCommand,\n runLocalEvals,\n} from \"../commands/evalCommands.js\";\nimport { Command } from \"commander\";\n\nfunction getAgentEvalCountForSuite(suite: \"default\" | \"transform\"): number {\n return localEvalCases.filter((test) => (test.group ?? \"main\") === \"agent\" && (test.suite ?? \"default\") === suite).length;\n}\n\ndescribe(\"eval shell commands\", () => {\n beforeEach(() => {\n mockState.currentTaskId = undefined;\n mockState.runLog = \"\";\n mockState.files = {\n \"/repo/playground/test/spatialmap.small.js\":\n \"function runBootstrapFlow(context) {}\\nrunBootstrapFlow(context)\\n\",\n \"/repo/playground/test/spatialmap.small.extract.js\":\n \"function buildProfileToolUrl(profileName, toolPath) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/\\\" + toolPath; }\\n\" +\n \"function buildPortalHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/portal\\\"); }\\n\" +\n \"function buildLayerPanelUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/layer-panel\\\"); }\\n\" +\n \"function buildSearchPanelUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/search-panel\\\"); }\\n\",\n \"/repo/playground/test/spatialmap.small.multi.js\":\n \"function beginPortalFlow(context) {}\\nfunction beginWidgetFlow(context) {}\\nfunction beginReadyFlow(context) {}\\n\",\n \"/repo/playground/test/spatialmap.small.multi.extract.js\":\n \"function buildProfileToolRequestUrl(profileName, toolPath) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/\\\" + toolPath; }\\n\" +\n \"function buildPortalHtmlRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \\\"html/client/portal\\\"); }\\n\" +\n \"function buildLayerPanelRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \\\"html/client/layer-panel\\\"); }\\n\" +\n \"function buildSearchPanelRequestUrl(profileName) { return buildProfileToolRequestUrl(profileName, \\\"html/client/search-panel\\\"); }\\n\" +\n \"function buildPortalSourceRequestUrl(profileName, sessionId) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/src/client/portal/\\\" + sessionId; }\\n\",\n \"/repo/playground/test/spatialmap.medium.js\":\n \"document.querySelector(\\\"body\\\").insertAdjacentHTML(\\\"beforeend\\\", html);\\nconst pageBody = document.querySelector(\\\"body\\\");\\n\",\n \"/repo/playground/test/spatialmap.medium.extract.js\":\n \"function buildProfileToolUrl(profileName, toolPath) { return \\\"/rest/profile/\\\" + profileName + \\\"/tools/\\\" + toolPath; }\\n\" +\n \"function buildPortalHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/portal\\\"); }\\n\" +\n \"function buildSidebarHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/sidebar\\\"); }\\n\" +\n \"function buildSearchHtmlUrl(profileName) { return buildProfileToolUrl(profileName, \\\"html/client/search\\\"); }\\n\" +\n \"function buildPortalSourceUrl(profileName, sessionId) { return buildProfileToolUrl(profileName, \\\"src/client/portal/\\\" + sessionId); }\\n\",\n \"/repo/playground/test/spatialmap.medium.multi.js\":\n \"document.querySelector(\\\"body\\\").insertAdjacentHTML(\\\"beforeend\\\", html);\\nconst pageBody = document.querySelector(\\\"body\\\");\\n\",\n \"/repo/playground/test/spatialmap.js\":\n \"const sessionId = sessionStorage.getItem(\\\"spatialmapSessionId\\\");\\n\" +\n \"sessionId: sessionStorage.getItem(\\\"spatialmapSessionId\\\"),\\n\",\n };\n mockState.artifactCalls = [];\n mockState.createHarnessArtifactDir.mockClear();\n mockState.startLlmTraceSession.mockClear();\n mockState.stopLlmTraceSession.mockClear();\n vi.clearAllMocks();\n vi.spyOn(console, \"log\").mockImplementation(() => {});\n });\n\n it(\"starts eval queries without continuing the current task\", async () => {\n const runQuery = vi.fn().mockResolvedValue(undefined);\n\n await runEvalSmokeCommand(runQuery);\n\n expect(runQuery).toHaveBeenCalledWith(evalQueries[0], {\n continueCurrentTask: false,\n runtime: \"agent\",\n });\n });\n\n it(\"defaults /evals to the fast new-agent suite\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 500) + 1;\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"agentTypes.ts\",\n ].join(\"\\n\");\n });\n\n await runEvalBatchCommand(runQuery);\n\n expect(runQuery).toHaveBeenCalledTimes(getAgentEvalCountForSuite(\"default\"));\n expect(runQuery.mock.calls.every(([, options]) => options?.runtime === \"agent\")).toBe(true);\n });\n\n it(\"runs the slow transform suite only through /evals-transform\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 600) + 1;\n mockState.files[\"/repo/playground/test/spatialmap.small.js\"] =\n \"function bootstrapPortalFlow(context) {}\\nbootstrapPortalFlow(context);\\n\";\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runEvalTransformBatchCommand(runQuery);\n\n expect(runQuery).toHaveBeenCalledTimes(getAgentEvalCountForSuite(\"transform\"));\n expect(runQuery.mock.calls.every(([, options]) => options?.runtime === \"agent\")).toBe(true);\n });\n\n it(\"keeps the transform suite populated with the expected spatialmap eval ids\", () => {\n const transformIds = localEvalCases\n .filter((test) => (test.group ?? \"main\") === \"agent\" && (test.suite ?? \"default\") === \"transform\")\n .map((test) => test.id);\n\n expect(transformIds).toEqual(expect.arrayContaining([\n \"transform_spatialmap_small_rename_run_bootstrap_flow\",\n \"transform_spatialmap_small_extract_profile_url_helper\",\n \"transform_spatialmap_small_multi_rename_flow_helpers\",\n \"transform_spatialmap_small_multi_extract_portal_request_helpers\",\n \"transform_spatialmap_medium_document_body_cleanup\",\n \"transform_spatialmap_medium_multi_dom_surface_cleanup\",\n \"transform_spatialmap_medium_extract_profile_tool_url\",\n \"transform_spatialmap_large_cache_session_id\",\n ]));\n expect(transformIds).toHaveLength(8);\n });\n\n it(\"eval-run resolves one converted agent eval directly\", async () => {\n const runQuery = vi.fn().mockImplementation(async (query: string) => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 200) + 1;\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"EvalReportCmd\",\n ].join(\"\\n\");\n });\n\n await runEvalByIdCommand(runQuery, [\"search_file_without_extension_exact_target\"]);\n\n expect(runQuery).toHaveBeenCalledTimes(1);\n expect(runQuery).toHaveBeenCalledWith(\n \"Explain EvalReportCmd\",\n { continueCurrentTask: false, resumeTaskId: undefined, bindAsCurrentTask: undefined, runtime: \"agent\" }\n );\n expect(mockState.artifactCalls).toHaveLength(1);\n expect(mockState.artifactCalls[0]?.caseId).toBe(\"search_file_without_extension_exact_target\");\n expect(mockState.artifactCalls[0]?.artifactDir).toBe(\"/tmp/evals/search_file_without_extension_exact_target\");\n });\n\n it(\"writes report text for converted agent eval artifacts even without per-eval console reporting\", async () => {\n const runQuery = vi.fn().mockImplementation(async (query: string) => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 300) + 1;\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"EvalReportCmd\",\n ].join(\"\\n\");\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"search_file_without_extension_exact_target\"],\n });\n\n expect(buildEvalReportMarkdown).toHaveBeenCalled();\n expect(buildEvalReportMarkdown).toHaveBeenCalledWith(301, expect.any(Object));\n expect(mockState.artifactCalls).toHaveLength(1);\n expect(mockState.artifactCalls[0]?.reportText).toBe(\"report\");\n });\n\n it(\"eval-list omits deleted legacy-only eval ids\", async () => {\n const logSpy = vi.spyOn(console, \"log\").mockImplementation(() => {});\n\n await listEvalsCommand();\n\n const output = logSpy.mock.calls.map((args) => args.join(\" \")).join(\"\\n\");\n expect(output).toContain(\"search_file_without_extension_exact_target\");\n expect(output).toContain(\"suite: default\");\n expect(output).toContain(\"suite: transform\");\n expect(output).not.toContain(\"multifile_no_early_complete_regression\");\n expect(output).not.toContain(\"resume_continuity_answer_now\");\n logSpy.mockRestore();\n });\n\n it(\"keeps the refreshed stale-default eval checks aligned with the new agent\", () => {\n const exactTargetEval = localEvalCases.find((test) => test.id === \"search_file_with_extension_exact_target\");\n const sqliteEval = localEvalCases.find((test) => test.id === \"verify_pipeline_sqlite_query\");\n const testEntrypointsEval = localEvalCases.find((test) => test.id === \"final_answer_for_test_entrypoints\");\n const naturalLanguageFolderEval = localEvalCases.find((test) => test.id === \"search_folder_natural_language_exact_target\");\n\n expect(exactTargetEval?.query).toBe(\"Explain loopReview.ts\");\n expect(exactTargetEval?.checks.mustContainAnswer).toEqual([\"loopReview.ts\"]);\n\n expect(sqliteEval?.checks.mustContainAnswer).toEqual([\n \"db/fileIndex.ts\",\n \"db/client.ts\",\n \"SQLite\",\n ]);\n\n expect(testEntrypointsEval?.checks.mustContainAnswer).toEqual([\n \"vitest\",\n \"package.json\",\n \"vitest.config.ts\",\n ]);\n\n expect(naturalLanguageFolderEval?.checks.mustContain).toEqual([\n \"artifact final-answer\",\n ]);\n });\n\n it(\"eval-run still resolves one transform eval directly\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 700) + 1;\n mockState.files[\"/repo/playground/test/spatialmap.small.js\"] =\n \"function bootstrapPortalFlow(context) {}\\nbootstrapPortalFlow(context);\\n\";\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runEvalByIdCommand(runQuery, [\"transform_spatialmap_small_rename_run_bootstrap_flow\"]);\n\n expect(runQuery).toHaveBeenCalledTimes(1);\n expect(runQuery).toHaveBeenCalledWith(\n \"In playground/test/spatialmap.small.js, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.\",\n { continueCurrentTask: false, resumeTaskId: undefined, bindAsCurrentTask: undefined, runtime: \"agent\" }\n );\n expect(mockState.artifactCalls[0]?.caseId).toBe(\"transform_spatialmap_small_rename_run_bootstrap_flow\");\n });\n\n it(\"captures the direct committed target file in transform eval artifacts\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 801;\n mockState.files[\"/repo/playground/test/spatialmap.small.js\"] =\n \"function bootstrapPortalFlow(context) {}\\nbootstrapPortalFlow(context);\\n\";\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"transform_spatialmap_small_rename_run_bootstrap_flow\"],\n });\n\n expect(mockState.artifactCalls).toHaveLength(1);\n expect((mockState.artifactCalls[0]?.outputFiles as Array<{ path: string; content: string }>)[0]?.path)\n .toBe(\"playground/test/spatialmap.small.js\");\n });\n\n it(\"fails a transform eval when the output file keeps the old symbol\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 950;\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"transform_spatialmap_small_rename_run_bootstrap_flow\"],\n });\n\n const result = mockState.artifactCalls[0]?.result as { failures?: string[] };\n expect(result.failures?.some((failure) => failure.includes(\"forbidden token\"))).toBe(true);\n });\n\n it(\"fails a transform eval when the direct target file is not valid JavaScript\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 975;\n mockState.files[\"/repo/playground/test/spatialmap.small.js\"] =\n \"function bootstrapPortalFlow(context) {\\n\";\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"transform_spatialmap_small_rename_run_bootstrap_flow\"],\n });\n\n const result = mockState.artifactCalls[0]?.result as { failures?: string[] };\n expect(result.failures?.some((failure) => failure.includes(\"syntax check failed\"))).toBe(true);\n });\n\n it(\"points transform eval queries at direct committed fixtures with one unique target file per eval\", () => {\n const transformCases = localEvalCases\n .filter((test) => (test.group ?? \"main\") === \"agent\" && (test.suite ?? \"default\") === \"transform\")\n .map((test) => ({\n query: test.query ?? \"\",\n path: test.checks.fileMustContain?.[0]?.path ?? test.syntaxCheckPaths?.[0] ?? \"\",\n }));\n\n expect(transformCases.every((test) => !test.query.includes(\"playground/test/eval-work/\"))).toBe(true);\n expect(new Set(transformCases.map((test) => test.path)).size).toBe(transformCases.length);\n });\n\n it(\"accepts helper-call forms that omit the literal /tools prefix in extraction eval definitions\", () => {\n const smallExtractEval = localEvalCases.find((test) => test.id === \"transform_spatialmap_small_extract_profile_url_helper\");\n const mediumExtractEval = localEvalCases.find((test) => test.id === \"transform_spatialmap_medium_extract_profile_tool_url\");\n\n expect(smallExtractEval?.checks.fileMustContainAnyOf).toEqual(expect.arrayContaining([\n expect.objectContaining({\n anyOf: expect.arrayContaining([\n \"return buildProfileToolUrl(profileName, \\\"html/client/portal\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/portal\\\"\",\n ]),\n }),\n expect.objectContaining({\n anyOf: expect.arrayContaining([\n \"return buildProfileToolUrl(profileName, \\\"html/client/layer-panel\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/layer-panel\\\"\",\n ]),\n }),\n expect.objectContaining({\n anyOf: expect.arrayContaining([\n \"return buildProfileToolUrl(profileName, \\\"html/client/search-panel\\\")\",\n \"return buildProfileToolUrl(profileName) + \\\"/html/client/search-panel\\\"\",\n ]),\n }),\n ]));\n expect(mediumExtractEval?.checks.fileMustContain?.[0]?.tokens).toEqual(expect.arrayContaining([\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 });\n\n it(\"does not require the small multi extraction eval to rewrite the portal source request helper\", () => {\n const smallMultiExtractEval = localEvalCases.find((test) => test.id === \"transform_spatialmap_small_multi_extract_portal_request_helpers\");\n const fileMustContain = smallMultiExtractEval?.checks.fileMustContain?.[0]?.tokens ?? [];\n const fileMustNotContain = smallMultiExtractEval?.checks.fileMustNotContain?.[0]?.tokens ?? [];\n const query = smallMultiExtractEval?.query ?? \"\";\n\n expect(query).not.toContain(\"buildPortalSourceRequestUrl\");\n expect(fileMustContain.some((token) => token.includes(\"portal/\\\" + sessionId\"))).toBe(false);\n expect(fileMustNotContain.some((token) => token.includes(\"buildPortalSourceRequestUrl\"))).toBe(false);\n });\n\n it(\"keeps the active transform queries copyable with direct committed target paths\", () => {\n const transformQueries = localEvalCases\n .filter((test) => (test.group ?? \"main\") === \"agent\" && (test.suite ?? \"default\") === \"transform\")\n .map((test) => test.query ?? \"\");\n\n expect(transformQueries).toEqual(expect.arrayContaining([\n \"In playground/test/spatialmap.small.js, rename runBootstrapFlow to bootstrapPortalFlow and update all call sites. Keep behavior the same.\",\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 \"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 ]));\n });\n\n it(\"labels extraction assertion misses with a likely failure kind in saved eval results\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 990;\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.medium.extract.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n mockState.files[\"/repo/playground/test/spatialmap.medium.extract.js\"] = [\n \"function buildProfileToolUrl(profileName) {\",\n \" return \\\"/rest/profile/\\\" + profileName + \\\"/tools\\\";\",\n \"}\",\n \"function buildPortalHtmlUrl(profileName) {\",\n \" return buildProfileToolUrl(profileName) + \\\"/html/client/portal\\\";\",\n \"}\",\n ].join(\"\\n\");\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"transform_spatialmap_medium_extract_profile_tool_url\"],\n });\n\n const result = mockState.artifactCalls[0]?.result as { likelyFailureKind?: string; failures?: string[] };\n expect(result.failures?.length).toBeGreaterThan(0);\n expect(result.likelyFailureKind).toBe(\"harness-strictness\");\n });\n\n it(\"accepts the small extract eval when the helper is used through string concatenation\", async () => {\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 991;\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [agent] [task:created] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"playground/test/spatialmap.small.extract.js\",\n \"action=codeTransform\",\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n mockState.files[\"/repo/playground/test/spatialmap.small.extract.js\"] = [\n \"function buildProfileToolUrl(profileName) {\",\n \" return \\\"/rest/profile/\\\" + profileName + \\\"/tools\\\";\",\n \"}\",\n \"function buildPortalHtmlUrl(profileName) {\",\n \" return buildProfileToolUrl(profileName) + \\\"/html/client/portal\\\";\",\n \"}\",\n \"function buildLayerPanelUrl(profileName) {\",\n \" return buildProfileToolUrl(profileName) + \\\"/html/client/layer-panel\\\";\",\n \"}\",\n \"function buildSearchPanelUrl(profileName) {\",\n \" return buildProfileToolUrl(profileName) + \\\"/html/client/search-panel\\\";\",\n \"}\",\n ].join(\"\\n\");\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"transform_spatialmap_small_extract_profile_url_helper\"],\n });\n\n const result = mockState.artifactCalls[0]?.result as { passed?: boolean; failures?: string[] };\n expect(result.passed).toBe(true);\n expect(result.failures).toEqual([]);\n });\n\n it(\"matches eval log tokens after stripping ANSI color codes\", async () => {\n const runQuery = vi.fn().mockImplementation(async (query: string) => {\n mockState.currentTaskId = (mockState.currentTaskId ?? 400) + 1;\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [\\x1b[33mtask:created\\x1b[39m] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"agentTypes.ts\",\n ].join(\"\\n\");\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"agent_read_and_answer_simple_target\"],\n });\n\n expect(mockState.artifactCalls).toHaveLength(1);\n expect(mockState.artifactCalls[0]?.caseId).toBe(\"agent_read_and_answer_simple_target\");\n expect(mockState.artifactCalls[0]?.reportText).toBe(\"report\");\n });\n\n it(\"does not attach a stale report task when the scenario did not create a new task id\", async () => {\n mockState.currentTaskId = 1547;\n const runQuery = vi.fn().mockImplementation(async (_query: string) => {\n mockState.currentTaskId = 1547;\n mockState.runLog += [\n `[2026-05-04 07:36:54 +02:00] [agent] [\\x1b[33mtask:created\\x1b[39m] status=active run started`,\n `[2026-05-04 07:37:25 +02:00] [agent] [step:output] artifact final-answer`,\n \"agentTypes.ts\",\n ].join(\"\\n\");\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"agent_read_and_answer_simple_target\"],\n });\n\n expect(buildEvalReportMarkdown).not.toHaveBeenCalled();\n expect(mockState.artifactCalls).toHaveLength(1);\n expect(mockState.artifactCalls[0]?.reportText).toBeUndefined();\n });\n\n it(\"marks an eval incomplete when the run did not create its own task or owned run log\", async () => {\n mockState.currentTaskId = 2200;\n mockState.runLog = [\n `[2026-05-04 07:36:54 +02:00] [shared] [legacy:output] SearchOrchestrator output`,\n `{\"stepName\":\"SearchOrchestrator\",\"type\":\"output\",\"content\":{\"route\":\"db\"}}`,\n ].join(\"\\n\");\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n\n const runQuery = vi.fn().mockImplementation(async () => {\n mockState.currentTaskId = 2200;\n mockState.files[\"/tmp/scai-eval-run.log\"] = mockState.runLog;\n });\n\n await runLocalEvals(runQuery, {\n includeIds: [\"search_folder_natural_language_exact_target\"],\n });\n\n const result = mockState.artifactCalls[0]?.result as { outcome?: string; failures?: string[] };\n expect(result.outcome).toBe(\"incomplete\");\n expect(result.failures?.[0]).toContain(\"could not isolate the run log or created task\");\n });\n\n it(\"keeps shell adapters wired to the shared eval actions\", async () => {\n const customCommands: Record<string, (...args: string[]) => Promise<void>> = {};\n const runQuery = vi.fn().mockResolvedValue(undefined);\n\n registerEvalShellCommands(customCommands, runQuery);\n await customCommands.eval();\n await customCommands[\"eval-random\"]();\n\n expect(runQuery).toHaveBeenCalledTimes(2);\n });\n\n it(\"registers eval CLI commands alongside eval-report\", async () => {\n const cmd = new Command();\n const runQuery = vi.fn().mockResolvedValue(undefined);\n\n registerEvalCommands(cmd, runQuery);\n\n expect(cmd.commands.map((command) => command.name())).toEqual(expect.arrayContaining([\n \"eval\",\n \"eval-random\",\n \"evals\",\n \"evals-transform\",\n \"eval-run\",\n \"eval-list\",\n \"eval-report\",\n ]));\n });\n});\n"]}