scai 0.1.178 → 1.0.1

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 +171 -260
  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":"summarizeReadEvidence.js","sourceRoot":"","sources":["../../../src/agent/read/summarizeReadEvidence.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Builds grounded triage and fallback read evidence for the modular agent runtime.\n *\n * Why this file exists:\n * - file-aware extraction should stay separate from read execution and loop control\n * - cheap triage reads should preserve more real code shape than single matching lines\n * - deterministic fallback data should use the same evidence shape as model-backed reads\n */\nimport fs from \"fs\";\nimport path from \"path\";\nimport { computeContentFingerprint, computeQueryFingerprint } from \"../../utils/fileEvidenceCache.js\";\nimport { nowLocalIso } from \"../../utils/time.js\";\nimport type { AgentReadEvidence } from \"../types.js\";\n\nconst MAX_QUERY_TERMS = 6;\nconst MAX_SUMMARY_CHARS = 240;\nconst MAX_KEY_SYMBOLS = 8;\nconst MAX_SNIPPETS = 4;\nconst MAX_EXCERPTS = 3;\nconst MAX_EXCERPT_LINES = 40;\nconst BLOCK_SEARCH_RADIUS = 8;\nconst MAX_FULL_READ_BLOCKS = 4;\n\ntype ReadSummaryOptions = {\n readMode?: AgentReadEvidence[\"readMode\"];\n hardTarget?: boolean;\n explicitTargets?: string[];\n};\n\ntype BlockExcerpt = NonNullable<AgentReadEvidence[\"excerpts\"]>[number];\n\ntype SnippetLineCandidate = {\n index: number;\n line: string;\n score: number;\n matchedTermCount: number;\n kind:\n | \"command-registration\"\n | \"function\"\n | \"class\"\n | \"config\"\n | \"query-execution\"\n | \"object\"\n | \"bridge\"\n | \"import\"\n | \"type\"\n | \"comment\"\n | \"noise\"\n | \"other\";\n};\n\nexport function nowIso(): string {\n return nowLocalIso();\n}\n\nexport function uniqueStrings(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n const trimmed = String(value ?? \"\").trim();\n if (!trimmed || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nexport function dedupePaths(paths: string[]): string[] {\n return uniqueStrings(paths.map((filePath) => path.normalize(filePath)));\n}\n\nfunction escapeRegex(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Treats real folders as folders when they exist.\n * Example: \"cli/src/agents\" -> true, \"agentLoop.ts\" -> false.\n */\nexport function looksLikeDirectoryTarget(target: string, executionPath: string): boolean {\n const absolute = path.isAbsolute(target) ? target : path.join(executionPath, target);\n try {\n return fs.existsSync(absolute) && fs.statSync(absolute).isDirectory();\n } catch {\n return !path.extname(target);\n }\n}\n\nfunction extractQueryTerms(query: string): string[] {\n return uniqueStrings(\n query\n .split(/[^A-Za-z0-9_./-]+/)\n .map((part) => part.trim().toLowerCase())\n .filter((part) => part.length >= 4 && !part.includes(\"/\"))\n ).slice(0, MAX_QUERY_TERMS);\n}\n\nfunction firstNonEmptyLine(lines: string[]): string {\n return lines.find((line) => line.trim().length > 0)?.trim() ?? \"[empty file]\";\n}\n\n/**\n * Pulls the first doc block near the top of the file into one compact summary line.\n * Example: a top doc comment becomes one plain summary string.\n */\nfunction extractTopCommentBlock(code: string): string | undefined {\n const match = code.match(/^\\s*\\/\\*\\*([\\s\\S]*?)\\*\\//);\n if (!match) return undefined;\n const text = match[1]\n .split(\"\\n\")\n .map((line) => line.replace(/^\\s*\\*\\s?/, \"\").trim())\n .filter(Boolean)\n .join(\" \")\n .trim();\n return text.length > 0 ? text.slice(0, MAX_SUMMARY_CHARS) : undefined;\n}\n\n/**\n * Extracts readable exported contract names from common TS declarations.\n * Example: an exported interface yields its symbol name.\n */\nfunction extractExportNames(code: string): string[] {\n const matches = Array.from(\n code.matchAll(\n /^\\s*export\\s+(?:default\\s+)?(?:async\\s+)?(?:type|interface|class|function|const|let|var|enum)\\s+([A-Za-z0-9_$]+)/gm\n )\n );\n return uniqueStrings(matches.map((match) => match[1] ?? \"\").filter(Boolean)).slice(0, MAX_KEY_SYMBOLS);\n}\n\n/**\n * Extracts local declaration names from one file.\n * Example: `function buildFinalAnswer()` -> `buildFinalAnswer`.\n */\nfunction extractLocalDeclarationNames(code: string): string[] {\n const matches = Array.from(\n code.matchAll(\n /^\\s*(?:export\\s+)?(?:default\\s+)?(?:async\\s+)?(?:function|class|interface|type|const|let|var|enum)\\s+([A-Za-z0-9_$]+)/gm\n )\n );\n return uniqueStrings(matches.map((match) => match[1] ?? \"\").filter(Boolean)).slice(0, 20);\n}\n\nfunction isCommentOnlyLine(line: string): boolean {\n const trimmed = line.trim();\n return trimmed.startsWith(\"//\") || trimmed === \"/**\" || trimmed === \"*/\" || trimmed.startsWith(\"*\");\n}\n\nfunction isImportLine(line: string): boolean {\n const trimmed = line.trim();\n return /^import\\s+(?:type\\s+)?/.test(trimmed) || /^const\\s+[A-Za-z0-9_$]+\\s*=\\s*require\\(/.test(trimmed);\n}\n\nfunction isBridgeLine(line: string): boolean {\n return /^export\\s+(?:\\*|\\{[\\s\\S]+?\\})\\s+from\\s+[\"'][^\"']+[\"'];?$/.test(line.trim());\n}\n\nfunction isTypeOnlyLine(line: string): boolean {\n return /^(?:export\\s+)?type\\s+[A-Za-z0-9_$]+\\s*=/.test(line.trim());\n}\n\nfunction isNoiseLine(line: string): boolean {\n const trimmed = line.trim();\n return (\n trimmed.length === 0 ||\n /^\\/\\/\\s*File:/.test(trimmed) ||\n /^[{}[\\]]\\s*;?$/.test(trimmed)\n );\n}\n\nfunction scoreSnippetLine(line: string, queryTerms: string[], keySymbols: string[]): SnippetLineCandidate {\n const trimmed = line.trim();\n const lowered = trimmed.toLowerCase();\n const matchedTermCount = queryTerms.filter((term) => lowered.includes(term)).length\n + keySymbols.filter((symbol) => lowered.includes(symbol.toLowerCase())).length;\n\n let kind: SnippetLineCandidate[\"kind\"] = \"other\";\n let score = matchedTermCount * 25;\n\n if (isNoiseLine(trimmed)) {\n kind = \"noise\";\n score -= 90;\n } else if (isCommentOnlyLine(trimmed)) {\n kind = \"comment\";\n score -= 45;\n } else if (isImportLine(trimmed)) {\n kind = \"import\";\n score -= 35;\n } else if (isBridgeLine(trimmed)) {\n kind = \"bridge\";\n score -= 8;\n } else if (isTypeOnlyLine(trimmed)) {\n kind = \"type\";\n score -= 16;\n } else if (/\\.(?:command|action)\\s*\\(/.test(trimmed)) {\n kind = \"command-registration\";\n score += 60;\n } else if (/\\bprepare\\(.+\\)\\s*\\.\\s*(?:all|get|run)\\(/.test(trimmed) || /\\.prepare\\(/.test(trimmed)) {\n kind = \"query-execution\";\n score += 55;\n } else if (/\\b(?:export\\s+)?(?:async\\s+)?function\\b/.test(trimmed)) {\n kind = \"function\";\n score += 50;\n } else if (/\\bclass\\s+[A-Za-z0-9_$]+/.test(trimmed)) {\n kind = \"class\";\n score += 45;\n } else if (/\\bprocess\\.env\\b/.test(trimmed) || /^[A-Za-z0-9_$\"'`.-]+\\s*:\\s*(?:[\"'`[{]|true\\b|false\\b|null\\b|\\d)/.test(trimmed)) {\n kind = \"config\";\n score += 35;\n } else if (/\\b(?:export\\s+)?(?:const|let|var)\\s+[A-Za-z0-9_$]+\\s*=/.test(trimmed)) {\n kind = \"object\";\n score += 28;\n } else {\n score += 8;\n }\n\n if (trimmed.length > 140) {\n score -= 6;\n }\n\n return {\n index: 0,\n line,\n score,\n matchedTermCount,\n kind,\n };\n}\n\nfunction isImplementationCandidateKind(kind: SnippetLineCandidate[\"kind\"]): boolean {\n return kind === \"command-registration\"\n || kind === \"function\"\n || kind === \"class\"\n || kind === \"config\"\n || kind === \"query-execution\"\n || kind === \"object\";\n}\n\nfunction classifyGroundingDepth(code: string): \"wrapper\" | \"mixed\" | \"direct\" {\n const codeLines = code\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .filter((line) => !isCommentOnlyLine(line));\n\n if (codeLines.length === 0) {\n return \"wrapper\";\n }\n\n const realBodyCount = codeLines.filter((line) =>\n /\\.(?:command|action)\\s*\\(/.test(line) ||\n /\\b(?:export\\s+)?(?:async\\s+)?function\\b/.test(line) ||\n /\\bclass\\s+[A-Za-z0-9_$]+/.test(line) ||\n /\\b(?:export\\s+)?(?:const|let|var)\\s+[A-Za-z0-9_$]+\\s*=/.test(line) ||\n /\\bprocess\\.env\\b/.test(line)\n ).length;\n const bridgeCount = codeLines.filter((line) => isBridgeLine(line)).length;\n const importishCount = codeLines.filter((line) => isImportLine(line) || isTypeOnlyLine(line)).length;\n\n if (realBodyCount === 0 && bridgeCount > 0 && bridgeCount + importishCount === codeLines.length) {\n return \"wrapper\";\n }\n\n if (realBodyCount > 0 && bridgeCount > 0) {\n return \"mixed\";\n }\n\n return \"direct\";\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction pickGroundingSnippets(lines: string[], query: string, keySymbols: string[], groundingDepth: \"wrapper\" | \"mixed\" | \"direct\"): string[] {\n const terms = extractQueryTerms(query);\n const candidates = lines\n .map((line, index) => {\n const candidate = scoreSnippetLine(line, terms, keySymbols);\n return { ...candidate, index };\n })\n .filter((candidate) => candidate.line.trim().length > 0);\n\n if (groundingDepth === \"wrapper\") {\n const bridge = candidates\n .filter((candidate) => candidate.kind === \"bridge\")\n .sort((left, right) => right.score - left.score || left.index - right.index)[0];\n if (bridge) {\n return [`${bridge.index + 1}: ${bridge.line.trim()}`];\n }\n }\n\n const matchingCandidates = candidates\n .filter((candidate) => candidate.matchedTermCount > 0)\n .sort((left, right) => right.score - left.score || right.matchedTermCount - left.matchedTermCount || left.index - right.index);\n const fallbackCandidates = candidates\n .filter((candidate) => candidate.kind !== \"noise\")\n .sort((left, right) => right.score - left.score || left.index - right.index);\n\n const selected = uniqueStrings(\n [...matchingCandidates, ...fallbackCandidates]\n .filter((candidate) => candidate.score > -10)\n .slice(0, MAX_SNIPPETS)\n .map((candidate) => `${candidate.index + 1}: ${candidate.line.trim()}`)\n );\n\n if (selected.length > 0) {\n return selected;\n }\n\n return lines\n .map((line, index) => ({ line, index }))\n .filter(({ line }) => line.trim().length > 0)\n .slice(0, 1)\n .map(({ line, index }) => `${index + 1}: ${line.trim()}`);\n}\n\nfunction findMatchingLineIndexes(lines: string[], query: string, keySymbols: string[]): number[] {\n const terms = extractQueryTerms(query);\n const symbolTerms = keySymbols.map((symbol) => symbol.toLowerCase());\n const indexes: number[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const lowered = lines[index].toLowerCase();\n if (terms.some((term) => lowered.includes(term)) || symbolTerms.some((term) => lowered.includes(term))) {\n indexes.push(index);\n }\n }\n return indexes;\n}\n\nfunction trimTrailingBlankLines(lines: string[]): string[] {\n let end = lines.length;\n while (end > 0 && lines[end - 1].trim().length === 0) {\n end -= 1;\n }\n return lines.slice(0, end);\n}\n\nfunction resolveBlockStart(lines: string[], seedIndex: number): number {\n const seedLine = lines[seedIndex]?.trim() ?? \"\";\n if (seedLine.startsWith(\"/**\") || seedLine.startsWith(\"/*\") || seedLine.startsWith(\"*\")) {\n for (let cursor = seedIndex; cursor >= Math.max(0, seedIndex - BLOCK_SEARCH_RADIUS); cursor -= 1) {\n const line = lines[cursor].trim();\n if (line.startsWith(\"/**\") || line.startsWith(\"/*\")) {\n return cursor;\n }\n }\n }\n for (let cursor = seedIndex; cursor >= Math.max(0, seedIndex - BLOCK_SEARCH_RADIUS); cursor -= 1) {\n const line = lines[cursor];\n if (/^\\s*(export\\s+)?(async\\s+)?(function|class|interface|type|enum)\\b/.test(line)) {\n return cursor;\n }\n if (/^\\s*(export\\s+)?(const|let|var)\\s+[A-Za-z0-9_$]+\\s*=/.test(line)) {\n return cursor;\n }\n if (/\\.(?:command|action)\\s*\\(/.test(line)) {\n return cursor;\n }\n if (/^\\s*[A-Za-z0-9_$\"'`.-]+\\s*:\\s*(?:[\"'`[{]|true\\b|false\\b|null\\b|\\d)/.test(line)) {\n return cursor;\n }\n }\n return seedIndex;\n}\n\nfunction resolveBlockEnd(lines: string[], startIndex: number): number {\n const startLine = lines[startIndex]?.trim() ?? \"\";\n if (startLine.startsWith(\"/**\") || startLine.startsWith(\"/*\")) {\n for (let cursor = startIndex; cursor < Math.min(lines.length, startIndex + MAX_EXCERPT_LINES); cursor += 1) {\n if (lines[cursor].trim().endsWith(\"*/\")) {\n return cursor;\n }\n }\n }\n let balance = 0;\n let opened = false;\n for (let cursor = startIndex; cursor < lines.length; cursor += 1) {\n const line = lines[cursor];\n if (cursor > startIndex && /\\.(?:command|action)\\s*\\(/.test(lines[startIndex]) && !/\\.(?:command|action)\\s*\\(/.test(line) && line.trim().length === 0) {\n return cursor - 1;\n }\n for (const char of line) {\n if (char === \"{\") {\n balance += 1;\n opened = true;\n } else if (char === \"}\") {\n balance -= 1;\n }\n }\n if (opened && balance <= 0) {\n return cursor;\n }\n if (!opened && /;\\s*$/.test(line.trim())) {\n return cursor;\n }\n if (cursor - startIndex >= MAX_EXCERPT_LINES - 1) {\n return cursor;\n }\n }\n return Math.min(lines.length - 1, startIndex + MAX_EXCERPT_LINES - 1);\n}\n\nfunction extractSymbolsFromHeader(headerLine: string, knownSymbols: string[]): string[] {\n const symbols = new Set<string>();\n const declarationMatch = headerLine.match(\n /\\b(?:function|class|interface|type|enum|const|let|var)\\s+([A-Za-z0-9_$]+)/\n );\n if (declarationMatch?.[1]) {\n symbols.add(declarationMatch[1]);\n }\n for (const symbol of knownSymbols) {\n if (headerLine.includes(symbol)) {\n symbols.add(symbol);\n }\n }\n return Array.from(symbols);\n}\n\nfunction isConceptExcerpt(excerpt: BlockExcerpt): boolean {\n const description = excerpt.description.toLowerCase();\n const code = excerpt.code.trim();\n return description.includes(\"overview\")\n || description.includes(\"responsibilities\")\n || description.includes(\"boundary\")\n || /^\\/\\*\\*/.test(code)\n || /^\\/\\*/.test(code);\n}\n\nfunction isImplementationExcerpt(excerpt: BlockExcerpt): boolean {\n const description = excerpt.description.toLowerCase();\n const code = excerpt.code;\n return description.startsWith(\"implementation block\")\n || description.includes(\"query execution\")\n || description.includes(\"command registration\")\n || /\\b(?:export\\s+)?(?:async\\s+)?function\\b/.test(code)\n || /\\bclass\\s+[A-Za-z0-9_$]+/.test(code)\n || /\\b(?:export\\s+)?(?:const|let|var)\\s+[A-Za-z0-9_$]+\\s*=/.test(code)\n || /\\.command\\(/.test(code)\n || /\\.prepare\\(/.test(code);\n}\n\nfunction buildExcerptFromSeed(lines: string[], seedIndex: number, keySymbols: string[]): BlockExcerpt | undefined {\n const startIndex = resolveBlockStart(lines, seedIndex);\n const endIndex = resolveBlockEnd(lines, startIndex);\n const blockLines = trimTrailingBlankLines(lines.slice(startIndex, endIndex + 1));\n if (blockLines.length === 0) {\n return undefined;\n }\n const headerLine = blockLines[0];\n const symbols = extractSymbolsFromHeader(headerLine, keySymbols);\n return {\n description: buildExcerptDescription(symbols, headerLine, blockLines),\n startLine: startIndex + 1,\n endLine: startIndex + blockLines.length,\n ...(symbols.length > 0 ? { symbols } : {}),\n code: blockLines.join(\"\\n\"),\n };\n}\n\nfunction isExplanationLikeQuery(query: string): boolean {\n return /\\b(explain|summary|summarize|architecture|module|how|purpose|responsibilit)/i.test(query);\n}\n\nfunction prioritizeExcerptsForAnswer(excerpts: BlockExcerpt[], query: string): BlockExcerpt[] {\n if (excerpts.length <= 1) {\n return excerpts;\n }\n\n if (!isExplanationLikeQuery(query)) {\n return excerpts;\n }\n\n const bestConcept = excerpts.find((excerpt) => isConceptExcerpt(excerpt));\n const bestImplementation = excerpts.find((excerpt) => isImplementationExcerpt(excerpt));\n\n const ordered: BlockExcerpt[] = [];\n if (bestConcept) {\n ordered.push(bestConcept);\n }\n if (bestImplementation && !ordered.some((excerpt) => excerpt.startLine === bestImplementation.startLine && excerpt.endLine === bestImplementation.endLine)) {\n ordered.push(bestImplementation);\n }\n for (const excerpt of excerpts) {\n if (!ordered.some((entry) => entry.startLine === excerpt.startLine && entry.endLine === excerpt.endLine)) {\n ordered.push(excerpt);\n }\n }\n return ordered.slice(0, MAX_EXCERPTS);\n}\n\nfunction buildExcerptDescription(symbols: string[], startLine: string, blockLines: string[]): string {\n const blockText = blockLines.join(\"\\n\");\n if (/^\\s*\\/\\*\\*/.test(startLine) && /\\b(?:responsibilit|overview|final answer module|phase boundary)\\b/i.test(blockText)) {\n return \"Module overview and key responsibilities\";\n }\n if (/^\\s*\\/\\*/.test(startLine) && /\\b(?:boundary|grounding rule)\\b/i.test(blockText)) {\n return \"Boundary conditions and grounding rules\";\n }\n const commandLiteral = blockText.match(/\\.command\\(\\s*[\"'`]([^\"'`]+)[\"'`]\\s*\\)/)?.[1];\n if (commandLiteral) {\n return `CLI command registration for ${commandLiteral}`;\n }\n if (/prepare\\([^)]+\\)\\s*\\.\\s*(?:all|get|run)\\(/.test(blockText) || /\\.prepare\\([^)]+\\)/.test(blockText)) {\n const symbol = symbols[0];\n return symbol ? `SQLite query execution in ${symbol}` : \"SQLite query execution block\";\n }\n const bridgeTarget = startLine.match(/^export\\s+(?:\\*|\\{[\\s\\S]+?\\})\\s+from\\s+[\"'][^\"']*\\/([^/\"']+)\\.[^/\"']+[\"'];?$/)?.[1];\n if (bridgeTarget) {\n return `Legacy bridge re-export to ${bridgeTarget}`;\n }\n if (symbols.length > 0 && /\\bcreateProgram\\b/.test(blockText)) {\n return \"Program factory wiring for top-level CLI commands\";\n }\n if (symbols.length > 0 && /\\bdefineConfig\\b/.test(blockText)) {\n return `Configuration block for ${symbols[0]}`;\n }\n if (symbols.length > 0) {\n return `Implementation block for ${symbols.slice(0, 3).join(\", \")}`;\n }\n if (/^\\s*export\\b/.test(startLine)) {\n return \"Relevant exported declaration block\";\n }\n return \"Relevant code block near the strongest query match\";\n}\n\nfunction buildBlockExcerpts(code: string, query: string, keySymbols: string[]): BlockExcerpt[] {\n const lines = code.split(\"\\n\");\n const queryTerms = extractQueryTerms(query);\n const matchIndexes = findMatchingLineIndexes(lines, query, keySymbols);\n const fallbackBlockSeeds = lines\n .map((line, index) => ({ ...scoreSnippetLine(line, queryTerms, keySymbols), index }))\n .filter((candidate) => candidate.kind !== \"noise\" && candidate.kind !== \"comment\" && candidate.kind !== \"import\")\n .sort((left, right) => right.score - left.score || left.index - right.index)\n .slice(0, MAX_FULL_READ_BLOCKS)\n .map((candidate) => candidate.index);\n const seedIndexes = uniqueStrings(\n (matchIndexes.length > 0 ? matchIndexes : keySymbols.map((symbol) => {\n const index = lines.findIndex((line) => line.includes(symbol));\n return index >= 0 ? String(index) : \"\";\n }))\n .map((value) => String(value))\n .filter((value) => value.length > 0)\n ).map((value) => Number(value)).filter((value) => Number.isInteger(value) && value >= 0);\n const orderedSeedIndexes = uniqueStrings([\n ...seedIndexes.map(String),\n ...fallbackBlockSeeds.map(String),\n ]).map(Number);\n\n const excerpts: BlockExcerpt[] = [];\n const seenRanges = new Set<string>();\n for (const seedIndex of orderedSeedIndexes) {\n const excerpt = buildExcerptFromSeed(lines, seedIndex, keySymbols);\n if (!excerpt) {\n continue;\n }\n const rangeKey = `${excerpt.startLine ?? 0}:${excerpt.endLine ?? 0}`;\n if (seenRanges.has(rangeKey)) {\n continue;\n }\n seenRanges.add(rangeKey);\n excerpts.push(excerpt);\n if (excerpts.length >= MAX_EXCERPTS) {\n break;\n }\n }\n\n if (isExplanationLikeQuery(query) && excerpts.some((excerpt) => isConceptExcerpt(excerpt)) && !excerpts.some((excerpt) => isImplementationExcerpt(excerpt))) {\n const implementationSeed = lines\n .map((line, index) => ({ ...scoreSnippetLine(line, queryTerms, keySymbols), index }))\n .filter((candidate) => isImplementationCandidateKind(candidate.kind))\n .sort((left, right) => right.score - left.score || left.index - right.index)[0];\n if (implementationSeed) {\n const implementationExcerpt = buildExcerptFromSeed(lines, implementationSeed.index, keySymbols);\n if (implementationExcerpt) {\n const exists = excerpts.some((excerpt) =>\n excerpt.startLine === implementationExcerpt.startLine && excerpt.endLine === implementationExcerpt.endLine\n );\n if (!exists) {\n excerpts.push(implementationExcerpt);\n }\n }\n }\n }\n\n return prioritizeExcerptsForAnswer(excerpts, query);\n}\n\nfunction determineRole(hardTarget: boolean, excerpts: BlockExcerpt[], matchedTerms: string[], keySymbols: string[]): AgentReadEvidence[\"role\"] {\n if (hardTarget) {\n return \"primary\";\n }\n if (excerpts.length >= 2 || matchedTerms.length >= 2) {\n return \"primary\";\n }\n if (excerpts.length > 0 || keySymbols.length > 0) {\n return \"supporting\";\n }\n return \"contextual\";\n}\n\nfunction buildRelevantContext(\n code: string,\n query: string,\n summary: string,\n keySymbols: string[],\n relevanceExplanation: string\n): AgentReadEvidence[\"relevantContext\"] {\n const terms = extractQueryTerms(query);\n const context: AgentReadEvidence[\"relevantContext\"] = [];\n const docBlock = extractTopCommentBlock(code);\n\n if (docBlock) {\n context.push({\n kind: \"purpose\",\n text: docBlock.slice(0, MAX_SUMMARY_CHARS),\n });\n } else if (summary.trim().length > 0) {\n context.push({\n kind: \"purpose\",\n text: summary.slice(0, MAX_SUMMARY_CHARS),\n });\n }\n\n const matchedTerms = terms.filter((term) => code.toLowerCase().includes(term));\n if (matchedTerms.length > 0) {\n context.push({\n kind: \"query-match\",\n text: `Matches query terms: ${matchedTerms.slice(0, 4).join(\", \")}.`,\n });\n } else if (relevanceExplanation.trim().length > 0) {\n context.push({\n kind: \"query-match\",\n text: relevanceExplanation.slice(0, MAX_SUMMARY_CHARS),\n });\n }\n\n if (keySymbols.length > 0) {\n context.push({\n kind: \"dependency\",\n text: `Defines exported symbols: ${keySymbols.slice(0, 4).join(\", \")}.`,\n });\n }\n\n return context.slice(0, 3);\n}\n\nfunction buildRelevanceExplanation(\n docBlock: string | undefined,\n matchedTerms: string[],\n keySymbols: string[],\n excerpts: BlockExcerpt[],\n role: AgentReadEvidence[\"role\"]\n): string {\n const reasons: string[] = [];\n if (docBlock) {\n reasons.push(`The top file comment describes ${docBlock.slice(0, 90)}.`);\n }\n if (matchedTerms.length > 0) {\n reasons.push(`It directly matches query terms: ${matchedTerms.slice(0, 4).join(\", \")}.`);\n }\n if (keySymbols.length > 0) {\n reasons.push(`It exports relevant symbols: ${keySymbols.slice(0, 4).join(\", \")}.`);\n }\n if (excerpts.length > 0) {\n const excerpt = excerpts[0];\n const span = excerpt.startLine && excerpt.endLine\n ? `lines ${excerpt.startLine}-${excerpt.endLine}`\n : \"the extracted block\";\n reasons.push(`The strongest grounded block is in ${span}.`);\n }\n if (reasons.length === 0) {\n reasons.push(`This file looks ${role ?? \"contextual\"} to the query from its visible declarations and path shape.`);\n }\n return reasons.join(\" \");\n}\n\nfunction collectCommandFacts(excerpts: BlockExcerpt[]): string[] {\n const facts = new Set<string>();\n for (const excerpt of excerpts) {\n const code = String(excerpt.code ?? \"\");\n const commandPattern = /\\.command\\(\\s*[\"'`]([^\"'`]+)[\"'`]\\s*\\)(?:[\\s\\S]{0,240}?)\\.description\\(\\s*[\"'`]([^\"'`]+)[\"'`]\\s*\\)/g;\n let describedMatch: RegExpExecArray | null;\n while ((describedMatch = commandPattern.exec(code)) !== null) {\n facts.add(`CLI command: ${describedMatch[1]}`);\n facts.add(`The CLI registers \"${describedMatch[1]}\" to ${describedMatch[2].replace(/\\.$/, \"\").toLowerCase()}.`);\n }\n\n const bareCommandPattern = /\\.command\\(\\s*[\"'`]([^\"'`]+)[\"'`]\\s*\\)/g;\n let bareMatch: RegExpExecArray | null;\n while ((bareMatch = bareCommandPattern.exec(code)) !== null) {\n facts.add(`CLI command: ${bareMatch[1]}`);\n }\n }\n return Array.from(facts).slice(0, 6);\n}\n\nfunction collectExactTargetPhrases(code: string, explicitTargets: string[]): string[] {\n const phrases: string[] = [];\n for (const target of explicitTargets) {\n const trimmed = String(target ?? \"\").trim();\n if (!trimmed) {\n continue;\n }\n const match = code.match(new RegExp(escapeRegex(trimmed), \"i\"));\n if (match?.[0]) {\n phrases.push(match[0]);\n }\n }\n return uniqueStrings(phrases).slice(0, 6);\n}\n\nfunction pickStrongestConceptExcerpt(excerpts: BlockExcerpt[]): BlockExcerpt | undefined {\n return excerpts.find((excerpt) => isConceptExcerpt(excerpt));\n}\n\nfunction pickStrongestImplementationExcerpt(excerpts: BlockExcerpt[]): BlockExcerpt | undefined {\n return excerpts.find((excerpt) => isImplementationExcerpt(excerpt));\n}\n\nfunction buildStrengthSignals(\n code: string,\n explicitTargets: string[],\n excerpts: BlockExcerpt[]\n): NonNullable<AgentReadEvidence[\"strengthSignals\"]> {\n const strongestConceptExcerpt = pickStrongestConceptExcerpt(excerpts);\n const strongestImplementationExcerpt = pickStrongestImplementationExcerpt(excerpts);\n const implementationSymbols = uniqueStrings([\n ...(strongestImplementationExcerpt?.symbols ?? []),\n ...extractLocalDeclarationNames(code),\n ]).slice(0, 8);\n\n return {\n exactTargetPhrases: collectExactTargetPhrases(code, explicitTargets),\n implementationSymbols,\n directAnswerFacts: collectCommandFacts(excerpts),\n ...(strongestConceptExcerpt ? {\n strongestConceptExcerpt: {\n description: strongestConceptExcerpt.description,\n startLine: strongestConceptExcerpt.startLine,\n endLine: strongestConceptExcerpt.endLine,\n symbols: strongestConceptExcerpt.symbols,\n },\n } : {}),\n ...(strongestImplementationExcerpt ? {\n strongestImplementationExcerpt: {\n description: strongestImplementationExcerpt.description,\n startLine: strongestImplementationExcerpt.startLine,\n endLine: strongestImplementationExcerpt.endLine,\n symbols: strongestImplementationExcerpt.symbols,\n },\n } : {}),\n };\n}\n\nfunction buildRisks(matchedTerms: string[], excerpts: BlockExcerpt[], readMode: AgentReadEvidence[\"readMode\"]): string[] {\n const risks: string[] = [];\n if (matchedTerms.length === 0) {\n risks.push(\"No direct query-term matches; relevance was inferred from declarations or nearby context.\");\n }\n if (excerpts.length === 0) {\n risks.push(\"No stable block excerpt was found; grounding relies on lighter line-level evidence.\");\n }\n if (readMode === \"triage\") {\n risks.push(\"This is a deterministic triage read, not a full model-backed file analysis.\");\n }\n return risks.slice(0, 3);\n}\n\nfunction computeTriageScore(matchedTerms: string[], keySymbols: string[], excerpts: BlockExcerpt[], hardTarget: boolean): number {\n const raw = (hardTarget ? 0.35 : 0) + matchedTerms.length * 0.14 + keySymbols.length * 0.05 + excerpts.length * 0.18;\n return clamp(Number(raw.toFixed(2)), 0, 1);\n}\n\nfunction buildDeterministicReadEvidence(\n filePath: string,\n code: string,\n query: string,\n options: ReadSummaryOptions = {}\n): AgentReadEvidence {\n const readMode = options.readMode ?? \"full\";\n const hardTarget = options.hardTarget === true;\n const lines = code.split(\"\\n\");\n const terms = extractQueryTerms(query);\n const docBlock = extractTopCommentBlock(code);\n const keySymbols = extractExportNames(code);\n const groundingDepth = classifyGroundingDepth(code);\n const snippets = pickGroundingSnippets(lines, query, keySymbols, groundingDepth);\n const excerpts = buildBlockExcerpts(code, query, keySymbols);\n const strengthSignals = buildStrengthSignals(code, options.explicitTargets ?? [], excerpts);\n const summarySource = excerpts[0]?.description ?? docBlock ?? snippets[0] ?? firstNonEmptyLine(lines);\n const matchedTerms = terms.filter((term) => code.toLowerCase().includes(term));\n const role = determineRole(hardTarget, excerpts, matchedTerms, keySymbols);\n const relevanceExplanation = buildRelevanceExplanation(docBlock, matchedTerms, keySymbols, excerpts, role);\n const relevantContext = buildRelevantContext(code, query, summarySource, keySymbols, relevanceExplanation);\n const triageScore = computeTriageScore(matchedTerms, keySymbols, excerpts, hardTarget);\n const risks = buildRisks(matchedTerms, excerpts, readMode);\n\n return {\n filePath,\n readMode,\n summary: summarySource.slice(0, MAX_SUMMARY_CHARS),\n snippets,\n keySymbols,\n matchedTerms,\n relevanceExplanation,\n role,\n excerpts,\n strengthSignals,\n risks,\n triageScore,\n relevantContext,\n contentFingerprint: computeContentFingerprint(code),\n queryFingerprint: computeQueryFingerprint(query),\n recordedAt: nowIso(),\n };\n}\n\n/**\n * Selects a compact, code-shaped prompt slice for full reads.\n * Example: keep the top docblock plus the strongest command/config/function blocks.\n */\nexport function selectCodeForFullReadPrompt(code: string, query: string, maxChars: number): string {\n if (code.length <= maxChars) {\n return code;\n }\n\n const keySymbols = extractExportNames(code);\n const docBlockMatch = code.match(/^\\s*\\/\\*\\*[\\s\\S]*?\\*\\//)?.[0]?.trim();\n const excerpts = buildBlockExcerpts(code, query, keySymbols).slice(0, MAX_FULL_READ_BLOCKS);\n const parts: string[] = [];\n\n if (docBlockMatch && docBlockMatch.length <= Math.floor(maxChars * 0.3)) {\n parts.push(docBlockMatch);\n }\n\n for (const excerpt of excerpts) {\n const block = `// ${excerpt.description}\\n${excerpt.code.trim()}`;\n if (parts.join(\"\\n\\n\").length + block.length > maxChars) {\n break;\n }\n parts.push(block);\n }\n\n const selected = parts.join(\"\\n\\n\").trim();\n if (selected.length > 0) {\n return selected.length <= maxChars\n ? selected\n : `${selected.slice(0, maxChars - 40)}\\n/* … file truncated for agent full read … */`;\n }\n\n const head = code.slice(0, Math.floor(maxChars * 0.6));\n const tail = code.slice(-Math.floor(maxChars * 0.4));\n return [head, \"\\n/* … file truncated for agent full read … */\\n\", tail].join(\"\");\n}\n\nexport function summarizeFileRead(\n filePath: string,\n code: string,\n query: string,\n options: ReadSummaryOptions = {}\n): AgentReadEvidence {\n return buildDeterministicReadEvidence(filePath, code, query, options);\n}\n\nexport function buildDeterministicFullReadFallback(\n filePath: string,\n code: string,\n query: string,\n options: Omit<ReadSummaryOptions, \"readMode\"> = {}\n): AgentReadEvidence {\n return buildDeterministicReadEvidence(filePath, code, query, {\n ...options,\n readMode: \"full\",\n });\n}\n"]}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Resolves simple-agent read targets inside the active repo or worktree.
3
+ *
4
+ * Why this file exists:
5
+ * - path safety should stay in one read-owned place
6
+ * - basename and suffix resolution should not be duplicated in actions or policy
7
+ * - file-vs-directory checks should stay out of policy derivation
8
+ * - read target behavior is easier to test when isolated from tool wiring
9
+ */
10
+ import fs from "fs";
11
+ import path from "path";
12
+ import { dedupePaths } from "./summarizeReadEvidence.js";
13
+ export class UnresolvedAgentTargetError extends Error {
14
+ constructor(target, reason) {
15
+ const details = reason === "ambiguous"
16
+ ? `Target is ambiguous inside the current repo/worktree: ${target}`
17
+ : `Target is not resolved inside the current repo/worktree yet: ${target}`;
18
+ super(details);
19
+ this.name = "UnresolvedAgentTargetError";
20
+ this.target = target;
21
+ }
22
+ }
23
+ function isWithinRoot(targetPath, rootPath) {
24
+ const relative = path.relative(rootPath, targetPath);
25
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
26
+ }
27
+ function looksConcretePath(rawTarget) {
28
+ return path.isAbsolute(rawTarget) || rawTarget.includes(path.sep);
29
+ }
30
+ function resolveConcretePathInsideRoot(memory, rawTarget) {
31
+ const executionPath = path.resolve(memory.session.executionPath);
32
+ const primaryAttempt = path.isAbsolute(rawTarget)
33
+ ? path.resolve(rawTarget)
34
+ : path.resolve(executionPath, rawTarget);
35
+ const attemptedInputs = [primaryAttempt];
36
+ if (!path.isAbsolute(rawTarget) && rawTarget.includes(path.sep)) {
37
+ attemptedInputs.push(path.resolve(path.sep, rawTarget));
38
+ }
39
+ for (const attemptedInput of attemptedInputs) {
40
+ if (!isWithinRoot(attemptedInput, executionPath)) {
41
+ continue;
42
+ }
43
+ if (fs.existsSync(attemptedInput)) {
44
+ return attemptedInput;
45
+ }
46
+ }
47
+ if (!isWithinRoot(primaryAttempt, executionPath)) {
48
+ throw new Error(`Path is outside the active repo/worktree: ${rawTarget}`);
49
+ }
50
+ return undefined;
51
+ }
52
+ function resolveExistingFilePath(targetPath) {
53
+ if (!fs.existsSync(targetPath)) {
54
+ return undefined;
55
+ }
56
+ return fs.statSync(targetPath).isFile() ? targetPath : undefined;
57
+ }
58
+ function resolveByCandidateBasename(memory, rawTarget) {
59
+ const normalizedTarget = rawTarget.replace(/\\/g, "/").toLowerCase();
60
+ const basenameTarget = path.basename(rawTarget).toLowerCase();
61
+ const matches = dedupePaths(memory.evidence.candidateFiles).filter((candidate) => {
62
+ const normalizedCandidate = candidate.replace(/\\/g, "/").toLowerCase();
63
+ const candidateBasename = path.basename(candidate).toLowerCase();
64
+ const candidateStem = candidateBasename.replace(/\.[^.]+$/, "");
65
+ return candidateBasename === basenameTarget ||
66
+ candidateStem === basenameTarget ||
67
+ normalizedCandidate.endsWith(`/${normalizedTarget}`);
68
+ });
69
+ if (matches.length === 1) {
70
+ return matches[0];
71
+ }
72
+ if (matches.length > 1) {
73
+ throw new UnresolvedAgentTargetError(rawTarget, "ambiguous");
74
+ }
75
+ return undefined;
76
+ }
77
+ export function canReadExplicitTarget(memory, rawTarget) {
78
+ if (!rawTarget.trim())
79
+ return false;
80
+ try {
81
+ const override = memory.task.explicitTargetOverrides[rawTarget.trim()];
82
+ if (override && resolveExplicitFileTarget(memory, override)) {
83
+ return true;
84
+ }
85
+ if (looksConcretePath(rawTarget) && resolveExplicitFileTarget(memory, rawTarget)) {
86
+ return true;
87
+ }
88
+ return typeof resolveByCandidateBasename(memory, rawTarget) === "string";
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ /**
95
+ * Resolves one explicit file target and rejects directories.
96
+ * Example: `cli/src/index.ts` -> `/repo/cli/src/index.ts`, `cli/src` -> `undefined`.
97
+ */
98
+ export function resolveExplicitFileTarget(memory, rawTarget) {
99
+ const concretePath = resolveConcretePathInsideRoot(memory, rawTarget);
100
+ if (!concretePath) {
101
+ return undefined;
102
+ }
103
+ return resolveExistingFilePath(concretePath);
104
+ }
105
+ export function resolveReadTarget(memory, rawTarget) {
106
+ const trimmedTarget = rawTarget.trim();
107
+ const override = memory.task.explicitTargetOverrides[trimmedTarget];
108
+ if (override) {
109
+ const overrideMatch = resolveExplicitFileTarget(memory, override);
110
+ if (overrideMatch) {
111
+ return overrideMatch;
112
+ }
113
+ }
114
+ if (looksConcretePath(trimmedTarget)) {
115
+ const concreteMatch = resolveExplicitFileTarget(memory, trimmedTarget);
116
+ if (concreteMatch) {
117
+ return concreteMatch;
118
+ }
119
+ }
120
+ const candidate = resolveByCandidateBasename(memory, trimmedTarget);
121
+ if (candidate) {
122
+ return candidate;
123
+ }
124
+ throw new UnresolvedAgentTargetError(trimmedTarget, "not-found");
125
+ }
126
+ //# sourceMappingURL=targetResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targetResolution.js","sourceRoot":"","sources":["../../../src/agent/read/targetResolution.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Resolves simple-agent read targets inside the active repo or worktree.\n *\n * Why this file exists:\n * - path safety should stay in one read-owned place\n * - basename and suffix resolution should not be duplicated in actions or policy\n * - file-vs-directory checks should stay out of policy derivation\n * - read target behavior is easier to test when isolated from tool wiring\n */\nimport fs from \"fs\";\nimport path from \"path\";\nimport type { AgentMemory } from \"../types.js\";\nimport { dedupePaths } from \"./summarizeReadEvidence.js\";\n\nexport class UnresolvedAgentTargetError extends Error {\n readonly target: string;\n\n constructor(target: string, reason: \"not-found\" | \"ambiguous\") {\n const details = reason === \"ambiguous\"\n ? `Target is ambiguous inside the current repo/worktree: ${target}`\n : `Target is not resolved inside the current repo/worktree yet: ${target}`;\n super(details);\n this.name = \"UnresolvedAgentTargetError\";\n this.target = target;\n }\n}\n\nfunction isWithinRoot(targetPath: string, rootPath: string): boolean {\n const relative = path.relative(rootPath, targetPath);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nfunction looksConcretePath(rawTarget: string): boolean {\n return path.isAbsolute(rawTarget) || rawTarget.includes(path.sep);\n}\n\nfunction resolveConcretePathInsideRoot(memory: AgentMemory, rawTarget: string): string | undefined {\n const executionPath = path.resolve(memory.session.executionPath);\n const primaryAttempt = path.isAbsolute(rawTarget)\n ? path.resolve(rawTarget)\n : path.resolve(executionPath, rawTarget);\n const attemptedInputs = [primaryAttempt];\n\n if (!path.isAbsolute(rawTarget) && rawTarget.includes(path.sep)) {\n attemptedInputs.push(path.resolve(path.sep, rawTarget));\n }\n\n for (const attemptedInput of attemptedInputs) {\n if (!isWithinRoot(attemptedInput, executionPath)) {\n continue;\n }\n if (fs.existsSync(attemptedInput)) {\n return attemptedInput;\n }\n }\n\n if (!isWithinRoot(primaryAttempt, executionPath)) {\n throw new Error(`Path is outside the active repo/worktree: ${rawTarget}`);\n }\n\n return undefined;\n}\n\nfunction resolveExistingFilePath(targetPath: string): string | undefined {\n if (!fs.existsSync(targetPath)) {\n return undefined;\n }\n return fs.statSync(targetPath).isFile() ? targetPath : undefined;\n}\n\nfunction resolveByCandidateBasename(memory: AgentMemory, rawTarget: string): string | undefined {\n const normalizedTarget = rawTarget.replace(/\\\\/g, \"/\").toLowerCase();\n const basenameTarget = path.basename(rawTarget).toLowerCase();\n const matches = dedupePaths(memory.evidence.candidateFiles).filter((candidate) => {\n const normalizedCandidate = candidate.replace(/\\\\/g, \"/\").toLowerCase();\n const candidateBasename = path.basename(candidate).toLowerCase();\n const candidateStem = candidateBasename.replace(/\\.[^.]+$/, \"\");\n return candidateBasename === basenameTarget ||\n candidateStem === basenameTarget ||\n normalizedCandidate.endsWith(`/${normalizedTarget}`);\n });\n\n if (matches.length === 1) {\n return matches[0];\n }\n\n if (matches.length > 1) {\n throw new UnresolvedAgentTargetError(rawTarget, \"ambiguous\");\n }\n\n return undefined;\n}\n\nexport function canReadExplicitTarget(memory: AgentMemory, rawTarget: string): boolean {\n if (!rawTarget.trim()) return false;\n try {\n const override = memory.task.explicitTargetOverrides[rawTarget.trim()];\n if (override && resolveExplicitFileTarget(memory, override)) {\n return true;\n }\n if (looksConcretePath(rawTarget) && resolveExplicitFileTarget(memory, rawTarget)) {\n return true;\n }\n return typeof resolveByCandidateBasename(memory, rawTarget) === \"string\";\n } catch {\n return false;\n }\n}\n\n/**\n * Resolves one explicit file target and rejects directories.\n * Example: `cli/src/index.ts` -> `/repo/cli/src/index.ts`, `cli/src` -> `undefined`.\n */\nexport function resolveExplicitFileTarget(memory: AgentMemory, rawTarget: string): string | undefined {\n const concretePath = resolveConcretePathInsideRoot(memory, rawTarget);\n if (!concretePath) {\n return undefined;\n }\n return resolveExistingFilePath(concretePath);\n}\n\nexport function resolveReadTarget(memory: AgentMemory, rawTarget: string): string {\n const trimmedTarget = rawTarget.trim();\n const override = memory.task.explicitTargetOverrides[trimmedTarget];\n if (override) {\n const overrideMatch = resolveExplicitFileTarget(memory, override);\n if (overrideMatch) {\n return overrideMatch;\n }\n }\n if (looksConcretePath(trimmedTarget)) {\n const concreteMatch = resolveExplicitFileTarget(memory, trimmedTarget);\n if (concreteMatch) {\n return concreteMatch;\n }\n }\n\n const candidate = resolveByCandidateBasename(memory, trimmedTarget);\n if (candidate) {\n return candidate;\n }\n\n throw new UnresolvedAgentTargetError(trimmedTarget, \"not-found\");\n}\n"]}
@@ -0,0 +1,41 @@
1
+ export function createDurableCheckpointFromArtifacts(memory) {
2
+ const finalAnswer = memory.artifacts.finalAnswer?.trim();
3
+ const finalAnswerPacket = memory.artifacts.latestFinalAnswerPacket;
4
+ if (finalAnswer && finalAnswerPacket) {
5
+ return {
6
+ finalAnswer,
7
+ finalAnswerPacket,
8
+ sourceTurnIndex: memory.task.currentTurnIndex,
9
+ sourceUserQuery: memory.task.initialQuery,
10
+ };
11
+ }
12
+ return memory.durableCheckpoint;
13
+ }
14
+ /**
15
+ * Copies the durable checkpoint into the per-turn resume slot before a resumed turn starts.
16
+ *
17
+ * Why this helper exists:
18
+ * - resumed prompts should read one stable checkpoint object during the turn
19
+ * - the durable checkpoint should stay the only persisted source of truth
20
+ */
21
+ export function refreshResumeCheckpoint(memory) {
22
+ memory.resumeCheckpoint = memory.durableCheckpoint;
23
+ return memory.resumeCheckpoint;
24
+ }
25
+ export function hasResumeCheckpoint(checkpoint) {
26
+ return !!checkpoint?.finalAnswer.trim() && !!checkpoint.finalAnswerPacket;
27
+ }
28
+ export function renderResumeCheckpointForPrompt(checkpoint) {
29
+ if (!hasResumeCheckpoint(checkpoint)) {
30
+ return undefined;
31
+ }
32
+ return {
33
+ sourceTurnIndex: checkpoint.sourceTurnIndex,
34
+ sourceUserQuery: checkpoint.sourceUserQuery,
35
+ finalAnswer: checkpoint.finalAnswer,
36
+ mustMentionFiles: checkpoint.finalAnswerPacket.mustMentionFiles,
37
+ mustMentionSymbols: checkpoint.finalAnswerPacket.mustMentionSymbols,
38
+ mustMentionFacts: checkpoint.finalAnswerPacket.mustMentionFacts,
39
+ };
40
+ }
41
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/agent/resume/checkpoint.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,oCAAoC,CAAC,MAAmB;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACzD,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACnE,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;QACrC,OAAO;YACL,WAAW;YACX,iBAAiB;YACjB,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB;YAC7C,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,iBAAiB,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACnD,OAAO,MAAM,CAAC,gBAAgB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAA6C;IAC/E,OAAO,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAA6C;IAE7C,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,CAAC,gBAAgB;QAC/D,kBAAkB,EAAE,UAAU,CAAC,iBAAiB,CAAC,kBAAkB;QACnE,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,CAAC,gBAAgB;KAChE,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Owns the runtime checkpoint we carry from the last grounded answer into a resumed turn.\n *\n * Why this file exists:\n * - resumed prompts need one compact anchor from the latest grounded result\n * - current-turn artifacts must stay separate so old packets do not leak into new output\n * - checkpoint shape and prompt rendering should stay out of persistence and loop code\n */\nimport type { AgentMemory, AgentResumeCheckpoint } from \"../types.js\";\n\nexport type ResumeCheckpointPromptShape = {\n sourceTurnIndex?: number;\n sourceUserQuery: string;\n finalAnswer: string;\n mustMentionFiles: string[];\n mustMentionSymbols: string[];\n mustMentionFacts: string[];\n};\n\nexport function createDurableCheckpointFromArtifacts(memory: AgentMemory): AgentResumeCheckpoint | undefined {\n const finalAnswer = memory.artifacts.finalAnswer?.trim();\n const finalAnswerPacket = memory.artifacts.latestFinalAnswerPacket;\n if (finalAnswer && finalAnswerPacket) {\n return {\n finalAnswer,\n finalAnswerPacket,\n sourceTurnIndex: memory.task.currentTurnIndex,\n sourceUserQuery: memory.task.initialQuery,\n };\n }\n return memory.durableCheckpoint;\n}\n\n/**\n * Copies the durable checkpoint into the per-turn resume slot before a resumed turn starts.\n *\n * Why this helper exists:\n * - resumed prompts should read one stable checkpoint object during the turn\n * - the durable checkpoint should stay the only persisted source of truth\n */\nexport function refreshResumeCheckpoint(memory: AgentMemory): AgentResumeCheckpoint | undefined {\n memory.resumeCheckpoint = memory.durableCheckpoint;\n return memory.resumeCheckpoint;\n}\n\nexport function hasResumeCheckpoint(checkpoint: AgentResumeCheckpoint | undefined): checkpoint is AgentResumeCheckpoint {\n return !!checkpoint?.finalAnswer.trim() && !!checkpoint.finalAnswerPacket;\n}\n\nexport function renderResumeCheckpointForPrompt(\n checkpoint: AgentResumeCheckpoint | undefined\n): ResumeCheckpointPromptShape | undefined {\n if (!hasResumeCheckpoint(checkpoint)) {\n return undefined;\n }\n return {\n sourceTurnIndex: checkpoint.sourceTurnIndex,\n sourceUserQuery: checkpoint.sourceUserQuery,\n finalAnswer: checkpoint.finalAnswer,\n mustMentionFiles: checkpoint.finalAnswerPacket.mustMentionFiles,\n mustMentionSymbols: checkpoint.finalAnswerPacket.mustMentionSymbols,\n mustMentionFacts: checkpoint.finalAnswerPacket.mustMentionFacts,\n };\n}\n"]}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Shares small runtime lifecycle helpers between ask-mode and plan-only runs.
3
+ *
4
+ * Why this file exists:
5
+ * - understand writes should not be repeated across runtime entrypoints
6
+ * - step and task bookkeeping should stay consistent in both runtimes
7
+ * - the main loop should call helpers for routine state recording, not rebuild it inline
8
+ */
9
+ import { logAgentStepOutput, recordAgentArtifact, recordAgentEvent, } from "../logging/index.js";
10
+ export function applyUnderstandResult(memory, understand) {
11
+ memory.artifacts.understand = understand;
12
+ memory.task.normalizedQuery = understand.normalizedQuery;
13
+ memory.task.primaryIntent = understand.primaryIntent;
14
+ memory.task.alternativeIntents = understand.alternativeIntents;
15
+ memory.task.searchTermGroups = understand.searchTermGroups;
16
+ memory.task.ambiguityFlags = understand.ambiguityFlags;
17
+ memory.task.queryScope = understand.queryScope;
18
+ memory.task.explicitTargets = understand.explicitTargets;
19
+ memory.task.constraints = understand.constraints;
20
+ recordAgentArtifact(memory.artifacts, "understand", understand);
21
+ recordAgentEvent(memory, "understand-completed", understand);
22
+ }
23
+ export function recordStepCreated(memory, step) {
24
+ recordAgentEvent(memory, "step-created", {
25
+ action: step.action,
26
+ args: step.args,
27
+ purpose: step.purpose,
28
+ }, step.id);
29
+ }
30
+ export function recordStepStarted(memory, step) {
31
+ recordAgentEvent(memory, "step-started", {
32
+ action: step.action,
33
+ args: step.args,
34
+ }, step.id);
35
+ }
36
+ export function recordStepFinished(memory, step, summary, payload) {
37
+ recordAgentEvent(memory, step.status === "done" ? "step-succeeded" : "step-failed", {
38
+ action: step.action,
39
+ status: step.status,
40
+ summary,
41
+ }, step.id);
42
+ logAgentStepOutput(memory, step, summary, payload);
43
+ }
44
+ export function recordTaskFinalized(memory) {
45
+ recordAgentEvent(memory, "task-finalized", {
46
+ status: memory.task.status,
47
+ stopReason: memory.task.stopReason ?? null,
48
+ turnCount: memory.task.turnCount,
49
+ mode: memory.task.mode,
50
+ });
51
+ }
52
+ export function recordStepFailure(memory, step, summary, stage) {
53
+ const payload = {
54
+ action: step.action,
55
+ error: stage
56
+ ? { stage, message: summary }
57
+ : { message: summary },
58
+ };
59
+ recordAgentEvent(memory, "step-failed", {
60
+ action: step.action,
61
+ status: step.status,
62
+ summary,
63
+ ...(stage ? { stage } : {}),
64
+ }, step.id);
65
+ logAgentStepOutput(memory, step, summary, payload);
66
+ }
67
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/agent/runtime/lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shares small runtime lifecycle helpers between ask-mode and plan-only runs.\n *\n * Why this file exists:\n * - understand writes should not be repeated across runtime entrypoints\n * - step and task bookkeeping should stay consistent in both runtimes\n * - the main loop should call helpers for routine state recording, not rebuild it inline\n */\nimport {\n logAgentStepOutput,\n recordAgentArtifact,\n recordAgentEvent,\n} from \"../logging/index.js\";\nimport type { AgentMemory, AgentStep, AgentStepStatus, UnderstandResult } from \"../types.js\";\n\nexport function applyUnderstandResult(memory: AgentMemory, understand: UnderstandResult): void {\n memory.artifacts.understand = understand;\n memory.task.normalizedQuery = understand.normalizedQuery;\n memory.task.primaryIntent = understand.primaryIntent;\n memory.task.alternativeIntents = understand.alternativeIntents;\n memory.task.searchTermGroups = understand.searchTermGroups;\n memory.task.ambiguityFlags = understand.ambiguityFlags;\n memory.task.queryScope = understand.queryScope;\n memory.task.explicitTargets = understand.explicitTargets;\n memory.task.constraints = understand.constraints;\n recordAgentArtifact(memory.artifacts, \"understand\", understand as unknown);\n recordAgentEvent(memory, \"understand-completed\", understand as unknown as Record<string, unknown>);\n}\n\nexport function recordStepCreated(memory: AgentMemory, step: AgentStep): void {\n recordAgentEvent(memory, \"step-created\", {\n action: step.action,\n args: step.args,\n purpose: step.purpose,\n }, step.id);\n}\n\nexport function recordStepStarted(memory: AgentMemory, step: AgentStep): void {\n recordAgentEvent(memory, \"step-started\", {\n action: step.action,\n args: step.args,\n }, step.id);\n}\n\nexport function recordStepFinished(\n memory: AgentMemory,\n step: AgentStep,\n summary: string,\n payload: Record<string, unknown>\n): void {\n recordAgentEvent(memory, step.status === \"done\" ? \"step-succeeded\" : \"step-failed\", {\n action: step.action,\n status: step.status,\n summary,\n }, step.id);\n logAgentStepOutput(memory, step, summary, payload);\n}\n\nexport function recordTaskFinalized(memory: AgentMemory): void {\n recordAgentEvent(memory, \"task-finalized\", {\n status: memory.task.status,\n stopReason: memory.task.stopReason ?? null,\n turnCount: memory.task.turnCount,\n mode: memory.task.mode,\n });\n}\n\nexport function recordStepFailure(\n memory: AgentMemory,\n step: AgentStep,\n summary: string,\n stage?: string\n): void {\n const payload: Record<string, unknown> = {\n action: step.action,\n error: stage\n ? { stage, message: summary }\n : { message: summary },\n };\n recordAgentEvent(memory, \"step-failed\", {\n action: step.action,\n status: step.status as AgentStepStatus,\n summary,\n ...(stage ? { stage } : {}),\n }, step.id);\n logAgentStepOutput(memory, step, summary, payload);\n}\n"]}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Maps new-agent loop phases into transient spinner text and durable milestone lines.
3
+ *
4
+ * Why this file exists:
5
+ * - spinner text should stay human-facing instead of exposing raw event names
6
+ * - durable console messages should stay curated and separate from runtime records
7
+ * - the state machine should validate status, not choose console wording
8
+ * - one formatter keeps `/agent` progress consistent across success and failure paths
9
+ * - stop actions still need readable normal-mode labels
10
+ */
11
+ import path from "path";
12
+ import chalk from "chalk";
13
+ function withTurnCount(message, context, includeTurn = true) {
14
+ if (!includeTurn)
15
+ return message;
16
+ return `${message} (turn ${context.turnCount}/${context.maxTurns})`;
17
+ }
18
+ function describeAction(action) {
19
+ switch (action) {
20
+ case "plan":
21
+ return "Planning next steps";
22
+ case "search-db":
23
+ return "Searching indexed files";
24
+ case "search-regex":
25
+ return "Running regex search";
26
+ case "search-list-directory":
27
+ return "Listing directory";
28
+ case "triage-file":
29
+ return "Triaging file";
30
+ case "read-file":
31
+ return "Reading file";
32
+ case "codeTransform":
33
+ return "Transforming file";
34
+ case "cannot-answer":
35
+ return "Reporting inability to answer";
36
+ case "request-user-input":
37
+ return "Requesting user input";
38
+ case "final-answer":
39
+ return "Producing final answer";
40
+ }
41
+ }
42
+ function describeChosenAction(action) {
43
+ switch (action) {
44
+ case "plan":
45
+ return "Chose planning.";
46
+ case "search-db":
47
+ return "Chose indexed search.";
48
+ case "search-regex":
49
+ return "Chose regex search.";
50
+ case "search-list-directory":
51
+ return "Chose directory listing.";
52
+ case "triage-file":
53
+ return "Chose file triage.";
54
+ case "read-file":
55
+ return "Chose direct file read.";
56
+ case "codeTransform":
57
+ return "Chose file transform.";
58
+ case "cannot-answer":
59
+ return "Chose inability report.";
60
+ case "request-user-input":
61
+ return "Chose user input request.";
62
+ case "final-answer":
63
+ return "Chose final answer.";
64
+ }
65
+ }
66
+ export function formatUnderstandProgress(context) {
67
+ return withTurnCount("Understanding request", context, false);
68
+ }
69
+ export function formatActionChoiceProgress(context) {
70
+ return withTurnCount("Choosing next action", context);
71
+ }
72
+ export function formatStepProgress(step, context) {
73
+ return withTurnCount(describeAction(step.action), context);
74
+ }
75
+ export function formatReplanProgress(context) {
76
+ return withTurnCount("Planning next steps", context);
77
+ }
78
+ export function formatFinalizingProgress(context) {
79
+ return withTurnCount("Producing final answer", context);
80
+ }
81
+ export function formatFailureProgress(details) {
82
+ const parts = [
83
+ "Simple agent failed",
84
+ details.action ? `action=${details.action}` : "",
85
+ details.stepId ? `step=${details.stepId}` : "",
86
+ `stage=${details.stage}`,
87
+ ].filter(Boolean);
88
+ return parts.join(" | ");
89
+ }
90
+ export function formatUnderstandMilestone() {
91
+ return "Understanding request.";
92
+ }
93
+ export function formatChosenActionMilestone(action) {
94
+ return describeChosenAction(action);
95
+ }
96
+ export function formatStepMilestone(step) {
97
+ return `${describeAction(step.action)}.`;
98
+ }
99
+ export function formatReplanMilestone() {
100
+ return "Planning next steps.";
101
+ }
102
+ export function formatFinalizingMilestone() {
103
+ return "Producing final answer.";
104
+ }
105
+ function formatTransformEditWindow(editIds) {
106
+ if (!Array.isArray(editIds) || editIds.length === 0) {
107
+ return "edits ?";
108
+ }
109
+ const numericIds = editIds
110
+ .map((editId) => editId.match(/(\d+)$/)?.[1])
111
+ .filter((value) => Boolean(value))
112
+ .map((value) => Number(value));
113
+ if (numericIds.length === editIds.length) {
114
+ const sorted = [...numericIds].sort((left, right) => left - right);
115
+ return sorted[0] === sorted[sorted.length - 1]
116
+ ? `edit ${sorted[0]}`
117
+ : `edits ${sorted[0]}-${sorted[sorted.length - 1]}`;
118
+ }
119
+ return editIds.length === 1 ? `edit ${editIds[0]}` : `edits ${editIds.join(",")}`;
120
+ }
121
+ function describeTransformLoopStage(stage) {
122
+ switch (stage) {
123
+ case "started":
124
+ return "starting";
125
+ case "planning":
126
+ return "planning";
127
+ case "applying":
128
+ return "applying";
129
+ case "validating":
130
+ return "validating";
131
+ case "retrying":
132
+ return "retrying";
133
+ case "failed":
134
+ return "failed";
135
+ case "completed":
136
+ return "completed";
137
+ }
138
+ }
139
+ export function formatTransformLoopProgress(progress) {
140
+ const fileName = path.basename(progress.filePath);
141
+ const batchText = typeof progress.batchNumber === "number" && typeof progress.batchCount === "number"
142
+ ? `batch ${progress.batchNumber}/${progress.batchCount}`
143
+ : "batch ?";
144
+ const retryText = typeof progress.retryCount === "number" && progress.retryCount > 0
145
+ ? ` | retry ${progress.retryCount}`
146
+ : "";
147
+ return [
148
+ fileName,
149
+ batchText,
150
+ formatTransformEditWindow(progress.editIds),
151
+ describeTransformLoopStage(progress.stage),
152
+ ].join(" | ") + retryText;
153
+ }
154
+ export function formatTransformStartMilestone(filePath) {
155
+ return `Transform file: ${path.basename(filePath)}`;
156
+ }
157
+ export function formatTransformWarningMilestone(warning) {
158
+ return chalk.yellow(warning);
159
+ }
160
+ export function formatTransformRetryMilestone(progress) {
161
+ const fileName = path.basename(progress.filePath);
162
+ const batchText = typeof progress.batchNumber === "number" && typeof progress.batchCount === "number"
163
+ ? `batch ${progress.batchNumber}/${progress.batchCount}`
164
+ : "current batch";
165
+ return `Retry ${batchText} for ${fileName}.`;
166
+ }
167
+ export function formatTransformFailureMilestone(progress) {
168
+ const fileName = path.basename(progress.filePath);
169
+ const batchText = typeof progress.batchNumber === "number" && typeof progress.batchCount === "number"
170
+ ? ` at batch ${progress.batchNumber}/${progress.batchCount}`
171
+ : "";
172
+ const reason = progress.reason ? ` Reason: ${progress.reason}` : "";
173
+ return `Transform failed for ${fileName}${batchText}.${reason}`;
174
+ }
175
+ export function formatTransformCompletionMilestone(progress) {
176
+ return `Transform completed for ${path.basename(progress.filePath)}.`;
177
+ }
178
+ //# sourceMappingURL=progress.js.map