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.
- package/README.md +162 -267
- 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,233 @@
|
|
|
1
|
+
export const REGISTERED_TEST_TARGETS = [
|
|
2
|
+
{
|
|
3
|
+
id: "agent-loop-read-answer",
|
|
4
|
+
area: "agent",
|
|
5
|
+
description: "New agent reads one explicit file and produces a final answer.",
|
|
6
|
+
file: "cli/src/__tests__/agents/agentLoop.test.ts",
|
|
7
|
+
testName: "reads one explicit file and produces a final answer",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "agent-loop-triage-before-read",
|
|
11
|
+
area: "agent",
|
|
12
|
+
description: "New agent triages broad candidate sets before promoting one file into a full read.",
|
|
13
|
+
file: "cli/src/__tests__/agents/agentLoop.test.ts",
|
|
14
|
+
testName: "uses triage-file before full reads on broad candidate sets",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "agent-loop-path-guard",
|
|
18
|
+
area: "agent",
|
|
19
|
+
description: "New agent rejects absolute file reads outside the active repo/worktree.",
|
|
20
|
+
file: "cli/src/__tests__/agents/agentLoop.test.ts",
|
|
21
|
+
testName: "rejects absolute paths outside the active repo/worktree",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "agent-state-machine",
|
|
25
|
+
area: "agent",
|
|
26
|
+
description: "New agent uses explicit task and step transition helpers.",
|
|
27
|
+
file: "cli/src/__tests__/agents/agentStateMachine.test.ts",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "agent-shell-binding",
|
|
31
|
+
area: "agent",
|
|
32
|
+
description: "Shell binding can be updated from agent memory.",
|
|
33
|
+
file: "cli/src/__tests__/shellSession.test.ts",
|
|
34
|
+
testName: "binds agent memory into shell task state",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "agent-ask-final-answer-print",
|
|
38
|
+
area: "agent",
|
|
39
|
+
description: "Ask command prints the simple-agent final answer block before completion.",
|
|
40
|
+
file: "cli/src/__tests__/askCommandTaskBinding.test.ts",
|
|
41
|
+
testName: "uses the new agent runtime for one-shot agent runs",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "intent-command-bypass",
|
|
45
|
+
area: "intent",
|
|
46
|
+
description: "Intent detection bypasses the model for slash commands.",
|
|
47
|
+
file: "cli/src/__tests__/agents/understandIntentStep.test.ts",
|
|
48
|
+
testName: "bypasses the model for slash commands and extracts file targets directly",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: "intent-fallback-file-extraction",
|
|
52
|
+
area: "intent",
|
|
53
|
+
description: "Intent fallback keeps explicit file targets when model output is invalid.",
|
|
54
|
+
file: "cli/src/__tests__/agents/understandIntentStep.test.ts",
|
|
55
|
+
testName: "falls back safely on invalid model output and extracts file targets from the raw query",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: "intent-folder-basename-extraction",
|
|
59
|
+
area: "intent",
|
|
60
|
+
description: "Intent fallback extracts basename-only folder refs like guards.",
|
|
61
|
+
file: "cli/src/__tests__/agents/understandIntentStep.test.ts",
|
|
62
|
+
testName: "extracts folder refs and extensionless file refs from the raw query fallback",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "intent-folder-natural-language-extraction",
|
|
66
|
+
area: "intent",
|
|
67
|
+
description: "Explicit-ref extraction detects natural folder phrasing like guards folder.",
|
|
68
|
+
file: "cli/src/__tests__/utils/extractFileReferences.test.ts",
|
|
69
|
+
testName: "extracts natural-language folder refs without requiring a path",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: "scope-multifile-normalization",
|
|
73
|
+
area: "scope",
|
|
74
|
+
description: "Scope classification keeps explicit two-file requests in multi-file mode.",
|
|
75
|
+
file: "cli/src/__tests__/agents/scopeClassificationStep.test.ts",
|
|
76
|
+
testName: "normalizes obvious multi-file requests when the LLM returns single-file",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "scope-single-file",
|
|
80
|
+
area: "scope",
|
|
81
|
+
description: "Scope classification preserves a clear single-file request.",
|
|
82
|
+
file: "cli/src/__tests__/agents/scopeClassificationStep.test.ts",
|
|
83
|
+
testName: "preserves a clear single-file request",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: "scope-repo-wide",
|
|
87
|
+
area: "scope",
|
|
88
|
+
description: "Scope classification preserves repo-wide architecture analysis.",
|
|
89
|
+
file: "cli/src/__tests__/agents/scopeClassificationStep.test.ts",
|
|
90
|
+
testName: "preserves a repo-wide architecture query",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "routing-multifile-bounded",
|
|
94
|
+
area: "routing",
|
|
95
|
+
description: "Routing keeps multi-file docs work in bounded execution mode.",
|
|
96
|
+
file: "cli/src/__tests__/agents/routingDecisionStep.test.ts",
|
|
97
|
+
testName: "routes explicit multi-file docs work to bounded execution",
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: "routing-folder-explicit-target",
|
|
101
|
+
area: "routing",
|
|
102
|
+
description: "Routing keeps resolved folders on the explicit-target lane while allowing scoped search.",
|
|
103
|
+
file: "cli/src/__tests__/agents/routingDecisionStep.test.ts",
|
|
104
|
+
testName: "keeps explicit folder targets on the explicit-target lane while still allowing search",
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "routing-repo-research",
|
|
108
|
+
area: "routing",
|
|
109
|
+
description: "Routing enables research for repo-wide explanation requests without writes.",
|
|
110
|
+
file: "cli/src/__tests__/agents/routingDecisionStep.test.ts",
|
|
111
|
+
testName: "enables research for repo-wide explanation requests without allowing transforms",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: "execution-lock-single-file",
|
|
115
|
+
area: "execution-policy",
|
|
116
|
+
description: "Execution policy locks only when a single explicit target has strong verify confidence.",
|
|
117
|
+
file: "cli/src/__tests__/agents/executionPolicyResolver.test.ts",
|
|
118
|
+
testName: "enables a single-file execution lock when explicit targeting and verify confidence are strong",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: "search-folder-basename-resolution",
|
|
122
|
+
area: "search",
|
|
123
|
+
description: "Exact-target search resolves basename-only folders like guards.",
|
|
124
|
+
file: "cli/src/__tests__/search/SearchOrchestrator.test.ts",
|
|
125
|
+
testName: "resolves basename-only and natural-language folder refs into folder-scoped child candidates",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: "search-folder-child-candidates",
|
|
129
|
+
area: "search",
|
|
130
|
+
description: "Exact-target folder hits expand into candidate child files, not selected files.",
|
|
131
|
+
file: "cli/src/__tests__/agents/deriveFocusFromSearchStep.test.ts",
|
|
132
|
+
testName: "keeps resolved folder children in candidateFiles without promoting them to selectedFiles",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: "search-filename-spaced-words",
|
|
136
|
+
area: "search",
|
|
137
|
+
description: "Search can still find a file when the user uses spaced filename words.",
|
|
138
|
+
file: "cli/src/__tests__/search/SearchOrchestrator.test.ts",
|
|
139
|
+
testName: "keeps semantic retrieval separate from exact-target resolution",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "agent-search-ranking-owner-boost",
|
|
143
|
+
area: "search",
|
|
144
|
+
description: "New agent ranking keeps owner-file and exact-anchor boosts inside the search area.",
|
|
145
|
+
file: "cli/src/__tests__/agents/agentSearchRanking.test.ts",
|
|
146
|
+
testName: "boosts likely owner files for method-selection questions",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "search-snippet-no-filename",
|
|
150
|
+
area: "search",
|
|
151
|
+
description: "Sentence-fragment search preserves snippet-only lookups with no filename.",
|
|
152
|
+
file: "cli/src/__tests__/search/SearchOrchestrator.test.ts",
|
|
153
|
+
testName: "preserves identical sentence fragments across multiple files",
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: "search-operator-pattern-mode",
|
|
157
|
+
area: "search",
|
|
158
|
+
description: "Operator-pattern search stays separate from semantic retrieval.",
|
|
159
|
+
file: "cli/src/__tests__/search/SearchOrchestrator.test.ts",
|
|
160
|
+
testName: "returns raw operator-pattern matches without semantic guessing",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: "execution-lock-invariant",
|
|
164
|
+
area: "execution-policy",
|
|
165
|
+
description: "Execution policy invariant restores dropped lock files.",
|
|
166
|
+
file: "cli/src/__tests__/agents/executionPolicyResolver.test.ts",
|
|
167
|
+
testName: "restores locked files if later focus state drops them",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: "readiness-no-selection",
|
|
171
|
+
area: "readiness",
|
|
172
|
+
description: "Readiness stays not-ready when no files are selected.",
|
|
173
|
+
file: "cli/src/__tests__/agents/readinessGateStep.test.ts",
|
|
174
|
+
testName: "returns not-ready when no files are selected",
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "readiness-weak-anchor-expansion",
|
|
178
|
+
area: "readiness",
|
|
179
|
+
description: "Readiness forces one expansion wave when anchors are weak.",
|
|
180
|
+
file: "cli/src/__tests__/agents/readinessGateStep.test.ts",
|
|
181
|
+
testName: "forces one expansion wave when primary files are weakly aligned to anchors",
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: "source-selection-execution-only",
|
|
185
|
+
area: "selection",
|
|
186
|
+
description: "Source selection mirrors execution files without promoting candidates.",
|
|
187
|
+
file: "cli/src/__tests__/agents/selectRelevantSourcesStep.test.ts",
|
|
188
|
+
testName: "mirrors execution files into working files without promoting candidates",
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "reason-next-analyze-only",
|
|
192
|
+
area: "completion",
|
|
193
|
+
description: "Step reasoning completes analyze-only work once semantic analysis exists.",
|
|
194
|
+
file: "cli/src/__tests__/agents/reasonNextStep.test.ts",
|
|
195
|
+
testName: "completes analyze-only steps once semantic analysis exists",
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: "reason-next-redo",
|
|
199
|
+
area: "completion",
|
|
200
|
+
description: "Step reasoning requests redo when validation fails.",
|
|
201
|
+
file: "cli/src/__tests__/agents/reasonNextStep.test.ts",
|
|
202
|
+
testName: "requests redo when validation requires it",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: "objective-multifile-gate",
|
|
206
|
+
area: "completion",
|
|
207
|
+
description: "Reasoning does not complete a multi-file task from one-file objective evidence.",
|
|
208
|
+
file: "cli/src/__tests__/agents/reasonNextTaskStep.test.ts",
|
|
209
|
+
testName: "does not complete a multi-file task when objective criteria cover only one required file",
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: "objective-multifile-complete",
|
|
213
|
+
area: "completion",
|
|
214
|
+
description: "Reasoning completes once all required files are covered by satisfied criteria.",
|
|
215
|
+
file: "cli/src/__tests__/agents/reasonNextTaskStep.test.ts",
|
|
216
|
+
testName: "completes once satisfied objective criteria cover every required file",
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: "objective-evaluator-invalid-regex",
|
|
220
|
+
area: "completion",
|
|
221
|
+
description: "Objective evaluation treats invalid regex criteria as unresolved.",
|
|
222
|
+
file: "cli/src/__tests__/agents/objectiveEvaluatorStep.test.ts",
|
|
223
|
+
testName: "marks invalid regex criteria as unsatisfied instead of succeeding",
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: "validation-preserve-history",
|
|
227
|
+
area: "validation",
|
|
228
|
+
description: "Validation preserves earlier file results when validating another file.",
|
|
229
|
+
file: "cli/src/__tests__/agents/validateChangesStep.test.ts",
|
|
230
|
+
testName: "preserves earlier validations when adding a new file result",
|
|
231
|
+
},
|
|
232
|
+
];
|
|
233
|
+
//# sourceMappingURL=testRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testRegistry.js","sourceRoot":"","sources":["../../src/testing/testRegistry.ts"],"names":[],"mappings":"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","sourcesContent":["export interface RegisteredTestTarget {\n id: string;\n description: string;\n file: string;\n area?: string;\n testName?: string;\n}\n\nexport const REGISTERED_TEST_TARGETS: RegisteredTestTarget[] = [\n {\n id: \"agent-loop-read-answer\",\n area: \"agent\",\n description: \"New agent reads one explicit file and produces a final answer.\",\n file: \"cli/src/__tests__/agents/agentLoop.test.ts\",\n testName: \"reads one explicit file and produces a final answer\",\n },\n {\n id: \"agent-loop-triage-before-read\",\n area: \"agent\",\n description: \"New agent triages broad candidate sets before promoting one file into a full read.\",\n file: \"cli/src/__tests__/agents/agentLoop.test.ts\",\n testName: \"uses triage-file before full reads on broad candidate sets\",\n },\n {\n id: \"agent-loop-path-guard\",\n area: \"agent\",\n description: \"New agent rejects absolute file reads outside the active repo/worktree.\",\n file: \"cli/src/__tests__/agents/agentLoop.test.ts\",\n testName: \"rejects absolute paths outside the active repo/worktree\",\n },\n {\n id: \"agent-state-machine\",\n area: \"agent\",\n description: \"New agent uses explicit task and step transition helpers.\",\n file: \"cli/src/__tests__/agents/agentStateMachine.test.ts\",\n },\n {\n id: \"agent-shell-binding\",\n area: \"agent\",\n description: \"Shell binding can be updated from agent memory.\",\n file: \"cli/src/__tests__/shellSession.test.ts\",\n testName: \"binds agent memory into shell task state\",\n },\n {\n id: \"agent-ask-final-answer-print\",\n area: \"agent\",\n description: \"Ask command prints the simple-agent final answer block before completion.\",\n file: \"cli/src/__tests__/askCommandTaskBinding.test.ts\",\n testName: \"uses the new agent runtime for one-shot agent runs\",\n },\n {\n id: \"intent-command-bypass\",\n area: \"intent\",\n description: \"Intent detection bypasses the model for slash commands.\",\n file: \"cli/src/__tests__/agents/understandIntentStep.test.ts\",\n testName: \"bypasses the model for slash commands and extracts file targets directly\",\n },\n {\n id: \"intent-fallback-file-extraction\",\n area: \"intent\",\n description: \"Intent fallback keeps explicit file targets when model output is invalid.\",\n file: \"cli/src/__tests__/agents/understandIntentStep.test.ts\",\n testName: \"falls back safely on invalid model output and extracts file targets from the raw query\",\n },\n {\n id: \"intent-folder-basename-extraction\",\n area: \"intent\",\n description: \"Intent fallback extracts basename-only folder refs like guards.\",\n file: \"cli/src/__tests__/agents/understandIntentStep.test.ts\",\n testName: \"extracts folder refs and extensionless file refs from the raw query fallback\",\n },\n {\n id: \"intent-folder-natural-language-extraction\",\n area: \"intent\",\n description: \"Explicit-ref extraction detects natural folder phrasing like guards folder.\",\n file: \"cli/src/__tests__/utils/extractFileReferences.test.ts\",\n testName: \"extracts natural-language folder refs without requiring a path\",\n },\n {\n id: \"scope-multifile-normalization\",\n area: \"scope\",\n description: \"Scope classification keeps explicit two-file requests in multi-file mode.\",\n file: \"cli/src/__tests__/agents/scopeClassificationStep.test.ts\",\n testName: \"normalizes obvious multi-file requests when the LLM returns single-file\",\n },\n {\n id: \"scope-single-file\",\n area: \"scope\",\n description: \"Scope classification preserves a clear single-file request.\",\n file: \"cli/src/__tests__/agents/scopeClassificationStep.test.ts\",\n testName: \"preserves a clear single-file request\",\n },\n {\n id: \"scope-repo-wide\",\n area: \"scope\",\n description: \"Scope classification preserves repo-wide architecture analysis.\",\n file: \"cli/src/__tests__/agents/scopeClassificationStep.test.ts\",\n testName: \"preserves a repo-wide architecture query\",\n },\n {\n id: \"routing-multifile-bounded\",\n area: \"routing\",\n description: \"Routing keeps multi-file docs work in bounded execution mode.\",\n file: \"cli/src/__tests__/agents/routingDecisionStep.test.ts\",\n testName: \"routes explicit multi-file docs work to bounded execution\",\n },\n {\n id: \"routing-folder-explicit-target\",\n area: \"routing\",\n description: \"Routing keeps resolved folders on the explicit-target lane while allowing scoped search.\",\n file: \"cli/src/__tests__/agents/routingDecisionStep.test.ts\",\n testName: \"keeps explicit folder targets on the explicit-target lane while still allowing search\",\n },\n {\n id: \"routing-repo-research\",\n area: \"routing\",\n description: \"Routing enables research for repo-wide explanation requests without writes.\",\n file: \"cli/src/__tests__/agents/routingDecisionStep.test.ts\",\n testName: \"enables research for repo-wide explanation requests without allowing transforms\",\n },\n {\n id: \"execution-lock-single-file\",\n area: \"execution-policy\",\n description: \"Execution policy locks only when a single explicit target has strong verify confidence.\",\n file: \"cli/src/__tests__/agents/executionPolicyResolver.test.ts\",\n testName: \"enables a single-file execution lock when explicit targeting and verify confidence are strong\",\n },\n {\n id: \"search-folder-basename-resolution\",\n area: \"search\",\n description: \"Exact-target search resolves basename-only folders like guards.\",\n file: \"cli/src/__tests__/search/SearchOrchestrator.test.ts\",\n testName: \"resolves basename-only and natural-language folder refs into folder-scoped child candidates\",\n },\n {\n id: \"search-folder-child-candidates\",\n area: \"search\",\n description: \"Exact-target folder hits expand into candidate child files, not selected files.\",\n file: \"cli/src/__tests__/agents/deriveFocusFromSearchStep.test.ts\",\n testName: \"keeps resolved folder children in candidateFiles without promoting them to selectedFiles\",\n },\n {\n id: \"search-filename-spaced-words\",\n area: \"search\",\n description: \"Search can still find a file when the user uses spaced filename words.\",\n file: \"cli/src/__tests__/search/SearchOrchestrator.test.ts\",\n testName: \"keeps semantic retrieval separate from exact-target resolution\",\n },\n {\n id: \"agent-search-ranking-owner-boost\",\n area: \"search\",\n description: \"New agent ranking keeps owner-file and exact-anchor boosts inside the search area.\",\n file: \"cli/src/__tests__/agents/agentSearchRanking.test.ts\",\n testName: \"boosts likely owner files for method-selection questions\",\n },\n {\n id: \"search-snippet-no-filename\",\n area: \"search\",\n description: \"Sentence-fragment search preserves snippet-only lookups with no filename.\",\n file: \"cli/src/__tests__/search/SearchOrchestrator.test.ts\",\n testName: \"preserves identical sentence fragments across multiple files\",\n },\n {\n id: \"search-operator-pattern-mode\",\n area: \"search\",\n description: \"Operator-pattern search stays separate from semantic retrieval.\",\n file: \"cli/src/__tests__/search/SearchOrchestrator.test.ts\",\n testName: \"returns raw operator-pattern matches without semantic guessing\",\n },\n {\n id: \"execution-lock-invariant\",\n area: \"execution-policy\",\n description: \"Execution policy invariant restores dropped lock files.\",\n file: \"cli/src/__tests__/agents/executionPolicyResolver.test.ts\",\n testName: \"restores locked files if later focus state drops them\",\n },\n {\n id: \"readiness-no-selection\",\n area: \"readiness\",\n description: \"Readiness stays not-ready when no files are selected.\",\n file: \"cli/src/__tests__/agents/readinessGateStep.test.ts\",\n testName: \"returns not-ready when no files are selected\",\n },\n {\n id: \"readiness-weak-anchor-expansion\",\n area: \"readiness\",\n description: \"Readiness forces one expansion wave when anchors are weak.\",\n file: \"cli/src/__tests__/agents/readinessGateStep.test.ts\",\n testName: \"forces one expansion wave when primary files are weakly aligned to anchors\",\n },\n {\n id: \"source-selection-execution-only\",\n area: \"selection\",\n description: \"Source selection mirrors execution files without promoting candidates.\",\n file: \"cli/src/__tests__/agents/selectRelevantSourcesStep.test.ts\",\n testName: \"mirrors execution files into working files without promoting candidates\",\n },\n {\n id: \"reason-next-analyze-only\",\n area: \"completion\",\n description: \"Step reasoning completes analyze-only work once semantic analysis exists.\",\n file: \"cli/src/__tests__/agents/reasonNextStep.test.ts\",\n testName: \"completes analyze-only steps once semantic analysis exists\",\n },\n {\n id: \"reason-next-redo\",\n area: \"completion\",\n description: \"Step reasoning requests redo when validation fails.\",\n file: \"cli/src/__tests__/agents/reasonNextStep.test.ts\",\n testName: \"requests redo when validation requires it\",\n },\n {\n id: \"objective-multifile-gate\",\n area: \"completion\",\n description: \"Reasoning does not complete a multi-file task from one-file objective evidence.\",\n file: \"cli/src/__tests__/agents/reasonNextTaskStep.test.ts\",\n testName: \"does not complete a multi-file task when objective criteria cover only one required file\",\n },\n {\n id: \"objective-multifile-complete\",\n area: \"completion\",\n description: \"Reasoning completes once all required files are covered by satisfied criteria.\",\n file: \"cli/src/__tests__/agents/reasonNextTaskStep.test.ts\",\n testName: \"completes once satisfied objective criteria cover every required file\",\n },\n {\n id: \"objective-evaluator-invalid-regex\",\n area: \"completion\",\n description: \"Objective evaluation treats invalid regex criteria as unresolved.\",\n file: \"cli/src/__tests__/agents/objectiveEvaluatorStep.test.ts\",\n testName: \"marks invalid regex criteria as unsatisfied instead of succeeding\",\n },\n {\n id: \"validation-preserve-history\",\n area: \"validation\",\n description: \"Validation preserves earlier file results when validating another file.\",\n file: \"cli/src/__tests__/agents/validateChangesStep.test.ts\",\n testName: \"preserves earlier validations when adding a new file result\",\n },\n];\n"]}
|
package/dist/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Shared runtime and data model types for the SCAI CLI.\r\n *\r\n * This file is still the single source of truth for now, but it is grouped by ownership:\r\n * - runtime contracts and action specs\r\n * - policy / guard state\r\n * - progress / completion state\r\n * - evidence and analysis state\r\n * - durable task / session persistence shapes\r\n * - module / planner I/O\r\n *\r\n * Canonical source rules:\r\n * - `GuardState` is the authoritative policy snapshot for the loop.\r\n * - `ExecutionPolicySnapshot` is the authoritative pre-guard policy input.\r\n * - `ProgressState` is the authoritative progress snapshot for the loop.\r\n * - `executionOutcome.validations` is the authoritative validation fact source.\r\n * - `objectiveEvaluation` is the authoritative objective fact source.\r\n * - `Task` and `Session` store durable state; they do not own loop decisions.\r\n */\r\nexport type SupportedLanguage = 'ts' | 'js' | 'java' | 'rust' | 'python';\nexport type SupportedModel = \"qwen3-coder:30b\" | \"qwen3.5:35b\" | \"granite4.1:30b\" | \"gpt-oss:20b\" | \"glm-4.7-flash:latest\" | \"glm-4.7-flash:q4_K_M\" | \"nemotron-cascade-2:30b\" | \"aratan/qwen3.5-agent-multimodal:9b\";\n\r\nexport interface DaemonConfig {\r\n sleepMs: number;\r\n idleSleepMs: number;\r\n}\r\n\r\nexport interface ScaiConfig {\n model: SupportedModel;\n contextLength: number;\n maxOutputTokens: number;\n transformMaxFileLines?: number;\n language: SupportedLanguage;\n devOutput?: boolean;\n indexDir: string;\n githubToken: string;\r\n repos: Record<string, Partial<ScaiConfig>>;\r\n activeRepo: string | null;\r\n daemon?: DaemonConfig;\r\n}\r\n\r\nexport interface ResumeDebugInfo {\r\n sourceTaskId?: number;\r\n restoredSnapshot?: unknown;\r\n resumedContextCapsule?: string;\r\n reloadedFileContext?: Array<{\r\n path: string;\r\n reason: string;\r\n }>;\r\n}\r\n\r\nexport interface AgentUI {\n update(text: string): void;\n message(text: string): void;\n pause(fn: () => void): void;\n succeed(msg?: string): void;\n fail(msg: string): void;\n stop(): void;\n}\n\r\nexport type RepoConfig = {\r\n model?: SupportedModel;\r\n language?: SupportedLanguage;\r\n githubToken?: string;\r\n indexDir?: string;\r\n path?: string;\r\n};\r\n\r\nexport type TopFile = {\r\n id?: number;\r\n path: string;\r\n summary?: string;\r\n code?: string;\r\n bm25Score?: number;\r\n};\r\n\r\nexport interface BuildContextualPromptArgs {\r\n topFiles?: TopFile[];\r\n relatedFiles: {\r\n id: number;\r\n path: string;\r\n summary?: string;\r\n bm25Score?: number;\r\n }[];\r\n query: string;\r\n queryExpansionTerms?: string[];\r\n}\r\n\r\nexport type OutputMode = \"overwrite\" | \"append\" | \"newFile\" | \"skip\";\r\n\r\n// File: src/pipeline/types.ts\r\nexport interface PromptInput<TMeta = any> {\r\n originalContent?: string;\r\n content: string;\r\n filepath?: string;\r\n chunkIndex?: number;\r\n chunkCount?: number;\r\n language?: string;\r\n metadata?: TMeta; // š module-specific data\r\n summary?: string;\r\n\r\n // Optional plan context\r\n stepIndex?: number;\r\n totalSteps?: number;\r\n actionName?: string;\r\n}\r\n\r\nexport type PromptOutput<TData = any, TDiag = any> = {\r\n originalContent?: string;\r\n content: string;\r\n filepath?: string;\r\n suggestions?: string[];\r\n mode?: OutputMode;\r\n newFilepath?: string;\r\n data?: TData; // š structured module result (AST, search hits, etc.)\r\n summary?: string;\r\n\r\n // Diagnostics (timing, token usage, warnings, etc.)\r\n diagnostics?: TDiag;\r\n};\r\n\r\nexport type PromptModule<TIn = any, TOut = any> = {\r\n name: string;\r\n description: string;\r\n run: (input: PromptInput<TIn>) => Promise<PromptOutput<TOut>>;\r\n};\r\n\r\n// Runtime action contract (single source of truth for execution).\r\n// Example: actionId=\"codeTransform\" -> phase=\"transform\", executorKind=\"module\".\r\nexport type ActionPhase =\r\n | \"info\"\r\n | \"analysis\"\r\n | \"transform\"\r\n | \"finalize\"\r\n | \"research\"\r\n | \"system\";\r\n\r\nexport type ExecutorKind = \"module\" | \"research\" | \"system\";\r\nexport type ActionSafety = \"read-only\" | \"repo-write\" | \"external-io\" | \"shell\";\r\n\r\nexport interface RegexSuccessCriterion {\r\n type: \"regex\";\r\n filePath: string;\r\n pattern: string;\r\n flags?: string;\r\n scope?: \"line\" | \"file\";\r\n mustMatch?: boolean;\r\n expectedCaptures?: string[];\r\n}\r\n\r\nexport interface ExactValueSuccessCriterion {\r\n type: \"exact-value\";\r\n filePath: string;\r\n value: string;\r\n mustContain?: boolean;\r\n}\r\n\r\nexport type SuccessCriterion = RegexSuccessCriterion | ExactValueSuccessCriterion;\r\n\r\nexport interface CompletionSemantics {\r\n criteria?: SuccessCriterion[];\r\n}\r\n\r\nexport interface GiveUpPolicy {\r\n maxVerifyWaves?: number;\r\n maxNoGrowthWaves?: number;\r\n maxRetriesPerTarget?: number;\r\n maxExpansionPromotionsPerWave?: number;\r\n}\r\n\r\nexport interface ActionSpec {\r\n id: string;\r\n phase: ActionPhase;\r\n executorKind: ExecutorKind;\r\n argsSchema?: {\r\n required?: string[];\r\n };\r\n safety: ActionSafety;\r\n completionSemantics?: CompletionSemantics;\r\n giveUpPolicy?: GiveUpPolicy;\r\n}\r\n\r\nexport type ActionRegistry = Record<string, ActionSpec>;\r\n\r\nexport interface RegexEvidence {\r\n filePath: string;\r\n pattern: string;\r\n flags?: string;\r\n matches: number;\r\n captures?: string[];\r\n error?: string;\r\n}\r\n\r\nexport interface ObjectiveEvaluationResult {\r\n status: \"satisfied\" | \"unsatisfied\" | \"inconclusive\";\r\n rationale: string;\r\n evidence: RegexEvidence[];\r\n}\r\n\r\nexport type GiveUpReason =\r\n | \"not-found\"\r\n | \"unsafe\"\r\n | \"no-growth\"\r\n | \"retry-exhausted\"\r\n | \"policy-blocked\";\r\n\r\nexport interface AttemptCounters {\r\n verifyWaves?: number;\r\n noGrowthWaves?: number;\r\n retriesByTarget?: Record<string, number>;\r\n expansionPromotions?: number;\r\n}\r\n\r\nexport interface GiveUpEvaluationResult {\r\n triggered: boolean;\r\n reason?: GiveUpReason;\r\n rationale: string;\r\n counters?: AttemptCounters;\r\n}\r\n\r\nexport interface ObjectiveState {\r\n objective?: string;\r\n successCriteria?: SuccessCriterion[];\r\n completionStatus?: \"unknown\" | \"satisfied\" | \"unsatisfied\";\r\n completionEvidence?: RegexEvidence[];\r\n}\r\n\r\nexport interface GiveUpState {\r\n status?: \"none\" | \"triggered\";\r\n reason?: GiveUpReason;\r\n rationale?: string;\r\n}\r\n\r\nexport interface PlannerPromptState {\r\n targetFile: string;\r\n rationaleText: string;\r\n currentQuestionId?: string;\r\n promptMode: \"full\" | \"delta\";\r\n signature?: string;\r\n frontierSignature?: string;\r\n repeatCount?: number;\r\n}\r\n\r\nexport interface PlannerRetryProgress {\r\n targetFile: string;\r\n signature: string;\r\n count: number;\r\n stalled: boolean;\r\n frontierSignature?: string;\r\n reason: string;\r\n}\r\n\r\n\r\n/** A single step the planner returns */\r\nexport type AgentPlanStep = {\r\n id: string;\r\n action: string;\r\n actionId?: string;\r\n actionArgs?: Record<string, unknown>;\r\n questionId?: string;\r\n subQuery?: string[];\r\n targetFile?: string;\r\n description?: string;\r\n modules?: Array<PromptModule | string>;\r\n moduleHint?: string;\r\n metadata?: Record<string, any>; // ā¬
ļø added so translator can attach extra info\r\n groups?: string[];\r\n};\r\n\r\n/** The plan returned by the planner */\r\nexport type AgentPlan = {\r\n steps: AgentPlanStep[];\r\n};\r\n\r\nexport interface AutonomousAgentArgs extends AgentContext {\r\n promptContent: string;\r\n}\r\n\r\nexport interface AgentContext {\r\n query: string;\r\n topFiles?: TopFile[];\r\n globalContext?: Record<string, any>;\r\n}\r\n\r\nexport interface FolderCapsule {\r\n path: string;\r\n depth: number;\r\n\r\n stats: {\r\n fileCount: number;\r\n byType: Record<string, number>; // ts, js, json, md\r\n };\r\n\r\n roles: string[]; // [\"cli\", \"utils\", \"api\", \"infra\"]\r\n concerns: string[]; // [\"logging\", \"parsing\", \"auth\"]\r\n\r\n keyFiles: {\r\n path: string;\r\n reason: string; // \"entrypoint\", \"core logic\", \"config\"\r\n }[];\r\n\r\n dependencies: {\r\n importsFrom: string[]; // other folders\r\n usedBy: string[];\r\n };\r\n\r\n confidence: number; // 0ā1, how confident the model is\r\n summary?: string;\r\n}\r\n\r\nexport type ScopeType = \"none\" | \"single-file\" | \"multi-file\" | \"repo-wide\";\r\nexport type ScopeBand = \"none\" | \"single-file\" | \"multi-file\" | \"repo-wide\";\r\nexport type GuardPhase = \"analysis\" | \"planning\" | \"transform\" | \"write\";\r\nexport type GuardContinuationMode =\r\n | \"need-search\"\r\n | \"need-verify\"\r\n | \"can-research\"\r\n | \"can-plan\"\r\n | \"can-execute\"\r\n | \"terminal\";\r\n\r\n/**\r\n * Pre-guard policy input built from routing, readiness, and focus state.\r\n * This is the canonical policy source before `GuardState` is resolved.\r\n */\r\nexport interface ExecutionPolicySnapshot {\r\n phaseAllowed: Record<GuardPhase, boolean>;\r\n routeAllowed: {\r\n searchExpand: boolean;\r\n research: boolean;\r\n transform: boolean;\r\n };\r\n scopeType: ScopeType;\r\n scopeBand: ScopeBand;\r\n executionRequired: string[];\r\n explorationCandidates: string[];\r\n executionLock: {\r\n enabled: boolean;\r\n files: string[];\r\n reason?: string;\r\n };\r\n executionReady: boolean;\r\n explorationReady: boolean;\r\n policyNotes: string[];\r\n}\r\n\r\n/**\r\n * Authoritative policy snapshot for the current loop turn.\r\n * `GuardState` answers \"what moves are allowed right now?\"\r\n */\r\nexport interface GuardState {\r\n lane: \"explicit-target\" | \"resume-continuity\" | \"evidence\" | \"coding\" | \"direct-answer\";\r\n readiness: \"not-ready\" | \"ready\";\r\n continuationMode: GuardContinuationMode;\r\n allowSearchExpand: boolean;\r\n allowResearch: boolean;\r\n allowTransform: boolean;\r\n executionReady: boolean;\r\n executionLockEnabled: boolean;\r\n executionRequired: string[];\r\n blockingReason?: string;\r\n terminalReason?: \"complete\" | \"give-up\" | \"request-feedback\";\r\n}\r\n\r\nexport type ProgressMode =\r\n | \"direct-answer\"\r\n | \"evidence\"\r\n | \"coding\"\r\n | \"continuity\";\r\n\r\nexport type ProgressResearchStatus =\r\n | \"not-needed\"\r\n | \"required\"\r\n | \"optional\"\r\n | \"exhausted\";\r\n\r\n/**\r\n * Authoritative progress snapshot for the current loop turn.\r\n * `ProgressState` answers \"what work is still needed right now?\"\r\n */\r\nexport interface ProgressState {\r\n mode: ProgressMode;\r\n requiredTargets: string[];\r\n completedTargets: string[];\r\n redoTargets: string[];\r\n blockedTargets: string[];\r\n optionalTargets: string[];\r\n evidenceSatisfied: boolean;\r\n research: {\r\n status: ProgressResearchStatus;\r\n pendingSteps: string[];\r\n lastPlanSignature?: string;\r\n lastFrontierSignature?: string;\r\n plannerRetry?: PlannerRetryProgress;\r\n noNewInfoCount: number;\r\n reason: string;\r\n };\r\n completion: {\r\n objectiveSatisfied: boolean;\r\n validationSatisfied: boolean;\r\n evidenceSatisfied: boolean;\r\n eligible: boolean;\r\n blockedBy: \"missing-scope\" | \"missing-evidence\" | \"pending-research\" | null;\r\n reason: string;\r\n };\r\n continuity: {\r\n localOnly: boolean;\r\n answerNow: boolean;\r\n reason: string;\r\n };\r\n}\r\n\r\nexport type RoutingDecision = {\r\n decision: \"has-info\" | \"needs-info\";\r\n allowSearch: boolean;\r\n allowResearch: boolean;\r\n allowTransform: boolean;\r\n scopeLocked: boolean;\r\n rationale: string;\r\n confidence?: number;\r\n};\r\n\r\n/** \r\n * Outcome of the readiness gate step. \r\n * Determines if agent has enough evidence to proceed.\r\n */\r\nexport interface ReadinessDecision {\r\n decision: 'ready' | 'not-ready'; // Ready to proceed or need more info\r\n reason: 'sufficient-evidence' | 'insufficient-evidence' | 'query-repo-mismatch' | 'internal-error';\r\n confidence: number; // 0..1\r\n rationale: string; // Short explanation based only on evidence\r\n}\r\n\r\nexport type ExecutionMode = \"analyze\" | \"transform\";\r\nexport interface ExecutionControl {\r\n /**\r\n * Hard execution mode.\r\n * Set exactly once after intent understanding.\r\n * NEVER mutated afterwards.\r\n */\r\n mode: ExecutionMode;\r\n\r\n /**\r\n * Why this mode was chosen.\r\n * For debugging / transparency only.\r\n */\r\n rationale?: string;\r\n\r\n /**\r\n * Confidence in the mode decision (0ā1).\r\n */\r\n confidence?: number;\r\n\r\n /**\r\n * Optional guardrails inferred from intent.\r\n * These are authoritative and must be respected by all downstream steps.\r\n */\r\n constraints?: {\r\n allowFileWrites: boolean;\r\n allowPlanning: boolean;\r\n allowAnalysis: boolean;\r\n\r\n /**\r\n * If true, transformations must be limited to\r\n * documentation and comments only.\r\n */\r\n docsOnly?: boolean;\r\n };\r\n}\r\n\r\nexport type EvidenceType =\r\n | \"sentence\"\r\n | \"symbol\"\r\n | \"filename\"\r\n | \"keyword-cluster\"\r\n | \"structural\";\r\n\r\nexport type FileEvidence = {\r\n claim: string; // factual statement grounded in code\r\n type: EvidenceType; // deterministic evidence category\r\n excerpt?: string; // contextual snippet (± lines if available)\r\n span?: {\r\n startLine?: number;\r\n endLine?: number;\r\n };\r\n confidence: number; // 0ā1 deterministic confidence score\r\n};\r\n\r\nexport type ChangeValidation = {\r\n filePath: string;\r\n\r\n /**\r\n * What we expected to happen (from plan / intent)\r\n */\r\n expectedChange?: string;\r\n\r\n /**\r\n * What actually happened (derived from execution artifacts)\r\n */\r\n actualChange: string;\r\n\r\n /**\r\n * Outcome of validation\r\n */\r\n status: \"valid\" | \"partial\" | \"invalid\";\r\n\r\n /**\r\n * Why this status was chosen\r\n */\r\n rationale?: string;\r\n\r\n /**\r\n * Whether this file needs another pass\r\n */\r\n requiresRedo?: boolean;\r\n};\r\n\r\nexport interface ReadFileFact {\r\n key: string;\r\n value?: string;\r\n found: boolean;\r\n snippet?: string;\r\n}\r\n\r\nexport interface ReadQueryFit {\r\n judgment: \"strong\" | \"partial\" | \"weak\" | \"wrong-shape\" | \"unknown\";\r\n rationale: string;\r\n}\r\n\r\nexport interface ReadFileResult {\r\n status: \"ok\" | \"missing-working-file\" | \"unsupported\" | \"error\";\r\n fileKind: \"package-json\" | \"json\" | \"markdown\" | \"source\" | \"text\" | \"unknown\";\r\n facts: ReadFileFact[];\r\n missingFacts: string[];\r\n snippets: string[];\r\n queryFit: ReadQueryFit;\r\n confidence: number;\r\n readAt: string;\r\n mode?: string;\r\n requestedFacts?: string[];\r\n contentFingerprint?: string;\r\n queryFingerprint?: string;\r\n callId?: string;\r\n}\r\n\r\nexport type OuterLoopRecoveryDecision =\r\n | \"continue\"\r\n | \"redo-step\"\r\n | \"expand-scope\"\r\n | \"rework-scope\"\r\n | \"request-feedback\"\r\n | \"complete\";\r\n\r\nexport interface RecoveryEvaluationState {\r\n decision: OuterLoopRecoveryDecision;\r\n reason: string;\r\n targetFile?: string;\r\n evaluatedAt: string;\r\n sourceAction: string;\r\n}\r\n\r\nexport type ExecutionOutcome = {\r\n /**\r\n * Steps that actually ran (by id)\r\n */\r\n executedStepIds: string[];\r\n\r\n /**\r\n * Validation results per file\r\n */\r\n validations?: ChangeValidation[];\r\n};\r\n\r\nexport type IterationReasoning = {\r\n summary: string;\r\n\r\n /**\r\n * High-level action to take after validation / iteration\r\n */\r\n nextAction:\r\n | \"continue\" // proceed to next planned step\r\n | \"redo-step\" // re-run one or more steps\r\n | \"expand-scope\" // include additional files or context\r\n | \"rework-scope\" // clear stale target lock and retarget\r\n | \"request-feedback\" // ask user / collaborator\r\n | \"complete\" // iteration complete\r\n | \"give-up\" // bounded failure reached\r\n | undefined; // no further work\r\n\r\n /**\r\n * Why this action was chosen\r\n */\r\n rationale: string;\r\n\r\n /**\r\n * š Files that must be re-processed regardless of lifecycle state\r\n */\r\n redoFiles?: string[];\r\n\r\n /**\r\n * Steps or files to re-queue for next iteration\r\n */\r\n nextTargets?: {\r\n stepIds?: string[];\r\n files?: string[];\r\n searchQueries?: string[];\r\n };\r\n\r\n confidence?: number;\r\n};\r\n\r\nexport type NextActionName =\r\n | \"run-search\"\r\n | \"run-verify\"\r\n | \"seed-research\"\r\n | \"seed-plan\"\r\n | \"continue\"\r\n | \"expand-scope\"\r\n | \"rework-scope\"\r\n | \"request-feedback\"\r\n | \"complete\"\r\n | \"give-up\";\r\n\r\nexport interface NextActionInput {\r\n taskStatus: Task[\"status\"];\r\n routeLane: AgentRuntimeState[\"lane\"];\r\n allowedActions: NextActionName[];\r\n guardState?: GuardState;\r\n progressState?: ProgressState;\r\n executionPolicy?: ExecutionPolicySnapshot;\r\n readiness?: ReadinessDecision;\r\n iterationReasoning?: IterationReasoning;\r\n recentActionWindow?: RecentActionWindow;\r\n currentStep?: Step;\r\n pendingSteps: Array<Pick<Step, \"filePath\" | \"action\" | \"status\">>;\r\n completedSteps: Array<Pick<Step, \"filePath\" | \"action\" | \"status\">>;\r\n retryCounters?: AttemptCounters[\"retriesByTarget\"];\r\n giveUpState?: GiveUpState;\r\n}\r\n\r\nexport interface NextActionDecision {\r\n action: NextActionName;\r\n reason: string;\r\n confidence: number;\r\n targetFile?: string;\r\n source: \"reason-next-step-selection\";\r\n}\r\n\r\nexport interface NextActionValidationResult {\r\n accepted: boolean;\r\n normalizedAction: NextActionName;\r\n rejectionReason?: string;\r\n}\r\n\r\nexport interface NextActionMenuState {\r\n allowedActions: NextActionName[];\r\n}\r\n\r\nexport type CollaboratorFeedback = {\r\n /**\r\n * Human-readable summary shown to the user\r\n */\r\n summaryForUser: string;\r\n\r\n /**\r\n * Explicit corrections or objections\r\n */\r\n corrections?: {\r\n filePath?: string;\r\n description: string;\r\n severity?: \"suggestion\" | \"blocking\";\r\n }[];\r\n\r\n /**\r\n * Whether feedback blocks continuation\r\n */\r\n requiresAction?: boolean;\r\n\r\n /**\r\n * Lifecycle tracking\r\n */\r\n status?: \"pending\" | \"received\" | \"applied\";\r\n};\r\n\r\n\r\n// analysis types\r\nexport type FileAnalysis = {\r\n /**\r\n * š¦ FILE RELEVANCE STATUS\r\n * Authoritative for readiness decisions.\r\n */\r\n intent?: \"relevant\" | \"irrelevant\";\r\n\r\n /**\r\n * š§ Human-readable explanation of relevance judgment\r\n */\r\n relevanceExplanation?: string;\r\n\r\n /**\r\n * š§© Semantic role IF relevant\r\n */\r\n role?: \"primary\" | \"supporting\" | \"contextual\";\r\n\r\n /**\r\n * š§Ŗ These are only used up and until the readiness gate. \r\n * After that, we don't re-reason about relevance or should-modify anymore.\r\n */\r\n action?: {\r\n isRelevant?: boolean;\r\n shouldModify: boolean;\r\n }\r\n\r\n /**\r\n * š ļø Proposed changes\r\n */\r\n proposedChanges?: {\r\n summary: string;\r\n scope: \"none\" | \"minor\" | \"moderate\" | \"major\";\r\n targets?: string[];\r\n rationale?: string;\r\n };\r\n\r\n semanticAnalyzed?: boolean;\r\n contentFingerprint?: string;\r\n queryFingerprint?: string;\r\n\r\n excerpts?: Array<{\r\n description: string;\r\n startLine?: number;\r\n endLine?: number;\r\n symbols?: string[];\r\n code: string;\r\n }>;\r\n\r\n /**\r\n * ā ļø Risks\r\n */\r\n risks?: string[];\r\n\r\n structural?: {\r\n kgTags?: string[];\r\n kgNeighborhood?: string[];\r\n imports?: string[];\r\n exports?: string[];\r\n functions?: {\r\n name?: string;\r\n start?: number;\r\n end?: number;\r\n }[];\r\n classes?: {\r\n name?: string;\r\n start?: number;\r\n end?: number;\r\n }[];\r\n focusedTree?: string;\r\n };\r\n};\r\n\r\nexport type CombinedAnalysis = {\r\n sharedPatterns?: string[];\r\n architectureSummary?: string;\r\n hotspots?: string[];\r\n};\r\n\r\nexport type ResearchActionType =\r\n | \"research-impact-map\"\r\n | \"research-symbol-trace\"\r\n | \"research-risk-check\"\r\n | \"research-architecture-synthesis\"\r\n | \"research-trail-expand\";\r\n\r\nexport interface ResearchArtifactEntry {\r\n action: ResearchActionType;\r\n summary: string;\r\n collectedData?: Record<string, unknown>;\r\n selectedFileCount?: number;\r\n completedAt: string;\r\n}\r\n\r\nexport interface ResearchArtifactsState {\r\n latestByAction?: Partial<Record<ResearchActionType, ResearchArtifactEntry>>;\r\n history?: ResearchArtifactEntry[];\r\n touchedFiles?: string[];\r\n lastUpdatedAt?: string;\r\n}\r\n\r\nexport type TrailSourceType = \"import\" | \"export\" | \"symbol\" | \"kg\";\r\n\r\nexport interface TrailCandidate {\r\n filePath: string;\r\n fromFile?: string;\r\n source: TrailSourceType;\r\n confidence: number;\r\n reason: string;\r\n depth: number;\r\n}\r\n\r\nexport interface TrailDiscard {\r\n filePath: string;\r\n fromFile?: string;\r\n confidence: number;\r\n reason: string;\r\n at: string;\r\n}\r\n\r\nexport interface TrailState {\r\n frontier: TrailCandidate[];\r\n visited: string[];\r\n promoted: string[];\r\n discarded: TrailDiscard[];\r\n parent: Record<string, string>;\r\n depthByFile: Record<string, number>;\r\n pendingQueries?: string[];\r\n wave?: number;\r\n}\r\n\r\nexport interface ExpansionRequest {\r\n reason: string;\r\n files?: string[];\r\n queries?: string[];\r\n}\r\n\r\nexport interface VerifyFileState {\r\n fileConfidence?: number;\r\n role?: \"primary\" | \"supporting\" | \"contextual\";\r\n isRelevant?: boolean;\r\n rationale?: string;\r\n evidence?: FileEvidence[];\r\n searchScore?: {\r\n bm25Raw?: number;\r\n bm25Normalized?: number;\r\n bm25Prior?: number;\r\n };\r\n}\r\n\r\nexport interface VerifyState {\r\n byFile?: Record<string, VerifyFileState>;\r\n}\r\n\r\nexport interface ResumeIntentState {\r\n kind: \"continuity-summary\" | \"continuity-next-step\" | \"normal-resumed-query\";\r\n fastTrackEligible: boolean;\r\n answerFromResumeOnly: boolean;\r\n relevantResumeFiles: string[];\r\n rationale: string;\r\n}\r\n\r\nexport interface ContinuityInferenceState {\r\n mode: \"explicit-resume\" | \"implicit-continue\" | \"new-task\";\r\n confidence: number;\r\n reasons: string[];\r\n}\r\n\r\nexport interface ResumeSection {\r\n label: string;\r\n percent: number;\r\n status: \"pending\" | \"active\" | \"done\" | \"blocked\";\r\n}\r\n\r\nexport interface ResumeState {\r\n source: \"db-guidance\" | \"legacy-snapshot\" | \"none\";\r\n objective: string;\r\n activeStage?: string;\r\n summary: string;\r\n sections: ResumeSection[];\r\n blockers: string[];\r\n nextFocus: string[];\r\n pendingSteps: string[];\r\n relevantFiles: string[];\r\n}\r\n\r\nexport interface ResumePacket {\r\n objective: string;\r\n activeStage?: string;\r\n summary: string;\r\n blockers: string[];\r\n nextFocus: string[];\r\n pendingSteps: string[];\r\n relevantFiles: string[];\r\n}\r\n\r\nexport interface ContinuityDecisionState {\r\n kind: \"direct-resume-answer\" | \"direct-synthesized-answer\" | \"fallback-normal-flow\";\r\n answerNow: boolean;\r\n fallbackRequired: boolean;\r\n rationale: string;\r\n}\r\n\r\nexport interface AgentRuntimeState {\r\n phase: \"read\" | \"understand\" | \"route\" | \"evidence\" | \"plan\" | \"execute\" | \"finalize\";\r\n lane: \"explicit-target\" | \"resume-continuity\" | \"coding\" | \"evidence\" | \"direct-answer\";\r\n status: \"active\" | \"blocked\" | \"ready\" | \"paused\" | \"complete\" | \"gave-up\";\r\n rationale?: string;\r\n}\r\n\r\nexport type SearchMode =\r\n | \"exact-target\"\r\n | \"sentence-fragment\"\r\n | \"semantic-retrieval\"\r\n | \"operator-pattern\"\r\n | \"regex-execution\"\r\n | \"directory-listing\";\r\n\r\nexport type SearchRoute = \"db\" | \"regex\" | \"list-directory\";\r\n\r\nexport type SearchActionType =\r\n | \"search-db\"\r\n | \"search-regex\"\r\n | \"search-list-directory\";\r\n\r\nexport type SearchStageName =\n | \"explicit-target-resolver\"\n | \"sentence-fragment-resolver\"\n | \"semantic-retriever\"\n | \"fallback-semantic-retriever\"\n | \"fallback-content-scanner\"\n | \"operator-pattern-searcher\"\n | \"regex-searcher\"\n | \"directory-listing\"\r\n | \"result-merger-and-ranker\";\r\n\r\nexport type RegexSearchTarget = \"path\" | \"content\" | \"both\";\r\n\r\nexport interface RegexSearchScope {\r\n files?: string[];\r\n folders?: string[];\r\n}\r\n\r\nexport interface RegexSearchSpec {\r\n target: RegexSearchTarget;\r\n pattern: string;\r\n flags?: string;\r\n scope?: RegexSearchScope;\r\n rationale?: string;\r\n}\r\n\r\nexport interface SearchDirectoryEntry {\r\n path: string;\r\n name: string;\r\n kind: \"file\" | \"folder\";\r\n}\r\n\r\nexport type SearchFailureClass =\r\n | \"no-match\"\r\n | \"too-broad\"\r\n | \"ambiguous\"\r\n | \"invalid-regex\"\r\n | \"scope-missing\"\r\n | \"executor-error\";\r\n\r\nexport interface SearchFailureResult {\r\n status: \"failed\";\r\n failureClass: SearchFailureClass;\r\n message: string;\r\n pattern?: string;\r\n flags?: string;\r\n}\r\n\r\nexport interface SearchAttemptRecord {\r\n actionId: string;\r\n searchType: SearchActionType;\r\n query?: string;\r\n regexSpec?: RegexSearchSpec;\r\n scope?: RegexSearchScope;\r\n resultCount: number;\r\n failureClass?: SearchFailureClass;\r\n recordedAt: string;\r\n}\r\n\r\nexport interface DecomposedQuestion {\r\n id: string;\r\n order: number;\r\n text: string;\r\n normalizedQuery: string;\r\n intentCategory: string;\r\n targetFiles?: string[];\r\n targetSymbols?: string[];\r\n}\r\n\r\nexport interface PlanModeState {\r\n enabled: boolean;\r\n source: \"auto\" | \"explicit\" | \"none\";\r\n executionMode: \"execute\" | \"plan-only\";\r\n rationale: string;\r\n}\r\n\r\n/**\r\n * Dialog option ids stay simple on purpose.\r\n * Common values include: execute, revise, add-info, continue, approve, cancel.\r\n */\r\nexport type DialogOption =\r\n | \"execute\"\r\n | \"revise\"\r\n | \"add-info\"\r\n | \"continue\"\r\n | \"approve\"\r\n | \"cancel\"\r\n | (string & {});\r\n\r\nexport type DialogKind =\r\n | \"plan-followup\"\r\n | \"clarification\"\r\n | \"execution-approval\"\r\n | \"step-feedback\"\r\n | \"task-feedback\";\r\n\r\nexport interface DialogState {\r\n status: \"idle\" | \"awaiting-user\" | \"answered\";\r\n kind: DialogKind;\r\n prompt: string;\r\n options: DialogOption[];\r\n selectedOption?: DialogOption;\r\n comment?: string;\r\n response?: string;\r\n relatedQuestionId?: string;\r\n relatedStepId?: number;\r\n createdAt: string;\r\n answeredAt?: string;\r\n}\r\n\r\nexport interface DialogIntent {\r\n kind: DialogKind;\r\n reason: string;\r\n promptHint?: string;\r\n suggestedOptions?: DialogOption[];\r\n relatedQuestionId?: string;\r\n relatedStepId?: number;\r\n}\r\n\r\nexport interface RollingPlanState {\r\n mode: \"none\" | \"initial\" | \"rolling\";\r\n summary: string;\r\n activeBranch?: string;\r\n subgoals: Array<{\r\n id: string;\r\n label: string;\r\n status: \"pending\" | \"active\" | \"done\" | \"blocked\";\r\n questionId?: string;\r\n }>;\r\n nextActions: string[];\r\n lastUpdatedAt: string;\r\n}\r\n\r\nexport type ActionLedgerOutcome = \"success\" | \"empty\" | \"failed\" | \"partial\";\r\n\r\nexport interface ActionLedgerEntry {\r\n id?: number;\r\n taskId: number;\r\n actionKind: string;\r\n target: string;\r\n reason: string;\r\n outcome: ActionLedgerOutcome;\r\n summary: string;\r\n touchedFiles: string[];\r\n touchedSymbols?: string[];\r\n usefulness?: number;\r\n priorActionId?: number;\r\n questionId?: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface RecentActionWindow {\r\n entries: ActionLedgerEntry[];\r\n latest?: ActionLedgerEntry;\r\n}\r\n\r\nexport interface SearchSymbolResolution {\r\n symbol: string;\r\n filePath: string;\r\n}\r\n\r\nexport interface SearchContentMatch {\r\n path: string;\r\n line: number;\r\n column: number;\r\n snippet: string;\r\n}\r\n\r\nexport interface SearchOrchestratorResult {\r\n route: SearchRoute;\r\n mode: SearchMode;\r\n stagesRun: SearchStageName[];\r\n resolvedFiles: SearchResult[];\r\n resolvedFolders: string[];\r\n resolvedSymbols: SearchSymbolResolution[];\r\n unresolvedRefs: string[];\r\n ambiguousRefs: string[];\r\n fileCandidates: SearchResult[];\r\n folderCandidates: string[];\r\n symbolCandidates: SearchSymbolResolution[];\r\n fragmentMatches: SearchContentMatch[];\r\n patternMatches: SearchContentMatch[];\r\n directoryEntries: SearchDirectoryEntry[];\r\n regexSpec?: RegexSearchSpec;\r\n failure?: SearchFailureResult;\r\n fallbackUsed: boolean;\r\n}\r\n\r\nexport interface AnalysisState {\r\n /**\r\n * Tracing-only runtime mirror. This is not a decision owner.\r\n */\r\n runtimeState?: AgentRuntimeState;\r\n readinessGuard?: {\r\n weakAlignmentExpansionForced?: boolean;\r\n };\r\n\r\n intent?: {\r\n intent: string;\r\n intentCategory: string;\r\n normalizedQuery: string;\r\n confidence: number;\r\n questions?: DecomposedQuestion[];\r\n targetFiles?: string[];\r\n resolvedTargetFiles?: string[];\r\n targetSymbols?: string[];\r\n };\r\n\r\n /**\r\n * Search packet is discovery-only state.\r\n * Focus and execution decisions must be derived from this, not mixed into it.\r\n */\r\n search?: SearchOrchestratorResult;\r\n searchAttempts?: SearchAttemptRecord[];\r\n planMode?: PlanModeState;\r\n rollingPlan?: RollingPlanState;\r\n recentActionWindow?: RecentActionWindow;\r\n dialogIntent?: DialogIntent;\r\n directoryListingAnswer?: {\r\n query: string;\r\n folderPath?: string;\r\n entries: SearchDirectoryEntry[];\r\n summary: string;\r\n };\r\n\r\n continuityInference?: ContinuityInferenceState;\r\n resumeState?: ResumeState;\r\n resumeIntent?: ResumeIntentState;\r\n continuityDecision?: ContinuityDecisionState;\r\n\r\n focus?: {\r\n resolvedTargetFiles?: string[];\r\n resolvedTargetFolders?: string[];\r\n resolvedTargetSymbols?: string[];\r\n selectedFiles: string[];\r\n candidateFiles?: string[];\r\n discardedFiles?: string[];\r\n executionRequired?: string[];\r\n explorationCandidates?: string[];\r\n executionLock?: {\r\n enabled: boolean;\r\n files: string[];\r\n reason?: string;\r\n };\r\n rationale?: string;\r\n };\r\n\r\n scopeType?: ScopeType;\r\n\r\n routingDecision?: RoutingDecision;\r\n\r\n readiness?: ReadinessDecision;\r\n\r\n structure?: {\r\n files: {\r\n path: string;\r\n imports?: string[];\r\n exports?: string[];\r\n functions?: number;\r\n classes?: number;\r\n }[];\r\n };\r\n\r\n understanding?: {\r\n problemStatement?: string;\r\n constraints?: string[];\r\n assumptions?: string[];\r\n risks?: string[];\r\n sharedPatterns?: string[];\r\n hotspots?: string[];\r\n couplingPoints?: string[];\r\n };\r\n\r\n /**\r\n * FILE-LEVEL SEMANTIC ANALYSIS\r\n */\r\n fileAnalysis?: {\r\n [filePath: string]: FileAnalysis;\r\n };\r\n\r\n /**\r\n * CROSS-FILE ANALYSIS\r\n */\r\n combinedAnalysis?: CombinedAnalysis;\r\n\r\n /**\r\n * Structured research outputs produced by research-* task steps.\r\n * Used by later planning/final-answer phases.\r\n */\r\n researchArtifacts?: ResearchArtifactsState;\r\n trail?: TrailState;\r\n expansionRequest?: ExpansionRequest;\r\n\r\n /**\r\n * Verify-phase grounding outputs (evidence/confidence by file).\r\n * Produced in runVerify and consumed by readiness/file-check.\r\n */\r\n verify?: VerifyState;\r\n\r\n /**\r\n * Quick-read evidence produced by the `read-file` small action.\r\n * Keeps compact interpreted facts separate from raw loaded file content.\r\n */\r\n readResults?: {\r\n byFile: Record<string, ReadFileResult>;\r\n };\r\n\r\n /**\r\n * Policy / progress snapshots for the current loop turn.\r\n * `executionPolicy` is the pre-guard policy input.\r\n * `guardState` is the authoritative policy handoff.\r\n * `progressState` is the authoritative progress handoff.\r\n *\r\n * Canonical split:\r\n * - `guardState`: allowed moves\r\n * - `progressState`: needed moves\r\n */\r\n executionPolicy?: ExecutionPolicySnapshot;\r\n guardState?: GuardState;\r\n progressState?: ProgressState;\r\n\r\n /**\r\n * Objective and give-up state are fact inputs into progress resolution.\r\n */\r\n objective?: ObjectiveState;\r\n objectiveEvaluation?: ObjectiveEvaluationResult;\r\n giveUp?: GiveUpState;\r\n giveUpEvaluation?: GiveUpEvaluationResult;\r\n recoveryEvaluation?: RecoveryEvaluationState;\r\n plannerPromptState?: PlannerPromptState;\r\n attemptCounters?: AttemptCounters;\r\n\r\n\r\n /**\r\n * EXECUTION RESULTS (derived, authoritative)\r\n */\r\n executionOutcome?: ExecutionOutcome;\r\n\r\n /**\r\n * POST-EXECUTION REASONING\r\n * Decides whether and how the agent loops\r\n */\r\n iterationReasoning?: IterationReasoning;\r\n nextActionMenu?: NextActionMenuState;\r\n nextActionDecision?: NextActionDecision;\r\n nextActionValidation?: NextActionValidationResult;\r\n\r\n /**\r\n * Legacy compatibility field while older helpers are removed.\r\n * New user interaction should use `task.dialogState` and `analysis.dialogIntent`.\r\n */\r\n collaboratorFeedback?: CollaboratorFeedback;\r\n\r\n planSuggestion?: {\r\n text?: string;\r\n confidence?: number;\r\n plan?: AgentPlan;\r\n };\r\n\r\n folderCapsulesHuman?: string;\r\n\r\n finalAnswer?: string;\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// ā
StructuredContext\r\n// Durable, machine-owned context shared across steps\r\n// Mental model: git ā discovery (status/log) ā working tree ā staging & commit\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface StructuredContext {\r\n session?: Session;\r\n\r\n /* ======================================================================\r\n * š§ ANALYSIS STATE (authoritative, continuously refined)\r\n * Sits ABOVE phases; updated at phase boundaries\r\n * ====================================================================== */\r\n analysis?: AnalysisState;\r\n\r\n /**\r\n * š¦ EXECUTION CONTROL (authoritative, immutable)\r\n * Determines which phases are allowed to run.\r\n */\r\n executionControl?: ExecutionControl;\r\n\r\n /**\r\n * Keep track of current step so modules for a given step can access the \r\n * step description, targetFile etc. \r\n */\r\n currentStep?: AgentPlanStep;\r\n\r\n\r\n /**\r\n * š Task-level state (durable)\r\n * Holds the Task object including steps, progress, metadata.\r\n */\r\n task: Task;\r\n\r\n\r\n /* ======================================================================\r\n * š¦ PHASE 1 ā DISCOVERY & NAVIGATION (cheap, non-binding)\r\n * Comparable to: git log / git grep / browsing the repo\r\n\r\n * š§ INIT CONTEXT ā IMMUTABLE BASELINE\r\n * Collected once before reasoning begins\r\n *\r\n * Rules:\r\n * - Raw, non-interpretive\r\n * - Cheap to compute\r\n * - NEVER mutated\r\n * ====================================================================== */\r\n\r\n initContext?: {\r\n\r\n /**\r\n * Original user request.\r\n * Raw input, never rewritten.\r\n */\r\n userQuery: string;\r\n canonicalTaskQuery?: string;\r\n followUpQuery?: string;\r\n resumedContextCapsule?: string;\r\n\r\n repoRootPath?: string;\r\n executionPath?: string;\r\n currentBranch?: string;\r\n worktreePath?: string;\r\n\r\n /**\r\n * Raw repository structure.\r\n */\r\n repoTree?: string;\r\n\r\n /**\r\n * High-level understanding of the repository.\r\n * Informational only ā never used for execution decisions.\r\n */\r\n projectSummary?: string;\r\n\r\n /**\r\n * Shallow summaries from indexing, KG sampling, or heuristics.\r\n * These do NOT imply the files are loaded or correct.\r\n */\r\n moduleSummaries?: {\r\n path: string;\r\n summary?: string;\r\n }[];\r\n\r\n folderSummaries?: {\r\n path: string;\r\n summary?: string;\r\n }[];\r\n\r\n /**\r\n * š Folder capsules\r\n * Structural + semantic orientation units.\r\n * - Cheap to load\r\n * - Never mutated\r\n * - May be partial / probabilistic\r\n */\r\n folderCapsules?: FolderCapsule[];\r\n\r\n /**\r\n * Search- or KG-derived candidate paths.\r\n * Paths only; no guarantees of relevance or loading.\r\n */\r\n relatedFiles?: string[];\r\n\r\n /**\r\n * Optional path-indexed retrieval scores from semantic search.\r\n */\r\n relatedFileScores?: Record<string, number>;\r\n\r\n /**\r\n * Query terms expanded by retrieval for downstream grounding/evidence.\r\n */\r\n queryExpansionTerms?: string[];\r\n\r\n /**\r\n * Obvious root or entry-point files.\r\n */\r\n rootFiles?: string[];\r\n\r\n /**\r\n * Environment or platform hints.\r\n */\r\n environment?: {\r\n language?: string;\r\n framework?: string;\r\n runtime?: string;\r\n };\r\n\r\n /**\r\n * Small, partial knowledge-graph sample for orientation only.\r\n */\r\n kgSample?: {\r\n source: string;\r\n relation: string;\r\n target: string;\r\n }[];\r\n };\r\n\r\n\r\n /* ======================================================================\r\n * š§ PHASE 2 ā WORKING SET (authoritative, code-loaded)\r\n * Comparable to: git checkout / working tree\r\n * \r\n * Move files to this phase as we select relevant files. From here after\r\n * further analysis they'll be selected for the planning phase. \r\n * ====================================================================== */\r\n\r\n /**\r\n * Files that have been explicitly selected and loaded with code.\r\n * This is the ONLY place executable code may exist in context.\r\n */\r\n workingFiles?: StructuredFileCapsule[];\r\n\r\n /* ======================================================================\r\n * šÆ PHASE 3 ā PLANNING & DECISIONS (no code, no duplication)\r\n * Comparable to: git add / index / commit plan\r\n * ====================================================================== */\r\n\r\n plan?: {\r\n /**\r\n * Files the agent intends to modify.\r\n * Must be a subset of workingFiles (by path).\r\n */\r\n targetFiles?: string[];\r\n\r\n /**\r\n * Files that were actually modified during execution.\r\n * Append-only; used for reporting and validation.\r\n */\r\n touchedFiles?: string[];\r\n\r\n /**\r\n * Structured execution plan produced by the planner.\r\n */\r\n generatedPlan?: AgentPlan;\r\n };\r\n\r\n\r\n /* ======================================================================\r\n * š EXECUTION ARTIFACTS (ephemeral, module-owned)\r\n * Materialized outputs of transformation steps\r\n * ====================================================================== */\r\n\r\n /**\r\n * Temporary artifacts produced during execution.\r\n * Valid only for the current run; safe to discard.\r\n */\r\n execution?: {\r\n codeTransformArtifacts?: {\r\n files: {\r\n filePath: string; // absolute or normalized path to overwrite\r\n content: string; // FULL file content AFTER transformation\r\n notes?: string; // optional per-file notes from the transform\r\n written?: boolean;\r\n }[];\r\n };\r\n };\r\n\r\n resumeDebug?: ResumeDebugInfo;\r\n}\r\n\r\n\r\n\r\n// -----------------------------------------------------------------------------\r\n// š StructuredFileCapsule\r\n// Represents a SINGLE loaded file in the working set (Phase 2).\r\n// Comparable to: a checked-out file in the git working tree.\r\n// -----------------------------------------------------------------------------\r\n\r\nexport interface StructuredFileCapsule {\r\n /**\r\n * Absolute or repo-relative path.\r\n * Acts as the stable identity key.\r\n */\r\n path: string;\r\n\r\n /* ======================================================================\r\n * š¦ DISCOVERY METADATA (cheap, optional)\r\n * May exist even if code is partially loaded or summarized.\r\n * ====================================================================== */\r\n\r\n /**\r\n * Human- or LLM-generated summary.\r\n * Must never contradict code.\r\n */\r\n summary?: string;\r\n\r\n /**\r\n * Knowledge-graph or index tags associated with this file.\r\n * Non-authoritative; used for navigation and recall.\r\n */\r\n kgTags?: string[];\r\n\r\n /**\r\n * Local KG neighborhood (paths, symbols, or concepts).\r\n * Optional and partial by design.\r\n */\r\n kgNeighborhood?: string[];\r\n\r\n /**\r\n * Focused subtree or file-local hierarchy\r\n * (e.g. extracted view from repoTree).\r\n */\r\n focusedTree?: string;\r\n\r\n /**\r\n * Optional reason why this file was selected into workingFiles.\r\n * Useful for logging/debugging ā purely informational.\r\n */\r\n selectionReason?: string;\r\n\r\n /* ======================================================================\r\n * š§ CODE PAYLOAD (authoritative when present)\r\n * ====================================================================== */\r\n\r\n /**\r\n * Full source code of the file.\r\n * If present, this is the source of truth.\r\n */\r\n code?: string;\r\n\r\n /* ======================================================================\r\n * š§ STRUCTURAL FACTS (derived, non-semantic)\r\n * Must be derivable from `code` if present.\r\n * ====================================================================== */\r\n\r\n hierarchy?: string[];\r\n\r\n imports?: string[];\r\n exports?: string[];\r\n\r\n functions?: {\r\n name?: string;\r\n start?: number;\r\n end?: number;\r\n }[];\r\n\r\n classes?: {\r\n name?: string;\r\n start?: number;\r\n end?: number;\r\n }[];\r\n}\r\n\r\nexport interface Step {\r\n id?: number;\r\n taskId: number;\r\n filePath: string;\r\n action?: string;\r\n status: \"pending\" | \"completed\" | \"skipped\";\r\n startTime?: number;\r\n endTime?: number;\r\n result?: any;\r\n notes?: string;\r\n stepIndex?: number;\r\n\r\n stepQuestions?: string[];\r\n questionId?: string;\r\n}\r\n\r\nexport interface Session {\r\n id: number;\r\n projectId: number;\r\n hostType: \"cli\" | \"editor\";\r\n activeTaskId?: number;\r\n repoRootPath?: string;\r\n executionPath?: string;\r\n worktreePath?: string;\r\n routeLane?: string;\r\n runtimeState?: AnalysisState[\"runtimeState\"];\r\n status: \"active\" | \"completed\" | \"paused\" | \"gave-up\";\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\nexport interface Task {\r\n id: number;\r\n projectId: number;\r\n sessionId?: number;\r\n resumeTaskId?: number;\r\n resumeSource?: \"explicit\" | \"implicit\";\r\n bindAsCurrentTask?: boolean;\r\n status: \"active\" | \"completed\" | \"paused\" | \"deferred\" | \"gave-up\";\r\n reason?: string; // if deferred or paused, why?\r\n initialQuery: string;\r\n repoRootPath?: string;\r\n worktreePath?: string;\r\n worktreeBranch?: string;\r\n worktreeName?: string;\r\n baseBranch?: string;\r\n hasResumeContext?: boolean;\r\n summary?: string;\r\n\r\n agreedIntent?: string;\r\n intentCategory?: string;\r\n normalizedQuery?: string;\r\n intentConfidence?: number;\r\n\r\n relevantFiles?: string[];\r\n missingFiles?: string[];\r\n\r\n routingDecision?: any;\r\n objectiveJson?: string;\r\n completionStatus?: \"unknown\" | \"satisfied\" | \"unsatisfied\";\r\n giveUpStatus?: \"none\" | \"triggered\";\r\n giveUpReason?: GiveUpReason;\r\n attemptCountersJson?: string;\r\n\r\n createdAt: string;\r\n updatedAt: string;\r\n\r\n currentStep?: Step;\r\n steps: Step[];\r\n dialogState?: DialogState;\r\n taskQuestionDetails?: DecomposedQuestion[];\r\n taskQuestions?: string[];\r\n}\r\n\r\n\r\n// --------------------------------------------------------\r\n// ā
New interface for gradual migration of modules\r\n// --------------------------------------------------------\r\n\r\n/**\r\n * Simplified, generic I/O interface for modules.\r\n * All new modules should read from `query` and `content` and\r\n * write to `query` and `data`. The `content` can be free-form\r\n * (string or structured object). This keeps modules decoupled\r\n * from the full PromptInput/Output shape.\r\n */\r\nexport interface ModuleIO {\n query: string;\n content?: string | object; // free-form input for reasoning or context\n data?: string | object; // structured output or model results\n trace?: {\n callId?: string;\n startedAt?: string;\n finishedAt?: string;\n durationMs?: number;\n attemptCount?: number;\n };\n context?: StructuredContext; // NEVER passed on module output (input only via mainagent)\n // Modules may write to context, but never read\r\n // Analysis modules / helpers read\r\n}\r\n\r\nexport interface TaskPlanStage {\r\n id: string;\r\n label: string;\r\n status: \"pending\" | \"active\" | \"done\" | \"blocked\";\r\n notes?: string;\r\n}\r\n\r\nexport interface TaskPlan {\r\n id: number;\r\n taskId: number;\r\n revision: number;\r\n status: \"active\" | \"superseded\" | \"completed\";\r\n objective: string;\r\n stages: TaskPlanStage[];\r\n risks: string[];\r\n assumptions: string[];\r\n acceptanceCriteria: string[];\r\n nextActions: string[];\r\n summary?: string;\r\n source: \"model\" | \"deterministic\" | \"hybrid\";\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\nexport interface TaskProgressSection {\r\n label: string;\r\n percent: number;\r\n status: \"pending\" | \"active\" | \"done\" | \"blocked\";\r\n}\r\n\r\nexport interface TaskProgressSnapshot {\r\n id: number;\r\n taskId: number;\r\n planId?: number;\r\n status: \"active\" | \"stale\" | \"final\";\r\n summary: string;\r\n sections: TaskProgressSection[];\r\n blockers: string[];\r\n nextFocus: string[];\r\n recentChanges: string[];\r\n progressPercent: number;\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\n// --------------------------------------------------------\r\n\r\n// ā
New generic module type\r\n// --------------------------------------------------------\r\n\r\nexport type ModuleGroup = \"context\" | \"analysis\" | \"routing\" | \"transform\" | \"finalize\";\r\n\r\nexport type Module = {\r\n name: string;\r\n description: string;\r\n run: (input: ModuleIO) => Promise<ModuleIO>;\r\n groups?: ModuleGroup[];\r\n};\r\n\r\n\r\nexport interface KnowledgeGraphInput {\r\n fileId: number;\r\n filepath: string;\r\n summary?: string;\r\n}\r\n\r\nexport interface KnowledgeGraph {\r\n entities: { name: string; type: string; tags: string[] }[];\r\n edges: { from: string; to: string; type: string }[];\r\n}\r\n\r\nexport type FtsResult = {\r\n id: number;\r\n filename: string;\r\n path: string;\r\n summary: string;\r\n type: string;\r\n bm25Score: number;\r\n lastModified: string;\r\n};\r\n\r\n\r\nexport interface FileRow {\r\n id: number;\r\n path: string;\r\n type: string;\r\n summary: string | null;\r\n last_modified: string;\r\n indexed_at: string | null;\r\n functions_extracted: number | null;\r\n functions_extracted_at: string | null;\r\n processing_status: 'unprocessed' | 'extracted' | 'skipped' | 'failed';\r\n}\r\n\r\n// Narrow, query-specific rows\r\nexport interface FilePathRow {\r\n path: string;\r\n}\r\n\r\nexport interface FileSummaryRow {\r\n path: string;\r\n summary: string | null;\r\n}\r\n\r\nexport interface DaemonFileRow {\r\n id: number;\r\n path: string;\r\n summary: string | null;\r\n last_modified: string;\r\n indexed_at: string | null;\r\n processing_status: 'unprocessed' | 'extracted' | 'skipped' | 'failed';\r\n}\r\n\r\nexport interface SearchResult {\r\n id: number;\r\n path: string;\r\n filename: string;\r\n summary: string | null;\r\n type: string;\r\n lastModified: string;\r\n bm25Score?: number;\r\n queryExpansionTerms?: string[];\r\n}\r\n\r\nexport interface ExtractedFunction {\r\n id?: number;\r\n name: string;\r\n start_line: number;\r\n end_line: number;\r\n content: string;\r\n uniqueId?: string;\r\n}\r\n\r\nexport interface FunctionCall {\r\n calleeName: string;\r\n}\r\n\r\nexport type ReviewEvent = 'APPROVE' | 'REQUEST_CHANGES' | 'COMMENT';\r\n\r\nexport interface PullRequest {\r\n number: number;\r\n title: string;\r\n draft?: boolean;\r\n merged_at?: string | null;\r\n requested_reviewers?: Array<{ login: string }>;\r\n reviewers?: string[];\r\n review_status?: string;\r\n diff_url: string;\r\n body?: string;\r\n user?: { login: string };\r\n created_at?: string;\r\n\r\n head: {\r\n sha: string;\r\n ref: string;\r\n repo: {\r\n id: number;\r\n name: string;\r\n owner: {\r\n login: string;\r\n };\r\n };\r\n };\r\n}\r\n\r\n\r\nexport interface PullRequestWithDiff {\r\n pr: PullRequest;\r\n diff: string;\r\n}\r\n\r\n\r\nexport type DiffLine = {\r\n review_id?: string;\r\n line: string;\r\n lineNumberNew?: number;\r\n lineNumberOld?: number;\r\n type: 'add' | 'del' | 'context';\r\n position?: number;\r\n};\r\n\r\nexport type DiffHunk = {\r\n review_id?: string;\r\n oldStart: number;\r\n newStart: number;\r\n oldLines: number;\r\n newLines: number;\r\n lines: DiffLine[];\r\n};\r\n\r\nexport type DiffChunk = {\r\n review_id?: string;\r\n filePath: string;\r\n content: string;\r\n hunks: DiffHunk[];\r\n};\r\n\r\nexport interface RefineSearchResult {\r\n id?: number;\r\n path: string;\r\n summary?: string; // undefined is fine; null will be normalized\r\n score?: number;\r\n}\r\n"]}
|
|
@@ -1,61 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Builds the lightweight contextual prompt and seed context used before deeper agent work starts.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - small local models need compact, structured repo context instead of a full transcript
|
|
6
|
+
* - prompt seeding should stay deterministic enough to reuse across routing and retrieval flows
|
|
7
|
+
*/
|
|
2
8
|
import path from "path";
|
|
3
9
|
import fs from "fs";
|
|
4
10
|
import { getDbForRepo } from "../db/client.js";
|
|
5
11
|
import { generateFileTree, generateFocusedFileTree } from "./fileTree.js";
|
|
6
12
|
import { RELATED_FILES_LIMIT } from "../constants.js";
|
|
7
13
|
import { loadRelevantFolderCapsules } from "./loadRelevantFolderCapsules.js";
|
|
8
|
-
import {
|
|
14
|
+
import { getContextExecutionPath, mapExecutionPathToCanonicalPath, resolveCanonicalRepoIdentity, } from "./repoIdentity.js";
|
|
9
15
|
/* --- Constants --- */
|
|
10
16
|
const MAX_FUNCTIONS = 50;
|
|
11
|
-
const MAX_KG_NEIGHBORS = 50;
|
|
12
|
-
const DEFAULT_KG_DEPTH = 3;
|
|
13
17
|
/* --- Helpers --- */
|
|
14
18
|
function fileRowIdForPath(db, filePath) {
|
|
15
19
|
try {
|
|
16
20
|
const row = db
|
|
17
21
|
.prepare(`SELECT id FROM files WHERE path = ?`)
|
|
18
|
-
.get(filePath);
|
|
22
|
+
.get(mapExecutionPathToCanonicalPath(filePath));
|
|
19
23
|
return row?.id;
|
|
20
24
|
}
|
|
21
25
|
catch {
|
|
22
26
|
return undefined;
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
|
-
/* ---------------- KG helpers ---------------- */
|
|
26
|
-
function loadKgTags(db, entityUniqueId, limit = MAX_KG_NEIGHBORS) {
|
|
27
|
-
try {
|
|
28
|
-
const rows = db
|
|
29
|
-
.prepare(`
|
|
30
|
-
SELECT tm.name as tag
|
|
31
|
-
FROM graph_entity_tags et
|
|
32
|
-
JOIN graph_tags_master tm ON tm.id = et.tag_id
|
|
33
|
-
WHERE et.entity_unique_id = ?
|
|
34
|
-
LIMIT ?
|
|
35
|
-
`)
|
|
36
|
-
.all(entityUniqueId, limit);
|
|
37
|
-
return rows.map((r) => r.tag);
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function loadKgNeighbors(db, sourceUniqueId, limit = MAX_KG_NEIGHBORS) {
|
|
44
|
-
try {
|
|
45
|
-
const rows = db
|
|
46
|
-
.prepare(`
|
|
47
|
-
SELECT relation, target_unique_id as target
|
|
48
|
-
FROM graph_edges
|
|
49
|
-
WHERE source_unique_id = ?
|
|
50
|
-
LIMIT ?
|
|
51
|
-
`)
|
|
52
|
-
.all(sourceUniqueId, limit);
|
|
53
|
-
return rows.map((r) => ({ relation: r.relation, target: r.target }));
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
29
|
/* ---------------- Functions / classes ---------------- */
|
|
60
30
|
function loadFunctions(db, fileId, limit = MAX_FUNCTIONS) {
|
|
61
31
|
if (!fileId)
|
|
@@ -110,7 +80,7 @@ function safeGenerateFocusedTree(filePath, depth = 2) {
|
|
|
110
80
|
}
|
|
111
81
|
function safeGenerateRepoTree(depth = 2) {
|
|
112
82
|
try {
|
|
113
|
-
const root =
|
|
83
|
+
const root = getContextExecutionPath();
|
|
114
84
|
return generateFileTree(root, depth) || undefined;
|
|
115
85
|
}
|
|
116
86
|
catch {
|
|
@@ -121,7 +91,7 @@ function safeGenerateRepoTree(depth = 2) {
|
|
|
121
91
|
LIGHT CONTEXT
|
|
122
92
|
====================================================== */
|
|
123
93
|
export async function buildLightContext(args) {
|
|
124
|
-
const
|
|
94
|
+
const repoIdentity = resolveCanonicalRepoIdentity();
|
|
125
95
|
const safeTopFiles = Array.isArray(args.topFiles) ? args.topFiles : [];
|
|
126
96
|
const safeRelated = Array.isArray(args.relatedFiles)
|
|
127
97
|
? args.relatedFiles
|
|
@@ -129,6 +99,10 @@ export async function buildLightContext(args) {
|
|
|
129
99
|
const ctx = {
|
|
130
100
|
initContext: {
|
|
131
101
|
userQuery: args.query?.trim() ?? "",
|
|
102
|
+
repoRootPath: repoIdentity.repoRootPath,
|
|
103
|
+
executionPath: repoIdentity.executionPath,
|
|
104
|
+
currentBranch: repoIdentity.currentBranch,
|
|
105
|
+
worktreePath: repoIdentity.worktreePath,
|
|
132
106
|
repoTree: undefined,
|
|
133
107
|
relatedFiles: [],
|
|
134
108
|
relatedFileScores: {},
|
|
@@ -141,7 +115,7 @@ export async function buildLightContext(args) {
|
|
|
141
115
|
initialQuery: args.query?.trim() ?? "",
|
|
142
116
|
createdAt: new Date().toISOString(),
|
|
143
117
|
updatedAt: new Date().toISOString(),
|
|
144
|
-
|
|
118
|
+
steps: [],
|
|
145
119
|
},
|
|
146
120
|
};
|
|
147
121
|
/* -------- Collect related file paths -------- */
|
|
@@ -163,22 +137,6 @@ export async function buildLightContext(args) {
|
|
|
163
137
|
relatedFileScores[p] = candidate.bm25Score;
|
|
164
138
|
}
|
|
165
139
|
}
|
|
166
|
-
/* -------- Add file references from user query -------- */
|
|
167
|
-
const referencedFiles = extractFileReferences(ctx.initContext.userQuery, {
|
|
168
|
-
lowercase: true,
|
|
169
|
-
});
|
|
170
|
-
const topFilePaths = [];
|
|
171
|
-
for (const ref of referencedFiles) {
|
|
172
|
-
const found = safeTopFiles.find(f => f.path.toLowerCase().includes(ref));
|
|
173
|
-
if (found && !topFilePaths.includes(found.path)) {
|
|
174
|
-
topFilePaths.push(found.path);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Merge query references into relatedPaths
|
|
178
|
-
for (const tf of topFilePaths) {
|
|
179
|
-
if (!relatedPaths.includes(tf))
|
|
180
|
-
relatedPaths.push(tf);
|
|
181
|
-
}
|
|
182
140
|
ctx.initContext.relatedFiles = relatedPaths;
|
|
183
141
|
ctx.initContext.relatedFileScores = Object.fromEntries(Object.entries(relatedFileScores).filter(([filePath]) => relatedPaths.includes(filePath)));
|
|
184
142
|
ctx.initContext.queryExpansionTerms = Array.from(new Set((args.queryExpansionTerms ?? [])
|
|
@@ -186,7 +144,10 @@ export async function buildLightContext(args) {
|
|
|
186
144
|
.filter(term => term.length >= 2)));
|
|
187
145
|
/* -------- Folder capsules (orientation layer) -------- */
|
|
188
146
|
const folderPaths = normalizeToFolders(relatedPaths);
|
|
189
|
-
let folderCapsules = loadRelevantFolderCapsules(folderPaths
|
|
147
|
+
let folderCapsules = loadRelevantFolderCapsules(folderPaths, {
|
|
148
|
+
repoRootPath: repoIdentity.repoRootPath,
|
|
149
|
+
executionPath: repoIdentity.executionPath,
|
|
150
|
+
});
|
|
190
151
|
// Ensure root capsule exists
|
|
191
152
|
const rootExists = folderCapsules.some(c => c.path === '/');
|
|
192
153
|
if (!rootExists) {
|
|
@@ -227,7 +188,7 @@ function normalizeToFolders(paths) {
|
|
|
227
188
|
/* ======================================================
|
|
228
189
|
IN-DEPTH CONTEXT (Structural-Only)
|
|
229
190
|
====================================================== */
|
|
230
|
-
export async function buildInDepthContext({ filenames,
|
|
191
|
+
export async function buildInDepthContext({ filenames, }) {
|
|
231
192
|
const db = getDbForRepo();
|
|
232
193
|
const safeFilenames = Array.isArray(filenames) ? filenames : [];
|
|
233
194
|
const result = {};
|
|
@@ -238,23 +199,13 @@ export async function buildInDepthContext({ filenames, kgDepth = DEFAULT_KG_DEPT
|
|
|
238
199
|
structural.functions = loadFunctions(db, fileId, MAX_FUNCTIONS);
|
|
239
200
|
structural.classes = loadClasses(db, fileId, 200);
|
|
240
201
|
}
|
|
241
|
-
|
|
242
|
-
structural.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const imports = neighbors
|
|
246
|
-
.filter((e) => e.relation === "imports")
|
|
247
|
-
.map((e) => e.target);
|
|
248
|
-
const exports = neighbors
|
|
249
|
-
.filter((e) => e.relation === "exports")
|
|
250
|
-
.map((e) => e.target);
|
|
251
|
-
if (imports.length)
|
|
252
|
-
structural.imports = imports.slice(0, 200);
|
|
253
|
-
if (exports.length)
|
|
254
|
-
structural.exports = exports.slice(0, 200);
|
|
255
|
-
}
|
|
202
|
+
structural.kgTags = [];
|
|
203
|
+
structural.kgNeighborhood = [];
|
|
204
|
+
structural.imports = [];
|
|
205
|
+
structural.exports = [];
|
|
256
206
|
structural.focusedTree = safeGenerateFocusedTree(p, 3);
|
|
257
207
|
result[p] = structural;
|
|
258
208
|
}
|
|
259
209
|
return result;
|
|
260
210
|
}
|
|
211
|
+
//# sourceMappingURL=buildContextualPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildContextualPrompt.js","sourceRoot":"","sources":["../../src/utils/buildContextualPrompt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Builds the lightweight contextual prompt and seed context used before deeper agent work starts.\n *\n * Why this exists:\n * - small local models need compact, structured repo context instead of a full transcript\n * - prompt seeding should stay deterministic enough to reuse across routing and retrieval flows\n */\nimport path from \"path\";\nimport fs from \"fs\";\r\nimport { getDbForRepo } from \"../db/client.js\";\nimport {\r\n BuildContextualPromptArgs,\r\n TopFile,\r\n StructuredContext,\r\n StructuredFileCapsule,\r\n FolderCapsule,\r\n} from \"../types.js\";\r\nimport { generateFileTree, generateFocusedFileTree } from \"./fileTree.js\";\nimport { RELATED_FILES_LIMIT } from \"../constants.js\";\nimport { loadRelevantFolderCapsules } from \"./loadRelevantFolderCapsules.js\";\nimport {\n getContextExecutionPath,\n mapExecutionPathToCanonicalPath,\n resolveCanonicalRepoIdentity,\n} from \"./repoIdentity.js\";\n\r\n\r\n/* --- Constants --- */\r\nconst MAX_FUNCTIONS = 50;\n\r\n/* --- Helpers --- */\r\nfunction fileRowIdForPath(db: any, filePath: string): number | undefined {\n try {\n const row = db\n .prepare(`SELECT id FROM files WHERE path = ?`)\n .get(mapExecutionPathToCanonicalPath(filePath)) as { id: number } | undefined;\n return row?.id;\n } catch {\n return undefined;\n }\n}\n\r\n/* ---------------- Functions / classes ---------------- */\n\r\nfunction loadFunctions(\r\n db: any,\r\n fileId?: number,\r\n limit = MAX_FUNCTIONS\r\n): { name?: string; start?: number; end?: number }[] {\r\n if (!fileId) return [];\r\n try {\r\n const rows = db\r\n .prepare(\r\n `SELECT name, start_line, end_line\r\n FROM functions\r\n WHERE file_id = ?\r\n ORDER BY start_line\r\n LIMIT ?`\r\n )\r\n .all(fileId, limit) as {\r\n name: string | null;\r\n start_line: number;\r\n end_line: number;\r\n }[];\r\n return rows.map((r) => ({\r\n name: r.name ?? undefined,\r\n start: r.start_line,\r\n end: r.end_line,\r\n }));\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nfunction loadClasses(\r\n db: any,\r\n fileId?: number,\r\n limit = 50\r\n): { name?: string; start?: number; end?: number }[] {\r\n if (!fileId) return [];\r\n try {\r\n const rows = db\r\n .prepare(\r\n `SELECT name, start_line, end_line\r\n FROM graph_classes\r\n WHERE file_id = ?\r\n ORDER BY start_line\r\n LIMIT ?`\r\n )\r\n .all(fileId, limit) as {\r\n name: string | null;\r\n start_line: number;\r\n end_line: number;\r\n }[];\r\n return rows.map((r) => ({\r\n name: r.name ?? undefined,\r\n start: r.start_line,\r\n end: r.end_line,\r\n }));\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\n/* ---------------- Trees ---------------- */\r\n\r\nfunction safeGenerateFocusedTree(\r\n filePath: string,\r\n depth = 2\r\n): string | undefined {\r\n try {\r\n return generateFocusedFileTree(filePath, depth) || undefined;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction safeGenerateRepoTree(depth = 2): string | undefined {\n try {\n const root = getContextExecutionPath();\n return generateFileTree(root, depth) || undefined;\n } catch {\n return undefined;\n }\n}\n\r\n/* ======================================================\r\n LIGHT CONTEXT\r\n ====================================================== */\r\n\r\nexport async function buildLightContext(\n args: BuildContextualPromptArgs\n): Promise<StructuredContext> {\n const repoIdentity = resolveCanonicalRepoIdentity();\n\r\n const safeTopFiles = Array.isArray(args.topFiles) ? args.topFiles : [];\r\n const safeRelated = Array.isArray(args.relatedFiles)\r\n ? args.relatedFiles\r\n : [];\r\n\r\n const ctx: StructuredContext = {\n initContext: {\n userQuery: args.query?.trim() ?? \"\",\n repoRootPath: repoIdentity.repoRootPath,\n executionPath: repoIdentity.executionPath,\n currentBranch: repoIdentity.currentBranch,\n worktreePath: repoIdentity.worktreePath,\n repoTree: undefined,\n relatedFiles: [],\n relatedFileScores: {},\n folderCapsules: [],\n },\n task: {\r\n id: 0,\r\n projectId: 0,\r\n status: \"active\",\r\n initialQuery: args.query?.trim() ?? \"\",\r\n createdAt: new Date().toISOString(),\r\n updatedAt: new Date().toISOString(),\r\n steps: [],\n },\r\n };\r\n\r\n /* -------- Collect related file paths -------- */\r\n const relatedPaths: string[] = [];\n const relatedFileScores: Record<string, number> = {};\n\n for (const tf of safeTopFiles) {\n if (!relatedPaths.includes(tf.path)) relatedPaths.push(tf.path);\n if (typeof tf.bm25Score === \"number\" && Number.isFinite(tf.bm25Score)) {\n relatedFileScores[tf.path] = tf.bm25Score;\n }\n }\n\r\n for (\n let i = 0;\n i < Math.min(RELATED_FILES_LIMIT, safeRelated.length);\n i++\n ) {\n const candidate = safeRelated[i];\n const p = candidate.path;\n if (!relatedPaths.includes(p)) relatedPaths.push(p);\n if (typeof candidate.bm25Score === \"number\" && Number.isFinite(candidate.bm25Score)) {\n relatedFileScores[p] = candidate.bm25Score;\n }\n }\n\r\n ctx.initContext!.relatedFiles = relatedPaths;\n ctx.initContext!.relatedFileScores = Object.fromEntries(\n Object.entries(relatedFileScores).filter(([filePath]) => relatedPaths.includes(filePath))\n );\n ctx.initContext!.queryExpansionTerms = Array.from(\n new Set(\n (args.queryExpansionTerms ?? [])\n .map(term => String(term).trim().toLowerCase())\n .filter(term => term.length >= 2)\n )\n );\n\r\n /* -------- Folder capsules (orientation layer) -------- */\n const folderPaths = normalizeToFolders(relatedPaths);\n let folderCapsules = loadRelevantFolderCapsules(folderPaths, {\n repoRootPath: repoIdentity.repoRootPath,\n executionPath: repoIdentity.executionPath,\n });\n\r\n // Ensure root capsule exists\r\n const rootExists = folderCapsules.some(c => c.path === '/');\r\n if (!rootExists) {\r\n const rootCapsule: FolderCapsule = {\r\n path: '/',\r\n depth: 1,\r\n stats: { fileCount: 0, byType: {} },\r\n roles: [],\r\n concerns: [],\r\n keyFiles: [],\r\n dependencies: { importsFrom: [], usedBy: [] },\r\n confidence: 0.5,\r\n };\r\n folderCapsules.unshift(rootCapsule);\r\n }\r\n\r\n ctx.initContext!.folderCapsules = folderCapsules;\r\n return ctx;\r\n}\r\n\r\n/* -------- Helper: get folders from filepaths -------- */\r\nfunction normalizeToFolders(paths: string[]): string[] {\r\n const out = new Set<string>();\r\n\r\n for (const p of paths) {\r\n try {\r\n const stat = fs.statSync(p);\r\n if (stat.isDirectory()) {\r\n out.add(p);\r\n } else if (stat.isFile()) {\r\n out.add(path.dirname(p));\r\n }\r\n } catch {\r\n // ignore invalid paths\r\n }\r\n }\r\n\r\n return [...out];\r\n}\r\n\r\n/* ======================================================\n IN-DEPTH CONTEXT (Structural-Only)\n ====================================================== */\n\r\nexport async function buildInDepthContext({\n filenames,\n}: {\n filenames: string[];\n}): Promise<Record<string, {\n kgTags?: string[];\r\n kgNeighborhood?: string[];\r\n imports?: string[];\r\n exports?: string[];\r\n functions?: { name?: string; start?: number; end?: number }[];\r\n classes?: { name?: string; start?: number; end?: number }[];\r\n focusedTree?: string;\r\n}>> {\r\n const db = getDbForRepo();\r\n const safeFilenames = Array.isArray(filenames) ? filenames : [];\r\n\r\n const result: Record<string, {\r\n kgTags?: string[];\r\n kgNeighborhood?: string[];\r\n imports?: string[];\r\n exports?: string[];\r\n functions?: { name?: string; start?: number; end?: number }[];\r\n classes?: { name?: string; start?: number; end?: number }[];\r\n focusedTree?: string;\r\n }> = {};\r\n\r\n for (const p of safeFilenames) {\r\n const fileId = fileRowIdForPath(db, p);\r\n\r\n const structural: {\r\n kgTags?: string[];\r\n kgNeighborhood?: string[];\r\n imports?: string[];\r\n exports?: string[];\r\n functions?: { name?: string; start?: number; end?: number }[];\r\n classes?: { name?: string; start?: number; end?: number }[];\r\n focusedTree?: string;\r\n } = {};\r\n\r\n if (typeof fileId === \"number\") {\r\n structural.functions = loadFunctions(db, fileId, MAX_FUNCTIONS);\r\n structural.classes = loadClasses(db, fileId, 200);\r\n }\r\n\r\n structural.kgTags = [];\n structural.kgNeighborhood = [];\n structural.imports = [];\n structural.exports = [];\n\n structural.focusedTree = safeGenerateFocusedTree(p, 3);\n\r\n result[p] = structural;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeLogPrompt.js","sourceRoot":"","sources":["../../src/utils/changeLogPrompt.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,cAAsB;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,+BAA+B,EAAE,CAAC,MAAM,EAAE,EAAE;YACtD,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,GAAG;oBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAAC,MAAM;gBAChC,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;gBACjC,KAAK,GAAG;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;gBACjC,KAAK,GAAG,CAAC;gBAAC;oBAAS,OAAO,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;YAC5C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// src/utils/changelogPrompt.ts\r\nimport chalk from 'chalk';\r\nimport readline from 'readline';\r\n\r\nexport async function askChangelogApproval(changelogEntry: string): Promise<'yes' | 'redo' | 'skip' | 'edit'> {\r\n return new Promise((resolve) => {\r\n console.log('\\n---');\r\n console.log(chalk.yellow('Suggested changelog entry:\\n'));\r\n console.log(changelogEntry);\r\n console.log('\\nOptions:');\r\n console.log('1) ā
Accept');\r\n console.log('2) š Regenerate');\r\n console.log('3) šļø Edit');\r\n console.log('4) ā Skip');\r\n\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\r\n rl.question('\\nš Choose an option [1-4]: ', (answer) => {\r\n rl.close();\r\n switch (answer) {\r\n case '1': resolve('yes'); break;\r\n case '2': resolve('redo'); break;\r\n case '3': resolve('edit'); break;\r\n case '4': default: resolve('skip'); break;\r\n }\r\n });\r\n });\r\n}\r\n"]}
|