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,444 @@
|
|
|
1
|
+
import { logInputOutput } from "../utils/promptLogHelper.js";
|
|
2
|
+
import { reasonNextStepSelection } from "./reasonNextTaskStep.js";
|
|
3
|
+
import { canExecutePhase, canExecuteRoute, canExecuteScope } from "./guardPolicy.js";
|
|
4
|
+
import { buildAllowedActionsFromGuardState, resolveGuardState } from "./guards/guardState.js";
|
|
5
|
+
import { resolveProgressState } from "./guards/resolveProgressState.js";
|
|
6
|
+
const NON_BRIDGE_ALLOWED_ACTIONS = [
|
|
7
|
+
"continue",
|
|
8
|
+
"expand-scope",
|
|
9
|
+
"rework-scope",
|
|
10
|
+
"request-feedback",
|
|
11
|
+
"complete",
|
|
12
|
+
"give-up",
|
|
13
|
+
];
|
|
14
|
+
const ALLOWED_ACTIONS = new Set([
|
|
15
|
+
"run-search",
|
|
16
|
+
"run-verify",
|
|
17
|
+
"seed-research",
|
|
18
|
+
"seed-plan",
|
|
19
|
+
"continue",
|
|
20
|
+
"expand-scope",
|
|
21
|
+
"rework-scope",
|
|
22
|
+
"request-feedback",
|
|
23
|
+
"complete",
|
|
24
|
+
"give-up",
|
|
25
|
+
]);
|
|
26
|
+
const FORCED_BRIDGE_DECISIONS = {
|
|
27
|
+
"run-search": {
|
|
28
|
+
action: "run-search",
|
|
29
|
+
reason: "Initial evidence bootstrap has not run yet; run search before verify or execution seeding.",
|
|
30
|
+
confidence: 0.93,
|
|
31
|
+
source: "reason-next-step-selection",
|
|
32
|
+
},
|
|
33
|
+
"run-verify": {
|
|
34
|
+
action: "run-verify",
|
|
35
|
+
reason: "Execution is not ready yet; run verify before seeding research or execution work.",
|
|
36
|
+
confidence: 0.92,
|
|
37
|
+
source: "reason-next-step-selection",
|
|
38
|
+
},
|
|
39
|
+
"seed-research": {
|
|
40
|
+
action: "seed-research",
|
|
41
|
+
reason: "No research step exists yet; seed research before execution planning.",
|
|
42
|
+
confidence: 0.9,
|
|
43
|
+
source: "reason-next-step-selection",
|
|
44
|
+
},
|
|
45
|
+
"seed-plan": {
|
|
46
|
+
action: "seed-plan",
|
|
47
|
+
reason: "No eligible execution step exists yet; seed the current execution plan first.",
|
|
48
|
+
confidence: 0.9,
|
|
49
|
+
source: "reason-next-step-selection",
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const TERMINAL_SAFE_ACTIONS = new Set([
|
|
53
|
+
"complete",
|
|
54
|
+
"give-up",
|
|
55
|
+
"request-feedback",
|
|
56
|
+
]);
|
|
57
|
+
function getForcedRecoveryAction(context) {
|
|
58
|
+
const decision = context.analysis?.recoveryEvaluation?.decision;
|
|
59
|
+
if (decision === "rework-scope")
|
|
60
|
+
return "rework-scope";
|
|
61
|
+
if (decision === "expand-scope")
|
|
62
|
+
return "expand-scope";
|
|
63
|
+
if (decision === "request-feedback")
|
|
64
|
+
return "request-feedback";
|
|
65
|
+
if (decision === "complete")
|
|
66
|
+
return "complete";
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
function isResearchStep(step) {
|
|
70
|
+
return (step.action ?? "").startsWith("research-") || (step.filePath ?? "").startsWith("__research__/");
|
|
71
|
+
}
|
|
72
|
+
function shouldContinuePastVerifyWithoutExecution(context) {
|
|
73
|
+
const policy = context.analysis?.executionPolicy;
|
|
74
|
+
const researchAllowed = policy?.routeAllowed?.research ??
|
|
75
|
+
canExecuteRoute(context, "research");
|
|
76
|
+
const transformAllowed = policy?.routeAllowed?.transform ??
|
|
77
|
+
canExecuteRoute(context, "transform");
|
|
78
|
+
return researchAllowed || !transformAllowed;
|
|
79
|
+
}
|
|
80
|
+
function hasSearchAnswerReady(context) {
|
|
81
|
+
return typeof context.analysis?.directoryListingAnswer?.summary === "string" &&
|
|
82
|
+
context.analysis.directoryListingAnswer.summary.trim().length > 0;
|
|
83
|
+
}
|
|
84
|
+
function getLatestRecentAction(context) {
|
|
85
|
+
const entries = context.analysis?.recentActionWindow?.entries ?? [];
|
|
86
|
+
return entries.length > 0 ? entries[entries.length - 1] : undefined;
|
|
87
|
+
}
|
|
88
|
+
function didLatestSearchFailWithoutNewEvidence(context) {
|
|
89
|
+
const latest = getLatestRecentAction(context);
|
|
90
|
+
if (!latest)
|
|
91
|
+
return false;
|
|
92
|
+
if (!["search", "search-db", "search-regex", "search-list-directory"].includes(latest.actionKind)) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (!["failed", "empty"].includes(latest.outcome)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const selectedFiles = context.analysis?.focus?.selectedFiles ?? [];
|
|
99
|
+
const candidateFiles = context.analysis?.focus?.candidateFiles ?? [];
|
|
100
|
+
return selectedFiles.length === 0 && candidateFiles.length === 0 && !hasSearchAnswerReady(context);
|
|
101
|
+
}
|
|
102
|
+
function shouldAvoidRepeatedSearch(context) {
|
|
103
|
+
const latest = getLatestRecentAction(context);
|
|
104
|
+
if (!latest)
|
|
105
|
+
return false;
|
|
106
|
+
if (!["search", "search-db", "search-regex", "search-list-directory"].includes(latest.actionKind)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (!["failed", "empty"].includes(latest.outcome)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
const currentQuery = (context.analysis?.intent?.normalizedQuery ?? context.initContext?.userQuery ?? "").trim();
|
|
113
|
+
return latest.target.trim() === currentQuery;
|
|
114
|
+
}
|
|
115
|
+
function shouldRunSearch(context) {
|
|
116
|
+
if (hasSearchAnswerReady(context)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
if (!canExecuteScope(context, "analysis")) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const resolvedTargets = context.analysis?.focus?.resolvedTargetFiles ??
|
|
123
|
+
context.analysis?.intent?.resolvedTargetFiles ??
|
|
124
|
+
[];
|
|
125
|
+
if (resolvedTargets.length > 0) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (shouldAvoidRepeatedSearch(context)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const relatedFiles = context.initContext?.relatedFiles ?? [];
|
|
132
|
+
const selectedFiles = context.analysis?.focus?.selectedFiles ?? [];
|
|
133
|
+
const candidateFiles = context.analysis?.focus?.candidateFiles ?? [];
|
|
134
|
+
const workingFiles = context.workingFiles ?? [];
|
|
135
|
+
return (relatedFiles.length === 0 &&
|
|
136
|
+
selectedFiles.length === 0 &&
|
|
137
|
+
candidateFiles.length === 0 &&
|
|
138
|
+
workingFiles.length === 0);
|
|
139
|
+
}
|
|
140
|
+
function shouldRunVerify(context) {
|
|
141
|
+
if (hasSearchAnswerReady(context)) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
if (!canExecuteScope(context, "analysis")) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if (didLatestSearchFailWithoutNewEvidence(context)) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
const readinessDecision = context.analysis?.readiness?.decision;
|
|
151
|
+
if (readinessDecision !== "ready") {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
const executionReady = context.analysis?.executionPolicy?.executionReady;
|
|
155
|
+
if (executionReady === true) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
return !shouldContinuePastVerifyWithoutExecution(context);
|
|
159
|
+
}
|
|
160
|
+
function isBridgeActionEnabled(action, options) {
|
|
161
|
+
switch (action) {
|
|
162
|
+
case "run-search":
|
|
163
|
+
return options?.allowRunSearch ?? true;
|
|
164
|
+
case "run-verify":
|
|
165
|
+
return options?.allowRunVerify ?? true;
|
|
166
|
+
case "seed-research":
|
|
167
|
+
return options?.allowSeedResearch ?? true;
|
|
168
|
+
case "seed-plan":
|
|
169
|
+
return options?.allowSeedPlan ?? true;
|
|
170
|
+
default:
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function shouldSeedResearch(context) {
|
|
175
|
+
if (hasSearchAnswerReady(context)) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const researchAllowed = context.analysis?.executionPolicy?.routeAllowed?.research ??
|
|
179
|
+
canExecuteRoute(context, "research");
|
|
180
|
+
if (!researchAllowed || !canExecuteScope(context, "analysis")) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return !(context.task?.steps ?? []).some((step) => isResearchStep(step));
|
|
184
|
+
}
|
|
185
|
+
function shouldSeedPlan(context) {
|
|
186
|
+
if (hasSearchAnswerReady(context)) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
if (!canExecutePhase(context, "planning") || !canExecuteScope(context, "planning")) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
const executionSteps = (context.task.steps ?? []).filter((step) => !isResearchStep(step));
|
|
193
|
+
const pendingExecutionSteps = executionSteps.filter((step) => step.status !== "completed");
|
|
194
|
+
if (pendingExecutionSteps.length > 0)
|
|
195
|
+
return false;
|
|
196
|
+
return executionSteps.length === 0;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Captures the current loop-control state in one typed object.
|
|
200
|
+
* Example: one pending research step -> pendingSteps contains that file/action pair.
|
|
201
|
+
*/
|
|
202
|
+
export function buildAllowedNextActions(context, options) {
|
|
203
|
+
const forcedRecoveryAction = getForcedRecoveryAction(context);
|
|
204
|
+
if (forcedRecoveryAction) {
|
|
205
|
+
return [forcedRecoveryAction];
|
|
206
|
+
}
|
|
207
|
+
const guard = context.analysis?.guardState ?? resolveGuardState(context);
|
|
208
|
+
const hasResolvedGuardState = Boolean(context.analysis?.guardState);
|
|
209
|
+
if (guard.continuationMode === "terminal") {
|
|
210
|
+
return buildAllowedActionsFromGuardState(guard);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Trust a resolved guard snapshot when we already have one.
|
|
214
|
+
* Example: `can-research` should stay `seed-research` instead of being recomputed as `run-search`.
|
|
215
|
+
*
|
|
216
|
+
* Keep one narrow override for the micro-loop:
|
|
217
|
+
* a stale `need-search` may advance to `run-verify` after the latest search already failed with no evidence.
|
|
218
|
+
*/
|
|
219
|
+
if (hasResolvedGuardState && guard.continuationMode === "need-search" && shouldAvoidRepeatedSearch(context)) {
|
|
220
|
+
return ["run-verify"];
|
|
221
|
+
}
|
|
222
|
+
if (hasResolvedGuardState) {
|
|
223
|
+
const allowedFromGuard = buildAllowedActionsFromGuardState(guard).filter((action) => isBridgeActionEnabled(action, options));
|
|
224
|
+
if (allowedFromGuard.length > 0) {
|
|
225
|
+
return allowedFromGuard;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const bridgeCandidates = [
|
|
229
|
+
{
|
|
230
|
+
enabled: options?.allowRunSearch ?? true,
|
|
231
|
+
matches: shouldRunSearch,
|
|
232
|
+
action: "run-search",
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
enabled: options?.allowRunVerify ?? true,
|
|
236
|
+
matches: shouldRunVerify,
|
|
237
|
+
action: "run-verify",
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
enabled: options?.allowSeedResearch ?? true,
|
|
241
|
+
matches: shouldSeedResearch,
|
|
242
|
+
action: "seed-research",
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
enabled: options?.allowSeedPlan ?? true,
|
|
246
|
+
matches: shouldSeedPlan,
|
|
247
|
+
action: "seed-plan",
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
const forcedBridge = bridgeCandidates.find((candidate) => candidate.enabled && candidate.matches(context));
|
|
251
|
+
if (forcedBridge) {
|
|
252
|
+
return [forcedBridge.action];
|
|
253
|
+
}
|
|
254
|
+
return NON_BRIDGE_ALLOWED_ACTIONS;
|
|
255
|
+
}
|
|
256
|
+
export function buildNextActionInput(context, options) {
|
|
257
|
+
const steps = context.task?.steps ?? [];
|
|
258
|
+
const guardState = context.analysis?.guardState ?? resolveGuardState(context);
|
|
259
|
+
const progressState = context.analysis?.progressState ?? resolveProgressState(context);
|
|
260
|
+
const routeLane = guardState.lane ?? context.analysis?.runtimeState?.lane ?? "coding";
|
|
261
|
+
return {
|
|
262
|
+
taskStatus: context.task.status,
|
|
263
|
+
routeLane,
|
|
264
|
+
allowedActions: buildAllowedNextActions(context, options),
|
|
265
|
+
guardState,
|
|
266
|
+
progressState,
|
|
267
|
+
executionPolicy: context.analysis?.executionPolicy,
|
|
268
|
+
readiness: context.analysis?.readiness,
|
|
269
|
+
iterationReasoning: context.analysis?.iterationReasoning,
|
|
270
|
+
recentActionWindow: context.analysis?.recentActionWindow,
|
|
271
|
+
currentStep: context.task.currentStep,
|
|
272
|
+
pendingSteps: steps
|
|
273
|
+
.filter((step) => step.status !== "completed")
|
|
274
|
+
.map((step) => ({ filePath: step.filePath, action: step.action, status: step.status })),
|
|
275
|
+
completedSteps: steps
|
|
276
|
+
.filter((step) => step.status === "completed")
|
|
277
|
+
.map((step) => ({ filePath: step.filePath, action: step.action, status: step.status })),
|
|
278
|
+
retryCounters: context.analysis?.attemptCounters?.retriesByTarget,
|
|
279
|
+
giveUpState: context.analysis?.giveUp,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Keeps next-action logs focused on the final loop action, not the full upstream state.
|
|
284
|
+
* Example: selector asked for continue, bridge forced run-verify -> log both actions and the override.
|
|
285
|
+
*/
|
|
286
|
+
function buildDecideNextActionLog(params) {
|
|
287
|
+
return {
|
|
288
|
+
allowedActions: params.allowedActions,
|
|
289
|
+
selectorAction: params.selectorAction,
|
|
290
|
+
selectorReason: params.selectorReason,
|
|
291
|
+
forcedBridgeAction: params.forcedBridgeAction ?? undefined,
|
|
292
|
+
targetFile: params.targetFile,
|
|
293
|
+
decision: params.decision,
|
|
294
|
+
validation: params.validation,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Normalizes the selector output to the current supported loop actions.
|
|
299
|
+
* Example: missing nextAction -> continue.
|
|
300
|
+
*/
|
|
301
|
+
export function validateNextActionDecision(action, allowedActions) {
|
|
302
|
+
if (action && ALLOWED_ACTIONS.has(action)) {
|
|
303
|
+
if (allowedActions?.length && !allowedActions.includes(action)) {
|
|
304
|
+
return {
|
|
305
|
+
accepted: false,
|
|
306
|
+
normalizedAction: "continue",
|
|
307
|
+
rejectionReason: `Action not allowed in current menu: ${action}`,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
accepted: true,
|
|
312
|
+
normalizedAction: action,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
accepted: false,
|
|
317
|
+
normalizedAction: "continue",
|
|
318
|
+
rejectionReason: action
|
|
319
|
+
? `Unsupported next action: ${action}`
|
|
320
|
+
: "Missing next action from iteration reasoning",
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
function getForcedBridgeAction(allowedActions) {
|
|
324
|
+
if (allowedActions.length !== 1) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
const onlyAction = allowedActions[0];
|
|
328
|
+
return NON_BRIDGE_ALLOWED_ACTIONS.includes(onlyAction)
|
|
329
|
+
? null
|
|
330
|
+
: onlyAction;
|
|
331
|
+
}
|
|
332
|
+
function buildForcedBridgeDecision(action) {
|
|
333
|
+
return {
|
|
334
|
+
...FORCED_BRIDGE_DECISIONS[action],
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Controls the only cases where a terminal action may bypass a required bridge action.
|
|
339
|
+
*
|
|
340
|
+
* Examples:
|
|
341
|
+
* - `run-search` forced in repo-wide evidence lane -> `complete` must not bypass
|
|
342
|
+
* - continuity-local direct answer -> `complete` may bypass
|
|
343
|
+
* - explicit-target answer with grounded verify/executed evidence -> `complete` may bypass
|
|
344
|
+
*/
|
|
345
|
+
function canTerminalActionBypassBridge(guardState, progressState, action) {
|
|
346
|
+
if (!TERMINAL_SAFE_ACTIONS.has(action)) {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
if (guardState.lane === "direct-answer") {
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
if (progressState.continuity.localOnly || progressState.continuity.answerNow) {
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
if (guardState.lane === "explicit-target" && progressState.evidenceSatisfied) {
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Wraps the current selector and returns one explicit decision object for the work loop.
|
|
362
|
+
* Example: selector emits complete -> decision.action becomes complete with the same rationale.
|
|
363
|
+
*/
|
|
364
|
+
export async function decideNextAction(context, options) {
|
|
365
|
+
var _a;
|
|
366
|
+
context.analysis || (context.analysis = {});
|
|
367
|
+
context.analysis.progressState = resolveProgressState(context);
|
|
368
|
+
(_a = context.analysis).guardState || (_a.guardState = resolveGuardState(context));
|
|
369
|
+
const input = buildNextActionInput(context, options);
|
|
370
|
+
context.analysis.nextActionMenu = {
|
|
371
|
+
allowedActions: input.allowedActions,
|
|
372
|
+
};
|
|
373
|
+
const runSelection = options?.runSelection ?? reasonNextStepSelection.run;
|
|
374
|
+
await runSelection(context);
|
|
375
|
+
const iteration = context.analysis?.iterationReasoning;
|
|
376
|
+
const forcedBridgeAction = getForcedBridgeAction(input.allowedActions);
|
|
377
|
+
const rawValidation = validateNextActionDecision(iteration?.nextAction);
|
|
378
|
+
const guardState = input.guardState ?? context.analysis.guardState ?? resolveGuardState(context);
|
|
379
|
+
const progressState = input.progressState ?? context.analysis.progressState ?? resolveProgressState(context);
|
|
380
|
+
let validation = validateNextActionDecision(iteration?.nextAction, input.allowedActions);
|
|
381
|
+
let decision;
|
|
382
|
+
if (forcedBridgeAction &&
|
|
383
|
+
rawValidation.accepted &&
|
|
384
|
+
canTerminalActionBypassBridge(guardState, progressState, rawValidation.normalizedAction)) {
|
|
385
|
+
validation = rawValidation;
|
|
386
|
+
decision = {
|
|
387
|
+
action: rawValidation.normalizedAction,
|
|
388
|
+
reason: iteration?.rationale?.trim() ||
|
|
389
|
+
"No explicit next action rationale provided.",
|
|
390
|
+
confidence: iteration?.confidence ?? 0.5,
|
|
391
|
+
targetFile: context.task.currentStep?.filePath,
|
|
392
|
+
source: "reason-next-step-selection",
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
else if (forcedBridgeAction && validation.normalizedAction !== forcedBridgeAction) {
|
|
396
|
+
decision = buildForcedBridgeDecision(forcedBridgeAction);
|
|
397
|
+
validation = {
|
|
398
|
+
accepted: true,
|
|
399
|
+
normalizedAction: decision.action,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
else if (input.allowedActions.length === 1 &&
|
|
403
|
+
input.allowedActions[0] === "rework-scope" &&
|
|
404
|
+
validation.normalizedAction !== "rework-scope") {
|
|
405
|
+
decision = {
|
|
406
|
+
action: "rework-scope",
|
|
407
|
+
reason: context.analysis?.recoveryEvaluation?.reason ??
|
|
408
|
+
"Outer-loop recovery marked the current target stale or wrong.",
|
|
409
|
+
confidence: 0.95,
|
|
410
|
+
targetFile: context.analysis?.recoveryEvaluation?.targetFile ??
|
|
411
|
+
context.task.currentStep?.filePath,
|
|
412
|
+
source: "reason-next-step-selection",
|
|
413
|
+
};
|
|
414
|
+
validation = {
|
|
415
|
+
accepted: true,
|
|
416
|
+
normalizedAction: "rework-scope",
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
const normalizedAction = validation.normalizedAction;
|
|
421
|
+
decision = {
|
|
422
|
+
action: normalizedAction,
|
|
423
|
+
reason: iteration?.rationale?.trim() ||
|
|
424
|
+
validation.rejectionReason ||
|
|
425
|
+
"No explicit next action rationale provided.",
|
|
426
|
+
confidence: iteration?.confidence ?? 0.5,
|
|
427
|
+
targetFile: context.task.currentStep?.filePath,
|
|
428
|
+
source: "reason-next-step-selection",
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
context.analysis.nextActionDecision = decision;
|
|
432
|
+
context.analysis.nextActionValidation = validation;
|
|
433
|
+
logInputOutput("decideNextAction", "output", buildDecideNextActionLog({
|
|
434
|
+
allowedActions: input.allowedActions,
|
|
435
|
+
selectorAction: iteration?.nextAction,
|
|
436
|
+
selectorReason: iteration?.rationale,
|
|
437
|
+
forcedBridgeAction,
|
|
438
|
+
targetFile: context.task.currentStep?.filePath,
|
|
439
|
+
decision,
|
|
440
|
+
validation,
|
|
441
|
+
}));
|
|
442
|
+
return decision;
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=decideNextAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decideNextAction.js","sourceRoot":"","sources":["../../src/agents/decideNextAction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Builds and validates the typed next-action decision used by the current work loop.\n *\n * Why this exists:\n * - the work loop should not branch directly on raw mutable context strings\n * - this is a temporary bridge between the old phase-heavy runtime and a later loop-first design\n * - the current selector still owns the policy; this file only makes that contract explicit\n */\nimport type {\n GuardState,\n NextActionDecision,\n NextActionInput,\n NextActionName,\n NextActionValidationResult,\n ProgressState,\n StructuredContext,\n} from \"../types.js\";\nimport { logInputOutput } from \"../utils/promptLogHelper.js\";\nimport { reasonNextStepSelection } from \"./reasonNextTaskStep.js\";\nimport { canExecutePhase, canExecuteRoute, canExecuteScope } from \"./guardPolicy.js\";\nimport { buildAllowedActionsFromGuardState, resolveGuardState } from \"./guards/guardState.js\";\nimport { resolveProgressState } from \"./guards/resolveProgressState.js\";\n\ntype DecideNextActionOptions = {\n runSelection?: (context: StructuredContext) => Promise<void>;\n allowRunSearch?: boolean;\n allowRunVerify?: boolean;\n allowSeedResearch?: boolean;\n allowSeedPlan?: boolean;\n};\n\ntype BridgeActionName =\n | \"run-search\"\n | \"run-verify\"\n | \"seed-research\"\n | \"seed-plan\";\n\nconst NON_BRIDGE_ALLOWED_ACTIONS: NextActionName[] = [\n \"continue\",\n \"expand-scope\",\n \"rework-scope\",\n \"request-feedback\",\n \"complete\",\n \"give-up\",\n];\n\nconst ALLOWED_ACTIONS = new Set<NextActionName>([\n \"run-search\",\n \"run-verify\",\n \"seed-research\",\n \"seed-plan\",\n \"continue\",\n \"expand-scope\",\n \"rework-scope\",\n \"request-feedback\",\n \"complete\",\n \"give-up\",\n]);\n\nconst FORCED_BRIDGE_DECISIONS: Record<\n BridgeActionName,\n Omit<NextActionDecision, \"targetFile\">\n> = {\n \"run-search\": {\n action: \"run-search\",\n reason: \"Initial evidence bootstrap has not run yet; run search before verify or execution seeding.\",\n confidence: 0.93,\n source: \"reason-next-step-selection\",\n },\n \"run-verify\": {\n action: \"run-verify\",\n reason: \"Execution is not ready yet; run verify before seeding research or execution work.\",\n confidence: 0.92,\n source: \"reason-next-step-selection\",\n },\n \"seed-research\": {\n action: \"seed-research\",\n reason: \"No research step exists yet; seed research before execution planning.\",\n confidence: 0.9,\n source: \"reason-next-step-selection\",\n },\n \"seed-plan\": {\n action: \"seed-plan\",\n reason: \"No eligible execution step exists yet; seed the current execution plan first.\",\n confidence: 0.9,\n source: \"reason-next-step-selection\",\n },\n};\n\nconst TERMINAL_SAFE_ACTIONS = new Set<NextActionName>([\n \"complete\",\n \"give-up\",\n \"request-feedback\",\n]);\n\nfunction getForcedRecoveryAction(context: StructuredContext): NextActionName | null {\n const decision = context.analysis?.recoveryEvaluation?.decision;\n if (decision === \"rework-scope\") return \"rework-scope\";\n if (decision === \"expand-scope\") return \"expand-scope\";\n if (decision === \"request-feedback\") return \"request-feedback\";\n if (decision === \"complete\") return \"complete\";\n return null;\n}\n\nfunction isResearchStep(step: { filePath?: string; action?: string }): boolean {\n return (step.action ?? \"\").startsWith(\"research-\") || (step.filePath ?? \"\").startsWith(\"__research__/\");\n}\n\nfunction shouldContinuePastVerifyWithoutExecution(context: StructuredContext): boolean {\n const policy = context.analysis?.executionPolicy;\n const researchAllowed =\n policy?.routeAllowed?.research ??\n canExecuteRoute(context, \"research\");\n const transformAllowed =\n policy?.routeAllowed?.transform ??\n canExecuteRoute(context, \"transform\");\n\n return researchAllowed || !transformAllowed;\n}\n\nfunction hasSearchAnswerReady(context: StructuredContext): boolean {\n return typeof context.analysis?.directoryListingAnswer?.summary === \"string\" &&\n context.analysis.directoryListingAnswer.summary.trim().length > 0;\n}\n\nfunction getLatestRecentAction(context: StructuredContext) {\n const entries = context.analysis?.recentActionWindow?.entries ?? [];\n return entries.length > 0 ? entries[entries.length - 1] : undefined;\n}\n\nfunction didLatestSearchFailWithoutNewEvidence(context: StructuredContext): boolean {\n const latest = getLatestRecentAction(context);\n if (!latest) return false;\n if (![\"search\", \"search-db\", \"search-regex\", \"search-list-directory\"].includes(latest.actionKind)) {\n return false;\n }\n if (![\"failed\", \"empty\"].includes(latest.outcome)) {\n return false;\n }\n const selectedFiles = context.analysis?.focus?.selectedFiles ?? [];\n const candidateFiles = context.analysis?.focus?.candidateFiles ?? [];\n return selectedFiles.length === 0 && candidateFiles.length === 0 && !hasSearchAnswerReady(context);\n}\n\nfunction shouldAvoidRepeatedSearch(context: StructuredContext): boolean {\n const latest = getLatestRecentAction(context);\n if (!latest) return false;\n if (![\"search\", \"search-db\", \"search-regex\", \"search-list-directory\"].includes(latest.actionKind)) {\n return false;\n }\n if (![\"failed\", \"empty\"].includes(latest.outcome)) {\n return false;\n }\n const currentQuery = (context.analysis?.intent?.normalizedQuery ?? context.initContext?.userQuery ?? \"\").trim();\n return latest.target.trim() === currentQuery;\n}\n\nfunction shouldRunSearch(context: StructuredContext): boolean {\n if (hasSearchAnswerReady(context)) {\n return false;\n }\n if (!canExecuteScope(context, \"analysis\")) {\n return false;\n }\n\n const resolvedTargets =\n context.analysis?.focus?.resolvedTargetFiles ??\n context.analysis?.intent?.resolvedTargetFiles ??\n [];\n if (resolvedTargets.length > 0) {\n return false;\n }\n\n if (shouldAvoidRepeatedSearch(context)) {\n return false;\n }\n\n const relatedFiles = context.initContext?.relatedFiles ?? [];\n const selectedFiles = context.analysis?.focus?.selectedFiles ?? [];\n const candidateFiles = context.analysis?.focus?.candidateFiles ?? [];\n const workingFiles = context.workingFiles ?? [];\n\n return (\n relatedFiles.length === 0 &&\n selectedFiles.length === 0 &&\n candidateFiles.length === 0 &&\n workingFiles.length === 0\n );\n}\n\nfunction shouldRunVerify(context: StructuredContext): boolean {\n if (hasSearchAnswerReady(context)) {\n return false;\n }\n if (!canExecuteScope(context, \"analysis\")) {\n return false;\n }\n\n if (didLatestSearchFailWithoutNewEvidence(context)) {\n return true;\n }\n\n const readinessDecision = context.analysis?.readiness?.decision;\n if (readinessDecision !== \"ready\") {\n return true;\n }\n\n const executionReady = context.analysis?.executionPolicy?.executionReady;\n if (executionReady === true) {\n return false;\n }\n\n return !shouldContinuePastVerifyWithoutExecution(context);\n}\n\nfunction isBridgeActionEnabled(action: NextActionName, options?: DecideNextActionOptions): boolean {\n switch (action) {\n case \"run-search\":\n return options?.allowRunSearch ?? true;\n case \"run-verify\":\n return options?.allowRunVerify ?? true;\n case \"seed-research\":\n return options?.allowSeedResearch ?? true;\n case \"seed-plan\":\n return options?.allowSeedPlan ?? true;\n default:\n return true;\n }\n}\n\nfunction shouldSeedResearch(context: StructuredContext): boolean {\n if (hasSearchAnswerReady(context)) {\n return false;\n }\n const researchAllowed =\n context.analysis?.executionPolicy?.routeAllowed?.research ??\n canExecuteRoute(context, \"research\");\n if (!researchAllowed || !canExecuteScope(context, \"analysis\")) {\n return false;\n }\n\n return !(context.task?.steps ?? []).some((step) => isResearchStep(step));\n}\n\nfunction shouldSeedPlan(context: StructuredContext): boolean {\n if (hasSearchAnswerReady(context)) {\n return false;\n }\n if (!canExecutePhase(context, \"planning\") || !canExecuteScope(context, \"planning\")) {\n return false;\n }\n\n const executionSteps = (context.task.steps ?? []).filter((step) => !isResearchStep(step));\n const pendingExecutionSteps = executionSteps.filter((step) => step.status !== \"completed\");\n if (pendingExecutionSteps.length > 0) return false;\n\n return executionSteps.length === 0;\n}\n\n/**\n * Captures the current loop-control state in one typed object.\n * Example: one pending research step -> pendingSteps contains that file/action pair.\n */\nexport function buildAllowedNextActions(\n context: StructuredContext,\n options?: DecideNextActionOptions\n): NextActionName[] {\n const forcedRecoveryAction = getForcedRecoveryAction(context);\n if (forcedRecoveryAction) {\n return [forcedRecoveryAction];\n }\n\n const guard = context.analysis?.guardState ?? resolveGuardState(context);\n const hasResolvedGuardState = Boolean(context.analysis?.guardState);\n if (guard.continuationMode === \"terminal\") {\n return buildAllowedActionsFromGuardState(guard);\n }\n\n /**\n * Trust a resolved guard snapshot when we already have one.\n * Example: `can-research` should stay `seed-research` instead of being recomputed as `run-search`.\n *\n * Keep one narrow override for the micro-loop:\n * a stale `need-search` may advance to `run-verify` after the latest search already failed with no evidence.\n */\n if (hasResolvedGuardState && guard.continuationMode === \"need-search\" && shouldAvoidRepeatedSearch(context)) {\n return [\"run-verify\"];\n }\n if (hasResolvedGuardState) {\n const allowedFromGuard = buildAllowedActionsFromGuardState(guard).filter((action) =>\n isBridgeActionEnabled(action, options)\n );\n if (allowedFromGuard.length > 0) {\n return allowedFromGuard;\n }\n }\n\n const bridgeCandidates: Array<{\n enabled: boolean;\n matches: (context: StructuredContext) => boolean;\n action: NextActionName;\n }> = [\n {\n enabled: options?.allowRunSearch ?? true,\n matches: shouldRunSearch,\n action: \"run-search\",\n },\n {\n enabled: options?.allowRunVerify ?? true,\n matches: shouldRunVerify,\n action: \"run-verify\",\n },\n {\n enabled: options?.allowSeedResearch ?? true,\n matches: shouldSeedResearch,\n action: \"seed-research\",\n },\n {\n enabled: options?.allowSeedPlan ?? true,\n matches: shouldSeedPlan,\n action: \"seed-plan\",\n },\n ];\n\n const forcedBridge = bridgeCandidates.find(\n (candidate) => candidate.enabled && candidate.matches(context)\n );\n if (forcedBridge) {\n return [forcedBridge.action];\n }\n\n return NON_BRIDGE_ALLOWED_ACTIONS;\n}\n\nexport function buildNextActionInput(\n context: StructuredContext,\n options?: DecideNextActionOptions\n): NextActionInput {\n const steps = context.task?.steps ?? [];\n const guardState = context.analysis?.guardState ?? resolveGuardState(context);\n const progressState = context.analysis?.progressState ?? resolveProgressState(context);\n const routeLane = guardState.lane ?? context.analysis?.runtimeState?.lane ?? \"coding\";\n\n return {\n taskStatus: context.task.status,\n routeLane,\n allowedActions: buildAllowedNextActions(context, options),\n guardState,\n progressState,\n executionPolicy: context.analysis?.executionPolicy,\n readiness: context.analysis?.readiness,\n iterationReasoning: context.analysis?.iterationReasoning,\n recentActionWindow: context.analysis?.recentActionWindow,\n currentStep: context.task.currentStep,\n pendingSteps: steps\n .filter((step) => step.status !== \"completed\")\n .map((step) => ({ filePath: step.filePath, action: step.action, status: step.status })),\n completedSteps: steps\n .filter((step) => step.status === \"completed\")\n .map((step) => ({ filePath: step.filePath, action: step.action, status: step.status })),\n retryCounters: context.analysis?.attemptCounters?.retriesByTarget,\n giveUpState: context.analysis?.giveUp,\n };\n}\n\n/**\n * Keeps next-action logs focused on the final loop action, not the full upstream state.\n * Example: selector asked for continue, bridge forced run-verify -> log both actions and the override.\n */\nfunction buildDecideNextActionLog(params: {\n allowedActions: NextActionName[];\n selectorAction?: string;\n selectorReason?: string;\n decision: NextActionDecision;\n validation: NextActionValidationResult;\n forcedBridgeAction: BridgeActionName | null;\n targetFile?: string;\n}): Record<string, unknown> {\n return {\n allowedActions: params.allowedActions,\n selectorAction: params.selectorAction,\n selectorReason: params.selectorReason,\n forcedBridgeAction: params.forcedBridgeAction ?? undefined,\n targetFile: params.targetFile,\n decision: params.decision,\n validation: params.validation,\n };\n}\n\n/**\n * Normalizes the selector output to the current supported loop actions.\n * Example: missing nextAction -> continue.\n */\nexport function validateNextActionDecision(\n action: string | undefined,\n allowedActions?: NextActionName[]\n): NextActionValidationResult {\n if (action && ALLOWED_ACTIONS.has(action as NextActionName)) {\n if (allowedActions?.length && !allowedActions.includes(action as NextActionName)) {\n return {\n accepted: false,\n normalizedAction: \"continue\",\n rejectionReason: `Action not allowed in current menu: ${action}`,\n };\n }\n return {\n accepted: true,\n normalizedAction: action as NextActionName,\n };\n }\n\n return {\n accepted: false,\n normalizedAction: \"continue\",\n rejectionReason: action\n ? `Unsupported next action: ${action}`\n : \"Missing next action from iteration reasoning\",\n };\n}\n\nfunction getForcedBridgeAction(allowedActions: NextActionName[]): BridgeActionName | null {\n if (allowedActions.length !== 1) {\n return null;\n }\n\n const onlyAction = allowedActions[0];\n return NON_BRIDGE_ALLOWED_ACTIONS.includes(onlyAction)\n ? null\n : (onlyAction as BridgeActionName);\n}\n\nfunction buildForcedBridgeDecision(action: BridgeActionName): NextActionDecision {\n return {\n ...FORCED_BRIDGE_DECISIONS[action],\n };\n}\n\n/**\n * Controls the only cases where a terminal action may bypass a required bridge action.\n *\n * Examples:\n * - `run-search` forced in repo-wide evidence lane -> `complete` must not bypass\n * - continuity-local direct answer -> `complete` may bypass\n * - explicit-target answer with grounded verify/executed evidence -> `complete` may bypass\n */\nfunction canTerminalActionBypassBridge(\n guardState: GuardState,\n progressState: ProgressState,\n action: NextActionName\n): boolean {\n if (!TERMINAL_SAFE_ACTIONS.has(action)) {\n return false;\n }\n\n if (guardState.lane === \"direct-answer\") {\n return true;\n }\n\n if (progressState.continuity.localOnly || progressState.continuity.answerNow) {\n return true;\n }\n\n if (guardState.lane === \"explicit-target\" && progressState.evidenceSatisfied) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Wraps the current selector and returns one explicit decision object for the work loop.\n * Example: selector emits complete -> decision.action becomes complete with the same rationale.\n */\nexport async function decideNextAction(\n context: StructuredContext,\n options?: DecideNextActionOptions\n): Promise<NextActionDecision> {\n context.analysis ||= {};\n context.analysis.progressState = resolveProgressState(context);\n context.analysis.guardState ||= resolveGuardState(context);\n const input = buildNextActionInput(context, options);\n\n context.analysis.nextActionMenu = {\n allowedActions: input.allowedActions,\n };\n\n const runSelection = options?.runSelection ?? reasonNextStepSelection.run;\n await runSelection(context);\n\n const iteration = context.analysis?.iterationReasoning;\n const forcedBridgeAction = getForcedBridgeAction(input.allowedActions);\n const rawValidation = validateNextActionDecision(iteration?.nextAction);\n const guardState = input.guardState ?? context.analysis.guardState ?? resolveGuardState(context);\n const progressState =\n input.progressState ?? context.analysis.progressState ?? resolveProgressState(context);\n\n let validation = validateNextActionDecision(iteration?.nextAction, input.allowedActions);\n let decision: NextActionDecision;\n\n if (\n forcedBridgeAction &&\n rawValidation.accepted &&\n canTerminalActionBypassBridge(guardState, progressState, rawValidation.normalizedAction)\n ) {\n validation = rawValidation;\n decision = {\n action: rawValidation.normalizedAction,\n reason:\n iteration?.rationale?.trim() ||\n \"No explicit next action rationale provided.\",\n confidence: iteration?.confidence ?? 0.5,\n targetFile: context.task.currentStep?.filePath,\n source: \"reason-next-step-selection\",\n };\n } else if (forcedBridgeAction && validation.normalizedAction !== forcedBridgeAction) {\n decision = buildForcedBridgeDecision(forcedBridgeAction);\n validation = {\n accepted: true,\n normalizedAction: decision.action,\n };\n } else if (\n input.allowedActions.length === 1 &&\n input.allowedActions[0] === \"rework-scope\" &&\n validation.normalizedAction !== \"rework-scope\"\n ) {\n decision = {\n action: \"rework-scope\",\n reason:\n context.analysis?.recoveryEvaluation?.reason ??\n \"Outer-loop recovery marked the current target stale or wrong.\",\n confidence: 0.95,\n targetFile:\n context.analysis?.recoveryEvaluation?.targetFile ??\n context.task.currentStep?.filePath,\n source: \"reason-next-step-selection\",\n };\n validation = {\n accepted: true,\n normalizedAction: \"rework-scope\",\n };\n } else {\n const normalizedAction = validation.normalizedAction;\n decision = {\n action: normalizedAction,\n reason:\n iteration?.rationale?.trim() ||\n validation.rejectionReason ||\n \"No explicit next action rationale provided.\",\n confidence: iteration?.confidence ?? 0.5,\n targetFile: context.task.currentStep?.filePath,\n source: \"reason-next-step-selection\",\n };\n }\n\n context.analysis.nextActionDecision = decision;\n context.analysis.nextActionValidation = validation;\n\n logInputOutput(\"decideNextAction\", \"output\", buildDecideNextActionLog({\n allowedActions: input.allowedActions,\n selectorAction: iteration?.nextAction,\n selectorReason: iteration?.rationale,\n forcedBridgeAction,\n targetFile: context.task.currentStep?.filePath,\n decision,\n validation,\n }));\n\n return decision;\n}\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
export function deriveFocusFromSearchResult(context, search, options = {}) {
|
|
3
|
+
var _a, _b;
|
|
4
|
+
context.analysis || (context.analysis = {});
|
|
5
|
+
context.analysis.search = search;
|
|
6
|
+
(_a = context.analysis).focus || (_a.focus = { selectedFiles: [], candidateFiles: [] });
|
|
7
|
+
(_b = context.analysis).intent || (_b.intent = {
|
|
8
|
+
intent: "",
|
|
9
|
+
intentCategory: "request",
|
|
10
|
+
normalizedQuery: context.initContext?.userQuery ?? "",
|
|
11
|
+
confidence: 0,
|
|
12
|
+
targetFiles: [],
|
|
13
|
+
targetSymbols: [],
|
|
14
|
+
});
|
|
15
|
+
const resolvedTargetFiles = search.resolvedFiles.map(item => item.path);
|
|
16
|
+
const resolvedTargetFolders = search.resolvedFolders;
|
|
17
|
+
const resolvedTargetSymbols = search.resolvedSymbols.map(item => item.symbol);
|
|
18
|
+
const previousResolvedTargetFiles = context.analysis.focus.resolvedTargetFiles ?? [];
|
|
19
|
+
const previousResolvedTargetFolders = context.analysis.focus.resolvedTargetFolders ?? [];
|
|
20
|
+
const previousResolvedTargetSymbols = context.analysis.focus.resolvedTargetSymbols ?? [];
|
|
21
|
+
const nextSelected = new Set(context.analysis.focus.selectedFiles ?? []);
|
|
22
|
+
const nextCandidates = new Set(options.appendCandidates ? context.analysis.focus.candidateFiles ?? [] : []);
|
|
23
|
+
// Keep exact-target discoveries sticky across later broad searches.
|
|
24
|
+
// Example: exact-target resolves `MainAgent.ts`, then semantic retrieval runs later.
|
|
25
|
+
// We must not clear the explicit target signal just because semantic search has no resolvedFiles field.
|
|
26
|
+
const nextResolvedTargetFiles = keepExactTargetStateSticky(search.mode, previousResolvedTargetFiles, resolvedTargetFiles);
|
|
27
|
+
const nextResolvedTargetFolders = keepExactTargetStateSticky(search.mode, previousResolvedTargetFolders, resolvedTargetFolders);
|
|
28
|
+
const nextResolvedTargetSymbols = keepExactTargetStateSticky(search.mode, previousResolvedTargetSymbols, resolvedTargetSymbols);
|
|
29
|
+
for (const filePath of nextResolvedTargetFiles) {
|
|
30
|
+
nextSelected.add(filePath);
|
|
31
|
+
}
|
|
32
|
+
const shouldPromoteOperatorMatches = search.mode !== "operator-pattern" || options.promoteOperatorMatchesToCandidates === true;
|
|
33
|
+
const shouldPromoteFolderMatches = search.mode === "exact-target" && nextResolvedTargetFolders.length > 0;
|
|
34
|
+
if ((search.mode !== "exact-target" && shouldPromoteOperatorMatches) || shouldPromoteFolderMatches) {
|
|
35
|
+
for (const candidate of search.fileCandidates) {
|
|
36
|
+
if (!nextSelected.has(candidate.path)) {
|
|
37
|
+
nextCandidates.add(candidate.path);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
context.analysis.focus.resolvedTargetFiles = normalizeCanonicalFilePaths(nextResolvedTargetFiles);
|
|
42
|
+
context.analysis.focus.resolvedTargetFolders = nextResolvedTargetFolders;
|
|
43
|
+
context.analysis.focus.resolvedTargetSymbols = nextResolvedTargetSymbols;
|
|
44
|
+
context.analysis.focus.selectedFiles = normalizeCanonicalFilePaths(Array.from(nextSelected));
|
|
45
|
+
context.analysis.focus.candidateFiles = normalizeCanonicalFilePaths(Array.from(nextCandidates).filter(filePath => !nextSelected.has(filePath)));
|
|
46
|
+
// Keep compatibility fields alive while routing and downstream consumers migrate.
|
|
47
|
+
context.analysis.intent.resolvedTargetFiles = context.analysis.focus.resolvedTargetFiles;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Keeps exact-target discoveries sticky until a later exact-target pass replaces them.
|
|
51
|
+
* Example: `["MainAgent.ts"]` + later semantic retrieval `[]` still keeps `["MainAgent.ts"]`.
|
|
52
|
+
*/
|
|
53
|
+
function keepExactTargetStateSticky(valuesMode, previous, next) {
|
|
54
|
+
if (valuesMode === "exact-target") {
|
|
55
|
+
return next;
|
|
56
|
+
}
|
|
57
|
+
return Array.from(new Set([...previous, ...next]));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Keeps compatibility file lists canonical.
|
|
61
|
+
* Examples:
|
|
62
|
+
* - "/repo/a.ts" -> keep
|
|
63
|
+
* - "db/fileIndex.ts" -> drop because search should already have resolved it
|
|
64
|
+
* - "__research__/impact-map" -> drop because research pseudo-paths are not file focus
|
|
65
|
+
*/
|
|
66
|
+
function normalizeCanonicalFilePaths(paths) {
|
|
67
|
+
const out = new Set();
|
|
68
|
+
for (const filePath of paths) {
|
|
69
|
+
const trimmed = String(filePath ?? "").trim();
|
|
70
|
+
if (!trimmed || trimmed.startsWith("__research__/") || !path.isAbsolute(trimmed)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
out.add(path.normalize(trimmed));
|
|
74
|
+
}
|
|
75
|
+
return Array.from(out);
|
|
76
|
+
}
|
|
77
|
+
export const deriveFocusFromSearchStep = {
|
|
78
|
+
name: "deriveFocusFromSearch",
|
|
79
|
+
run(context, search, options) {
|
|
80
|
+
deriveFocusFromSearchResult(context, search, options);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=deriveFocusFromSearchStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveFocusFromSearchStep.js","sourceRoot":"","sources":["../../src/agents/deriveFocusFromSearchStep.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derives focus and routing-ready target fields from the latest search packet.\n *\n * Why this file exists:\n * - search should only report discovery facts\n * - focus owns \"what do we act on next?\"\n * - existing fields like `selectedFiles` and `candidateFiles` still need to exist for compatibility\n *\n * Example:\n * - exact target search resolves `MainAgent.ts` -> selectedFiles includes that file\n * - semantic retrieval finds 8 likely files -> candidateFiles includes them, but selectedFiles stays empty\n * - operator-pattern search returns raw matches -> candidates stay empty unless a caller opts in\n */\nimport type { SearchOrchestratorResult, StructuredContext } from \"../types.js\";\nimport path from \"path\";\n\ntype DeriveFocusFromSearchOptions = {\n source?: string;\n promoteOperatorMatchesToCandidates?: boolean;\n appendCandidates?: boolean;\n};\n\nexport function deriveFocusFromSearchResult(\n context: StructuredContext,\n search: SearchOrchestratorResult,\n options: DeriveFocusFromSearchOptions = {}\n): void {\n context.analysis ||= {};\n context.analysis.search = search;\n context.analysis.focus ||= { selectedFiles: [], candidateFiles: [] };\n context.analysis.intent ||= {\n intent: \"\",\n intentCategory: \"request\",\n normalizedQuery: context.initContext?.userQuery ?? \"\",\n confidence: 0,\n targetFiles: [],\n targetSymbols: [],\n };\n\n const resolvedTargetFiles = search.resolvedFiles.map(item => item.path);\n const resolvedTargetFolders = search.resolvedFolders;\n const resolvedTargetSymbols = search.resolvedSymbols.map(item => item.symbol);\n const previousResolvedTargetFiles = context.analysis.focus.resolvedTargetFiles ?? [];\n const previousResolvedTargetFolders = context.analysis.focus.resolvedTargetFolders ?? [];\n const previousResolvedTargetSymbols = context.analysis.focus.resolvedTargetSymbols ?? [];\n\n const nextSelected = new Set(context.analysis.focus.selectedFiles ?? []);\n const nextCandidates = new Set(options.appendCandidates ? context.analysis.focus.candidateFiles ?? [] : []);\n\n // Keep exact-target discoveries sticky across later broad searches.\n // Example: exact-target resolves `MainAgent.ts`, then semantic retrieval runs later.\n // We must not clear the explicit target signal just because semantic search has no resolvedFiles field.\n const nextResolvedTargetFiles = keepExactTargetStateSticky(\n search.mode,\n previousResolvedTargetFiles,\n resolvedTargetFiles\n );\n const nextResolvedTargetFolders = keepExactTargetStateSticky(\n search.mode,\n previousResolvedTargetFolders,\n resolvedTargetFolders\n );\n const nextResolvedTargetSymbols = keepExactTargetStateSticky(\n search.mode,\n previousResolvedTargetSymbols,\n resolvedTargetSymbols\n );\n\n for (const filePath of nextResolvedTargetFiles) {\n nextSelected.add(filePath);\n }\n\n const shouldPromoteOperatorMatches =\n search.mode !== \"operator-pattern\" || options.promoteOperatorMatchesToCandidates === true;\n const shouldPromoteFolderMatches =\n search.mode === \"exact-target\" && nextResolvedTargetFolders.length > 0;\n if ((search.mode !== \"exact-target\" && shouldPromoteOperatorMatches) || shouldPromoteFolderMatches) {\n for (const candidate of search.fileCandidates) {\n if (!nextSelected.has(candidate.path)) {\n nextCandidates.add(candidate.path);\n }\n }\n }\n\n context.analysis.focus.resolvedTargetFiles = normalizeCanonicalFilePaths(nextResolvedTargetFiles);\n context.analysis.focus.resolvedTargetFolders = nextResolvedTargetFolders;\n context.analysis.focus.resolvedTargetSymbols = nextResolvedTargetSymbols;\n context.analysis.focus.selectedFiles = normalizeCanonicalFilePaths(Array.from(nextSelected));\n context.analysis.focus.candidateFiles = normalizeCanonicalFilePaths(\n Array.from(nextCandidates).filter(filePath => !nextSelected.has(filePath))\n );\n\n // Keep compatibility fields alive while routing and downstream consumers migrate.\n context.analysis.intent.resolvedTargetFiles = context.analysis.focus.resolvedTargetFiles;\n}\n\n/**\n * Keeps exact-target discoveries sticky until a later exact-target pass replaces them.\n * Example: `[\"MainAgent.ts\"]` + later semantic retrieval `[]` still keeps `[\"MainAgent.ts\"]`.\n */\nfunction keepExactTargetStateSticky(valuesMode: SearchOrchestratorResult[\"mode\"], previous: string[], next: string[]): string[] {\n if (valuesMode === \"exact-target\") {\n return next;\n }\n return Array.from(new Set([...previous, ...next]));\n}\n\n/**\n * Keeps compatibility file lists canonical.\n * Examples:\n * - \"/repo/a.ts\" -> keep\n * - \"db/fileIndex.ts\" -> drop because search should already have resolved it\n * - \"__research__/impact-map\" -> drop because research pseudo-paths are not file focus\n */\nfunction normalizeCanonicalFilePaths(paths: string[]): string[] {\n const out = new Set<string>();\n for (const filePath of paths) {\n const trimmed = String(filePath ?? \"\").trim();\n if (!trimmed || trimmed.startsWith(\"__research__/\") || !path.isAbsolute(trimmed)) {\n continue;\n }\n out.add(path.normalize(trimmed));\n }\n return Array.from(out);\n}\n\nexport const deriveFocusFromSearchStep = {\n name: \"deriveFocusFromSearch\",\n\n run(\n context: StructuredContext,\n search: SearchOrchestratorResult,\n options?: DeriveFocusFromSearchOptions\n ): void {\n deriveFocusFromSearchResult(context, search, options);\n },\n};\n"]}
|