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
|
@@ -1,15 +1,94 @@
|
|
|
1
1
|
import { logInputOutput } from "../utils/promptLogHelper.js";
|
|
2
|
+
import { resolveProgressState } from "./guards/resolveProgressState.js";
|
|
3
|
+
function actionAllowed(allowedActions, action) {
|
|
4
|
+
return allowedActions.length === 0 || allowedActions.includes(action);
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
|
-
*
|
|
7
|
+
* Keeps next-step logs focused on the decision this step made.
|
|
8
|
+
* Example: selected "continue" on foo.ts -> log action, reason, target, and current step only.
|
|
9
|
+
*/
|
|
10
|
+
function buildReasonNextTaskStepLog(context, extras) {
|
|
11
|
+
const iteration = context.analysis?.iterationReasoning;
|
|
12
|
+
const payload = {
|
|
13
|
+
nextAction: iteration?.nextAction,
|
|
14
|
+
rationale: iteration?.rationale,
|
|
15
|
+
confidence: iteration?.confidence,
|
|
16
|
+
currentStep: context.task.currentStep,
|
|
17
|
+
nextTargets: iteration?.nextTargets,
|
|
18
|
+
};
|
|
19
|
+
if (!extras) {
|
|
20
|
+
return payload;
|
|
21
|
+
}
|
|
22
|
+
if ((extras.redoFiles?.length ?? 0) > 0) {
|
|
23
|
+
payload.redoFiles = extras.redoFiles;
|
|
24
|
+
}
|
|
25
|
+
if ((extras.remainingFiles?.length ?? 0) > 0) {
|
|
26
|
+
payload.remainingFiles = extras.remainingFiles;
|
|
27
|
+
}
|
|
28
|
+
if (extras?.pendingResearch) {
|
|
29
|
+
payload.pendingResearch = extras.pendingResearch;
|
|
30
|
+
}
|
|
31
|
+
if ((extras.expansionFiles?.length ?? 0) > 0) {
|
|
32
|
+
payload.expansionFiles = extras.expansionFiles;
|
|
33
|
+
}
|
|
34
|
+
if ((extras.expansionQueries?.length ?? 0) > 0) {
|
|
35
|
+
payload.expansionQueries = extras.expansionQueries;
|
|
36
|
+
}
|
|
37
|
+
if (extras?.noScopedFilesDiagnostic) {
|
|
38
|
+
payload.noScopedFilesDiagnostic = extras.noScopedFilesDiagnostic;
|
|
39
|
+
}
|
|
40
|
+
return payload;
|
|
41
|
+
}
|
|
42
|
+
function pickQuestionScopedFile(context, candidates) {
|
|
43
|
+
if (candidates.length === 0)
|
|
44
|
+
return undefined;
|
|
45
|
+
const latest = context.analysis?.recentActionWindow?.latest;
|
|
46
|
+
if (!latest)
|
|
47
|
+
return candidates[0];
|
|
48
|
+
if (latest.questionId) {
|
|
49
|
+
const scopedStep = (context.task.steps ?? []).find((step) => step.questionId === latest.questionId && candidates.includes(step.filePath));
|
|
50
|
+
if (scopedStep?.filePath) {
|
|
51
|
+
return scopedStep.filePath;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const touched = latest.touchedFiles ?? [];
|
|
55
|
+
const touchedCandidate = touched.find((filePath) => candidates.includes(filePath));
|
|
56
|
+
if (touchedCandidate) {
|
|
57
|
+
return touchedCandidate;
|
|
58
|
+
}
|
|
59
|
+
return candidates[0];
|
|
60
|
+
}
|
|
61
|
+
function pickQuestionIdForNextFile(context, nextFile) {
|
|
62
|
+
if (!nextFile)
|
|
63
|
+
return undefined;
|
|
64
|
+
const existing = (context.task.steps ?? []).find((step) => step.filePath === nextFile);
|
|
65
|
+
if (existing?.questionId) {
|
|
66
|
+
return existing.questionId;
|
|
67
|
+
}
|
|
68
|
+
const latestQuestionId = context.analysis?.recentActionWindow?.latest?.questionId;
|
|
69
|
+
if (latestQuestionId) {
|
|
70
|
+
return latestQuestionId;
|
|
71
|
+
}
|
|
72
|
+
const questions = context.analysis?.intent?.questions ?? [];
|
|
73
|
+
if (questions.length === 1) {
|
|
74
|
+
return questions[0].id;
|
|
75
|
+
}
|
|
76
|
+
const matchingQuestion = questions.find((question) => (question.targetFiles ?? []).some((target) => target === nextFile || nextFile.endsWith(String(target))));
|
|
77
|
+
return matchingQuestion?.id;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* REASON NEXT STEP SELECTION
|
|
81
|
+
*
|
|
82
|
+
* Determines the next non-bridge loop action from the current bounded menu.
|
|
4
83
|
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
84
|
+
* Why this exists:
|
|
85
|
+
* - bridge actions like run-search/run-verify/seed-* are computed upstream
|
|
86
|
+
* - this step reasons only within the currently allowed task-level action menu
|
|
87
|
+
* - decideNextAction still validates the chosen action against that menu
|
|
9
88
|
*
|
|
10
|
-
* Creates a
|
|
89
|
+
* Creates a durable Step if none exists and sets context.task.currentStep.
|
|
11
90
|
*/
|
|
12
|
-
export const
|
|
91
|
+
export const reasonNextStepSelection = {
|
|
13
92
|
name: "reasonNextTaskStep",
|
|
14
93
|
description: "Reasons over working files and execution artifacts to decide the next task step.",
|
|
15
94
|
async run(context) {
|
|
@@ -19,32 +98,78 @@ export const reasonNextTaskStep = {
|
|
|
19
98
|
}
|
|
20
99
|
context.analysis || (context.analysis = {});
|
|
21
100
|
context.execution || (context.execution = {});
|
|
22
|
-
(_a = context.task).
|
|
101
|
+
(_a = context.task).steps || (_a.steps = []);
|
|
23
102
|
(_b = context.analysis).iterationReasoning || (_b.iterationReasoning = {
|
|
24
103
|
summary: "",
|
|
25
104
|
nextAction: "continue",
|
|
26
105
|
rationale: "",
|
|
27
106
|
confidence: 0.5,
|
|
28
107
|
});
|
|
108
|
+
const allowedActions = context.analysis.nextActionMenu?.allowedActions ?? [];
|
|
29
109
|
const iteration = context.analysis.iterationReasoning;
|
|
110
|
+
const giveUp = context.analysis.giveUp;
|
|
111
|
+
const executionPolicy = context.analysis.executionPolicy;
|
|
112
|
+
const progressState = resolveProgressState(context);
|
|
113
|
+
if (progressState.completion.eligible &&
|
|
114
|
+
actionAllowed(allowedActions, "complete")) {
|
|
115
|
+
context.task.status = "completed";
|
|
116
|
+
context.task.currentStep = undefined;
|
|
117
|
+
context.analysis.iterationReasoning = {
|
|
118
|
+
...iteration,
|
|
119
|
+
nextAction: "complete",
|
|
120
|
+
rationale: progressState.completion.reason,
|
|
121
|
+
confidence: 0.99,
|
|
122
|
+
summary: "Task step decision: complete (objective satisfied)",
|
|
123
|
+
};
|
|
124
|
+
logInputOutput("reasonNextTaskStep", "output", buildReasonNextTaskStepLog(context));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (giveUp?.status === "triggered") {
|
|
128
|
+
context.task.status = "gave-up";
|
|
129
|
+
context.task.reason = giveUp.rationale;
|
|
130
|
+
context.task.currentStep = undefined;
|
|
131
|
+
context.analysis.iterationReasoning = {
|
|
132
|
+
...iteration,
|
|
133
|
+
nextAction: "give-up",
|
|
134
|
+
rationale: giveUp.rationale ?? "Give-up policy triggered.",
|
|
135
|
+
confidence: 0.98,
|
|
136
|
+
summary: "Task step decision: give-up",
|
|
137
|
+
};
|
|
138
|
+
logInputOutput("reasonNextTaskStep", "output", buildReasonNextTaskStepLog(context));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
30
141
|
// ---------------------------
|
|
31
142
|
// 1️⃣ Determine intended files (deduplicated)
|
|
32
143
|
// ---------------------------
|
|
33
|
-
const plannedExecutionFiles = context.task.
|
|
144
|
+
const plannedExecutionFiles = context.task.steps
|
|
34
145
|
.filter(step => !!step.filePath &&
|
|
35
146
|
!step.filePath.startsWith("__research__/"))
|
|
36
147
|
.map(step => step.filePath)
|
|
37
148
|
.filter((filePath, index, all) => all.indexOf(filePath) === index);
|
|
38
|
-
const
|
|
39
|
-
...(
|
|
149
|
+
const requiredLaneFiles = Array.from(new Set([
|
|
150
|
+
...(executionPolicy?.executionRequired ??
|
|
151
|
+
context.analysis.focus?.executionRequired ??
|
|
152
|
+
context.analysis.focus?.selectedFiles ??
|
|
153
|
+
[]),
|
|
40
154
|
...(context.workingFiles?.map(f => f.path).filter(Boolean) ?? []),
|
|
41
155
|
]));
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
156
|
+
const explorationLaneFiles = Array.from(new Set([
|
|
157
|
+
...(executionPolicy?.explorationCandidates ??
|
|
158
|
+
context.analysis.focus?.explorationCandidates ??
|
|
159
|
+
context.analysis.focus?.candidateFiles ??
|
|
160
|
+
[]),
|
|
47
161
|
]));
|
|
162
|
+
const intendedFiles = Array.from(new Set([...plannedExecutionFiles, ...requiredLaneFiles]));
|
|
163
|
+
const noScopedFilesDiagnostic = intendedFiles.length === 0
|
|
164
|
+
? {
|
|
165
|
+
selectedFiles: context.analysis.focus?.selectedFiles ?? [],
|
|
166
|
+
executionRequired: executionPolicy?.executionRequired ?? [],
|
|
167
|
+
resolvedTargetFiles: context.analysis.focus?.resolvedTargetFiles ??
|
|
168
|
+
context.analysis.intent?.resolvedTargetFiles ??
|
|
169
|
+
[],
|
|
170
|
+
relatedFiles: context.initContext?.relatedFiles ?? [],
|
|
171
|
+
}
|
|
172
|
+
: undefined;
|
|
48
173
|
// ---------------------------
|
|
49
174
|
// 2️⃣ Transformed and analyzed files
|
|
50
175
|
// ---------------------------
|
|
@@ -53,54 +178,24 @@ export const reasonNextTaskStep = {
|
|
|
53
178
|
.filter(([_, fa]) => fa.semanticAnalyzed)
|
|
54
179
|
.map(([path]) => path);
|
|
55
180
|
const fileAnalysis = context.analysis.fileAnalysis ?? {};
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
// 2.5️⃣ Prioritize pending research steps
|
|
59
|
-
// ---------------------------
|
|
60
|
-
const pendingResearchStep = taskSteps.find(step => typeof step.action === "string" &&
|
|
181
|
+
const steps = context.task.steps;
|
|
182
|
+
const pendingResearchStep = steps.find(step => typeof step.action === "string" &&
|
|
61
183
|
step.action.startsWith("research-") &&
|
|
62
184
|
step.status !== "completed");
|
|
63
|
-
if (pendingResearchStep) {
|
|
185
|
+
if (progressState.research.status === "required" && pendingResearchStep) {
|
|
64
186
|
context.task.currentStep = pendingResearchStep;
|
|
65
187
|
context.analysis.iterationReasoning = {
|
|
66
188
|
...iteration,
|
|
67
189
|
nextAction: "continue",
|
|
68
|
-
rationale:
|
|
190
|
+
rationale: progressState.research.reason,
|
|
69
191
|
confidence: 0.95,
|
|
70
192
|
nextTargets: { files: [pendingResearchStep.filePath] },
|
|
71
193
|
summary: "Task step decision: continue (research priority)",
|
|
72
194
|
};
|
|
73
195
|
logInputOutput("reasonNextTaskStep", "output", {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
// ---------------------------
|
|
80
|
-
// 2.6️⃣ Architecture-summary completion gate
|
|
81
|
-
// ---------------------------
|
|
82
|
-
const intentCategory = (context.analysis.intent?.intentCategory ?? "").toLowerCase();
|
|
83
|
-
const isSummaryLikeIntent = intentCategory === "question" || intentCategory === "explanation";
|
|
84
|
-
const synthesisCompleted = taskSteps.some(step => step.action === "research-architecture-synthesis" &&
|
|
85
|
-
step.status === "completed");
|
|
86
|
-
const tierCoverage = computeTierCoverage(context, intendedFiles, analyzedFiles, transformedFiles, taskSteps);
|
|
87
|
-
if (isSummaryLikeIntent && synthesisCompleted && tierCoverage.satisfied) {
|
|
88
|
-
context.task.status = "completed";
|
|
89
|
-
context.task.currentStep = undefined;
|
|
90
|
-
context.analysis.iterationReasoning = {
|
|
91
|
-
...iteration,
|
|
92
|
-
nextAction: "complete",
|
|
93
|
-
rationale: `Architecture summary ready after synthesis and tiered coverage (tier1 ${tierCoverage.tier1.covered}/${tierCoverage.tier1.target}, tier2 ${tierCoverage.tier2.covered}/${tierCoverage.tier2.target}, overall ${tierCoverage.overall.covered}/${tierCoverage.overall.target}).`,
|
|
94
|
-
confidence: 0.98,
|
|
95
|
-
redoFiles: [],
|
|
96
|
-
nextTargets: { files: [] },
|
|
97
|
-
summary: "Task step decision: complete (synthesis + tiered coverage)",
|
|
98
|
-
};
|
|
99
|
-
logInputOutput("reasonNextTaskStep", "output", {
|
|
100
|
-
intentCategory,
|
|
101
|
-
synthesisCompleted,
|
|
102
|
-
tiers: tierCoverage,
|
|
103
|
-
iterationReasoning: context.analysis.iterationReasoning,
|
|
196
|
+
...buildReasonNextTaskStepLog(context, {
|
|
197
|
+
pendingResearch: pendingResearchStep,
|
|
198
|
+
}),
|
|
104
199
|
});
|
|
105
200
|
return;
|
|
106
201
|
}
|
|
@@ -109,7 +204,7 @@ export const reasonNextTaskStep = {
|
|
|
109
204
|
// ---------------------------
|
|
110
205
|
for (const path of analyzedFiles) {
|
|
111
206
|
const fa = fileAnalysis[path];
|
|
112
|
-
const step =
|
|
207
|
+
const step = steps.find(s => s.filePath === path);
|
|
113
208
|
if (!step)
|
|
114
209
|
continue;
|
|
115
210
|
if (fa?.semanticAnalyzed && context.executionControl?.constraints?.allowFileWrites === false) {
|
|
@@ -122,50 +217,110 @@ export const reasonNextTaskStep = {
|
|
|
122
217
|
// ---------------------------
|
|
123
218
|
// 4️⃣ Validation-based redo
|
|
124
219
|
// ---------------------------
|
|
125
|
-
const
|
|
126
|
-
const redoFiles = validations.filter(v => v.requiresRedo && v.filePath).map(v => v.filePath);
|
|
220
|
+
const redoFiles = progressState.redoTargets;
|
|
127
221
|
iteration.redoFiles = redoFiles;
|
|
128
222
|
// ---------------------------
|
|
223
|
+
// 4.5️⃣ Trail expansion signal
|
|
224
|
+
// ---------------------------
|
|
225
|
+
const trail = context.analysis.trail;
|
|
226
|
+
const expansionRequest = context.analysis.expansionRequest;
|
|
227
|
+
const trailFrontier = (trail?.frontier ?? [])
|
|
228
|
+
.filter(candidate => (candidate.confidence ?? 0) >= 0.58)
|
|
229
|
+
.map(candidate => candidate.filePath)
|
|
230
|
+
.filter(Boolean);
|
|
231
|
+
const expansionFiles = Array.from(new Set([
|
|
232
|
+
...(expansionRequest?.files ?? []),
|
|
233
|
+
...trailFrontier,
|
|
234
|
+
]));
|
|
235
|
+
const expansionQueries = Array.from(new Set([
|
|
236
|
+
...(expansionRequest?.queries ?? []),
|
|
237
|
+
...(trailFrontier.length > 0 ? (trail?.pendingQueries ?? []) : []),
|
|
238
|
+
])).slice(0, 6);
|
|
239
|
+
const hasExpansionSignal = expansionFiles.length > 0 || expansionQueries.length > 0;
|
|
240
|
+
// ---------------------------
|
|
129
241
|
// 5️⃣ Task-level reasoning (cross-file)
|
|
130
242
|
// ---------------------------
|
|
131
|
-
// Instead of deriving remainingFiles from artifacts, use
|
|
132
|
-
const pendingFiles =
|
|
133
|
-
const step = taskSteps.find(s => s.filePath === path);
|
|
134
|
-
return !step || step.status !== "completed";
|
|
135
|
-
});
|
|
243
|
+
// Instead of deriving remainingFiles from artifacts, use durable step status.
|
|
244
|
+
const pendingFiles = progressState.requiredTargets.filter((path) => !progressState.completedTargets.includes(path) && !progressState.redoTargets.includes(path) && !progressState.blockedTargets.includes(path));
|
|
136
245
|
// ---------------------------
|
|
137
246
|
// 🛑 Deterministic Completion Gate
|
|
138
247
|
// ---------------------------
|
|
139
|
-
const isDeterministicallyComplete =
|
|
140
|
-
pendingFiles.length === 0;
|
|
248
|
+
const isDeterministicallyComplete = progressState.completion.eligible;
|
|
141
249
|
if (isDeterministicallyComplete) {
|
|
250
|
+
const shouldRunOptionalExploration = !!executionPolicy?.explorationReady &&
|
|
251
|
+
!executionPolicy?.executionLock?.enabled &&
|
|
252
|
+
progressState.optionalTargets.length > 0;
|
|
253
|
+
if (hasExpansionSignal || shouldRunOptionalExploration) {
|
|
254
|
+
context.task.currentStep = undefined;
|
|
255
|
+
context.analysis.iterationReasoning = {
|
|
256
|
+
...iteration,
|
|
257
|
+
nextAction: "expand-scope",
|
|
258
|
+
rationale: hasExpansionSignal
|
|
259
|
+
? `Trail expansion requested (${expansionFiles.length} file(s), ${expansionQueries.length} query term(s)).`
|
|
260
|
+
: `Execution lane complete; optional exploration lane has ${explorationLaneFiles.length} candidate file(s).`,
|
|
261
|
+
confidence: 0.86,
|
|
262
|
+
redoFiles: [],
|
|
263
|
+
nextTargets: {
|
|
264
|
+
files: hasExpansionSignal ? expansionFiles : progressState.optionalTargets,
|
|
265
|
+
searchQueries: expansionQueries,
|
|
266
|
+
},
|
|
267
|
+
summary: "Task step decision: expand-scope",
|
|
268
|
+
};
|
|
269
|
+
logInputOutput("reasonNextTaskStep", "output", {
|
|
270
|
+
...buildReasonNextTaskStepLog(context, {
|
|
271
|
+
redoFiles,
|
|
272
|
+
expansionFiles,
|
|
273
|
+
expansionQueries,
|
|
274
|
+
noScopedFilesDiagnostic,
|
|
275
|
+
}),
|
|
276
|
+
});
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (!actionAllowed(allowedActions, "complete")) {
|
|
280
|
+
context.task.currentStep = undefined;
|
|
281
|
+
context.analysis.iterationReasoning = {
|
|
282
|
+
...iteration,
|
|
283
|
+
nextAction: "continue",
|
|
284
|
+
rationale: "Deterministic completion is blocked until the current loop bridge runs.",
|
|
285
|
+
confidence: 0.92,
|
|
286
|
+
redoFiles: [],
|
|
287
|
+
nextTargets: { files: [] },
|
|
288
|
+
summary: "Task step decision: continue (bridge pending)",
|
|
289
|
+
};
|
|
290
|
+
logInputOutput("reasonNextTaskStep", "output", {
|
|
291
|
+
...buildReasonNextTaskStepLog(context, {
|
|
292
|
+
redoFiles,
|
|
293
|
+
noScopedFilesDiagnostic,
|
|
294
|
+
}),
|
|
295
|
+
});
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
142
298
|
// ✅ mark task as completed
|
|
143
299
|
context.task.status = "completed";
|
|
144
300
|
context.task.currentStep = undefined;
|
|
145
301
|
context.analysis.iterationReasoning = {
|
|
146
302
|
...iteration,
|
|
147
303
|
nextAction: "complete",
|
|
148
|
-
rationale:
|
|
304
|
+
rationale: progressState.completion.reason,
|
|
149
305
|
confidence: 1.0,
|
|
150
306
|
redoFiles: [],
|
|
151
307
|
nextTargets: { files: [] },
|
|
152
308
|
summary: "Task step decision: complete",
|
|
153
309
|
};
|
|
154
310
|
logInputOutput("reasonNextTaskStep", "output", {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
iterationReasoning: context.analysis.iterationReasoning,
|
|
311
|
+
...buildReasonNextTaskStepLog(context, {
|
|
312
|
+
redoFiles,
|
|
313
|
+
noScopedFilesDiagnostic,
|
|
314
|
+
}),
|
|
160
315
|
});
|
|
161
316
|
return; // 🔴 HARD EXIT — skip Step 6 and risk reasoning entirely
|
|
162
317
|
}
|
|
163
318
|
// ---------------------------
|
|
164
319
|
// Task-level reasoning (cross-file)
|
|
165
320
|
// ---------------------------
|
|
166
|
-
// Remaining work should respect
|
|
321
|
+
// Remaining work should respect durable step completion state first.
|
|
167
322
|
// This avoids re-selecting files that were completed via analyze-only fallback.
|
|
168
|
-
const remainingFiles = pendingFiles.filter(path => !redoFiles.includes(path));
|
|
323
|
+
const remainingFiles = pendingFiles.filter((path) => !redoFiles.includes(path));
|
|
169
324
|
// ---------------------------
|
|
170
325
|
// Decide next step
|
|
171
326
|
// ---------------------------
|
|
@@ -175,20 +330,30 @@ export const reasonNextTaskStep = {
|
|
|
175
330
|
let nextFile;
|
|
176
331
|
if (redoFiles.length > 0) {
|
|
177
332
|
nextAction = "redo-step";
|
|
178
|
-
rationale =
|
|
333
|
+
rationale = progressState.completion.reason;
|
|
179
334
|
nextFile = redoFiles[0];
|
|
180
335
|
confidence = 0.7;
|
|
181
336
|
}
|
|
337
|
+
else if (hasExpansionSignal) {
|
|
338
|
+
nextAction = "expand-scope";
|
|
339
|
+
rationale = `Trail expansion requested from prior research (${expansionFiles.length} file(s), ${expansionQueries.length} query term(s)).`;
|
|
340
|
+
confidence = 0.86;
|
|
341
|
+
}
|
|
182
342
|
else if (remainingFiles.length > 0) {
|
|
183
343
|
nextAction = "continue";
|
|
184
|
-
rationale = `
|
|
185
|
-
nextFile = remainingFiles
|
|
344
|
+
rationale = `Required targets remain unresolved: ${remainingFiles.join(", ")}`;
|
|
345
|
+
nextFile = pickQuestionScopedFile(context, remainingFiles);
|
|
186
346
|
confidence = 0.95;
|
|
187
347
|
}
|
|
348
|
+
else if (!progressState.evidenceSatisfied && progressState.optionalTargets.length > 0) {
|
|
349
|
+
nextAction = "expand-scope";
|
|
350
|
+
rationale = `Need grounded evidence before completion; ${progressState.optionalTargets.length} candidate file(s) remain to explore.`;
|
|
351
|
+
confidence = 0.9;
|
|
352
|
+
}
|
|
188
353
|
else {
|
|
189
|
-
nextAction = "complete";
|
|
190
|
-
rationale =
|
|
191
|
-
confidence = 0.98;
|
|
354
|
+
nextAction = progressState.completion.eligible ? "complete" : "continue";
|
|
355
|
+
rationale = progressState.completion.reason;
|
|
356
|
+
confidence = progressState.completion.eligible ? 0.98 : 0.86;
|
|
192
357
|
}
|
|
193
358
|
/* // ---------------------------
|
|
194
359
|
// 6.5️⃣ Optional: Reason over known risks
|
|
@@ -239,17 +404,24 @@ Task:
|
|
|
239
404
|
}
|
|
240
405
|
} */
|
|
241
406
|
// ---------------------------
|
|
242
|
-
// 7️⃣ Ensure a
|
|
407
|
+
// 7️⃣ Ensure a durable Step exists for nextFile
|
|
243
408
|
// ---------------------------
|
|
244
409
|
if (nextFile) {
|
|
245
|
-
let nextStep =
|
|
410
|
+
let nextStep = steps.find(s => s.filePath === nextFile);
|
|
411
|
+
const nextQuestionId = pickQuestionIdForNextFile(context, nextFile);
|
|
246
412
|
if (!nextStep) {
|
|
247
413
|
nextStep = {
|
|
248
414
|
taskId: context.task.id,
|
|
249
415
|
filePath: nextFile,
|
|
250
416
|
status: "pending",
|
|
417
|
+
questionId: nextQuestionId,
|
|
418
|
+
stepQuestions: nextQuestionId ? [nextQuestionId] : undefined,
|
|
251
419
|
};
|
|
252
|
-
context.task.
|
|
420
|
+
context.task.steps.push(nextStep);
|
|
421
|
+
}
|
|
422
|
+
if (!nextStep.questionId && nextQuestionId) {
|
|
423
|
+
nextStep.questionId = nextQuestionId;
|
|
424
|
+
nextStep.stepQuestions = [nextQuestionId];
|
|
253
425
|
}
|
|
254
426
|
if (nextAction === "redo-step") {
|
|
255
427
|
nextStep.status = "pending";
|
|
@@ -269,73 +441,24 @@ Task:
|
|
|
269
441
|
nextAction,
|
|
270
442
|
rationale,
|
|
271
443
|
confidence,
|
|
272
|
-
nextTargets:
|
|
444
|
+
nextTargets: nextAction === "expand-scope"
|
|
445
|
+
? {
|
|
446
|
+
files: expansionFiles.length > 0 ? expansionFiles : progressState.optionalTargets,
|
|
447
|
+
searchQueries: expansionQueries,
|
|
448
|
+
}
|
|
449
|
+
: { files: Array.from(new Set(redoFiles.length > 0 ? redoFiles : remainingFiles)) },
|
|
273
450
|
summary: `Task step decision: ${nextAction}`,
|
|
274
451
|
};
|
|
275
452
|
logInputOutput("reasonNextTaskStep", "output", {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
453
|
+
...buildReasonNextTaskStepLog(context, {
|
|
454
|
+
redoFiles,
|
|
455
|
+
remainingFiles,
|
|
456
|
+
expansionFiles: nextAction === "expand-scope" ? expansionFiles : undefined,
|
|
457
|
+
expansionQueries: nextAction === "expand-scope" ? expansionQueries : undefined,
|
|
458
|
+
noScopedFilesDiagnostic,
|
|
459
|
+
}),
|
|
283
460
|
});
|
|
284
461
|
},
|
|
285
462
|
};
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
* Tier1 is highest-priority, tier2 is remaining selected, tier3 is the rest.
|
|
289
|
-
*/
|
|
290
|
-
function computeTierCoverage(context, intendedFiles, analyzedFiles, transformedFiles, taskSteps) {
|
|
291
|
-
const selectedSet = new Set(context.analysis?.focus?.selectedFiles ?? []);
|
|
292
|
-
const researchTouchedSet = new Set(context.analysis?.researchArtifacts?.touchedFiles ?? []);
|
|
293
|
-
const verifyByFile = context.analysis?.verify?.byFile ?? {};
|
|
294
|
-
const plannedRankByFile = buildPlannedRankMap(taskSteps);
|
|
295
|
-
const coveredSet = new Set([...analyzedFiles, ...transformedFiles]);
|
|
296
|
-
const tier1Files = intendedFiles.filter(filePath => {
|
|
297
|
-
const verifyConfidence = verifyByFile[filePath]?.fileConfidence ?? 0;
|
|
298
|
-
const plannedRank = plannedRankByFile.get(filePath);
|
|
299
|
-
const selected = selectedSet.has(filePath);
|
|
300
|
-
const touchedByResearch = researchTouchedSet.has(filePath);
|
|
301
|
-
const highVerifyConfidence = verifyConfidence >= 0.65;
|
|
302
|
-
const highPlanPriority = typeof plannedRank === "number" && plannedRank <= 1;
|
|
303
|
-
return selected && (touchedByResearch || highVerifyConfidence || highPlanPriority);
|
|
304
|
-
});
|
|
305
|
-
const tier2Files = intendedFiles.filter(filePath => !tier1Files.includes(filePath) && selectedSet.has(filePath));
|
|
306
|
-
const tier3Files = intendedFiles.filter(filePath => !tier1Files.includes(filePath) && !tier2Files.includes(filePath));
|
|
307
|
-
const tier1Covered = tier1Files.filter(filePath => coveredSet.has(filePath)).length;
|
|
308
|
-
const tier2Covered = tier2Files.filter(filePath => coveredSet.has(filePath)).length;
|
|
309
|
-
const tier3Covered = tier3Files.filter(filePath => coveredSet.has(filePath)).length;
|
|
310
|
-
const overallCovered = intendedFiles.filter(filePath => coveredSet.has(filePath)).length;
|
|
311
|
-
const tier1Target = computeCoverageTarget(tier1Files.length, 0.7);
|
|
312
|
-
const tier2Target = computeCoverageTarget(tier2Files.length, 0.4);
|
|
313
|
-
const overallTarget = Math.min(Math.min(6, Math.max(4, intendedFiles.length)), intendedFiles.length);
|
|
314
|
-
const satisfied = tier1Covered >= tier1Target &&
|
|
315
|
-
tier2Covered >= tier2Target &&
|
|
316
|
-
overallCovered >= overallTarget;
|
|
317
|
-
return {
|
|
318
|
-
tier1: { files: tier1Files, covered: tier1Covered, target: tier1Target },
|
|
319
|
-
tier2: { files: tier2Files, covered: tier2Covered, target: tier2Target },
|
|
320
|
-
tier3: { files: tier3Files, covered: tier3Covered, target: tier3Files.length },
|
|
321
|
-
overall: { covered: overallCovered, target: overallTarget },
|
|
322
|
-
satisfied,
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Reads planning rank from task step metadata.
|
|
327
|
-
* Lower rank means higher priority.
|
|
328
|
-
*/
|
|
329
|
-
function buildPlannedRankMap(taskSteps) {
|
|
330
|
-
return new Map(taskSteps
|
|
331
|
-
.filter(step => !!step.filePath && !step.filePath.startsWith("__research__/"))
|
|
332
|
-
.map(step => [
|
|
333
|
-
step.filePath,
|
|
334
|
-
typeof step.result?.priorityRank === "number" ? step.result.priorityRank : undefined,
|
|
335
|
-
]));
|
|
336
|
-
}
|
|
337
|
-
function computeCoverageTarget(total, ratio) {
|
|
338
|
-
if (total === 0)
|
|
339
|
-
return 0;
|
|
340
|
-
return Math.min(total, Math.max(1, Math.ceil(total * ratio)));
|
|
341
|
-
}
|
|
463
|
+
export const reasonNextTaskStep = reasonNextStepSelection;
|
|
464
|
+
//# sourceMappingURL=reasonNextTaskStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasonNextTaskStep.js","sourceRoot":"","sources":["../../src/agents/reasonNextTaskStep.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Chooses the next task-level step from the current deterministic loop state.\n *\n * Why this file exists:\n * - the loop still needs one selector for continue, redo, expand, complete, or give-up\n * - `ProgressState` now owns \"what remains?\" so this file should not rebuild progress itself\n * - this step stays focused on picking the next durable step and logging the reason\n */\nimport type { StructuredContext, Step, FileAnalysis } from \"../types.js\";\nimport { logInputOutput } from \"../utils/promptLogHelper.js\";\nimport { resolveProgressState } from \"./guards/resolveProgressState.js\";\n\nfunction actionAllowed(\n allowedActions: string[],\n action: \"continue\" | \"expand-scope\" | \"request-feedback\" | \"complete\" | \"give-up\"\n): boolean {\n return allowedActions.length === 0 || allowedActions.includes(action);\n}\n\n/**\n * Keeps next-step logs focused on the decision this step made.\n * Example: selected \"continue\" on foo.ts -> log action, reason, target, and current step only.\n */\nfunction buildReasonNextTaskStepLog(\n context: StructuredContext,\n extras?: {\n redoFiles?: string[];\n remainingFiles?: string[];\n pendingResearch?: Step;\n expansionFiles?: string[];\n expansionQueries?: string[];\n noScopedFilesDiagnostic?: Record<string, unknown>;\n }\n): Record<string, unknown> {\n const iteration = context.analysis?.iterationReasoning;\n const payload: Record<string, unknown> = {\n nextAction: iteration?.nextAction,\n rationale: iteration?.rationale,\n confidence: iteration?.confidence,\n currentStep: context.task.currentStep,\n nextTargets: iteration?.nextTargets,\n };\n\n if (!extras) {\n return payload;\n }\n\n if ((extras.redoFiles?.length ?? 0) > 0) {\n payload.redoFiles = extras.redoFiles;\n }\n if ((extras.remainingFiles?.length ?? 0) > 0) {\n payload.remainingFiles = extras.remainingFiles;\n }\n if (extras?.pendingResearch) {\n payload.pendingResearch = extras.pendingResearch;\n }\n if ((extras.expansionFiles?.length ?? 0) > 0) {\n payload.expansionFiles = extras.expansionFiles;\n }\n if ((extras.expansionQueries?.length ?? 0) > 0) {\n payload.expansionQueries = extras.expansionQueries;\n }\n if (extras?.noScopedFilesDiagnostic) {\n payload.noScopedFilesDiagnostic = extras.noScopedFilesDiagnostic;\n }\n\n return payload;\n}\n\nfunction pickQuestionScopedFile(context: StructuredContext, candidates: string[]): string | undefined {\n if (candidates.length === 0) return undefined;\n const latest = context.analysis?.recentActionWindow?.latest;\n if (!latest) return candidates[0];\n\n if (latest.questionId) {\n const scopedStep = (context.task.steps ?? []).find(\n (step) => step.questionId === latest.questionId && candidates.includes(step.filePath)\n );\n if (scopedStep?.filePath) {\n return scopedStep.filePath;\n }\n }\n\n const touched = latest.touchedFiles ?? [];\n const touchedCandidate = touched.find((filePath) => candidates.includes(filePath));\n if (touchedCandidate) {\n return touchedCandidate;\n }\n\n return candidates[0];\n}\n\nfunction pickQuestionIdForNextFile(context: StructuredContext, nextFile: string | undefined): string | undefined {\n if (!nextFile) return undefined;\n const existing = (context.task.steps ?? []).find((step) => step.filePath === nextFile);\n if (existing?.questionId) {\n return existing.questionId;\n }\n\n const latestQuestionId = context.analysis?.recentActionWindow?.latest?.questionId;\n if (latestQuestionId) {\n return latestQuestionId;\n }\n\n const questions = context.analysis?.intent?.questions ?? [];\n if (questions.length === 1) {\n return questions[0].id;\n }\n\n const matchingQuestion = questions.find((question) =>\n (question.targetFiles ?? []).some((target) => target === nextFile || nextFile.endsWith(String(target)))\n );\n return matchingQuestion?.id;\n}\n\n/**\n * REASON NEXT STEP SELECTION\n *\n * Determines the next non-bridge loop action from the current bounded menu.\n *\n * Why this exists:\n * - bridge actions like run-search/run-verify/seed-* are computed upstream\n * - this step reasons only within the currently allowed task-level action menu\n * - decideNextAction still validates the chosen action against that menu\n *\n * Creates a durable Step if none exists and sets context.task.currentStep.\n */\nexport const reasonNextStepSelection = {\n name: \"reasonNextTaskStep\",\n description:\n \"Reasons over working files and execution artifacts to decide the next task step.\",\n\n async run(context: StructuredContext): Promise<void> {\n if (!context.task) {\n throw new Error(\"reasonNextTaskStep: missing context.task\");\n }\n\n context.analysis ||= {};\n context.execution ||= {};\n context.task.steps ||= [];\n\n context.analysis.iterationReasoning ||= {\n summary: \"\",\n nextAction: \"continue\",\n rationale: \"\",\n confidence: 0.5,\n };\n const allowedActions = context.analysis.nextActionMenu?.allowedActions ?? [];\n const iteration = context.analysis.iterationReasoning;\n const giveUp = context.analysis.giveUp;\n const executionPolicy = context.analysis.executionPolicy;\n const progressState = resolveProgressState(context);\n\n if (\n progressState.completion.eligible &&\n actionAllowed(allowedActions, \"complete\")\n ) {\n context.task.status = \"completed\";\n context.task.currentStep = undefined;\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"complete\",\n rationale: progressState.completion.reason,\n confidence: 0.99,\n summary: \"Task step decision: complete (objective satisfied)\",\n };\n logInputOutput(\"reasonNextTaskStep\", \"output\", buildReasonNextTaskStepLog(context));\n return;\n }\n\n if (giveUp?.status === \"triggered\") {\n context.task.status = \"gave-up\";\n context.task.reason = giveUp.rationale;\n context.task.currentStep = undefined;\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"give-up\",\n rationale: giveUp.rationale ?? \"Give-up policy triggered.\",\n confidence: 0.98,\n summary: \"Task step decision: give-up\",\n };\n logInputOutput(\"reasonNextTaskStep\", \"output\", buildReasonNextTaskStepLog(context));\n return;\n }\n\n // ---------------------------\n // 1️⃣ Determine intended files (deduplicated)\n // ---------------------------\n const plannedExecutionFiles = context.task.steps\n .filter(step =>\n !!step.filePath &&\n !step.filePath.startsWith(\"__research__/\")\n )\n .map(step => step.filePath)\n .filter((filePath, index, all) => all.indexOf(filePath) === index);\n\n const requiredLaneFiles = Array.from(\n new Set([\n ...(executionPolicy?.executionRequired ??\n context.analysis.focus?.executionRequired ??\n context.analysis.focus?.selectedFiles ??\n []),\n ...(context.workingFiles?.map(f => f.path).filter(Boolean) ?? []),\n ])\n );\n const explorationLaneFiles = Array.from(\n new Set([\n ...(executionPolicy?.explorationCandidates ??\n context.analysis.focus?.explorationCandidates ??\n context.analysis.focus?.candidateFiles ??\n []),\n ])\n );\n const intendedFiles = Array.from(new Set([...plannedExecutionFiles, ...requiredLaneFiles]));\n const noScopedFilesDiagnostic = intendedFiles.length === 0\n ? {\n selectedFiles: context.analysis.focus?.selectedFiles ?? [],\n executionRequired: executionPolicy?.executionRequired ?? [],\n resolvedTargetFiles:\n context.analysis.focus?.resolvedTargetFiles ??\n context.analysis.intent?.resolvedTargetFiles ??\n [],\n relatedFiles: context.initContext?.relatedFiles ?? [],\n }\n : undefined;\n\n // ---------------------------\n // 2️⃣ Transformed and analyzed files\n // ---------------------------\n const transformedFiles: string[] =\n context.execution.codeTransformArtifacts?.files.map(f => f.filePath) ?? [];\n\n const analyzedFiles: string[] = Object.entries(context.analysis.fileAnalysis ?? {})\n .filter(([_, fa]) => fa.semanticAnalyzed)\n .map(([path]) => path);\n\n const fileAnalysis: Record<string, FileAnalysis> = context.analysis.fileAnalysis ?? {};\n const steps: Step[] = context.task.steps;\n\n const pendingResearchStep = steps.find(\n step =>\n typeof step.action === \"string\" &&\n step.action.startsWith(\"research-\") &&\n step.status !== \"completed\"\n );\n\n if (progressState.research.status === \"required\" && pendingResearchStep) {\n context.task.currentStep = pendingResearchStep;\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"continue\",\n rationale: progressState.research.reason,\n confidence: 0.95,\n nextTargets: { files: [pendingResearchStep.filePath] },\n summary: \"Task step decision: continue (research priority)\",\n };\n\n logInputOutput(\"reasonNextTaskStep\", \"output\", {\n ...buildReasonNextTaskStepLog(context, {\n pendingResearch: pendingResearchStep,\n }),\n });\n return;\n }\n\n // ---------------------------\n // 3️⃣ Mark analysis-only and transformed files as completed\n // ---------------------------\n for (const path of analyzedFiles) {\n const fa = fileAnalysis[path];\n const step = steps.find(s => s.filePath === path);\n if (!step) continue;\n\n if (fa?.semanticAnalyzed && context.executionControl?.constraints?.allowFileWrites === false) {\n step.status = \"completed\";\n }\n if (transformedFiles.includes(path)) {\n step.status = \"completed\";\n }\n }\n\n // ---------------------------\n // 4️⃣ Validation-based redo\n // ---------------------------\n const redoFiles = progressState.redoTargets;\n iteration.redoFiles = redoFiles;\n\n // ---------------------------\n // 4.5️⃣ Trail expansion signal\n // ---------------------------\n const trail = context.analysis.trail;\n const expansionRequest = context.analysis.expansionRequest;\n const trailFrontier = (trail?.frontier ?? [])\n .filter(candidate => (candidate.confidence ?? 0) >= 0.58)\n .map(candidate => candidate.filePath)\n .filter(Boolean);\n const expansionFiles = Array.from(new Set([\n ...(expansionRequest?.files ?? []),\n ...trailFrontier,\n ]));\n const expansionQueries = Array.from(new Set([\n ...(expansionRequest?.queries ?? []),\n ...(trailFrontier.length > 0 ? (trail?.pendingQueries ?? []) : []),\n ])).slice(0, 6);\n const hasExpansionSignal = expansionFiles.length > 0 || expansionQueries.length > 0;\n\n // ---------------------------\n // 5️⃣ Task-level reasoning (cross-file)\n // ---------------------------\n\n // Instead of deriving remainingFiles from artifacts, use durable step status.\n const pendingFiles = progressState.requiredTargets.filter(\n (path) => !progressState.completedTargets.includes(path) && !progressState.redoTargets.includes(path) && !progressState.blockedTargets.includes(path)\n );\n\n // ---------------------------\n // 🛑 Deterministic Completion Gate\n // ---------------------------\n const isDeterministicallyComplete = progressState.completion.eligible;\n\n if (isDeterministicallyComplete) {\n const shouldRunOptionalExploration =\n !!executionPolicy?.explorationReady &&\n !executionPolicy?.executionLock?.enabled &&\n progressState.optionalTargets.length > 0;\n if (hasExpansionSignal || shouldRunOptionalExploration) {\n context.task.currentStep = undefined;\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"expand-scope\",\n rationale: hasExpansionSignal\n ? `Trail expansion requested (${expansionFiles.length} file(s), ${expansionQueries.length} query term(s)).`\n : `Execution lane complete; optional exploration lane has ${explorationLaneFiles.length} candidate file(s).`,\n confidence: 0.86,\n redoFiles: [],\n nextTargets: {\n files: hasExpansionSignal ? expansionFiles : progressState.optionalTargets,\n searchQueries: expansionQueries,\n },\n summary: \"Task step decision: expand-scope\",\n };\n\n logInputOutput(\"reasonNextTaskStep\", \"output\", {\n ...buildReasonNextTaskStepLog(context, {\n redoFiles,\n expansionFiles,\n expansionQueries,\n noScopedFilesDiagnostic,\n }),\n });\n\n return;\n }\n\n if (!actionAllowed(allowedActions, \"complete\")) {\n context.task.currentStep = undefined;\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"continue\",\n rationale: \"Deterministic completion is blocked until the current loop bridge runs.\",\n confidence: 0.92,\n redoFiles: [],\n nextTargets: { files: [] },\n summary: \"Task step decision: continue (bridge pending)\",\n };\n\n logInputOutput(\"reasonNextTaskStep\", \"output\", {\n ...buildReasonNextTaskStepLog(context, {\n redoFiles,\n noScopedFilesDiagnostic,\n }),\n });\n\n return;\n }\n\n // ✅ mark task as completed\n context.task.status = \"completed\";\n context.task.currentStep = undefined;\n\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction: \"complete\",\n rationale: progressState.completion.reason,\n confidence: 1.0,\n redoFiles: [],\n nextTargets: { files: [] },\n summary: \"Task step decision: complete\",\n };\n\n logInputOutput(\"reasonNextTaskStep\", \"output\", {\n ...buildReasonNextTaskStepLog(context, {\n redoFiles,\n noScopedFilesDiagnostic,\n }),\n });\n\n return; // 🔴 HARD EXIT — skip Step 6 and risk reasoning entirely\n }\n\n // ---------------------------\n // Task-level reasoning (cross-file)\n // ---------------------------\n // Remaining work should respect durable step completion state first.\n // This avoids re-selecting files that were completed via analyze-only fallback.\n const remainingFiles = pendingFiles.filter((path) => !redoFiles.includes(path));\n\n\n // ---------------------------\n // Decide next step\n // ---------------------------\n let nextAction: typeof iteration.nextAction = \"continue\";\n let rationale = \"\";\n let confidence = 0.9;\n let nextFile: string | undefined;\n\n if (redoFiles.length > 0) {\n nextAction = \"redo-step\";\n rationale = progressState.completion.reason;\n nextFile = redoFiles[0];\n confidence = 0.7;\n } else if (hasExpansionSignal) {\n nextAction = \"expand-scope\";\n rationale = `Trail expansion requested from prior research (${expansionFiles.length} file(s), ${expansionQueries.length} query term(s)).`;\n confidence = 0.86;\n } else if (remainingFiles.length > 0) {\n nextAction = \"continue\";\n rationale = `Required targets remain unresolved: ${remainingFiles.join(\", \")}`;\n nextFile = pickQuestionScopedFile(context, remainingFiles);\n confidence = 0.95;\n } else if (!progressState.evidenceSatisfied && progressState.optionalTargets.length > 0) {\n nextAction = \"expand-scope\";\n rationale = `Need grounded evidence before completion; ${progressState.optionalTargets.length} candidate file(s) remain to explore.`;\n confidence = 0.9;\n } else {\n nextAction = progressState.completion.eligible ? \"complete\" : \"continue\";\n rationale = progressState.completion.reason;\n confidence = progressState.completion.eligible ? 0.98 : 0.86;\n }\n\n /* // ---------------------------\n // 6.5️⃣ Optional: Reason over known risks\n // ---------------------------\n const knownRisks = context.analysis.understanding?.risks ?? [];\n\n if (knownRisks.length > 0) {\n // Optionally call the LLM with constrained instructions\n const riskPrompt = `\nYou are given the following KNOWN RISKS (authoritative, do not invent new ones):\n${knownRisks.map(r => \"- \" + r).join(\"\\n\")}\n\nTask:\n- Decide whether it is reasonable to ask the user for clarification before proceeding.\n- Return STRICT JSON: { askUser: true|false, rationale: string }\n`;\n\n try {\n const aiResponse = await generate({\n query: context.initContext?.userQuery ?? \"\",\n content: riskPrompt\n });\n\n const cleaned = await cleanupModule.run({\n query: context.initContext?.userQuery ?? \"\",\n content: aiResponse.data ?? \"\"\n });\n\n const parsed = cleaned.data;\n\n // type guard\n if (\n parsed &&\n typeof parsed === \"object\" &&\n \"askUser\" in parsed &&\n \"rationale\" in parsed &&\n typeof (parsed as { rationale?: unknown }).rationale === \"string\"\n ) {\n if ((parsed as { askUser: boolean }).askUser) {\n nextAction = \"request-feedback\";\n rationale += `\\nUser clarification recommended due to known risks: ${(parsed as { rationale: string }).rationale}`;\n confidence = Math.min(confidence, 0.8); // slightly lower because human needed\n }\n }\n } catch (err) {\n console.warn(\"[reasonNextTaskStep] Risk reasoning failed\", err);\n // fallback: ignore, keep deterministic nextAction\n }\n } */\n\n\n // ---------------------------\n // 7️⃣ Ensure a durable Step exists for nextFile\n // ---------------------------\n if (nextFile) {\n let nextStep = steps.find(s => s.filePath === nextFile);\n const nextQuestionId = pickQuestionIdForNextFile(context, nextFile);\n if (!nextStep) {\n nextStep = {\n taskId: context.task.id,\n filePath: nextFile,\n status: \"pending\",\n questionId: nextQuestionId,\n stepQuestions: nextQuestionId ? [nextQuestionId] : undefined,\n };\n context.task.steps.push(nextStep);\n }\n if (!nextStep.questionId && nextQuestionId) {\n nextStep.questionId = nextQuestionId;\n nextStep.stepQuestions = [nextQuestionId];\n }\n\n if (nextAction === \"redo-step\") {\n nextStep.status = \"pending\";\n nextStep.startTime = undefined;\n nextStep.endTime = undefined;\n if (nextStep.result && typeof nextStep.result === \"object\") {\n delete (nextStep.result as Record<string, unknown>).stepReasoning;\n }\n }\n\n context.task.currentStep = nextStep;\n }\n\n // ---------------------------\n // 8️⃣ Persist reasoning\n // ---------------------------\n context.analysis.iterationReasoning = {\n ...iteration,\n nextAction,\n rationale,\n confidence,\n nextTargets: nextAction === \"expand-scope\"\n ? {\n files: expansionFiles.length > 0 ? expansionFiles : progressState.optionalTargets,\n searchQueries: expansionQueries,\n }\n : { files: Array.from(new Set(redoFiles.length > 0 ? redoFiles : remainingFiles)) },\n summary: `Task step decision: ${nextAction}`,\n };\n\n logInputOutput(\"reasonNextTaskStep\", \"output\", {\n ...buildReasonNextTaskStepLog(context, {\n redoFiles,\n remainingFiles,\n expansionFiles: nextAction === \"expand-scope\" ? expansionFiles : undefined,\n expansionQueries: nextAction === \"expand-scope\" ? expansionQueries : undefined,\n noScopedFilesDiagnostic,\n }),\n });\n },\n};\n\nexport const reasonNextTaskStep = reasonNextStepSelection;\n"]}
|