scai 0.1.178 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. package/README.md +162 -267
  2. package/dist/__tests__/CommitSuggesterCmd.test.js +112 -0
  3. package/dist/__tests__/CommitSuggesterCmd.test.js.map +1 -0
  4. package/dist/__tests__/EvalReportCmd.test.js +645 -0
  5. package/dist/__tests__/EvalReportCmd.test.js.map +1 -0
  6. package/dist/__tests__/ModelCmd.test.js +64 -0
  7. package/dist/__tests__/ModelCmd.test.js.map +1 -0
  8. package/dist/__tests__/agents/agentActions.test.js +345 -0
  9. package/dist/__tests__/agents/agentActions.test.js.map +1 -0
  10. package/dist/__tests__/agents/agentFeedback.test.js +118 -0
  11. package/dist/__tests__/agents/agentFeedback.test.js.map +1 -0
  12. package/dist/__tests__/agents/agentGeneralScope.test.js +74 -0
  13. package/dist/__tests__/agents/agentGeneralScope.test.js.map +1 -0
  14. package/dist/__tests__/agents/agentLoop.test.js +1723 -0
  15. package/dist/__tests__/agents/agentLoop.test.js.map +1 -0
  16. package/dist/__tests__/agents/agentPolicyState.test.js +948 -0
  17. package/dist/__tests__/agents/agentPolicyState.test.js.map +1 -0
  18. package/dist/__tests__/agents/agentReadEvidence.test.js +170 -0
  19. package/dist/__tests__/agents/agentReadEvidence.test.js.map +1 -0
  20. package/dist/__tests__/agents/agentReadPersistence.test.js +129 -0
  21. package/dist/__tests__/agents/agentReadPersistence.test.js.map +1 -0
  22. package/dist/__tests__/agents/agentResumeCheckpoint.test.js +90 -0
  23. package/dist/__tests__/agents/agentResumeCheckpoint.test.js.map +1 -0
  24. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js +289 -0
  25. package/dist/__tests__/agents/agentSearchBatchPlanner.test.js.map +1 -0
  26. package/dist/__tests__/agents/agentSearchOwnership.test.js +166 -0
  27. package/dist/__tests__/agents/agentSearchOwnership.test.js.map +1 -0
  28. package/dist/__tests__/agents/agentSearchRanking.test.js +139 -0
  29. package/dist/__tests__/agents/agentSearchRanking.test.js.map +1 -0
  30. package/dist/__tests__/agents/agentSearchRouting.test.js +584 -0
  31. package/dist/__tests__/agents/agentSearchRouting.test.js.map +1 -0
  32. package/dist/__tests__/agents/agentSearchScoring.test.js +23 -0
  33. package/dist/__tests__/agents/agentSearchScoring.test.js.map +1 -0
  34. package/dist/__tests__/agents/agentSearchShared.test.js +78 -0
  35. package/dist/__tests__/agents/agentSearchShared.test.js.map +1 -0
  36. package/dist/__tests__/agents/agentStateMachine.test.js +58 -0
  37. package/dist/__tests__/agents/agentStateMachine.test.js.map +1 -0
  38. package/dist/__tests__/agents/agentTaskPersistence.test.js +156 -0
  39. package/dist/__tests__/agents/agentTaskPersistence.test.js.map +1 -0
  40. package/dist/__tests__/agents/agentTools.test.js +69 -0
  41. package/dist/__tests__/agents/agentTools.test.js.map +1 -0
  42. package/dist/__tests__/agents/agentTransform.test.js +779 -0
  43. package/dist/__tests__/agents/agentTransform.test.js.map +1 -0
  44. package/dist/__tests__/agents/analysisPlanGenStep.test.js +157 -0
  45. package/dist/__tests__/agents/analysisPlanGenStep.test.js.map +1 -0
  46. package/dist/__tests__/agents/answerOnlyCompletion.test.js +75 -0
  47. package/dist/__tests__/agents/answerOnlyCompletion.test.js.map +1 -0
  48. package/dist/__tests__/agents/decideNextAction.test.js +1662 -0
  49. package/dist/__tests__/agents/decideNextAction.test.js.map +1 -0
  50. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js +258 -0
  51. package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js.map +1 -0
  52. package/dist/__tests__/agents/evidenceVerifierStep.test.js +113 -0
  53. package/dist/__tests__/agents/evidenceVerifierStep.test.js.map +1 -0
  54. package/dist/__tests__/agents/executionPolicyResolver.test.js +208 -0
  55. package/dist/__tests__/agents/executionPolicyResolver.test.js.map +1 -0
  56. package/dist/__tests__/agents/fileCheckStep.test.js +299 -0
  57. package/dist/__tests__/agents/fileCheckStep.test.js.map +1 -0
  58. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js +35 -0
  59. package/dist/__tests__/agents/giveUpEvaluatorStep.test.js.map +1 -0
  60. package/dist/__tests__/agents/guardState.test.js +297 -0
  61. package/dist/__tests__/agents/guardState.test.js.map +1 -0
  62. package/dist/__tests__/agents/mainAgentHeuristics.test.js +72 -0
  63. package/dist/__tests__/agents/mainAgentHeuristics.test.js.map +1 -0
  64. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js +60 -0
  65. package/dist/__tests__/agents/objectiveEvaluatorStep.test.js.map +1 -0
  66. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js +207 -0
  67. package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js.map +1 -0
  68. package/dist/__tests__/agents/prompting.test.js +363 -0
  69. package/dist/__tests__/agents/prompting.test.js.map +1 -0
  70. package/dist/__tests__/agents/readinessGateStep.test.js +180 -0
  71. package/dist/__tests__/agents/readinessGateStep.test.js.map +1 -0
  72. package/dist/__tests__/agents/reasonNextStep.test.js +56 -0
  73. package/dist/__tests__/agents/reasonNextStep.test.js.map +1 -0
  74. package/dist/__tests__/agents/reasonNextTaskStep.test.js +284 -0
  75. package/dist/__tests__/agents/reasonNextTaskStep.test.js.map +1 -0
  76. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js +170 -0
  77. package/dist/__tests__/agents/resolveAgentTargetClassification.test.js.map +1 -0
  78. package/dist/__tests__/agents/resolveProgressState.test.js +526 -0
  79. package/dist/__tests__/agents/resolveProgressState.test.js.map +1 -0
  80. package/dist/__tests__/agents/resumeCheckpoint.test.js +50 -0
  81. package/dist/__tests__/agents/resumeCheckpoint.test.js.map +1 -0
  82. package/dist/__tests__/agents/routingDecisionStep.test.js +134 -0
  83. package/dist/__tests__/agents/routingDecisionStep.test.js.map +1 -0
  84. package/dist/__tests__/agents/scopeClassificationStep.test.js +118 -0
  85. package/dist/__tests__/agents/scopeClassificationStep.test.js.map +1 -0
  86. package/dist/__tests__/agents/searchContext.test.js +97 -0
  87. package/dist/__tests__/agents/searchContext.test.js.map +1 -0
  88. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js +73 -0
  89. package/dist/__tests__/agents/selectRelevantSourcesStep.test.js.map +1 -0
  90. package/dist/__tests__/agents/structuredOutput.test.js +45 -0
  91. package/dist/__tests__/agents/structuredOutput.test.js.map +1 -0
  92. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js +59 -0
  93. package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js.map +1 -0
  94. package/dist/__tests__/agents/transformPlanGenStep.test.js +92 -0
  95. package/dist/__tests__/agents/transformPlanGenStep.test.js.map +1 -0
  96. package/dist/__tests__/agents/understandIntentStep.test.js +237 -0
  97. package/dist/__tests__/agents/understandIntentStep.test.js.map +1 -0
  98. package/dist/__tests__/agents/understandResumeContext.test.js +65 -0
  99. package/dist/__tests__/agents/understandResumeContext.test.js.map +1 -0
  100. package/dist/__tests__/agents/understandScope.test.js +227 -0
  101. package/dist/__tests__/agents/understandScope.test.js.map +1 -0
  102. package/dist/__tests__/agents/validateChangesStep.test.js +52 -0
  103. package/dist/__tests__/agents/validateChangesStep.test.js.map +1 -0
  104. package/dist/__tests__/askCommandTaskBinding.test.js +176 -0
  105. package/dist/__tests__/askCommandTaskBinding.test.js.map +1 -0
  106. package/dist/__tests__/commandVisibility.test.js +25 -0
  107. package/dist/__tests__/commandVisibility.test.js.map +1 -0
  108. package/dist/__tests__/config.devOutput.test.js +82 -0
  109. package/dist/__tests__/config.devOutput.test.js.map +1 -0
  110. package/dist/__tests__/currentContext.test.js +43 -0
  111. package/dist/__tests__/currentContext.test.js.map +1 -0
  112. package/dist/__tests__/daemonWorker.test.js +51 -0
  113. package/dist/__tests__/daemonWorker.test.js.map +1 -0
  114. package/dist/__tests__/dialogState.test.js +113 -0
  115. package/dist/__tests__/dialogState.test.js.map +1 -0
  116. package/dist/__tests__/evalCommands.test.js +506 -0
  117. package/dist/__tests__/evalCommands.test.js.map +1 -0
  118. package/dist/__tests__/evalCommandsSummary.test.js +68 -0
  119. package/dist/__tests__/evalCommandsSummary.test.js.map +1 -0
  120. package/dist/__tests__/example.test.js +1 -0
  121. package/dist/__tests__/example.test.js.map +1 -0
  122. package/dist/__tests__/factory.commitCommand.test.js +45 -0
  123. package/dist/__tests__/factory.commitCommand.test.js.map +1 -0
  124. package/dist/__tests__/factory.devOutputCommand.test.js +122 -0
  125. package/dist/__tests__/factory.devOutputCommand.test.js.map +1 -0
  126. package/dist/__tests__/factory.evalCommands.test.js +38 -0
  127. package/dist/__tests__/factory.evalCommands.test.js.map +1 -0
  128. package/dist/__tests__/factory.planCommand.test.js +35 -0
  129. package/dist/__tests__/factory.planCommand.test.js.map +1 -0
  130. package/dist/__tests__/factory.setupCommand.test.js +34 -0
  131. package/dist/__tests__/factory.setupCommand.test.js.map +1 -0
  132. package/dist/__tests__/factory.statusCommand.test.js +54 -0
  133. package/dist/__tests__/factory.statusCommand.test.js.map +1 -0
  134. package/dist/__tests__/fileRules/queryTokenRules.test.js +35 -0
  135. package/dist/__tests__/fileRules/queryTokenRules.test.js.map +1 -0
  136. package/dist/__tests__/fileRules/searchPathClassification.test.js +57 -0
  137. package/dist/__tests__/fileRules/searchPathClassification.test.js.map +1 -0
  138. package/dist/__tests__/generate.ollamaRecovery.test.js +344 -0
  139. package/dist/__tests__/generate.ollamaRecovery.test.js.map +1 -0
  140. package/dist/__tests__/index.modelStartup.test.js +24 -0
  141. package/dist/__tests__/index.modelStartup.test.js.map +1 -0
  142. package/dist/__tests__/indexCmd.test.js +85 -0
  143. package/dist/__tests__/indexCmd.test.js.map +1 -0
  144. package/dist/__tests__/indexSlashCommand.test.js +50 -0
  145. package/dist/__tests__/indexSlashCommand.test.js.map +1 -0
  146. package/dist/__tests__/ollamaService.test.js +103 -0
  147. package/dist/__tests__/ollamaService.test.js.map +1 -0
  148. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js +68 -0
  149. package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js.map +1 -0
  150. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js +68 -0
  151. package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js.map +1 -0
  152. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js +284 -0
  153. package/dist/__tests__/pipeline/modules/fileSearchModule.test.js.map +1 -0
  154. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js +1139 -0
  155. package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js.map +1 -0
  156. package/dist/__tests__/pipeline/modules/readFileModule.test.js +146 -0
  157. package/dist/__tests__/pipeline/modules/readFileModule.test.js.map +1 -0
  158. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js +192 -0
  159. package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js.map +1 -0
  160. package/dist/__tests__/repoIdentity.test.js +31 -0
  161. package/dist/__tests__/repoIdentity.test.js.map +1 -0
  162. package/dist/__tests__/resumeContext.test.js +87 -0
  163. package/dist/__tests__/resumeContext.test.js.map +1 -0
  164. package/dist/__tests__/resumeState.test.js +239 -0
  165. package/dist/__tests__/resumeState.test.js.map +1 -0
  166. package/dist/__tests__/search/SearchOrchestrator.test.js +836 -0
  167. package/dist/__tests__/search/SearchOrchestrator.test.js.map +1 -0
  168. package/dist/__tests__/shellDialogUi.test.js +52 -0
  169. package/dist/__tests__/shellDialogUi.test.js.map +1 -0
  170. package/dist/__tests__/shellSession.test.js +102 -0
  171. package/dist/__tests__/shellSession.test.js.map +1 -0
  172. package/dist/__tests__/statusOwner.test.js +215 -0
  173. package/dist/__tests__/statusOwner.test.js.map +1 -0
  174. package/dist/__tests__/testing/contextEval.test.js +244 -0
  175. package/dist/__tests__/testing/contextEval.test.js.map +1 -0
  176. package/dist/__tests__/testing/harnessArtifacts.test.js +124 -0
  177. package/dist/__tests__/testing/harnessArtifacts.test.js.map +1 -0
  178. package/dist/__tests__/testing/llmTraceSession.test.js +67 -0
  179. package/dist/__tests__/testing/llmTraceSession.test.js.map +1 -0
  180. package/dist/__tests__/testing/registerDevCliCommands.test.js +35 -0
  181. package/dist/__tests__/testing/registerDevCliCommands.test.js.map +1 -0
  182. package/dist/__tests__/testing/runDiagnosis.test.js +159 -0
  183. package/dist/__tests__/testing/runDiagnosis.test.js.map +1 -0
  184. package/dist/__tests__/testing/runtimeLogReader.test.js +66 -0
  185. package/dist/__tests__/testing/runtimeLogReader.test.js.map +1 -0
  186. package/dist/__tests__/testing/testCommands.test.js +53 -0
  187. package/dist/__tests__/testing/testCommands.test.js.map +1 -0
  188. package/dist/__tests__/utils/compileSearchQuery.test.js +38 -0
  189. package/dist/__tests__/utils/compileSearchQuery.test.js.map +1 -0
  190. package/dist/__tests__/utils/consolePresentation.test.js +105 -0
  191. package/dist/__tests__/utils/consolePresentation.test.js.map +1 -0
  192. package/dist/__tests__/utils/extractFileReferences.test.js +41 -0
  193. package/dist/__tests__/utils/extractFileReferences.test.js.map +1 -0
  194. package/dist/__tests__/utils/log.test.js +34 -0
  195. package/dist/__tests__/utils/log.test.js.map +1 -0
  196. package/dist/__tests__/utils/runtimeLogger.test.js +200 -0
  197. package/dist/__tests__/utils/runtimeLogger.test.js.map +1 -0
  198. package/dist/__tests__/utils/spinner.test.js +31 -0
  199. package/dist/__tests__/utils/spinner.test.js.map +1 -0
  200. package/dist/__tests__/utils/verifyFocusPreference.test.js +41 -0
  201. package/dist/__tests__/utils/verifyFocusPreference.test.js.map +1 -0
  202. package/dist/agent/actions/index.js +301 -0
  203. package/dist/agent/actions/index.js.map +1 -0
  204. package/dist/agent/actions/normalize.js +360 -0
  205. package/dist/agent/actions/normalize.js.map +1 -0
  206. package/dist/agent/actions/schemas.js +129 -0
  207. package/dist/agent/actions/schemas.js.map +1 -0
  208. package/dist/agent/evidence/index.js +320 -0
  209. package/dist/agent/evidence/index.js.map +1 -0
  210. package/dist/agent/feedback/index.js +187 -0
  211. package/dist/agent/feedback/index.js.map +1 -0
  212. package/dist/agent/finalization/index.js +35 -0
  213. package/dist/agent/finalization/index.js.map +1 -0
  214. package/dist/agent/index.js +126 -0
  215. package/dist/agent/index.js.map +1 -0
  216. package/dist/agent/logging/index.js +350 -0
  217. package/dist/agent/logging/index.js.map +1 -0
  218. package/dist/agent/persistence/boot.js +58 -0
  219. package/dist/agent/persistence/boot.js.map +1 -0
  220. package/dist/agent/persistence/currentTask.js +36 -0
  221. package/dist/agent/persistence/currentTask.js.map +1 -0
  222. package/dist/agent/persistence/hydrate.js +42 -0
  223. package/dist/agent/persistence/hydrate.js.map +1 -0
  224. package/dist/agent/persistence/index.js +15 -0
  225. package/dist/agent/persistence/index.js.map +1 -0
  226. package/dist/agent/persistence/snapshots.js +97 -0
  227. package/dist/agent/persistence/snapshots.js.map +1 -0
  228. package/dist/agent/persistence/steps.js +95 -0
  229. package/dist/agent/persistence/steps.js.map +1 -0
  230. package/dist/agent/persistence/tasks.js +195 -0
  231. package/dist/agent/persistence/tasks.js.map +1 -0
  232. package/dist/agent/persistence/turns.js +92 -0
  233. package/dist/agent/persistence/turns.js.map +1 -0
  234. package/dist/agent/policy/ambiguityResolution.js +226 -0
  235. package/dist/agent/policy/ambiguityResolution.js.map +1 -0
  236. package/dist/agent/policy/contracts.js +2 -0
  237. package/dist/agent/policy/contracts.js.map +1 -0
  238. package/dist/agent/policy/coveragePolicy.js +309 -0
  239. package/dist/agent/policy/coveragePolicy.js.map +1 -0
  240. package/dist/agent/policy/endDecisionPolicy.js +31 -0
  241. package/dist/agent/policy/endDecisionPolicy.js.map +1 -0
  242. package/dist/agent/policy/index.js +344 -0
  243. package/dist/agent/policy/index.js.map +1 -0
  244. package/dist/agent/policy/loopReview.js +778 -0
  245. package/dist/agent/policy/loopReview.js.map +1 -0
  246. package/dist/agent/policy/readinessPolicy.js +108 -0
  247. package/dist/agent/policy/readinessPolicy.js.map +1 -0
  248. package/dist/agent/policy/resolutionPipeline.js +356 -0
  249. package/dist/agent/policy/resolutionPipeline.js.map +1 -0
  250. package/dist/agent/policy/targetClassification.js +33 -0
  251. package/dist/agent/policy/targetClassification.js.map +1 -0
  252. package/dist/agent/prompting/actionChoice.js +90 -0
  253. package/dist/agent/prompting/actionChoice.js.map +1 -0
  254. package/dist/agent/prompting/finalAnswer.js +38 -0
  255. package/dist/agent/prompting/finalAnswer.js.map +1 -0
  256. package/dist/agent/prompting/index.js +14 -0
  257. package/dist/agent/prompting/index.js.map +1 -0
  258. package/dist/agent/prompting/plan.js +59 -0
  259. package/dist/agent/prompting/plan.js.map +1 -0
  260. package/dist/agent/prompting/transform.js +175 -0
  261. package/dist/agent/prompting/transform.js.map +1 -0
  262. package/dist/agent/prompting/understand.js +70 -0
  263. package/dist/agent/prompting/understand.js.map +1 -0
  264. package/dist/agent/read/freshness.js +29 -0
  265. package/dist/agent/read/freshness.js.map +1 -0
  266. package/dist/agent/read/fullReadPrompt.js +43 -0
  267. package/dist/agent/read/fullReadPrompt.js.map +1 -0
  268. package/dist/agent/read/index.js +140 -0
  269. package/dist/agent/read/index.js.map +1 -0
  270. package/dist/agent/read/persistence.js +88 -0
  271. package/dist/agent/read/persistence.js.map +1 -0
  272. package/dist/agent/read/summarizeReadEvidence.js +733 -0
  273. package/dist/agent/read/summarizeReadEvidence.js.map +1 -0
  274. package/dist/agent/read/targetResolution.js +126 -0
  275. package/dist/agent/read/targetResolution.js.map +1 -0
  276. package/dist/agent/resume/checkpoint.js +41 -0
  277. package/dist/agent/resume/checkpoint.js.map +1 -0
  278. package/dist/agent/runtime/lifecycle.js +67 -0
  279. package/dist/agent/runtime/lifecycle.js.map +1 -0
  280. package/dist/agent/runtime/progress.js +178 -0
  281. package/dist/agent/runtime/progress.js.map +1 -0
  282. package/dist/agent/runtime/runAgentLoop.js +402 -0
  283. package/dist/agent/runtime/runAgentLoop.js.map +1 -0
  284. package/dist/agent/runtime/runAgentPlanOnly.js +127 -0
  285. package/dist/agent/runtime/runAgentPlanOnly.js.map +1 -0
  286. package/dist/agent/runtime/understand.js +336 -0
  287. package/dist/agent/runtime/understand.js.map +1 -0
  288. package/dist/agent/search/batchPlanner.js +274 -0
  289. package/dist/agent/search/batchPlanner.js.map +1 -0
  290. package/dist/agent/search/candidateRetentionPolicy.js +184 -0
  291. package/dist/agent/search/candidateRetentionPolicy.js.map +1 -0
  292. package/dist/agent/search/directory.js +51 -0
  293. package/dist/agent/search/directory.js.map +1 -0
  294. package/dist/agent/search/exactTarget.js +151 -0
  295. package/dist/agent/search/exactTarget.js.map +1 -0
  296. package/dist/agent/search/fragment.js +110 -0
  297. package/dist/agent/search/fragment.js.map +1 -0
  298. package/dist/agent/search/index.js +166 -0
  299. package/dist/agent/search/index.js.map +1 -0
  300. package/dist/agent/search/laneClassifier.js +119 -0
  301. package/dist/agent/search/laneClassifier.js.map +1 -0
  302. package/dist/agent/search/limits.js +10 -0
  303. package/dist/agent/search/limits.js.map +1 -0
  304. package/dist/agent/search/ranking.js +22 -0
  305. package/dist/agent/search/ranking.js.map +1 -0
  306. package/dist/agent/search/regex.js +83 -0
  307. package/dist/agent/search/regex.js.map +1 -0
  308. package/dist/agent/search/routePolicy.js +11 -0
  309. package/dist/agent/search/routePolicy.js.map +1 -0
  310. package/dist/agent/search/searchContext.js +128 -0
  311. package/dist/agent/search/searchContext.js.map +1 -0
  312. package/dist/agent/search/semantic.js +113 -0
  313. package/dist/agent/search/semantic.js.map +1 -0
  314. package/dist/agent/search/semanticIndexSearch.js +202 -0
  315. package/dist/agent/search/semanticIndexSearch.js.map +1 -0
  316. package/dist/agent/search/shared.js +283 -0
  317. package/dist/agent/search/shared.js.map +1 -0
  318. package/dist/agent/search/shell.js +202 -0
  319. package/dist/agent/search/shell.js.map +1 -0
  320. package/dist/agent/search/snippetEvidence.js +57 -0
  321. package/dist/agent/search/snippetEvidence.js.map +1 -0
  322. package/dist/agent/search/types.js +2 -0
  323. package/dist/agent/search/types.js.map +1 -0
  324. package/dist/agent/state/index.js +99 -0
  325. package/dist/agent/state/index.js.map +1 -0
  326. package/dist/agent/state/memory.js +56 -0
  327. package/dist/agent/state/memory.js.map +1 -0
  328. package/dist/agent/structuredOutput/index.js +28 -0
  329. package/dist/agent/structuredOutput/index.js.map +1 -0
  330. package/dist/agent/tools/index.js +199 -0
  331. package/dist/agent/tools/index.js.map +1 -0
  332. package/dist/agent/transform/index.js +519 -0
  333. package/dist/agent/transform/index.js.map +1 -0
  334. package/dist/agent/transform/syntax.js +49 -0
  335. package/dist/agent/transform/syntax.js.map +1 -0
  336. package/dist/agent/types.js +20 -0
  337. package/dist/agent/types.js.map +1 -0
  338. package/dist/agents/actionRegistry.js +114 -0
  339. package/dist/agents/actionRegistry.js.map +1 -0
  340. package/dist/agents/agent.js +5 -0
  341. package/dist/agents/agent.js.map +1 -0
  342. package/dist/agents/agentActions.js +5 -0
  343. package/dist/agents/agentActions.js.map +1 -0
  344. package/dist/agents/agentEvidence.js +5 -0
  345. package/dist/agents/agentEvidence.js.map +1 -0
  346. package/dist/agents/agentFeedback.js +5 -0
  347. package/dist/agents/agentFeedback.js.map +1 -0
  348. package/dist/agents/agentLogging.js +5 -0
  349. package/dist/agents/agentLogging.js.map +1 -0
  350. package/dist/agents/agentLoop.js +5 -0
  351. package/dist/agents/agentLoop.js.map +1 -0
  352. package/dist/agents/agentMemory.js +5 -0
  353. package/dist/agents/agentMemory.js.map +1 -0
  354. package/dist/agents/agentPlanMode.js +5 -0
  355. package/dist/agents/agentPlanMode.js.map +1 -0
  356. package/dist/agents/agentPolicyState.js +5 -0
  357. package/dist/agents/agentPolicyState.js.map +1 -0
  358. package/dist/agents/agentProgress.js +93 -0
  359. package/dist/agents/agentProgress.js.map +1 -0
  360. package/dist/agents/agentSchemas.js +5 -0
  361. package/dist/agents/agentSchemas.js.map +1 -0
  362. package/dist/agents/agentSearchScoring.js +5 -0
  363. package/dist/agents/agentSearchScoring.js.map +1 -0
  364. package/dist/agents/agentStateMachine.js +5 -0
  365. package/dist/agents/agentStateMachine.js.map +1 -0
  366. package/dist/agents/agentTools.js +5 -0
  367. package/dist/agents/agentTools.js.map +1 -0
  368. package/dist/agents/agentTypes.js +5 -0
  369. package/dist/agents/agentTypes.js.map +1 -0
  370. package/dist/agents/agentUnderstand.js +5 -0
  371. package/dist/agents/agentUnderstand.js.map +1 -0
  372. package/dist/agents/analysisPlanGenStep.js +194 -17
  373. package/dist/agents/analysisPlanGenStep.js.map +1 -0
  374. package/dist/agents/answerOnlyCompletion.js +32 -0
  375. package/dist/agents/answerOnlyCompletion.js.map +1 -0
  376. package/dist/agents/collaboratorStep.js +1 -0
  377. package/dist/agents/collaboratorStep.js.map +1 -0
  378. package/dist/agents/decideNextAction.js +444 -0
  379. package/dist/agents/decideNextAction.js.map +1 -0
  380. package/dist/agents/deriveFocusFromSearchStep.js +83 -0
  381. package/dist/agents/deriveFocusFromSearchStep.js.map +1 -0
  382. package/dist/agents/evidenceVerifierStep.js +104 -13
  383. package/dist/agents/evidenceVerifierStep.js.map +1 -0
  384. package/dist/agents/fileCheckStep.js +381 -12
  385. package/dist/agents/fileCheckStep.js.map +1 -0
  386. package/dist/agents/giveUpEvaluatorStep.js +63 -0
  387. package/dist/agents/giveUpEvaluatorStep.js.map +1 -0
  388. package/dist/agents/guardPolicy.js +20 -0
  389. package/dist/agents/guardPolicy.js.map +1 -0
  390. package/dist/agents/guards/executionPolicyResolver.js +165 -0
  391. package/dist/agents/guards/executionPolicyResolver.js.map +1 -0
  392. package/dist/agents/guards/guardState.js +195 -0
  393. package/dist/agents/guards/guardState.js.map +1 -0
  394. package/dist/agents/guards/resolveProgressState.js +403 -0
  395. package/dist/agents/guards/resolveProgressState.js.map +1 -0
  396. package/dist/agents/infoPlanGenStep.js +66 -8
  397. package/dist/agents/infoPlanGenStep.js.map +1 -0
  398. package/dist/agents/integrateFeedbackStep.js +1 -0
  399. package/dist/agents/integrateFeedbackStep.js.map +1 -0
  400. package/dist/agents/iterationFileSelector.js +8 -7
  401. package/dist/agents/iterationFileSelector.js.map +1 -0
  402. package/dist/agents/mainAgentActivityLog.js +85 -0
  403. package/dist/agents/mainAgentActivityLog.js.map +1 -0
  404. package/dist/agents/mainAgentHeuristics.js +173 -0
  405. package/dist/agents/mainAgentHeuristics.js.map +1 -0
  406. package/dist/agents/mainAgentVerify.js +159 -0
  407. package/dist/agents/mainAgentVerify.js.map +1 -0
  408. package/dist/agents/objectiveEvaluatorStep.js +103 -0
  409. package/dist/agents/objectiveEvaluatorStep.js.map +1 -0
  410. package/dist/agents/outerLoopRecoveryEvaluator.js +108 -0
  411. package/dist/agents/outerLoopRecoveryEvaluator.js.map +1 -0
  412. package/dist/agents/readinessGateStep.js +95 -9
  413. package/dist/agents/readinessGateStep.js.map +1 -0
  414. package/dist/agents/reasonNextStep.js +9 -8
  415. package/dist/agents/reasonNextStep.js.map +1 -0
  416. package/dist/agents/reasonNextTaskStep.js +267 -144
  417. package/dist/agents/reasonNextTaskStep.js.map +1 -0
  418. package/dist/agents/researchPlanGenStep.js +61 -25
  419. package/dist/agents/researchPlanGenStep.js.map +1 -0
  420. package/dist/agents/resolveAgentTargetClassification.js +5 -0
  421. package/dist/agents/resolveAgentTargetClassification.js.map +1 -0
  422. package/dist/agents/resolveExecutionModeStep.js +1 -0
  423. package/dist/agents/resolveExecutionModeStep.js.map +1 -0
  424. package/dist/agents/resolveExplicitTargetsStep.js +74 -0
  425. package/dist/agents/resolveExplicitTargetsStep.js.map +1 -0
  426. package/dist/agents/routingDecisionStep.js +58 -11
  427. package/dist/agents/routingDecisionStep.js.map +1 -0
  428. package/dist/agents/scopeClassificationStep.js +66 -3
  429. package/dist/agents/scopeClassificationStep.js.map +1 -0
  430. package/dist/agents/selectRelevantSourcesStep.js +13 -5
  431. package/dist/agents/selectRelevantSourcesStep.js.map +1 -0
  432. package/dist/agents/structuralPreloadStep.js +3 -4
  433. package/dist/agents/structuralPreloadStep.js.map +1 -0
  434. package/dist/agents/transformPlanGenStep.js +105 -18
  435. package/dist/agents/transformPlanGenStep.js.map +1 -0
  436. package/dist/agents/understandIntentStep.js +237 -17
  437. package/dist/agents/understandIntentStep.js.map +1 -0
  438. package/dist/agents/validateChangesStep.js +16 -2
  439. package/dist/agents/validateChangesStep.js.map +1 -0
  440. package/dist/agents/writeFileStep.js +1 -0
  441. package/dist/agents/writeFileStep.js.map +1 -0
  442. package/dist/commands/AskCmd.js +139 -44
  443. package/dist/commands/AskCmd.js.map +1 -0
  444. package/dist/commands/BackupCmd.js +1 -0
  445. package/dist/commands/BackupCmd.js.map +1 -0
  446. package/dist/commands/ChangeLogUpdateCmd.js +1 -0
  447. package/dist/commands/ChangeLogUpdateCmd.js.map +1 -0
  448. package/dist/commands/CommitSuggesterCmd.js +55 -13
  449. package/dist/commands/CommitSuggesterCmd.js.map +1 -0
  450. package/dist/commands/DaemonCmd.js +52 -14
  451. package/dist/commands/DaemonCmd.js.map +1 -0
  452. package/dist/commands/DeleteIndex.js +1 -0
  453. package/dist/commands/DeleteIndex.js.map +1 -0
  454. package/dist/commands/EvalReportCmd.js +374 -0
  455. package/dist/commands/EvalReportCmd.js.map +1 -0
  456. package/dist/commands/FindCmd.js +1 -0
  457. package/dist/commands/FindCmd.js.map +1 -0
  458. package/dist/commands/GitCmd.js +1 -0
  459. package/dist/commands/GitCmd.js.map +1 -0
  460. package/dist/commands/IndexCmd.js +11 -79
  461. package/dist/commands/IndexCmd.js.map +1 -0
  462. package/dist/commands/InspectCmd.js +1 -0
  463. package/dist/commands/InspectCmd.js.map +1 -0
  464. package/dist/commands/ModelCmd.js +24 -0
  465. package/dist/commands/ModelCmd.js.map +1 -0
  466. package/dist/commands/ReadlineSingleton.js +1 -0
  467. package/dist/commands/ReadlineSingleton.js.map +1 -0
  468. package/dist/commands/ResetDbCmd.js +18 -1
  469. package/dist/commands/ResetDbCmd.js.map +1 -0
  470. package/dist/commands/ReviewCmd.js +1 -0
  471. package/dist/commands/ReviewCmd.js.map +1 -0
  472. package/dist/commands/StatusCmd.js +22 -0
  473. package/dist/commands/StatusCmd.js.map +1 -0
  474. package/dist/commands/StopDaemonCmd.js +1 -0
  475. package/dist/commands/StopDaemonCmd.js.map +1 -0
  476. package/dist/commands/SummaryCmd.js +1 -0
  477. package/dist/commands/SummaryCmd.js.map +1 -0
  478. package/dist/commands/SwitchCmd.js +9 -15
  479. package/dist/commands/SwitchCmd.js.map +1 -0
  480. package/dist/commands/TasksCmd.js +142 -57
  481. package/dist/commands/TasksCmd.js.map +1 -0
  482. package/dist/commands/TestCmd.js +66 -0
  483. package/dist/commands/TestCmd.js.map +1 -0
  484. package/dist/commands/WorkflowCmd.js +1 -0
  485. package/dist/commands/WorkflowCmd.js.map +1 -0
  486. package/dist/commands/commandVisibility.js +27 -0
  487. package/dist/commands/commandVisibility.js.map +1 -0
  488. package/dist/commands/evalCommands.js +1337 -0
  489. package/dist/commands/evalCommands.js.map +1 -0
  490. package/dist/commands/factory.js +206 -38
  491. package/dist/commands/factory.js.map +1 -0
  492. package/dist/config.js +62 -11
  493. package/dist/config.js.map +1 -0
  494. package/dist/constants.js +21 -3
  495. package/dist/constants.js.map +1 -0
  496. package/dist/context.js +33 -32
  497. package/dist/context.js.map +1 -0
  498. package/dist/daemon/daemonQueues.js +1 -20
  499. package/dist/daemon/daemonQueues.js.map +1 -0
  500. package/dist/daemon/daemonWorker.js +26 -37
  501. package/dist/daemon/daemonWorker.js.map +1 -0
  502. package/dist/daemon/generateSummaries.js +1 -0
  503. package/dist/daemon/generateSummaries.js.map +1 -0
  504. package/dist/daemon/runFolderCapsuleBatch.js +1 -0
  505. package/dist/daemon/runFolderCapsuleBatch.js.map +1 -0
  506. package/dist/daemon/runIndexingBatch.js +1 -0
  507. package/dist/daemon/runIndexingBatch.js.map +1 -0
  508. package/dist/daemon/runKgBatch.js +9 -1
  509. package/dist/daemon/runKgBatch.js.map +1 -0
  510. package/dist/db/backup.js +1 -0
  511. package/dist/db/backup.js.map +1 -0
  512. package/dist/db/client.js +18 -3
  513. package/dist/db/client.js.map +1 -0
  514. package/dist/db/fileIndex.js +110 -152
  515. package/dist/db/fileIndex.js.map +1 -0
  516. package/dist/db/functionExtractors/extractFromJava.js +1 -0
  517. package/dist/db/functionExtractors/extractFromJava.js.map +1 -0
  518. package/dist/db/functionExtractors/extractFromJs.js +1 -0
  519. package/dist/db/functionExtractors/extractFromJs.js.map +1 -0
  520. package/dist/db/functionExtractors/extractFromTs.js +1 -0
  521. package/dist/db/functionExtractors/extractFromTs.js.map +1 -0
  522. package/dist/db/functionExtractors/extractFromXML.js +1 -0
  523. package/dist/db/functionExtractors/extractFromXML.js.map +1 -0
  524. package/dist/db/functionExtractors/index.js +1 -0
  525. package/dist/db/functionExtractors/index.js.map +1 -0
  526. package/dist/db/functionIndex.js +9 -0
  527. package/dist/db/functionIndex.js.map +1 -0
  528. package/dist/db/schema.js +314 -99
  529. package/dist/db/schema.js.map +1 -0
  530. package/dist/db/sqlTemplates.js +1 -0
  531. package/dist/db/sqlTemplates.js.map +1 -0
  532. package/dist/fileRules/builtins.js +1 -0
  533. package/dist/fileRules/builtins.js.map +1 -0
  534. package/dist/fileRules/classifyFile.js +1 -0
  535. package/dist/fileRules/classifyFile.js.map +1 -0
  536. package/dist/fileRules/codeAllowedExtensions.js +1 -0
  537. package/dist/fileRules/codeAllowedExtensions.js.map +1 -0
  538. package/dist/fileRules/detectFileType.js +1 -0
  539. package/dist/fileRules/detectFileType.js.map +1 -0
  540. package/dist/fileRules/fileClassifier.js +1 -0
  541. package/dist/fileRules/fileClassifier.js.map +1 -0
  542. package/dist/fileRules/fileExceptions.js +1 -0
  543. package/dist/fileRules/fileExceptions.js.map +1 -0
  544. package/dist/fileRules/ignoredExtensions.js +1 -0
  545. package/dist/fileRules/ignoredExtensions.js.map +1 -0
  546. package/dist/fileRules/ignoredPaths.js +48 -5
  547. package/dist/fileRules/ignoredPaths.js.map +1 -0
  548. package/dist/fileRules/queryTokenRules.js +176 -0
  549. package/dist/fileRules/queryTokenRules.js.map +1 -0
  550. package/dist/fileRules/searchPathClassification.js +58 -0
  551. package/dist/fileRules/searchPathClassification.js.map +1 -0
  552. package/dist/fileRules/shouldIgnoreFiles.js +1 -0
  553. package/dist/fileRules/shouldIgnoreFiles.js.map +1 -0
  554. package/dist/fileRules/stopWords.js +9 -0
  555. package/dist/fileRules/stopWords.js.map +1 -0
  556. package/dist/fileRules/wellKnownRepoFiles.js +1 -0
  557. package/dist/fileRules/wellKnownRepoFiles.js.map +1 -0
  558. package/dist/git/commitSummary.js +227 -0
  559. package/dist/git/commitSummary.js.map +1 -0
  560. package/dist/github/api.js +1 -0
  561. package/dist/github/api.js.map +1 -0
  562. package/dist/github/auth.js +1 -0
  563. package/dist/github/auth.js.map +1 -0
  564. package/dist/github/github.js +1 -0
  565. package/dist/github/github.js.map +1 -0
  566. package/dist/github/githubAuthCheck.js +1 -0
  567. package/dist/github/githubAuthCheck.js.map +1 -0
  568. package/dist/github/postComments.js +1 -0
  569. package/dist/github/postComments.js.map +1 -0
  570. package/dist/github/repo.js +15 -24
  571. package/dist/github/repo.js.map +1 -0
  572. package/dist/github/token.js +1 -0
  573. package/dist/github/token.js.map +1 -0
  574. package/dist/github/types.js +1 -0
  575. package/dist/github/types.js.map +1 -0
  576. package/dist/index.js +318 -37
  577. package/dist/index.js.map +1 -0
  578. package/dist/lib/generate.js +264 -20
  579. package/dist/lib/generate.js.map +1 -0
  580. package/dist/lib/generateFolderCapsules.js +1 -0
  581. package/dist/lib/generateFolderCapsules.js.map +1 -0
  582. package/dist/lib/ollamaModelPolicy.js +59 -0
  583. package/dist/lib/ollamaModelPolicy.js.map +1 -0
  584. package/dist/lib/spinner.js +29 -9
  585. package/dist/lib/spinner.js.map +1 -0
  586. package/dist/modelSetup.js +25 -78
  587. package/dist/modelSetup.js.map +1 -0
  588. package/dist/pipeline/modules/changeLogModule.js +10 -1
  589. package/dist/pipeline/modules/changeLogModule.js.map +1 -0
  590. package/dist/pipeline/modules/cleanupModule.js +1 -0
  591. package/dist/pipeline/modules/cleanupModule.js.map +1 -0
  592. package/dist/pipeline/modules/codeTransformModule.js +10 -16
  593. package/dist/pipeline/modules/codeTransformModule.js.map +1 -0
  594. package/dist/pipeline/modules/commentModule.js +12 -0
  595. package/dist/pipeline/modules/commentModule.js.map +1 -0
  596. package/dist/pipeline/modules/commitSuggesterModule.js +82 -12
  597. package/dist/pipeline/modules/commitSuggesterModule.js.map +1 -0
  598. package/dist/pipeline/modules/contextReviewModule.js +12 -1
  599. package/dist/pipeline/modules/contextReviewModule.js.map +1 -0
  600. package/dist/pipeline/modules/dialogAnswerModule.js +58 -0
  601. package/dist/pipeline/modules/dialogAnswerModule.js.map +1 -0
  602. package/dist/pipeline/modules/fileSearchModule.js +5 -143
  603. package/dist/pipeline/modules/fileSearchModule.js.map +1 -0
  604. package/dist/pipeline/modules/finalAnswerModule.js +1176 -151
  605. package/dist/pipeline/modules/finalAnswerModule.js.map +1 -0
  606. package/dist/pipeline/modules/kgModule.js +18 -1
  607. package/dist/pipeline/modules/kgModule.js.map +1 -0
  608. package/dist/pipeline/modules/planAnswerModule.js +99 -0
  609. package/dist/pipeline/modules/planAnswerModule.js.map +1 -0
  610. package/dist/pipeline/modules/readFileModule.js +300 -0
  611. package/dist/pipeline/modules/readFileModule.js.map +1 -0
  612. package/dist/pipeline/modules/reviewModule.js +10 -1
  613. package/dist/pipeline/modules/reviewModule.js.map +1 -0
  614. package/dist/pipeline/modules/searchDbModule.js +159 -0
  615. package/dist/pipeline/modules/searchDbModule.js.map +1 -0
  616. package/dist/pipeline/modules/searchListDirectoryModule.js +62 -0
  617. package/dist/pipeline/modules/searchListDirectoryModule.js.map +1 -0
  618. package/dist/pipeline/modules/searchModuleShared.js +71 -0
  619. package/dist/pipeline/modules/searchModuleShared.js.map +1 -0
  620. package/dist/pipeline/modules/searchRegexModule.js +59 -0
  621. package/dist/pipeline/modules/searchRegexModule.js.map +1 -0
  622. package/dist/pipeline/modules/semanticAnalysisModule.js +185 -28
  623. package/dist/pipeline/modules/semanticAnalysisModule.js.map +1 -0
  624. package/dist/pipeline/modules/summaryModule.js +11 -1
  625. package/dist/pipeline/modules/summaryModule.js.map +1 -0
  626. package/dist/pipeline/registry/moduleRegistry.js +9 -0
  627. package/dist/pipeline/registry/moduleRegistry.js.map +1 -0
  628. package/dist/pipeline/runModulePipeline.js +1 -0
  629. package/dist/pipeline/runModulePipeline.js.map +1 -0
  630. package/dist/scripts/dbScriptSupport.js +172 -0
  631. package/dist/scripts/dbScriptSupport.js.map +1 -0
  632. package/dist/scripts/dbcheck.js +173 -267
  633. package/dist/scripts/dbcheck.js.map +1 -0
  634. package/dist/scripts/dboverview.js +161 -0
  635. package/dist/scripts/dboverview.js.map +1 -0
  636. package/dist/scripts/migrateDb.js +1 -0
  637. package/dist/scripts/migrateDb.js.map +1 -0
  638. package/dist/search/SearchOrchestrator.js +928 -0
  639. package/dist/search/SearchOrchestrator.js.map +1 -0
  640. package/dist/search/sharedRankingPolicy.js +283 -0
  641. package/dist/search/sharedRankingPolicy.js.map +1 -0
  642. package/dist/setup/reindexOwner.js +97 -0
  643. package/dist/setup/reindexOwner.js.map +1 -0
  644. package/dist/setup/setupOwner.js +100 -0
  645. package/dist/setup/setupOwner.js.map +1 -0
  646. package/dist/shell/dialogUi.js +81 -0
  647. package/dist/shell/dialogUi.js.map +1 -0
  648. package/dist/shellSession.js +126 -0
  649. package/dist/shellSession.js.map +1 -0
  650. package/dist/status/statusOwner.js +239 -0
  651. package/dist/status/statusOwner.js.map +1 -0
  652. package/dist/testing/contextEval.js +514 -0
  653. package/dist/testing/contextEval.js.map +1 -0
  654. package/dist/testing/fixtures/transform/small-file.input.js +5 -0
  655. package/dist/testing/fixtures/transform/small-file.input.js.map +1 -0
  656. package/dist/testing/harnessArtifacts.js +112 -0
  657. package/dist/testing/harnessArtifacts.js.map +1 -0
  658. package/dist/testing/llmTraceSession.js +67 -0
  659. package/dist/testing/llmTraceSession.js.map +1 -0
  660. package/dist/testing/registerDevCliCommands.js +43 -0
  661. package/dist/testing/registerDevCliCommands.js.map +1 -0
  662. package/dist/testing/runDiagnosis.js +248 -0
  663. package/dist/testing/runDiagnosis.js.map +1 -0
  664. package/dist/testing/runtimeLogReader.js +144 -0
  665. package/dist/testing/runtimeLogReader.js.map +1 -0
  666. package/dist/testing/testCommands.js +35 -303
  667. package/dist/testing/testCommands.js.map +1 -0
  668. package/dist/testing/testRegistry.js +233 -0
  669. package/dist/testing/testRegistry.js.map +1 -0
  670. package/dist/types.js +1 -0
  671. package/dist/types.js.map +1 -0
  672. package/dist/utils/buildContextualPrompt.js +26 -75
  673. package/dist/utils/buildContextualPrompt.js.map +1 -0
  674. package/dist/utils/changeLogPrompt.js +1 -0
  675. package/dist/utils/changeLogPrompt.js.map +1 -0
  676. package/dist/utils/checkModel.js +17 -92
  677. package/dist/utils/checkModel.js.map +1 -0
  678. package/dist/utils/commentMap.js +1 -0
  679. package/dist/utils/commentMap.js.map +1 -0
  680. package/dist/utils/compileSearchQuery.js +23 -9
  681. package/dist/utils/compileSearchQuery.js.map +1 -0
  682. package/dist/utils/consolePresentation.js +208 -0
  683. package/dist/utils/consolePresentation.js.map +1 -0
  684. package/dist/utils/contentUtils.js +17 -2
  685. package/dist/utils/contentUtils.js.map +1 -0
  686. package/dist/utils/debugContext.js +1 -0
  687. package/dist/utils/debugContext.js.map +1 -0
  688. package/dist/utils/dialogState.js +201 -0
  689. package/dist/utils/dialogState.js.map +1 -0
  690. package/dist/utils/editor.js +1 -0
  691. package/dist/utils/editor.js.map +1 -0
  692. package/dist/utils/executionEvidence.js +50 -0
  693. package/dist/utils/executionEvidence.js.map +1 -0
  694. package/dist/utils/extractFileReferences.js +140 -6
  695. package/dist/utils/extractFileReferences.js.map +1 -0
  696. package/dist/utils/fileEvidenceCache.js +50 -0
  697. package/dist/utils/fileEvidenceCache.js.map +1 -0
  698. package/dist/utils/fileTree.js +1 -0
  699. package/dist/utils/fileTree.js.map +1 -0
  700. package/dist/utils/loadRelevantFolderCapsules.js +35 -5
  701. package/dist/utils/loadRelevantFolderCapsules.js.map +1 -0
  702. package/dist/utils/log.js +10 -1
  703. package/dist/utils/log.js.map +1 -0
  704. package/dist/utils/normalizeData.js +1 -0
  705. package/dist/utils/normalizeData.js.map +1 -0
  706. package/dist/utils/ollamaModelStatus.js +28 -0
  707. package/dist/utils/ollamaModelStatus.js.map +1 -0
  708. package/dist/utils/ollamaService.js +294 -0
  709. package/dist/utils/ollamaService.js.map +1 -0
  710. package/dist/utils/outputFormatter.js +1 -0
  711. package/dist/utils/outputFormatter.js.map +1 -0
  712. package/dist/utils/parseTaggedContent.js +1 -0
  713. package/dist/utils/parseTaggedContent.js.map +1 -0
  714. package/dist/utils/planActions.js +27 -46
  715. package/dist/utils/planActions.js.map +1 -0
  716. package/dist/utils/promptBuilderHelper.js +1 -0
  717. package/dist/utils/promptBuilderHelper.js.map +1 -0
  718. package/dist/utils/promptLogHelper.js +29 -13
  719. package/dist/utils/promptLogHelper.js.map +1 -0
  720. package/dist/utils/queryAnchors.js +71 -0
  721. package/dist/utils/queryAnchors.js.map +1 -0
  722. package/dist/utils/repoIdentity.js +82 -0
  723. package/dist/utils/repoIdentity.js.map +1 -0
  724. package/dist/utils/repoKey.js +1 -0
  725. package/dist/utils/repoKey.js.map +1 -0
  726. package/dist/utils/resolveTargetsToFiles.js +1 -0
  727. package/dist/utils/resolveTargetsToFiles.js.map +1 -0
  728. package/dist/utils/resumeContext.js +219 -0
  729. package/dist/utils/resumeContext.js.map +1 -0
  730. package/dist/utils/resumeState.js +310 -0
  731. package/dist/utils/resumeState.js.map +1 -0
  732. package/dist/utils/rollingPlan.js +118 -0
  733. package/dist/utils/rollingPlan.js.map +1 -0
  734. package/dist/utils/runQueryWithDaemonControl.js +11 -3
  735. package/dist/utils/runQueryWithDaemonControl.js.map +1 -0
  736. package/dist/utils/runtimeLogger.js +252 -0
  737. package/dist/utils/runtimeLogger.js.map +1 -0
  738. package/dist/utils/sanitizeQuery.js +1 -0
  739. package/dist/utils/sanitizeQuery.js.map +1 -0
  740. package/dist/utils/sharedUtils.js +1 -0
  741. package/dist/utils/sharedUtils.js.map +1 -0
  742. package/dist/utils/sleep.js +1 -0
  743. package/dist/utils/sleep.js.map +1 -0
  744. package/dist/utils/splitCodeIntoChunk.js +1 -0
  745. package/dist/utils/splitCodeIntoChunk.js.map +1 -0
  746. package/dist/utils/time.js +66 -0
  747. package/dist/utils/time.js.map +1 -0
  748. package/dist/utils/verifyFocusPreference.js +107 -0
  749. package/dist/utils/verifyFocusPreference.js.map +1 -0
  750. package/dist/utils/vscode.js +1 -0
  751. package/dist/utils/vscode.js.map +1 -0
  752. package/dist/workflow/workflowResolver.js +1 -0
  753. package/dist/workflow/workflowResolver.js.map +1 -0
  754. package/dist/workflow/workflowRunner.js +1 -0
  755. package/dist/workflow/workflowRunner.js.map +1 -0
  756. package/package.json +3 -3
  757. package/dist/agents/MainAgent.js +0 -1886
  758. package/dist/agents/contextReviewStep.js +0 -101
  759. package/dist/agents/finalPlanGenStep.js +0 -107
  760. package/dist/agents/structuralAnalysisStep.js +0 -46
  761. package/dist/agents/validationAnalysisStep.js +0 -87
  762. package/dist/pipeline/modules/chunkManagerModule.js +0 -24
  763. package/dist/pipeline/modules/cleanGeneratedTestsModule.js +0 -33
  764. package/dist/pipeline/modules/fileReaderModule.js +0 -72
  765. package/dist/pipeline/modules/gatherInfoModule.js +0 -181
  766. package/dist/pipeline/modules/generateTestsModule.js +0 -68
  767. package/dist/pipeline/modules/preserveCodeModule.js +0 -195
  768. package/dist/pipeline/modules/refactorModule.js +0 -40
  769. package/dist/pipeline/modules/repairTestsModule.js +0 -48
  770. package/dist/pipeline/modules/runTestsModule.js +0 -37
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Shared helpers for DB health and DB overview scripts.
3
+ *
4
+ * Why this file exists:
5
+ * - `db check` and `db overview` need the same active-repo DB lookup
6
+ * - table inventory output should stay consistent across both commands
7
+ * - overview should reflect the real runtime shape without copying SQL in many places
8
+ */
9
+ import Database from "better-sqlite3";
10
+ import fs from "fs";
11
+ import os from "os";
12
+ import path from "path";
13
+ import { Config } from "../config.js";
14
+ const RUNTIME_TABLES = new Set([
15
+ "global_state",
16
+ "projects",
17
+ "sessions",
18
+ "tasks",
19
+ "steps",
20
+ "evaluations",
21
+ "action_ledger",
22
+ "task_plans",
23
+ "task_progress_snapshots",
24
+ ]);
25
+ const INDEX_TABLES = new Set([
26
+ "files",
27
+ "files_fts",
28
+ "folder_capsules",
29
+ "functions",
30
+ "graph_classes",
31
+ "graph_edges",
32
+ ]);
33
+ function quoteIdentifier(name) {
34
+ return `"${name.replace(/"/g, `""`)}"`;
35
+ }
36
+ function isSuppressedTable(name) {
37
+ return (name.startsWith("sqlite_") ||
38
+ /_fts_(data|idx|content|docsize|config)$/.test(name));
39
+ }
40
+ function classifyTable(name) {
41
+ if (RUNTIME_TABLES.has(name))
42
+ return "runtime";
43
+ if (INDEX_TABLES.has(name))
44
+ return "index";
45
+ return "other";
46
+ }
47
+ export function resolveActiveRepoDb() {
48
+ const cfg = Config.getRaw();
49
+ const repoKey = cfg.activeRepo;
50
+ if (!repoKey) {
51
+ console.error("❌ No active repo found. Use `scai set-index`.");
52
+ process.exit(1);
53
+ }
54
+ const repoName = path.basename(repoKey);
55
+ const scaiRepoRoot = path.join(os.homedir(), ".scai", "repos", repoName);
56
+ const dbPath = path.join(scaiRepoRoot, "db.sqlite");
57
+ if (!fs.existsSync(dbPath)) {
58
+ console.error(`❌ DB not found: ${dbPath}`);
59
+ process.exit(1);
60
+ }
61
+ return {
62
+ db: new Database(dbPath),
63
+ dbPath,
64
+ scaiRepoRoot,
65
+ repoName,
66
+ };
67
+ }
68
+ export function tableExists(db, table) {
69
+ return !!db
70
+ .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?`)
71
+ .get(table);
72
+ }
73
+ export function tableCount(db, table) {
74
+ return db.prepare(`SELECT COUNT(*) AS c FROM ${quoteIdentifier(table)}`).get().c;
75
+ }
76
+ export function tableColumns(db, table) {
77
+ const rows = db
78
+ .prepare(`PRAGMA table_info(${quoteIdentifier(table)})`)
79
+ .all();
80
+ return rows.map((row) => row.name);
81
+ }
82
+ export function getUserTableNames(db) {
83
+ const rows = db
84
+ .prepare(`
85
+ SELECT name
86
+ FROM sqlite_master
87
+ WHERE type = 'table'
88
+ ORDER BY name
89
+ `)
90
+ .all();
91
+ return rows.map((row) => row.name).filter((name) => !isSuppressedTable(name));
92
+ }
93
+ export function getTableSampleRows(db, table, limit = 3) {
94
+ return db
95
+ .prepare(`SELECT * FROM ${quoteIdentifier(table)} LIMIT ?`)
96
+ .all(limit);
97
+ }
98
+ export function buildTableInventory(db, sampleLimit = 3) {
99
+ return getUserTableNames(db).map((name) => ({
100
+ name,
101
+ category: classifyTable(name),
102
+ columns: tableColumns(db, name),
103
+ rowCount: tableCount(db, name),
104
+ sampleRows: getTableSampleRows(db, name, sampleLimit),
105
+ }));
106
+ }
107
+ export function buildRuntimeOverview(db, limits = {}) {
108
+ const sessionLimit = limits.sessions ?? 5;
109
+ const taskLimit = limits.tasksPerSession ?? 5;
110
+ const stepLimit = limits.stepsPerTask ?? 5;
111
+ const actionLimit = limits.actionsPerTask ?? 5;
112
+ const sessions = db.prepare(`
113
+ SELECT id, status, created_at, updated_at, repo_root_path, execution_path
114
+ FROM sessions
115
+ ORDER BY id DESC
116
+ LIMIT ?
117
+ `).all(sessionLimit);
118
+ return sessions.map((session) => {
119
+ const tasks = db.prepare(`
120
+ SELECT id, status, initial_query, created_at
121
+ FROM tasks
122
+ WHERE session_id = ?
123
+ ORDER BY id DESC
124
+ LIMIT ?
125
+ `).all(session.id, taskLimit);
126
+ return {
127
+ ...session,
128
+ tasks: tasks.map((task) => ({
129
+ ...task,
130
+ steps: db.prepare(`
131
+ SELECT id, file_path, action, status, step_index, created_at
132
+ FROM steps
133
+ WHERE task_id = ?
134
+ ORDER BY COALESCE(step_index, id) ASC, id ASC
135
+ LIMIT ?
136
+ `).all(task.id, stepLimit),
137
+ actions: db.prepare(`
138
+ SELECT id, action_kind, target, outcome, summary, created_at
139
+ FROM action_ledger
140
+ WHERE task_id = ?
141
+ ORDER BY id DESC
142
+ LIMIT ?
143
+ `).all(task.id, actionLimit),
144
+ })),
145
+ };
146
+ });
147
+ }
148
+ export function formatInlineValue(value, max = 72) {
149
+ if (value == null)
150
+ return "null";
151
+ if (typeof value === "string") {
152
+ const compact = value.replace(/\s+/g, " ").trim();
153
+ return compact.length <= max ? compact : `${compact.slice(0, max - 1)}…`;
154
+ }
155
+ if (typeof value === "number" || typeof value === "boolean") {
156
+ return String(value);
157
+ }
158
+ try {
159
+ const text = JSON.stringify(value);
160
+ return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
161
+ }
162
+ catch {
163
+ return String(value);
164
+ }
165
+ }
166
+ export function formatRowPreview(row, maxColumns = 4) {
167
+ const entries = Object.entries(row).slice(0, maxColumns);
168
+ return entries
169
+ .map(([key, value]) => `${key}=${formatInlineValue(value, 48)}`)
170
+ .join(" | ");
171
+ }
172
+ //# sourceMappingURL=dbScriptSupport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbScriptSupport.js","sourceRoot":"","sources":["../../src/scripts/dbScriptSupport.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared helpers for DB health and DB overview scripts.\n *\n * Why this file exists:\n * - `db check` and `db overview` need the same active-repo DB lookup\n * - table inventory output should stay consistent across both commands\n * - overview should reflect the real runtime shape without copying SQL in many places\n */\nimport Database from \"better-sqlite3\";\nimport type { Database as DatabaseType } from \"better-sqlite3\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { Config } from \"../config.js\";\n\nexport type RuntimeOverviewSession = {\n id: number;\n status: string;\n created_at: string;\n updated_at: string;\n repo_root_path?: string | null;\n execution_path?: string | null;\n tasks: RuntimeOverviewTask[];\n};\n\nexport type RuntimeOverviewTask = {\n id: number;\n status: string;\n initial_query: string;\n created_at: string;\n steps: RuntimeOverviewStep[];\n actions: RuntimeOverviewAction[];\n};\n\nexport type RuntimeOverviewStep = {\n id: number;\n file_path: string;\n action?: string | null;\n status: string;\n step_index?: number | null;\n created_at: string;\n};\n\nexport type RuntimeOverviewAction = {\n id: number;\n action_kind: string;\n target: string;\n outcome: string;\n summary: string;\n created_at: string;\n};\n\nexport type TableInventoryEntry = {\n name: string;\n category: \"runtime\" | \"index\" | \"other\";\n columns: string[];\n rowCount: number;\n sampleRows: Record<string, unknown>[];\n};\n\nconst RUNTIME_TABLES = new Set([\n \"global_state\",\n \"projects\",\n \"sessions\",\n \"tasks\",\n \"steps\",\n \"evaluations\",\n \"action_ledger\",\n \"task_plans\",\n \"task_progress_snapshots\",\n]);\n\nconst INDEX_TABLES = new Set([\n \"files\",\n \"files_fts\",\n \"folder_capsules\",\n \"functions\",\n \"graph_classes\",\n \"graph_edges\",\n]);\n\nfunction quoteIdentifier(name: string): string {\n return `\"${name.replace(/\"/g, `\"\"`)}\"`;\n}\n\nfunction isSuppressedTable(name: string): boolean {\n return (\n name.startsWith(\"sqlite_\") ||\n /_fts_(data|idx|content|docsize|config)$/.test(name)\n );\n}\n\nfunction classifyTable(name: string): \"runtime\" | \"index\" | \"other\" {\n if (RUNTIME_TABLES.has(name)) return \"runtime\";\n if (INDEX_TABLES.has(name)) return \"index\";\n return \"other\";\n}\n\nexport function resolveActiveRepoDb(): {\n db: DatabaseType;\n dbPath: string;\n scaiRepoRoot: string;\n repoName: string;\n} {\n const cfg = Config.getRaw();\n const repoKey = cfg.activeRepo;\n\n if (!repoKey) {\n console.error(\"❌ No active repo found. Use `scai set-index`.\");\n process.exit(1);\n }\n\n const repoName = path.basename(repoKey);\n const scaiRepoRoot = path.join(os.homedir(), \".scai\", \"repos\", repoName);\n const dbPath = path.join(scaiRepoRoot, \"db.sqlite\");\n\n if (!fs.existsSync(dbPath)) {\n console.error(`❌ DB not found: ${dbPath}`);\n process.exit(1);\n }\n\n return {\n db: new Database(dbPath),\n dbPath,\n scaiRepoRoot,\n repoName,\n };\n}\n\nexport function tableExists(db: DatabaseType, table: string): boolean {\n return !!db\n .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?`)\n .get(table);\n}\n\nexport function tableCount(db: DatabaseType, table: string): number {\n return (\n db.prepare(`SELECT COUNT(*) AS c FROM ${quoteIdentifier(table)}`).get() as {\n c: number;\n }\n ).c;\n}\n\nexport function tableColumns(db: DatabaseType, table: string): string[] {\n const rows = db\n .prepare(`PRAGMA table_info(${quoteIdentifier(table)})`)\n .all() as Array<{ name: string }>;\n return rows.map((row) => row.name);\n}\n\nexport function getUserTableNames(db: DatabaseType): string[] {\n const rows = db\n .prepare(`\n SELECT name\n FROM sqlite_master\n WHERE type = 'table'\n ORDER BY name\n `)\n .all() as Array<{ name: string }>;\n\n return rows.map((row) => row.name).filter((name) => !isSuppressedTable(name));\n}\n\nexport function getTableSampleRows(\n db: DatabaseType,\n table: string,\n limit = 3\n): Record<string, unknown>[] {\n return db\n .prepare(`SELECT * FROM ${quoteIdentifier(table)} LIMIT ?`)\n .all(limit) as Record<string, unknown>[];\n}\n\nexport function buildTableInventory(\n db: DatabaseType,\n sampleLimit = 3\n): TableInventoryEntry[] {\n return getUserTableNames(db).map((name) => ({\n name,\n category: classifyTable(name),\n columns: tableColumns(db, name),\n rowCount: tableCount(db, name),\n sampleRows: getTableSampleRows(db, name, sampleLimit),\n }));\n}\n\nexport function buildRuntimeOverview(\n db: DatabaseType,\n limits: {\n sessions?: number;\n tasksPerSession?: number;\n stepsPerTask?: number;\n actionsPerTask?: number;\n } = {}\n): RuntimeOverviewSession[] {\n const sessionLimit = limits.sessions ?? 5;\n const taskLimit = limits.tasksPerSession ?? 5;\n const stepLimit = limits.stepsPerTask ?? 5;\n const actionLimit = limits.actionsPerTask ?? 5;\n\n const sessions = db.prepare(`\n SELECT id, status, created_at, updated_at, repo_root_path, execution_path\n FROM sessions\n ORDER BY id DESC\n LIMIT ?\n `).all(sessionLimit) as Array<{\n id: number;\n status: string;\n created_at: string;\n updated_at: string;\n repo_root_path?: string | null;\n execution_path?: string | null;\n }>;\n\n return sessions.map((session) => {\n const tasks = db.prepare(`\n SELECT id, status, initial_query, created_at\n FROM tasks\n WHERE session_id = ?\n ORDER BY id DESC\n LIMIT ?\n `).all(session.id, taskLimit) as Array<{\n id: number;\n status: string;\n initial_query: string;\n created_at: string;\n }>;\n\n return {\n ...session,\n tasks: tasks.map((task) => ({\n ...task,\n steps: db.prepare(`\n SELECT id, file_path, action, status, step_index, created_at\n FROM steps\n WHERE task_id = ?\n ORDER BY COALESCE(step_index, id) ASC, id ASC\n LIMIT ?\n `).all(task.id, stepLimit) as RuntimeOverviewStep[],\n actions: db.prepare(`\n SELECT id, action_kind, target, outcome, summary, created_at\n FROM action_ledger\n WHERE task_id = ?\n ORDER BY id DESC\n LIMIT ?\n `).all(task.id, actionLimit) as RuntimeOverviewAction[],\n })),\n };\n });\n}\n\nexport function formatInlineValue(value: unknown, max = 72): string {\n if (value == null) return \"null\";\n if (typeof value === \"string\") {\n const compact = value.replace(/\\s+/g, \" \").trim();\n return compact.length <= max ? compact : `${compact.slice(0, max - 1)}…`;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n const text = JSON.stringify(value);\n return text.length <= max ? text : `${text.slice(0, max - 1)}…`;\n } catch {\n return String(value);\n }\n}\n\nexport function formatRowPreview(\n row: Record<string, unknown>,\n maxColumns = 4\n): string {\n const entries = Object.entries(row).slice(0, maxColumns);\n return entries\n .map(([key, value]) => `${key}=${formatInlineValue(value, 48)}`)\n .join(\" | \");\n}\n"]}
@@ -1,285 +1,191 @@
1
- import Database from "better-sqlite3";
2
- import path from "path";
3
- import os from "os";
4
- import fs from "fs";
5
- import { execSync } from "child_process";
6
- import { Config } from "../config.js";
7
- /* ───────────────────────── bootstrap ───────────────────────── */
8
- const cfg = Config.getRaw();
9
- const repoKey = cfg.activeRepo;
10
- if (!repoKey) {
11
- console.error("❌ No active repo found. Use `scai set-index`.");
12
- process.exit(1);
13
- }
14
- const repoName = path.basename(repoKey);
15
- const scaiRepoRoot = path.join(os.homedir(), ".scai", "repos", repoName);
16
- const dbPath = path.join(scaiRepoRoot, "db.sqlite");
17
- if (!fs.existsSync(dbPath)) {
18
- console.error(`❌ DB not found: ${dbPath}`);
19
- process.exit(1);
20
- }
21
- const db = new Database(dbPath);
22
- /* ───────────────────────── helpers ───────────────────────── */
23
- function tableCount(table) {
24
- return db.prepare(`SELECT COUNT(*) AS c FROM ${table}`).get().c;
25
- }
26
- function nonEmptyCount(table, col) {
27
- return db.prepare(`SELECT COUNT(*) AS c FROM ${table} WHERE ${col} IS NOT NULL AND ${col} != ''`).get().c;
28
- }
29
- function header(title) {
30
- console.log(`\n${title}`);
31
- }
32
- /* ───────────────────────── global / project / task sanity ───────────────────────── */
33
- header("🌐 global_state / projects / tasks sanity");
34
- // --- global_state ---
35
- const globalExists = db
36
- .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name='global_state'`)
37
- .get();
38
- if (!globalExists) {
39
- console.log("❌ global_state table missing — run initSchema");
40
- }
41
- else {
42
- const globalRow = db.prepare(`SELECT * FROM global_state WHERE id=1`).get();
43
- if (!globalRow) {
44
- console.log("⚠️ global_state row missing (id=1) — should be auto-created");
45
- }
46
- else {
47
- console.log("✅ global_state row exists");
1
+ import { resolveActiveRepoDb, tableColumns, tableCount, tableExists, } from "./dbScriptSupport.js";
2
+ const findings = [];
3
+ function addFinding(severity, message) {
4
+ findings.push({ severity, message });
5
+ const icon = severity === "pass" ? "✅" :
6
+ severity === "warn" ? "⚠️" :
7
+ "❌";
8
+ console.log(`${icon} ${message}`);
9
+ }
10
+ function checkRequiredTables(db) {
11
+ console.log("\nSchema");
12
+ const requiredTables = [
13
+ "global_state",
14
+ "projects",
15
+ "sessions",
16
+ "tasks",
17
+ "steps",
18
+ "evaluations",
19
+ "action_ledger",
20
+ "task_plans",
21
+ "task_progress_snapshots",
22
+ "files",
23
+ "files_fts",
24
+ "folder_capsules",
25
+ "functions",
26
+ "graph_classes",
27
+ "graph_edges",
28
+ ];
29
+ for (const table of requiredTables) {
30
+ if (tableExists(db, table)) {
31
+ addFinding("pass", `${table} table exists`);
32
+ }
33
+ else {
34
+ addFinding("fail", `${table} table is missing`);
35
+ }
48
36
  }
49
37
  }
50
- // --- projects ---
51
- const projectsExists = db
52
- .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name='projects'`)
53
- .get();
54
- if (!projectsExists) {
55
- console.log("❌ projects table missing — run initSchema");
56
- }
57
- else {
58
- const totalProjects = tableCount("projects");
59
- if (totalProjects === 0) {
60
- console.log("⚠️ no projects found — should be at least one default project");
38
+ function checkSingletons(db) {
39
+ console.log("\nSingletons");
40
+ if (!tableExists(db, "global_state"))
41
+ return;
42
+ const globalRow = db.prepare(`SELECT id FROM global_state WHERE id = 1`).get();
43
+ if (globalRow) {
44
+ addFinding("pass", "global_state row id=1 exists");
61
45
  }
62
46
  else {
63
- console.log(`✅ total projects: ${totalProjects}`);
47
+ addFinding("warn", "global_state row id=1 is missing");
64
48
  }
65
49
  }
66
- // --- tasks ---
67
- header("📝 tasks");
68
- const tasksExists = db
69
- .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name='tasks'`)
70
- .get();
71
- if (!tasksExists) {
72
- console.log("❌ tasks table missing — you need to run initSchema with tasks");
73
- }
74
- else {
75
- const totalTasks = tableCount("tasks");
76
- const tasksWithQuery = nonEmptyCount("tasks", "initial_query");
77
- console.log(`📊 total tasks: ${totalTasks}`);
78
- console.log(`✏️ tasks with initial_query: ${tasksWithQuery}`);
79
- const sampleTasks = db.prepare(`
80
- SELECT id, initial_query, status, created_at
81
- FROM tasks
82
- ORDER BY created_at DESC
83
- LIMIT 3
84
- `).all();
85
- if (sampleTasks.length === 0) {
86
- console.log("⚠️ no tasks yet");
50
+ function checkExpectedContent(db) {
51
+ console.log("\nExpected Content");
52
+ if (tableExists(db, "projects")) {
53
+ const count = tableCount(db, "projects");
54
+ addFinding(count > 0 ? "pass" : "warn", count > 0 ? `projects has ${count} row(s)` : "projects has no rows");
87
55
  }
88
- else {
89
- console.log("✅ sample tasks:");
90
- sampleTasks.forEach(t => console.log(` [${t.id}] "${t.initial_query}" (status=${t.status}, created=${t.created_at})`));
56
+ if (tableExists(db, "files")) {
57
+ const count = tableCount(db, "files");
58
+ addFinding(count > 0 ? "pass" : "warn", count > 0 ? `files has ${count} row(s)` : "files has no rows");
91
59
  }
92
- }
93
- /* ───────────────────────── task_steps sanity ───────────────────────── */
94
- header("🦾 task_steps");
95
- const taskStepsExists = db
96
- .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name='task_steps'`)
97
- .get();
98
- if (!taskStepsExists) {
99
- console.log("❌ task_steps table missing — you need to run initSchema with task_steps");
100
- }
101
- else {
102
- const totalTaskSteps = tableCount("task_steps");
103
- const pendingSteps = nonEmptyCount("task_steps", "status"); // all steps have status
104
- console.log(`📊 total task_steps: ${totalTaskSteps}`);
105
- console.log(`📝 task_steps with status: ${pendingSteps}`);
106
- const sampleSteps = db.prepare(`
107
- SELECT id, task_id, file_path, status, step_index, created_at
108
- FROM task_steps
109
- ORDER BY created_at DESC
110
- LIMIT 3
111
- `).all();
112
- if (sampleSteps.length === 0) {
113
- console.log("⚠️ no task_steps yet");
114
- }
115
- else {
116
- console.log("✅ sample task_steps:");
117
- sampleSteps.forEach(s => console.log(` [${s.id}] task ${s.task_id} - file "${s.file_path}" (status=${s.status}, index=${s.step_index}, created=${s.created_at})`));
118
- }
119
- // Check for steps referencing missing tasks
120
- const danglingSteps = db.prepare(`
121
- SELECT ts.id, ts.task_id
122
- FROM task_steps ts
123
- LEFT JOIN tasks t ON ts.task_id = t.id
124
- WHERE t.id IS NULL
125
- `).all();
126
- if (danglingSteps.length > 0) {
127
- console.log(`❌ ${danglingSteps.length} task_steps reference missing tasks`);
128
- }
129
- else {
130
- console.log("✅ all task_steps reference valid tasks");
131
- }
132
- }
133
- /* ───────────────────────── files ───────────────────────── */
134
- header("🗂 files");
135
- const totalFiles = tableCount("files");
136
- const filesWithContent = nonEmptyCount("files", "content_text");
137
- console.log(`📊 total files: ${totalFiles}`);
138
- console.log(`📄 files with content: ${filesWithContent}`);
139
- header("⚙️ processing_status");
140
- const statuses = db.prepare(`
141
- SELECT processing_status, COUNT(*) AS count
142
- FROM files
143
- GROUP BY processing_status
144
- ORDER BY count DESC
145
- `).all();
146
- statuses.forEach(s => console.log(` ${s.processing_status ?? "NULL"}: ${s.count}`));
147
- /* ───────────────────────── FTS ───────────────────────── */
148
- header("🔍 files_fts");
149
- const ftsExists = db
150
- .prepare(`SELECT 1 FROM sqlite_master WHERE type='table' AND name='files_fts'`)
151
- .get();
152
- if (!ftsExists) {
153
- console.log("❌ files_fts missing — search is broken");
154
- }
155
- else {
156
- const cols = db.prepare(`PRAGMA table_info(files_fts)`).all();
157
- const hasContentText = cols.some(c => c.name === "content_text");
158
- if (!hasContentText) {
159
- console.log("❌ files_fts.content_text missing");
160
- }
161
- else {
162
- const indexed = nonEmptyCount("files_fts", "content_text");
163
- console.log(`📦 indexed rows with content_text: ${indexed}`);
164
- const sample = db.prepare(`
165
- SELECT filename, substr(content_text,1,80) AS preview
166
- FROM files_fts
167
- WHERE files_fts MATCH 'function'
168
- LIMIT 3
169
- `).all();
170
- if (sample.length === 0) {
171
- console.log("⚠️ no FTS hits for 'function'");
60
+ if (tableExists(db, "files_fts")) {
61
+ const columns = tableColumns(db, "files_fts");
62
+ if (columns.includes("content_text")) {
63
+ addFinding("pass", "files_fts has content_text");
172
64
  }
173
65
  else {
174
- console.log(" FTS sample:");
175
- sample.forEach(r => console.log(` ${r.filename} | "${r.preview}"`));
66
+ addFinding("fail", "files_fts is missing content_text");
176
67
  }
177
68
  }
178
69
  }
179
- /* ───────────────────────── folder capsules ───────────────────────── */
180
- header("📁 folder_capsules");
181
- console.log(`📊 total capsules: ${tableCount("folder_capsules")}`);
182
- const emptyCapsules = db.prepare(`
183
- SELECT COUNT(*) AS c
184
- FROM folder_capsules
185
- WHERE capsule_json IS NULL OR capsule_json = ''
186
- `).get();
187
- if (emptyCapsules.c > 0) {
188
- console.log(`⚠️ ${emptyCapsules.c} capsules have empty JSON`);
189
- }
190
- const sampleCaps = db.prepare(`
191
- SELECT path, depth, confidence, source_file_count, capsule_json
192
- FROM folder_capsules
193
- ORDER BY RANDOM()
194
- LIMIT 5
195
- `).all();
196
- sampleCaps.forEach(c => {
197
- let parsed = null;
198
- try {
199
- parsed = JSON.parse(c.capsule_json);
70
+ function countBrokenRelation(db, sql, message) {
71
+ const row = db.prepare(sql).get();
72
+ if (row.c === 0) {
73
+ addFinding("pass", message);
200
74
  }
201
- catch { }
202
- console.log(` ${c.path}`);
203
- console.log(` depth=${c.depth} confidence=${c.confidence} files=${c.source_file_count}`);
204
- if (parsed) {
205
- console.log(` roles=${parsed.roles?.length ?? 0} ` +
206
- `concerns=${parsed.concerns?.length ?? 0} ` +
207
- `keyFiles=${parsed.keyFiles?.length ?? 0}`);
75
+ else {
76
+ addFinding("fail", `${message} (${row.c} broken row(s))`);
208
77
  }
209
- });
210
- /* ───────────────────────── functions ───────────────────────── */
211
- header("🧑‍💻 functions");
212
- console.log(`📊 total functions: ${tableCount("functions")}`);
213
- const funcSamples = db.prepare(`
214
- SELECT id, name, file_id, substr(content,1,60) AS preview
215
- FROM functions
216
- ORDER BY RANDOM()
217
- LIMIT 5
218
- `).all();
219
- funcSamples.forEach(f => console.log(` [${f.id}] ${f.name} (file ${f.file_id}) "${f.preview}"`));
220
- /* ───────────────────────── graph (KG) ───────────────────────── */
221
- header("🏷 graph_classes");
222
- console.log(`📊 total classes: ${tableCount("graph_classes")}`);
223
- header("🔗 graph_edges");
224
- console.log(`📊 total edges: ${tableCount("graph_edges")}`);
225
- const danglingFuncs = db.prepare(`
226
- SELECT e.id
227
- FROM graph_edges e
228
- WHERE e.source_type='function'
229
- AND NOT EXISTS (SELECT 1 FROM functions f WHERE f.unique_id = e.source_unique_id)
230
- UNION
231
- SELECT e.id
232
- FROM graph_edges e
233
- WHERE e.target_type='function'
234
- AND NOT EXISTS (SELECT 1 FROM functions f WHERE f.unique_id = e.target_unique_id)
235
- LIMIT 10
236
- `).all();
237
- if (danglingFuncs.length === 0) {
238
- console.log("✅ no dangling function edges");
239
- }
240
- else {
241
- console.log(`❌ dangling function edges: ${danglingFuncs.length}`);
242
78
  }
243
- /* ───────────────────────── Graphviz ───────────────────────── */
244
- header("🧩 graphviz");
245
- try {
246
- const edges = db.prepare(`
247
- SELECT source_type, source_unique_id, target_type, target_unique_id, relation
248
- FROM graph_edges
249
- LIMIT 300
250
- `).all();
251
- if (edges.length === 0) {
252
- console.log("⚠️ no edges — skipping export");
79
+ function countWeakHealthSignal(db, sql, message) {
80
+ const row = db.prepare(sql).get();
81
+ if (row.c === 0) {
82
+ addFinding("pass", message);
253
83
  }
254
84
  else {
255
- const lines = [
256
- "digraph G {",
257
- " rankdir=LR;",
258
- ' node [shape=box, style=filled, color="#eaeaea"];'
259
- ];
260
- for (const e of edges) {
261
- const s = `${e.source_type}_${e.source_unique_id}`.replace(/[^a-zA-Z0-9_]/g, "_");
262
- const t = `${e.target_type}_${e.target_unique_id}`.replace(/[^a-zA-Z0-9_]/g, "_");
263
- const label = (e.relation ?? "").replace(/"/g, "'");
264
- lines.push(` ${s} -> ${t} [label="${label}"];`);
265
- }
266
- lines.push("}");
267
- const outDir = path.join(scaiRepoRoot, "graphs");
268
- fs.mkdirSync(outDir, { recursive: true });
269
- const dot = path.join(outDir, "graph-overview.dot");
270
- const png = path.join(outDir, "graph-overview.png");
271
- fs.writeFileSync(dot, lines.join("\n"));
272
- console.log(`✅ dot written: ${dot}`);
273
- try {
274
- execSync(`dot -Tpng "${dot}" -o "${png}"`);
275
- console.log(`✅ png written: ${png}`);
276
- }
277
- catch {
278
- console.log("⚠️ graphviz not installed — png skipped");
279
- }
280
- }
281
- }
282
- catch (err) {
283
- console.error("❌ graphviz export failed", err);
284
- }
285
- console.log("\n✅ DB check complete\n");
85
+ addFinding("warn", `${message} (${row.c} row(s))`);
86
+ }
87
+ }
88
+ function checkRelations(db) {
89
+ console.log("\nRelations");
90
+ if (tableExists(db, "tasks") && tableExists(db, "sessions")) {
91
+ countBrokenRelation(db, `
92
+ SELECT COUNT(*) AS c
93
+ FROM tasks t
94
+ LEFT JOIN sessions s ON s.id = t.session_id
95
+ WHERE s.id IS NULL
96
+ `, "all tasks point to a valid session");
97
+ }
98
+ if (tableExists(db, "tasks") && tableExists(db, "projects")) {
99
+ countBrokenRelation(db, `
100
+ SELECT COUNT(*) AS c
101
+ FROM tasks t
102
+ LEFT JOIN projects p ON p.id = t.project_id
103
+ WHERE p.id IS NULL
104
+ `, "all tasks point to a valid project");
105
+ }
106
+ if (tableExists(db, "steps") && tableExists(db, "tasks")) {
107
+ countBrokenRelation(db, `
108
+ SELECT COUNT(*) AS c
109
+ FROM steps s
110
+ LEFT JOIN tasks t ON t.id = s.task_id
111
+ WHERE t.id IS NULL
112
+ `, "all steps point to a valid task");
113
+ }
114
+ if (tableExists(db, "evaluations") && tableExists(db, "tasks")) {
115
+ countBrokenRelation(db, `
116
+ SELECT COUNT(*) AS c
117
+ FROM evaluations e
118
+ LEFT JOIN tasks t ON t.id = e.task_id
119
+ WHERE t.id IS NULL
120
+ `, "all evaluations point to a valid task");
121
+ }
122
+ if (tableExists(db, "action_ledger") && tableExists(db, "tasks")) {
123
+ countBrokenRelation(db, `
124
+ SELECT COUNT(*) AS c
125
+ FROM action_ledger a
126
+ LEFT JOIN tasks t ON t.id = a.task_id
127
+ WHERE t.id IS NULL
128
+ `, "all action_ledger rows point to a valid task");
129
+ }
130
+ if (tableExists(db, "task_plans") && tableExists(db, "tasks")) {
131
+ countBrokenRelation(db, `
132
+ SELECT COUNT(*) AS c
133
+ FROM task_plans p
134
+ LEFT JOIN tasks t ON t.id = p.task_id
135
+ WHERE t.id IS NULL
136
+ `, "all task_plans rows point to a valid task");
137
+ }
138
+ if (tableExists(db, "task_progress_snapshots") && tableExists(db, "tasks")) {
139
+ countBrokenRelation(db, `
140
+ SELECT COUNT(*) AS c
141
+ FROM task_progress_snapshots s
142
+ LEFT JOIN tasks t ON t.id = s.task_id
143
+ WHERE t.id IS NULL
144
+ `, "all task_progress_snapshots rows point to a valid task");
145
+ }
146
+ if (tableExists(db, "task_progress_snapshots") && tableExists(db, "task_plans")) {
147
+ countWeakHealthSignal(db, `
148
+ SELECT COUNT(*) AS c
149
+ FROM task_progress_snapshots s
150
+ LEFT JOIN task_plans p ON p.id = s.plan_id
151
+ WHERE s.plan_id IS NOT NULL
152
+ AND p.id IS NULL
153
+ `, "task_progress_snapshots plan links look valid");
154
+ }
155
+ }
156
+ function checkSoftSignals(db) {
157
+ console.log("\nSoft Signals");
158
+ if (tableExists(db, "folder_capsules")) {
159
+ countWeakHealthSignal(db, `
160
+ SELECT COUNT(*) AS c
161
+ FROM folder_capsules
162
+ WHERE capsule_json IS NULL OR capsule_json = ''
163
+ `, "folder_capsules rows have capsule_json");
164
+ }
165
+ }
166
+ function printSummary() {
167
+ const passCount = findings.filter((finding) => finding.severity === "pass").length;
168
+ const warnCount = findings.filter((finding) => finding.severity === "warn").length;
169
+ const failCount = findings.filter((finding) => finding.severity === "fail").length;
170
+ console.log("\nSummary");
171
+ console.log(`passes=${passCount} warnings=${warnCount} failures=${failCount}`);
172
+ if (failCount > 0) {
173
+ console.log("Health check result: FAIL");
174
+ process.exitCode = 1;
175
+ return;
176
+ }
177
+ if (warnCount > 0) {
178
+ console.log("Health check result: WARN");
179
+ return;
180
+ }
181
+ console.log("Health check result: PASS");
182
+ }
183
+ const { db, dbPath } = resolveActiveRepoDb();
184
+ console.log(`DB: ${dbPath}`);
185
+ checkRequiredTables(db);
186
+ checkSingletons(db);
187
+ checkExpectedContent(db);
188
+ checkRelations(db);
189
+ checkSoftSignals(db);
190
+ printSummary();
191
+ //# sourceMappingURL=dbcheck.js.map