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.
- package/README.md +171 -260
- package/dist/__tests__/CommitSuggesterCmd.test.js +112 -0
- package/dist/__tests__/CommitSuggesterCmd.test.js.map +1 -0
- package/dist/__tests__/EvalReportCmd.test.js +645 -0
- package/dist/__tests__/EvalReportCmd.test.js.map +1 -0
- package/dist/__tests__/ModelCmd.test.js +64 -0
- package/dist/__tests__/ModelCmd.test.js.map +1 -0
- package/dist/__tests__/agents/agentActions.test.js +345 -0
- package/dist/__tests__/agents/agentActions.test.js.map +1 -0
- package/dist/__tests__/agents/agentFeedback.test.js +118 -0
- package/dist/__tests__/agents/agentFeedback.test.js.map +1 -0
- package/dist/__tests__/agents/agentGeneralScope.test.js +74 -0
- package/dist/__tests__/agents/agentGeneralScope.test.js.map +1 -0
- package/dist/__tests__/agents/agentLoop.test.js +1723 -0
- package/dist/__tests__/agents/agentLoop.test.js.map +1 -0
- package/dist/__tests__/agents/agentPolicyState.test.js +948 -0
- package/dist/__tests__/agents/agentPolicyState.test.js.map +1 -0
- package/dist/__tests__/agents/agentReadEvidence.test.js +170 -0
- package/dist/__tests__/agents/agentReadEvidence.test.js.map +1 -0
- package/dist/__tests__/agents/agentReadPersistence.test.js +129 -0
- package/dist/__tests__/agents/agentReadPersistence.test.js.map +1 -0
- package/dist/__tests__/agents/agentResumeCheckpoint.test.js +90 -0
- package/dist/__tests__/agents/agentResumeCheckpoint.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchBatchPlanner.test.js +289 -0
- package/dist/__tests__/agents/agentSearchBatchPlanner.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchOwnership.test.js +166 -0
- package/dist/__tests__/agents/agentSearchOwnership.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchRanking.test.js +139 -0
- package/dist/__tests__/agents/agentSearchRanking.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchRouting.test.js +584 -0
- package/dist/__tests__/agents/agentSearchRouting.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchScoring.test.js +23 -0
- package/dist/__tests__/agents/agentSearchScoring.test.js.map +1 -0
- package/dist/__tests__/agents/agentSearchShared.test.js +78 -0
- package/dist/__tests__/agents/agentSearchShared.test.js.map +1 -0
- package/dist/__tests__/agents/agentStateMachine.test.js +58 -0
- package/dist/__tests__/agents/agentStateMachine.test.js.map +1 -0
- package/dist/__tests__/agents/agentTaskPersistence.test.js +156 -0
- package/dist/__tests__/agents/agentTaskPersistence.test.js.map +1 -0
- package/dist/__tests__/agents/agentTools.test.js +69 -0
- package/dist/__tests__/agents/agentTools.test.js.map +1 -0
- package/dist/__tests__/agents/agentTransform.test.js +779 -0
- package/dist/__tests__/agents/agentTransform.test.js.map +1 -0
- package/dist/__tests__/agents/analysisPlanGenStep.test.js +157 -0
- package/dist/__tests__/agents/analysisPlanGenStep.test.js.map +1 -0
- package/dist/__tests__/agents/answerOnlyCompletion.test.js +75 -0
- package/dist/__tests__/agents/answerOnlyCompletion.test.js.map +1 -0
- package/dist/__tests__/agents/decideNextAction.test.js +1662 -0
- package/dist/__tests__/agents/decideNextAction.test.js.map +1 -0
- package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js +258 -0
- package/dist/__tests__/agents/deriveFocusFromSearchStep.test.js.map +1 -0
- package/dist/__tests__/agents/evidenceVerifierStep.test.js +113 -0
- package/dist/__tests__/agents/evidenceVerifierStep.test.js.map +1 -0
- package/dist/__tests__/agents/executionPolicyResolver.test.js +208 -0
- package/dist/__tests__/agents/executionPolicyResolver.test.js.map +1 -0
- package/dist/__tests__/agents/fileCheckStep.test.js +299 -0
- package/dist/__tests__/agents/fileCheckStep.test.js.map +1 -0
- package/dist/__tests__/agents/giveUpEvaluatorStep.test.js +35 -0
- package/dist/__tests__/agents/giveUpEvaluatorStep.test.js.map +1 -0
- package/dist/__tests__/agents/guardState.test.js +297 -0
- package/dist/__tests__/agents/guardState.test.js.map +1 -0
- package/dist/__tests__/agents/mainAgentHeuristics.test.js +72 -0
- package/dist/__tests__/agents/mainAgentHeuristics.test.js.map +1 -0
- package/dist/__tests__/agents/objectiveEvaluatorStep.test.js +60 -0
- package/dist/__tests__/agents/objectiveEvaluatorStep.test.js.map +1 -0
- package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js +207 -0
- package/dist/__tests__/agents/outerLoopRecoveryEvaluator.test.js.map +1 -0
- package/dist/__tests__/agents/prompting.test.js +363 -0
- package/dist/__tests__/agents/prompting.test.js.map +1 -0
- package/dist/__tests__/agents/readinessGateStep.test.js +180 -0
- package/dist/__tests__/agents/readinessGateStep.test.js.map +1 -0
- package/dist/__tests__/agents/reasonNextStep.test.js +56 -0
- package/dist/__tests__/agents/reasonNextStep.test.js.map +1 -0
- package/dist/__tests__/agents/reasonNextTaskStep.test.js +284 -0
- package/dist/__tests__/agents/reasonNextTaskStep.test.js.map +1 -0
- package/dist/__tests__/agents/resolveAgentTargetClassification.test.js +170 -0
- package/dist/__tests__/agents/resolveAgentTargetClassification.test.js.map +1 -0
- package/dist/__tests__/agents/resolveProgressState.test.js +526 -0
- package/dist/__tests__/agents/resolveProgressState.test.js.map +1 -0
- package/dist/__tests__/agents/resumeCheckpoint.test.js +50 -0
- package/dist/__tests__/agents/resumeCheckpoint.test.js.map +1 -0
- package/dist/__tests__/agents/routingDecisionStep.test.js +134 -0
- package/dist/__tests__/agents/routingDecisionStep.test.js.map +1 -0
- package/dist/__tests__/agents/scopeClassificationStep.test.js +118 -0
- package/dist/__tests__/agents/scopeClassificationStep.test.js.map +1 -0
- package/dist/__tests__/agents/searchContext.test.js +97 -0
- package/dist/__tests__/agents/searchContext.test.js.map +1 -0
- package/dist/__tests__/agents/selectRelevantSourcesStep.test.js +73 -0
- package/dist/__tests__/agents/selectRelevantSourcesStep.test.js.map +1 -0
- package/dist/__tests__/agents/structuredOutput.test.js +45 -0
- package/dist/__tests__/agents/structuredOutput.test.js.map +1 -0
- package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js +59 -0
- package/dist/__tests__/agents/transformPlanGenStep.fallback.test.js.map +1 -0
- package/dist/__tests__/agents/transformPlanGenStep.test.js +92 -0
- package/dist/__tests__/agents/transformPlanGenStep.test.js.map +1 -0
- package/dist/__tests__/agents/understandIntentStep.test.js +237 -0
- package/dist/__tests__/agents/understandIntentStep.test.js.map +1 -0
- package/dist/__tests__/agents/understandResumeContext.test.js +65 -0
- package/dist/__tests__/agents/understandResumeContext.test.js.map +1 -0
- package/dist/__tests__/agents/understandScope.test.js +227 -0
- package/dist/__tests__/agents/understandScope.test.js.map +1 -0
- package/dist/__tests__/agents/validateChangesStep.test.js +52 -0
- package/dist/__tests__/agents/validateChangesStep.test.js.map +1 -0
- package/dist/__tests__/askCommandTaskBinding.test.js +176 -0
- package/dist/__tests__/askCommandTaskBinding.test.js.map +1 -0
- package/dist/__tests__/commandVisibility.test.js +25 -0
- package/dist/__tests__/commandVisibility.test.js.map +1 -0
- package/dist/__tests__/config.devOutput.test.js +82 -0
- package/dist/__tests__/config.devOutput.test.js.map +1 -0
- package/dist/__tests__/currentContext.test.js +43 -0
- package/dist/__tests__/currentContext.test.js.map +1 -0
- package/dist/__tests__/daemonWorker.test.js +51 -0
- package/dist/__tests__/daemonWorker.test.js.map +1 -0
- package/dist/__tests__/dialogState.test.js +113 -0
- package/dist/__tests__/dialogState.test.js.map +1 -0
- package/dist/__tests__/evalCommands.test.js +506 -0
- package/dist/__tests__/evalCommands.test.js.map +1 -0
- package/dist/__tests__/evalCommandsSummary.test.js +68 -0
- package/dist/__tests__/evalCommandsSummary.test.js.map +1 -0
- package/dist/__tests__/example.test.js +1 -0
- package/dist/__tests__/example.test.js.map +1 -0
- package/dist/__tests__/factory.commitCommand.test.js +45 -0
- package/dist/__tests__/factory.commitCommand.test.js.map +1 -0
- package/dist/__tests__/factory.devOutputCommand.test.js +122 -0
- package/dist/__tests__/factory.devOutputCommand.test.js.map +1 -0
- package/dist/__tests__/factory.evalCommands.test.js +38 -0
- package/dist/__tests__/factory.evalCommands.test.js.map +1 -0
- package/dist/__tests__/factory.planCommand.test.js +35 -0
- package/dist/__tests__/factory.planCommand.test.js.map +1 -0
- package/dist/__tests__/factory.setupCommand.test.js +34 -0
- package/dist/__tests__/factory.setupCommand.test.js.map +1 -0
- package/dist/__tests__/factory.statusCommand.test.js +54 -0
- package/dist/__tests__/factory.statusCommand.test.js.map +1 -0
- package/dist/__tests__/fileRules/queryTokenRules.test.js +35 -0
- package/dist/__tests__/fileRules/queryTokenRules.test.js.map +1 -0
- package/dist/__tests__/fileRules/searchPathClassification.test.js +57 -0
- package/dist/__tests__/fileRules/searchPathClassification.test.js.map +1 -0
- package/dist/__tests__/generate.ollamaRecovery.test.js +344 -0
- package/dist/__tests__/generate.ollamaRecovery.test.js.map +1 -0
- package/dist/__tests__/index.modelStartup.test.js +24 -0
- package/dist/__tests__/index.modelStartup.test.js.map +1 -0
- package/dist/__tests__/indexCmd.test.js +85 -0
- package/dist/__tests__/indexCmd.test.js.map +1 -0
- package/dist/__tests__/indexSlashCommand.test.js +50 -0
- package/dist/__tests__/indexSlashCommand.test.js.map +1 -0
- package/dist/__tests__/ollamaService.test.js +103 -0
- package/dist/__tests__/ollamaService.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js +68 -0
- package/dist/__tests__/pipeline/modules/codeTransformModule.small-file.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js +68 -0
- package/dist/__tests__/pipeline/modules/commitSuggesterModule.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/fileSearchModule.test.js +284 -0
- package/dist/__tests__/pipeline/modules/fileSearchModule.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js +1139 -0
- package/dist/__tests__/pipeline/modules/finalAnswerModule.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/readFileModule.test.js +146 -0
- package/dist/__tests__/pipeline/modules/readFileModule.test.js.map +1 -0
- package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js +192 -0
- package/dist/__tests__/pipeline/modules/semanticAnalysisModule.test.js.map +1 -0
- package/dist/__tests__/repoIdentity.test.js +31 -0
- package/dist/__tests__/repoIdentity.test.js.map +1 -0
- package/dist/__tests__/resumeContext.test.js +87 -0
- package/dist/__tests__/resumeContext.test.js.map +1 -0
- package/dist/__tests__/resumeState.test.js +239 -0
- package/dist/__tests__/resumeState.test.js.map +1 -0
- package/dist/__tests__/search/SearchOrchestrator.test.js +836 -0
- package/dist/__tests__/search/SearchOrchestrator.test.js.map +1 -0
- package/dist/__tests__/shellDialogUi.test.js +52 -0
- package/dist/__tests__/shellDialogUi.test.js.map +1 -0
- package/dist/__tests__/shellSession.test.js +102 -0
- package/dist/__tests__/shellSession.test.js.map +1 -0
- package/dist/__tests__/statusOwner.test.js +215 -0
- package/dist/__tests__/statusOwner.test.js.map +1 -0
- package/dist/__tests__/testing/contextEval.test.js +244 -0
- package/dist/__tests__/testing/contextEval.test.js.map +1 -0
- package/dist/__tests__/testing/harnessArtifacts.test.js +124 -0
- package/dist/__tests__/testing/harnessArtifacts.test.js.map +1 -0
- package/dist/__tests__/testing/llmTraceSession.test.js +67 -0
- package/dist/__tests__/testing/llmTraceSession.test.js.map +1 -0
- package/dist/__tests__/testing/registerDevCliCommands.test.js +35 -0
- package/dist/__tests__/testing/registerDevCliCommands.test.js.map +1 -0
- package/dist/__tests__/testing/runDiagnosis.test.js +159 -0
- package/dist/__tests__/testing/runDiagnosis.test.js.map +1 -0
- package/dist/__tests__/testing/runtimeLogReader.test.js +66 -0
- package/dist/__tests__/testing/runtimeLogReader.test.js.map +1 -0
- package/dist/__tests__/testing/testCommands.test.js +53 -0
- package/dist/__tests__/testing/testCommands.test.js.map +1 -0
- package/dist/__tests__/utils/compileSearchQuery.test.js +38 -0
- package/dist/__tests__/utils/compileSearchQuery.test.js.map +1 -0
- package/dist/__tests__/utils/consolePresentation.test.js +105 -0
- package/dist/__tests__/utils/consolePresentation.test.js.map +1 -0
- package/dist/__tests__/utils/extractFileReferences.test.js +41 -0
- package/dist/__tests__/utils/extractFileReferences.test.js.map +1 -0
- package/dist/__tests__/utils/log.test.js +34 -0
- package/dist/__tests__/utils/log.test.js.map +1 -0
- package/dist/__tests__/utils/runtimeLogger.test.js +200 -0
- package/dist/__tests__/utils/runtimeLogger.test.js.map +1 -0
- package/dist/__tests__/utils/spinner.test.js +31 -0
- package/dist/__tests__/utils/spinner.test.js.map +1 -0
- package/dist/__tests__/utils/verifyFocusPreference.test.js +41 -0
- package/dist/__tests__/utils/verifyFocusPreference.test.js.map +1 -0
- package/dist/agent/actions/index.js +301 -0
- package/dist/agent/actions/index.js.map +1 -0
- package/dist/agent/actions/normalize.js +360 -0
- package/dist/agent/actions/normalize.js.map +1 -0
- package/dist/agent/actions/schemas.js +129 -0
- package/dist/agent/actions/schemas.js.map +1 -0
- package/dist/agent/evidence/index.js +320 -0
- package/dist/agent/evidence/index.js.map +1 -0
- package/dist/agent/feedback/index.js +187 -0
- package/dist/agent/feedback/index.js.map +1 -0
- package/dist/agent/finalization/index.js +35 -0
- package/dist/agent/finalization/index.js.map +1 -0
- package/dist/agent/index.js +126 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/logging/index.js +350 -0
- package/dist/agent/logging/index.js.map +1 -0
- package/dist/agent/persistence/boot.js +58 -0
- package/dist/agent/persistence/boot.js.map +1 -0
- package/dist/agent/persistence/currentTask.js +36 -0
- package/dist/agent/persistence/currentTask.js.map +1 -0
- package/dist/agent/persistence/hydrate.js +42 -0
- package/dist/agent/persistence/hydrate.js.map +1 -0
- package/dist/agent/persistence/index.js +15 -0
- package/dist/agent/persistence/index.js.map +1 -0
- package/dist/agent/persistence/snapshots.js +97 -0
- package/dist/agent/persistence/snapshots.js.map +1 -0
- package/dist/agent/persistence/steps.js +95 -0
- package/dist/agent/persistence/steps.js.map +1 -0
- package/dist/agent/persistence/tasks.js +195 -0
- package/dist/agent/persistence/tasks.js.map +1 -0
- package/dist/agent/persistence/turns.js +92 -0
- package/dist/agent/persistence/turns.js.map +1 -0
- package/dist/agent/policy/ambiguityResolution.js +226 -0
- package/dist/agent/policy/ambiguityResolution.js.map +1 -0
- package/dist/agent/policy/contracts.js +2 -0
- package/dist/agent/policy/contracts.js.map +1 -0
- package/dist/agent/policy/coveragePolicy.js +309 -0
- package/dist/agent/policy/coveragePolicy.js.map +1 -0
- package/dist/agent/policy/endDecisionPolicy.js +31 -0
- package/dist/agent/policy/endDecisionPolicy.js.map +1 -0
- package/dist/agent/policy/index.js +344 -0
- package/dist/agent/policy/index.js.map +1 -0
- package/dist/agent/policy/loopReview.js +778 -0
- package/dist/agent/policy/loopReview.js.map +1 -0
- package/dist/agent/policy/readinessPolicy.js +108 -0
- package/dist/agent/policy/readinessPolicy.js.map +1 -0
- package/dist/agent/policy/resolutionPipeline.js +356 -0
- package/dist/agent/policy/resolutionPipeline.js.map +1 -0
- package/dist/agent/policy/targetClassification.js +33 -0
- package/dist/agent/policy/targetClassification.js.map +1 -0
- package/dist/agent/prompting/actionChoice.js +90 -0
- package/dist/agent/prompting/actionChoice.js.map +1 -0
- package/dist/agent/prompting/finalAnswer.js +38 -0
- package/dist/agent/prompting/finalAnswer.js.map +1 -0
- package/dist/agent/prompting/index.js +14 -0
- package/dist/agent/prompting/index.js.map +1 -0
- package/dist/agent/prompting/plan.js +59 -0
- package/dist/agent/prompting/plan.js.map +1 -0
- package/dist/agent/prompting/transform.js +175 -0
- package/dist/agent/prompting/transform.js.map +1 -0
- package/dist/agent/prompting/understand.js +70 -0
- package/dist/agent/prompting/understand.js.map +1 -0
- package/dist/agent/read/freshness.js +29 -0
- package/dist/agent/read/freshness.js.map +1 -0
- package/dist/agent/read/fullReadPrompt.js +43 -0
- package/dist/agent/read/fullReadPrompt.js.map +1 -0
- package/dist/agent/read/index.js +140 -0
- package/dist/agent/read/index.js.map +1 -0
- package/dist/agent/read/persistence.js +88 -0
- package/dist/agent/read/persistence.js.map +1 -0
- package/dist/agent/read/summarizeReadEvidence.js +733 -0
- package/dist/agent/read/summarizeReadEvidence.js.map +1 -0
- package/dist/agent/read/targetResolution.js +126 -0
- package/dist/agent/read/targetResolution.js.map +1 -0
- package/dist/agent/resume/checkpoint.js +41 -0
- package/dist/agent/resume/checkpoint.js.map +1 -0
- package/dist/agent/runtime/lifecycle.js +67 -0
- package/dist/agent/runtime/lifecycle.js.map +1 -0
- package/dist/agent/runtime/progress.js +178 -0
- package/dist/agent/runtime/progress.js.map +1 -0
- package/dist/agent/runtime/runAgentLoop.js +402 -0
- package/dist/agent/runtime/runAgentLoop.js.map +1 -0
- package/dist/agent/runtime/runAgentPlanOnly.js +127 -0
- package/dist/agent/runtime/runAgentPlanOnly.js.map +1 -0
- package/dist/agent/runtime/understand.js +336 -0
- package/dist/agent/runtime/understand.js.map +1 -0
- package/dist/agent/search/batchPlanner.js +274 -0
- package/dist/agent/search/batchPlanner.js.map +1 -0
- package/dist/agent/search/candidateRetentionPolicy.js +184 -0
- package/dist/agent/search/candidateRetentionPolicy.js.map +1 -0
- package/dist/agent/search/directory.js +51 -0
- package/dist/agent/search/directory.js.map +1 -0
- package/dist/agent/search/exactTarget.js +151 -0
- package/dist/agent/search/exactTarget.js.map +1 -0
- package/dist/agent/search/fragment.js +110 -0
- package/dist/agent/search/fragment.js.map +1 -0
- package/dist/agent/search/index.js +166 -0
- package/dist/agent/search/index.js.map +1 -0
- package/dist/agent/search/laneClassifier.js +119 -0
- package/dist/agent/search/laneClassifier.js.map +1 -0
- package/dist/agent/search/limits.js +10 -0
- package/dist/agent/search/limits.js.map +1 -0
- package/dist/agent/search/ranking.js +22 -0
- package/dist/agent/search/ranking.js.map +1 -0
- package/dist/agent/search/regex.js +83 -0
- package/dist/agent/search/regex.js.map +1 -0
- package/dist/agent/search/routePolicy.js +11 -0
- package/dist/agent/search/routePolicy.js.map +1 -0
- package/dist/agent/search/searchContext.js +128 -0
- package/dist/agent/search/searchContext.js.map +1 -0
- package/dist/agent/search/semantic.js +113 -0
- package/dist/agent/search/semantic.js.map +1 -0
- package/dist/agent/search/semanticIndexSearch.js +202 -0
- package/dist/agent/search/semanticIndexSearch.js.map +1 -0
- package/dist/agent/search/shared.js +283 -0
- package/dist/agent/search/shared.js.map +1 -0
- package/dist/agent/search/shell.js +202 -0
- package/dist/agent/search/shell.js.map +1 -0
- package/dist/agent/search/snippetEvidence.js +57 -0
- package/dist/agent/search/snippetEvidence.js.map +1 -0
- package/dist/agent/search/types.js +2 -0
- package/dist/agent/search/types.js.map +1 -0
- package/dist/agent/state/index.js +99 -0
- package/dist/agent/state/index.js.map +1 -0
- package/dist/agent/state/memory.js +56 -0
- package/dist/agent/state/memory.js.map +1 -0
- package/dist/agent/structuredOutput/index.js +28 -0
- package/dist/agent/structuredOutput/index.js.map +1 -0
- package/dist/agent/tools/index.js +199 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/transform/index.js +519 -0
- package/dist/agent/transform/index.js.map +1 -0
- package/dist/agent/transform/syntax.js +49 -0
- package/dist/agent/transform/syntax.js.map +1 -0
- package/dist/agent/types.js +20 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agents/actionRegistry.js +114 -0
- package/dist/agents/actionRegistry.js.map +1 -0
- package/dist/agents/agent.js +5 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/agentActions.js +5 -0
- package/dist/agents/agentActions.js.map +1 -0
- package/dist/agents/agentEvidence.js +5 -0
- package/dist/agents/agentEvidence.js.map +1 -0
- package/dist/agents/agentFeedback.js +5 -0
- package/dist/agents/agentFeedback.js.map +1 -0
- package/dist/agents/agentLogging.js +5 -0
- package/dist/agents/agentLogging.js.map +1 -0
- package/dist/agents/agentLoop.js +5 -0
- package/dist/agents/agentLoop.js.map +1 -0
- package/dist/agents/agentMemory.js +5 -0
- package/dist/agents/agentMemory.js.map +1 -0
- package/dist/agents/agentPlanMode.js +5 -0
- package/dist/agents/agentPlanMode.js.map +1 -0
- package/dist/agents/agentPolicyState.js +5 -0
- package/dist/agents/agentPolicyState.js.map +1 -0
- package/dist/agents/agentProgress.js +93 -0
- package/dist/agents/agentProgress.js.map +1 -0
- package/dist/agents/agentSchemas.js +5 -0
- package/dist/agents/agentSchemas.js.map +1 -0
- package/dist/agents/agentSearchScoring.js +5 -0
- package/dist/agents/agentSearchScoring.js.map +1 -0
- package/dist/agents/agentStateMachine.js +5 -0
- package/dist/agents/agentStateMachine.js.map +1 -0
- package/dist/agents/agentTools.js +5 -0
- package/dist/agents/agentTools.js.map +1 -0
- package/dist/agents/agentTypes.js +5 -0
- package/dist/agents/agentTypes.js.map +1 -0
- package/dist/agents/agentUnderstand.js +5 -0
- package/dist/agents/agentUnderstand.js.map +1 -0
- package/dist/agents/analysisPlanGenStep.js +194 -17
- package/dist/agents/analysisPlanGenStep.js.map +1 -0
- package/dist/agents/answerOnlyCompletion.js +32 -0
- package/dist/agents/answerOnlyCompletion.js.map +1 -0
- package/dist/agents/collaboratorStep.js +1 -0
- package/dist/agents/collaboratorStep.js.map +1 -0
- package/dist/agents/decideNextAction.js +444 -0
- package/dist/agents/decideNextAction.js.map +1 -0
- package/dist/agents/deriveFocusFromSearchStep.js +83 -0
- package/dist/agents/deriveFocusFromSearchStep.js.map +1 -0
- package/dist/agents/evidenceVerifierStep.js +104 -13
- package/dist/agents/evidenceVerifierStep.js.map +1 -0
- package/dist/agents/fileCheckStep.js +381 -12
- package/dist/agents/fileCheckStep.js.map +1 -0
- package/dist/agents/giveUpEvaluatorStep.js +63 -0
- package/dist/agents/giveUpEvaluatorStep.js.map +1 -0
- package/dist/agents/guardPolicy.js +20 -0
- package/dist/agents/guardPolicy.js.map +1 -0
- package/dist/agents/guards/executionPolicyResolver.js +165 -0
- package/dist/agents/guards/executionPolicyResolver.js.map +1 -0
- package/dist/agents/guards/guardState.js +195 -0
- package/dist/agents/guards/guardState.js.map +1 -0
- package/dist/agents/guards/resolveProgressState.js +403 -0
- package/dist/agents/guards/resolveProgressState.js.map +1 -0
- package/dist/agents/infoPlanGenStep.js +66 -8
- package/dist/agents/infoPlanGenStep.js.map +1 -0
- package/dist/agents/integrateFeedbackStep.js +1 -0
- package/dist/agents/integrateFeedbackStep.js.map +1 -0
- package/dist/agents/iterationFileSelector.js +8 -7
- package/dist/agents/iterationFileSelector.js.map +1 -0
- package/dist/agents/mainAgentActivityLog.js +85 -0
- package/dist/agents/mainAgentActivityLog.js.map +1 -0
- package/dist/agents/mainAgentHeuristics.js +173 -0
- package/dist/agents/mainAgentHeuristics.js.map +1 -0
- package/dist/agents/mainAgentVerify.js +159 -0
- package/dist/agents/mainAgentVerify.js.map +1 -0
- package/dist/agents/objectiveEvaluatorStep.js +103 -0
- package/dist/agents/objectiveEvaluatorStep.js.map +1 -0
- package/dist/agents/outerLoopRecoveryEvaluator.js +108 -0
- package/dist/agents/outerLoopRecoveryEvaluator.js.map +1 -0
- package/dist/agents/readinessGateStep.js +95 -9
- package/dist/agents/readinessGateStep.js.map +1 -0
- package/dist/agents/reasonNextStep.js +9 -8
- package/dist/agents/reasonNextStep.js.map +1 -0
- package/dist/agents/reasonNextTaskStep.js +267 -144
- package/dist/agents/reasonNextTaskStep.js.map +1 -0
- package/dist/agents/researchPlanGenStep.js +61 -25
- package/dist/agents/researchPlanGenStep.js.map +1 -0
- package/dist/agents/resolveAgentTargetClassification.js +5 -0
- package/dist/agents/resolveAgentTargetClassification.js.map +1 -0
- package/dist/agents/resolveExecutionModeStep.js +1 -0
- package/dist/agents/resolveExecutionModeStep.js.map +1 -0
- package/dist/agents/resolveExplicitTargetsStep.js +74 -0
- package/dist/agents/resolveExplicitTargetsStep.js.map +1 -0
- package/dist/agents/routingDecisionStep.js +58 -11
- package/dist/agents/routingDecisionStep.js.map +1 -0
- package/dist/agents/scopeClassificationStep.js +66 -3
- package/dist/agents/scopeClassificationStep.js.map +1 -0
- package/dist/agents/selectRelevantSourcesStep.js +13 -5
- package/dist/agents/selectRelevantSourcesStep.js.map +1 -0
- package/dist/agents/structuralPreloadStep.js +3 -4
- package/dist/agents/structuralPreloadStep.js.map +1 -0
- package/dist/agents/transformPlanGenStep.js +105 -18
- package/dist/agents/transformPlanGenStep.js.map +1 -0
- package/dist/agents/understandIntentStep.js +237 -17
- package/dist/agents/understandIntentStep.js.map +1 -0
- package/dist/agents/validateChangesStep.js +16 -2
- package/dist/agents/validateChangesStep.js.map +1 -0
- package/dist/agents/writeFileStep.js +1 -0
- package/dist/agents/writeFileStep.js.map +1 -0
- package/dist/commands/AskCmd.js +139 -44
- package/dist/commands/AskCmd.js.map +1 -0
- package/dist/commands/BackupCmd.js +1 -0
- package/dist/commands/BackupCmd.js.map +1 -0
- package/dist/commands/ChangeLogUpdateCmd.js +1 -0
- package/dist/commands/ChangeLogUpdateCmd.js.map +1 -0
- package/dist/commands/CommitSuggesterCmd.js +55 -13
- package/dist/commands/CommitSuggesterCmd.js.map +1 -0
- package/dist/commands/DaemonCmd.js +52 -14
- package/dist/commands/DaemonCmd.js.map +1 -0
- package/dist/commands/DeleteIndex.js +1 -0
- package/dist/commands/DeleteIndex.js.map +1 -0
- package/dist/commands/EvalReportCmd.js +374 -0
- package/dist/commands/EvalReportCmd.js.map +1 -0
- package/dist/commands/FindCmd.js +1 -0
- package/dist/commands/FindCmd.js.map +1 -0
- package/dist/commands/GitCmd.js +1 -0
- package/dist/commands/GitCmd.js.map +1 -0
- package/dist/commands/IndexCmd.js +11 -79
- package/dist/commands/IndexCmd.js.map +1 -0
- package/dist/commands/InspectCmd.js +1 -0
- package/dist/commands/InspectCmd.js.map +1 -0
- package/dist/commands/ModelCmd.js +24 -0
- package/dist/commands/ModelCmd.js.map +1 -0
- package/dist/commands/ReadlineSingleton.js +1 -0
- package/dist/commands/ReadlineSingleton.js.map +1 -0
- package/dist/commands/ResetDbCmd.js +18 -1
- package/dist/commands/ResetDbCmd.js.map +1 -0
- package/dist/commands/ReviewCmd.js +1 -0
- package/dist/commands/ReviewCmd.js.map +1 -0
- package/dist/commands/StatusCmd.js +22 -0
- package/dist/commands/StatusCmd.js.map +1 -0
- package/dist/commands/StopDaemonCmd.js +1 -0
- package/dist/commands/StopDaemonCmd.js.map +1 -0
- package/dist/commands/SummaryCmd.js +1 -0
- package/dist/commands/SummaryCmd.js.map +1 -0
- package/dist/commands/SwitchCmd.js +9 -15
- package/dist/commands/SwitchCmd.js.map +1 -0
- package/dist/commands/TasksCmd.js +142 -57
- package/dist/commands/TasksCmd.js.map +1 -0
- package/dist/commands/TestCmd.js +66 -0
- package/dist/commands/TestCmd.js.map +1 -0
- package/dist/commands/WorkflowCmd.js +1 -0
- package/dist/commands/WorkflowCmd.js.map +1 -0
- package/dist/commands/commandVisibility.js +27 -0
- package/dist/commands/commandVisibility.js.map +1 -0
- package/dist/commands/evalCommands.js +1337 -0
- package/dist/commands/evalCommands.js.map +1 -0
- package/dist/commands/factory.js +206 -38
- package/dist/commands/factory.js.map +1 -0
- package/dist/config.js +62 -11
- package/dist/config.js.map +1 -0
- package/dist/constants.js +21 -3
- package/dist/constants.js.map +1 -0
- package/dist/context.js +33 -32
- package/dist/context.js.map +1 -0
- package/dist/daemon/daemonQueues.js +1 -20
- package/dist/daemon/daemonQueues.js.map +1 -0
- package/dist/daemon/daemonWorker.js +26 -37
- package/dist/daemon/daemonWorker.js.map +1 -0
- package/dist/daemon/generateSummaries.js +1 -0
- package/dist/daemon/generateSummaries.js.map +1 -0
- package/dist/daemon/runFolderCapsuleBatch.js +1 -0
- package/dist/daemon/runFolderCapsuleBatch.js.map +1 -0
- package/dist/daemon/runIndexingBatch.js +1 -0
- package/dist/daemon/runIndexingBatch.js.map +1 -0
- package/dist/daemon/runKgBatch.js +9 -1
- package/dist/daemon/runKgBatch.js.map +1 -0
- package/dist/db/backup.js +1 -0
- package/dist/db/backup.js.map +1 -0
- package/dist/db/client.js +18 -3
- package/dist/db/client.js.map +1 -0
- package/dist/db/fileIndex.js +110 -152
- package/dist/db/fileIndex.js.map +1 -0
- package/dist/db/functionExtractors/extractFromJava.js +1 -0
- package/dist/db/functionExtractors/extractFromJava.js.map +1 -0
- package/dist/db/functionExtractors/extractFromJs.js +1 -0
- package/dist/db/functionExtractors/extractFromJs.js.map +1 -0
- package/dist/db/functionExtractors/extractFromTs.js +1 -0
- package/dist/db/functionExtractors/extractFromTs.js.map +1 -0
- package/dist/db/functionExtractors/extractFromXML.js +1 -0
- package/dist/db/functionExtractors/extractFromXML.js.map +1 -0
- package/dist/db/functionExtractors/index.js +1 -0
- package/dist/db/functionExtractors/index.js.map +1 -0
- package/dist/db/functionIndex.js +9 -0
- package/dist/db/functionIndex.js.map +1 -0
- package/dist/db/schema.js +314 -99
- package/dist/db/schema.js.map +1 -0
- package/dist/db/sqlTemplates.js +1 -0
- package/dist/db/sqlTemplates.js.map +1 -0
- package/dist/fileRules/builtins.js +1 -0
- package/dist/fileRules/builtins.js.map +1 -0
- package/dist/fileRules/classifyFile.js +1 -0
- package/dist/fileRules/classifyFile.js.map +1 -0
- package/dist/fileRules/codeAllowedExtensions.js +1 -0
- package/dist/fileRules/codeAllowedExtensions.js.map +1 -0
- package/dist/fileRules/detectFileType.js +1 -0
- package/dist/fileRules/detectFileType.js.map +1 -0
- package/dist/fileRules/fileClassifier.js +1 -0
- package/dist/fileRules/fileClassifier.js.map +1 -0
- package/dist/fileRules/fileExceptions.js +1 -0
- package/dist/fileRules/fileExceptions.js.map +1 -0
- package/dist/fileRules/ignoredExtensions.js +1 -0
- package/dist/fileRules/ignoredExtensions.js.map +1 -0
- package/dist/fileRules/ignoredPaths.js +48 -5
- package/dist/fileRules/ignoredPaths.js.map +1 -0
- package/dist/fileRules/queryTokenRules.js +176 -0
- package/dist/fileRules/queryTokenRules.js.map +1 -0
- package/dist/fileRules/searchPathClassification.js +58 -0
- package/dist/fileRules/searchPathClassification.js.map +1 -0
- package/dist/fileRules/shouldIgnoreFiles.js +1 -0
- package/dist/fileRules/shouldIgnoreFiles.js.map +1 -0
- package/dist/fileRules/stopWords.js +9 -0
- package/dist/fileRules/stopWords.js.map +1 -0
- package/dist/fileRules/wellKnownRepoFiles.js +1 -0
- package/dist/fileRules/wellKnownRepoFiles.js.map +1 -0
- package/dist/git/commitSummary.js +227 -0
- package/dist/git/commitSummary.js.map +1 -0
- package/dist/github/api.js +1 -0
- package/dist/github/api.js.map +1 -0
- package/dist/github/auth.js +1 -0
- package/dist/github/auth.js.map +1 -0
- package/dist/github/github.js +1 -0
- package/dist/github/github.js.map +1 -0
- package/dist/github/githubAuthCheck.js +1 -0
- package/dist/github/githubAuthCheck.js.map +1 -0
- package/dist/github/postComments.js +1 -0
- package/dist/github/postComments.js.map +1 -0
- package/dist/github/repo.js +15 -24
- package/dist/github/repo.js.map +1 -0
- package/dist/github/token.js +1 -0
- package/dist/github/token.js.map +1 -0
- package/dist/github/types.js +1 -0
- package/dist/github/types.js.map +1 -0
- package/dist/index.js +318 -37
- package/dist/index.js.map +1 -0
- package/dist/lib/generate.js +264 -20
- package/dist/lib/generate.js.map +1 -0
- package/dist/lib/generateFolderCapsules.js +1 -0
- package/dist/lib/generateFolderCapsules.js.map +1 -0
- package/dist/lib/ollamaModelPolicy.js +59 -0
- package/dist/lib/ollamaModelPolicy.js.map +1 -0
- package/dist/lib/spinner.js +29 -9
- package/dist/lib/spinner.js.map +1 -0
- package/dist/modelSetup.js +25 -78
- package/dist/modelSetup.js.map +1 -0
- package/dist/pipeline/modules/changeLogModule.js +10 -1
- package/dist/pipeline/modules/changeLogModule.js.map +1 -0
- package/dist/pipeline/modules/cleanupModule.js +1 -0
- package/dist/pipeline/modules/cleanupModule.js.map +1 -0
- package/dist/pipeline/modules/codeTransformModule.js +10 -16
- package/dist/pipeline/modules/codeTransformModule.js.map +1 -0
- package/dist/pipeline/modules/commentModule.js +12 -0
- package/dist/pipeline/modules/commentModule.js.map +1 -0
- package/dist/pipeline/modules/commitSuggesterModule.js +82 -12
- package/dist/pipeline/modules/commitSuggesterModule.js.map +1 -0
- package/dist/pipeline/modules/contextReviewModule.js +12 -1
- package/dist/pipeline/modules/contextReviewModule.js.map +1 -0
- package/dist/pipeline/modules/dialogAnswerModule.js +58 -0
- package/dist/pipeline/modules/dialogAnswerModule.js.map +1 -0
- package/dist/pipeline/modules/fileSearchModule.js +5 -143
- package/dist/pipeline/modules/fileSearchModule.js.map +1 -0
- package/dist/pipeline/modules/finalAnswerModule.js +1176 -151
- package/dist/pipeline/modules/finalAnswerModule.js.map +1 -0
- package/dist/pipeline/modules/kgModule.js +18 -1
- package/dist/pipeline/modules/kgModule.js.map +1 -0
- package/dist/pipeline/modules/planAnswerModule.js +99 -0
- package/dist/pipeline/modules/planAnswerModule.js.map +1 -0
- package/dist/pipeline/modules/readFileModule.js +300 -0
- package/dist/pipeline/modules/readFileModule.js.map +1 -0
- package/dist/pipeline/modules/reviewModule.js +10 -1
- package/dist/pipeline/modules/reviewModule.js.map +1 -0
- package/dist/pipeline/modules/searchDbModule.js +159 -0
- package/dist/pipeline/modules/searchDbModule.js.map +1 -0
- package/dist/pipeline/modules/searchListDirectoryModule.js +62 -0
- package/dist/pipeline/modules/searchListDirectoryModule.js.map +1 -0
- package/dist/pipeline/modules/searchModuleShared.js +71 -0
- package/dist/pipeline/modules/searchModuleShared.js.map +1 -0
- package/dist/pipeline/modules/searchRegexModule.js +59 -0
- package/dist/pipeline/modules/searchRegexModule.js.map +1 -0
- package/dist/pipeline/modules/semanticAnalysisModule.js +185 -28
- package/dist/pipeline/modules/semanticAnalysisModule.js.map +1 -0
- package/dist/pipeline/modules/summaryModule.js +11 -1
- package/dist/pipeline/modules/summaryModule.js.map +1 -0
- package/dist/pipeline/registry/moduleRegistry.js +9 -0
- package/dist/pipeline/registry/moduleRegistry.js.map +1 -0
- package/dist/pipeline/runModulePipeline.js +1 -0
- package/dist/pipeline/runModulePipeline.js.map +1 -0
- package/dist/scripts/dbScriptSupport.js +172 -0
- package/dist/scripts/dbScriptSupport.js.map +1 -0
- package/dist/scripts/dbcheck.js +173 -267
- package/dist/scripts/dbcheck.js.map +1 -0
- package/dist/scripts/dboverview.js +161 -0
- package/dist/scripts/dboverview.js.map +1 -0
- package/dist/scripts/migrateDb.js +1 -0
- package/dist/scripts/migrateDb.js.map +1 -0
- package/dist/search/SearchOrchestrator.js +928 -0
- package/dist/search/SearchOrchestrator.js.map +1 -0
- package/dist/search/sharedRankingPolicy.js +283 -0
- package/dist/search/sharedRankingPolicy.js.map +1 -0
- package/dist/setup/reindexOwner.js +97 -0
- package/dist/setup/reindexOwner.js.map +1 -0
- package/dist/setup/setupOwner.js +100 -0
- package/dist/setup/setupOwner.js.map +1 -0
- package/dist/shell/dialogUi.js +81 -0
- package/dist/shell/dialogUi.js.map +1 -0
- package/dist/shellSession.js +126 -0
- package/dist/shellSession.js.map +1 -0
- package/dist/status/statusOwner.js +239 -0
- package/dist/status/statusOwner.js.map +1 -0
- package/dist/testing/contextEval.js +514 -0
- package/dist/testing/contextEval.js.map +1 -0
- package/dist/testing/fixtures/transform/small-file.input.js +5 -0
- package/dist/testing/fixtures/transform/small-file.input.js.map +1 -0
- package/dist/testing/harnessArtifacts.js +112 -0
- package/dist/testing/harnessArtifacts.js.map +1 -0
- package/dist/testing/llmTraceSession.js +67 -0
- package/dist/testing/llmTraceSession.js.map +1 -0
- package/dist/testing/registerDevCliCommands.js +43 -0
- package/dist/testing/registerDevCliCommands.js.map +1 -0
- package/dist/testing/runDiagnosis.js +248 -0
- package/dist/testing/runDiagnosis.js.map +1 -0
- package/dist/testing/runtimeLogReader.js +144 -0
- package/dist/testing/runtimeLogReader.js.map +1 -0
- package/dist/testing/testCommands.js +35 -303
- package/dist/testing/testCommands.js.map +1 -0
- package/dist/testing/testRegistry.js +233 -0
- package/dist/testing/testRegistry.js.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/buildContextualPrompt.js +26 -75
- package/dist/utils/buildContextualPrompt.js.map +1 -0
- package/dist/utils/changeLogPrompt.js +1 -0
- package/dist/utils/changeLogPrompt.js.map +1 -0
- package/dist/utils/checkModel.js +17 -92
- package/dist/utils/checkModel.js.map +1 -0
- package/dist/utils/commentMap.js +1 -0
- package/dist/utils/commentMap.js.map +1 -0
- package/dist/utils/compileSearchQuery.js +23 -9
- package/dist/utils/compileSearchQuery.js.map +1 -0
- package/dist/utils/consolePresentation.js +208 -0
- package/dist/utils/consolePresentation.js.map +1 -0
- package/dist/utils/contentUtils.js +17 -2
- package/dist/utils/contentUtils.js.map +1 -0
- package/dist/utils/debugContext.js +1 -0
- package/dist/utils/debugContext.js.map +1 -0
- package/dist/utils/dialogState.js +201 -0
- package/dist/utils/dialogState.js.map +1 -0
- package/dist/utils/editor.js +1 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/executionEvidence.js +50 -0
- package/dist/utils/executionEvidence.js.map +1 -0
- package/dist/utils/extractFileReferences.js +140 -6
- package/dist/utils/extractFileReferences.js.map +1 -0
- package/dist/utils/fileEvidenceCache.js +50 -0
- package/dist/utils/fileEvidenceCache.js.map +1 -0
- package/dist/utils/fileTree.js +1 -0
- package/dist/utils/fileTree.js.map +1 -0
- package/dist/utils/loadRelevantFolderCapsules.js +35 -5
- package/dist/utils/loadRelevantFolderCapsules.js.map +1 -0
- package/dist/utils/log.js +10 -1
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/normalizeData.js +1 -0
- package/dist/utils/normalizeData.js.map +1 -0
- package/dist/utils/ollamaModelStatus.js +28 -0
- package/dist/utils/ollamaModelStatus.js.map +1 -0
- package/dist/utils/ollamaService.js +294 -0
- package/dist/utils/ollamaService.js.map +1 -0
- package/dist/utils/outputFormatter.js +1 -0
- package/dist/utils/outputFormatter.js.map +1 -0
- package/dist/utils/parseTaggedContent.js +1 -0
- package/dist/utils/parseTaggedContent.js.map +1 -0
- package/dist/utils/planActions.js +27 -46
- package/dist/utils/planActions.js.map +1 -0
- package/dist/utils/promptBuilderHelper.js +1 -0
- package/dist/utils/promptBuilderHelper.js.map +1 -0
- package/dist/utils/promptLogHelper.js +29 -13
- package/dist/utils/promptLogHelper.js.map +1 -0
- package/dist/utils/queryAnchors.js +71 -0
- package/dist/utils/queryAnchors.js.map +1 -0
- package/dist/utils/repoIdentity.js +82 -0
- package/dist/utils/repoIdentity.js.map +1 -0
- package/dist/utils/repoKey.js +1 -0
- package/dist/utils/repoKey.js.map +1 -0
- package/dist/utils/resolveTargetsToFiles.js +1 -0
- package/dist/utils/resolveTargetsToFiles.js.map +1 -0
- package/dist/utils/resumeContext.js +219 -0
- package/dist/utils/resumeContext.js.map +1 -0
- package/dist/utils/resumeState.js +310 -0
- package/dist/utils/resumeState.js.map +1 -0
- package/dist/utils/rollingPlan.js +118 -0
- package/dist/utils/rollingPlan.js.map +1 -0
- package/dist/utils/runQueryWithDaemonControl.js +11 -3
- package/dist/utils/runQueryWithDaemonControl.js.map +1 -0
- package/dist/utils/runtimeLogger.js +252 -0
- package/dist/utils/runtimeLogger.js.map +1 -0
- package/dist/utils/sanitizeQuery.js +1 -0
- package/dist/utils/sanitizeQuery.js.map +1 -0
- package/dist/utils/sharedUtils.js +1 -0
- package/dist/utils/sharedUtils.js.map +1 -0
- package/dist/utils/sleep.js +1 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/splitCodeIntoChunk.js +1 -0
- package/dist/utils/splitCodeIntoChunk.js.map +1 -0
- package/dist/utils/time.js +66 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/verifyFocusPreference.js +107 -0
- package/dist/utils/verifyFocusPreference.js.map +1 -0
- package/dist/utils/vscode.js +1 -0
- package/dist/utils/vscode.js.map +1 -0
- package/dist/workflow/workflowResolver.js +1 -0
- package/dist/workflow/workflowResolver.js.map +1 -0
- package/dist/workflow/workflowRunner.js +1 -0
- package/dist/workflow/workflowRunner.js.map +1 -0
- package/package.json +3 -3
- package/dist/agents/MainAgent.js +0 -1886
- package/dist/agents/contextReviewStep.js +0 -101
- package/dist/agents/finalPlanGenStep.js +0 -107
- package/dist/agents/structuralAnalysisStep.js +0 -46
- package/dist/agents/validationAnalysisStep.js +0 -87
- package/dist/pipeline/modules/chunkManagerModule.js +0 -24
- package/dist/pipeline/modules/cleanGeneratedTestsModule.js +0 -33
- package/dist/pipeline/modules/fileReaderModule.js +0 -72
- package/dist/pipeline/modules/gatherInfoModule.js +0 -181
- package/dist/pipeline/modules/generateTestsModule.js +0 -68
- package/dist/pipeline/modules/preserveCodeModule.js +0 -195
- package/dist/pipeline/modules/refactorModule.js +0 -40
- package/dist/pipeline/modules/repairTestsModule.js +0 -48
- package/dist/pipeline/modules/runTestsModule.js +0 -37
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runFolderCapsuleBatch.js","sourceRoot":"","sources":["../../src/daemon/runFolderCapsuleBatch.ts"],"names":[],"mappings":"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","sourcesContent":["import fg from 'fast-glob';\nimport path from 'path';\nimport { getDbForRepo } from '../db/client.js';\nimport { log } from '../utils/log.js';\nimport { generate } from '../lib/generate.js';\nimport { cleanupModule } from '../pipeline/modules/cleanupModule.js';\nimport type { FolderCapsule } from '../types.js';\nimport { IGNORED_FOLDER_GLOBS } from '../fileRules/ignoredPaths.js';\n\nexport async function runFolderCapsuleBatch(maxFolders = 20): Promise<boolean> {\n const db = getDbForRepo();\n\n log('📦 Starting folder capsule batch...');\n\n // --------------------------------------------------\n // Stop if we already have enough capsules\n // --------------------------------------------------\n const existing = db.prepare(`SELECT COUNT(*) as c FROM folder_capsules`).get() as { c: number };\n log(`📦 Existing folder capsules: ${existing.c}`);\n if (existing.c >= maxFolders) {\n log(`📦 Folder capsule batch: cap reached (${existing.c})`);\n return false;\n }\n\n // --------------------------------------------------\n // Scan folders with fast-glob\n // --------------------------------------------------\n log('🔍 Scanning folders...');\n const folderPathsRaw = await fg('**/', {\n cwd: process.cwd(),\n onlyDirectories: true,\n ignore: IGNORED_FOLDER_GLOBS,\n dot: false,\n absolute: true,\n });\n\n const folderPaths = folderPathsRaw.map(p => path.normalize(p).replace(/\\\\/g, '/'));\n log(`📂 Found ${folderPaths.length} folders`);\n\n if (!folderPaths.length) {\n log('📦 No folders found after filtering');\n return false;\n }\n\n // --------------------------------------------------\n // Collect uncapsuled folders from DB\n // --------------------------------------------------\n log('📦 Collecting uncapsuled folders from DB...');\n const uncapsuledFoldersRaw = db.prepare(`\n SELECT folder, COUNT(*) AS fileCount\n FROM (\n SELECT substr(path, 1, length(path) - length(filename) - 1) AS folder,\n filename, type\n FROM files\n WHERE processing_status != 'skipped'\n )\n LEFT JOIN folder_capsules fc ON fc.path = folder\n WHERE fc.path IS NULL\n GROUP BY folder\n `).all() as Array<{ folder: string; fileCount: number }>;\n\n const uncapsuledFolders = uncapsuledFoldersRaw\n .map(f => ({ ...f, folder: path.normalize(path.resolve(f.folder)).replace(/\\\\/g, '/') }))\n .filter(f => folderPaths.includes(f.folder));\n\n log(`📦 ${uncapsuledFolders.length} uncapsuled folders match actual paths`);\n\n if (!uncapsuledFolders.length) {\n log('📦 No uncapsuled folders found');\n return false;\n }\n\n // --------------------------------------------------\n // Heuristic folder scoring\n // --------------------------------------------------\n function scoreFolder(folder: string, fileCount: number): number {\n let score = 0;\n const depth = folder.split('/').length;\n const p = folder.toLowerCase();\n\n if (fileCount > 5) score += 2;\n if (fileCount > 15) score += 2;\n if (depth <= 6) score += 2;\n if (/src|modules|pipeline|agents|services|commands|lib/.test(p)) score += 3;\n if (/css|sql|html|assets/.test(p)) score -= 3;\n\n return score;\n }\n\n const ranked = uncapsuledFolders\n .map(f => ({ ...f, score: scoreFolder(f.folder, f.fileCount) }))\n .sort((a, b) => b.score - a.score)\n .slice(0, maxFolders);\n\n log(`📦 Top ${ranked.length} folders selected for processing`);\n\n // --------------------------------------------------\n // Process each top folder with try/catch\n // --------------------------------------------------\n for (const target of ranked) {\n const folderPath = target.folder;\n\n if (!folderPath) {\n log(`⚠️ Skipping folder because folderPath is undefined`);\n continue;\n }\n\n try {\n log(`📦 Building folder capsule: ${folderPath} (score=${target.score})`);\n\n // --------------------------------------------------\n // Load files in folder from DB (inline folderPath)\n // --------------------------------------------------\n const folderPathSQL = folderPath.replace(/'/g, \"''\"); // escape single quotes\n const files = db.prepare(`\n SELECT path, filename, type\n FROM files\n WHERE path LIKE '${folderPathSQL}/%' AND processing_status != 'skipped'\n `).all() as Array<{ path: string; filename: string; type: string | null }>;\n\n log(`📄 ${files.length} files found in folder`);\n\n if (!files.length) {\n log('⚠️ Folder empty, skipping');\n continue;\n }\n\n // --------------------------------------------------\n // Compute file-level scores\n // --------------------------------------------------\n const fileScores = files.map(f => {\n const heuristicName = /index|main|cli|app|server|config/i.test(f.filename) ? 5 : 0;\n\n const basename = path.basename(f.path).replace(/'/g, \"''\");\n const incoming = db.prepare(`\n SELECT COUNT(*) AS c\n FROM files\n WHERE path LIKE '${folderPathSQL}/%' AND processing_status != 'skipped' AND content_text LIKE '%${basename}%'\n `).get() as { c: number };\n const incomingScore = (incoming?.c || 0) * 2;\n\n const row = db.prepare(`SELECT content_text FROM files_fts WHERE path = '${f.path.replace(/'/g, \"''\")}'`).get() as { contentText?: string };\n const code = row?.contentText || '';\n const outgoingCount = (code.match(/from\\s+['\"].+['\"]/g)?.length || 0) + (code.match(/require\\(['\"].+['\"]\\)/g)?.length || 0);\n const sizeScore = Math.min(code.length / 2000, 3);\n\n const totalScore = heuristicName + incomingScore + outgoingCount + sizeScore;\n log(`📄 File score: ${f.filename} -> ${totalScore}`);\n\n return { ...f, score: totalScore };\n });\n\n const representativeFiles = fileScores.sort((a, b) => b.score - a.score).slice(0, 2);\n log(`📌 Representative files: ${representativeFiles.map(f => f.filename).join(', ')}`);\n\n const candidateFiles = representativeFiles.map(f => {\n const row = db.prepare(`SELECT content_text FROM files_fts WHERE path = '${f.path.replace(/'/g, \"''\")}'`).get() as { contentText?: string };\n return { path: f.path, code: row?.contentText?.slice(0, 2000) || '' };\n });\n\n // --------------------------------------------------\n // Ask LLM to generate folder summary\n // --------------------------------------------------\n const prompt = `\nYou are analyzing a source code folder.\n\nFolder path:\n${folderPath}\n\nCandidate files with code snippets:\n${JSON.stringify(candidateFiles, null, 2)}\n\nTask:\n- Identify up to TWO files that best represent the purpose of this folder.\n- Explain the folder's responsibility in ONE concise sentence.\n- Return ONLY valid JSON.\n\nExpected JSON shape:\n{\n \"summary\": \"one sentence description\",\n \"files\": [\n { \"path\": \"absolute/file/path\", \"summary\": \"optional short note\" }\n ]\n}\n`.trim();\n\n let folderSummary = '';\n let keyFiles: Array<{ path: string; reason: string }> = [];\n\n try {\n log('🤖 Asking LLM for folder summary...');\n const response = await generate({ content: prompt, query: '' });\n const cleaned = await cleanupModule.run({ query: '', content: response.data });\n const data = typeof cleaned.data === 'string' ? JSON.parse(cleaned.data) : cleaned.data;\n\n if (data && typeof data === 'object') {\n if (typeof data.summary === 'string') folderSummary = data.summary;\n if (Array.isArray(data.files)) {\n keyFiles = data.files\n .filter((f: any) => typeof f?.path === 'string')\n .slice(0, 2)\n .map((f: any) => ({ path: f.path, reason: f.summary || f.reason || 'representative file' }));\n }\n }\n\n log(`📌 Folder summary: ${folderSummary}`);\n } catch (err: unknown) {\n if (err instanceof Error) {\n log(`🔥 Failed processing folder ${folderPath}: ${err.message}\\n${err.stack}`);\n } else {\n log(`🔥 Failed processing folder ${folderPath}:`, err);\n }\n }\n\n // --------------------------------------------------\n // Compute stats by file type\n // --------------------------------------------------\n const byType: Record<string, number> = {};\n for (const f of files) {\n const ext = f.type || path.extname(f.filename || '').replace('.', '') || 'unknown';\n byType[ext] = (byType[ext] || 0) + 1;\n }\n\n // --------------------------------------------------\n // Folder-level dependencies\n // --------------------------------------------------\n const importsFrom = new Set<string>();\n for (const f of files) {\n const dir = path.dirname(f.path).replace(/\\\\/g, '/');\n if (dir !== folderPath) importsFrom.add(dir);\n }\n\n // --------------------------------------------------\n // Build capsule\n // --------------------------------------------------\n const capsule: FolderCapsule & { summary?: string } = {\n path: folderPath,\n depth: folderPath.split('/').length,\n stats: { fileCount: files.length, byType },\n roles: [],\n concerns: [],\n keyFiles,\n dependencies: { importsFrom: Array.from(importsFrom), usedBy: [] },\n summary: folderSummary,\n confidence: Math.min(0.9, 0.4 + target.score * 0.1),\n };\n\n // --------------------------------------------------\n // Persist capsule safely using parameterized queries\n // --------------------------------------------------\n const now = new Date().toISOString();\n\n // Insert folder capsule\n db.prepare(`\n INSERT INTO folder_capsules (\n path, depth, capsule_json, confidence, last_generated, source_file_count\n ) VALUES (?, ?, ?, ?, ?, ?)\n`).run(\n capsule.path,\n capsule.depth,\n JSON.stringify(capsule),\n capsule.confidence,\n now,\n files.length\n );\n\n // Update file processing status\n db.prepare(`\n UPDATE files\n SET processing_status = 'capsuled'\n WHERE path LIKE ?\n`).run(`${folderPath}/%`);\n\n log(`✅ Folder capsule written: ${folderPath}`);\n\n\n } catch (err: unknown) {\n if (err instanceof Error) {\n log(`🔥 Failed processing folder ${folderPath}: ${err.message}\\n${err.stack}`);\n } else {\n log(`🔥 Failed processing folder ${folderPath}:`, err);\n }\n }\n }\n\n log('📦 Folder capsule batch complete.');\n return true;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runIndexingBatch.js","sourceRoot":"","sources":["../../src/daemon/runIndexingBatch.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\r\nimport path from 'path';\r\nimport lockfile from 'proper-lockfile';\r\n\r\nimport { log } from '../utils/log.js';\r\nimport { getDbForRepo, getDbPathForRepo } from '../db/client.js';\r\nimport { sleep } from '../utils/sleep.js';\r\nimport {\r\n selectUnprocessedFiles,\r\n markFileAsSkippedByPath,\r\n countUnprocessedFiles,\r\n upsertFileTemplate,\r\n upsertFileFtsTemplate,\r\n markFileAsIndexed\r\n} from '../db/sqlTemplates.js';\r\n\r\n// --------------------------------------------------\r\n// DB LOCK\r\n// --------------------------------------------------\r\nasync function lockDbWithRetry(retries = 3, delayMs = 100) {\r\n for (let i = 0; i < retries; i++) {\r\n try {\r\n return await lockfile.lock(getDbPathForRepo());\r\n } catch (err) {\r\n if (i < retries - 1) {\r\n log(`⏳ DB lock busy, retrying... (${i + 1})`);\r\n await sleep(delayMs);\r\n } else {\r\n log('❌ Failed to acquire DB lock after retries:', err);\r\n throw err;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --------------------------------------------------\r\n// SINGLE FILE INDEXER (daemon-side)\r\n// --------------------------------------------------\r\nexport function indexFile(filePath: string, summary: string | null, type: string) {\r\n const stats = fs.statSync(filePath);\r\n const lastModified = stats.mtime.toISOString();\r\n const indexedAt = new Date().toISOString();\r\n\r\n const normalizedPath = path.normalize(filePath).replace(/\\\\/g, '/');\r\n const filename = path.basename(normalizedPath);\r\n\r\n // ----------------------------------------------\r\n // Extract text content (guarded)\r\n // ----------------------------------------------\r\n let contentText = '';\r\n\r\n try {\r\n if (stats.size <= 2_000_000) {\r\n const buffer = fs.readFileSync(filePath);\r\n\r\n const nonTextRatio =\r\n buffer\r\n .slice(0, 1000)\r\n .filter(b => b < 9 || (b > 13 && b < 32))\r\n .length / Math.min(buffer.length, 1000);\r\n\r\n if (nonTextRatio <= 0.3) {\r\n contentText = buffer.toString('utf-8');\r\n } else {\r\n log(`⚠️ Binary-like content skipped: ${normalizedPath}`);\r\n }\r\n } else {\r\n log(`⚠️ Large file content skipped: ${normalizedPath}`);\r\n }\r\n } catch (err) {\r\n log(`⚠️ Failed reading content: ${normalizedPath}`, err);\r\n }\r\n\r\n const db = getDbForRepo();\r\n\r\n // ----------------------------------------------\r\n // Metadata upsert\r\n // ----------------------------------------------\r\n try {\r\n db.prepare(upsertFileTemplate).run({\r\n path: normalizedPath,\r\n filename,\r\n summary,\r\n type,\r\n lastModified,\r\n indexedAt,\r\n });\r\n } catch (err) {\r\n log(`⚠️ Failed metadata upsert for ${normalizedPath}:`, err);\r\n }\r\n\r\n // ----------------------------------------------\r\n // FTS upsert\r\n // ----------------------------------------------\r\n db.prepare(upsertFileFtsTemplate).run({\r\n path: normalizedPath,\r\n filename,\r\n summary,\r\n contentText,\r\n });\r\n\r\n // ----------------------------------------------\r\n // Mark as indexed\r\n // ----------------------------------------------\r\n db.prepare(markFileAsIndexed).run({ path: normalizedPath });\r\n}\r\n\r\n// --------------------------------------------------\r\n// FTS REBUILD\r\n// --------------------------------------------------\r\nfunction rebuildFts() {\r\n const db = getDbForRepo();\r\n log('🔍 Rebuilding FTS index...');\r\n db.exec(`INSERT INTO files_fts(files_fts) VALUES('rebuild');`);\r\n}\r\n\r\n// --------------------------------------------------\r\n// INDEXING BATCH\r\n// --------------------------------------------------\r\nexport async function runIndexingBatch(): Promise<boolean> {\r\n log('⚡ Starting indexing batch...');\r\n\r\n const db = getDbForRepo();\r\n const BATCH_SIZE = 25; // adjust as needed\r\n const rows = db.prepare(selectUnprocessedFiles).all(BATCH_SIZE) as Array<{ path: string }>;\r\n\r\n if (rows.length === 0) {\r\n log('✅ No files left to index.');\r\n return false;\r\n }\r\n\r\n const release = await lockDbWithRetry();\r\n let didIndexWork = false;\r\n\r\n log('Release: ', release);\r\n\r\n try {\r\n for (const row of rows) {\r\n log(`📄 Indexing: ${row.path}`);\r\n\r\n try {\r\n indexFile(row.path, null, 'auto');\r\n didIndexWork = true;\r\n } catch (err) {\r\n log(`⚠️ Failed indexing ${row.path}`, err);\r\n db.prepare(markFileAsSkippedByPath).run({ path: row.path });\r\n }\r\n }\r\n\r\n try {\r\n rebuildFts();\r\n } catch (err) {\r\n log('⚠️ Failed FTS rebuild:', err);\r\n }\r\n\r\n const remaining = db.prepare(countUnprocessedFiles).get() as { count: number };\r\n log(`📦 Remaining unindexed files: ${remaining.count}`);\r\n\r\n return didIndexWork;\r\n } finally {\r\n if (release) {\r\n await release();\r\n log('🔓 DB lock released');\r\n } else {\r\n log('⚠️ DB lock was not acquired, nothing to release');\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Runs the legacy KG batch over queued files outside the default live runtime.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - older KG enrichment and extractor code still lives in the repo for possible later reuse
|
|
6
|
+
* - the default indexing path no longer calls this batch
|
|
7
|
+
* - new-agent grounding should not depend on KG output
|
|
8
|
+
*/
|
|
2
9
|
import fs from 'fs/promises';
|
|
3
10
|
import fsSync from 'fs';
|
|
4
11
|
import path from 'path';
|
|
@@ -102,3 +109,4 @@ export async function runKgBatch() {
|
|
|
102
109
|
}
|
|
103
110
|
}
|
|
104
111
|
}
|
|
112
|
+
//# sourceMappingURL=runKgBatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runKgBatch.js","sourceRoot":"","sources":["../../src/daemon/runKgBatch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runs the legacy KG batch over queued files outside the default live runtime.\n *\n * Why this file exists:\n * - older KG enrichment and extractor code still lives in the repo for possible later reuse\n * - the default indexing path no longer calls this batch\n * - new-agent grounding should not depend on KG output\n */\n\nimport fs from 'fs/promises';\nimport fsSync from 'fs';\nimport path from 'path';\n\nimport {\n insertGraphTagTemplate,\n selectGraphTagIdTemplate,\n insertGraphEntityTagTemplate,\n} from '../db/sqlTemplates.js';\n\nimport { getDbForRepo } from '../db/client.js';\nimport { log } from '../utils/log.js';\nimport { kgModule } from '../pipeline/modules/kgModule.js';\nimport { KnowledgeGraph, KnowledgeGraphInput } from '../types.js';\nimport { KG_IGNORED_EXTENSIONS } from '../fileRules/ignoredExtensions.js';\nimport * as sqlTemplates from '../db/sqlTemplates.js'; // import the template\nimport { indexCodeForFile } from '../db/functionIndex.js';\n\nconst MAX_KG_FILES_PER_BATCH = 3;\n\nexport async function runKgBatch(): Promise<void> {\n const db = getDbForRepo();\n\n const rows = db.prepare(`\n SELECT id, path, summary\n FROM files\n WHERE functions_extracted_at IS NULL\n AND processing_status NOT IN ('skipped', 'failed', 'kg_done')\n LIMIT ?\n `).all(MAX_KG_FILES_PER_BATCH) as Array<{ id: number; path: string; summary: string | null }>;\n\n if (rows.length === 0) {\n log('🧠 KG batch: no pending files');\n return;\n }\n\n for (const row of rows) {\n log(`\\n🔗 KG: Processing ${row.path}`);\n\n if (!fsSync.existsSync(row.path)) {\n log('⚠️ KG skipped: file missing');\n db.prepare(sqlTemplates.markFileAsKgDone).run({ path: row.path });\n continue;\n }\n\n // --- CODE EXTRACTION SECTION ---\n log('\\n');\n log('📄 Code Extraction');\n log('--------------------------------------------------------------------');\n\n try {\n const success = await indexCodeForFile(row.path, row.id);\n if (success) {\n log('✅ Indexed code');\n } else {\n log('⚡ No code elements extracted or unsupported file type');\n }\n } catch (err) {\n log(`❌ Code extraction failed for ${row.path}:`, err);\n }\n\n // --- KNOWLEDGE GRAPH SECTION ---\n log('\\n');\n log('🔗 Knowledge Graph');\n log('--------------------------------------------------------------------');\n\n const ext = path.extname(row.path).toLowerCase();\n if (KG_IGNORED_EXTENSIONS.includes(ext)) {\n log(`⚠️ KG skipped (ignored extension): ${ext}`);\n db.prepare(sqlTemplates.markFileAsKgDone).run({ path: row.path });\n\n continue;\n }\n\n try {\n const content = await fs.readFile(row.path, 'utf-8');\n\n const kgInput: KnowledgeGraphInput = {\n fileId: row.id,\n filepath: row.path,\n summary: row.summary || undefined,\n };\n\n const kgResult: KnowledgeGraph = await kgModule.run(kgInput, content);\n\n log(`✅ KG built: ${kgResult.entities.length} entities, ${kgResult.edges.length} edges`);\n\n if (kgResult.entities.length > 0) {\n const insertTag = db.prepare(insertGraphTagTemplate);\n const getTagId = db.prepare(selectGraphTagIdTemplate);\n const insertEntityTag = db.prepare(insertGraphEntityTagTemplate);\n\n for (const entity of kgResult.entities) {\n if (!entity.type || !Array.isArray(entity.tags)) continue;\n\n for (const tag of entity.tags) {\n if (!tag) continue;\n\n try {\n insertTag.run({ name: tag });\n const tagRow = getTagId.get({ name: tag }) as { id: number } | undefined;\n if (!tagRow) continue;\n\n insertEntityTag.run({\n entity_type: entity.type,\n entity_unique_id: `${entity.name}@${row.path}`,\n tag_id: tagRow.id,\n });\n } catch {\n // ignore per-entity failures\n }\n }\n }\n }\n\n // ✅ Mark KG as done for this file\n db.prepare(sqlTemplates.markFileAsKgDone).run({ path: row.path });\n\n\n } catch (err) {\n log(`❌ KG failed for ${row.path}:`, err);\n\n // Still mark as done to avoid infinite retries\n db.prepare(sqlTemplates.markFileAsKgDone).run({ path: row.path });\n }\n }\n}\n"]}
|
package/dist/db/backup.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/db/backup.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5C,iCAAiC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,SAAS,EAAE,CAAC,CAAC;QAElE,iBAAiB;QACjB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["// src/db/backup.ts\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport os from 'os';\r\n\r\nexport async function backupScaiFolder(): Promise<boolean> {\r\n try {\r\n const homeDir = os.homedir();\r\n const scaiDir = path.join(homeDir, '.scai');\r\n\r\n // Ensure the .scai folder exists\r\n if (!fs.existsSync(scaiDir)) {\r\n console.error(`⚠️ No .scai folder found at ${scaiDir}`);\r\n return false;\r\n }\r\n\r\n // Backup path: ~/.scai_backup_<timestamp>\r\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\r\n const backupDir = path.join(homeDir, `.scai_backup_${timestamp}`);\r\n\r\n // Recursive copy\r\n copyRecursiveSync(scaiDir, backupDir);\r\n\r\n return true;\r\n } catch (err) {\r\n console.error(`⚠️ Failed to back up .scai folder:`, err);\r\n return false;\r\n }\r\n}\r\n\r\nfunction copyRecursiveSync(src: string, dest: string) {\r\n const stats = fs.statSync(src);\r\n\r\n if (stats.isDirectory()) {\r\n fs.mkdirSync(dest, { recursive: true });\r\n const entries = fs.readdirSync(src);\r\n for (const entry of entries) {\r\n const srcPath = path.join(src, entry);\r\n const destPath = path.join(dest, entry);\r\n copyRecursiveSync(srcPath, destPath);\r\n }\r\n } else {\r\n fs.copyFileSync(src, dest);\r\n }\r\n}\r\n"]}
|
package/dist/db/client.js
CHANGED
|
@@ -1,11 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves repo-scoped SQLite paths and connections for the CLI runtime.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - active-repo commands still need one simple DB entrypoint
|
|
6
|
+
* - read-only helpers sometimes need a repo DB path without mutating state
|
|
7
|
+
* - DB connection setup should stay consistent across commands
|
|
8
|
+
*/
|
|
1
9
|
import fs from 'fs';
|
|
2
10
|
import path from 'path';
|
|
3
11
|
import { SCAI_HOME } from '../constants.js';
|
|
4
12
|
import { readConfig } from '../config.js';
|
|
5
13
|
import Database from 'better-sqlite3';
|
|
6
14
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
15
|
+
* Builds the SQLite path for one registered repo key.
|
|
16
|
+
* Example: "repo-a" -> "~/.scai/repos/repo-a/db.sqlite".
|
|
17
|
+
*/
|
|
18
|
+
export function getDbPathForRepoKey(repoKey) {
|
|
19
|
+
return path.join(SCAI_HOME, 'repos', repoKey, 'db.sqlite');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns the SQLite path for the current active repo.
|
|
9
23
|
*/
|
|
10
24
|
export function getDbPathForRepo() {
|
|
11
25
|
const cfg = readConfig();
|
|
@@ -13,7 +27,7 @@ export function getDbPathForRepo() {
|
|
|
13
27
|
if (!repoKey) {
|
|
14
28
|
throw new Error('No active repo set. Please set an index directory first.');
|
|
15
29
|
}
|
|
16
|
-
return
|
|
30
|
+
return getDbPathForRepoKey(repoKey);
|
|
17
31
|
}
|
|
18
32
|
export function getDbForRepo() {
|
|
19
33
|
const dbPath = getDbPathForRepo();
|
|
@@ -22,3 +36,4 @@ export function getDbForRepo() {
|
|
|
22
36
|
db.pragma('journal_mode = WAL');
|
|
23
37
|
return db;
|
|
24
38
|
}
|
|
39
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC;IAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["/**\n * Resolves repo-scoped SQLite paths and connections for the CLI runtime.\n *\n * Why this file exists:\n * - active-repo commands still need one simple DB entrypoint\n * - read-only helpers sometimes need a repo DB path without mutating state\n * - DB connection setup should stay consistent across commands\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { SCAI_HOME } from '../constants.js';\nimport { readConfig } from '../config.js';\nimport Database from 'better-sqlite3';\nimport type { Database as DatabaseType } from 'better-sqlite3';\n\n/**\n * Builds the SQLite path for one registered repo key.\n * Example: \"repo-a\" -> \"~/.scai/repos/repo-a/db.sqlite\".\n */\nexport function getDbPathForRepoKey(repoKey: string): string {\n return path.join(SCAI_HOME, 'repos', repoKey, 'db.sqlite');\n}\n\n/**\n * Returns the SQLite path for the current active repo.\n */\nexport function getDbPathForRepo(): string {\n const cfg = readConfig();\n const repoKey = cfg.activeRepo;\n\r\n if (!repoKey) {\r\n throw new Error('No active repo set. Please set an index directory first.');\r\n }\r\n\r\n return getDbPathForRepoKey(repoKey);\n}\n\r\nexport function getDbForRepo(): DatabaseType {\r\n const dbPath = getDbPathForRepo();\r\n fs.mkdirSync(path.dirname(dbPath), { recursive: true });\r\n\r\n const db = new Database(dbPath);\r\n db.pragma('journal_mode = WAL');\r\n return db;\r\n}\r\n\r\n"]}
|
package/dist/db/fileIndex.js
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Owns indexed file discovery and DB-backed search primitives for the CLI.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - FTS-backed search primitives need one place that talks to SQLite
|
|
6
|
+
* - search orchestration should call small helpers here instead of mixing DB policy everywhere
|
|
7
|
+
* - public reindex setup now lives in `setup/reindexOwner.ts`, so this file stays at the primitive layer
|
|
8
|
+
*/
|
|
3
9
|
import path from 'path';
|
|
4
|
-
import
|
|
5
|
-
import { initSchema } from '../db/schema.js';
|
|
6
|
-
import { getDbForRepo, getDbPathForRepo } from '../db/client.js';
|
|
7
|
-
import { upsertFileTemplate } from '../db/sqlTemplates.js';
|
|
8
|
-
import { detectFileType } from '../fileRules/detectFileType.js';
|
|
9
|
-
import { classifyFile } from '../fileRules/classifyFile.js';
|
|
10
|
-
import { IGNORED_FOLDER_GLOBS } from '../fileRules/ignoredPaths.js';
|
|
11
|
-
import { Config } from '../config.js';
|
|
12
|
-
import { log } from '../utils/log.js';
|
|
13
|
-
import { startDaemon } from '../commands/DaemonCmd.js';
|
|
10
|
+
import { getDbForRepo } from '../db/client.js';
|
|
14
11
|
import * as sqlTemplates from '../db/sqlTemplates.js';
|
|
15
12
|
import { RELATED_FILES_LIMIT } from '../constants.js';
|
|
16
13
|
import { generate } from '../lib/generate.js';
|
|
14
|
+
import { log } from '../utils/log.js';
|
|
17
15
|
import { logInputOutput } from '../utils/promptLogHelper.js';
|
|
18
16
|
import { compileSearchQuery } from '../utils/compileSearchQuery.js';
|
|
19
17
|
import { extractTaggedContent } from '../utils/parseTaggedContent.js';
|
|
18
|
+
import { STOP_WORDS } from "../fileRules/stopWords.js";
|
|
20
19
|
const QUERY_OPERATOR_TOKENS = new Set(["or", "and", "not", "near"]);
|
|
21
20
|
const GENERIC_FTS_TERMS = new Set([
|
|
22
21
|
"file",
|
|
@@ -33,76 +32,8 @@ const GENERIC_FTS_TERMS = new Set([
|
|
|
33
32
|
]);
|
|
34
33
|
const MAX_PRIMARY_TERMS = 12;
|
|
35
34
|
const MAX_FALLBACK_TERMS = 10;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/* -------------------------------------------------- */
|
|
39
|
-
async function lockDb() {
|
|
40
|
-
try {
|
|
41
|
-
return await lockfile.lock(getDbPathForRepo());
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
log('❌ Failed to acquire DB lock: ' + err);
|
|
45
|
-
throw err;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/* -------------------------------------------------- */
|
|
49
|
-
/* INDEX COMMAND */
|
|
50
|
-
/* -------------------------------------------------- */
|
|
51
|
-
export async function runIndexCommand() {
|
|
52
|
-
try {
|
|
53
|
-
initSchema();
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
console.error('❌ Failed to initialize schema:', err);
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
|
-
const indexDir = Config.getIndexDir() || process.cwd();
|
|
60
|
-
Config.setIndexDir(indexDir);
|
|
61
|
-
log(`📂 Scanning files in: ${indexDir}`);
|
|
62
|
-
const files = await fg('**/*.*', {
|
|
63
|
-
cwd: indexDir,
|
|
64
|
-
ignore: IGNORED_FOLDER_GLOBS,
|
|
65
|
-
absolute: true,
|
|
66
|
-
});
|
|
67
|
-
const db = getDbForRepo();
|
|
68
|
-
const release = await lockDb();
|
|
69
|
-
const countByExt = {};
|
|
70
|
-
let count = 0;
|
|
71
|
-
try {
|
|
72
|
-
for (const file of files) {
|
|
73
|
-
const classification = classifyFile(file);
|
|
74
|
-
if (classification !== 'valid') {
|
|
75
|
-
log(`⏭️ Skipping (${classification}): ${file}`);
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
try {
|
|
79
|
-
const type = detectFileType(file);
|
|
80
|
-
const normalizedPath = path.normalize(file).replace(/\\/g, '/');
|
|
81
|
-
const filename = path.basename(normalizedPath);
|
|
82
|
-
db.prepare(upsertFileTemplate).run({
|
|
83
|
-
path: normalizedPath,
|
|
84
|
-
filename,
|
|
85
|
-
summary: null,
|
|
86
|
-
type,
|
|
87
|
-
lastModified: null,
|
|
88
|
-
indexedAt: null,
|
|
89
|
-
});
|
|
90
|
-
const ext = path.extname(file);
|
|
91
|
-
countByExt[ext] = (countByExt[ext] || 0) + 1;
|
|
92
|
-
count++;
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
log(`⚠️ Skipped in indexCmd ${file}: ${String(err)}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
await release();
|
|
101
|
-
}
|
|
102
|
-
log('📊 Discovered files by extension:', JSON.stringify(countByExt, null, 2));
|
|
103
|
-
log(`✅ Done. Enqueued ${count} files for indexing.`);
|
|
104
|
-
startDaemon();
|
|
105
|
-
}
|
|
35
|
+
const MIN_PATTERN_SYMBOL_LEN = 4;
|
|
36
|
+
const MAX_PATTERN_SYMBOL_ROWS = Math.max(8, Math.floor(RELATED_FILES_LIMIT / 2));
|
|
106
37
|
/* -------------------------------------------------- */
|
|
107
38
|
/* QUERY API */
|
|
108
39
|
/* -------------------------------------------------- */
|
|
@@ -118,61 +49,8 @@ export function queryFiles(safeQuery, limit = 10) {
|
|
|
118
49
|
export async function semanticSearchFiles(originalQuery, topK = 5, intent = {}) {
|
|
119
50
|
const db = getDbForRepo();
|
|
120
51
|
const summarizeRows = (rows) => rows.map((r) => `${r.filename} | bm25Score=${r.bm25Score}`);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
: [];
|
|
124
|
-
const targetSymbols = Array.isArray(intent.targetSymbols)
|
|
125
|
-
? dedupeNormalizedStrings(intent.targetSymbols)
|
|
126
|
-
: [];
|
|
127
|
-
// 1) Target-first path.
|
|
128
|
-
// Example: targetFiles=["semanticAnalysisModule.ts","typescript.ts"] -> return only those
|
|
129
|
-
// resolved rows and skip broad FTS expansion.
|
|
130
|
-
if (targetFiles.length > 0 || targetSymbols.length > 0) {
|
|
131
|
-
// Deterministic resolution order:
|
|
132
|
-
// 1) files by explicit path/name 2) files by exact symbol ownership.
|
|
133
|
-
// Example: targetFiles=["fileIndex.ts"], targetSymbols=["semanticSearchFiles"].
|
|
134
|
-
const { resolvedRows: fileRows, unresolvedTargets } = resolveTargetRows(db, targetFiles);
|
|
135
|
-
const exactSymbolRows = resolveSymbolRows(db, targetSymbols);
|
|
136
|
-
const patternSymbolRows = targetSymbols.length > 0 && exactSymbolRows.length === 0
|
|
137
|
-
? resolveSymbolRowsByPattern(db, targetSymbols)
|
|
138
|
-
: [];
|
|
139
|
-
const symbolRows = mergeRows(exactSymbolRows, patternSymbolRows);
|
|
140
|
-
const resolvedRows = mergeRows(fileRows, symbolRows);
|
|
141
|
-
const queryExpansionTerms = buildQueryExpansionTerms(originalQuery, [
|
|
142
|
-
...targetFiles.map((target) => `"${path.basename(target)}"`),
|
|
143
|
-
...targetSymbols.flatMap((symbol) => buildSymbolSearchForms(symbol)
|
|
144
|
-
.map((form) => normalizeFtsTerm(form))
|
|
145
|
-
.filter(Boolean)
|
|
146
|
-
.map((form) => `${form}*`))
|
|
147
|
-
]);
|
|
148
|
-
logInputOutput("semanticSearchFiles target resolution", "output", {
|
|
149
|
-
originalQuery,
|
|
150
|
-
intent,
|
|
151
|
-
targetFiles,
|
|
152
|
-
targetSymbols,
|
|
153
|
-
resolvedCount: resolvedRows.length,
|
|
154
|
-
fileResolvedCount: fileRows.length,
|
|
155
|
-
symbolResolvedCount: symbolRows.length,
|
|
156
|
-
symbolResolvedExactCount: exactSymbolRows.length,
|
|
157
|
-
symbolResolvedPatternCount: patternSymbolRows.length,
|
|
158
|
-
unresolvedTargets,
|
|
159
|
-
resolvedFiles: resolvedRows.map((row) => row.path),
|
|
160
|
-
});
|
|
161
|
-
// Target-first short-circuit: if we resolved any explicit targets, keep scope tight.
|
|
162
|
-
if (resolvedRows.length > 0) {
|
|
163
|
-
return resolvedRows.slice(0, topK).map((r) => ({
|
|
164
|
-
id: r.id,
|
|
165
|
-
path: r.path,
|
|
166
|
-
filename: r.filename,
|
|
167
|
-
summary: r.summary,
|
|
168
|
-
type: r.type,
|
|
169
|
-
lastModified: r.lastModified,
|
|
170
|
-
bm25Score: r.bm25Score,
|
|
171
|
-
queryExpansionTerms,
|
|
172
|
-
}));
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// 2) Broad search path (fallback when target resolution failed).
|
|
52
|
+
// Broad semantic search stays separate from exact target resolution.
|
|
53
|
+
// Example query: "add comments in parser module" -> model emits OR-joined FTS terms.
|
|
176
54
|
// Example query: "add comments in parser module" -> model emits OR-joined FTS terms.
|
|
177
55
|
const primaryFtsQuery = await generatePrimaryFtsQuery(originalQuery, intent);
|
|
178
56
|
const primaryExpansionTerms = buildQueryExpansionTerms(originalQuery, [primaryFtsQuery]);
|
|
@@ -220,7 +98,7 @@ export async function semanticSearchFiles(originalQuery, topK = 5, intent = {})
|
|
|
220
98
|
}
|
|
221
99
|
return [];
|
|
222
100
|
}
|
|
223
|
-
function resolveTargetRows(db, targetFiles) {
|
|
101
|
+
export function resolveTargetRows(db, targetFiles) {
|
|
224
102
|
const resolvedRows = [];
|
|
225
103
|
const unresolvedTargets = [];
|
|
226
104
|
const seenPaths = new Set();
|
|
@@ -328,7 +206,7 @@ function buildSymbolSearchForms(rawSymbol) {
|
|
|
328
206
|
}
|
|
329
207
|
return dedupeNormalizedStrings(forms);
|
|
330
208
|
}
|
|
331
|
-
function resolveSymbolRows(db, targetSymbols) {
|
|
209
|
+
export function resolveSymbolRows(db, targetSymbols) {
|
|
332
210
|
if (targetSymbols.length === 0)
|
|
333
211
|
return [];
|
|
334
212
|
const rows = [];
|
|
@@ -426,7 +304,9 @@ function resolveSymbolRows(db, targetSymbols) {
|
|
|
426
304
|
}
|
|
427
305
|
return rows;
|
|
428
306
|
}
|
|
429
|
-
function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
307
|
+
export function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
308
|
+
// Broad fallback for symbol lookup when exact resolution fails.
|
|
309
|
+
// Guarded to avoid noisy matches from weak tokens (e.g. "Can" or tiny fragments).
|
|
430
310
|
if (targetSymbols.length === 0)
|
|
431
311
|
return [];
|
|
432
312
|
const rows = [];
|
|
@@ -434,11 +314,13 @@ function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
|
434
314
|
const candidatePatterns = new Set();
|
|
435
315
|
const candidateParts = new Set();
|
|
436
316
|
for (const rawSymbol of targetSymbols) {
|
|
317
|
+
if (!isEligiblePatternSymbol(rawSymbol))
|
|
318
|
+
continue;
|
|
437
319
|
for (const pattern of buildSymbolLikePatterns(rawSymbol)) {
|
|
438
320
|
candidatePatterns.add(pattern);
|
|
439
321
|
}
|
|
440
322
|
for (const part of splitSymbolParts(rawSymbol)) {
|
|
441
|
-
if (part.length >=
|
|
323
|
+
if (part.length >= MIN_PATTERN_SYMBOL_LEN)
|
|
442
324
|
candidateParts.add(part);
|
|
443
325
|
}
|
|
444
326
|
}
|
|
@@ -486,7 +368,7 @@ function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
|
486
368
|
`);
|
|
487
369
|
for (const pattern of candidatePatterns) {
|
|
488
370
|
const likePattern = `%${escapeSqlLikeTerm(pattern)}%`;
|
|
489
|
-
const matches = patternStmt.all(likePattern, likePattern, likePattern, likePattern, likePattern, likePattern,
|
|
371
|
+
const matches = patternStmt.all(likePattern, likePattern, likePattern, likePattern, likePattern, likePattern, MAX_PATTERN_SYMBOL_ROWS);
|
|
490
372
|
for (const row of matches) {
|
|
491
373
|
if (seenPaths.has(row.path))
|
|
492
374
|
continue;
|
|
@@ -496,7 +378,7 @@ function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
|
496
378
|
}
|
|
497
379
|
for (const part of candidateParts) {
|
|
498
380
|
const likePattern = `%${escapeSqlLikeTerm(part)}%`;
|
|
499
|
-
const matches = partStmt.all(likePattern, likePattern, likePattern,
|
|
381
|
+
const matches = partStmt.all(likePattern, likePattern, likePattern, MAX_PATTERN_SYMBOL_ROWS);
|
|
500
382
|
for (const row of matches) {
|
|
501
383
|
if (seenPaths.has(row.path))
|
|
502
384
|
continue;
|
|
@@ -504,7 +386,7 @@ function resolveSymbolRowsByPattern(db, targetSymbols) {
|
|
|
504
386
|
rows.push(row);
|
|
505
387
|
}
|
|
506
388
|
}
|
|
507
|
-
return rows.slice(0,
|
|
389
|
+
return rows.slice(0, MAX_PATTERN_SYMBOL_ROWS);
|
|
508
390
|
}
|
|
509
391
|
function splitSymbolParts(rawSymbol) {
|
|
510
392
|
const symbol = String(rawSymbol ?? "").trim();
|
|
@@ -524,14 +406,53 @@ function buildSymbolLikePatterns(rawSymbol) {
|
|
|
524
406
|
const patterns = new Set();
|
|
525
407
|
const compact = normalizeSymbolLookupToken(symbol);
|
|
526
408
|
const parts = splitSymbolParts(symbol);
|
|
527
|
-
if (compact)
|
|
409
|
+
if (compact.length >= MIN_PATTERN_SYMBOL_LEN)
|
|
528
410
|
patterns.add(compact);
|
|
529
411
|
if (parts.length > 0) {
|
|
530
|
-
|
|
531
|
-
|
|
412
|
+
const compactParts = parts.join("");
|
|
413
|
+
if (compactParts.length >= MIN_PATTERN_SYMBOL_LEN)
|
|
414
|
+
patterns.add(compactParts);
|
|
415
|
+
if (parts.length >= 2)
|
|
416
|
+
patterns.add(parts.join("%"));
|
|
532
417
|
}
|
|
533
418
|
return Array.from(patterns);
|
|
534
419
|
}
|
|
420
|
+
function isEligiblePatternSymbol(rawSymbol) {
|
|
421
|
+
// Allows broad pattern matching only for identifier-like tokens.
|
|
422
|
+
// Example: "CanvasManager" -> true, "can" -> false.
|
|
423
|
+
const symbol = String(rawSymbol ?? "").trim();
|
|
424
|
+
if (!symbol || symbol.length < MIN_PATTERN_SYMBOL_LEN)
|
|
425
|
+
return false;
|
|
426
|
+
const lowered = symbol.toLowerCase();
|
|
427
|
+
if (STOP_WORDS.has(lowered) || QUERY_OPERATOR_TOKENS.has(lowered))
|
|
428
|
+
return false;
|
|
429
|
+
const looksLikeIdentifier = /[a-z][A-Z]/.test(symbol) ||
|
|
430
|
+
/[A-Z]{2,}[a-z]/.test(symbol) ||
|
|
431
|
+
symbol.includes("_") ||
|
|
432
|
+
/[0-9]/.test(symbol) ||
|
|
433
|
+
/(step|module|cmd|service|controller|handler|manager)$/i.test(symbol);
|
|
434
|
+
if (!looksLikeIdentifier && /^[a-z]+$/.test(symbol) && symbol.length < 8)
|
|
435
|
+
return false;
|
|
436
|
+
return true;
|
|
437
|
+
}
|
|
438
|
+
function isLikelyTargetSymbol(rawSymbol) {
|
|
439
|
+
// Pre-filter targetSymbols before any symbol resolution.
|
|
440
|
+
// Example: "ChangeLogUpdateCmd" -> true, "What" -> false.
|
|
441
|
+
const symbol = String(rawSymbol ?? "").trim();
|
|
442
|
+
if (!symbol || symbol.length < 3)
|
|
443
|
+
return false;
|
|
444
|
+
const lowered = symbol.toLowerCase();
|
|
445
|
+
if (STOP_WORDS.has(lowered) || QUERY_OPERATOR_TOKENS.has(lowered))
|
|
446
|
+
return false;
|
|
447
|
+
const looksLikeIdentifier = /[a-z][A-Z]/.test(symbol) ||
|
|
448
|
+
/[A-Z]{2,}[a-z]/.test(symbol) ||
|
|
449
|
+
symbol.includes("_") ||
|
|
450
|
+
/[0-9]/.test(symbol) ||
|
|
451
|
+
/(step|module|cmd|service|controller|handler|manager)$/i.test(symbol);
|
|
452
|
+
if (!looksLikeIdentifier && /^[A-Z][a-z]+$/.test(symbol))
|
|
453
|
+
return false;
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
535
456
|
function escapeSqlLikeTerm(value) {
|
|
536
457
|
return String(value ?? "").replace(/[%_]/g, "");
|
|
537
458
|
}
|
|
@@ -588,10 +509,22 @@ term1 OR term2 OR term3
|
|
|
588
509
|
// Model-generated query is always normalized by enforceFtsQueryPolicy.
|
|
589
510
|
// Example: "code* OR file*" + target file -> keeps anchored file term first.
|
|
590
511
|
try {
|
|
591
|
-
const response = await generate({ content: prompt, query: "" }
|
|
512
|
+
const response = await generate({ content: prompt, query: "" }, {
|
|
513
|
+
caller: "fileIndex.generatePrimaryFtsQuery",
|
|
514
|
+
inputContext: {
|
|
515
|
+
userQuery,
|
|
516
|
+
intent,
|
|
517
|
+
},
|
|
518
|
+
});
|
|
592
519
|
const rawText = String(response.data ?? "");
|
|
593
520
|
const { content } = extractTaggedContent(rawText, "FILE_CONTENT");
|
|
594
|
-
|
|
521
|
+
const normalized = enforceFtsQueryPolicy(userQuery, content, MAX_PRIMARY_TERMS, intent);
|
|
522
|
+
logInputOutput("fileIndex.generatePrimaryFtsQuery", "output", {
|
|
523
|
+
callId: response.trace?.callId,
|
|
524
|
+
userQuery,
|
|
525
|
+
normalizedQuery: normalized,
|
|
526
|
+
});
|
|
527
|
+
return normalized;
|
|
595
528
|
}
|
|
596
529
|
catch (err) {
|
|
597
530
|
return enforceFtsQueryPolicy(userQuery, userQuery, MAX_PRIMARY_TERMS, intent);
|
|
@@ -632,7 +565,14 @@ query5
|
|
|
632
565
|
</FILE_CONTENT>
|
|
633
566
|
`.trim();
|
|
634
567
|
try {
|
|
635
|
-
const response = await generate({ content: prompt, query: "" }
|
|
568
|
+
const response = await generate({ content: prompt, query: "" }, {
|
|
569
|
+
caller: "fileIndex.generateFallbackFtsQueries",
|
|
570
|
+
inputContext: {
|
|
571
|
+
userQuery,
|
|
572
|
+
failedQuery,
|
|
573
|
+
intent,
|
|
574
|
+
},
|
|
575
|
+
});
|
|
636
576
|
const rawText = String(response.data ?? "");
|
|
637
577
|
const { content } = extractTaggedContent(rawText, "FILE_CONTENT");
|
|
638
578
|
// Each candidate fallback line is sanitized/anchored the same way as primary.
|
|
@@ -644,6 +584,12 @@ query5
|
|
|
644
584
|
if (!subQueries.length) {
|
|
645
585
|
throw new Error("No fallback subqueries generated");
|
|
646
586
|
}
|
|
587
|
+
logInputOutput("fileIndex.generateFallbackFtsQueries", "output", {
|
|
588
|
+
callId: response.trace?.callId,
|
|
589
|
+
userQuery,
|
|
590
|
+
failedQuery,
|
|
591
|
+
subQueries,
|
|
592
|
+
});
|
|
647
593
|
return subQueries;
|
|
648
594
|
}
|
|
649
595
|
catch (err) {
|
|
@@ -859,12 +805,24 @@ Question:
|
|
|
859
805
|
"${query}"
|
|
860
806
|
`.trim();
|
|
861
807
|
try {
|
|
862
|
-
const response = await generate({ content: prompt, query: "" }
|
|
808
|
+
const response = await generate({ content: prompt, query: "" }, {
|
|
809
|
+
caller: "fileIndex.expandQueryWithModel",
|
|
810
|
+
inputContext: {
|
|
811
|
+
query,
|
|
812
|
+
},
|
|
813
|
+
});
|
|
863
814
|
const rawText = String(response.data ?? "");
|
|
864
815
|
const { content } = extractTaggedContent(rawText, "FILE_CONTENT");
|
|
865
|
-
|
|
816
|
+
const expanded = compileSearchQuery({ query: content, mode: "fts" }).fts.expression;
|
|
817
|
+
logInputOutput("fileIndex.expandQueryWithModel", "output", {
|
|
818
|
+
callId: response.trace?.callId,
|
|
819
|
+
query,
|
|
820
|
+
expandedQuery: expanded,
|
|
821
|
+
});
|
|
822
|
+
return expanded;
|
|
866
823
|
}
|
|
867
824
|
catch {
|
|
868
825
|
return null;
|
|
869
826
|
}
|
|
870
827
|
}
|
|
828
|
+
//# sourceMappingURL=fileIndex.js.map
|