scai 0.1.178 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. package/README.md +162 -267
  2. package/dist/__tests__/CommitSuggesterCmd.test.js +112 -0
  3. package/dist/__tests__/CommitSuggesterCmd.test.js.map +1 -0
  4. package/dist/__tests__/EvalReportCmd.test.js +645 -0
  5. package/dist/__tests__/EvalReportCmd.test.js.map +1 -0
  6. package/dist/__tests__/ModelCmd.test.js +64 -0
  7. package/dist/__tests__/ModelCmd.test.js.map +1 -0
  8. package/dist/__tests__/agents/agentActions.test.js +345 -0
  9. package/dist/__tests__/agents/agentActions.test.js.map +1 -0
  10. package/dist/__tests__/agents/agentFeedback.test.js +118 -0
  11. package/dist/__tests__/agents/agentFeedback.test.js.map +1 -0
  12. package/dist/__tests__/agents/agentGeneralScope.test.js +74 -0
  13. package/dist/__tests__/agents/agentGeneralScope.test.js.map +1 -0
  14. package/dist/__tests__/agents/agentLoop.test.js +1723 -0
  15. package/dist/__tests__/agents/agentLoop.test.js.map +1 -0
  16. package/dist/__tests__/agents/agentPolicyState.test.js +948 -0
  17. package/dist/__tests__/agents/agentPolicyState.test.js.map +1 -0
  18. package/dist/__tests__/agents/agentReadEvidence.test.js +170 -0
  19. package/dist/__tests__/agents/agentReadEvidence.test.js.map +1 -0
  20. package/dist/__tests__/agents/agentReadPersistence.test.js +129 -0
  21. package/dist/__tests__/agents/agentReadPersistence.test.js.map +1 -0
  22. package/dist/__tests__/agents/agentResumeCheckpoint.test.js +90 -0
  23. package/dist/__tests__/agents/agentResumeCheckpoint.test.js.map +1 -0
  24. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js +289 -0
  25. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js.map +1 -0
  26. package/dist/__tests__/agents/agentSearchOwnership.test.js +166 -0
  27. package/dist/__tests__/agents/agentSearchOwnership.test.js.map +1 -0
  28. package/dist/__tests__/agents/agentSearchRanking.test.js +139 -0
  29. package/dist/__tests__/agents/agentSearchRanking.test.js.map +1 -0
  30. package/dist/__tests__/agents/agentSearchRouting.test.js +584 -0
  31. package/dist/__tests__/agents/agentSearchRouting.test.js.map +1 -0
  32. package/dist/__tests__/agents/agentSearchScoring.test.js +23 -0
  33. package/dist/__tests__/agents/agentSearchScoring.test.js.map +1 -0
  34. package/dist/__tests__/agents/agentSearchShared.test.js +78 -0
  35. package/dist/__tests__/agents/agentSearchShared.test.js.map +1 -0
  36. package/dist/__tests__/agents/agentStateMachine.test.js +58 -0
  37. package/dist/__tests__/agents/agentStateMachine.test.js.map +1 -0
  38. package/dist/__tests__/agents/agentTaskPersistence.test.js +156 -0
  39. package/dist/__tests__/agents/agentTaskPersistence.test.js.map +1 -0
  40. package/dist/__tests__/agents/agentTools.test.js +69 -0
  41. package/dist/__tests__/agents/agentTools.test.js.map +1 -0
  42. package/dist/__tests__/agents/agentTransform.test.js +779 -0
  43. package/dist/__tests__/agents/agentTransform.test.js.map +1 -0
  44. package/dist/__tests__/agents/analysisPlanGenStep.test.js +157 -0
  45. package/dist/__tests__/agents/analysisPlanGenStep.test.js.map +1 -0
  46. package/dist/__tests__/agents/answerOnlyCompletion.test.js +75 -0
  47. package/dist/__tests__/agents/answerOnlyCompletion.test.js.map +1 -0
  48. package/dist/__tests__/agents/decideNextAction.test.js +1662 -0
  49. package/dist/__tests__/agents/decideNextAction.test.js.map +1 -0
  50. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js +258 -0
  51. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js.map +1 -0
  52. package/dist/__tests__/agents/evidenceVerifierStep.test.js +113 -0
  53. package/dist/__tests__/agents/evidenceVerifierStep.test.js.map +1 -0
  54. package/dist/__tests__/agents/executionPolicyResolver.test.js +208 -0
  55. package/dist/__tests__/agents/executionPolicyResolver.test.js.map +1 -0
  56. package/dist/__tests__/agents/fileCheckStep.test.js +299 -0
  57. package/dist/__tests__/agents/fileCheckStep.test.js.map +1 -0
  58. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js +35 -0
  59. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js.map +1 -0
  60. package/dist/__tests__/agents/guardState.test.js +297 -0
  61. package/dist/__tests__/agents/guardState.test.js.map +1 -0
  62. package/dist/__tests__/agents/mainAgentHeuristics.test.js +72 -0
  63. package/dist/__tests__/agents/mainAgentHeuristics.test.js.map +1 -0
  64. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js +60 -0
  65. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js.map +1 -0
  66. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js +207 -0
  67. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js.map +1 -0
  68. package/dist/__tests__/agents/prompting.test.js +363 -0
  69. package/dist/__tests__/agents/prompting.test.js.map +1 -0
  70. package/dist/__tests__/agents/readinessGateStep.test.js +180 -0
  71. package/dist/__tests__/agents/readinessGateStep.test.js.map +1 -0
  72. package/dist/__tests__/agents/reasonNextStep.test.js +56 -0
  73. package/dist/__tests__/agents/reasonNextStep.test.js.map +1 -0
  74. package/dist/__tests__/agents/reasonNextTaskStep.test.js +284 -0
  75. package/dist/__tests__/agents/reasonNextTaskStep.test.js.map +1 -0
  76. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js +170 -0
  77. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js.map +1 -0
  78. package/dist/__tests__/agents/resolveProgressState.test.js +526 -0
  79. package/dist/__tests__/agents/resolveProgressState.test.js.map +1 -0
  80. package/dist/__tests__/agents/resumeCheckpoint.test.js +50 -0
  81. package/dist/__tests__/agents/resumeCheckpoint.test.js.map +1 -0
  82. package/dist/__tests__/agents/routingDecisionStep.test.js +134 -0
  83. package/dist/__tests__/agents/routingDecisionStep.test.js.map +1 -0
  84. package/dist/__tests__/agents/scopeClassificationStep.test.js +118 -0
  85. package/dist/__tests__/agents/scopeClassificationStep.test.js.map +1 -0
  86. package/dist/__tests__/agents/searchContext.test.js +97 -0
  87. package/dist/__tests__/agents/searchContext.test.js.map +1 -0
  88. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js +73 -0
  89. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js.map +1 -0
  90. package/dist/__tests__/agents/structuredOutput.test.js +45 -0
  91. package/dist/__tests__/agents/structuredOutput.test.js.map +1 -0
  92. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js +59 -0
  93. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js.map +1 -0
  94. package/dist/__tests__/agents/transformPlanGenStep.test.js +92 -0
  95. package/dist/__tests__/agents/transformPlanGenStep.test.js.map +1 -0
  96. package/dist/__tests__/agents/understandIntentStep.test.js +237 -0
  97. package/dist/__tests__/agents/understandIntentStep.test.js.map +1 -0
  98. package/dist/__tests__/agents/understandResumeContext.test.js +65 -0
  99. package/dist/__tests__/agents/understandResumeContext.test.js.map +1 -0
  100. package/dist/__tests__/agents/understandScope.test.js +227 -0
  101. package/dist/__tests__/agents/understandScope.test.js.map +1 -0
  102. package/dist/__tests__/agents/validateChangesStep.test.js +52 -0
  103. package/dist/__tests__/agents/validateChangesStep.test.js.map +1 -0
  104. package/dist/__tests__/askCommandTaskBinding.test.js +176 -0
  105. package/dist/__tests__/askCommandTaskBinding.test.js.map +1 -0
  106. package/dist/__tests__/commandVisibility.test.js +25 -0
  107. package/dist/__tests__/commandVisibility.test.js.map +1 -0
  108. package/dist/__tests__/config.devOutput.test.js +82 -0
  109. package/dist/__tests__/config.devOutput.test.js.map +1 -0
  110. package/dist/__tests__/currentContext.test.js +43 -0
  111. package/dist/__tests__/currentContext.test.js.map +1 -0
  112. package/dist/__tests__/daemonWorker.test.js +51 -0
  113. package/dist/__tests__/daemonWorker.test.js.map +1 -0
  114. package/dist/__tests__/dialogState.test.js +113 -0
  115. package/dist/__tests__/dialogState.test.js.map +1 -0
  116. package/dist/__tests__/evalCommands.test.js +506 -0
  117. package/dist/__tests__/evalCommands.test.js.map +1 -0
  118. package/dist/__tests__/evalCommandsSummary.test.js +68 -0
  119. package/dist/__tests__/evalCommandsSummary.test.js.map +1 -0
  120. package/dist/__tests__/example.test.js +1 -0
  121. package/dist/__tests__/example.test.js.map +1 -0
  122. package/dist/__tests__/factory.commitCommand.test.js +45 -0
  123. package/dist/__tests__/factory.commitCommand.test.js.map +1 -0
  124. package/dist/__tests__/factory.devOutputCommand.test.js +122 -0
  125. package/dist/__tests__/factory.devOutputCommand.test.js.map +1 -0
  126. package/dist/__tests__/factory.evalCommands.test.js +38 -0
  127. package/dist/__tests__/factory.evalCommands.test.js.map +1 -0
  128. package/dist/__tests__/factory.planCommand.test.js +35 -0
  129. package/dist/__tests__/factory.planCommand.test.js.map +1 -0
  130. package/dist/__tests__/factory.setupCommand.test.js +34 -0
  131. package/dist/__tests__/factory.setupCommand.test.js.map +1 -0
  132. package/dist/__tests__/factory.statusCommand.test.js +54 -0
  133. package/dist/__tests__/factory.statusCommand.test.js.map +1 -0
  134. package/dist/__tests__/fileRules/queryTokenRules.test.js +35 -0
  135. package/dist/__tests__/fileRules/queryTokenRules.test.js.map +1 -0
  136. package/dist/__tests__/fileRules/searchPathClassification.test.js +57 -0
  137. package/dist/__tests__/fileRules/searchPathClassification.test.js.map +1 -0
  138. package/dist/__tests__/generate.ollamaRecovery.test.js +344 -0
  139. package/dist/__tests__/generate.ollamaRecovery.test.js.map +1 -0
  140. package/dist/__tests__/index.modelStartup.test.js +24 -0
  141. package/dist/__tests__/index.modelStartup.test.js.map +1 -0
  142. package/dist/__tests__/indexCmd.test.js +85 -0
  143. package/dist/__tests__/indexCmd.test.js.map +1 -0
  144. package/dist/__tests__/indexSlashCommand.test.js +50 -0
  145. package/dist/__tests__/indexSlashCommand.test.js.map +1 -0
  146. package/dist/__tests__/ollamaService.test.js +103 -0
  147. package/dist/__tests__/ollamaService.test.js.map +1 -0
  148. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js +68 -0
  149. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js.map +1 -0
  150. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js +68 -0
  151. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js.map +1 -0
  152. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js +284 -0
  153. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js.map +1 -0
  154. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js +1139 -0
  155. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js.map +1 -0
  156. package/dist/__tests__/pipeline/modules/readFileModule.test.js +146 -0
  157. package/dist/__tests__/pipeline/modules/readFileModule.test.js.map +1 -0
  158. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js +192 -0
  159. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js.map +1 -0
  160. package/dist/__tests__/repoIdentity.test.js +31 -0
  161. package/dist/__tests__/repoIdentity.test.js.map +1 -0
  162. package/dist/__tests__/resumeContext.test.js +87 -0
  163. package/dist/__tests__/resumeContext.test.js.map +1 -0
  164. package/dist/__tests__/resumeState.test.js +239 -0
  165. package/dist/__tests__/resumeState.test.js.map +1 -0
  166. package/dist/__tests__/search/SearchOrchestrator.test.js +836 -0
  167. package/dist/__tests__/search/SearchOrchestrator.test.js.map +1 -0
  168. package/dist/__tests__/shellDialogUi.test.js +52 -0
  169. package/dist/__tests__/shellDialogUi.test.js.map +1 -0
  170. package/dist/__tests__/shellSession.test.js +102 -0
  171. package/dist/__tests__/shellSession.test.js.map +1 -0
  172. package/dist/__tests__/statusOwner.test.js +215 -0
  173. package/dist/__tests__/statusOwner.test.js.map +1 -0
  174. package/dist/__tests__/testing/contextEval.test.js +244 -0
  175. package/dist/__tests__/testing/contextEval.test.js.map +1 -0
  176. package/dist/__tests__/testing/harnessArtifacts.test.js +124 -0
  177. package/dist/__tests__/testing/harnessArtifacts.test.js.map +1 -0
  178. package/dist/__tests__/testing/llmTraceSession.test.js +67 -0
  179. package/dist/__tests__/testing/llmTraceSession.test.js.map +1 -0
  180. package/dist/__tests__/testing/registerDevCliCommands.test.js +35 -0
  181. package/dist/__tests__/testing/registerDevCliCommands.test.js.map +1 -0
  182. package/dist/__tests__/testing/runDiagnosis.test.js +159 -0
  183. package/dist/__tests__/testing/runDiagnosis.test.js.map +1 -0
  184. package/dist/__tests__/testing/runtimeLogReader.test.js +66 -0
  185. package/dist/__tests__/testing/runtimeLogReader.test.js.map +1 -0
  186. package/dist/__tests__/testing/testCommands.test.js +53 -0
  187. package/dist/__tests__/testing/testCommands.test.js.map +1 -0
  188. package/dist/__tests__/utils/compileSearchQuery.test.js +38 -0
  189. package/dist/__tests__/utils/compileSearchQuery.test.js.map +1 -0
  190. package/dist/__tests__/utils/consolePresentation.test.js +105 -0
  191. package/dist/__tests__/utils/consolePresentation.test.js.map +1 -0
  192. package/dist/__tests__/utils/extractFileReferences.test.js +41 -0
  193. package/dist/__tests__/utils/extractFileReferences.test.js.map +1 -0
  194. package/dist/__tests__/utils/log.test.js +34 -0
  195. package/dist/__tests__/utils/log.test.js.map +1 -0
  196. package/dist/__tests__/utils/runtimeLogger.test.js +200 -0
  197. package/dist/__tests__/utils/runtimeLogger.test.js.map +1 -0
  198. package/dist/__tests__/utils/spinner.test.js +31 -0
  199. package/dist/__tests__/utils/spinner.test.js.map +1 -0
  200. package/dist/__tests__/utils/verifyFocusPreference.test.js +41 -0
  201. package/dist/__tests__/utils/verifyFocusPreference.test.js.map +1 -0
  202. package/dist/agent/actions/index.js +301 -0
  203. package/dist/agent/actions/index.js.map +1 -0
  204. package/dist/agent/actions/normalize.js +360 -0
  205. package/dist/agent/actions/normalize.js.map +1 -0
  206. package/dist/agent/actions/schemas.js +129 -0
  207. package/dist/agent/actions/schemas.js.map +1 -0
  208. package/dist/agent/evidence/index.js +320 -0
  209. package/dist/agent/evidence/index.js.map +1 -0
  210. package/dist/agent/feedback/index.js +187 -0
  211. package/dist/agent/feedback/index.js.map +1 -0
  212. package/dist/agent/finalization/index.js +35 -0
  213. package/dist/agent/finalization/index.js.map +1 -0
  214. package/dist/agent/index.js +126 -0
  215. package/dist/agent/index.js.map +1 -0
  216. package/dist/agent/logging/index.js +350 -0
  217. package/dist/agent/logging/index.js.map +1 -0
  218. package/dist/agent/persistence/boot.js +58 -0
  219. package/dist/agent/persistence/boot.js.map +1 -0
  220. package/dist/agent/persistence/currentTask.js +36 -0
  221. package/dist/agent/persistence/currentTask.js.map +1 -0
  222. package/dist/agent/persistence/hydrate.js +42 -0
  223. package/dist/agent/persistence/hydrate.js.map +1 -0
  224. package/dist/agent/persistence/index.js +15 -0
  225. package/dist/agent/persistence/index.js.map +1 -0
  226. package/dist/agent/persistence/snapshots.js +97 -0
  227. package/dist/agent/persistence/snapshots.js.map +1 -0
  228. package/dist/agent/persistence/steps.js +95 -0
  229. package/dist/agent/persistence/steps.js.map +1 -0
  230. package/dist/agent/persistence/tasks.js +195 -0
  231. package/dist/agent/persistence/tasks.js.map +1 -0
  232. package/dist/agent/persistence/turns.js +92 -0
  233. package/dist/agent/persistence/turns.js.map +1 -0
  234. package/dist/agent/policy/ambiguityResolution.js +226 -0
  235. package/dist/agent/policy/ambiguityResolution.js.map +1 -0
  236. package/dist/agent/policy/contracts.js +2 -0
  237. package/dist/agent/policy/contracts.js.map +1 -0
  238. package/dist/agent/policy/coveragePolicy.js +309 -0
  239. package/dist/agent/policy/coveragePolicy.js.map +1 -0
  240. package/dist/agent/policy/endDecisionPolicy.js +31 -0
  241. package/dist/agent/policy/endDecisionPolicy.js.map +1 -0
  242. package/dist/agent/policy/index.js +344 -0
  243. package/dist/agent/policy/index.js.map +1 -0
  244. package/dist/agent/policy/loopReview.js +778 -0
  245. package/dist/agent/policy/loopReview.js.map +1 -0
  246. package/dist/agent/policy/readinessPolicy.js +108 -0
  247. package/dist/agent/policy/readinessPolicy.js.map +1 -0
  248. package/dist/agent/policy/resolutionPipeline.js +356 -0
  249. package/dist/agent/policy/resolutionPipeline.js.map +1 -0
  250. package/dist/agent/policy/targetClassification.js +33 -0
  251. package/dist/agent/policy/targetClassification.js.map +1 -0
  252. package/dist/agent/prompting/actionChoice.js +90 -0
  253. package/dist/agent/prompting/actionChoice.js.map +1 -0
  254. package/dist/agent/prompting/finalAnswer.js +38 -0
  255. package/dist/agent/prompting/finalAnswer.js.map +1 -0
  256. package/dist/agent/prompting/index.js +14 -0
  257. package/dist/agent/prompting/index.js.map +1 -0
  258. package/dist/agent/prompting/plan.js +59 -0
  259. package/dist/agent/prompting/plan.js.map +1 -0
  260. package/dist/agent/prompting/transform.js +175 -0
  261. package/dist/agent/prompting/transform.js.map +1 -0
  262. package/dist/agent/prompting/understand.js +70 -0
  263. package/dist/agent/prompting/understand.js.map +1 -0
  264. package/dist/agent/read/freshness.js +29 -0
  265. package/dist/agent/read/freshness.js.map +1 -0
  266. package/dist/agent/read/fullReadPrompt.js +43 -0
  267. package/dist/agent/read/fullReadPrompt.js.map +1 -0
  268. package/dist/agent/read/index.js +140 -0
  269. package/dist/agent/read/index.js.map +1 -0
  270. package/dist/agent/read/persistence.js +88 -0
  271. package/dist/agent/read/persistence.js.map +1 -0
  272. package/dist/agent/read/summarizeReadEvidence.js +733 -0
  273. package/dist/agent/read/summarizeReadEvidence.js.map +1 -0
  274. package/dist/agent/read/targetResolution.js +126 -0
  275. package/dist/agent/read/targetResolution.js.map +1 -0
  276. package/dist/agent/resume/checkpoint.js +41 -0
  277. package/dist/agent/resume/checkpoint.js.map +1 -0
  278. package/dist/agent/runtime/lifecycle.js +67 -0
  279. package/dist/agent/runtime/lifecycle.js.map +1 -0
  280. package/dist/agent/runtime/progress.js +178 -0
  281. package/dist/agent/runtime/progress.js.map +1 -0
  282. package/dist/agent/runtime/runAgentLoop.js +402 -0
  283. package/dist/agent/runtime/runAgentLoop.js.map +1 -0
  284. package/dist/agent/runtime/runAgentPlanOnly.js +127 -0
  285. package/dist/agent/runtime/runAgentPlanOnly.js.map +1 -0
  286. package/dist/agent/runtime/understand.js +336 -0
  287. package/dist/agent/runtime/understand.js.map +1 -0
  288. package/dist/agent/search/batchPlanner.js +274 -0
  289. package/dist/agent/search/batchPlanner.js.map +1 -0
  290. package/dist/agent/search/candidateRetentionPolicy.js +184 -0
  291. package/dist/agent/search/candidateRetentionPolicy.js.map +1 -0
  292. package/dist/agent/search/directory.js +51 -0
  293. package/dist/agent/search/directory.js.map +1 -0
  294. package/dist/agent/search/exactTarget.js +151 -0
  295. package/dist/agent/search/exactTarget.js.map +1 -0
  296. package/dist/agent/search/fragment.js +110 -0
  297. package/dist/agent/search/fragment.js.map +1 -0
  298. package/dist/agent/search/index.js +166 -0
  299. package/dist/agent/search/index.js.map +1 -0
  300. package/dist/agent/search/laneClassifier.js +119 -0
  301. package/dist/agent/search/laneClassifier.js.map +1 -0
  302. package/dist/agent/search/limits.js +10 -0
  303. package/dist/agent/search/limits.js.map +1 -0
  304. package/dist/agent/search/ranking.js +22 -0
  305. package/dist/agent/search/ranking.js.map +1 -0
  306. package/dist/agent/search/regex.js +83 -0
  307. package/dist/agent/search/regex.js.map +1 -0
  308. package/dist/agent/search/routePolicy.js +11 -0
  309. package/dist/agent/search/routePolicy.js.map +1 -0
  310. package/dist/agent/search/searchContext.js +128 -0
  311. package/dist/agent/search/searchContext.js.map +1 -0
  312. package/dist/agent/search/semantic.js +113 -0
  313. package/dist/agent/search/semantic.js.map +1 -0
  314. package/dist/agent/search/semanticIndexSearch.js +202 -0
  315. package/dist/agent/search/semanticIndexSearch.js.map +1 -0
  316. package/dist/agent/search/shared.js +283 -0
  317. package/dist/agent/search/shared.js.map +1 -0
  318. package/dist/agent/search/shell.js +202 -0
  319. package/dist/agent/search/shell.js.map +1 -0
  320. package/dist/agent/search/snippetEvidence.js +57 -0
  321. package/dist/agent/search/snippetEvidence.js.map +1 -0
  322. package/dist/agent/search/types.js +2 -0
  323. package/dist/agent/search/types.js.map +1 -0
  324. package/dist/agent/state/index.js +99 -0
  325. package/dist/agent/state/index.js.map +1 -0
  326. package/dist/agent/state/memory.js +56 -0
  327. package/dist/agent/state/memory.js.map +1 -0
  328. package/dist/agent/structuredOutput/index.js +28 -0
  329. package/dist/agent/structuredOutput/index.js.map +1 -0
  330. package/dist/agent/tools/index.js +199 -0
  331. package/dist/agent/tools/index.js.map +1 -0
  332. package/dist/agent/transform/index.js +519 -0
  333. package/dist/agent/transform/index.js.map +1 -0
  334. package/dist/agent/transform/syntax.js +49 -0
  335. package/dist/agent/transform/syntax.js.map +1 -0
  336. package/dist/agent/types.js +20 -0
  337. package/dist/agent/types.js.map +1 -0
  338. package/dist/agents/actionRegistry.js +114 -0
  339. package/dist/agents/actionRegistry.js.map +1 -0
  340. package/dist/agents/agent.js +5 -0
  341. package/dist/agents/agent.js.map +1 -0
  342. package/dist/agents/agentActions.js +5 -0
  343. package/dist/agents/agentActions.js.map +1 -0
  344. package/dist/agents/agentEvidence.js +5 -0
  345. package/dist/agents/agentEvidence.js.map +1 -0
  346. package/dist/agents/agentFeedback.js +5 -0
  347. package/dist/agents/agentFeedback.js.map +1 -0
  348. package/dist/agents/agentLogging.js +5 -0
  349. package/dist/agents/agentLogging.js.map +1 -0
  350. package/dist/agents/agentLoop.js +5 -0
  351. package/dist/agents/agentLoop.js.map +1 -0
  352. package/dist/agents/agentMemory.js +5 -0
  353. package/dist/agents/agentMemory.js.map +1 -0
  354. package/dist/agents/agentPlanMode.js +5 -0
  355. package/dist/agents/agentPlanMode.js.map +1 -0
  356. package/dist/agents/agentPolicyState.js +5 -0
  357. package/dist/agents/agentPolicyState.js.map +1 -0
  358. package/dist/agents/agentProgress.js +93 -0
  359. package/dist/agents/agentProgress.js.map +1 -0
  360. package/dist/agents/agentSchemas.js +5 -0
  361. package/dist/agents/agentSchemas.js.map +1 -0
  362. package/dist/agents/agentSearchScoring.js +5 -0
  363. package/dist/agents/agentSearchScoring.js.map +1 -0
  364. package/dist/agents/agentStateMachine.js +5 -0
  365. package/dist/agents/agentStateMachine.js.map +1 -0
  366. package/dist/agents/agentTools.js +5 -0
  367. package/dist/agents/agentTools.js.map +1 -0
  368. package/dist/agents/agentTypes.js +5 -0
  369. package/dist/agents/agentTypes.js.map +1 -0
  370. package/dist/agents/agentUnderstand.js +5 -0
  371. package/dist/agents/agentUnderstand.js.map +1 -0
  372. package/dist/agents/analysisPlanGenStep.js +194 -17
  373. package/dist/agents/analysisPlanGenStep.js.map +1 -0
  374. package/dist/agents/answerOnlyCompletion.js +32 -0
  375. package/dist/agents/answerOnlyCompletion.js.map +1 -0
  376. package/dist/agents/collaboratorStep.js +1 -0
  377. package/dist/agents/collaboratorStep.js.map +1 -0
  378. package/dist/agents/decideNextAction.js +444 -0
  379. package/dist/agents/decideNextAction.js.map +1 -0
  380. package/dist/agents/deriveFocusFromSearchStep.js +83 -0
  381. package/dist/agents/deriveFocusFromSearchStep.js.map +1 -0
  382. package/dist/agents/evidenceVerifierStep.js +104 -13
  383. package/dist/agents/evidenceVerifierStep.js.map +1 -0
  384. package/dist/agents/fileCheckStep.js +381 -12
  385. package/dist/agents/fileCheckStep.js.map +1 -0
  386. package/dist/agents/giveUpEvaluatorStep.js +63 -0
  387. package/dist/agents/giveUpEvaluatorStep.js.map +1 -0
  388. package/dist/agents/guardPolicy.js +20 -0
  389. package/dist/agents/guardPolicy.js.map +1 -0
  390. package/dist/agents/guards/executionPolicyResolver.js +165 -0
  391. package/dist/agents/guards/executionPolicyResolver.js.map +1 -0
  392. package/dist/agents/guards/guardState.js +195 -0
  393. package/dist/agents/guards/guardState.js.map +1 -0
  394. package/dist/agents/guards/resolveProgressState.js +403 -0
  395. package/dist/agents/guards/resolveProgressState.js.map +1 -0
  396. package/dist/agents/infoPlanGenStep.js +66 -8
  397. package/dist/agents/infoPlanGenStep.js.map +1 -0
  398. package/dist/agents/integrateFeedbackStep.js +1 -0
  399. package/dist/agents/integrateFeedbackStep.js.map +1 -0
  400. package/dist/agents/iterationFileSelector.js +8 -7
  401. package/dist/agents/iterationFileSelector.js.map +1 -0
  402. package/dist/agents/mainAgentActivityLog.js +85 -0
  403. package/dist/agents/mainAgentActivityLog.js.map +1 -0
  404. package/dist/agents/mainAgentHeuristics.js +173 -0
  405. package/dist/agents/mainAgentHeuristics.js.map +1 -0
  406. package/dist/agents/mainAgentVerify.js +159 -0
  407. package/dist/agents/mainAgentVerify.js.map +1 -0
  408. package/dist/agents/objectiveEvaluatorStep.js +103 -0
  409. package/dist/agents/objectiveEvaluatorStep.js.map +1 -0
  410. package/dist/agents/outerLoopRecoveryEvaluator.js +108 -0
  411. package/dist/agents/outerLoopRecoveryEvaluator.js.map +1 -0
  412. package/dist/agents/readinessGateStep.js +95 -9
  413. package/dist/agents/readinessGateStep.js.map +1 -0
  414. package/dist/agents/reasonNextStep.js +9 -8
  415. package/dist/agents/reasonNextStep.js.map +1 -0
  416. package/dist/agents/reasonNextTaskStep.js +267 -144
  417. package/dist/agents/reasonNextTaskStep.js.map +1 -0
  418. package/dist/agents/researchPlanGenStep.js +61 -25
  419. package/dist/agents/researchPlanGenStep.js.map +1 -0
  420. package/dist/agents/resolveAgentTargetClassification.js +5 -0
  421. package/dist/agents/resolveAgentTargetClassification.js.map +1 -0
  422. package/dist/agents/resolveExecutionModeStep.js +1 -0
  423. package/dist/agents/resolveExecutionModeStep.js.map +1 -0
  424. package/dist/agents/resolveExplicitTargetsStep.js +74 -0
  425. package/dist/agents/resolveExplicitTargetsStep.js.map +1 -0
  426. package/dist/agents/routingDecisionStep.js +58 -11
  427. package/dist/agents/routingDecisionStep.js.map +1 -0
  428. package/dist/agents/scopeClassificationStep.js +66 -3
  429. package/dist/agents/scopeClassificationStep.js.map +1 -0
  430. package/dist/agents/selectRelevantSourcesStep.js +13 -5
  431. package/dist/agents/selectRelevantSourcesStep.js.map +1 -0
  432. package/dist/agents/structuralPreloadStep.js +3 -4
  433. package/dist/agents/structuralPreloadStep.js.map +1 -0
  434. package/dist/agents/transformPlanGenStep.js +105 -18
  435. package/dist/agents/transformPlanGenStep.js.map +1 -0
  436. package/dist/agents/understandIntentStep.js +237 -17
  437. package/dist/agents/understandIntentStep.js.map +1 -0
  438. package/dist/agents/validateChangesStep.js +16 -2
  439. package/dist/agents/validateChangesStep.js.map +1 -0
  440. package/dist/agents/writeFileStep.js +1 -0
  441. package/dist/agents/writeFileStep.js.map +1 -0
  442. package/dist/commands/AskCmd.js +139 -44
  443. package/dist/commands/AskCmd.js.map +1 -0
  444. package/dist/commands/BackupCmd.js +1 -0
  445. package/dist/commands/BackupCmd.js.map +1 -0
  446. package/dist/commands/ChangeLogUpdateCmd.js +1 -0
  447. package/dist/commands/ChangeLogUpdateCmd.js.map +1 -0
  448. package/dist/commands/CommitSuggesterCmd.js +55 -13
  449. package/dist/commands/CommitSuggesterCmd.js.map +1 -0
  450. package/dist/commands/DaemonCmd.js +52 -14
  451. package/dist/commands/DaemonCmd.js.map +1 -0
  452. package/dist/commands/DeleteIndex.js +1 -0
  453. package/dist/commands/DeleteIndex.js.map +1 -0
  454. package/dist/commands/EvalReportCmd.js +374 -0
  455. package/dist/commands/EvalReportCmd.js.map +1 -0
  456. package/dist/commands/FindCmd.js +1 -0
  457. package/dist/commands/FindCmd.js.map +1 -0
  458. package/dist/commands/GitCmd.js +1 -0
  459. package/dist/commands/GitCmd.js.map +1 -0
  460. package/dist/commands/IndexCmd.js +11 -79
  461. package/dist/commands/IndexCmd.js.map +1 -0
  462. package/dist/commands/InspectCmd.js +1 -0
  463. package/dist/commands/InspectCmd.js.map +1 -0
  464. package/dist/commands/ModelCmd.js +24 -0
  465. package/dist/commands/ModelCmd.js.map +1 -0
  466. package/dist/commands/ReadlineSingleton.js +1 -0
  467. package/dist/commands/ReadlineSingleton.js.map +1 -0
  468. package/dist/commands/ResetDbCmd.js +18 -1
  469. package/dist/commands/ResetDbCmd.js.map +1 -0
  470. package/dist/commands/ReviewCmd.js +1 -0
  471. package/dist/commands/ReviewCmd.js.map +1 -0
  472. package/dist/commands/StatusCmd.js +22 -0
  473. package/dist/commands/StatusCmd.js.map +1 -0
  474. package/dist/commands/StopDaemonCmd.js +1 -0
  475. package/dist/commands/StopDaemonCmd.js.map +1 -0
  476. package/dist/commands/SummaryCmd.js +1 -0
  477. package/dist/commands/SummaryCmd.js.map +1 -0
  478. package/dist/commands/SwitchCmd.js +9 -15
  479. package/dist/commands/SwitchCmd.js.map +1 -0
  480. package/dist/commands/TasksCmd.js +142 -57
  481. package/dist/commands/TasksCmd.js.map +1 -0
  482. package/dist/commands/TestCmd.js +66 -0
  483. package/dist/commands/TestCmd.js.map +1 -0
  484. package/dist/commands/WorkflowCmd.js +1 -0
  485. package/dist/commands/WorkflowCmd.js.map +1 -0
  486. package/dist/commands/commandVisibility.js +27 -0
  487. package/dist/commands/commandVisibility.js.map +1 -0
  488. package/dist/commands/evalCommands.js +1337 -0
  489. package/dist/commands/evalCommands.js.map +1 -0
  490. package/dist/commands/factory.js +206 -38
  491. package/dist/commands/factory.js.map +1 -0
  492. package/dist/config.js +62 -11
  493. package/dist/config.js.map +1 -0
  494. package/dist/constants.js +21 -3
  495. package/dist/constants.js.map +1 -0
  496. package/dist/context.js +33 -32
  497. package/dist/context.js.map +1 -0
  498. package/dist/daemon/daemonQueues.js +1 -20
  499. package/dist/daemon/daemonQueues.js.map +1 -0
  500. package/dist/daemon/daemonWorker.js +26 -37
  501. package/dist/daemon/daemonWorker.js.map +1 -0
  502. package/dist/daemon/generateSummaries.js +1 -0
  503. package/dist/daemon/generateSummaries.js.map +1 -0
  504. package/dist/daemon/runFolderCapsuleBatch.js +1 -0
  505. package/dist/daemon/runFolderCapsuleBatch.js.map +1 -0
  506. package/dist/daemon/runIndexingBatch.js +1 -0
  507. package/dist/daemon/runIndexingBatch.js.map +1 -0
  508. package/dist/daemon/runKgBatch.js +9 -1
  509. package/dist/daemon/runKgBatch.js.map +1 -0
  510. package/dist/db/backup.js +1 -0
  511. package/dist/db/backup.js.map +1 -0
  512. package/dist/db/client.js +18 -3
  513. package/dist/db/client.js.map +1 -0
  514. package/dist/db/fileIndex.js +110 -152
  515. package/dist/db/fileIndex.js.map +1 -0
  516. package/dist/db/functionExtractors/extractFromJava.js +1 -0
  517. package/dist/db/functionExtractors/extractFromJava.js.map +1 -0
  518. package/dist/db/functionExtractors/extractFromJs.js +1 -0
  519. package/dist/db/functionExtractors/extractFromJs.js.map +1 -0
  520. package/dist/db/functionExtractors/extractFromTs.js +1 -0
  521. package/dist/db/functionExtractors/extractFromTs.js.map +1 -0
  522. package/dist/db/functionExtractors/extractFromXML.js +1 -0
  523. package/dist/db/functionExtractors/extractFromXML.js.map +1 -0
  524. package/dist/db/functionExtractors/index.js +1 -0
  525. package/dist/db/functionExtractors/index.js.map +1 -0
  526. package/dist/db/functionIndex.js +9 -0
  527. package/dist/db/functionIndex.js.map +1 -0
  528. package/dist/db/schema.js +314 -99
  529. package/dist/db/schema.js.map +1 -0
  530. package/dist/db/sqlTemplates.js +1 -0
  531. package/dist/db/sqlTemplates.js.map +1 -0
  532. package/dist/fileRules/builtins.js +1 -0
  533. package/dist/fileRules/builtins.js.map +1 -0
  534. package/dist/fileRules/classifyFile.js +1 -0
  535. package/dist/fileRules/classifyFile.js.map +1 -0
  536. package/dist/fileRules/codeAllowedExtensions.js +1 -0
  537. package/dist/fileRules/codeAllowedExtensions.js.map +1 -0
  538. package/dist/fileRules/detectFileType.js +1 -0
  539. package/dist/fileRules/detectFileType.js.map +1 -0
  540. package/dist/fileRules/fileClassifier.js +1 -0
  541. package/dist/fileRules/fileClassifier.js.map +1 -0
  542. package/dist/fileRules/fileExceptions.js +1 -0
  543. package/dist/fileRules/fileExceptions.js.map +1 -0
  544. package/dist/fileRules/ignoredExtensions.js +1 -0
  545. package/dist/fileRules/ignoredExtensions.js.map +1 -0
  546. package/dist/fileRules/ignoredPaths.js +48 -5
  547. package/dist/fileRules/ignoredPaths.js.map +1 -0
  548. package/dist/fileRules/queryTokenRules.js +176 -0
  549. package/dist/fileRules/queryTokenRules.js.map +1 -0
  550. package/dist/fileRules/searchPathClassification.js +58 -0
  551. package/dist/fileRules/searchPathClassification.js.map +1 -0
  552. package/dist/fileRules/shouldIgnoreFiles.js +1 -0
  553. package/dist/fileRules/shouldIgnoreFiles.js.map +1 -0
  554. package/dist/fileRules/stopWords.js +9 -0
  555. package/dist/fileRules/stopWords.js.map +1 -0
  556. package/dist/fileRules/wellKnownRepoFiles.js +1 -0
  557. package/dist/fileRules/wellKnownRepoFiles.js.map +1 -0
  558. package/dist/git/commitSummary.js +227 -0
  559. package/dist/git/commitSummary.js.map +1 -0
  560. package/dist/github/api.js +1 -0
  561. package/dist/github/api.js.map +1 -0
  562. package/dist/github/auth.js +1 -0
  563. package/dist/github/auth.js.map +1 -0
  564. package/dist/github/github.js +1 -0
  565. package/dist/github/github.js.map +1 -0
  566. package/dist/github/githubAuthCheck.js +1 -0
  567. package/dist/github/githubAuthCheck.js.map +1 -0
  568. package/dist/github/postComments.js +1 -0
  569. package/dist/github/postComments.js.map +1 -0
  570. package/dist/github/repo.js +15 -24
  571. package/dist/github/repo.js.map +1 -0
  572. package/dist/github/token.js +1 -0
  573. package/dist/github/token.js.map +1 -0
  574. package/dist/github/types.js +1 -0
  575. package/dist/github/types.js.map +1 -0
  576. package/dist/index.js +318 -37
  577. package/dist/index.js.map +1 -0
  578. package/dist/lib/generate.js +264 -20
  579. package/dist/lib/generate.js.map +1 -0
  580. package/dist/lib/generateFolderCapsules.js +1 -0
  581. package/dist/lib/generateFolderCapsules.js.map +1 -0
  582. package/dist/lib/ollamaModelPolicy.js +59 -0
  583. package/dist/lib/ollamaModelPolicy.js.map +1 -0
  584. package/dist/lib/spinner.js +29 -9
  585. package/dist/lib/spinner.js.map +1 -0
  586. package/dist/modelSetup.js +25 -78
  587. package/dist/modelSetup.js.map +1 -0
  588. package/dist/pipeline/modules/changeLogModule.js +10 -1
  589. package/dist/pipeline/modules/changeLogModule.js.map +1 -0
  590. package/dist/pipeline/modules/cleanupModule.js +1 -0
  591. package/dist/pipeline/modules/cleanupModule.js.map +1 -0
  592. package/dist/pipeline/modules/codeTransformModule.js +10 -16
  593. package/dist/pipeline/modules/codeTransformModule.js.map +1 -0
  594. package/dist/pipeline/modules/commentModule.js +12 -0
  595. package/dist/pipeline/modules/commentModule.js.map +1 -0
  596. package/dist/pipeline/modules/commitSuggesterModule.js +82 -12
  597. package/dist/pipeline/modules/commitSuggesterModule.js.map +1 -0
  598. package/dist/pipeline/modules/contextReviewModule.js +12 -1
  599. package/dist/pipeline/modules/contextReviewModule.js.map +1 -0
  600. package/dist/pipeline/modules/dialogAnswerModule.js +58 -0
  601. package/dist/pipeline/modules/dialogAnswerModule.js.map +1 -0
  602. package/dist/pipeline/modules/fileSearchModule.js +5 -143
  603. package/dist/pipeline/modules/fileSearchModule.js.map +1 -0
  604. package/dist/pipeline/modules/finalAnswerModule.js +1176 -151
  605. package/dist/pipeline/modules/finalAnswerModule.js.map +1 -0
  606. package/dist/pipeline/modules/kgModule.js +18 -1
  607. package/dist/pipeline/modules/kgModule.js.map +1 -0
  608. package/dist/pipeline/modules/planAnswerModule.js +99 -0
  609. package/dist/pipeline/modules/planAnswerModule.js.map +1 -0
  610. package/dist/pipeline/modules/readFileModule.js +300 -0
  611. package/dist/pipeline/modules/readFileModule.js.map +1 -0
  612. package/dist/pipeline/modules/reviewModule.js +10 -1
  613. package/dist/pipeline/modules/reviewModule.js.map +1 -0
  614. package/dist/pipeline/modules/searchDbModule.js +159 -0
  615. package/dist/pipeline/modules/searchDbModule.js.map +1 -0
  616. package/dist/pipeline/modules/searchListDirectoryModule.js +62 -0
  617. package/dist/pipeline/modules/searchListDirectoryModule.js.map +1 -0
  618. package/dist/pipeline/modules/searchModuleShared.js +71 -0
  619. package/dist/pipeline/modules/searchModuleShared.js.map +1 -0
  620. package/dist/pipeline/modules/searchRegexModule.js +59 -0
  621. package/dist/pipeline/modules/searchRegexModule.js.map +1 -0
  622. package/dist/pipeline/modules/semanticAnalysisModule.js +185 -28
  623. package/dist/pipeline/modules/semanticAnalysisModule.js.map +1 -0
  624. package/dist/pipeline/modules/summaryModule.js +11 -1
  625. package/dist/pipeline/modules/summaryModule.js.map +1 -0
  626. package/dist/pipeline/registry/moduleRegistry.js +9 -0
  627. package/dist/pipeline/registry/moduleRegistry.js.map +1 -0
  628. package/dist/pipeline/runModulePipeline.js +1 -0
  629. package/dist/pipeline/runModulePipeline.js.map +1 -0
  630. package/dist/scripts/dbScriptSupport.js +172 -0
  631. package/dist/scripts/dbScriptSupport.js.map +1 -0
  632. package/dist/scripts/dbcheck.js +173 -267
  633. package/dist/scripts/dbcheck.js.map +1 -0
  634. package/dist/scripts/dboverview.js +161 -0
  635. package/dist/scripts/dboverview.js.map +1 -0
  636. package/dist/scripts/migrateDb.js +1 -0
  637. package/dist/scripts/migrateDb.js.map +1 -0
  638. package/dist/search/SearchOrchestrator.js +928 -0
  639. package/dist/search/SearchOrchestrator.js.map +1 -0
  640. package/dist/search/sharedRankingPolicy.js +283 -0
  641. package/dist/search/sharedRankingPolicy.js.map +1 -0
  642. package/dist/setup/reindexOwner.js +97 -0
  643. package/dist/setup/reindexOwner.js.map +1 -0
  644. package/dist/setup/setupOwner.js +100 -0
  645. package/dist/setup/setupOwner.js.map +1 -0
  646. package/dist/shell/dialogUi.js +81 -0
  647. package/dist/shell/dialogUi.js.map +1 -0
  648. package/dist/shellSession.js +126 -0
  649. package/dist/shellSession.js.map +1 -0
  650. package/dist/status/statusOwner.js +239 -0
  651. package/dist/status/statusOwner.js.map +1 -0
  652. package/dist/testing/contextEval.js +514 -0
  653. package/dist/testing/contextEval.js.map +1 -0
  654. package/dist/testing/fixtures/transform/small-file.input.js +5 -0
  655. package/dist/testing/fixtures/transform/small-file.input.js.map +1 -0
  656. package/dist/testing/harnessArtifacts.js +112 -0
  657. package/dist/testing/harnessArtifacts.js.map +1 -0
  658. package/dist/testing/llmTraceSession.js +67 -0
  659. package/dist/testing/llmTraceSession.js.map +1 -0
  660. package/dist/testing/registerDevCliCommands.js +43 -0
  661. package/dist/testing/registerDevCliCommands.js.map +1 -0
  662. package/dist/testing/runDiagnosis.js +248 -0
  663. package/dist/testing/runDiagnosis.js.map +1 -0
  664. package/dist/testing/runtimeLogReader.js +144 -0
  665. package/dist/testing/runtimeLogReader.js.map +1 -0
  666. package/dist/testing/testCommands.js +35 -303
  667. package/dist/testing/testCommands.js.map +1 -0
  668. package/dist/testing/testRegistry.js +233 -0
  669. package/dist/testing/testRegistry.js.map +1 -0
  670. package/dist/types.js +1 -0
  671. package/dist/types.js.map +1 -0
  672. package/dist/utils/buildContextualPrompt.js +26 -75
  673. package/dist/utils/buildContextualPrompt.js.map +1 -0
  674. package/dist/utils/changeLogPrompt.js +1 -0
  675. package/dist/utils/changeLogPrompt.js.map +1 -0
  676. package/dist/utils/checkModel.js +17 -92
  677. package/dist/utils/checkModel.js.map +1 -0
  678. package/dist/utils/commentMap.js +1 -0
  679. package/dist/utils/commentMap.js.map +1 -0
  680. package/dist/utils/compileSearchQuery.js +23 -9
  681. package/dist/utils/compileSearchQuery.js.map +1 -0
  682. package/dist/utils/consolePresentation.js +208 -0
  683. package/dist/utils/consolePresentation.js.map +1 -0
  684. package/dist/utils/contentUtils.js +17 -2
  685. package/dist/utils/contentUtils.js.map +1 -0
  686. package/dist/utils/debugContext.js +1 -0
  687. package/dist/utils/debugContext.js.map +1 -0
  688. package/dist/utils/dialogState.js +201 -0
  689. package/dist/utils/dialogState.js.map +1 -0
  690. package/dist/utils/editor.js +1 -0
  691. package/dist/utils/editor.js.map +1 -0
  692. package/dist/utils/executionEvidence.js +50 -0
  693. package/dist/utils/executionEvidence.js.map +1 -0
  694. package/dist/utils/extractFileReferences.js +140 -6
  695. package/dist/utils/extractFileReferences.js.map +1 -0
  696. package/dist/utils/fileEvidenceCache.js +50 -0
  697. package/dist/utils/fileEvidenceCache.js.map +1 -0
  698. package/dist/utils/fileTree.js +1 -0
  699. package/dist/utils/fileTree.js.map +1 -0
  700. package/dist/utils/loadRelevantFolderCapsules.js +35 -5
  701. package/dist/utils/loadRelevantFolderCapsules.js.map +1 -0
  702. package/dist/utils/log.js +10 -1
  703. package/dist/utils/log.js.map +1 -0
  704. package/dist/utils/normalizeData.js +1 -0
  705. package/dist/utils/normalizeData.js.map +1 -0
  706. package/dist/utils/ollamaModelStatus.js +28 -0
  707. package/dist/utils/ollamaModelStatus.js.map +1 -0
  708. package/dist/utils/ollamaService.js +294 -0
  709. package/dist/utils/ollamaService.js.map +1 -0
  710. package/dist/utils/outputFormatter.js +1 -0
  711. package/dist/utils/outputFormatter.js.map +1 -0
  712. package/dist/utils/parseTaggedContent.js +1 -0
  713. package/dist/utils/parseTaggedContent.js.map +1 -0
  714. package/dist/utils/planActions.js +27 -46
  715. package/dist/utils/planActions.js.map +1 -0
  716. package/dist/utils/promptBuilderHelper.js +1 -0
  717. package/dist/utils/promptBuilderHelper.js.map +1 -0
  718. package/dist/utils/promptLogHelper.js +29 -13
  719. package/dist/utils/promptLogHelper.js.map +1 -0
  720. package/dist/utils/queryAnchors.js +71 -0
  721. package/dist/utils/queryAnchors.js.map +1 -0
  722. package/dist/utils/repoIdentity.js +82 -0
  723. package/dist/utils/repoIdentity.js.map +1 -0
  724. package/dist/utils/repoKey.js +1 -0
  725. package/dist/utils/repoKey.js.map +1 -0
  726. package/dist/utils/resolveTargetsToFiles.js +1 -0
  727. package/dist/utils/resolveTargetsToFiles.js.map +1 -0
  728. package/dist/utils/resumeContext.js +219 -0
  729. package/dist/utils/resumeContext.js.map +1 -0
  730. package/dist/utils/resumeState.js +310 -0
  731. package/dist/utils/resumeState.js.map +1 -0
  732. package/dist/utils/rollingPlan.js +118 -0
  733. package/dist/utils/rollingPlan.js.map +1 -0
  734. package/dist/utils/runQueryWithDaemonControl.js +11 -3
  735. package/dist/utils/runQueryWithDaemonControl.js.map +1 -0
  736. package/dist/utils/runtimeLogger.js +252 -0
  737. package/dist/utils/runtimeLogger.js.map +1 -0
  738. package/dist/utils/sanitizeQuery.js +1 -0
  739. package/dist/utils/sanitizeQuery.js.map +1 -0
  740. package/dist/utils/sharedUtils.js +1 -0
  741. package/dist/utils/sharedUtils.js.map +1 -0
  742. package/dist/utils/sleep.js +1 -0
  743. package/dist/utils/sleep.js.map +1 -0
  744. package/dist/utils/splitCodeIntoChunk.js +1 -0
  745. package/dist/utils/splitCodeIntoChunk.js.map +1 -0
  746. package/dist/utils/time.js +66 -0
  747. package/dist/utils/time.js.map +1 -0
  748. package/dist/utils/verifyFocusPreference.js +107 -0
  749. package/dist/utils/verifyFocusPreference.js.map +1 -0
  750. package/dist/utils/vscode.js +1 -0
  751. package/dist/utils/vscode.js.map +1 -0
  752. package/dist/workflow/workflowResolver.js +1 -0
  753. package/dist/workflow/workflowResolver.js.map +1 -0
  754. package/dist/workflow/workflowRunner.js +1 -0
  755. package/dist/workflow/workflowRunner.js.map +1 -0
  756. package/package.json +3 -3
  757. package/dist/agents/MainAgent.js +0 -1886
  758. package/dist/agents/contextReviewStep.js +0 -101
  759. package/dist/agents/finalPlanGenStep.js +0 -107
  760. package/dist/agents/structuralAnalysisStep.js +0 -46
  761. package/dist/agents/validationAnalysisStep.js +0 -87
  762. package/dist/pipeline/modules/chunkManagerModule.js +0 -24
  763. package/dist/pipeline/modules/cleanGeneratedTestsModule.js +0 -33
  764. package/dist/pipeline/modules/fileReaderModule.js +0 -72
  765. package/dist/pipeline/modules/gatherInfoModule.js +0 -181
  766. package/dist/pipeline/modules/generateTestsModule.js +0 -68
  767. package/dist/pipeline/modules/preserveCodeModule.js +0 -195
  768. package/dist/pipeline/modules/refactorModule.js +0 -40
  769. package/dist/pipeline/modules/repairTestsModule.js +0 -48
  770. package/dist/pipeline/modules/runTestsModule.js +0 -37
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSearchRouting.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/agentSearchRouting.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers modular-agent search routing and candidate shaping behavior.\n *\n * Why this file exists:\n * - search mode routing should stay local to `agent/search/*`\n * - lane-specific retention should be proven without exercising the full runtime loop\n */\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { afterEach, describe, expect, it } from \"vitest\";\nimport { createAgentMemory } from \"../../agents/agentMemory.js\";\nimport { finalizeLanePacket } from \"../../agent/search/candidateRetentionPolicy.js\";\nimport { runSearchAuto, runSearchDb } from \"../../agent/search/index.js\";\nimport { classifySearchLane } from \"../../agent/search/laneClassifier.js\";\nimport { chooseSearchRoute } from \"../../agent/search/routePolicy.js\";\nimport { buildSearchContext } from \"../../agent/search/searchContext.js\";\nimport { tokenizeSearchTerms } from \"../../agent/search/shared.js\";\n\nconst tempDirs: string[] = [];\n\nafterEach(() => {\n while (tempDirs.length > 0) {\n const dir = tempDirs.pop();\n if (dir) fs.rmSync(dir, { recursive: true, force: true });\n }\n});\n\ndescribe(\"runSearchAuto\", () => {\n it(\"routes directory-listing questions to the directory lane\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-routing-\"));\n tempDirs.push(repoRoot);\n fs.mkdirSync(path.join(repoRoot, \"cli\", \"src\"), { recursive: true });\n fs.writeFileSync(path.join(repoRoot, \"cli\", \"src\", \"index.ts\"), \"export const ok = true;\\n\", \"utf8\");\n fs.writeFileSync(path.join(repoRoot, \"README.md\"), \"# Repo\\n\", \"utf8\");\n const memory = createAgentMemory(\"list files in cli/src\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n memory.task.softHints = [\"cli/src\"];\n\n const packet = await runSearchAuto(memory, \"list files in cli/src\");\n\n expect(packet.lane).toBe(\"directory\");\n expect(packet.summary).toContain(\"Contents of\");\n expect(packet.directoryEntries?.some((entry) => entry.name === \"index.ts\")).toBe(true);\n });\n\n it(\"routes quoted snippet questions to the fragment lane\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-fragment-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"sample.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"const currentQuestionId = task.currentQuestionId;\\n\", \"utf8\");\n const memory = createAgentMemory(\"Find \\\"currentQuestionId = task.currentQuestionId\\\"\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"currentQuestionId\"];\n\n const packet = await runSearchAuto(memory, \"Find \\\"currentQuestionId = task.currentQuestionId\\\"\");\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.matches).toEqual(expect.arrayContaining([\n expect.objectContaining({\n filePath: targetFile,\n line: 1,\n matchKind: \"fragment-content\",\n }),\n ]));\n });\n\n it(\"keeps fragment search wide enough to retain concrete test files over docs\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-fragment-width-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"__tests__\", \"search\", \"SearchOrchestrator.test.ts\");\n const evalFile = path.join(repoRoot, \"cli\", \"src\", \"commands\", \"evalCommands.ts\");\n const registryFile = path.join(repoRoot, \"cli\", \"src\", \"testing\", \"testRegistry.ts\");\n const docFile = path.join(repoRoot, \"optimize.md\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.mkdirSync(path.dirname(evalFile), { recursive: true });\n fs.mkdirSync(path.dirname(registryFile), { recursive: true });\n const fragment = \"returns raw operator-pattern matches without semantic guessing\";\n fs.writeFileSync(targetFile, `it(\"${fragment}\", () => {});\\n`, \"utf8\");\n fs.writeFileSync(evalFile, `query: \"\\\\\"${fragment}\\\\\"\",\\n`, \"utf8\");\n fs.writeFileSync(registryFile, `testName: \"${fragment}\",\\n`, \"utf8\");\n fs.writeFileSync(docFile, `${fragment}\\n`, \"utf8\");\n const memory = createAgentMemory(`\"${fragment}\"`, repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n\n const packet = await runSearchAuto(memory, `\"${fragment}\"`);\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.topHits?.[0]?.filePath).toBe(targetFile);\n expect(packet.topHits?.some((hit) => hit.filePath === docFile)).toBe(false);\n });\n\n it(\"prefers direct test ownership over meta snippet fixtures in fragment ranking\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-fragment-meta-\"));\n tempDirs.push(repoRoot);\n const directOwner = path.join(repoRoot, \"cli\", \"src\", \"__tests__\", \"search\", \"SearchOrchestrator.test.ts\");\n const metaFixture = path.join(repoRoot, \"cli\", \"src\", \"__tests__\", \"agents\", \"agentSearchRouting.test.ts\");\n fs.mkdirSync(path.dirname(directOwner), { recursive: true });\n fs.mkdirSync(path.dirname(metaFixture), { recursive: true });\n const fragment = \"returns raw operator-pattern matches without semantic guessing\";\n fs.writeFileSync(directOwner, `it(\"${fragment}\", () => {});\\n`, \"utf8\");\n fs.writeFileSync(metaFixture, `const fragment = \"${fragment}\";\\nquery: \"\\\\\"${fragment}\\\\\"\",\\n`, \"utf8\");\n const memory = createAgentMemory(`\"${fragment}\"`, repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n\n const packet = await runSearchAuto(memory, `\"${fragment}\"`);\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.topHits?.[0]?.filePath).toBe(directOwner);\n });\n\n it(\"excludes dist outputs, source maps, and harness mirrors from fragment search\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-fragment-artifacts-\"));\n tempDirs.push(repoRoot);\n const sourceFile = path.join(repoRoot, \"cli\", \"src\", \"__tests__\", \"search\", \"SearchOrchestrator.test.ts\");\n const distFile = path.join(repoRoot, \"cli\", \"dist\", \"__tests__\", \"search\", \"SearchOrchestrator.test.js\");\n const mapFile = `${distFile}.map`;\n fs.mkdirSync(path.dirname(sourceFile), { recursive: true });\n fs.mkdirSync(path.dirname(distFile), { recursive: true });\n const fragment = \"returns raw operator-pattern matches without semantic guessing\";\n fs.writeFileSync(sourceFile, `it(\"${fragment}\", () => {});\\n`, \"utf8\");\n fs.writeFileSync(distFile, `it(\"${fragment}\", () => {});\\n`, \"utf8\");\n fs.writeFileSync(mapFile, JSON.stringify({ version: 3, file: \"SearchOrchestrator.test.js\" }), \"utf8\");\n const memory = createAgentMemory(`\"${fragment}\"`, repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n\n const packet = await runSearchAuto(memory, `\"${fragment}\"`);\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.filePaths).toContain(sourceFile);\n expect(packet.filePaths).not.toContain(distFile);\n expect(packet.filePaths).not.toContain(mapFile);\n });\n\n it(\"keeps explicit file targets on exact-target even when the query also includes a quoted snippet\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-explicit-fragment-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"sample.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"const currentQuestionId = task.currentQuestionId;\\n\", \"utf8\");\n const memory = createAgentMemory(`Explain sample.ts \"currentQuestionId = task.currentQuestionId\"`, repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"sample.ts\"];\n\n const packet = await runSearchAuto(memory, `Explain sample.ts \"currentQuestionId = task.currentQuestionId\"`);\n\n expect(packet.lane).toBe(\"exact-target\");\n expect(packet.filePaths).toContain(targetFile);\n });\n\n it(\"routes operator-pattern questions to the regex lane\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-regex-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"search.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"function runSearch() {}\\nfunction semanticSearchFiles() {}\\n\", \"utf8\");\n const memory = createAgentMemory(\"runSearch|semanticSearchFiles\", repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n const packet = await runSearchAuto(memory, \"runSearch|semanticSearchFiles\");\n\n expect(packet.lane).toBe(\"regex\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.matches).toEqual(expect.arrayContaining([\n expect.objectContaining({\n filePath: targetFile,\n line: 2,\n matchKind: \"regex-content\",\n }),\n ]));\n });\n\n it(\"excludes dist outputs and source maps from regex search\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-regex-artifacts-\"));\n tempDirs.push(repoRoot);\n const sourceFile = path.join(repoRoot, \"cli\", \"src\", \"search.ts\");\n const distFile = path.join(repoRoot, \"cli\", \"dist\", \"search.js\");\n const mapFile = `${distFile}.map`;\n fs.mkdirSync(path.dirname(sourceFile), { recursive: true });\n fs.mkdirSync(path.dirname(distFile), { recursive: true });\n fs.writeFileSync(sourceFile, \"function runSearch() {}\\nfunction semanticSearchFiles() {}\\n\", \"utf8\");\n fs.writeFileSync(distFile, \"function runSearch() {}\\nfunction semanticSearchFiles() {}\\n\", \"utf8\");\n fs.writeFileSync(mapFile, JSON.stringify({ version: 3, file: \"search.js\" }), \"utf8\");\n const memory = createAgentMemory(\"runSearch|semanticSearchFiles\", repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n const packet = await runSearchAuto(memory, \"runSearch|semanticSearchFiles\");\n\n expect(packet.lane).toBe(\"regex\");\n expect(packet.filePaths).toContain(sourceFile);\n expect(packet.filePaths).not.toContain(distFile);\n expect(packet.filePaths).not.toContain(mapFile);\n });\n\n it(\"routes broad natural-language owner questions to the shell-content lane\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shell-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"state\", \"memory.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"export const config = { maxTurns: 12, turnCount: 0 };\\n\", \"utf8\");\n const memory = createAgentMemory(\"where do I set the max count for how many loops the agent can run?\", repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n const packet = await runSearchDb(memory, \"where do I set the max count for how many loops the agent can run?\");\n\n expect(packet.lane).toBe(\"shell-content\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.matches).toEqual(expect.arrayContaining([\n expect.objectContaining({\n filePath: targetFile,\n matchKind: \"shell-content\",\n }),\n ]));\n });\n\n it(\"keeps semantic search matches on weak-signal questions\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-semantic-matches-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"state\", \"memory.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"export const config = { maxTurns: 12, turnCount: 0 };\\n\", \"utf8\");\n const memory = createAgentMemory(\"agent loop limit configuration max count\", repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n const packet = await runSearchAuto(memory, \"agent loop limit configuration max count\");\n\n expect(packet.lane).toBe(\"semantic\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.matches).toEqual(expect.arrayContaining([\n expect.objectContaining({\n filePath: targetFile,\n line: 1,\n matchKind: \"semantic-content\",\n }),\n ]));\n });\n\n it(\"uses search term groups to continue semantic search when the base query is weak\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-term-groups-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"testing\", \"registerDevCliCommands.ts\");\n const distractorFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"actions\", \"index.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.mkdirSync(path.dirname(distractorFile), { recursive: true });\n fs.writeFileSync(\n targetFile,\n [\n \"/**\",\n \" * Registers dev CLI commands.\",\n \" */\",\n \"export function registerDevCliCommands() {}\",\n \"export const testCommands = registerDevCliCommands;\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n fs.writeFileSync(\n distractorFile,\n [\n \"/**\",\n \" * Generic action registry.\",\n \" */\",\n \"export function buildActionMenu() {}\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n const query = \"Explain how test execution is wired\";\n const memory = createAgentMemory(query, repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n memory.task.searchTermGroups = [\n { kind: \"generic\", terms: [\"repo\", \"test\"] },\n { kind: \"repo-anchor\", terms: [\"registerDevCliCommands\", \"testCommands\", \"register\"] },\n ];\n\n const packet = await runSearchDb(memory, query);\n\n expect(packet.lane).toBe(\"semantic\");\n expect(packet.filePaths).toContain(targetFile);\n expect(packet.debug?.batchDebug).toEqual([\n expect.objectContaining({\n query,\n continued: true,\n strongReason: \"evidence is still driven by weak semantic terms\",\n }),\n expect.objectContaining({\n query: \"registerDevCliCommands testCommands register\",\n kind: \"repo-anchor\",\n continued: false,\n strongEnough: true,\n }),\n ]);\n });\n\n it(\"filters shared stop words before shell-content ranking on repo test-entry queries\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shell-stopwords-\"));\n tempDirs.push(repoRoot);\n const registerFile = path.join(repoRoot, \"cli\", \"src\", \"testing\", \"registerDevCliCommands.ts\");\n const testCommandsFile = path.join(repoRoot, \"cli\", \"src\", \"testing\", \"testCommands.ts\");\n const distractorFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"actions\", \"index.ts\");\n fs.mkdirSync(path.dirname(registerFile), { recursive: true });\n fs.mkdirSync(path.dirname(distractorFile), { recursive: true });\n fs.writeFileSync(\n registerFile,\n [\n \"/**\",\n \" * Registers dev CLI commands for testing and eval work.\",\n \" */\",\n \"export function registerDevCliCommands() {}\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n fs.writeFileSync(\n testCommandsFile,\n [\n \"/**\",\n \" * Defines test entry points and test command wiring.\",\n \" */\",\n \"export function registerTestingCommands() {}\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n fs.writeFileSync(\n distractorFile,\n [\n \"/**\",\n \" * Why this file exists:\",\n \" */\",\n \"export function buildActionMenu() {}\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n const query = \"How does this repo run tests and where are the test entry points configured?\";\n const memory = createAgentMemory(query, repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n expect(tokenizeSearchTerms(query)).toEqual(expect.arrayContaining([\"repo\", \"tests\", \"test\", \"entry\", \"points\", \"configured\"]));\n expect(tokenizeSearchTerms(query)).not.toEqual(expect.arrayContaining([\"this\", \"how\", \"does\", \"run\"]));\n\n const packet = await runSearchDb(memory, query);\n\n expect(packet.lane).toBe(\"shell-content\");\n expect(packet.filePaths).toEqual(expect.arrayContaining([registerFile, testCommandsFile]));\n expect(packet.topHits?.slice(0, 2).map((hit) => hit.filePath)).toEqual(\n expect.arrayContaining([registerFile, testCommandsFile])\n );\n expect(packet.topHits?.[0]?.filePath).not.toBe(distractorFile);\n expect(packet.matches?.some((match) =>\n (match.reasons ?? []).includes(\"term:this\")\n )).toBe(false);\n });\n\n it(\"falls back to semantic when shell-content only finds generic weak matches\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shell-fallback-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"runtime\", \"config.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(\n targetFile,\n [\n \"/**\",\n \" * Generic runtime config holder.\",\n \" */\",\n \"export const runtimeConfig = { agent: true, config: true };\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n const query = \"where is the agent config in this repo?\";\n const memory = createAgentMemory(query, repoRoot, repoRoot);\n memory.task.queryScope = \"general\";\n\n const packet = await runSearchDb(memory, query);\n\n expect(packet.lane).toBe(\"semantic\");\n expect(packet.filePaths).toContain(targetFile);\n });\n\n it(\"reranks a wider semantic frontier before returning the visible shortlist\", () => {\n const memory = createAgentMemory(\"where do I set the max count for how many loops the agent can run?\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"general\";\n const genericFiles = Array.from({ length: 11 }, (_, index) => `/repo/cli/src/agents/generic-${index}.ts`);\n const memoryFile = \"/repo/cli/src/agent/state/memory.ts\";\n const packet = finalizeLanePacket(\"semantic\", memory, {\n lane: \"semantic\",\n query: \"where do I set the max count for how many loops the agent can run?\",\n filePaths: [...genericFiles, memoryFile],\n matches: [\n {\n filePath: genericFiles[0],\n line: 1,\n snippet: \"export class MainAgent {}\",\n matchKind: \"semantic-content\",\n reasons: [\"term:agent\"],\n },\n {\n filePath: memoryFile,\n line: 40,\n snippet: \" maxTurns: 12,\",\n matchKind: \"semantic-content\",\n reasons: [\"term:maxTurns\", \"term:turnCount\"],\n },\n ],\n }, 8);\n\n expect(packet.filePaths).toHaveLength(8);\n expect(packet.filePaths[0]).toBe(memoryFile);\n expect(packet.filePaths).toContain(memoryFile);\n expect(packet.topHits?.[0]).toEqual(expect.objectContaining({\n filePath: memoryFile,\n }));\n });\n});\n\ndescribe(\"chooseSearchRoute\", () => {\n it(\"routes resolved folder targets to the directory lane when listing wording is present\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-route-folder-\"));\n tempDirs.push(repoRoot);\n const guardsDir = path.join(repoRoot, \"cli\", \"src\", \"agents\", \"guards\");\n fs.mkdirSync(guardsDir, { recursive: true });\n fs.writeFileSync(path.join(guardsDir, \"executionPolicyResolver.ts\"), \"export const ok = true;\\n\", \"utf8\");\n const memory = createAgentMemory(\"list files in cli/src/agents/guards\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [guardsDir];\n\n const context = buildSearchContext(memory, \"list files in cli/src/agents/guards\", {\n allowDirectoryLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision).toEqual(expect.objectContaining({\n lane: \"directory\",\n resolvedTarget: guardsDir,\n }));\n expect(chooseSearchRoute(context)).toBe(\"directory\");\n });\n\n it(\"prefers exact-target when explicit targets are present\", () => {\n const memory = createAgentMemory(\"Explain MainAgent.ts\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"MainAgent.ts\"];\n\n const context = buildSearchContext(memory, \"Explain the file\", {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision).toEqual(expect.objectContaining({\n lane: \"exact-target\",\n resolvedTarget: \"MainAgent.ts\",\n }));\n expect(chooseSearchRoute(context)).toBe(\"exact-target\");\n });\n\n it(\"uses exact-target for unresolved explicit targets before semantic fallback\", () => {\n const memory = createAgentMemory(\"Explain guards\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"guards\"];\n\n const context = buildSearchContext(memory, \"Explain guards\", {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision).toEqual(expect.objectContaining({\n lane: \"exact-target\",\n resolvedTarget: \"guards\",\n }));\n expect(chooseSearchRoute(context)).toBe(\"exact-target\");\n });\n\n it(\"does not route listing verbs to the directory lane when the hint is not folder-like\", () => {\n const memory = createAgentMemory(\"list files for retry policy\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"general\";\n memory.task.softHints = [\"retry-policy\"];\n\n const context = buildSearchContext(memory, \"list files for retry policy\", {\n allowDirectoryLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"semantic\");\n expect(chooseSearchRoute(context)).toBe(\"semantic\");\n });\n\n it(\"does not route file paths with listing wording to the directory lane\", () => {\n const memory = createAgentMemory(\"show contents of cli/src/agent/search/index.ts\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"cli/src/agent/search/index.ts\"];\n\n const context = buildSearchContext(memory, \"show contents of cli/src/agent/search/index.ts\", {\n allowDirectoryLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"exact-target\");\n expect(chooseSearchRoute(context)).toBe(\"exact-target\");\n });\n\n it(\"uses the regex lane for regex-like queries when enabled\", () => {\n const memory = createAgentMemory(\"runSearch|semanticSearchFiles\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"general\";\n\n const context = buildSearchContext(memory, \"runSearch|semanticSearchFiles\", {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"regex\");\n expect(chooseSearchRoute(context)).toBe(\"regex\");\n });\n\n it(\"uses the shell-content lane for broad owner questions\", () => {\n const memory = createAgentMemory(\"where do I set the max count for how many loops the agent can run?\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"general\";\n\n const context = buildSearchContext(memory, \"where do I set the max count for how many loops the agent can run?\", {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"shell-content\");\n expect(chooseSearchRoute(context)).toBe(\"shell-content\");\n });\n\n it(\"keeps broad architecture summaries on semantic instead of shell-content\", () => {\n const memory = createAgentMemory(\"summarize repo architecture and identify weak coupling points\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"broad-repo\";\n\n const context = buildSearchContext(memory, \"summarize repo architecture and identify weak coupling points\", {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"semantic\");\n expect(chooseSearchRoute(context)).toBe(\"semantic\");\n });\n\n it(\"uses the fragment lane for quoted snippets\", () => {\n const memory = createAgentMemory('Find \"currentQuestionId = task.currentQuestionId\"', \"/repo\", \"/repo\");\n memory.task.queryScope = \"targeted\";\n\n const context = buildSearchContext(memory, 'Find \"currentQuestionId = task.currentQuestionId\"', {\n allowDirectoryLane: true,\n allowRegexLane: true,\n });\n const decision = classifySearchLane(context);\n\n expect(decision.lane).toBe(\"fragment\");\n expect(chooseSearchRoute(context)).toBe(\"fragment\");\n });\n});\n\ndescribe(\"runSearchDb\", () => {\n it(\"salvages concrete exact targets even when another target is ambiguous\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-fallback-\"));\n tempDirs.push(repoRoot);\n const cliIndex = path.join(repoRoot, \"cli\", \"src\", \"index.ts\");\n const webIndex = path.join(repoRoot, \"web\", \"src\", \"index.ts\");\n const factoryFile = path.join(repoRoot, \"cli\", \"src\", \"commands\", \"factory.ts\");\n const daemonFile = path.join(repoRoot, \"cli\", \"src\", \"runQueryWithDaemonControl.ts\");\n fs.mkdirSync(path.dirname(cliIndex), { recursive: true });\n fs.mkdirSync(path.dirname(webIndex), { recursive: true });\n fs.mkdirSync(path.dirname(factoryFile), { recursive: true });\n fs.writeFileSync(cliIndex, \"export const cli = true;\\n\", \"utf8\");\n fs.writeFileSync(webIndex, \"export const web = true;\\n\", \"utf8\");\n fs.writeFileSync(factoryFile, \"export const factory = true;\\n\", \"utf8\");\n fs.writeFileSync(daemonFile, \"export const daemon = true;\\n\", \"utf8\");\n\n const memory = createAgentMemory(\"Summarize CLI architecture\", repoRoot, repoRoot);\n memory.task.queryScope = \"multi-file\";\n memory.task.explicitTargets = [\"index.ts\", \"commands/factory.ts\", \"runQueryWithDaemonControl.ts\"];\n\n const packet = await runSearchDb(memory, \"Summarize CLI architecture\", 5);\n\n expect(packet.lane).toBe(\"exact-target\");\n expect(packet.filePaths).toContain(cliIndex);\n expect(packet.filePaths).toContain(webIndex);\n expect(packet.filePaths).toContain(factoryFile);\n expect(packet.filePaths).toContain(daemonFile);\n expect(packet.filePaths).not.toContain(path.join(repoRoot, \"README.md\"));\n });\n\n it(\"uses the fragment lane for quoted snippets without dispatching to regex or directory search\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-db-fragment-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"sample.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"const currentQuestionId = task.currentQuestionId;\\n\", \"utf8\");\n const memory = createAgentMemory(\"Find \\\"currentQuestionId = task.currentQuestionId\\\"\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n\n const packet = await runSearchDb(memory, \"Find \\\"currentQuestionId = task.currentQuestionId\\\"\");\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.filePaths).toContain(targetFile);\n });\n\n it(\"does not read eval artifacts for quoted snippet matches\", async () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-ignore-artifacts-\"));\n tempDirs.push(repoRoot);\n const sourceFile = path.join(repoRoot, \"cli\", \"src\", \"sample.ts\");\n const traceFile = path.join(repoRoot, \"artifacts\", \"evals\", \"case1\", \"llm_calls\", \"0001_agent.understand.json\");\n fs.mkdirSync(path.dirname(sourceFile), { recursive: true });\n fs.mkdirSync(path.dirname(traceFile), { recursive: true });\n fs.writeFileSync(sourceFile, \"return \\\"returns raw operator-pattern matches without semantic guessing\\\";\\n\", \"utf8\");\n fs.writeFileSync(traceFile, \"{\\\"query\\\":\\\"returns raw operator-pattern matches without semantic guessing\\\"}\\n\", \"utf8\");\n const memory = createAgentMemory(\"\\\"returns raw operator-pattern matches without semantic guessing\\\"\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n\n const packet = await runSearchDb(memory, \"\\\"returns raw operator-pattern matches without semantic guessing\\\"\");\n\n expect(packet.lane).toBe(\"fragment\");\n expect(packet.filePaths).toContain(sourceFile);\n expect(packet.filePaths).not.toContain(traceFile);\n });\n});\n\ndescribe(\"candidateRetentionPolicy\", () => {\n it(\"injects well-known repo files only for sparse semantic repo-wide retrieval\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-semantic-fallback-\"));\n tempDirs.push(repoRoot);\n const loopFile = path.join(repoRoot, \"cli\", \"src\", \"agent\", \"runtime\", \"runAgentLoop.ts\");\n fs.mkdirSync(path.dirname(loopFile), { recursive: true });\n fs.writeFileSync(loopFile, \"export const loop = true;\\n\", \"utf8\");\n fs.writeFileSync(path.join(repoRoot, \"README.md\"), \"# Repo\\n\", \"utf8\");\n fs.writeFileSync(path.join(repoRoot, \"package.json\"), \"{ \\\"name\\\": \\\"repo\\\" }\\n\", \"utf8\");\n const memory = createAgentMemory(\"Explain the repo structure\", repoRoot, repoRoot);\n memory.task.queryScope = \"broad-repo\";\n\n const packet = finalizeLanePacket(\"semantic\", memory, {\n lane: \"semantic\",\n query: \"Explain the repo structure\",\n filePaths: [loopFile],\n }, 5);\n\n expect(packet.filePaths).toContain(path.join(repoRoot, \"README.md\"));\n });\n\n it(\"does not inject repo defaults into exact-target results\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-exact-fallback-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"cli\", \"src\", \"commands\", \"EvalReportCmd.ts\");\n fs.mkdirSync(path.dirname(targetFile), { recursive: true });\n fs.writeFileSync(targetFile, \"export const evalReport = true;\\n\", \"utf8\");\n fs.writeFileSync(path.join(repoRoot, \"README.md\"), \"# Repo\\n\", \"utf8\");\n const memory = createAgentMemory(\"Explain EvalReportCmd.ts\", repoRoot, repoRoot);\n memory.task.queryScope = \"targeted\";\n memory.task.explicitTargets = [\"EvalReportCmd.ts\"];\n\n const packet = finalizeLanePacket(\"exact-target\", memory, {\n lane: \"exact-target\",\n query: \"Explain EvalReportCmd.ts\",\n filePaths: [targetFile],\n }, 5);\n\n expect(packet.filePaths).toEqual([targetFile]);\n });\n\n it(\"keeps all resolved exact-target matches instead of trimming them like semantic search\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-exact-keep-\"));\n tempDirs.push(repoRoot);\n const cliIndex = path.join(repoRoot, \"cli\", \"src\", \"index.ts\");\n const factoryFile = path.join(repoRoot, \"cli\", \"src\", \"commands\", \"factory.ts\");\n const daemonFile = path.join(repoRoot, \"cli\", \"src\", \"runQueryWithDaemonControl.ts\");\n fs.mkdirSync(path.dirname(factoryFile), { recursive: true });\n fs.writeFileSync(cliIndex, \"export const cli = true;\\n\", \"utf8\");\n fs.writeFileSync(factoryFile, \"export const factory = true;\\n\", \"utf8\");\n fs.writeFileSync(daemonFile, \"export const daemon = true;\\n\", \"utf8\");\n const memory = createAgentMemory(\"Summarize CLI architecture\", repoRoot, repoRoot);\n memory.task.queryScope = \"multi-file\";\n memory.task.explicitTargets = [\"index.ts\", \"commands/factory.ts\", \"runQueryWithDaemonControl.ts\"];\n\n const packet = finalizeLanePacket(\"exact-target\", memory, {\n lane: \"exact-target\",\n query: \"Summarize CLI architecture\",\n filePaths: [cliIndex, factoryFile, daemonFile],\n }, 1);\n\n expect(packet.filePaths).toEqual([cliIndex, factoryFile, daemonFile]);\n });\n\n it(\"prefers code and test files over markdown docs for fragment matches\", () => {\n const memory = createAgentMemory(\"\\\"alpha beta gamma\\\"\", \"/repo\", \"/repo\");\n memory.task.queryScope = \"targeted\";\n\n const packet = finalizeLanePacket(\"fragment\", memory, {\n lane: \"fragment\",\n query: \"\\\"alpha beta gamma\\\"\",\n filePaths: [\n \"/repo/optimize.md\",\n \"/repo/cli/src/__tests__/search/SearchOrchestrator.test.ts\",\n ],\n }, 5);\n\n expect(packet.topHits?.[0]?.filePath).toBe(\"/repo/cli/src/__tests__/search/SearchOrchestrator.test.ts\");\n });\n});\n"]}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Verifies simple-agent search scoring stays owned by the new runtime wrapper.
3
+ *
4
+ * Why this file exists:
5
+ * - the new agent needs ranked search strength without pulling old orchestration back in
6
+ * - policy decisions should depend on one stable hit-ranking shape
7
+ */
8
+ import { describe, expect, it } from "vitest";
9
+ import { rankAgentSearchHits } from "../../agents/agentSearchScoring.js";
10
+ describe("rankAgentSearchHits", () => {
11
+ it("keeps score and reason metadata for ranked search hits", () => {
12
+ const ranked = rankAgentSearchHits(["/repo/README.md", "/repo/cli/src/index.ts"], {
13
+ "/repo/README.md": -7,
14
+ "/repo/cli/src/index.ts": -1,
15
+ }, "check the readme for install");
16
+ expect(ranked[0]).toMatchObject({
17
+ filePath: "/repo/README.md",
18
+ });
19
+ expect(ranked[0].score).toBeGreaterThan(0);
20
+ expect(ranked[0].reasons.length).toBeGreaterThan(0);
21
+ });
22
+ });
23
+ //# sourceMappingURL=agentSearchScoring.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSearchScoring.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/agentSearchScoring.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,mBAAmB,CAChC,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,EAC7C;YACE,iBAAiB,EAAE,CAAC,CAAC;YACrB,wBAAwB,EAAE,CAAC,CAAC;SAC7B,EACD,8BAA8B,CAC/B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9B,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Verifies simple-agent search scoring stays owned by the new runtime wrapper.\n *\n * Why this file exists:\n * - the new agent needs ranked search strength without pulling old orchestration back in\n * - policy decisions should depend on one stable hit-ranking shape\n */\nimport { describe, expect, it } from \"vitest\";\nimport { rankAgentSearchHits } from \"../../agents/agentSearchScoring.js\";\n\ndescribe(\"rankAgentSearchHits\", () => {\n it(\"keeps score and reason metadata for ranked search hits\", () => {\n const ranked = rankAgentSearchHits(\n [\"/repo/README.md\", \"/repo/cli/src/index.ts\"],\n {\n \"/repo/README.md\": -7,\n \"/repo/cli/src/index.ts\": -1,\n },\n \"check the readme for install\"\n );\n\n expect(ranked[0]).toMatchObject({\n filePath: \"/repo/README.md\",\n });\n expect(ranked[0].score).toBeGreaterThan(0);\n expect(ranked[0].reasons.length).toBeGreaterThan(0);\n });\n});\n"]}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Covers shared snippet evidence filtering for modular-agent search.
3
+ *
4
+ * Why this file exists:
5
+ * - `matches` should keep real evidence and drop boilerplate
6
+ * - shared search helpers should own this once for all lanes
7
+ */
8
+ import fs from "fs";
9
+ import os from "os";
10
+ import path from "path";
11
+ import { afterEach, describe, expect, it } from "vitest";
12
+ import { classifySnippetEvidence } from "../../agent/search/snippetEvidence.js";
13
+ import { collectFixedStringMatches, collectRegexMatches } from "../../agent/search/shared.js";
14
+ const tempDirs = [];
15
+ afterEach(() => {
16
+ while (tempDirs.length > 0) {
17
+ const dir = tempDirs.pop();
18
+ if (dir) {
19
+ fs.rmSync(dir, { recursive: true, force: true });
20
+ }
21
+ }
22
+ });
23
+ describe("classifySnippetEvidence", () => {
24
+ it("marks imports and re-exports as reference signals", () => {
25
+ expect(classifySnippetEvidence('import { Foo } from "./x";', "semantic-content")).toBe("reference-signal");
26
+ expect(classifySnippetEvidence('export * from "./x";', "semantic-content")).toBe("reference-signal");
27
+ });
28
+ it("marks query echoes as noise", () => {
29
+ expect(classifySnippetEvidence('query: "\\"Find agentLoop\\""', "fragment-content")).toBe("noise");
30
+ expect(classifySnippetEvidence('"Explain how agentLoop works",', "semantic-content")).toBe("noise");
31
+ });
32
+ it("marks direct code bodies as answer evidence", () => {
33
+ expect(classifySnippetEvidence("export function runAgentLoop() {}", "semantic-content")).toBe("answer-evidence");
34
+ expect(classifySnippetEvidence('cmd.command("tests").description("Run tests")', "semantic-content")).toBe("answer-evidence");
35
+ });
36
+ });
37
+ describe("shared match extraction", () => {
38
+ it("keeps direct evidence and drops import-only and query-echo snippets", () => {
39
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), "scai-agent-search-shared-"));
40
+ tempDirs.push(repoRoot);
41
+ const targetFile = path.join(repoRoot, "sample.ts");
42
+ fs.writeFileSync(targetFile, [
43
+ 'query: "\\"runAgentLoop\\""',
44
+ 'import { runAgentLoop } from "./runtime.js";',
45
+ "export function runAgentLoop() {",
46
+ " return true;",
47
+ "}",
48
+ ].join("\n"), "utf8");
49
+ const matches = collectFixedStringMatches([targetFile], ["runAgentLoop"], "semantic-content", { maxPerFile: 3 });
50
+ expect(matches).toHaveLength(1);
51
+ expect(matches[0]?.snippet).toContain("export function runAgentLoop()");
52
+ });
53
+ it("keeps at most one reference fallback when no stronger snippet exists", () => {
54
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), "scai-agent-search-shared-fallback-"));
55
+ tempDirs.push(repoRoot);
56
+ const targetFile = path.join(repoRoot, "wrapper.ts");
57
+ fs.writeFileSync(targetFile, [
58
+ 'export * from "./runtime.js";',
59
+ 'export * from "./actions.js";',
60
+ ].join("\n"), "utf8");
61
+ const matches = collectFixedStringMatches([targetFile], ["export"], "semantic-content", { maxPerFile: 3 });
62
+ expect(matches).toHaveLength(1);
63
+ expect(matches[0]?.snippet).toContain('export * from "./runtime.js";');
64
+ });
65
+ it("applies the same evidence filtering to regex matches", () => {
66
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), "scai-agent-search-shared-regex-"));
67
+ tempDirs.push(repoRoot);
68
+ const targetFile = path.join(repoRoot, "commands.ts");
69
+ fs.writeFileSync(targetFile, [
70
+ 'import { build } from "./builder.js";',
71
+ 'cmd.command("tests").description("Run the full suite");',
72
+ ].join("\n"), "utf8");
73
+ const matches = collectRegexMatches([targetFile], "command|import", "i", { maxPerFile: 3 });
74
+ expect(matches).toHaveLength(1);
75
+ expect(matches[0]?.snippet).toContain('.command("tests")');
76
+ });
77
+ });
78
+ //# sourceMappingURL=agentSearchShared.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSearchShared.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/agentSearchShared.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers shared snippet evidence filtering for modular-agent search.\n *\n * Why this file exists:\n * - `matches` should keep real evidence and drop boilerplate\n * - shared search helpers should own this once for all lanes\n */\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { afterEach, describe, expect, it } from \"vitest\";\nimport { classifySnippetEvidence } from \"../../agent/search/snippetEvidence.js\";\nimport { collectFixedStringMatches, collectRegexMatches } from \"../../agent/search/shared.js\";\n\nconst tempDirs: string[] = [];\n\nafterEach(() => {\n while (tempDirs.length > 0) {\n const dir = tempDirs.pop();\n if (dir) {\n fs.rmSync(dir, { recursive: true, force: true });\n }\n }\n});\n\ndescribe(\"classifySnippetEvidence\", () => {\n it(\"marks imports and re-exports as reference signals\", () => {\n expect(classifySnippetEvidence('import { Foo } from \"./x\";', \"semantic-content\")).toBe(\"reference-signal\");\n expect(classifySnippetEvidence('export * from \"./x\";', \"semantic-content\")).toBe(\"reference-signal\");\n });\n\n it(\"marks query echoes as noise\", () => {\n expect(classifySnippetEvidence('query: \"\\\\\"Find agentLoop\\\\\"\"', \"fragment-content\")).toBe(\"noise\");\n expect(classifySnippetEvidence('\"Explain how agentLoop works\",', \"semantic-content\")).toBe(\"noise\");\n });\n\n it(\"marks direct code bodies as answer evidence\", () => {\n expect(classifySnippetEvidence(\"export function runAgentLoop() {}\", \"semantic-content\")).toBe(\"answer-evidence\");\n expect(classifySnippetEvidence('cmd.command(\"tests\").description(\"Run tests\")', \"semantic-content\")).toBe(\"answer-evidence\");\n });\n});\n\ndescribe(\"shared match extraction\", () => {\n it(\"keeps direct evidence and drops import-only and query-echo snippets\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shared-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"sample.ts\");\n fs.writeFileSync(\n targetFile,\n [\n 'query: \"\\\\\"runAgentLoop\\\\\"\"',\n 'import { runAgentLoop } from \"./runtime.js\";',\n \"export function runAgentLoop() {\",\n \" return true;\",\n \"}\",\n ].join(\"\\n\"),\n \"utf8\"\n );\n\n const matches = collectFixedStringMatches([targetFile], [\"runAgentLoop\"], \"semantic-content\", { maxPerFile: 3 });\n\n expect(matches).toHaveLength(1);\n expect(matches[0]?.snippet).toContain(\"export function runAgentLoop()\");\n });\n\n it(\"keeps at most one reference fallback when no stronger snippet exists\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shared-fallback-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"wrapper.ts\");\n fs.writeFileSync(\n targetFile,\n [\n 'export * from \"./runtime.js\";',\n 'export * from \"./actions.js\";',\n ].join(\"\\n\"),\n \"utf8\"\n );\n\n const matches = collectFixedStringMatches([targetFile], [\"export\"], \"semantic-content\", { maxPerFile: 3 });\n\n expect(matches).toHaveLength(1);\n expect(matches[0]?.snippet).toContain('export * from \"./runtime.js\";');\n });\n\n it(\"applies the same evidence filtering to regex matches\", () => {\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-search-shared-regex-\"));\n tempDirs.push(repoRoot);\n const targetFile = path.join(repoRoot, \"commands.ts\");\n fs.writeFileSync(\n targetFile,\n [\n 'import { build } from \"./builder.js\";',\n 'cmd.command(\"tests\").description(\"Run the full suite\");',\n ].join(\"\\n\"),\n \"utf8\"\n );\n\n const matches = collectRegexMatches([targetFile], \"command|import\", \"i\", { maxPerFile: 3 });\n\n expect(matches).toHaveLength(1);\n expect(matches[0]?.snippet).toContain('.command(\"tests\")');\n });\n});\n"]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Covers explicit task and step state transitions for the new simple agent runtime.
3
+ *
4
+ * Why this file exists:
5
+ * - loop status changes should stay behind a small validated state helper
6
+ * - invalid transitions should fail fast
7
+ * - shell and loop work should build on the same explicit state rules
8
+ */
9
+ import { describe, expect, it } from "vitest";
10
+ import { createAgentMemory } from "../../agents/agentMemory.js";
11
+ import { failStep, finalizeTask, finishStep, startStep } from "../../agents/agentStateMachine.js";
12
+ describe("agentStateMachine", () => {
13
+ it("creates stable runtime-local numeric ids for new agent memory", () => {
14
+ const first = createAgentMemory("Explain first.ts", "/repo", "/repo");
15
+ const second = createAgentMemory("Explain second.ts", "/repo", "/repo");
16
+ expect(first.session.id).toBe(1);
17
+ expect(first.task.id).toBe(1);
18
+ expect(second.session.id).toBe(2);
19
+ expect(second.task.id).toBe(2);
20
+ });
21
+ it("allows pending steps to start and finish", () => {
22
+ const memory = createAgentMemory("Explain sample.ts", "/repo", "/repo");
23
+ const step = {
24
+ id: "step-001",
25
+ action: "plan",
26
+ status: "pending",
27
+ args: {},
28
+ purpose: "Plan the next step.",
29
+ expectedEvidence: [],
30
+ createdAt: new Date().toISOString(),
31
+ };
32
+ memory.steps.push(step);
33
+ startStep(memory, step);
34
+ finishStep(memory, step, "done", "Planned one step.");
35
+ expect(step.status).toBe("done");
36
+ expect(step.resultSummary).toBe("Planned one step.");
37
+ });
38
+ it("rejects impossible step transitions", () => {
39
+ const memory = createAgentMemory("Explain sample.ts", "/repo", "/repo");
40
+ const step = {
41
+ id: "step-001",
42
+ action: "plan",
43
+ status: "pending",
44
+ args: {},
45
+ purpose: "Plan the next step.",
46
+ expectedEvidence: [],
47
+ createdAt: new Date().toISOString(),
48
+ };
49
+ expect(() => failStep(memory, step, "Failed before running.")).toThrow("Invalid agent step transition");
50
+ });
51
+ it("finalizes active tasks into done", () => {
52
+ const memory = createAgentMemory("Explain sample.ts", "/repo", "/repo");
53
+ finalizeTask(memory, "done", "completed");
54
+ expect(memory.task.status).toBe("done");
55
+ expect(memory.task.stopReason).toBe("completed");
56
+ });
57
+ });
58
+ //# sourceMappingURL=agentStateMachine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentStateMachine.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/agentStateMachine.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers explicit task and step state transitions for the new simple agent runtime.\n *\n * Why this file exists:\n * - loop status changes should stay behind a small validated state helper\n * - invalid transitions should fail fast\n * - shell and loop work should build on the same explicit state rules\n */\nimport { describe, expect, it } from \"vitest\";\nimport { createAgentMemory } from \"../../agents/agentMemory.js\";\nimport { failStep, finalizeTask, finishStep, startStep } from \"../../agents/agentStateMachine.js\";\nimport type { AgentStep } from \"../../agents/agentTypes.js\";\n\ndescribe(\"agentStateMachine\", () => {\n it(\"creates stable runtime-local numeric ids for new agent memory\", () => {\n const first = createAgentMemory(\"Explain first.ts\", \"/repo\", \"/repo\");\n const second = createAgentMemory(\"Explain second.ts\", \"/repo\", \"/repo\");\n\n expect(first.session.id).toBe(1);\n expect(first.task.id).toBe(1);\n expect(second.session.id).toBe(2);\n expect(second.task.id).toBe(2);\n });\n\n it(\"allows pending steps to start and finish\", () => {\n const memory = createAgentMemory(\"Explain sample.ts\", \"/repo\", \"/repo\");\n const step: AgentStep = {\n id: \"step-001\",\n action: \"plan\" as const,\n status: \"pending\",\n args: {},\n purpose: \"Plan the next step.\",\n expectedEvidence: [],\n createdAt: new Date().toISOString(),\n };\n memory.steps.push(step);\n\n startStep(memory, step);\n finishStep(memory, step, \"done\", \"Planned one step.\");\n\n expect(step.status).toBe(\"done\");\n expect(step.resultSummary).toBe(\"Planned one step.\");\n });\n\n it(\"rejects impossible step transitions\", () => {\n const memory = createAgentMemory(\"Explain sample.ts\", \"/repo\", \"/repo\");\n const step: AgentStep = {\n id: \"step-001\",\n action: \"plan\" as const,\n status: \"pending\",\n args: {},\n purpose: \"Plan the next step.\",\n expectedEvidence: [],\n createdAt: new Date().toISOString(),\n };\n\n expect(() => failStep(memory, step, \"Failed before running.\")).toThrow(\"Invalid agent step transition\");\n });\n\n it(\"finalizes active tasks into done\", () => {\n const memory = createAgentMemory(\"Explain sample.ts\", \"/repo\", \"/repo\");\n\n finalizeTask(memory, \"done\", \"completed\");\n\n expect(memory.task.status).toBe(\"done\");\n expect(memory.task.stopReason).toBe(\"completed\");\n });\n});\n"]}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Covers durable task, turn, and step persistence for the modular agent runtime.
3
+ *
4
+ * Why this file exists:
5
+ * - the new agent now owns session/task/turn storage directly
6
+ * - resume should append turn history instead of creating a new task
7
+ * - compact answer packets should persist without old broad resume blobs
8
+ */
9
+ import fs from "fs";
10
+ import os from "os";
11
+ import path from "path";
12
+ import { afterEach, describe, expect, it } from "vitest";
13
+ const ORIGINAL_ENV = { ...process.env };
14
+ function createTempHome() {
15
+ const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), "scai-agent-task-persist-home-"));
16
+ process.env.HOME = homeDir;
17
+ process.env.USERPROFILE = homeDir;
18
+ return homeDir;
19
+ }
20
+ async function bootstrapRepo(repoRoot) {
21
+ const { writeConfig } = await import("../../config.js");
22
+ const { initSchema } = await import("../../db/schema.js");
23
+ writeConfig({
24
+ activeRepo: "repo-a",
25
+ repos: {
26
+ "repo-a": {
27
+ indexDir: repoRoot,
28
+ },
29
+ },
30
+ });
31
+ initSchema();
32
+ }
33
+ afterEach(() => {
34
+ process.env = { ...ORIGINAL_ENV };
35
+ });
36
+ describe("agent task persistence", () => {
37
+ it("stores task state, turn history, steps, and compact answer artifacts across resume", async () => {
38
+ createTempHome();
39
+ const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), "scai-agent-task-persist-repo-"));
40
+ await bootstrapRepo(repoRoot);
41
+ const { getDbForRepo } = await import("../../db/client.js");
42
+ const { beginAgentTurn, bootAgentTask, finishAgentTurn, getCurrentAgentTaskId, listAgentSteps, listAgentTurns, loadAgentTask, persistAgentStep, persistAgentTask, } = await import("../../agent/persistence/index.js");
43
+ const first = bootAgentTask("Explain the retry policy", { bindAsCurrentTask: true });
44
+ beginAgentTurn(first, "Explain the retry policy", "fresh-ask");
45
+ first.task.primaryIntent = "Explain the retry policy.";
46
+ first.task.normalizedQuery = "Explain the retry policy";
47
+ first.task.status = "done";
48
+ first.artifacts.latestFinalAnswerPacket = {
49
+ normalizedQuery: "Explain the retry policy",
50
+ primaryIntent: "Explain the retry policy.",
51
+ queryScope: "broad-repo",
52
+ explicitTargets: ["retry policy"],
53
+ groundedPrimaryFiles: [],
54
+ groundedSupportingFiles: [],
55
+ mustMentionFiles: ["/repo/cli/src/agent/policy/index.ts"],
56
+ mustMentionSymbols: ["resolvePolicyState"],
57
+ mustMentionFacts: ["Exact target phrase: retry policy"],
58
+ };
59
+ first.artifacts.finalAnswer = "The retry policy is owned by resolvePolicyState.";
60
+ first.steps.push({
61
+ id: "step-001",
62
+ action: "read-file",
63
+ status: "done",
64
+ args: { target: "/repo/cli/src/agent/policy/index.ts" },
65
+ purpose: "Read the policy owner.",
66
+ expectedEvidence: ["grounded policy summary"],
67
+ createdAt: new Date().toISOString(),
68
+ startedAt: new Date().toISOString(),
69
+ completedAt: new Date().toISOString(),
70
+ resultSummary: "Read the policy owner.",
71
+ });
72
+ persistAgentStep(first, first.steps[0]);
73
+ persistAgentTask(first);
74
+ finishAgentTurn(first);
75
+ const db = getDbForRepo();
76
+ const taskRow = db.prepare(`
77
+ SELECT id, session_id, summary, final_answer_packet_json, snapshot_json, latest_turn_index
78
+ FROM tasks
79
+ WHERE id = ?
80
+ `).get(first.task.id);
81
+ expect(getCurrentAgentTaskId(db)).toBe(first.task.id);
82
+ expect(taskRow?.summary).toBe("The retry policy is owned by resolvePolicyState.");
83
+ expect(JSON.parse(String(taskRow?.final_answer_packet_json)).mustMentionSymbols).toEqual(["resolvePolicyState"]);
84
+ expect(taskRow?.latest_turn_index).toBe(1);
85
+ expect(JSON.parse(String(taskRow?.snapshot_json))).not.toHaveProperty("events");
86
+ expect(JSON.parse(String(taskRow?.snapshot_json)).evidence).not.toHaveProperty("searches");
87
+ const resumed = loadAgentTask(first.task.id, "What should I inspect next?", { bindAsCurrentTask: true });
88
+ expect(resumed.task.id).toBe(first.task.id);
89
+ expect(resumed.session.id).toBe(taskRow?.session_id);
90
+ expect(resumed.artifacts.latestFinalAnswerPacket?.mustMentionSymbols).toEqual(["resolvePolicyState"]);
91
+ expect(resumed.durableCheckpoint).toEqual(expect.objectContaining({
92
+ finalAnswer: "The retry policy is owned by resolvePolicyState.",
93
+ finalAnswerPacket: expect.objectContaining({
94
+ mustMentionSymbols: ["resolvePolicyState"],
95
+ }),
96
+ }));
97
+ resumed.durableCheckpoint = {
98
+ finalAnswer: "The retry policy is owned by resolvePolicyState.",
99
+ finalAnswerPacket: resumed.artifacts.latestFinalAnswerPacket,
100
+ sourceTurnIndex: 1,
101
+ sourceUserQuery: "Explain the retry policy",
102
+ };
103
+ resumed.resumeCheckpoint = resumed.durableCheckpoint;
104
+ resumed.artifacts.finalAnswer = undefined;
105
+ resumed.artifacts.latestFinalAnswerPacket = undefined;
106
+ resumed.task.status = "waiting";
107
+ resumed.task.dialogState = {
108
+ status: "awaiting-user",
109
+ kind: "clarification",
110
+ prompt: "Reply with the exact file path.",
111
+ options: [],
112
+ allowFreeText: true,
113
+ createdAt: new Date().toISOString(),
114
+ };
115
+ beginAgentTurn(resumed, "What should I inspect next?", "resume-query");
116
+ persistAgentTask(resumed);
117
+ finishAgentTurn(resumed);
118
+ const resumedTaskRow = db.prepare(`
119
+ SELECT summary, final_answer_packet_json
120
+ FROM tasks
121
+ WHERE id = ?
122
+ `).get(first.task.id);
123
+ expect(resumedTaskRow.summary).toBe("The retry policy is owned by resolvePolicyState.");
124
+ expect(JSON.parse(resumedTaskRow.final_answer_packet_json).mustMentionSymbols).toEqual(["resolvePolicyState"]);
125
+ const resumedAgain = loadAgentTask(first.task.id, "Resume after waiting", { bindAsCurrentTask: true });
126
+ expect(resumedAgain.durableCheckpoint).toEqual(expect.objectContaining({
127
+ finalAnswer: "The retry policy is owned by resolvePolicyState.",
128
+ finalAnswerPacket: expect.objectContaining({
129
+ mustMentionSymbols: ["resolvePolicyState"],
130
+ }),
131
+ }));
132
+ resumedAgain.artifacts.finalAnswer = "Updated one file with 2 planned edits.";
133
+ resumedAgain.artifacts.latestFinalAnswerPacket = undefined;
134
+ persistAgentTask(resumedAgain);
135
+ const transformLikeRow = db.prepare(`
136
+ SELECT summary, final_answer_packet_json
137
+ FROM tasks
138
+ WHERE id = ?
139
+ `).get(first.task.id);
140
+ expect(transformLikeRow.summary).toBe("The retry policy is owned by resolvePolicyState.");
141
+ expect(JSON.parse(transformLikeRow.final_answer_packet_json).mustMentionSymbols).toEqual(["resolvePolicyState"]);
142
+ const turns = listAgentTurns(first.task.id, db);
143
+ expect(turns.map((turn) => [turn.turnIndex, turn.userQuery, turn.status])).toEqual([
144
+ [1, "Explain the retry policy", "done"],
145
+ [2, "What should I inspect next?", "waiting"],
146
+ ]);
147
+ const steps = listAgentSteps(first.task.id, db);
148
+ expect(steps[0]).toEqual(expect.objectContaining({
149
+ runtimeStepId: "step-001",
150
+ action: "read-file",
151
+ filePath: "/repo/cli/src/agent/policy/index.ts",
152
+ status: "done",
153
+ }));
154
+ });
155
+ });
156
+ //# sourceMappingURL=agentTaskPersistence.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTaskPersistence.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/agentTaskPersistence.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers durable task, turn, and step persistence for the modular agent runtime.\n *\n * Why this file exists:\n * - the new agent now owns session/task/turn storage directly\n * - resume should append turn history instead of creating a new task\n * - compact answer packets should persist without old broad resume blobs\n */\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { afterEach, describe, expect, it } from \"vitest\";\n\nconst ORIGINAL_ENV = { ...process.env };\n\nfunction createTempHome(): string {\n const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-task-persist-home-\"));\n process.env.HOME = homeDir;\n process.env.USERPROFILE = homeDir;\n return homeDir;\n}\n\nasync function bootstrapRepo(repoRoot: string) {\n const { writeConfig } = await import(\"../../config.js\");\n const { initSchema } = await import(\"../../db/schema.js\");\n writeConfig({\n activeRepo: \"repo-a\",\n repos: {\n \"repo-a\": {\n indexDir: repoRoot,\n },\n },\n });\n initSchema();\n}\n\nafterEach(() => {\n process.env = { ...ORIGINAL_ENV };\n});\n\ndescribe(\"agent task persistence\", () => {\n it(\"stores task state, turn history, steps, and compact answer artifacts across resume\", async () => {\n createTempHome();\n const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-agent-task-persist-repo-\"));\n await bootstrapRepo(repoRoot);\n\n const { getDbForRepo } = await import(\"../../db/client.js\");\n const {\n beginAgentTurn,\n bootAgentTask,\n finishAgentTurn,\n getCurrentAgentTaskId,\n listAgentSteps,\n listAgentTurns,\n loadAgentTask,\n persistAgentStep,\n persistAgentTask,\n } = await import(\"../../agent/persistence/index.js\");\n\n const first = bootAgentTask(\"Explain the retry policy\", { bindAsCurrentTask: true });\n beginAgentTurn(first, \"Explain the retry policy\", \"fresh-ask\");\n first.task.primaryIntent = \"Explain the retry policy.\";\n first.task.normalizedQuery = \"Explain the retry policy\";\n first.task.status = \"done\";\n first.artifacts.latestFinalAnswerPacket = {\n normalizedQuery: \"Explain the retry policy\",\n primaryIntent: \"Explain the retry policy.\",\n queryScope: \"broad-repo\",\n explicitTargets: [\"retry policy\"],\n groundedPrimaryFiles: [],\n groundedSupportingFiles: [],\n mustMentionFiles: [\"/repo/cli/src/agent/policy/index.ts\"],\n mustMentionSymbols: [\"resolvePolicyState\"],\n mustMentionFacts: [\"Exact target phrase: retry policy\"],\n };\n first.artifacts.finalAnswer = \"The retry policy is owned by resolvePolicyState.\";\n first.steps.push({\n id: \"step-001\",\n action: \"read-file\",\n status: \"done\",\n args: { target: \"/repo/cli/src/agent/policy/index.ts\" },\n purpose: \"Read the policy owner.\",\n expectedEvidence: [\"grounded policy summary\"],\n createdAt: new Date().toISOString(),\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n resultSummary: \"Read the policy owner.\",\n });\n\n persistAgentStep(first, first.steps[0]!);\n persistAgentTask(first);\n finishAgentTurn(first);\n\n const db = getDbForRepo();\n const taskRow = db.prepare(`\n SELECT id, session_id, summary, final_answer_packet_json, snapshot_json, latest_turn_index\n FROM tasks\n WHERE id = ?\n `).get(first.task.id) as {\n id: number;\n session_id: number;\n summary: string;\n final_answer_packet_json: string;\n snapshot_json: string;\n latest_turn_index: number;\n } | undefined;\n\n expect(getCurrentAgentTaskId(db)).toBe(first.task.id);\n expect(taskRow?.summary).toBe(\"The retry policy is owned by resolvePolicyState.\");\n expect(JSON.parse(String(taskRow?.final_answer_packet_json)).mustMentionSymbols).toEqual([\"resolvePolicyState\"]);\n expect(taskRow?.latest_turn_index).toBe(1);\n expect(JSON.parse(String(taskRow?.snapshot_json))).not.toHaveProperty(\"events\");\n expect(JSON.parse(String(taskRow?.snapshot_json)).evidence).not.toHaveProperty(\"searches\");\n\n const resumed = loadAgentTask(first.task.id, \"What should I inspect next?\", { bindAsCurrentTask: true });\n expect(resumed.task.id).toBe(first.task.id);\n expect(resumed.session.id).toBe(taskRow?.session_id);\n expect(resumed.artifacts.latestFinalAnswerPacket?.mustMentionSymbols).toEqual([\"resolvePolicyState\"]);\n expect(resumed.durableCheckpoint).toEqual(expect.objectContaining({\n finalAnswer: \"The retry policy is owned by resolvePolicyState.\",\n finalAnswerPacket: expect.objectContaining({\n mustMentionSymbols: [\"resolvePolicyState\"],\n }),\n }));\n\n resumed.durableCheckpoint = {\n finalAnswer: \"The retry policy is owned by resolvePolicyState.\",\n finalAnswerPacket: resumed.artifacts.latestFinalAnswerPacket!,\n sourceTurnIndex: 1,\n sourceUserQuery: \"Explain the retry policy\",\n };\n resumed.resumeCheckpoint = resumed.durableCheckpoint;\n resumed.artifacts.finalAnswer = undefined;\n resumed.artifacts.latestFinalAnswerPacket = undefined;\n\n resumed.task.status = \"waiting\";\n resumed.task.dialogState = {\n status: \"awaiting-user\",\n kind: \"clarification\",\n prompt: \"Reply with the exact file path.\",\n options: [],\n allowFreeText: true,\n createdAt: new Date().toISOString(),\n };\n beginAgentTurn(resumed, \"What should I inspect next?\", \"resume-query\");\n persistAgentTask(resumed);\n finishAgentTurn(resumed);\n\n const resumedTaskRow = db.prepare(`\n SELECT summary, final_answer_packet_json\n FROM tasks\n WHERE id = ?\n `).get(first.task.id) as {\n summary: string;\n final_answer_packet_json: string;\n };\n expect(resumedTaskRow.summary).toBe(\"The retry policy is owned by resolvePolicyState.\");\n expect(JSON.parse(resumedTaskRow.final_answer_packet_json).mustMentionSymbols).toEqual([\"resolvePolicyState\"]);\n\n const resumedAgain = loadAgentTask(first.task.id, \"Resume after waiting\", { bindAsCurrentTask: true });\n expect(resumedAgain.durableCheckpoint).toEqual(expect.objectContaining({\n finalAnswer: \"The retry policy is owned by resolvePolicyState.\",\n finalAnswerPacket: expect.objectContaining({\n mustMentionSymbols: [\"resolvePolicyState\"],\n }),\n }));\n\n resumedAgain.artifacts.finalAnswer = \"Updated one file with 2 planned edits.\";\n resumedAgain.artifacts.latestFinalAnswerPacket = undefined;\n persistAgentTask(resumedAgain);\n\n const transformLikeRow = db.prepare(`\n SELECT summary, final_answer_packet_json\n FROM tasks\n WHERE id = ?\n `).get(first.task.id) as {\n summary: string;\n final_answer_packet_json: string;\n };\n expect(transformLikeRow.summary).toBe(\"The retry policy is owned by resolvePolicyState.\");\n expect(JSON.parse(transformLikeRow.final_answer_packet_json).mustMentionSymbols).toEqual([\"resolvePolicyState\"]);\n\n const turns = listAgentTurns(first.task.id, db);\n expect(turns.map((turn) => [turn.turnIndex, turn.userQuery, turn.status])).toEqual([\n [1, \"Explain the retry policy\", \"done\"],\n [2, \"What should I inspect next?\", \"waiting\"],\n ]);\n\n const steps = listAgentSteps(first.task.id, db);\n expect(steps[0]).toEqual(expect.objectContaining({\n runtimeStepId: \"step-001\",\n action: \"read-file\",\n filePath: \"/repo/cli/src/agent/policy/index.ts\",\n status: \"done\",\n }));\n });\n});\n"]}