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,92 @@
1
+ // Verifies transform planning accepts cleanup-parsed JSON even when the raw model reply has extra prose.
2
+ // It covers the bug where transformPlanGen dropped valid parsed data, produced no steps, and forced redo loops.
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
+ vi.mock("../../lib/generate.js", () => ({
5
+ generate: vi.fn(),
6
+ }));
7
+ import { generate } from "../../lib/generate.js";
8
+ import { transformPlanGenStep } from "../../agents/transformPlanGenStep.js";
9
+ describe("transformPlanGenStep", () => {
10
+ beforeEach(() => {
11
+ vi.mocked(generate).mockReset();
12
+ });
13
+ it("uses cleanup-parsed JSON when the raw reply includes prose around the plan", async () => {
14
+ vi.mocked(generate).mockResolvedValue({
15
+ query: "",
16
+ data: [
17
+ "Here is the plan.",
18
+ '{"steps":[{"action":"codeTransform","actionId":"codeTransform","actionArgs":{},"targetFile":"/repo/actionRegistry.ts","description":"Add a hello world statement.","metadata":{}}]}',
19
+ "This keeps the change small.",
20
+ ].join("\n"),
21
+ });
22
+ const context = {
23
+ task: {
24
+ currentStep: {
25
+ filePath: "/repo/actionRegistry.ts",
26
+ },
27
+ },
28
+ analysis: {
29
+ intent: {
30
+ normalizedQuery: "add a hello world statement to the actionRegistry file",
31
+ intentCategory: "code_change",
32
+ },
33
+ fileAnalysis: {
34
+ "/repo/actionRegistry.ts": {
35
+ excerpts: [],
36
+ },
37
+ },
38
+ routingDecision: {
39
+ confidence: 0.91,
40
+ },
41
+ },
42
+ execution: {},
43
+ };
44
+ await transformPlanGenStep.run(context);
45
+ const steps = context.analysis.planSuggestion?.plan?.steps ?? [];
46
+ expect(steps).toHaveLength(1);
47
+ expect(steps[0]).toMatchObject({
48
+ action: "codeTransform",
49
+ actionId: "codeTransform",
50
+ targetFile: "/repo/actionRegistry.ts",
51
+ groups: ["transform"],
52
+ });
53
+ });
54
+ it("keeps an explicit empty planner result instead of forcing a fallback edit", async () => {
55
+ vi.mocked(generate).mockResolvedValue({
56
+ query: "",
57
+ data: '{"steps":[]}',
58
+ });
59
+ const context = {
60
+ task: {
61
+ currentStep: {
62
+ filePath: "/repo/actionRegistry.ts",
63
+ },
64
+ },
65
+ analysis: {
66
+ intent: {
67
+ normalizedQuery: "add a hello world statement to the actionRegistry file",
68
+ intentCategory: "code_change",
69
+ },
70
+ fileAnalysis: {
71
+ "/repo/actionRegistry.ts": {
72
+ action: {
73
+ shouldModify: true,
74
+ },
75
+ proposedChanges: {
76
+ summary: "Add a hello world comment near the imports.",
77
+ rationale: "Keep the change small and non-functional.",
78
+ },
79
+ excerpts: [],
80
+ },
81
+ },
82
+ routingDecision: {
83
+ confidence: 0.91,
84
+ },
85
+ },
86
+ execution: {},
87
+ };
88
+ await transformPlanGenStep.run(context);
89
+ expect(context.analysis.planSuggestion?.plan?.steps ?? []).toEqual([]);
90
+ });
91
+ });
92
+ //# sourceMappingURL=transformPlanGenStep.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformPlanGenStep.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/transformPlanGenStep.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Verifies transform planning accepts cleanup-parsed JSON even when the raw model reply has extra prose.\n// It covers the bug where transformPlanGen dropped valid parsed data, produced no steps, and forced redo loops.\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nvi.mock(\"../../lib/generate.js\", () => ({\n generate: vi.fn(),\n}));\n\nimport { generate } from \"../../lib/generate.js\";\nimport { transformPlanGenStep } from \"../../agents/transformPlanGenStep.js\";\n\ndescribe(\"transformPlanGenStep\", () => {\n beforeEach(() => {\n vi.mocked(generate).mockReset();\n });\n\n it(\"uses cleanup-parsed JSON when the raw reply includes prose around the plan\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: [\n \"Here is the plan.\",\n '{\"steps\":[{\"action\":\"codeTransform\",\"actionId\":\"codeTransform\",\"actionArgs\":{},\"targetFile\":\"/repo/actionRegistry.ts\",\"description\":\"Add a hello world statement.\",\"metadata\":{}}]}',\n \"This keeps the change small.\",\n ].join(\"\\n\"),\n });\n\n const context = {\n task: {\n currentStep: {\n filePath: \"/repo/actionRegistry.ts\",\n },\n },\n analysis: {\n intent: {\n normalizedQuery: \"add a hello world statement to the actionRegistry file\",\n intentCategory: \"code_change\",\n },\n fileAnalysis: {\n \"/repo/actionRegistry.ts\": {\n excerpts: [],\n },\n },\n routingDecision: {\n confidence: 0.91,\n },\n },\n execution: {},\n } as any;\n\n await transformPlanGenStep.run(context);\n\n const steps = context.analysis.planSuggestion?.plan?.steps ?? [];\n expect(steps).toHaveLength(1);\n expect(steps[0]).toMatchObject({\n action: \"codeTransform\",\n actionId: \"codeTransform\",\n targetFile: \"/repo/actionRegistry.ts\",\n groups: [\"transform\"],\n });\n });\n\n it(\"keeps an explicit empty planner result instead of forcing a fallback edit\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: '{\"steps\":[]}',\n });\n\n const context = {\n task: {\n currentStep: {\n filePath: \"/repo/actionRegistry.ts\",\n },\n },\n analysis: {\n intent: {\n normalizedQuery: \"add a hello world statement to the actionRegistry file\",\n intentCategory: \"code_change\",\n },\n fileAnalysis: {\n \"/repo/actionRegistry.ts\": {\n action: {\n shouldModify: true,\n },\n proposedChanges: {\n summary: \"Add a hello world comment near the imports.\",\n rationale: \"Keep the change small and non-functional.\",\n },\n excerpts: [],\n },\n },\n routingDecision: {\n confidence: 0.91,\n },\n },\n execution: {},\n } as any;\n\n await transformPlanGenStep.run(context);\n\n expect(context.analysis.planSuggestion?.plan?.steps ?? []).toEqual([]);\n });\n});\n"]}
@@ -0,0 +1,237 @@
1
+ // Verifies intent extraction stays stable for direct commands and malformed model output.
2
+ // It mocks the model response when needed and checks the stored analysis intent, not log text.
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
+ vi.mock("../../lib/generate.js", () => ({
5
+ generate: vi.fn(),
6
+ }));
7
+ import { generate } from "../../lib/generate.js";
8
+ import { understandIntentStep } from "../../agents/understandIntentStep.js";
9
+ // Pass example: "/test-run foo.ts" stays a command-like request and extracts "foo.ts".
10
+ // Fail example: a slash command that triggers the model or drops the explicit file target.
11
+ describe("understandIntentStep", () => {
12
+ beforeEach(() => {
13
+ vi.mocked(generate).mockReset();
14
+ });
15
+ it("bypasses the model for slash commands and extracts file targets directly", async () => {
16
+ const context = {
17
+ initContext: {
18
+ userQuery: "/test-run cli/src/pipeline/modules/finalAnswerModule.ts",
19
+ },
20
+ };
21
+ await understandIntentStep.run({ context });
22
+ expect(generate).not.toHaveBeenCalled();
23
+ expect(context.analysis.intent.intentCategory).toBe("request");
24
+ expect(context.analysis.intent.targetFiles).toEqual([
25
+ "cli/src/pipeline/modules/finalAnswerModule.ts",
26
+ ]);
27
+ });
28
+ it("falls back safely on invalid model output and extracts file targets from the raw query", async () => {
29
+ vi.mocked(generate).mockResolvedValue({
30
+ query: "",
31
+ data: "not-json",
32
+ });
33
+ const context = {
34
+ initContext: {
35
+ userQuery: "Explain semanticAnalysisModule.ts and finalAnswerModule.ts",
36
+ },
37
+ };
38
+ await understandIntentStep.run({ context });
39
+ expect(context.analysis.intent.intentCategory).toBe("request");
40
+ expect(context.analysis.intent.confidence).toBe(0.3);
41
+ expect(context.analysis.intent.questions).toHaveLength(1);
42
+ expect(context.analysis.intent.targetFiles).toEqual([
43
+ "semanticAnalysisModule.ts",
44
+ "finalAnswerModule.ts",
45
+ ]);
46
+ });
47
+ it("extracts folder refs and extensionless file refs from the raw query fallback", async () => {
48
+ vi.mocked(generate).mockResolvedValue({
49
+ query: "",
50
+ data: "not-json",
51
+ });
52
+ const context = {
53
+ initContext: {
54
+ userQuery: "please tell me what the three files in the guards folder do? Explain EvalReportCmd too.",
55
+ },
56
+ };
57
+ await understandIntentStep.run({ context });
58
+ expect(context.analysis.intent.targetFiles).toEqual(expect.arrayContaining(["guards", "EvalReportCmd"]));
59
+ });
60
+ it("stores ordered decomposed questions when the model returns them", async () => {
61
+ vi.mocked(generate).mockResolvedValue({
62
+ query: "",
63
+ data: JSON.stringify({
64
+ intent: "Answer two architecture questions",
65
+ intentCategory: "question",
66
+ normalizedQuery: "Answer two architecture questions in order.",
67
+ confidence: 0.92,
68
+ questions: [
69
+ {
70
+ id: "q1",
71
+ order: 0,
72
+ text: "Where is search routed?",
73
+ normalizedQuery: "Where is search routed?",
74
+ intentCategory: "question",
75
+ },
76
+ {
77
+ id: "q2",
78
+ order: 1,
79
+ text: "How is verify triggered?",
80
+ normalizedQuery: "How is verify triggered?",
81
+ intentCategory: "question",
82
+ },
83
+ ],
84
+ }),
85
+ });
86
+ const context = {
87
+ task: {
88
+ id: 1,
89
+ projectId: 1,
90
+ status: "active",
91
+ initialQuery: "Where is search routed and how is verify triggered?",
92
+ createdAt: "now",
93
+ updatedAt: "now",
94
+ steps: [],
95
+ },
96
+ initContext: {
97
+ userQuery: "Where is search routed? How is verify triggered?",
98
+ },
99
+ };
100
+ await understandIntentStep.run({ context });
101
+ expect(context.analysis.intent.questions).toHaveLength(2);
102
+ expect(context.analysis.intent.questions.map((question) => question.text)).toEqual([
103
+ "Where is search routed?",
104
+ "How is verify triggered?",
105
+ ]);
106
+ expect(context.analysis.planMode.enabled).toBe(true);
107
+ expect(context.analysis.planMode.executionMode).toBe("execute");
108
+ expect(context.task.taskQuestions).toEqual([
109
+ "Where is search routed?",
110
+ "How is verify triggered?",
111
+ ]);
112
+ });
113
+ it("marks explicit /plan requests as plan mode", async () => {
114
+ vi.mocked(generate).mockResolvedValue({
115
+ query: "",
116
+ data: JSON.stringify({
117
+ intent: "Plan the routing change",
118
+ intentCategory: "planning",
119
+ normalizedQuery: "fix the routing flow and explain the tradeoffs",
120
+ confidence: 0.93,
121
+ }),
122
+ });
123
+ const context = {
124
+ initContext: {
125
+ userQuery: "/plan fix the routing flow and explain the tradeoffs",
126
+ },
127
+ };
128
+ await understandIntentStep.run({ context });
129
+ expect(context.analysis.planMode.enabled).toBe(true);
130
+ expect(context.analysis.planMode.source).toBe("explicit");
131
+ expect(context.analysis.planMode.executionMode).toBe("plan-only");
132
+ });
133
+ it("lets explicit /plan requests keep ordered decomposed questions", async () => {
134
+ vi.mocked(generate).mockResolvedValue({
135
+ query: "",
136
+ data: JSON.stringify({
137
+ intent: "Answer two architecture questions",
138
+ intentCategory: "question",
139
+ normalizedQuery: "Answer the two routing questions in order.",
140
+ confidence: 0.94,
141
+ questions: [
142
+ {
143
+ id: "q1",
144
+ order: 0,
145
+ text: "Where is search routed?",
146
+ normalizedQuery: "Where is search routed?",
147
+ intentCategory: "question",
148
+ },
149
+ {
150
+ id: "q2",
151
+ order: 1,
152
+ text: "How is verify triggered?",
153
+ normalizedQuery: "How is verify triggered?",
154
+ intentCategory: "question",
155
+ },
156
+ ],
157
+ }),
158
+ });
159
+ const context = {
160
+ initContext: {
161
+ userQuery: "/plan Where is search routed? How is verify triggered?",
162
+ },
163
+ };
164
+ await understandIntentStep.run({ context });
165
+ expect(generate).toHaveBeenCalledTimes(1);
166
+ expect(context.analysis.intent.questions.map((question) => question.text)).toEqual([
167
+ "Where is search routed?",
168
+ "How is verify triggered?",
169
+ ]);
170
+ expect(context.analysis.planMode.enabled).toBe(true);
171
+ expect(context.analysis.planMode.source).toBe("explicit");
172
+ expect(context.analysis.planMode.executionMode).toBe("plan-only");
173
+ });
174
+ it("deterministically splits obvious multi-question asks when the model omits question parts", async () => {
175
+ vi.mocked(generate).mockResolvedValue({
176
+ query: "",
177
+ data: JSON.stringify({
178
+ intent: "Answer two questions",
179
+ intentCategory: "question",
180
+ normalizedQuery: "Answer two questions in order.",
181
+ confidence: 0.91,
182
+ }),
183
+ });
184
+ const context = {
185
+ task: {
186
+ id: 1,
187
+ projectId: 1,
188
+ status: "active",
189
+ initialQuery: "Where is search routed? How is verify triggered?",
190
+ createdAt: "now",
191
+ updatedAt: "now",
192
+ steps: [],
193
+ },
194
+ initContext: {
195
+ userQuery: "Where is search routed? How is verify triggered?",
196
+ },
197
+ };
198
+ await understandIntentStep.run({ context });
199
+ expect(context.analysis.intent.questions.map((question) => question.text)).toEqual([
200
+ "Where is search routed?",
201
+ "How is verify triggered?",
202
+ ]);
203
+ expect(context.analysis.planMode.enabled).toBe(true);
204
+ });
205
+ it("splits mixed-topic direct questions joined by 'and' when the model returns one question", async () => {
206
+ vi.mocked(generate).mockResolvedValue({
207
+ query: "",
208
+ data: JSON.stringify({
209
+ intent: "Answer the question",
210
+ intentCategory: "question",
211
+ normalizedQuery: "Answer the mixed-topic question.",
212
+ confidence: 0.88,
213
+ questions: [
214
+ {
215
+ id: "q1",
216
+ order: 0,
217
+ text: "Is error handling consistent across the codebase and how do I run the test suite?",
218
+ normalizedQuery: "Is error handling consistent across the codebase and how do I run the test suite?",
219
+ intentCategory: "question",
220
+ },
221
+ ],
222
+ }),
223
+ });
224
+ const context = {
225
+ initContext: {
226
+ userQuery: "Is error handling consistent across the codebase and how do I run the test suite?",
227
+ },
228
+ };
229
+ await understandIntentStep.run({ context });
230
+ expect(context.analysis.intent.questions.map((question) => question.text)).toEqual([
231
+ "Is error handling consistent across the codebase?",
232
+ "how do I run the test suite?",
233
+ ]);
234
+ expect(context.analysis.planMode.enabled).toBe(true);
235
+ });
236
+ });
237
+ //# sourceMappingURL=understandIntentStep.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"understandIntentStep.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/understandIntentStep.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Verifies intent extraction stays stable for direct commands and malformed model output.\n// It mocks the model response when needed and checks the stored analysis intent, not log text.\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nvi.mock(\"../../lib/generate.js\", () => ({\n generate: vi.fn(),\n}));\n\nimport { generate } from \"../../lib/generate.js\";\nimport { understandIntentStep } from \"../../agents/understandIntentStep.js\";\n\n// Pass example: \"/test-run foo.ts\" stays a command-like request and extracts \"foo.ts\".\n// Fail example: a slash command that triggers the model or drops the explicit file target.\ndescribe(\"understandIntentStep\", () => {\n beforeEach(() => {\n vi.mocked(generate).mockReset();\n });\n\n it(\"bypasses the model for slash commands and extracts file targets directly\", async () => {\n const context = {\n initContext: {\n userQuery: \"/test-run cli/src/pipeline/modules/finalAnswerModule.ts\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(generate).not.toHaveBeenCalled();\n expect(context.analysis.intent.intentCategory).toBe(\"request\");\n expect(context.analysis.intent.targetFiles).toEqual([\n \"cli/src/pipeline/modules/finalAnswerModule.ts\",\n ]);\n });\n\n it(\"falls back safely on invalid model output and extracts file targets from the raw query\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: \"not-json\",\n });\n\n const context = {\n initContext: {\n userQuery: \"Explain semanticAnalysisModule.ts and finalAnswerModule.ts\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.intent.intentCategory).toBe(\"request\");\n expect(context.analysis.intent.confidence).toBe(0.3);\n expect(context.analysis.intent.questions).toHaveLength(1);\n expect(context.analysis.intent.targetFiles).toEqual([\n \"semanticAnalysisModule.ts\",\n \"finalAnswerModule.ts\",\n ]);\n });\n\n it(\"extracts folder refs and extensionless file refs from the raw query fallback\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: \"not-json\",\n });\n\n const context = {\n initContext: {\n userQuery: \"please tell me what the three files in the guards folder do? Explain EvalReportCmd too.\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.intent.targetFiles).toEqual(\n expect.arrayContaining([\"guards\", \"EvalReportCmd\"])\n );\n });\n\n it(\"stores ordered decomposed questions when the model returns them\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: JSON.stringify({\n intent: \"Answer two architecture questions\",\n intentCategory: \"question\",\n normalizedQuery: \"Answer two architecture questions in order.\",\n confidence: 0.92,\n questions: [\n {\n id: \"q1\",\n order: 0,\n text: \"Where is search routed?\",\n normalizedQuery: \"Where is search routed?\",\n intentCategory: \"question\",\n },\n {\n id: \"q2\",\n order: 1,\n text: \"How is verify triggered?\",\n normalizedQuery: \"How is verify triggered?\",\n intentCategory: \"question\",\n },\n ],\n }),\n } as any);\n\n const context = {\n task: {\n id: 1,\n projectId: 1,\n status: \"active\",\n initialQuery: \"Where is search routed and how is verify triggered?\",\n createdAt: \"now\",\n updatedAt: \"now\",\n steps: [],\n },\n initContext: {\n userQuery: \"Where is search routed? How is verify triggered?\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.intent.questions).toHaveLength(2);\n expect(context.analysis.intent.questions.map((question: any) => question.text)).toEqual([\n \"Where is search routed?\",\n \"How is verify triggered?\",\n ]);\n expect(context.analysis.planMode.enabled).toBe(true);\n expect(context.analysis.planMode.executionMode).toBe(\"execute\");\n expect(context.task.taskQuestions).toEqual([\n \"Where is search routed?\",\n \"How is verify triggered?\",\n ]);\n });\n\n it(\"marks explicit /plan requests as plan mode\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: JSON.stringify({\n intent: \"Plan the routing change\",\n intentCategory: \"planning\",\n normalizedQuery: \"fix the routing flow and explain the tradeoffs\",\n confidence: 0.93,\n }),\n } as any);\n\n const context = {\n initContext: {\n userQuery: \"/plan fix the routing flow and explain the tradeoffs\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.planMode.enabled).toBe(true);\n expect(context.analysis.planMode.source).toBe(\"explicit\");\n expect(context.analysis.planMode.executionMode).toBe(\"plan-only\");\n });\n\n it(\"lets explicit /plan requests keep ordered decomposed questions\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: JSON.stringify({\n intent: \"Answer two architecture questions\",\n intentCategory: \"question\",\n normalizedQuery: \"Answer the two routing questions in order.\",\n confidence: 0.94,\n questions: [\n {\n id: \"q1\",\n order: 0,\n text: \"Where is search routed?\",\n normalizedQuery: \"Where is search routed?\",\n intentCategory: \"question\",\n },\n {\n id: \"q2\",\n order: 1,\n text: \"How is verify triggered?\",\n normalizedQuery: \"How is verify triggered?\",\n intentCategory: \"question\",\n },\n ],\n }),\n } as any);\n\n const context = {\n initContext: {\n userQuery: \"/plan Where is search routed? How is verify triggered?\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(generate).toHaveBeenCalledTimes(1);\n expect(context.analysis.intent.questions.map((question: any) => question.text)).toEqual([\n \"Where is search routed?\",\n \"How is verify triggered?\",\n ]);\n expect(context.analysis.planMode.enabled).toBe(true);\n expect(context.analysis.planMode.source).toBe(\"explicit\");\n expect(context.analysis.planMode.executionMode).toBe(\"plan-only\");\n });\n\n it(\"deterministically splits obvious multi-question asks when the model omits question parts\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: JSON.stringify({\n intent: \"Answer two questions\",\n intentCategory: \"question\",\n normalizedQuery: \"Answer two questions in order.\",\n confidence: 0.91,\n }),\n } as any);\n\n const context = {\n task: {\n id: 1,\n projectId: 1,\n status: \"active\",\n initialQuery: \"Where is search routed? How is verify triggered?\",\n createdAt: \"now\",\n updatedAt: \"now\",\n steps: [],\n },\n initContext: {\n userQuery: \"Where is search routed? How is verify triggered?\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.intent.questions.map((question: any) => question.text)).toEqual([\n \"Where is search routed?\",\n \"How is verify triggered?\",\n ]);\n expect(context.analysis.planMode.enabled).toBe(true);\n });\n\n it(\"splits mixed-topic direct questions joined by 'and' when the model returns one question\", async () => {\n vi.mocked(generate).mockResolvedValue({\n query: \"\",\n data: JSON.stringify({\n intent: \"Answer the question\",\n intentCategory: \"question\",\n normalizedQuery: \"Answer the mixed-topic question.\",\n confidence: 0.88,\n questions: [\n {\n id: \"q1\",\n order: 0,\n text: \"Is error handling consistent across the codebase and how do I run the test suite?\",\n normalizedQuery: \"Is error handling consistent across the codebase and how do I run the test suite?\",\n intentCategory: \"question\",\n },\n ],\n }),\n } as any);\n\n const context = {\n initContext: {\n userQuery: \"Is error handling consistent across the codebase and how do I run the test suite?\",\n },\n } as any;\n\n await understandIntentStep.run({ context });\n\n expect(context.analysis.intent.questions.map((question: any) => question.text)).toEqual([\n \"Is error handling consistent across the codebase?\",\n \"how do I run the test suite?\",\n ]);\n expect(context.analysis.planMode.enabled).toBe(true);\n });\n});\n"]}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Verifies resumed understand calls receive compact checkpoint context.
3
+ *
4
+ * Why this file exists:
5
+ * - resumed follow-up queries need context before action-choice runs
6
+ * - understand should see one compact checkpoint, not a broad old packet dump
7
+ */
8
+ import { beforeEach, describe, expect, it, vi } from "vitest";
9
+ import { createAgentMemory } from "../../agent/state/memory.js";
10
+ const generateMock = vi.fn();
11
+ vi.mock("../../lib/generate.js", () => ({
12
+ generate: (...args) => generateMock(...args),
13
+ }));
14
+ describe("runUnderstand with resumed context", () => {
15
+ beforeEach(() => {
16
+ generateMock.mockReset();
17
+ });
18
+ it("passes compact resumed context into the understand prompt and input packet", async () => {
19
+ generateMock.mockResolvedValue({
20
+ data: JSON.stringify({
21
+ normalizedQuery: "did you check the memory.ts file? Also outline what you already checked",
22
+ queryScope: "targeted",
23
+ explicitTargets: ["memory.ts"],
24
+ constraints: [],
25
+ primaryIntent: "Verify if memory.ts was checked and summarize prior checks.",
26
+ alternativeIntents: [],
27
+ searchTermGroups: [{ kind: "command-path", terms: ["memory.ts", "checked"] }],
28
+ ambiguityFlags: [],
29
+ }),
30
+ trace: undefined,
31
+ });
32
+ const { runUnderstand } = await import("../../agent/runtime/understand.js");
33
+ const memory = createAgentMemory("did you check the memory.ts file? Also outline what you already checked", "/repo", "/repo");
34
+ memory.resumeCheckpoint = {
35
+ sourceTurnIndex: 1,
36
+ sourceUserQuery: "how does the agent determine the max turns per agent loop?",
37
+ finalAnswer: "The previous run checked loopReview.ts and runAgentLoop.ts.",
38
+ finalAnswerPacket: {
39
+ normalizedQuery: "how does the agent determine the max turns per agent loop?",
40
+ primaryIntent: "Explain the turn limit owner.",
41
+ queryScope: "broad-repo",
42
+ explicitTargets: ["max turns"],
43
+ groundedPrimaryFiles: [],
44
+ groundedSupportingFiles: [],
45
+ mustMentionFiles: ["/repo/cli/src/agent/policy/loopReview.ts"],
46
+ mustMentionSymbols: ["buildLoopReviewPacket"],
47
+ mustMentionFacts: ["Derives one structured review packet for every action-choice turn."],
48
+ },
49
+ };
50
+ const result = await runUnderstand(memory);
51
+ expect(result.explicitTargets).toEqual(["memory.ts"]);
52
+ expect(generateMock).toHaveBeenCalledTimes(1);
53
+ const [request, options] = generateMock.mock.calls[0];
54
+ expect(String(request.content)).toContain("Resumed context:");
55
+ expect(options).toEqual(expect.objectContaining({
56
+ inputContext: expect.objectContaining({
57
+ resumedContext: expect.objectContaining({
58
+ sourceTurnIndex: 1,
59
+ mustMentionFiles: ["/repo/cli/src/agent/policy/loopReview.ts"],
60
+ }),
61
+ }),
62
+ }));
63
+ });
64
+ });
65
+ //# sourceMappingURL=understandResumeContext.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"understandResumeContext.test.js","sourceRoot":"","sources":["../../../src/__tests__/agents/understandResumeContext.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Verifies resumed understand calls receive compact checkpoint context.\n *\n * Why this file exists:\n * - resumed follow-up queries need context before action-choice runs\n * - understand should see one compact checkpoint, not a broad old packet dump\n */\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { createAgentMemory } from \"../../agent/state/memory.js\";\n\nconst generateMock = vi.fn();\n\nvi.mock(\"../../lib/generate.js\", () => ({\n generate: (...args: unknown[]) => generateMock(...args),\n}));\n\ndescribe(\"runUnderstand with resumed context\", () => {\n beforeEach(() => {\n generateMock.mockReset();\n });\n\n it(\"passes compact resumed context into the understand prompt and input packet\", async () => {\n generateMock.mockResolvedValue({\n data: JSON.stringify({\n normalizedQuery: \"did you check the memory.ts file? Also outline what you already checked\",\n queryScope: \"targeted\",\n explicitTargets: [\"memory.ts\"],\n constraints: [],\n primaryIntent: \"Verify if memory.ts was checked and summarize prior checks.\",\n alternativeIntents: [],\n searchTermGroups: [{ kind: \"command-path\", terms: [\"memory.ts\", \"checked\"] }],\n ambiguityFlags: [],\n }),\n trace: undefined,\n });\n\n const { runUnderstand } = await import(\"../../agent/runtime/understand.js\");\n const memory = createAgentMemory(\n \"did you check the memory.ts file? Also outline what you already checked\",\n \"/repo\",\n \"/repo\"\n );\n memory.resumeCheckpoint = {\n sourceTurnIndex: 1,\n sourceUserQuery: \"how does the agent determine the max turns per agent loop?\",\n finalAnswer: \"The previous run checked loopReview.ts and runAgentLoop.ts.\",\n finalAnswerPacket: {\n normalizedQuery: \"how does the agent determine the max turns per agent loop?\",\n primaryIntent: \"Explain the turn limit owner.\",\n queryScope: \"broad-repo\",\n explicitTargets: [\"max turns\"],\n groundedPrimaryFiles: [],\n groundedSupportingFiles: [],\n mustMentionFiles: [\"/repo/cli/src/agent/policy/loopReview.ts\"],\n mustMentionSymbols: [\"buildLoopReviewPacket\"],\n mustMentionFacts: [\"Derives one structured review packet for every action-choice turn.\"],\n },\n };\n\n const result = await runUnderstand(memory);\n\n expect(result.explicitTargets).toEqual([\"memory.ts\"]);\n expect(generateMock).toHaveBeenCalledTimes(1);\n const [request, options] = generateMock.mock.calls[0]!;\n expect(String((request as { content: string }).content)).toContain(\"Resumed context:\");\n expect(options).toEqual(expect.objectContaining({\n inputContext: expect.objectContaining({\n resumedContext: expect.objectContaining({\n sourceTurnIndex: 1,\n mustMentionFiles: [\"/repo/cli/src/agent/policy/loopReview.ts\"],\n }),\n }),\n }));\n });\n});\n"]}