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 @@
|
|
|
1
|
+
{"version":3,"file":"finalAnswerModule.js","sourceRoot":"","sources":["../../../src/pipeline/modules/finalAnswerModule.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Phase Boundary: Final Answer Module\n *\n * This module is responsible for producing the final grounded answer to the user's query.\n * It focuses on synthesizing evidence from analyzed files, execution artifacts, and research\n * to generate a concise, well-grounded response.\n *\n * Key responsibilities:\n * - Collects and structures evidence from file analyses, execution outcomes, and research\n * - Builds a compact answer packet for grounding the final AI response\n * - Generates the final answer using a structured prompt that includes all relevant context\n * - Ensures the final answer is focused, grounded, and prioritizes intent and rationale\n *\n * Boundary conditions:\n * - Keeps final answer synthesis focused on grounded file and research evidence\n * - Does not depend on removed legacy continuity-answer shortcuts\n * - Focuses only on grounded answers derived from analyzed files and execution artifacts\n *\n * Final grounding rule:\n * - Constructs one compact answer packet from the strongest available evidence\n * - Prefers research synthesis for repo-wide answers over dumping planning/code sections\n * - Only includes exact identifiers or short excerpts when they materially help keep the answer grounded\n */\n\nimport { logInputOutput } from \"../../utils/promptLogHelper.js\";\nimport { generate } from \"../../lib/generate.js\";\nimport { cleanupModule } from \"./cleanupModule.js\";\nimport {\n DecomposedQuestion,\n Module,\n ModuleIO,\n StructuredContext,\n FileAnalysis,\n CombinedAnalysis,\n ResearchArtifactEntry,\n} from \"../../types.js\";\nimport chalk from \"chalk\";\nimport path from \"path\";\nimport { isExecutionGroundedStep } from \"../../utils/executionEvidence.js\";\nimport { getVerifyFocusFilePreference, isVerifyFocusQueryText } from \"../../utils/verifyFocusPreference.js\";\nimport { buildResumePacket, renderResumePacket } from \"../../utils/resumeState.js\";\n\nconst MAX_CODE_CHARS = 3000;\nconst MAX_FILES = 4;\nconst MIN_EXACT_VERIFY_CONFIDENCE = 0.85;\nconst MAX_EXCERPTS_PER_FILE = 1;\nconst MAX_RATIONALE_LINES = 3;\nconst MAX_PROMPT_EXCERPT_CHARS = 600;\nconst GENERIC_VERIFY_IDENTIFIERS = new Set([\n \"module\",\n \"repo\",\n \"pattern\",\n \"src\",\n \"cli\",\n \"points\",\n \"explain\",\n \"summarize\",\n \"weak\",\n]);\n\ntype AnswerMode = \"single-file\" | \"multi-file\" | \"repo-wide\" | \"continuity\";\ntype AnswerEvidenceLevel = \"none\" | \"candidate-only\" | \"verify\" | \"executed\" | \"synthesized\";\n\ntype FileAnswerSummary = {\n filePath: string;\n summary: string;\n};\n\ntype FileExactIdentifiers = {\n filePath: string;\n identifiers: string[];\n};\n\ntype FileSupportingExcerpts = {\n filePath: string;\n excerpts: string[];\n};\n\ntype StructuredQuestionAnswer = {\n questionId: string;\n answer: string;\n evidenceStatus?: \"grounded\" | \"partial\" | \"missing\";\n};\n\ntype AnswerPacket = {\n mode: AnswerMode;\n rationale: string;\n orderedQuestions: DecomposedQuestion[];\n answerFiles: string[];\n executedAnswerFiles: string[];\n candidateAnswerFiles: string[];\n answerEvidenceLevel: AnswerEvidenceLevel;\n answerSummaryByFile: FileAnswerSummary[];\n crossFileSummary?: string;\n researchSummary?: string;\n exactIdentifiers: FileExactIdentifiers[];\n supportingExcerpts: FileSupportingExcerpts[];\n resumedContextCapsule?: string;\n};\n\ntype CollectedAnswerEvidence = {\n answerFiles: string[];\n executedAnswerFiles: string[];\n candidateAnswerFiles: string[];\n answerEvidenceLevel: AnswerEvidenceLevel;\n answerSummaryByFile: FileAnswerSummary[];\n crossFileSummary?: string;\n researchSummary?: string;\n exactIdentifiers: FileExactIdentifiers[];\n supportingExcerpts: FileSupportingExcerpts[];\n resumedContextCapsule?: string;\n};\n\nfunction extractMentionedFilePaths(text: string): string[] {\n if (!text.trim()) return [];\n const matches = text.match(/(?:\\/[^\\s`'\"]+\\.(?:ts|js|tsx|jsx|py|java|go|rs|cpp|c|cs|md|json)|\\b[\\w./-]+\\.(?:ts|js|tsx|jsx|py|java|go|rs|cpp|c|cs|md|json)\\b)/g) ?? [];\n return Array.from(new Set(matches.map(item => item.trim())));\n}\n\n/**\n * Builds the persisted final answer text from the rendered response and analyzed files.\n *\n * Why this exists:\n * - the module needs one stable place to shape the final output header\n * - explanation queries often need the module-level concept name to stay visible\n */\nfunction buildFinalAnswer(renderedResponse: string, analyzedFiles: string[]): string {\n return `Analyzed files:\\n${analyzedFiles.join(\"\\n\")}\\n\\n${renderedResponse}`;\n}\n\nexport const finalAnswerModule: Module = {\n name: \"finalAnswer\",\n description: \"Produces the final grounded answer, prioritizing intent, targets, and rationale over file listings.\",\n groups: [\"finalize\"],\n\n run: async (input: ModuleIO): Promise<ModuleIO> => {\n const { query } = input;\n const context = input.context as StructuredContext | undefined;\n\n if (!context) {\n throw new Error(\"[finalAnswerModule] No context provided\");\n }\n\n const analysis = context.analysis ?? {};\n const directoryListingAnswer = analysis.directoryListingAnswer;\n if (directoryListingAnswer) {\n const finalText = directoryListingAnswer.summary;\n analysis.finalAnswer = finalText;\n logInputOutput(\"finalAnswerModule\", \"output\", {\n directoryListing: true,\n folderPath: directoryListingAnswer.folderPath ?? null,\n entryCount: directoryListingAnswer.entries.length,\n });\n console.log(chalk.yellow(`\\n\\n[FINAL ANSWER]\\n${finalText}\\n`));\n return {\n query,\n content: finalText,\n data: {\n response: finalText,\n analyzedFiles: [],\n },\n context,\n };\n }\n\n const fileAnalysis = analysis.fileAnalysis ?? {};\n\n const focus = analysis.focus as {\n relevantFiles?: string[];\n rationale?: string;\n } | undefined;\n\n const rationale = focus?.rationale ?? \"No explicit rationale provided.\";\n\n const resumedContextCapsule =\n renderResumePacket(buildResumePacket(context.analysis?.resumeState)) ||\n context.initContext?.resumedContextCapsule?.trim();\n\n const combinedAnalysis = await ensureCombinedAnalysis(context, query);\n const answerMode = resolveAnswerMode(context, query);\n\n // --------------------------------------------------\n // 1ď¸âŁ Collect semantic files and excerpts\n // --------------------------------------------------\n const meaningfulFiles = Object.entries(fileAnalysis)\n .filter(([path, fa]) =>\n fa?.intent === \"relevant\" &&\n (!focus?.relevantFiles || focus.relevantFiles.includes(path))\n )\n .map(([path, fa]) => ({ path, analysis: fa as FileAnalysis }))\n .slice(0, MAX_FILES);\n const verifyMeaningfulFiles = resolveVerifyMeaningfulFiles(context, meaningfulFiles.map(file => file.path));\n const answerFiles = resolveMeaningfulAnswerFiles(context, meaningfulFiles, verifyMeaningfulFiles);\n\n // Collect analyzed files for output (prefer executed task steps from this run).\n const preliminaryAnalyzedFiles = resolveAnalyzedFilesForOutput(context, answerFiles.map(f => f.path));\n\n const answerEvidence = collectAnswerEvidence({\n context,\n rationale,\n mode: answerMode,\n answerFiles,\n analyzedFiles: preliminaryAnalyzedFiles,\n combinedAnalysis,\n resumedContextCapsule,\n });\n const analyzedFiles = resolveAnalyzedFilesForOutput(context, answerEvidence.answerFiles);\n const answerPacket = buildAnswerPacket({\n mode: answerMode,\n rationale,\n orderedQuestions: context.analysis?.intent?.questions ?? [],\n evidence: answerEvidence,\n });\n const prompt = renderFinalAnswerPrompt(query, answerPacket);\n\n // --------------------------------------------------\n // 5ď¸âŁ Generate final answer\n // --------------------------------------------------\n const aiResponse = await generate({ query, content: prompt }, {\n caller: \"finalAnswerModule\",\n inputContext: {\n query,\n mode: answerPacket.mode,\n rationale: answerPacket.rationale,\n analyzedFiles,\n executedAnswerFiles: answerPacket.executedAnswerFiles,\n candidateAnswerFiles: answerPacket.candidateAnswerFiles,\n answerEvidenceLevel: answerPacket.answerEvidenceLevel,\n answerFiles: answerPacket.answerFiles,\n answerSummaryByFile: answerPacket.answerSummaryByFile,\n crossFileSummary: answerPacket.crossFileSummary ?? \"\",\n researchSummary: answerPacket.researchSummary ?? \"\",\n exactIdentifiers: answerPacket.exactIdentifiers,\n supportingExcerpts: answerPacket.supportingExcerpts,\n resumedContextCapsule: answerPacket.resumedContextCapsule ?? \"\",\n },\n });\n\n const renderedResponse = renderAnswerResponse({\n rawResponse: aiResponse.data,\n packet: answerPacket,\n });\n const finalText = buildFinalAnswer(renderedResponse, analyzedFiles);\n\n context.analysis ||= {};\n context.analysis.finalAnswer = finalText;\n\n logInputOutput(\"finalAnswerModule\", \"output\", {\n callId: aiResponse.trace?.callId,\n data: aiResponse.data,\n analyzedFiles,\n });\n console.log(chalk.yellow(`\\n\\n[FINAL ANSWER]\\n${finalText}\\n`));\n\n return {\n query,\n content: finalText,\n data: {\n response: renderedResponse,\n analyzedFiles,\n },\n context,\n };\n },\n};\n\n/* -------------------------\n Helpers\n---------------------------- */\n\n/**\n * Trims large code blocks without losing both the setup and the ending.\n *\n * Examples:\n * - short file under the limit -> return unchanged\n * - long file -> keep the first 60%, insert the truncation marker line, then keep the last 40%\n */\nfunction sliceCode(code: string): string {\n if (code.length <= MAX_CODE_CHARS) return code;\n return (\n code.slice(0, Math.floor(MAX_CODE_CHARS * 0.6)) +\n \"\\n/* ⌠truncated ⌠*/\\n\" +\n code.slice(-Math.floor(MAX_CODE_CHARS * 0.4))\n );\n}\n\n/**\n * Reuses cached cross-file analysis when available and only computes it when at least two\n * semantically analyzed files exist.\n *\n * Examples:\n * - 0 or 1 semantically analyzed files -> return `undefined` because there is nothing to compare\n * - 3 analyzed files -> run combined analysis once, then cache it on `context.analysis.combinedAnalysis`\n */\nasync function ensureCombinedAnalysis(\n context: StructuredContext,\n query: string\n): Promise<CombinedAnalysis | undefined> {\n context.analysis ||= {};\n\n if (context.analysis.combinedAnalysis) {\n return context.analysis.combinedAnalysis;\n }\n\n const analyzedFiles = Object.entries(context.analysis.fileAnalysis ?? {})\n .filter(([_, analysis]) => analysis.semanticAnalyzed)\n .map(([path, analysis]) => [path, analysis] as const);\n\n if (analyzedFiles.length < 2) {\n return undefined;\n }\n\n const filtered: Record<string, FileAnalysis> = {};\n for (const [path, analysis] of analyzedFiles) {\n filtered[path] = analysis;\n }\n\n const combined = await analyzeCombined(filtered, query);\n context.analysis.combinedAnalysis = combined;\n return combined;\n}\n\n/**\n * Builds the cross-file prompt and parses the model result into a stable shape.\n *\n * Examples:\n * - shared auth logic across two files -> `sharedPatterns` may include `\"both files validate session state first\"`\n * - parse failure or malformed JSON -> fall back to empty arrays and `\"[unparsed]\"`\n */\nasync function analyzeCombined(\n fileAnalysis: Record<string, FileAnalysis>,\n query: string\n): Promise<CombinedAnalysis> {\n const prompt = `\nYou are given semantic analysis for multiple files that are all relevant\nto a user query.\n\nUser query:\n\"${query}\"\n\nPer-file analysis:\n${JSON.stringify(fileAnalysis, null, 2)}\n\nTask:\n- Identify shared patterns across these files\n- Summarize high-level architecture relevant to the query\n- List any cross-cutting hotspots or risks\n\nReturn STRICT JSON:\n{\n \"sharedPatterns\"?: string[],\n \"architectureSummary\"?: string,\n \"hotspots\"?: string[]\n}\n`.trim();\n\n try {\n const ai = await generate({ query: \"cross-file analysis\", content: prompt }, {\n caller: \"finalAnswerModule.analyzeCombined\",\n inputContext: {\n query,\n fileAnalysis,\n },\n });\n const cleaned = await cleanupModule.run({ query, content: ai.data });\n const data =\n typeof cleaned.data === \"object\" && cleaned.data\n ? cleaned.data\n : JSON.parse(String(cleaned.content ?? \"{}\"));\n\n return {\n sharedPatterns: data.sharedPatterns ?? [],\n architectureSummary: data.architectureSummary ?? \"[unparsed]\",\n hotspots: data.hotspots ?? [],\n };\n } catch (err) {\n console.warn(\"[finalAnswerModule] Failed to parse combined analysis:\", err);\n return {\n sharedPatterns: [],\n architectureSummary: \"[unparsed]\",\n hotspots: [],\n };\n }\n}\n\n/**\n * Resolves the grounding mode so prompt inputs match the answer shape.\n *\n * Examples:\n * - explicit target explanation -> `single-file`\n * - repo-wide architecture question with synthesis research -> `repo-wide`\n * - \"what should we do next?\" on a resumed task -> `continuity`\n */\nfunction resolveAnswerMode(context: StructuredContext, query: string): AnswerMode {\n const normalized = query.trim().toLowerCase();\n const isContinuityQuery =\n normalized === \"where were we?\" ||\n normalized === \"what should we do next?\" ||\n context.analysis?.resumeIntent?.kind === \"continuity-summary\" ||\n context.analysis?.resumeIntent?.kind === \"continuity-next-step\";\n if (isContinuityQuery) {\n return \"continuity\";\n }\n\n const hasArchitectureSynthesis = Boolean(\n context.analysis?.researchArtifacts?.latestByAction?.[\"research-architecture-synthesis\"]\n );\n if (context.analysis?.scopeType === \"repo-wide\" || hasArchitectureSynthesis) {\n return \"repo-wide\";\n }\n\n const selectedCount = context.analysis?.focus?.selectedFiles?.length ?? 0;\n return selectedCount <= 1 ? \"single-file\" : \"multi-file\";\n}\n\n/**\n * Builds the compact answer packet used to ground the final answer model call.\n *\n * Examples:\n * - repo-wide answer -> prefer research synthesis plus a few representative files\n * - single-file explanation -> keep one file summary, exact identifiers, and one short excerpt\n */\nfunction buildAnswerPacket(args: {\n mode: AnswerMode;\n rationale: string;\n orderedQuestions: DecomposedQuestion[];\n evidence: CollectedAnswerEvidence;\n}): AnswerPacket {\n return {\n mode: args.mode,\n rationale: reduceAnswerRationale(args.rationale),\n orderedQuestions: args.orderedQuestions,\n answerFiles: args.evidence.answerFiles,\n executedAnswerFiles: args.evidence.executedAnswerFiles,\n candidateAnswerFiles: args.evidence.candidateAnswerFiles,\n answerEvidenceLevel: args.evidence.answerEvidenceLevel,\n answerSummaryByFile: args.evidence.answerSummaryByFile,\n crossFileSummary: args.evidence.crossFileSummary,\n researchSummary: args.evidence.researchSummary,\n exactIdentifiers: args.evidence.exactIdentifiers,\n supportingExcerpts: args.evidence.supportingExcerpts,\n resumedContextCapsule: args.evidence.resumedContextCapsule,\n };\n}\n\nfunction parseStructuredQuestionAnswers(value: unknown): StructuredQuestionAnswer[] | undefined {\n const raw = typeof value === \"string\" ? value : JSON.stringify(value ?? \"\");\n try {\n const parsed = JSON.parse(raw) as { answers?: StructuredQuestionAnswer[] };\n if (!Array.isArray(parsed.answers)) {\n return undefined;\n }\n const normalized = parsed.answers\n .filter((item) => !!item && typeof item.questionId === \"string\" && typeof item.answer === \"string\")\n .map((item) => ({\n questionId: item.questionId,\n answer: item.answer.trim(),\n evidenceStatus: item.evidenceStatus,\n }))\n .filter((item) => item.answer.length > 0);\n return normalized.length > 0 ? normalized : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction renderStructuredQuestionAnswers(\n questions: DecomposedQuestion[],\n answers: StructuredQuestionAnswer[],\n): string {\n return questions\n .sort((left, right) => left.order - right.order)\n .map((question, index) => {\n const matched = answers.find((answer) => answer.questionId === question.id);\n const body = matched?.answer?.trim() || \"Not enough grounded evidence to answer this question separately yet.\";\n return `${index + 1}. ${question.text}\\n${body}`;\n })\n .join(\"\\n\\n\");\n}\n\nfunction renderAnswerResponse(args: {\n rawResponse: unknown;\n packet: AnswerPacket;\n}): string {\n if (args.packet.orderedQuestions.length <= 1) {\n return typeof args.rawResponse === \"string\"\n ? args.rawResponse\n : JSON.stringify(args.rawResponse, null, 2);\n }\n\n const structuredAnswers = parseStructuredQuestionAnswers(args.rawResponse);\n if (structuredAnswers) {\n return renderStructuredQuestionAnswers(args.packet.orderedQuestions, structuredAnswers);\n }\n\n const rawText = typeof args.rawResponse === \"string\"\n ? args.rawResponse.trim()\n : JSON.stringify(args.rawResponse, null, 2);\n return rawText || renderStructuredQuestionAnswers(args.packet.orderedQuestions, []);\n}\n\n/**\n * Collects the grounded evidence that will be packed into the final answer prompt.\n *\n * This keeps file choice, grounded notes, and continuity reduction separate from packet assembly.\n */\nfunction collectAnswerEvidence(args: {\n context: StructuredContext;\n rationale: string;\n mode: AnswerMode;\n answerFiles: Array<{ path: string; analysis: FileAnalysis }>;\n analyzedFiles: string[];\n combinedAnalysis?: CombinedAnalysis;\n resumedContextCapsule?: string;\n}): CollectedAnswerEvidence {\n const { context, rationale, mode, answerFiles, analyzedFiles, combinedAnalysis, resumedContextCapsule } = args;\n const architectureInputFiles = resolveArchitectureInputFiles(context);\n const preferredFiles = normalizeAnswerFilePaths([\n ...extractMentionedFilePaths(rationale),\n ...(context.analysis?.focus?.selectedFiles ?? []),\n ...(context.analysis?.focus?.candidateFiles ?? []),\n ]);\n const preferredGroundedFiles = resolvePreferredGroundedFiles(context, preferredFiles);\n const researchSummary = buildResearchSummary(context, mode);\n const packetFiles = resolveAnswerPacketFiles({\n mode,\n answerFiles,\n analyzedFiles,\n researchSummary,\n preferredFiles,\n preferredGroundedFiles,\n architectureInputFiles,\n });\n const executedAnswerFiles = resolveExecutedAnswerFiles(context, packetFiles);\n const candidateAnswerFiles = packetFiles.filter(filePath => !executedAnswerFiles.includes(filePath));\n const answerSummaryByFile = packetFiles.map(filePath => ({\n filePath,\n summary: buildAnswerSummaryForFile(context, filePath, mode, args.context.initContext?.userQuery ?? \"\"),\n }));\n const exactIdentifiers = packetFiles\n .map(filePath => ({\n filePath,\n identifiers: collectAnswerExactIdentifiers(context, filePath, args.context.initContext?.userQuery ?? \"\"),\n }))\n .filter(entry => entry.identifiers.length > 0);\n const supportingExcerpts = collectSupportingExcerpts(context, packetFiles, mode, args.context.initContext?.userQuery ?? \"\");\n\n return {\n answerFiles: packetFiles,\n executedAnswerFiles,\n candidateAnswerFiles,\n answerEvidenceLevel: resolveAnswerEvidenceLevel(context, executedAnswerFiles, candidateAnswerFiles),\n answerSummaryByFile,\n crossFileSummary: buildCrossFileSummary(mode, combinedAnalysis),\n researchSummary,\n exactIdentifiers,\n supportingExcerpts,\n resumedContextCapsule: mode === \"continuity\"\n ? reduceResumedContextCapsule(resumedContextCapsule)\n : undefined,\n };\n}\n\nfunction collectSupportingExcerpts(\n context: StructuredContext,\n packetFiles: string[],\n mode: AnswerMode,\n query: string\n): FileSupportingExcerpts[] {\n if (mode === \"repo-wide\" || mode === \"continuity\") {\n return [];\n }\n\n return packetFiles\n .map(filePath => ({\n filePath,\n excerpts: buildSupportingExcerpts(context, filePath, query),\n }))\n .filter(entry => entry.excerpts.length > 0);\n}\n\n/**\n * Chooses the smallest stable file list that still supports the answer.\n *\n * Examples:\n * - repo-wide synthesis with architecture inputs -> use those first\n * - single-file explanation -> keep only the first grounded file\n */\nfunction resolveAnswerPacketFiles(args: {\n mode: AnswerMode;\n answerFiles: Array<{ path: string; analysis: FileAnalysis }>;\n analyzedFiles: string[];\n researchSummary?: string;\n preferredFiles: string[];\n preferredGroundedFiles: string[];\n architectureInputFiles: string[];\n}): string[] {\n const { mode, answerFiles, analyzedFiles, researchSummary, preferredFiles, preferredGroundedFiles, architectureInputFiles } = args;\n const base = normalizeAnswerFilePaths(answerFiles.map(file => file.path));\n const normalizedAnalyzed = normalizeAnswerFilePaths(analyzedFiles);\n const groundedSupport = normalizeAnswerFilePaths([\n ...preferredGroundedFiles,\n ...architectureInputFiles,\n ]);\n const fallbackFiles =\n base.length > 0\n ? base\n : normalizedAnalyzed.length > 0\n ? normalizedAnalyzed\n : groundedSupport.length > 0\n ? groundedSupport\n : preferredFiles;\n const preferredInScope = preferredFiles.filter(filePath =>\n base.includes(filePath) || normalizedAnalyzed.includes(filePath) || groundedSupport.includes(filePath)\n );\n if (mode === \"single-file\") {\n const primary = preferredInScope[0] ?? groundedSupport[0] ?? fallbackFiles[0];\n return primary ? [primary] : [];\n }\n if (mode === \"continuity\") {\n return (preferredInScope.length > 0 ? preferredInScope : groundedSupport.length > 0 ? groundedSupport : fallbackFiles).slice(0, 2);\n }\n if (mode === \"repo-wide\" && researchSummary) {\n const merged = Array.from(new Set([...preferredInScope, ...groundedSupport, ...fallbackFiles]));\n return merged.slice(0, MAX_FILES);\n }\n const merged = Array.from(new Set([\n ...preferredInScope,\n ...groundedSupport,\n ...fallbackFiles,\n ]));\n return merged.slice(0, MAX_FILES);\n}\n\n/**\n * Distills one file into a short answer note instead of dumping planning prose.\n *\n * Examples:\n * - semantic summary exists -> keep that concise summary\n * - exact identifiers exist -> surface them as the key grounded fact\n */\nfunction buildAnswerSummaryForFile(\n context: StructuredContext,\n filePath: string,\n mode: AnswerMode,\n query: string\n): string {\n const readResult = context.analysis?.readResults?.byFile?.[filePath];\n const analysis = context.analysis?.fileAnalysis?.[filePath];\n const verify = context.analysis?.verify?.byFile?.[filePath];\n const exact = collectAnswerExactIdentifiers(context, filePath, query);\n const fileLabel = buildQueryAlignedFileLabel(filePath, query);\n if (exact.length > 0) {\n return fileLabel\n ? `${fileLabel}. Key identifiers: ${exact.join(\", \")}.`\n : `Key identifiers: ${exact.join(\", \")}.`;\n }\n\n const readFacts = readResult?.facts?.filter(fact => fact.found).map(fact => fact.key) ?? [];\n if (readFacts.length > 0) {\n return `Quick-read facts: ${readFacts.slice(0, 3).join(\", \")}.`;\n }\n\n const summary = analysis?.proposedChanges?.summary?.trim();\n if (summary) {\n return summarizeSentence(summary);\n }\n\n const verifyRationale = verify?.rationale?.trim();\n if (verifyRationale && !/generic token|insufficient verify evidence/i.test(verifyRationale)) {\n return summarizeSentence(verifyRationale);\n }\n\n if (mode === \"repo-wide\") {\n return \"Representative source used for repo-wide architecture grounding.\";\n }\n\n return \"Grounded source selected for the final answer.\";\n}\n\n/**\n * Prefers cross-file synthesis only when the answer truly needs it.\n *\n * Examples:\n * - single-file answer -> omit cross-file summary\n * - repo-wide answer without synthesis -> fall back to combined analysis only if it exists\n */\nfunction buildCrossFileSummary(\n mode: AnswerMode,\n combinedAnalysis: CombinedAnalysis | undefined\n): string | undefined {\n if (mode === \"single-file\" || mode === \"continuity\" || !combinedAnalysis) {\n return undefined;\n }\n\n const parts = [\n combinedAnalysis.architectureSummary?.trim(),\n combinedAnalysis.sharedPatterns?.length\n ? `Shared patterns: ${combinedAnalysis.sharedPatterns.join(\"; \")}`\n : \"\",\n combinedAnalysis.hotspots?.length\n ? `Hotspots: ${combinedAnalysis.hotspots.join(\"; \")}`\n : \"\",\n ].filter(Boolean);\n\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Pulls repo-wide synthesis from stored research artifacts when available.\n *\n * Examples:\n * - completed architecture synthesis -> use its summary, prior research, and coupling points\n * - no stored synthesis -> return `undefined`\n */\nfunction buildResearchSummary(\n context: StructuredContext,\n mode: AnswerMode\n): string | undefined {\n if (mode !== \"repo-wide\") return undefined;\n const entry = context.analysis?.researchArtifacts?.latestByAction?.[\"research-architecture-synthesis\"] as\n | ResearchArtifactEntry\n | undefined;\n if (!entry) return undefined;\n\n const data = entry.collectedData ?? {};\n const priorResearch = Array.isArray(data.priorResearchSummaries)\n ? (data.priorResearchSummaries as Array<Record<string, unknown>>)\n .map(item => `${String(item.action ?? \"research\")}: ${String(item.summary ?? \"[none]\")}`)\n : [];\n const sharedPatterns = Array.isArray(data.sharedPatterns)\n ? (data.sharedPatterns as unknown[]).map(item => String(item))\n : [];\n const hotspots = Array.isArray(data.hotspots)\n ? (data.hotspots as unknown[]).map(item => String(item))\n : [];\n const couplingPoints = Array.isArray(data.couplingPoints)\n ? (data.couplingPoints as unknown[]).map(item => String(item))\n : [];\n const architectureInputFiles = Array.isArray(data.architectureInputFiles)\n ? (data.architectureInputFiles as unknown[]).map(item => String(item))\n : [];\n\n const sections = [\n `Synthesis summary: ${entry.summary}`,\n typeof data.problemStatement === \"string\" && data.problemStatement.trim().length > 0\n ? `Problem statement: ${data.problemStatement}`\n : \"\",\n priorResearch.length > 0 ? `Prior research: ${priorResearch.join(\" | \")}` : \"\",\n sharedPatterns.length > 0 ? `Shared patterns: ${sharedPatterns.join(\"; \")}` : \"\",\n hotspots.length > 0 ? `Hotspots: ${hotspots.join(\"; \")}` : \"\",\n couplingPoints.length > 0 ? `Coupling points: ${couplingPoints.join(\"; \")}` : \"\",\n architectureInputFiles.length > 0 ? `Architecture input files: ${architectureInputFiles.join(\", \")}` : \"\",\n ].filter(Boolean);\n\n return sections.join(\"\\n\");\n}\n\nfunction resolveArchitectureInputFiles(context: StructuredContext): string[] {\n const synthesis = context.analysis?.researchArtifacts?.latestByAction?.[\"research-architecture-synthesis\"];\n const inputFiles = Array.isArray(synthesis?.collectedData?.architectureInputFiles)\n ? (synthesis?.collectedData?.architectureInputFiles as unknown[]).map(item => String(item))\n : [];\n return normalizeAnswerFilePaths(inputFiles);\n}\n\nfunction resolvePreferredGroundedFiles(\n context: StructuredContext,\n preferredFiles: string[]\n): string[] {\n const groundedCandidates = normalizeAnswerFilePaths([\n ...(context.workingFiles ?? []).map(file => file.path),\n ...Object.keys(context.analysis?.verify?.byFile ?? {}),\n ...Object.keys(context.analysis?.fileAnalysis ?? {}),\n ...resolveArchitectureInputFiles(context),\n ]);\n return preferredFiles.filter(filePath => groundedCandidates.includes(filePath));\n}\n\n/**\n * Keeps continuity capsules short enough for final grounding.\n *\n * Examples:\n * - long resume capsule -> retain task, status, selected files, and next hints only\n * - empty capsule -> return `undefined`\n */\nfunction reduceResumedContextCapsule(value: string | undefined): string | undefined {\n if (!value?.trim()) return undefined;\n const lines = value.split(\"\\n\").map(line => line.trim()).filter(Boolean);\n const keepPrefixes = [\n \"Original task:\",\n \"Current task status:\",\n \"Current intent state:\",\n \"- Normalized intent:\",\n \"Current routing/focus state:\",\n \"- Selected files:\",\n \"Next plan hints:\",\n \"New user query:\",\n ];\n const reduced = lines.filter(line => keepPrefixes.some(prefix => line.startsWith(prefix)));\n const sanitized = (reduced.length > 0 ? reduced : lines.slice(0, 6))\n .filter(line => line !== \"Original task:\" && line !== \"Next plan hints:\");\n return sanitized.join(\"\\n\");\n}\n\n/**\n * Uses semantic excerpts first and falls back to a short source slice only when needed.\n *\n * Examples:\n * - semantic excerpt available -> keep one short excerpt\n * - no semantic excerpt but code exists -> use one bounded code slice\n */\nfunction buildSupportingExcerpts(\n context: StructuredContext,\n filePath: string,\n query: string\n): string[] {\n const analysis = context.analysis?.fileAnalysis?.[filePath];\n const exactIdentifiers = collectAnswerExactIdentifiers(context, filePath, query);\n const excerpts = (analysis?.excerpts ?? [])\n .map(excerpt => excerpt.code?.trim())\n .filter((excerpt): excerpt is string => Boolean(excerpt))\n .slice(0, MAX_EXCERPTS_PER_FILE)\n .map(excerpt => compactSupportingExcerpt(excerpt, exactIdentifiers));\n if (excerpts.length > 0) {\n return excerpts;\n }\n\n const code = context.workingFiles?.find(file => file.path === filePath)?.code;\n if (!code?.trim()) return [];\n return [compactSupportingExcerpt(code, exactIdentifiers)];\n}\n\n/**\n * Keeps rationale short so final grounding sees the decision, not the full planner history.\n *\n * Examples:\n * - verbose pre/post-check rationale -> keep the first few specific lines only\n * - empty rationale -> return a stable fallback\n */\nfunction reduceAnswerRationale(value: string): string {\n const lines = value\n .split(\"\\n\")\n .map(line => line.trim())\n .filter(Boolean)\n .filter(line => !/^\\[selectRelevantSources\\]/i.test(line));\n if (lines.length === 0) {\n return \"No explicit rationale provided.\";\n }\n\n const ranked = lines.filter(line =>\n /^Pre-check:/i.test(line) ||\n /^\\[Post-check\\]/i.test(line) ||\n /selected|candidate|relevant|aligned|confidence/i.test(line)\n );\n const compact = (ranked.length > 0 ? ranked : lines)\n .slice(0, MAX_RATIONALE_LINES)\n .map(line => summarizeSentence(line));\n return compact.join(\"\\n\");\n}\n\n/**\n * Keeps one answer summary sentence compact enough for prompt grounding.\n * Example: a long semantic summary paragraph -> keep the first sentence under the cap.\n */\nfunction summarizeSentence(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (!normalized) {\n return \"Grounded source selected for the final answer.\";\n }\n\n const firstSentence = normalized.match(/^.*?[.!?](?:\\s|$)/)?.[0]?.trim() ?? normalized;\n const bounded = firstSentence.length <= 180 ? firstSentence : `${firstSentence.slice(0, 177).trimEnd()}...`;\n return bounded;\n}\n\n/**\n * Narrows a raw code block to the smallest useful excerpt for final grounding.\n *\n * Examples:\n * - long file header plus one relevant function -> keep the function-sized slice\n * - exact identifier present -> center the excerpt around the first identifier match\n */\nfunction compactSupportingExcerpt(code: string, exactIdentifiers: string[]): string {\n const trimmed = code.trim();\n if (!trimmed) {\n return \"\";\n }\n\n const byIdentifier = exactIdentifiers\n .map(identifier => extractExcerptAroundIdentifier(trimmed, identifier))\n .find(Boolean);\n if (byIdentifier) {\n return byIdentifier;\n }\n\n const semanticBlock = extractLikelySemanticBlock(trimmed);\n return limitExcerptLength(semanticBlock);\n}\n\nfunction extractExcerptAroundIdentifier(code: string, identifier: string): string | undefined {\n const escaped = identifier.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const match = code.match(new RegExp(`(^|\\\\n)([^\\\\n]{0,120}\\\\b${escaped}\\\\b[^\\\\n]{0,220})`, \"i\"));\n const line = match?.[2]?.trim();\n if (!line) {\n return undefined;\n }\n return limitExcerptLength(line);\n}\n\nfunction extractLikelySemanticBlock(code: string): string {\n const lines = code.split(\"\\n\").map(line => line.trimEnd());\n const filtered = lines.filter(line => {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith(\"import \")) return false;\n if (trimmed.startsWith(\"export type \") || trimmed.startsWith(\"type \")) return false;\n if (trimmed === \"/**\" || trimmed === \"*/\" || trimmed.startsWith(\"* \")) return false;\n return true;\n });\n const chosen = filtered.slice(0, 8).join(\"\\n\").trim();\n return chosen || lines.slice(0, 6).join(\"\\n\").trim();\n}\n\nfunction limitExcerptLength(value: string): string {\n const normalized = sliceCode(value).replace(/\\n{3,}/g, \"\\n\\n\").trim();\n if (normalized.length <= MAX_PROMPT_EXCERPT_CHARS) {\n return normalized;\n }\n return `${normalized.slice(0, MAX_PROMPT_EXCERPT_CHARS - 19).trimEnd()}\\n/* ⌠trimmed ⌠*/`;\n}\n\n/**\n * Renders the compact answer packet into the final prompt.\n *\n * Examples:\n * - repo-wide packet -> includes research synthesis and skips broad code dumps\n * - single-file packet -> includes one file summary plus minimal excerpts\n */\nfunction renderFinalAnswerPrompt(query: string, packet: AnswerPacket): string {\n const orderedQuestionSection = packet.orderedQuestions.length > 1\n ? packet.orderedQuestions\n .sort((left, right) => left.order - right.order)\n .map((question, index) => `${index + 1}. ${question.text}`)\n .join(\"\\n\")\n : \"\";\n const answerFilesSection = packet.answerSummaryByFile.length > 0\n ? packet.answerSummaryByFile\n .map(entry => `- ${entry.filePath}: ${entry.summary}`)\n .join(\"\\n\")\n : \"[none]\";\n const executedAnswerFilesSection = packet.executedAnswerFiles.length > 0\n ? packet.executedAnswerFiles.map(filePath => `- ${filePath}`).join(\"\\n\")\n : \"[none]\";\n const candidateAnswerFilesSection = packet.candidateAnswerFiles.length > 0\n ? packet.candidateAnswerFiles.map(filePath => `- ${filePath}`).join(\"\\n\")\n : \"[none]\";\n const exactIdentifierSection = packet.exactIdentifiers.length > 0\n ? packet.exactIdentifiers\n .map(entry => `FILE: ${entry.filePath}\\n- ${entry.identifiers.join(\"\\n- \")}`)\n .join(\"\\n\\n\")\n : \"[No exact identifiers needed]\";\n const supportingExcerptSection = packet.supportingExcerpts.length > 0\n ? packet.supportingExcerpts\n .map(entry => `FILE: ${entry.filePath}\\n${entry.excerpts.map(excerpt => `---\\n${excerpt}`).join(\"\\n\")}`)\n .join(\"\\n\\n\")\n : \"[No supporting excerpts needed]\";\n\n return `\nYou are an AI assistant providing the final answer to the user.\n\nThis is the final stage of a structured analysis pipeline.\n\nUser query:\n${query}\n\nAnswer mode:\n${packet.mode}\n\n${packet.resumedContextCapsule ? `Reduced resumed context:\\n${packet.resumedContextCapsule}\\n` : \"\"}\n\n${orderedQuestionSection ? `Ordered question parts:\\n${orderedQuestionSection}\\n` : \"\"}\n\nRationale for focus:\n${packet.rationale}\n\nAnswer evidence level:\n${packet.answerEvidenceLevel}\n\nExecuted answer files:\n${executedAnswerFilesSection}\n\nCandidate answer files:\n${candidateAnswerFilesSection}\n\nGrounded answer files:\n${answerFilesSection}\n\n${packet.crossFileSummary ? `Cross-file summary:\\n${packet.crossFileSummary}\\n` : \"\"}\n\n${packet.researchSummary ? `Research synthesis:\\n${packet.researchSummary}\\n` : \"\"}\n\nExact identifiers:\n${exactIdentifierSection}\n\nSupporting excerpts:\n${supportingExcerptSection}\n\n${packet.orderedQuestions.length > 1 ? `\nReturn STRICT JSON in this format:\n{\n \"answers\": [\n { \"questionId\": \"q1\", \"answer\": \"grounded answer text\", \"evidenceStatus\": \"grounded\" | \"partial\" | \"missing\" }\n ]\n}\nThe answers array must cover the ordered question parts in user order.\n` : \"\"}\n\nInstructions:\n- Answer the user's question directly.\n- If ordered question parts are present, answer in that exact order with numbered sections.\n- If one question lacks evidence, say so for that question only and continue with the rest.\n- Prefer the grounded answer files and research synthesis over broad code dumps.\n- Use exact identifiers only when they materially support the answer.\n- Refer to files only when they help explain the answer.\n- If the reduced resumed context already answers the question, prefer it over broader repo context.\n- Do NOT speculate.\n- Do NOT suggest further changes.\n- Be concise, grounded, and outcome-focused.\n`.trim();\n}\n\n/**\n * Chooses which file list to expose in the final answer header.\n *\n * Priority examples:\n * - transformed file exists -> prefer that over focus-selected files because it reflects actual work\n * - no artifacts, but answer files exist -> use those fallback meaningful files\n * - nothing qualified -> return `[\"[none]\"]`\n */\nfunction resolveAnalyzedFilesForOutput(\n context: StructuredContext,\n fallbackMeaningfulFiles: string[]\n): string[] {\n const artifactPriority = resolveExecutedAnswerFiles(context, fallbackMeaningfulFiles);\n\n if (artifactPriority.length > 0) {\n return artifactPriority.slice(0, MAX_FILES);\n }\n\n const rationaleMentionedFiles = normalizeAnswerFilePaths(\n extractMentionedFilePaths(context.analysis?.focus?.rationale ?? \"\")\n );\n const preferredGroundedFiles = resolvePreferredGroundedFiles(context, rationaleMentionedFiles);\n const synthesisInputFiles = resolveArchitectureInputFiles(context);\n const loadedGroundedFiles = normalizeAnswerFilePaths(fallbackMeaningfulFiles).filter(filePath => {\n const isLoadedWorkingFile = (context.workingFiles ?? []).some(file => file.path === filePath && !!file.code?.trim());\n const isPreferredGrounded = preferredGroundedFiles.includes(filePath);\n const isSynthesisInput = synthesisInputFiles.includes(filePath);\n return isSynthesisInput || (isLoadedWorkingFile && isPreferredGrounded);\n });\n if (loadedGroundedFiles.length > 0) {\n return loadedGroundedFiles.slice(0, MAX_FILES);\n }\n\n return [\"[none]\"];\n}\n\n/**\n * Keeps answer reporting tied to executed or verified evidence, not raw candidate metadata.\n * Examples:\n * - completed task step or valid verification on a selected file -> include\n * - selected file with no execution or verify evidence -> exclude\n */\nfunction resolveExecutedAnswerFiles(\n context: StructuredContext,\n candidateAnswerFiles: string[]\n): string[] {\n const transformedFiles = (context.execution?.codeTransformArtifacts?.files ?? [])\n .map(file => file.filePath);\n const taskStepFiles = (context.task?.steps ?? [])\n .filter(step => isExecutionGroundedStep(step))\n .map(step => step.filePath);\n const validatedFiles = (context.analysis?.executionOutcome?.validations ?? [])\n .filter(validation => validation.status === \"valid\" && !!validation.filePath)\n .map(validation => validation.filePath);\n const verifyFiles = Object.entries(context.analysis?.verify?.byFile ?? {})\n .filter(([filePath, verify]) =>\n candidateAnswerFiles.includes(filePath) &&\n (context.analysis?.focus?.selectedFiles ?? []).includes(filePath) &&\n verify?.isRelevant === true &&\n (verify.fileConfidence ?? 0) >= 0.45\n )\n .map(([filePath]) => filePath);\n const synthesis = context.analysis?.researchArtifacts?.latestByAction?.[\"research-architecture-synthesis\"];\n const synthesisFiles = Array.isArray(synthesis?.collectedData?.architectureInputFiles)\n ? (synthesis?.collectedData?.architectureInputFiles as unknown[]).map(item => String(item))\n : [];\n\n return normalizeAnswerFilePaths([\n ...transformedFiles,\n ...taskStepFiles,\n ...validatedFiles,\n ...verifyFiles,\n ...synthesisFiles,\n ]).filter(filePath => candidateAnswerFiles.includes(filePath));\n}\n\nfunction resolveAnswerEvidenceLevel(\n context: StructuredContext,\n executedAnswerFiles: string[],\n candidateAnswerFiles: string[]\n): AnswerEvidenceLevel {\n if (context.analysis?.researchArtifacts?.latestByAction?.[\"research-architecture-synthesis\"]) {\n return \"synthesized\";\n }\n if (executedAnswerFiles.some(filePath => hasExecutionGradeAnswerEvidence(context, filePath))) {\n return \"executed\";\n }\n if (executedAnswerFiles.length > 0) {\n return \"verify\";\n }\n if (candidateAnswerFiles.length > 0) {\n return \"candidate-only\";\n }\n return \"none\";\n}\n\n/**\n * Distinguishes true execution evidence from verify-only grounded files.\n * Examples:\n * - transformed file or valid execution validation -> true\n * - verify-relevant selected file with no transform or validation -> false\n */\nfunction hasExecutionGradeAnswerEvidence(\n context: StructuredContext,\n filePath: string\n): boolean {\n return (context.task?.steps ?? []).some(step => isExecutionGroundedStep(step) && step.filePath === filePath) ||\n (context.execution?.codeTransformArtifacts?.files ?? []).some(file => file.filePath === filePath) ||\n (context.analysis?.executionOutcome?.validations ?? []).some(validation =>\n validation.status === \"valid\" && validation.filePath === filePath\n );\n}\n\n/**\n * Keeps final grounding on canonical repo file paths only.\n * Examples:\n * - \"/repo/cli/src/db/fileIndex.ts\" -> keep\n * - \"db/fileIndex.ts\" -> drop\n * - \"__research__/impact-map\" -> drop\n */\nfunction normalizeAnswerFilePaths(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\n/**\n * Selects verify-backed files when semantic analysis did not produce enough grounded answer files.\n *\n * Why this exists:\n * - verify can surface the files that best answer the user even when semantic excerpts are sparse\n * - we still keep the list narrow so the final answer stays grounded and readable\n *\n * Examples:\n * - existingPaths `[\"cli/src/index.ts\"]`, verify marks `\"cli/src/index.ts\"` relevant -> skip duplicate\n * - verify marks `\"README.md\"` relevant, but it was not selected/focused/touched this run -> skip as out of scope\n * - `\"cli/src/runner.ts\"` confidence `0.22` -> skip as too weak\n * - `\"cli/src/runner.ts\"` confidence `0.48` and query strongly prefers that path -> sort above a generic `0.48` match\n */\nfunction resolveVerifyMeaningfulFiles(\n context: StructuredContext,\n existingPaths: string[]\n): Array<{ path: string; analysis: FileAnalysis }> {\n const seen = new Set(existingPaths);\n const verifyByFile = context.analysis?.verify?.byFile ?? {};\n const fileAnalysis = context.analysis?.fileAnalysis ?? {};\n // Only consider files the run already had reason to care about.\n // Example: focused files, transformed files, or files opened in the working set.\n const eligibleVerifyFiles = new Set([\n ...(context.analysis?.focus?.selectedFiles ?? []),\n ...(context.execution?.codeTransformArtifacts?.files ?? []).map(file => file.filePath),\n ...(context.workingFiles ?? []).map(file => file.path),\n ]);\n\n return Object.entries(verifyByFile)\n .filter(([filePath, verify]) => {\n // Avoid repeating files that semantic selection already chose.\n if (seen.has(filePath)) return false;\n // Keep verify from pulling in unrelated repo files just because they scored well.\n if (!eligibleVerifyFiles.has(filePath)) return false;\n // Require verify to explicitly say the file matters.\n if (!verify?.isRelevant) return false;\n // Example: confidence 0.29 -> reject, confidence 0.30 -> keep.\n return (verify.fileConfidence ?? 0) >= 0.3;\n })\n .sort(([filePathA, verifyA], [filePathB, verifyB]) => {\n const prefA = getVerifyFocusFilePreference({\n query: context.initContext?.userQuery ?? \"\",\n filePath: filePathA,\n });\n const prefB = getVerifyFocusFilePreference({\n query: context.initContext?.userQuery ?? \"\",\n filePath: filePathB,\n });\n const scoreA = (verifyA.fileConfidence ?? 0) + (prefA.applies ? prefA.score : 0);\n const scoreB = (verifyB.fileConfidence ?? 0) + (prefB.applies ? prefB.score : 0);\n // Example: two files both score 0.50 from verify; the one matching an explicit query path wins.\n return scoreB - scoreA;\n })\n .slice(0, MAX_FILES)\n .map(([filePath]) => ({\n path: filePath,\n analysis: fileAnalysis[filePath] ?? {\n semanticAnalyzed: false,\n intent: \"relevant\",\n proposedChanges: {\n summary: \"Verify evidence selected this file as relevant to the final answer.\",\n targets: [\"verify evidence\"],\n rationale: \"Used as a grounded answer source because verify evidence was stronger than semantic analysis coverage.\",\n },\n } as FileAnalysis,\n }));\n}\n\n/**\n * Keeps verify-backed execution files in the final packet when a verify-focus answer also has broad semantic docs.\n * Example: a verify-wave trace can keep `mainAgentVerify.ts` and `fileCheckStep.ts`\n * ahead of `README.md` instead of treating verify files as fallback-only.\n */\nfunction resolveMeaningfulAnswerFiles(\n context: StructuredContext,\n meaningfulFiles: Array<{ path: string; analysis: FileAnalysis }>,\n verifyMeaningfulFiles: Array<{ path: string; analysis: FileAnalysis }>\n): Array<{ path: string; analysis: FileAnalysis }> {\n if (meaningfulFiles.length === 0) {\n return verifyMeaningfulFiles;\n }\n\n const query = context.initContext?.userQuery ?? \"\";\n if (!isVerifyFocusQueryText(query) || verifyMeaningfulFiles.length === 0) {\n const focusedWorkingFiles = resolveFocusedWorkingAnswerFiles(context, meaningfulFiles.map(file => file.path));\n if (focusedWorkingFiles.length === 0) {\n return meaningfulFiles;\n }\n const merged = new Map<string, { path: string; analysis: FileAnalysis }>();\n for (const file of [...focusedWorkingFiles, ...meaningfulFiles]) {\n if (!merged.has(file.path)) {\n merged.set(file.path, file);\n }\n }\n return Array.from(merged.values()).slice(0, MAX_FILES);\n }\n\n const merged = new Map<string, { path: string; analysis: FileAnalysis }>();\n const focusedWorkingFiles = resolveFocusedWorkingAnswerFiles(\n context,\n [...meaningfulFiles, ...verifyMeaningfulFiles].map(file => file.path)\n );\n for (const file of [...verifyMeaningfulFiles, ...focusedWorkingFiles, ...meaningfulFiles]) {\n if (!merged.has(file.path)) {\n merged.set(file.path, file);\n }\n }\n return Array.from(merged.values()).slice(0, MAX_FILES);\n}\n\nfunction resolveFocusedWorkingAnswerFiles(\n context: StructuredContext,\n existingPaths: string[]\n): Array<{ path: string; analysis: FileAnalysis }> {\n const query = context.initContext?.userQuery ?? \"\";\n if (!isVerifyFocusQueryText(query)) {\n return [];\n }\n\n const seen = new Set(existingPaths);\n const fileAnalysis = context.analysis?.fileAnalysis ?? {};\n const selected = new Set(context.analysis?.focus?.selectedFiles ?? []);\n\n return (context.workingFiles ?? [])\n .filter(file => selected.has(file.path))\n .filter(file => !seen.has(file.path))\n .filter(file => file.code?.trim())\n .filter(file => getVerifyFocusFilePreference({ query, filePath: file.path }).score > 0)\n .map(file => ({\n path: file.path,\n analysis: fileAnalysis[file.path] ?? {\n semanticAnalyzed: false,\n intent: \"relevant\",\n proposedChanges: {\n summary: \"Focused working file selected during verify and kept for final grounding.\",\n targets: [\"verify focus\"],\n rationale: \"Used as a grounded answer source because the verify-focused query selected and executed this file.\",\n },\n } as FileAnalysis,\n }))\n .slice(0, MAX_FILES);\n}\n\n/**\n * Collects exact symbol/structural excerpts for one file from verify evidence.\n *\n * Example:\n * - evidence excerpts [\"getGroundingWaveBudget\", \"runVerifyWave\"] -> preserve both in confidence order\n * - import excerpt `import { upsertFileTemplate } from '../db/sqlTemplates.js';` -> preserve `upsertFileTemplate`\n */\nfunction collectVerifyExactSymbols(\n context: StructuredContext,\n filePath: string\n): string[] {\n const evidence = context.analysis?.verify?.byFile?.[filePath]?.evidence ?? [];\n const ranked = evidence\n .filter(item =>\n (item.type === \"symbol\" || item.type === \"structural\") &&\n typeof item.excerpt === \"string\" &&\n item.excerpt.trim().length > 0 &&\n (item.confidence ?? 0) >= MIN_EXACT_VERIFY_CONFIDENCE\n )\n .sort((a, b) => (b.confidence ?? 0) - (a.confidence ?? 0));\n\n const out: string[] = [];\n const seen = new Set<string>();\n for (const item of ranked) {\n const identifiers = extractUsefulExactIdentifiers(item.excerpt!);\n if (identifiers.length === 0) continue;\n for (const identifier of identifiers) {\n const key = identifier.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(identifier);\n if (out.length >= 4) break;\n }\n if (out.length >= 4) break;\n }\n\n return out;\n}\n\nfunction collectAnswerExactIdentifiers(\n context: StructuredContext,\n filePath: string,\n query: string\n): string[] {\n const verifyIdentifiers = collectVerifyExactSymbols(context, filePath);\n if (verifyIdentifiers.length > 0) {\n return verifyIdentifiers;\n }\n if (!shouldUseQueryAlignedExactIdentifiers(context, query)) {\n return [];\n }\n return collectQueryAlignedIdentifiers(context, filePath, query);\n}\n\nfunction shouldUseQueryAlignedExactIdentifiers(context: StructuredContext, query: string): boolean {\n if ((context.analysis?.intent?.questions?.length ?? 0) > 1) {\n return true;\n }\n if (context.analysis?.scopeType === \"repo-wide\") {\n return true;\n }\n const normalized = query.trim().toLowerCase();\n return /\\b(explain|summarize|trace|how|where)\\b/.test(normalized);\n}\n\n/**\n * Falls back to query-aligned code identifiers when verify evidence did not preserve the exact symbol.\n * Example: \"How is verify triggered?\" can surface `runVerify` from MainAgent.ts.\n */\nfunction collectQueryAlignedIdentifiers(\n context: StructuredContext,\n filePath: string,\n query: string\n): string[] {\n const code = context.workingFiles?.find(file => file.path === filePath)?.code ?? \"\";\n if (!code.trim()) {\n return [];\n }\n\n const queryTerms = extractQueryFocusTerms(query);\n if (queryTerms.length === 0) {\n return [];\n }\n\n const declarationIdentifiers = extractDeclarationIdentifiers(code)\n .filter(identifier => {\n const identifierParts = splitIdentifierParts(identifier);\n const overlap = identifierParts.filter(part => queryTerms.includes(part));\n return overlap.length > 0;\n });\n const preferredDeclarations = keepUsefulIdentifiers(declarationIdentifiers);\n if (preferredDeclarations.length > 0) {\n return preferredDeclarations.slice(0, 4);\n }\n\n const identifiers = code.match(/[A-Za-z_$][A-Za-z0-9_$]{2,}/g) ?? [];\n const ranked: string[] = [];\n const seen = new Set<string>();\n\n for (const identifier of identifiers) {\n if (seen.has(identifier)) continue;\n const identifierParts = splitIdentifierParts(identifier);\n const overlap = identifierParts.filter(part => queryTerms.includes(part));\n if (overlap.length === 0) continue;\n if (!/^(run|route|verify|search|resolve|trigger)/i.test(identifier) && overlap.length < 2) {\n continue;\n }\n seen.add(identifier);\n ranked.push(identifier);\n if (ranked.length >= 4) break;\n }\n\n return keepUsefulIdentifiers(ranked);\n}\n\nfunction extractDeclarationIdentifiers(code: string): string[] {\n const matches = Array.from(code.matchAll(/\\b(?:export\\s+)?(?:async\\s+)?(?:function|const|let|var|class)\\s+([A-Za-z_$][\\w$]*)\\b/g));\n return matches.map(match => match[1]).filter(Boolean);\n}\n\nfunction buildQueryAlignedFileLabel(filePath: string, query: string): string | undefined {\n const stem = path.basename(filePath, path.extname(filePath));\n const label = stem\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim();\n if (!label) {\n return undefined;\n }\n\n const normalizedLabel = label.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n if (normalizedQuery.includes(normalizedLabel)) {\n return label.replace(/\\b\\w/g, char => char.toUpperCase());\n }\n\n const labelTerms = normalizedLabel.split(/\\s+/).filter(term => term.length >= 4);\n const queryTerms = extractQueryFocusTerms(query);\n const overlap = labelTerms.filter(term => queryTerms.includes(term));\n if (overlap.length >= Math.min(2, labelTerms.length)) {\n return label.replace(/\\b\\w/g, char => char.toUpperCase());\n }\n\n return undefined;\n}\n\nfunction extractQueryFocusTerms(query: string): string[] {\n const ignored = new Set([\n \"where\", \"what\", \"when\", \"why\", \"which\", \"who\", \"how\", \"is\", \"are\", \"do\", \"does\",\n \"the\", \"this\", \"that\", \"these\", \"those\", \"and\", \"for\", \"with\", \"from\", \"into\", \"across\",\n ]);\n\n return Array.from(new Set(\n (query.match(/[A-Za-z][A-Za-z0-9]+/g) ?? [])\n .map(token => normalizeQueryFocusTerm(token))\n .filter(token => token.length >= 4 && !ignored.has(token))\n ));\n}\n\nfunction normalizeQueryFocusTerm(token: string): string {\n const lower = token.toLowerCase();\n if (lower.endsWith(\"ing\") && lower.length > 5) return lower.slice(0, -3);\n if (lower.endsWith(\"ed\") && lower.length > 4) return lower.slice(0, -2);\n if (lower.endsWith(\"es\") && lower.length > 4) return lower.slice(0, -2);\n if (lower.endsWith(\"s\") && lower.length > 4) return lower.slice(0, -1);\n return lower;\n}\n\nfunction splitIdentifierParts(identifier: string): string[] {\n return identifier\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .toLowerCase()\n .split(/\\s+/)\n .map(part => normalizeQueryFocusTerm(part))\n .filter(part => part.length >= 4);\n}\n\n/**\n * Extracts declaration-like identifiers and drops weak generic tokens.\n *\n * Examples:\n * - `export function getGroundingWaveBudget()` -> `getGroundingWaveBudget`\n * - `import { upsertFileTemplate } from '../db/sqlTemplates.js';` -> `upsertFileTemplate`\n * - comment-only snippets -> `[]`\n */\nfunction extractUsefulExactIdentifiers(excerpt: string): string[] {\n const trimmed = excerpt.trim();\n\n if (!trimmed) return [];\n\n const importIdentifiers = extractImportIdentifiers(trimmed);\n if (importIdentifiers.length > 0) {\n return importIdentifiers;\n }\n\n const declarationPatterns = [\n /\\b(?:export\\s+)?(?:async\\s+)?function\\s+([A-Za-z_$][\\w$]*)\\b/,\n /\\b(?:export\\s+)?(?:const|let|var|class|interface|type|enum)\\s+([A-Za-z_$][\\w$]*)\\b/,\n /\\b([A-Za-z_$][\\w$]*)\\s*=\\s*(?:async\\s*)?\\(/,\n ];\n for (const pattern of declarationPatterns) {\n const match = trimmed.match(pattern);\n const identifier = match?.[1];\n if (identifier) {\n return keepUsefulIdentifiers([identifier]);\n }\n }\n\n if (/^[A-Za-z_$][\\w$]*$/.test(trimmed)) {\n return keepUsefulIdentifiers([trimmed]);\n }\n\n return [];\n}\n\n/**\n * Extracts local names from import snippets so the final answer can cite exact imported symbols.\n *\n * Examples:\n * - `import foo, { bar as baz } from 'pkg'` -> [`foo`, `baz`]\n * - `import * as sqlTemplates from '../db/sqlTemplates.js'` -> [`sqlTemplates`]\n */\nfunction extractImportIdentifiers(excerpt: string): string[] {\n if (!/\\bimport\\b/.test(excerpt)) {\n return [];\n }\n\n const out: string[] = [];\n\n const importStatements = excerpt.match(/import[\\s\\S]*?from\\s+['\"][^'\"]+['\"];?/g) ?? [];\n for (const statement of importStatements) {\n const namespaceMatch = statement.match(/import\\s+\\*\\s+as\\s+([A-Za-z_$][\\w$]*)\\s+from\\b/);\n if (namespaceMatch?.[1]) {\n out.push(namespaceMatch[1]);\n }\n\n const defaultMatch = statement.match(/import\\s+([A-Za-z_$][\\w$]*)(?:\\s*,|\\s+from\\b)/);\n if (defaultMatch?.[1] && defaultMatch[1] !== \"type\") {\n out.push(defaultMatch[1]);\n }\n\n const namedMatch = statement.match(/\\{([^}]+)\\}/);\n if (namedMatch?.[1]) {\n for (const part of namedMatch[1].split(\",\")) {\n const cleaned = part.trim().replace(/^type\\s+/, \"\");\n if (!cleaned) continue;\n const aliasMatch = cleaned.match(/^(?:[A-Za-z_$][\\w$]*)\\s+as\\s+([A-Za-z_$][\\w$]*)$/);\n if (aliasMatch?.[1]) {\n out.push(aliasMatch[1]);\n continue;\n }\n const directMatch = cleaned.match(/^([A-Za-z_$][\\w$]*)$/);\n if (directMatch?.[1]) {\n out.push(directMatch[1]);\n }\n }\n }\n }\n\n return keepUsefulIdentifiers(out);\n}\n\nfunction keepUsefulIdentifiers(identifiers: string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const identifier of identifiers) {\n const trimmed = identifier.trim();\n if (!trimmed || GENERIC_VERIFY_IDENTIFIERS.has(trimmed.toLowerCase())) {\n continue;\n }\n const key = trimmed.toLowerCase();\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push(trimmed);\n }\n return out;\n}\n"]}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts a small knowledge graph from one file body outside the default live runtime.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - older KG enrichment still lives in the repo for possible later reuse
|
|
6
|
+
* - the default indexing path and the new agent do not depend on KG output
|
|
7
|
+
* - any later KG revival should stay a secondary retrieval hint, not grounded answer evidence
|
|
8
|
+
*/
|
|
1
9
|
import { Config } from '../../config.js';
|
|
2
10
|
import { generate } from '../../lib/generate.js';
|
|
3
11
|
import path from 'path';
|
|
@@ -49,7 +57,15 @@ ${content}
|
|
|
49
57
|
query: 'Extract entities and relationships for knowledge graph',
|
|
50
58
|
content: prompt,
|
|
51
59
|
};
|
|
52
|
-
const genOutput = await generate(genInput
|
|
60
|
+
const genOutput = await generate(genInput, {
|
|
61
|
+
caller: "kgModule",
|
|
62
|
+
inputContext: {
|
|
63
|
+
filepath: input.filepath,
|
|
64
|
+
filename,
|
|
65
|
+
extension: ext,
|
|
66
|
+
content,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
53
69
|
// === INTERACTION #2: cleanupModule (via ModuleIO) ===
|
|
54
70
|
const cleaned = await cleanupModule.run({
|
|
55
71
|
query: 'Clean up JSON for knowledge graph',
|
|
@@ -68,3 +84,4 @@ ${content}
|
|
|
68
84
|
}
|
|
69
85
|
},
|
|
70
86
|
};
|
|
87
|
+
//# sourceMappingURL=kgModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kgModule.js","sourceRoot":"","sources":["../../../src/pipeline/modules/kgModule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,qFAAqF;IAElG,GAAG,EAAE,KAAK,EAAE,KAA0B,EAAE,OAAe,EAA2B,EAAE;QAClF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,uBAAuB;QACvB,MAAM,MAAM,GAAG;;;;;QAKX,QAAQ;aACH,GAAG;;;;;;;;;;;;;;;;;;;;;;EAsBd,OAAO;;KAEJ,CAAC,IAAI,EAAE,CAAC;QAET,IAAI,CAAC;YACH,qDAAqD;YACrD,MAAM,QAAQ,GAAa;gBACzB,KAAK,EAAE,wDAAwD;gBAC/D,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,SAAS,GAAa,MAAM,QAAQ,CAAC,QAAQ,EAAE;gBACnD,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE;oBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ;oBACR,SAAS,EAAE,GAAG;oBACd,OAAO;iBACR;aACF,CAAC,CAAC;YAEH,uDAAuD;YACvD,MAAM,OAAO,GAAa,MAAM,aAAa,CAAC,GAAG,CAAC;gBAChD,KAAK,EAAE,mCAAmC;gBAC1C,OAAO,EAAE,SAAS,CAAC,IAAI;aACxB,CAAC,CAAC;YAEH,0CAA0C;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAiB,OAAO,CAAC,IAAI,CAAC,CAAC;YAE3D,4BAA4B;YAC5B,MAAM,CAAC,QAAQ,KAAf,MAAM,CAAC,QAAQ,GAAK,EAAE,EAAC;YACvB,MAAM,CAAC,KAAK,KAAZ,MAAM,CAAC,KAAK,GAAK,EAAE,EAAC;YAEpB,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC1F,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/**\n * Extracts a small knowledge graph from one file body outside the default live runtime.\n *\n * Why this file exists:\n * - older KG enrichment still lives in the repo for possible later reuse\n * - the default indexing path and the new agent do not depend on KG output\n * - any later KG revival should stay a secondary retrieval hint, not grounded answer evidence\n */\nimport { Config } from '../../config.js';\nimport { generate } from '../../lib/generate.js';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { KnowledgeGraphInput, KnowledgeGraph, ModuleIO } from '../../types.js';\nimport { cleanupModule } from './cleanupModule.js';\nimport { normalizeData } from '../../utils/normalizeData.js';\n\nexport const kgModule = {\n name: 'knowledge-graph',\n description: 'Generates a knowledge graph of entities, tags, and relationships from file content.',\n\n run: async (input: KnowledgeGraphInput, content: string): Promise<KnowledgeGraph> => {\n const model = Config.getModel();\n const ext = input.filepath ? path.extname(input.filepath).toLowerCase() : '';\n const filename = input.filepath ? path.basename(input.filepath) : '';\n\n // Build prompt for LLM\n const prompt = `\nYou are an assistant specialized in building knowledge graphs from code or text.\n\nYour task is to extract structured information from the file content below.\n\nFile: ${filename}\nExtension: ${ext}\n\nđ Instructions:\n- Identify all entities (functions, classes, modules, or main concepts)\n- For each entity, generate tags describing its characteristics, purpose, or category\n- Identify relationships between entities (e.g., \"uses\", \"extends\", \"calls\")\n- Return output in **valid JSON** format with this structure:\n\n{\n \"entities\": [\n { \"name\": \"EntityName\", \"type\": \"class|function|module|concept\", \"tags\": [\"tag1\", \"tag2\"] }\n ],\n \"edges\": [\n { \"from\": \"EntityName1\", \"to\": \"EntityName2\", \"type\": \"relationship_type\" }\n ]\n}\n\nâ ď¸ Make sure all strings are safely JSON-encoded: escape quotes, backslashes, and newlines.\n\nDo NOT include raw content from the file. Only provide structured JSON output.\n\n--- FILE CONTENT START ---\n${content}\n--- FILE CONTENT END ---\n `.trim();\n\n try {\n // === INTERACTION #1: generate.ts (via ModuleIO) ===\n const genInput: ModuleIO = {\n query: 'Extract entities and relationships for knowledge graph',\n content: prompt,\n };\n\n const genOutput: ModuleIO = await generate(genInput, {\n caller: \"kgModule\",\n inputContext: {\n filepath: input.filepath,\n filename,\n extension: ext,\n content,\n },\n });\n\n // === INTERACTION #2: cleanupModule (via ModuleIO) ===\n const cleaned: ModuleIO = await cleanupModule.run({\n query: 'Clean up JSON for knowledge graph',\n content: genOutput.data,\n });\n\n // === Normalize and parse JSON result ===\n const parsed = normalizeData<KnowledgeGraph>(cleaned.data);\n\n // Ensure structure validity\n parsed.entities ??= [];\n parsed.edges ??= [];\n\n return parsed;\n\n } catch (err) {\n console.log(chalk.yellow(`â ď¸ [KG] Garbage or invalid JSON output for ${input.filepath}`));\n return { entities: [], edges: [] };\n }\n },\n};\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the explicit plan-mode response from the shared rolling-plan state.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - explicit `/plan` should show a plan without pretending it is a grounded final answer
|
|
6
|
+
* - plan mode should reuse the same task, rolling plan, and progress data as normal execution
|
|
7
|
+
* - the output should stay deterministic so users can trust what explicit plan mode does
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import { logInputOutput } from "../../utils/promptLogHelper.js";
|
|
11
|
+
function renderOrderedQuestions(context) {
|
|
12
|
+
const questions = context.analysis?.intent?.questions ?? [];
|
|
13
|
+
if (questions.length <= 1)
|
|
14
|
+
return [];
|
|
15
|
+
return questions.map((question, index) => `${index + 1}. ${question.text}`);
|
|
16
|
+
}
|
|
17
|
+
function renderSubgoals(context) {
|
|
18
|
+
const subgoals = context.analysis?.rollingPlan?.subgoals ?? [];
|
|
19
|
+
if (subgoals.length === 0)
|
|
20
|
+
return ["1. No plan stages available yet."];
|
|
21
|
+
return subgoals.map((goal, index) => `${index + 1}. [${goal.status}] ${goal.label}`);
|
|
22
|
+
}
|
|
23
|
+
function renderNextActions(context) {
|
|
24
|
+
const nextActions = context.analysis?.rollingPlan?.nextActions ?? [];
|
|
25
|
+
if (nextActions.length === 0) {
|
|
26
|
+
return ["1. Review the saved plan and decide whether to execute or revise it."];
|
|
27
|
+
}
|
|
28
|
+
return nextActions.map((action, index) => `${index + 1}. ${action}`);
|
|
29
|
+
}
|
|
30
|
+
function buildPlanText(context, query) {
|
|
31
|
+
const summary = context.analysis?.rollingPlan?.summary ?? "Plan generated from the current task.";
|
|
32
|
+
const objective = context.analysis?.intent?.normalizedQuery ?? context.task?.initialQuery ?? query;
|
|
33
|
+
const orderedQuestions = renderOrderedQuestions(context);
|
|
34
|
+
const subgoals = renderSubgoals(context);
|
|
35
|
+
const nextActions = renderNextActions(context);
|
|
36
|
+
const lines = [
|
|
37
|
+
"Plan mode",
|
|
38
|
+
"",
|
|
39
|
+
`Objective: ${objective}`,
|
|
40
|
+
`Summary: ${summary}`,
|
|
41
|
+
"",
|
|
42
|
+
];
|
|
43
|
+
if (orderedQuestions.length > 0) {
|
|
44
|
+
lines.push("Questions:");
|
|
45
|
+
lines.push(...orderedQuestions);
|
|
46
|
+
lines.push("");
|
|
47
|
+
}
|
|
48
|
+
lines.push("Plan:");
|
|
49
|
+
lines.push(...subgoals);
|
|
50
|
+
lines.push("");
|
|
51
|
+
lines.push("Next actions:");
|
|
52
|
+
lines.push(...nextActions);
|
|
53
|
+
lines.push("");
|
|
54
|
+
lines.push("Execution has not started. This task was saved in plan-only mode.");
|
|
55
|
+
const dialog = context.task?.dialogState;
|
|
56
|
+
if (dialog?.status === "awaiting-user") {
|
|
57
|
+
lines.push("");
|
|
58
|
+
lines.push(dialog.prompt);
|
|
59
|
+
lines.push("");
|
|
60
|
+
lines.push("Options:");
|
|
61
|
+
for (const option of dialog.options) {
|
|
62
|
+
lines.push(`- ${option}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push("");
|
|
65
|
+
lines.push("You can pick an option and add a comment.");
|
|
66
|
+
lines.push(`Example: ${dialog.options[0] ?? "revise"}: focus on runtime behavior`);
|
|
67
|
+
}
|
|
68
|
+
return lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
export const planAnswerModule = {
|
|
71
|
+
name: "planAnswer",
|
|
72
|
+
description: "Produces the user-facing response for explicit plan mode without entering execution.",
|
|
73
|
+
groups: ["finalize"],
|
|
74
|
+
run: async (input) => {
|
|
75
|
+
const context = input.context;
|
|
76
|
+
if (!context) {
|
|
77
|
+
throw new Error("[planAnswerModule] No context provided");
|
|
78
|
+
}
|
|
79
|
+
const finalText = buildPlanText(context, input.query);
|
|
80
|
+
context.analysis || (context.analysis = {});
|
|
81
|
+
context.analysis.finalAnswer = finalText;
|
|
82
|
+
logInputOutput("planAnswerModule", "output", {
|
|
83
|
+
planMode: context.analysis.planMode,
|
|
84
|
+
rollingPlan: context.analysis.rollingPlan,
|
|
85
|
+
dialogState: context.task?.dialogState,
|
|
86
|
+
});
|
|
87
|
+
console.log(chalk.yellow(`\n\n[PLAN]\n${finalText}\n`));
|
|
88
|
+
return {
|
|
89
|
+
...input,
|
|
90
|
+
content: finalText,
|
|
91
|
+
data: {
|
|
92
|
+
response: finalText,
|
|
93
|
+
mode: "plan-only",
|
|
94
|
+
},
|
|
95
|
+
context,
|
|
96
|
+
};
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=planAnswerModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planAnswerModule.js","sourceRoot":"","sources":["../../../src/pipeline/modules/planAnswerModule.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Renders the explicit plan-mode response from the shared rolling-plan state.\n *\n * Why this exists:\n * - explicit `/plan` should show a plan without pretending it is a grounded final answer\n * - plan mode should reuse the same task, rolling plan, and progress data as normal execution\n * - the output should stay deterministic so users can trust what explicit plan mode does\n */\nimport chalk from \"chalk\";\nimport type { ModuleIO, StructuredContext } from \"../../types.js\";\nimport { logInputOutput } from \"../../utils/promptLogHelper.js\";\n\nfunction renderOrderedQuestions(context: StructuredContext): string[] {\n const questions = context.analysis?.intent?.questions ?? [];\n if (questions.length <= 1) return [];\n return questions.map((question, index) => `${index + 1}. ${question.text}`);\n}\n\nfunction renderSubgoals(context: StructuredContext): string[] {\n const subgoals = context.analysis?.rollingPlan?.subgoals ?? [];\n if (subgoals.length === 0) return [\"1. No plan stages available yet.\"];\n return subgoals.map((goal, index) => `${index + 1}. [${goal.status}] ${goal.label}`);\n}\n\nfunction renderNextActions(context: StructuredContext): string[] {\n const nextActions = context.analysis?.rollingPlan?.nextActions ?? [];\n if (nextActions.length === 0) {\n return [\"1. Review the saved plan and decide whether to execute or revise it.\"];\n }\n return nextActions.map((action, index) => `${index + 1}. ${action}`);\n}\n\nfunction buildPlanText(context: StructuredContext, query: string): string {\n const summary = context.analysis?.rollingPlan?.summary ?? \"Plan generated from the current task.\";\n const objective = context.analysis?.intent?.normalizedQuery ?? context.task?.initialQuery ?? query;\n const orderedQuestions = renderOrderedQuestions(context);\n const subgoals = renderSubgoals(context);\n const nextActions = renderNextActions(context);\n\n const lines = [\n \"Plan mode\",\n \"\",\n `Objective: ${objective}`,\n `Summary: ${summary}`,\n \"\",\n ];\n\n if (orderedQuestions.length > 0) {\n lines.push(\"Questions:\");\n lines.push(...orderedQuestions);\n lines.push(\"\");\n }\n\n lines.push(\"Plan:\");\n lines.push(...subgoals);\n lines.push(\"\");\n lines.push(\"Next actions:\");\n lines.push(...nextActions);\n lines.push(\"\");\n lines.push(\"Execution has not started. This task was saved in plan-only mode.\");\n\n const dialog = context.task?.dialogState;\n if (dialog?.status === \"awaiting-user\") {\n lines.push(\"\");\n lines.push(dialog.prompt);\n lines.push(\"\");\n lines.push(\"Options:\");\n for (const option of dialog.options) {\n lines.push(`- ${option}`);\n }\n lines.push(\"\");\n lines.push(\"You can pick an option and add a comment.\");\n lines.push(`Example: ${dialog.options[0] ?? \"revise\"}: focus on runtime behavior`);\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const planAnswerModule = {\n name: \"planAnswer\",\n description: \"Produces the user-facing response for explicit plan mode without entering execution.\",\n groups: [\"finalize\"],\n\n run: async (input: ModuleIO): Promise<ModuleIO> => {\n const context = input.context as StructuredContext | undefined;\n if (!context) {\n throw new Error(\"[planAnswerModule] No context provided\");\n }\n\n const finalText = buildPlanText(context, input.query);\n context.analysis ||= {};\n context.analysis.finalAnswer = finalText;\n\n logInputOutput(\"planAnswerModule\", \"output\", {\n planMode: context.analysis.planMode,\n rollingPlan: context.analysis.rollingPlan,\n dialogState: context.task?.dialogState,\n });\n console.log(chalk.yellow(`\\n\\n[PLAN]\\n${finalText}\\n`));\n\n return {\n ...input,\n content: finalText,\n data: {\n response: finalText,\n mode: \"plan-only\",\n },\n context,\n };\n },\n};\n"]}
|