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":"index.js","sourceRoot":"","sources":["../../../src/agent/actions/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Defines the action menu and action specs for the new simple agent runtime.\n *\n * Why this file exists:\n * - the loop should choose runtime actions, not raw helper modules\n * - plan and end-of-run actions are control actions beside tool-backed actions\n * - action sanitizing should stay in one place\n * - loose planner/model arg repair should live in `normalize.ts`\n * - coverage and stop legality should stay in policy instead of shortcutting here\n * - planned runtime steps should use the shared step creator\n * - transform now runs as one hidden batched action behind the same action menu\n * - prompt ownership lives under `agent/prompting/**`\n * - structured parsing lives under `agent/structuredOutput/**`\n */\nimport type { AgentUI } from \"../../types.js\";\nimport { generate } from \"../../lib/generate.js\";\nimport { emitAgentLlmTimingMessage } from \"../../utils/consolePresentation.js\";\nimport { nowLocalIso } from \"../../utils/time.js\";\nimport { uniqueStrings } from \"../evidence/index.js\";\nimport {\n getErrorMessage,\n getErrorTrace,\n logAgentLlmFailure,\n logAgentLlmInput,\n logAgentLlmOutput,\n logAgentToolFailure,\n logAgentToolInput,\n logAgentToolOutput,\n recordAgentArtifact,\n} from \"../logging/index.js\";\nimport { buildFinalAnswerPacket, buildPlanPacket, renderFinalAnswerPrompt, renderPlanPrompt } from \"../prompting/index.js\";\nimport { createDurableCheckpointFromArtifacts, renderResumeCheckpointForPrompt } from \"../resume/checkpoint.js\";\nimport { buildRequestUserInputMessage, prepareAgentWaitingState } from \"../feedback/index.js\";\nimport { resolveNextReadTarget, resolvePolicyState } from \"../policy/index.js\";\nimport {\n formatTransformCompletionMilestone,\n formatTransformFailureMilestone,\n formatTransformLoopProgress,\n formatTransformRetryMilestone,\n formatTransformStartMilestone,\n formatTransformWarningMilestone,\n} from \"../runtime/progress.js\";\nimport { sanitizePlan } from \"./normalize.js\";\nexport { buildActionMenu, sanitizeDecision, sanitizePlan } from \"./normalize.js\";\nimport {\n CODE_TRANSFORM_SCHEMA,\n EMPTY_OBJECT_SCHEMA,\n LIST_DIRECTORY_SCHEMA,\n READ_FILE_SCHEMA,\n SEARCH_DB_SCHEMA,\n SEARCH_REGEX_SCHEMA,\n TRIAGE_FILE_SCHEMA,\n} from \"./schemas.js\";\nimport { createRuntimeStep } from \"../state/index.js\";\nimport { runCodeTransform } from \"../transform/index.js\";\nimport { parseStructuredJson } from \"../structuredOutput/index.js\";\nimport { AgentRuntimeError, type ActionResult, type AgentActionName, type AgentActionSpec, type AgentMemory, type AgentPlanArtifact, type AgentTool, type JsonSchema } from \"../types.js\";\n\nfunction pluralize(count: number, noun: string): string {\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction buildAttemptLines(memory: AgentMemory): string[] {\n const completedSteps = memory.steps.filter((step) => step.status === \"done\" || step.status === \"failed\" || step.status === \"blocked\");\n const actionCounts = new Map<AgentActionName, number>();\n for (const step of completedSteps) {\n if (step.action === \"final-answer\" || step.action === \"cannot-answer\" || step.action === \"request-user-input\") {\n continue;\n }\n actionCounts.set(step.action, (actionCounts.get(step.action) ?? 0) + 1);\n }\n\n const actionLines = Array.from(actionCounts.entries()).map(([action, count]) => {\n switch (action) {\n case \"plan\":\n return `- replanned ${pluralize(count, \"time\")}`;\n case \"search-db\":\n return `- searched indexed files ${pluralize(count, \"time\")}`;\n case \"search-regex\":\n return `- ran regex search ${pluralize(count, \"time\")}`;\n case \"search-list-directory\":\n return `- listed directories ${pluralize(count, \"time\")}`;\n case \"triage-file\":\n return `- triaged files ${pluralize(count, \"time\")}`;\n case \"read-file\":\n return `- read files ${pluralize(count, \"time\")}`;\n case \"codeTransform\":\n return `- transformed files ${pluralize(count, \"time\")}`;\n default:\n return null;\n }\n }).filter((line): line is string => !!line);\n\n return [\n ...actionLines,\n `- searched ${pluralize(memory.evidence.searches.length, \"time\")}`,\n `- read ${pluralize(Object.keys(memory.evidence.fileReads).length, \"file\")}`,\n ];\n}\n\nfunction buildCannotAnswerMessage(memory: AgentMemory): string {\n const reason = memory.task.stopReason === \"max-turns\"\n ? \"no grounded answer before the turn budget ended\"\n : \"the gathered evidence was still too weak to answer reliably\";\n return [\n \"I could not answer from grounded repo evidence.\",\n \"I tried:\",\n ...buildAttemptLines(memory),\n \"\",\n \"Why I stopped:\",\n `- ${reason}`,\n ].join(\"\\n\");\n}\n\nfunction toolBackedAction(\n name: Extract<AgentActionName, \"search-db\" | \"search-regex\" | \"search-list-directory\" | \"triage-file\" | \"read-file\">,\n tool: AgentTool,\n schema: JsonSchema\n): AgentActionSpec {\n return {\n name,\n kind: \"tool\",\n description: tool.description ?? name,\n inputSchema: schema,\n outputSchema: tool.outputSchema,\n async run(memory, args) {\n const stepId = memory.task.currentStepId ?? \"unknown-step\";\n logAgentToolInput(memory, stepId, name, args);\n try {\n const output = await tool.invoke(args, memory);\n logAgentToolOutput(memory, stepId, name, output);\n return {\n ok: true,\n summary: `Ran ${name}.`,\n output,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logAgentToolFailure(memory, {\n stage: \"tool\",\n message,\n action: name,\n stepId,\n }, {\n args,\n });\n return {\n ok: false,\n summary: message,\n };\n }\n },\n };\n}\n\nexport function buildActions(\n tools: Record<string, AgentTool>,\n ui: AgentUI\n): Record<AgentActionName, AgentActionSpec> {\n return {\n plan: {\n name: \"plan\",\n kind: \"control\",\n description: \"Create or revise a small ordered step list.\",\n inputSchema: EMPTY_OBJECT_SCHEMA,\n async run(memory) {\n const packet = buildPlanPacket(memory, resolvePolicyState(memory).allowedActions);\n const prompt = renderPlanPrompt(packet);\n const stepId = memory.task.currentStepId;\n logAgentLlmInput(memory, \"agent.plan\", packet, stepId, nowLocalIso());\n try {\n const response = await generate({ query: memory.task.initialQuery, content: prompt }, {\n caller: \"agent.plan\",\n inputContext: packet,\n });\n const parsed = parseStructuredJson<Partial<AgentPlanArtifact>>(String(response?.data ?? \"\"), { fallback: {\n goal: memory.task.primaryIntent,\n why: \"Gather the smallest grounded evidence needed to answer.\",\n steps: [],\n } });\n const plan = sanitizePlan(memory, parsed);\n logAgentLlmOutput(memory, \"agent.plan\", {\n parsed: plan,\n }, stepId, response?.trace);\n emitAgentLlmTimingMessage(ui, \"agent.plan\", response?.trace);\n memory.artifacts.plans.push(plan);\n recordAgentArtifact(memory.artifacts, \"plan\", plan);\n for (const plannedStep of plan.steps) {\n createRuntimeStep(\n memory,\n plannedStep.action,\n plannedStep.purpose,\n plannedStep.args,\n plannedStep.expectedEvidence\n );\n }\n memory.task.replanCount += 1;\n return {\n ok: true,\n summary: `Planned ${plan.steps.length} step(s).`,\n output: plan,\n };\n } catch (error) {\n const details = {\n stage: \"plan\",\n message: getErrorMessage(error),\n action: \"plan\" as const,\n stepId,\n };\n logAgentLlmFailure(memory, \"agent.plan\", details, getErrorTrace(error));\n throw new AgentRuntimeError(details, error);\n }\n },\n },\n \"search-db\": toolBackedAction(\"search-db\", tools[\"search-db\"], SEARCH_DB_SCHEMA),\n \"search-regex\": toolBackedAction(\"search-regex\", tools[\"search-regex\"], SEARCH_REGEX_SCHEMA),\n \"search-list-directory\": toolBackedAction(\"search-list-directory\", tools[\"search-list-directory\"], LIST_DIRECTORY_SCHEMA),\n \"triage-file\": toolBackedAction(\"triage-file\", tools[\"triage-file\"], TRIAGE_FILE_SCHEMA),\n \"read-file\": toolBackedAction(\"read-file\", tools[\"read-file\"], READ_FILE_SCHEMA),\n codeTransform: {\n name: \"codeTransform\",\n kind: \"control\",\n description: \"Plan, apply, validate, and retry one file transform inside the new transform owner.\",\n inputSchema: CODE_TRANSFORM_SCHEMA,\n async run(memory, args) {\n const target = typeof args.target === \"string\" ? args.target.trim() : \"\";\n if (!target) {\n return {\n ok: false,\n summary: \"codeTransform requires one target file.\",\n };\n }\n try {\n const result = await runCodeTransform(memory, target, {\n onProgress(progress) {\n switch (progress.stage) {\n case \"started\":\n ui.message(formatTransformStartMilestone(progress.filePath));\n if (progress.warning) {\n ui.message(formatTransformWarningMilestone(progress.warning));\n }\n break;\n case \"retrying\":\n ui.message(formatTransformRetryMilestone(progress));\n ui.update(formatTransformLoopProgress(progress));\n break;\n case \"failed\":\n ui.message(formatTransformFailureMilestone(progress));\n break;\n case \"completed\":\n ui.message(formatTransformCompletionMilestone(progress));\n break;\n default:\n ui.update(formatTransformLoopProgress(progress));\n break;\n }\n },\n });\n const editCount = result.plan.edits.length;\n const finalMessage = `Updated ${result.filePath} with ${editCount} planned edit${editCount === 1 ? \"\" : \"s\"}.`;\n memory.artifacts.finalAnswer = finalMessage;\n recordAgentArtifact(memory.artifacts, \"final-answer\", finalMessage);\n return {\n ok: true,\n summary: finalMessage,\n output: result,\n };\n } catch (error) {\n return {\n ok: false,\n summary: error instanceof Error ? error.message : String(error),\n };\n }\n },\n },\n \"cannot-answer\": {\n name: \"cannot-answer\",\n kind: \"control\",\n description: \"Report that the agent could not answer from grounded evidence.\",\n inputSchema: EMPTY_OBJECT_SCHEMA,\n async run(memory) {\n const message = buildCannotAnswerMessage(memory);\n memory.artifacts.stopMessage = message;\n recordAgentArtifact(memory.artifacts, \"cannot-answer\", message);\n return {\n ok: true,\n summary: \"Reported that the agent could not answer.\",\n output: message,\n };\n },\n },\n \"request-user-input\": {\n name: \"request-user-input\",\n kind: \"control\",\n description: \"Ask the user for one missing concrete input before continuing.\",\n inputSchema: EMPTY_OBJECT_SCHEMA,\n async run(memory) {\n const dialog = prepareAgentWaitingState(memory);\n const message = buildRequestUserInputMessage(memory, dialog);\n memory.artifacts.stopMessage = message;\n recordAgentArtifact(memory.artifacts, \"request-user-input\", message);\n return {\n ok: true,\n summary: \"Requested one focused user input.\",\n output: message,\n };\n },\n },\n \"final-answer\": {\n name: \"final-answer\",\n kind: \"control\",\n description: \"Produce the final grounded answer from collected evidence.\",\n inputSchema: EMPTY_OBJECT_SCHEMA,\n async run(memory) {\n const packet = buildFinalAnswerPacket(memory);\n const latestGroundedResult = renderResumeCheckpointForPrompt(memory.resumeCheckpoint);\n memory.artifacts.latestFinalAnswerPacket = packet;\n const stepId = memory.task.currentStepId;\n logAgentLlmInput(memory, \"agent.final-answer\", {\n ...packet,\n latestGroundedResult,\n }, stepId, nowLocalIso());\n try {\n const response = await generate({ query: memory.task.initialQuery, content: renderFinalAnswerPrompt(packet, latestGroundedResult) }, {\n caller: \"agent.final-answer\",\n inputContext: {\n ...packet,\n latestGroundedResult,\n },\n });\n const answer = String(response?.data ?? \"\").trim();\n logAgentLlmOutput(memory, \"agent.final-answer\", {\n answer,\n }, stepId, response?.trace);\n emitAgentLlmTimingMessage(ui, \"agent.final-answer\", response?.trace);\n memory.artifacts.finalAnswer = answer;\n memory.durableCheckpoint = createDurableCheckpointFromArtifacts(memory);\n recordAgentArtifact(memory.artifacts, \"final-answer\", answer);\n return {\n ok: answer.length > 0,\n summary: \"Produced the final answer.\",\n output: answer,\n };\n } catch (error) {\n const details = {\n stage: \"final-answer\",\n message: getErrorMessage(error),\n action: \"final-answer\" as const,\n stepId,\n };\n logAgentLlmFailure(memory, \"agent.final-answer\", details, getErrorTrace(error));\n throw new AgentRuntimeError(details, error);\n }\n },\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes planner and model action output into the strict runtime shapes.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - action cleanup should stay separate from action execution
|
|
6
|
+
* - read, search, and plan arg rewriting is easier to test in one place
|
|
7
|
+
* - the main action registry should not also own all loose-input repair logic
|
|
8
|
+
* - transform target repair should stay here instead of leaking into the loop
|
|
9
|
+
*/
|
|
10
|
+
import { isCommandStyleToken } from "../../fileRules/queryTokenRules.js";
|
|
11
|
+
import { looksLikeDirectoryTarget, uniqueStrings } from "../evidence/index.js";
|
|
12
|
+
import { hasFreshReadForPath, resolveReadTarget } from "../read/index.js";
|
|
13
|
+
import { resolveNextReadTarget, resolveNextTriageTarget, resolvePolicyState, resolvePreferredReadAction } from "../policy/index.js";
|
|
14
|
+
import { resolveReadCoverageState } from "../policy/coveragePolicy.js";
|
|
15
|
+
function isPlainObject(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Normalizes loose regex-search args into the strict runtime schema.
|
|
20
|
+
* Example: `{ pattern: "foo", directory: "." }` -> `{ pattern: "foo", target: "content" }`.
|
|
21
|
+
*/
|
|
22
|
+
function normalizeSearchRegexArgs(rawArgs) {
|
|
23
|
+
const args = {};
|
|
24
|
+
if (typeof rawArgs.pattern === "string") {
|
|
25
|
+
args.pattern = rawArgs.pattern;
|
|
26
|
+
}
|
|
27
|
+
const rawTarget = typeof rawArgs.target === "string" ? rawArgs.target : undefined;
|
|
28
|
+
if (rawTarget === "path" || rawTarget === "content" || rawTarget === "both") {
|
|
29
|
+
args.target = rawTarget;
|
|
30
|
+
}
|
|
31
|
+
else if (typeof args.pattern === "string") {
|
|
32
|
+
args.target = "content";
|
|
33
|
+
}
|
|
34
|
+
if (typeof rawArgs.flags === "string") {
|
|
35
|
+
args.flags = rawArgs.flags;
|
|
36
|
+
}
|
|
37
|
+
return args;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Normalizes loose indexed-search args into the strict runtime schema.
|
|
41
|
+
* Example: `{ pattern: "scai", rationale: "find docs" }` -> `{ query: "scai" }`.
|
|
42
|
+
*/
|
|
43
|
+
function normalizeSearchDbArgs(rawArgs) {
|
|
44
|
+
const args = {};
|
|
45
|
+
const rawQuery = [rawArgs.query, rawArgs.pattern, rawArgs.term, rawArgs.text]
|
|
46
|
+
.find((value) => typeof value === "string" && value.trim().length > 0);
|
|
47
|
+
if (typeof rawQuery === "string") {
|
|
48
|
+
args.query = rawQuery.trim();
|
|
49
|
+
}
|
|
50
|
+
if (typeof rawArgs.limit === "number" && Number.isInteger(rawArgs.limit)) {
|
|
51
|
+
args.limit = rawArgs.limit;
|
|
52
|
+
}
|
|
53
|
+
return args;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Picks the best file-like candidate from loose read-file args.
|
|
57
|
+
* Example: `{ path: "/repo/a.ts", target: "/resume" }` -> `"/repo/a.ts"`.
|
|
58
|
+
*/
|
|
59
|
+
function choosePreferredReadTarget(rawArgs, memory) {
|
|
60
|
+
const candidates = [rawArgs.target, rawArgs.path]
|
|
61
|
+
.map((value) => typeof value === "string" ? value.trim() : "")
|
|
62
|
+
.filter((value) => value.length > 0);
|
|
63
|
+
return candidates.find((value) => {
|
|
64
|
+
if (isCommandStyleToken(value)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (value.startsWith(memory.session.executionPath) || value.startsWith(memory.session.repoRootPath)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (memory.evidence.candidateFiles.includes(value)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
if (memory.task.hardFileTargets.includes(value) && !looksLikeDirectoryTarget(value, memory.session.executionPath)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return value.includes("/") || /\.[A-Za-z0-9_]{1,10}$/.test(value);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Normalizes loose read-file args into the strict runtime schema.
|
|
81
|
+
* Example: `{ path: "/repo/a.ts", target: "/resume" }` -> `{ target: "/repo/a.ts" }`.
|
|
82
|
+
*/
|
|
83
|
+
function normalizeReadTargetArgs(rawArgs, memory) {
|
|
84
|
+
const preferredTarget = choosePreferredReadTarget(rawArgs, memory);
|
|
85
|
+
return typeof preferredTarget === "string" ? { target: preferredTarget } : {};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Normalizes loose directory-listing args into the strict runtime schema.
|
|
89
|
+
* Example: `{ path: "/repo/cli/src" }` -> `{ folderPath: "/repo/cli/src" }`.
|
|
90
|
+
*/
|
|
91
|
+
function normalizeDirectoryListingArgs(rawArgs) {
|
|
92
|
+
const folderPath = [rawArgs.folderPath, rawArgs.path, rawArgs.target]
|
|
93
|
+
.find((value) => typeof value === "string" && value.trim().length > 0);
|
|
94
|
+
return typeof folderPath === "string"
|
|
95
|
+
? { folderPath: folderPath.trim() }
|
|
96
|
+
: {};
|
|
97
|
+
}
|
|
98
|
+
function normalizePath(value) {
|
|
99
|
+
return value.replace(/\\/g, "/");
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Reuses the resolved folder fact so directory listing does not drift back to a raw relative path.
|
|
103
|
+
* Example: explicit target `agents/guards` -> `/repo/cli/src/agents/guards`.
|
|
104
|
+
*/
|
|
105
|
+
function resolveDirectoryListingTarget(memory, rawTarget) {
|
|
106
|
+
const coverage = resolveReadCoverageState(memory);
|
|
107
|
+
if (coverage.folderTargets.length === 0) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
if (coverage.folderTargets.length === 1) {
|
|
111
|
+
return coverage.folderTargets[0].folderPath;
|
|
112
|
+
}
|
|
113
|
+
const normalizedTarget = typeof rawTarget === "string" ? normalizePath(rawTarget).trim().toLowerCase() : "";
|
|
114
|
+
if (!normalizedTarget) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const matchingFolder = coverage.folderTargets.find((folder) => {
|
|
118
|
+
const normalizedFolderPath = normalizePath(folder.folderPath).trim().toLowerCase();
|
|
119
|
+
const normalizedResolvedTarget = normalizePath(folder.target).trim().toLowerCase();
|
|
120
|
+
return normalizedTarget === normalizedFolderPath || normalizedTarget === normalizedResolvedTarget;
|
|
121
|
+
});
|
|
122
|
+
return matchingFolder?.folderPath;
|
|
123
|
+
}
|
|
124
|
+
function resolveReadMode(action) {
|
|
125
|
+
return action === "read-file" ? "full" : "triage";
|
|
126
|
+
}
|
|
127
|
+
function isReadAction(action) {
|
|
128
|
+
return action === "read-file" || action === "triage-file";
|
|
129
|
+
}
|
|
130
|
+
function isFileTargetAction(action) {
|
|
131
|
+
return isReadAction(action) || action === "codeTransform";
|
|
132
|
+
}
|
|
133
|
+
function resolveReadTargetForAction(memory, action) {
|
|
134
|
+
if (action === "triage-file") {
|
|
135
|
+
return resolveNextTriageTarget(memory) ?? memory.evidence.candidateFiles[0];
|
|
136
|
+
}
|
|
137
|
+
return resolveNextReadTarget(memory) ?? memory.task.hardFileTargets[0] ?? memory.evidence.candidateFiles[0];
|
|
138
|
+
}
|
|
139
|
+
function resolveTransformTarget(memory) {
|
|
140
|
+
return memory.task.hardFileTargets[0] ?? memory.evidence.candidateFiles[0];
|
|
141
|
+
}
|
|
142
|
+
function hasFreshRead(memory, action, target) {
|
|
143
|
+
try {
|
|
144
|
+
const filePath = target.startsWith(memory.session.executionPath) || target.startsWith(memory.session.repoRootPath)
|
|
145
|
+
? target
|
|
146
|
+
: resolveReadTarget(memory, target);
|
|
147
|
+
const requiredMode = resolveReadMode(action);
|
|
148
|
+
return hasFreshReadForPath(memory, filePath, { mode: requiredMode }) ||
|
|
149
|
+
(requiredMode === "triage" && hasFreshReadForPath(memory, filePath, { mode: "full" }));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function resolveFallbackAction(legalActions, preferredReadAction, preferredReadTarget, preferredTransformTarget) {
|
|
156
|
+
if (legalActions.includes("codeTransform") && preferredTransformTarget) {
|
|
157
|
+
return "codeTransform";
|
|
158
|
+
}
|
|
159
|
+
if (preferredReadAction && legalActions.includes(preferredReadAction) && preferredReadTarget) {
|
|
160
|
+
return preferredReadAction;
|
|
161
|
+
}
|
|
162
|
+
if (legalActions.includes("request-user-input")) {
|
|
163
|
+
return "request-user-input";
|
|
164
|
+
}
|
|
165
|
+
if (legalActions.includes("plan")) {
|
|
166
|
+
return "plan";
|
|
167
|
+
}
|
|
168
|
+
return legalActions[0];
|
|
169
|
+
}
|
|
170
|
+
function normalizeActionArgs(action, rawArgs, memory) {
|
|
171
|
+
switch (action) {
|
|
172
|
+
case "triage-file":
|
|
173
|
+
case "read-file":
|
|
174
|
+
case "codeTransform":
|
|
175
|
+
return normalizeReadTargetArgs(rawArgs, memory);
|
|
176
|
+
case "search-list-directory":
|
|
177
|
+
return normalizeDirectoryListingArgs(rawArgs);
|
|
178
|
+
case "search-db":
|
|
179
|
+
return normalizeSearchDbArgs(rawArgs);
|
|
180
|
+
case "search-regex":
|
|
181
|
+
return normalizeSearchRegexArgs(rawArgs);
|
|
182
|
+
case "plan":
|
|
183
|
+
case "final-answer":
|
|
184
|
+
case "cannot-answer":
|
|
185
|
+
case "request-user-input":
|
|
186
|
+
return {};
|
|
187
|
+
default:
|
|
188
|
+
return { ...rawArgs };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export function buildActionMenu(memory) {
|
|
192
|
+
return resolvePolicyState(memory).allowedActions;
|
|
193
|
+
}
|
|
194
|
+
export function sanitizeDecision(decision, legalActions, memory) {
|
|
195
|
+
const policy = resolvePolicyState(memory);
|
|
196
|
+
const loopReview = policy.loopReview;
|
|
197
|
+
const policyDecision = policy.decision;
|
|
198
|
+
const preferredReadAction = resolvePreferredReadAction(memory);
|
|
199
|
+
const preferredReadTarget = preferredReadAction ? resolveReadTargetForAction(memory, preferredReadAction) : undefined;
|
|
200
|
+
const preferredTransformTarget = legalActions.includes("codeTransform") ? resolveTransformTarget(memory) : undefined;
|
|
201
|
+
const fallbackAction = resolveFallbackAction(legalActions, preferredReadAction, preferredReadTarget, preferredTransformTarget);
|
|
202
|
+
const action = legalActions.includes(decision.action)
|
|
203
|
+
? decision.action
|
|
204
|
+
: fallbackAction;
|
|
205
|
+
const rawArgs = isPlainObject(decision.args) ? decision.args : {};
|
|
206
|
+
const args = normalizeActionArgs(action, rawArgs, memory);
|
|
207
|
+
if (isReadAction(action) && typeof args.target !== "string" && preferredReadTarget) {
|
|
208
|
+
args.target = preferredReadTarget;
|
|
209
|
+
}
|
|
210
|
+
if (action === "codeTransform" && typeof args.target !== "string" && preferredTransformTarget) {
|
|
211
|
+
args.target = preferredTransformTarget;
|
|
212
|
+
}
|
|
213
|
+
if (isReadAction(action) && typeof args.target === "string") {
|
|
214
|
+
const currentTarget = args.target;
|
|
215
|
+
const nextTarget = resolveReadTargetForAction(memory, action);
|
|
216
|
+
if (looksLikeDirectoryTarget(currentTarget, memory.session.executionPath) && nextTarget) {
|
|
217
|
+
args.target = nextTarget;
|
|
218
|
+
}
|
|
219
|
+
if (nextTarget && hasFreshRead(memory, action, currentTarget) && nextTarget !== currentTarget) {
|
|
220
|
+
args.target = nextTarget;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (action === "search-list-directory") {
|
|
224
|
+
const resolvedFolderTarget = resolveDirectoryListingTarget(memory, typeof args.folderPath === "string" ? args.folderPath : undefined);
|
|
225
|
+
if (resolvedFolderTarget) {
|
|
226
|
+
args.folderPath = resolvedFolderTarget;
|
|
227
|
+
}
|
|
228
|
+
else if (typeof args.folderPath !== "string") {
|
|
229
|
+
const folderTarget = memory.task.softHints.find((target) => looksLikeDirectoryTarget(target, memory.session.executionPath));
|
|
230
|
+
if (folderTarget) {
|
|
231
|
+
args.folderPath = folderTarget;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (action === "final-answer" &&
|
|
236
|
+
!loopReview.stopAssessment.canStop &&
|
|
237
|
+
loopReview.referenceFollowupNeeded &&
|
|
238
|
+
preferredReadAction &&
|
|
239
|
+
legalActions.includes(preferredReadAction) &&
|
|
240
|
+
preferredReadTarget) {
|
|
241
|
+
return {
|
|
242
|
+
action: preferredReadAction,
|
|
243
|
+
args: { target: preferredReadTarget },
|
|
244
|
+
reason: String(decision.reason ?? loopReview.stopAssessment.reason).trim(),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
if (action === policyDecision.nextAction &&
|
|
248
|
+
policyDecision.args &&
|
|
249
|
+
(action === "search-list-directory" || action === "codeTransform")) {
|
|
250
|
+
return {
|
|
251
|
+
action,
|
|
252
|
+
args: { ...policyDecision.args },
|
|
253
|
+
reason: String(decision.reason ?? "Selected the next small useful action.").trim(),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (action === "search-db" && typeof args.query !== "string" && policyDecision.nextAction === "search-db" && policyDecision.args) {
|
|
257
|
+
return {
|
|
258
|
+
action,
|
|
259
|
+
args: { ...policyDecision.args },
|
|
260
|
+
reason: String(decision.reason ?? "Selected the next small useful action.").trim(),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
if (action === "search-db" && policyDecision.nextAction === "search-db" && policyDecision.args) {
|
|
264
|
+
const policyQuery = typeof policyDecision.args.query === "string" ? policyDecision.args.query : undefined;
|
|
265
|
+
if (policyQuery === memory.task.initialQuery) {
|
|
266
|
+
return {
|
|
267
|
+
action,
|
|
268
|
+
args: { ...policyDecision.args },
|
|
269
|
+
reason: String(decision.reason ?? "Selected the next small useful action.").trim(),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (action === "search-db" && typeof args.query !== "string") {
|
|
274
|
+
args.query = memory.task.normalizedQuery;
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
action,
|
|
278
|
+
args,
|
|
279
|
+
reason: String(decision.reason ?? "Selected the next small useful action.").trim(),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
export function sanitizePlan(memory, parsed) {
|
|
283
|
+
const policy = resolvePolicyState(memory);
|
|
284
|
+
const legalActions = new Set(buildActionMenu(memory));
|
|
285
|
+
const preferredReadAction = resolvePreferredReadAction(memory);
|
|
286
|
+
const nextReadTarget = preferredReadAction ? resolveReadTargetForAction(memory, preferredReadAction) : undefined;
|
|
287
|
+
const transformTarget = resolveTransformTarget(memory);
|
|
288
|
+
const rawSteps = Array.isArray(parsed.steps) ? parsed.steps : [];
|
|
289
|
+
const normalizedSteps = rawSteps
|
|
290
|
+
.map((entry) => {
|
|
291
|
+
const action = entry && legalActions.has(entry.action)
|
|
292
|
+
? entry.action
|
|
293
|
+
: undefined;
|
|
294
|
+
if (!action || action === "plan") {
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
const rawArgs = isPlainObject(entry.args)
|
|
298
|
+
? entry.args
|
|
299
|
+
: {};
|
|
300
|
+
const normalizedArgs = normalizeActionArgs(action, rawArgs, memory);
|
|
301
|
+
if (isReadAction(action) && typeof normalizedArgs.target !== "string" && nextReadTarget) {
|
|
302
|
+
normalizedArgs.target = nextReadTarget;
|
|
303
|
+
}
|
|
304
|
+
if (action === "codeTransform" && typeof normalizedArgs.target !== "string") {
|
|
305
|
+
const transformTarget = resolveTransformTarget(memory);
|
|
306
|
+
if (transformTarget) {
|
|
307
|
+
normalizedArgs.target = transformTarget;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
action,
|
|
312
|
+
args: normalizedArgs,
|
|
313
|
+
purpose: String(entry.purpose ?? `Run ${action}.`).trim(),
|
|
314
|
+
expectedEvidence: uniqueStrings(Array.isArray(entry.expectedEvidence)
|
|
315
|
+
? (entry.expectedEvidence)
|
|
316
|
+
: []).slice(0, 4),
|
|
317
|
+
};
|
|
318
|
+
})
|
|
319
|
+
.filter((entry) => entry !== null)
|
|
320
|
+
.slice(0, 3);
|
|
321
|
+
return {
|
|
322
|
+
goal: String(parsed.goal ?? memory.task.primaryIntent).trim(),
|
|
323
|
+
why: String(parsed.why ?? "Gather the smallest grounded evidence needed to answer.").trim(),
|
|
324
|
+
steps: normalizedSteps.length > 0
|
|
325
|
+
? normalizedSteps
|
|
326
|
+
: [(() => {
|
|
327
|
+
if (policy.decision.nextAction && legalActions.has(policy.decision.nextAction)) {
|
|
328
|
+
return {
|
|
329
|
+
action: policy.decision.nextAction,
|
|
330
|
+
args: policy.decision.args ?? {},
|
|
331
|
+
purpose: policy.decision.nextAction === "codeTransform"
|
|
332
|
+
? "Apply the requested transform to the grounded target file."
|
|
333
|
+
: "Gather grounded evidence before answering.",
|
|
334
|
+
expectedEvidence: policy.decision.nextAction === "codeTransform"
|
|
335
|
+
? ["validated transform artifact"]
|
|
336
|
+
: ["grounded answer evidence"],
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
action: legalActions.has("codeTransform") && transformTarget
|
|
341
|
+
? "codeTransform"
|
|
342
|
+
: nextReadTarget
|
|
343
|
+
? (resolvePreferredReadAction(memory) ?? "read-file")
|
|
344
|
+
: "search-db",
|
|
345
|
+
args: legalActions.has("codeTransform") && transformTarget
|
|
346
|
+
? { target: transformTarget }
|
|
347
|
+
: nextReadTarget
|
|
348
|
+
? { target: nextReadTarget }
|
|
349
|
+
: { query: memory.task.normalizedQuery },
|
|
350
|
+
purpose: legalActions.has("codeTransform") && transformTarget
|
|
351
|
+
? "Apply the requested transform to the grounded target file."
|
|
352
|
+
: "Gather grounded evidence before answering.",
|
|
353
|
+
expectedEvidence: legalActions.has("codeTransform") && transformTarget
|
|
354
|
+
? ["validated transform artifact"]
|
|
355
|
+
: ["grounded answer evidence"],
|
|
356
|
+
};
|
|
357
|
+
})()],
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/agent/actions/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAMvE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,OAAgC;IAChE,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAAgC;IAC7D,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;SAC1E,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,OAAgC,EAAE,MAAmB;IACtF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;SAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACpG,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAClH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,OAAgC,EAAE,MAAmB;IACpF,MAAM,eAAe,GAAG,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CAAC,OAAgC;IACrE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;SAClE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,OAAO,UAAU,KAAK,QAAQ;QACnC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE;QACnC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CAAC,MAAmB,EAAE,SAAkB;IAC5E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9C,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5G,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5D,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnF,MAAM,wBAAwB,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnF,OAAO,gBAAgB,KAAK,oBAAoB,IAAI,gBAAgB,KAAK,wBAAwB,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,EAAE,UAAU,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB;IAC3C,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB;IACjD,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,eAAe,CAAC;AAC5D,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAmB,EAAE,MAAsB;IAC7E,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAmB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB,EAAE,MAAsB,EAAE,MAAc;IAC/E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;YAChH,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAClE,CAAC,YAAY,KAAK,QAAQ,IAAI,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAA+B,EAC/B,mBAA+C,EAC/C,mBAA4B,EAC5B,wBAAiC;IAEjC,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,wBAAwB,EAAE,CAAC;QACvE,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,mBAAmB,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,EAAE,CAAC;QAC7F,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAChD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAuB,EACvB,OAAgC,EAChC,MAAmB;IAEnB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,eAAe;YAClB,OAAO,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClD,KAAK,uBAAuB;YAC1B,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAChD,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC;QACZ,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe,CAAC;QACrB,KAAK,oBAAoB;YACvB,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgC,EAChC,YAA+B,EAC/B,MAAmB;IAEnB,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,MAAM,wBAAwB,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrH,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IAC/H,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAyB,CAAC;QACtE,CAAC,CAAE,QAAQ,CAAC,MAA0B;QACtC,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE1D,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QACnF,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,wBAAwB,EAAE,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,wBAAwB,CAAC;IACzC,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,wBAAwB,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC;YACxF,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YAC9F,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACvC,MAAM,oBAAoB,GAAG,6BAA6B,CACxD,MAAM,EACN,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAClE,CAAC;QACF,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC;QACzC,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5H,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IACD,IACE,MAAM,KAAK,cAAc;QACzB,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO;QAClC,UAAU,CAAC,uBAAuB;QAClC,mBAAmB;QACnB,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1C,mBAAmB,EACnB,CAAC;QACD,OAAO;YACL,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;YACrC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;SAC3E,CAAC;IACJ,CAAC;IACD,IACE,MAAM,KAAK,cAAc,CAAC,UAAU;QACpC,cAAc,CAAC,IAAI;QACnB,CAAC,MAAM,KAAK,uBAAuB,IAAI,MAAM,KAAK,eAAe,CAAC,EAClE,CAAC;QACD,OAAO;YACL,MAAM;YACN,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,wCAAwC,CAAC,CAAC,IAAI,EAAE;SACnF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,UAAU,KAAK,WAAW,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QACjI,OAAO;YACL,MAAM;YACN,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,wCAAwC,CAAC,CAAC,IAAI,EAAE;SACnF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,IAAI,cAAc,CAAC,UAAU,KAAK,WAAW,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QAC/F,MAAM,WAAW,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,IAAI,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,OAAO;gBACL,MAAM;gBACN,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE;gBAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,wCAAwC,CAAC,CAAC,IAAI,EAAE;aACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,MAAM;QACN,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,wCAAwC,CAAC,CAAC,IAAI,EAAE;KACnF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,MAAkC;IAClF,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAkB,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjH,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,eAAe,GAAG,QAAQ;SAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,KAAK,IAAI,YAAY,CAAC,GAAG,CAAE,KAAsC,CAAC,MAAyB,CAAC;YACzG,CAAC,CAAE,KAAqC,CAAC,MAAM;YAC/C,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAE,KAA4B,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAE,KAA2C,CAAC,IAAI;YACnD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,cAAc,CAAC,MAAM,KAAK,QAAQ,IAAI,cAAc,EAAE,CAAC;YACxF,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,KAAK,eAAe,IAAI,OAAO,cAAc,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5E,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,eAAe,EAAE,CAAC;gBACpB,cAAc,CAAC,MAAM,GAAG,eAAe,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO;YACL,MAAM;YACN,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,MAAM,CAAE,KAA+B,CAAC,OAAO,IAAI,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;YACpF,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAE,KAAwC,CAAC,gBAAgB,CAAC;gBACvG,CAAC,CAAC,CAAE,KAAwC,CAAC,gBAAgB,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACpB,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;SACrE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;QAC7D,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,yDAAyD,CAAC,CAAC,IAAI,EAAE;QAC3F,KAAK,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;oBACL,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC/E,OAAO;4BACL,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;4BAClC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;4BAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,eAAe;gCACrD,CAAC,CAAC,4DAA4D;gCAC9D,CAAC,CAAC,4CAA4C;4BAChD,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,eAAe;gCAC9D,CAAC,CAAC,CAAC,8BAA8B,CAAC;gCAClC,CAAC,CAAC,CAAC,0BAA0B,CAAC;yBACjC,CAAC;oBACJ,CAAC;oBACD,OAAO;wBACL,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,eAAe;4BAC1D,CAAC,CAAC,eAAe;4BACjB,CAAC,CAAC,cAAc;gCACd,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;gCACrD,CAAC,CAAC,WAAW;wBACjB,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,eAAe;4BACxD,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;4BAC7B,CAAC,CAAC,cAAc;gCACd,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE;gCAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;wBAC5C,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,eAAe;4BAC3D,CAAC,CAAC,4DAA4D;4BAC9D,CAAC,CAAC,4CAA4C;wBAChD,gBAAgB,EAAE,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,eAAe;4BACpE,CAAC,CAAC,CAAC,8BAA8B,CAAC;4BAClC,CAAC,CAAC,CAAC,0BAA0B,CAAC;qBACjC,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;KACV,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Normalizes planner and model action output into the strict runtime shapes.\n *\n * Why this file exists:\n * - action cleanup should stay separate from action execution\n * - read, search, and plan arg rewriting is easier to test in one place\n * - the main action registry should not also own all loose-input repair logic\n * - transform target repair should stay here instead of leaking into the loop\n */\nimport { isCommandStyleToken } from \"../../fileRules/queryTokenRules.js\";\nimport { looksLikeDirectoryTarget, uniqueStrings } from \"../evidence/index.js\";\nimport { hasFreshReadForPath, resolveReadTarget } from \"../read/index.js\";\nimport { resolveNextReadTarget, resolveNextTriageTarget, resolvePolicyState, resolvePreferredReadAction } from \"../policy/index.js\";\nimport { resolveReadCoverageState } from \"../policy/coveragePolicy.js\";\nimport type { AgentActionName, AgentDecision, AgentMemory, AgentPlanArtifact } from \"../types.js\";\n\ntype ReadActionName = Extract<AgentActionName, \"triage-file\" | \"read-file\">;\ntype FileTargetActionName = ReadActionName | \"codeTransform\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Normalizes loose regex-search args into the strict runtime schema.\n * Example: `{ pattern: \"foo\", directory: \".\" }` -> `{ pattern: \"foo\", target: \"content\" }`.\n */\nfunction normalizeSearchRegexArgs(rawArgs: Record<string, unknown>): Record<string, unknown> {\n const args: Record<string, unknown> = {};\n if (typeof rawArgs.pattern === \"string\") {\n args.pattern = rawArgs.pattern;\n }\n\n const rawTarget = typeof rawArgs.target === \"string\" ? rawArgs.target : undefined;\n if (rawTarget === \"path\" || rawTarget === \"content\" || rawTarget === \"both\") {\n args.target = rawTarget;\n } else if (typeof args.pattern === \"string\") {\n args.target = \"content\";\n }\n\n if (typeof rawArgs.flags === \"string\") {\n args.flags = rawArgs.flags;\n }\n return args;\n}\n\n/**\n * Normalizes loose indexed-search args into the strict runtime schema.\n * Example: `{ pattern: \"scai\", rationale: \"find docs\" }` -> `{ query: \"scai\" }`.\n */\nfunction normalizeSearchDbArgs(rawArgs: Record<string, unknown>): Record<string, unknown> {\n const args: Record<string, unknown> = {};\n const rawQuery = [rawArgs.query, rawArgs.pattern, rawArgs.term, rawArgs.text]\n .find((value) => typeof value === \"string\" && value.trim().length > 0);\n if (typeof rawQuery === \"string\") {\n args.query = rawQuery.trim();\n }\n if (typeof rawArgs.limit === \"number\" && Number.isInteger(rawArgs.limit)) {\n args.limit = rawArgs.limit;\n }\n return args;\n}\n\n/**\n * Picks the best file-like candidate from loose read-file args.\n * Example: `{ path: \"/repo/a.ts\", target: \"/resume\" }` -> `\"/repo/a.ts\"`.\n */\nfunction choosePreferredReadTarget(rawArgs: Record<string, unknown>, memory: AgentMemory): string | undefined {\n const candidates = [rawArgs.target, rawArgs.path]\n .map((value) => typeof value === \"string\" ? value.trim() : \"\")\n .filter((value) => value.length > 0);\n\n return candidates.find((value) => {\n if (isCommandStyleToken(value)) {\n return false;\n }\n if (value.startsWith(memory.session.executionPath) || value.startsWith(memory.session.repoRootPath)) {\n return true;\n }\n if (memory.evidence.candidateFiles.includes(value)) {\n return true;\n }\n if (memory.task.hardFileTargets.includes(value) && !looksLikeDirectoryTarget(value, memory.session.executionPath)) {\n return true;\n }\n return value.includes(\"/\") || /\\.[A-Za-z0-9_]{1,10}$/.test(value);\n });\n}\n\n/**\n * Normalizes loose read-file args into the strict runtime schema.\n * Example: `{ path: \"/repo/a.ts\", target: \"/resume\" }` -> `{ target: \"/repo/a.ts\" }`.\n */\nfunction normalizeReadTargetArgs(rawArgs: Record<string, unknown>, memory: AgentMemory): Record<string, unknown> {\n const preferredTarget = choosePreferredReadTarget(rawArgs, memory);\n return typeof preferredTarget === \"string\" ? { target: preferredTarget } : {};\n}\n\n/**\n * Normalizes loose directory-listing args into the strict runtime schema.\n * Example: `{ path: \"/repo/cli/src\" }` -> `{ folderPath: \"/repo/cli/src\" }`.\n */\nfunction normalizeDirectoryListingArgs(rawArgs: Record<string, unknown>): Record<string, unknown> {\n const folderPath = [rawArgs.folderPath, rawArgs.path, rawArgs.target]\n .find((value) => typeof value === \"string\" && value.trim().length > 0);\n return typeof folderPath === \"string\"\n ? { folderPath: folderPath.trim() }\n : {};\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Reuses the resolved folder fact so directory listing does not drift back to a raw relative path.\n * Example: explicit target `agents/guards` -> `/repo/cli/src/agents/guards`.\n */\nfunction resolveDirectoryListingTarget(memory: AgentMemory, rawTarget?: string): string | undefined {\n const coverage = resolveReadCoverageState(memory);\n if (coverage.folderTargets.length === 0) {\n return undefined;\n }\n\n if (coverage.folderTargets.length === 1) {\n return coverage.folderTargets[0].folderPath;\n }\n\n const normalizedTarget = typeof rawTarget === \"string\" ? normalizePath(rawTarget).trim().toLowerCase() : \"\";\n if (!normalizedTarget) {\n return undefined;\n }\n\n const matchingFolder = coverage.folderTargets.find((folder) => {\n const normalizedFolderPath = normalizePath(folder.folderPath).trim().toLowerCase();\n const normalizedResolvedTarget = normalizePath(folder.target).trim().toLowerCase();\n return normalizedTarget === normalizedFolderPath || normalizedTarget === normalizedResolvedTarget;\n });\n return matchingFolder?.folderPath;\n}\n\nfunction resolveReadMode(action: ReadActionName): \"triage\" | \"full\" {\n return action === \"read-file\" ? \"full\" : \"triage\";\n}\n\nfunction isReadAction(action: AgentActionName): action is ReadActionName {\n return action === \"read-file\" || action === \"triage-file\";\n}\n\nfunction isFileTargetAction(action: AgentActionName): action is FileTargetActionName {\n return isReadAction(action) || action === \"codeTransform\";\n}\n\nfunction resolveReadTargetForAction(memory: AgentMemory, action: ReadActionName): string | undefined {\n if (action === \"triage-file\") {\n return resolveNextTriageTarget(memory) ?? memory.evidence.candidateFiles[0];\n }\n return resolveNextReadTarget(memory) ?? memory.task.hardFileTargets[0] ?? memory.evidence.candidateFiles[0];\n}\n\nfunction resolveTransformTarget(memory: AgentMemory): string | undefined {\n return memory.task.hardFileTargets[0] ?? memory.evidence.candidateFiles[0];\n}\n\nfunction hasFreshRead(memory: AgentMemory, action: ReadActionName, target: string): boolean {\n try {\n const filePath = target.startsWith(memory.session.executionPath) || target.startsWith(memory.session.repoRootPath)\n ? target\n : resolveReadTarget(memory, target);\n const requiredMode = resolveReadMode(action);\n return hasFreshReadForPath(memory, filePath, { mode: requiredMode }) ||\n (requiredMode === \"triage\" && hasFreshReadForPath(memory, filePath, { mode: \"full\" }));\n } catch {\n return false;\n }\n}\n\nfunction resolveFallbackAction(\n legalActions: AgentActionName[],\n preferredReadAction: ReadActionName | undefined,\n preferredReadTarget?: string,\n preferredTransformTarget?: string\n): AgentActionName {\n if (legalActions.includes(\"codeTransform\") && preferredTransformTarget) {\n return \"codeTransform\";\n }\n if (preferredReadAction && legalActions.includes(preferredReadAction) && preferredReadTarget) {\n return preferredReadAction;\n }\n if (legalActions.includes(\"request-user-input\")) {\n return \"request-user-input\";\n }\n if (legalActions.includes(\"plan\")) {\n return \"plan\";\n }\n return legalActions[0];\n}\n\nfunction normalizeActionArgs(\n action: AgentActionName,\n rawArgs: Record<string, unknown>,\n memory: AgentMemory\n): Record<string, unknown> {\n switch (action) {\n case \"triage-file\":\n case \"read-file\":\n case \"codeTransform\":\n return normalizeReadTargetArgs(rawArgs, memory);\n case \"search-list-directory\":\n return normalizeDirectoryListingArgs(rawArgs);\n case \"search-db\":\n return normalizeSearchDbArgs(rawArgs);\n case \"search-regex\":\n return normalizeSearchRegexArgs(rawArgs);\n case \"plan\":\n case \"final-answer\":\n case \"cannot-answer\":\n case \"request-user-input\":\n return {};\n default:\n return { ...rawArgs };\n }\n}\n\nexport function buildActionMenu(memory: AgentMemory): AgentActionName[] {\n return resolvePolicyState(memory).allowedActions;\n}\n\nexport function sanitizeDecision(\n decision: Partial<AgentDecision>,\n legalActions: AgentActionName[],\n memory: AgentMemory\n): AgentDecision {\n const policy = resolvePolicyState(memory);\n const loopReview = policy.loopReview;\n const policyDecision = policy.decision;\n const preferredReadAction = resolvePreferredReadAction(memory);\n const preferredReadTarget = preferredReadAction ? resolveReadTargetForAction(memory, preferredReadAction) : undefined;\n const preferredTransformTarget = legalActions.includes(\"codeTransform\") ? resolveTransformTarget(memory) : undefined;\n const fallbackAction = resolveFallbackAction(legalActions, preferredReadAction, preferredReadTarget, preferredTransformTarget);\n const action = legalActions.includes(decision.action as AgentActionName)\n ? (decision.action as AgentActionName)\n : fallbackAction;\n const rawArgs = isPlainObject(decision.args) ? decision.args : {};\n const args = normalizeActionArgs(action, rawArgs, memory);\n\n if (isReadAction(action) && typeof args.target !== \"string\" && preferredReadTarget) {\n args.target = preferredReadTarget;\n }\n if (action === \"codeTransform\" && typeof args.target !== \"string\" && preferredTransformTarget) {\n args.target = preferredTransformTarget;\n }\n if (isReadAction(action) && typeof args.target === \"string\") {\n const currentTarget = args.target;\n const nextTarget = resolveReadTargetForAction(memory, action);\n if (looksLikeDirectoryTarget(currentTarget, memory.session.executionPath) && nextTarget) {\n args.target = nextTarget;\n }\n if (nextTarget && hasFreshRead(memory, action, currentTarget) && nextTarget !== currentTarget) {\n args.target = nextTarget;\n }\n }\n if (action === \"search-list-directory\") {\n const resolvedFolderTarget = resolveDirectoryListingTarget(\n memory,\n typeof args.folderPath === \"string\" ? args.folderPath : undefined\n );\n if (resolvedFolderTarget) {\n args.folderPath = resolvedFolderTarget;\n } else if (typeof args.folderPath !== \"string\") {\n const folderTarget = memory.task.softHints.find((target) => looksLikeDirectoryTarget(target, memory.session.executionPath));\n if (folderTarget) {\n args.folderPath = folderTarget;\n }\n }\n }\n if (\n action === \"final-answer\" &&\n !loopReview.stopAssessment.canStop &&\n loopReview.referenceFollowupNeeded &&\n preferredReadAction &&\n legalActions.includes(preferredReadAction) &&\n preferredReadTarget\n ) {\n return {\n action: preferredReadAction,\n args: { target: preferredReadTarget },\n reason: String(decision.reason ?? loopReview.stopAssessment.reason).trim(),\n };\n }\n if (\n action === policyDecision.nextAction &&\n policyDecision.args &&\n (action === \"search-list-directory\" || action === \"codeTransform\")\n ) {\n return {\n action,\n args: { ...policyDecision.args },\n reason: String(decision.reason ?? \"Selected the next small useful action.\").trim(),\n };\n }\n\n if (action === \"search-db\" && typeof args.query !== \"string\" && policyDecision.nextAction === \"search-db\" && policyDecision.args) {\n return {\n action,\n args: { ...policyDecision.args },\n reason: String(decision.reason ?? \"Selected the next small useful action.\").trim(),\n };\n }\n\n if (action === \"search-db\" && policyDecision.nextAction === \"search-db\" && policyDecision.args) {\n const policyQuery = typeof policyDecision.args.query === \"string\" ? policyDecision.args.query : undefined;\n if (policyQuery === memory.task.initialQuery) {\n return {\n action,\n args: { ...policyDecision.args },\n reason: String(decision.reason ?? \"Selected the next small useful action.\").trim(),\n };\n }\n }\n\n if (action === \"search-db\" && typeof args.query !== \"string\") {\n args.query = memory.task.normalizedQuery;\n }\n\n return {\n action,\n args,\n reason: String(decision.reason ?? \"Selected the next small useful action.\").trim(),\n };\n}\n\nexport function sanitizePlan(memory: AgentMemory, parsed: Partial<AgentPlanArtifact>): AgentPlanArtifact {\n const policy = resolvePolicyState(memory);\n const legalActions = new Set<AgentActionName>(buildActionMenu(memory));\n const preferredReadAction = resolvePreferredReadAction(memory);\n const nextReadTarget = preferredReadAction ? resolveReadTargetForAction(memory, preferredReadAction) : undefined;\n const transformTarget = resolveTransformTarget(memory);\n const rawSteps = Array.isArray(parsed.steps) ? parsed.steps : [];\n const normalizedSteps = rawSteps\n .map((entry) => {\n const action = entry && legalActions.has((entry as { action?: AgentActionName }).action as AgentActionName)\n ? (entry as { action: AgentActionName }).action\n : undefined;\n if (!action || action === \"plan\") {\n return null;\n }\n const rawArgs = isPlainObject((entry as { args?: unknown }).args)\n ? (entry as { args: Record<string, unknown> }).args\n : {};\n const normalizedArgs = normalizeActionArgs(action, rawArgs, memory);\n if (isReadAction(action) && typeof normalizedArgs.target !== \"string\" && nextReadTarget) {\n normalizedArgs.target = nextReadTarget;\n }\n if (action === \"codeTransform\" && typeof normalizedArgs.target !== \"string\") {\n const transformTarget = resolveTransformTarget(memory);\n if (transformTarget) {\n normalizedArgs.target = transformTarget;\n }\n }\n return {\n action,\n args: normalizedArgs,\n purpose: String((entry as { purpose?: unknown }).purpose ?? `Run ${action}.`).trim(),\n expectedEvidence: uniqueStrings(Array.isArray((entry as { expectedEvidence?: unknown }).expectedEvidence)\n ? ((entry as { expectedEvidence: string[] }).expectedEvidence)\n : []).slice(0, 4),\n };\n })\n .filter((entry): entry is NonNullable<typeof entry> => entry !== null)\n .slice(0, 3);\n\n return {\n goal: String(parsed.goal ?? memory.task.primaryIntent).trim(),\n why: String(parsed.why ?? \"Gather the smallest grounded evidence needed to answer.\").trim(),\n steps: normalizedSteps.length > 0\n ? normalizedSteps\n : [(() => {\n if (policy.decision.nextAction && legalActions.has(policy.decision.nextAction)) {\n return {\n action: policy.decision.nextAction,\n args: policy.decision.args ?? {},\n purpose: policy.decision.nextAction === \"codeTransform\"\n ? \"Apply the requested transform to the grounded target file.\"\n : \"Gather grounded evidence before answering.\",\n expectedEvidence: policy.decision.nextAction === \"codeTransform\"\n ? [\"validated transform artifact\"]\n : [\"grounded answer evidence\"],\n };\n }\n return {\n action: legalActions.has(\"codeTransform\") && transformTarget\n ? \"codeTransform\"\n : nextReadTarget\n ? (resolvePreferredReadAction(memory) ?? \"read-file\")\n : \"search-db\",\n args: legalActions.has(\"codeTransform\") && transformTarget\n ? { target: transformTarget }\n : nextReadTarget\n ? { target: nextReadTarget }\n : { query: memory.task.normalizedQuery },\n purpose: legalActions.has(\"codeTransform\") && transformTarget\n ? \"Apply the requested transform to the grounded target file.\"\n : \"Gather grounded evidence before answering.\",\n expectedEvidence: legalActions.has(\"codeTransform\") && transformTarget\n ? [\"validated transform artifact\"]\n : [\"grounded answer evidence\"],\n };\n })()],\n };\n}\n"]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export const EMPTY_OBJECT_SCHEMA = {
|
|
2
|
+
type: "object",
|
|
3
|
+
properties: {},
|
|
4
|
+
additionalProperties: false,
|
|
5
|
+
};
|
|
6
|
+
export const READ_FILE_SCHEMA = {
|
|
7
|
+
type: "object",
|
|
8
|
+
required: ["target"],
|
|
9
|
+
properties: {
|
|
10
|
+
target: { type: "string" },
|
|
11
|
+
},
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
};
|
|
14
|
+
export const TRIAGE_FILE_SCHEMA = {
|
|
15
|
+
type: "object",
|
|
16
|
+
required: ["target"],
|
|
17
|
+
properties: {
|
|
18
|
+
target: { type: "string" },
|
|
19
|
+
},
|
|
20
|
+
additionalProperties: false,
|
|
21
|
+
};
|
|
22
|
+
export const CODE_TRANSFORM_SCHEMA = {
|
|
23
|
+
type: "object",
|
|
24
|
+
required: ["target"],
|
|
25
|
+
properties: {
|
|
26
|
+
target: { type: "string" },
|
|
27
|
+
},
|
|
28
|
+
additionalProperties: false,
|
|
29
|
+
};
|
|
30
|
+
export const SEARCH_DB_SCHEMA = {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
query: { type: "string" },
|
|
34
|
+
limit: { type: "integer", minimum: 1, maximum: 8 },
|
|
35
|
+
},
|
|
36
|
+
additionalProperties: false,
|
|
37
|
+
};
|
|
38
|
+
export const SEARCH_REGEX_SCHEMA = {
|
|
39
|
+
type: "object",
|
|
40
|
+
required: ["pattern", "target"],
|
|
41
|
+
properties: {
|
|
42
|
+
pattern: { type: "string" },
|
|
43
|
+
target: { type: "string", enum: ["path", "content", "both"] },
|
|
44
|
+
flags: { type: "string" },
|
|
45
|
+
},
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
};
|
|
48
|
+
export const LIST_DIRECTORY_SCHEMA = {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
folderPath: { type: "string" },
|
|
52
|
+
},
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
};
|
|
55
|
+
function isPlainObject(value) {
|
|
56
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
57
|
+
}
|
|
58
|
+
function valueMatchesType(value, type) {
|
|
59
|
+
if (type === "array")
|
|
60
|
+
return Array.isArray(value);
|
|
61
|
+
if (type === "object")
|
|
62
|
+
return isPlainObject(value);
|
|
63
|
+
if (type === "integer")
|
|
64
|
+
return Number.isInteger(value);
|
|
65
|
+
if (type === "null")
|
|
66
|
+
return value === null;
|
|
67
|
+
return typeof value === type;
|
|
68
|
+
}
|
|
69
|
+
export function validateJsonSchemaValue(schema, value, pathName = "$") {
|
|
70
|
+
if (!schema)
|
|
71
|
+
return [];
|
|
72
|
+
const errors = [];
|
|
73
|
+
const allowedTypes = Array.isArray(schema.type)
|
|
74
|
+
? schema.type
|
|
75
|
+
: schema.type
|
|
76
|
+
? [schema.type]
|
|
77
|
+
: [];
|
|
78
|
+
if (allowedTypes.length > 0 && !allowedTypes.some((type) => valueMatchesType(value, type))) {
|
|
79
|
+
errors.push(`${pathName} expected ${allowedTypes.join("|")}`);
|
|
80
|
+
return errors;
|
|
81
|
+
}
|
|
82
|
+
if (Array.isArray(value)) {
|
|
83
|
+
if (typeof schema.minItems === "number" && value.length < schema.minItems) {
|
|
84
|
+
errors.push(`${pathName} must have at least ${schema.minItems} item(s)`);
|
|
85
|
+
}
|
|
86
|
+
if (typeof schema.maxItems === "number" && value.length > schema.maxItems) {
|
|
87
|
+
errors.push(`${pathName} must have at most ${schema.maxItems} item(s)`);
|
|
88
|
+
}
|
|
89
|
+
if (schema.items) {
|
|
90
|
+
value.forEach((item, index) => {
|
|
91
|
+
errors.push(...validateJsonSchemaValue(schema.items, item, `${pathName}[${index}]`));
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (typeof value === "number") {
|
|
96
|
+
if (typeof schema.minimum === "number" && value < schema.minimum) {
|
|
97
|
+
errors.push(`${pathName} must be >= ${schema.minimum}`);
|
|
98
|
+
}
|
|
99
|
+
if (typeof schema.maximum === "number" && value > schema.maximum) {
|
|
100
|
+
errors.push(`${pathName} must be <= ${schema.maximum}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (isPlainObject(value)) {
|
|
104
|
+
const required = schema.required ?? [];
|
|
105
|
+
for (const key of required) {
|
|
106
|
+
if (!(key in value)) {
|
|
107
|
+
errors.push(`${pathName}.${key} is required`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const properties = schema.properties ?? {};
|
|
111
|
+
for (const [key, childSchema] of Object.entries(properties)) {
|
|
112
|
+
if (key in value) {
|
|
113
|
+
errors.push(...validateJsonSchemaValue(childSchema, value[key], `${pathName}.${key}`));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (schema.additionalProperties === false) {
|
|
117
|
+
for (const key of Object.keys(value)) {
|
|
118
|
+
if (!(key in properties)) {
|
|
119
|
+
errors.push(`${pathName}.${key} is not allowed`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return errors;
|
|
125
|
+
}
|
|
126
|
+
export function validateActionArgs(spec, args) {
|
|
127
|
+
return validateJsonSchemaValue(spec.inputSchema, args);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/agent/actions/schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Defines small JSON-schema helpers for the new simple agent runtime.\n *\n * Why this file exists:\n * - action args should be validated before execution\n * - shared schemas should not live inside the loop file\n * - the first action set needs only a small schema subset\n * - transform now uses one explicit target schema instead of free-form args\n */\nimport type { AgentActionSpec, JsonSchema } from \"../types.js\";\n\nexport const EMPTY_OBJECT_SCHEMA: JsonSchema = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n};\n\nexport const READ_FILE_SCHEMA: JsonSchema = {\n type: \"object\",\n required: [\"target\"],\n properties: {\n target: { type: \"string\" },\n },\n additionalProperties: false,\n};\n\nexport const TRIAGE_FILE_SCHEMA: JsonSchema = {\n type: \"object\",\n required: [\"target\"],\n properties: {\n target: { type: \"string\" },\n },\n additionalProperties: false,\n};\n\nexport const CODE_TRANSFORM_SCHEMA: JsonSchema = {\n type: \"object\",\n required: [\"target\"],\n properties: {\n target: { type: \"string\" },\n },\n additionalProperties: false,\n};\n\nexport const SEARCH_DB_SCHEMA: JsonSchema = {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n limit: { type: \"integer\", minimum: 1, maximum: 8 },\n },\n additionalProperties: false,\n};\n\nexport const SEARCH_REGEX_SCHEMA: JsonSchema = {\n type: \"object\",\n required: [\"pattern\", \"target\"],\n properties: {\n pattern: { type: \"string\" },\n target: { type: \"string\", enum: [\"path\", \"content\", \"both\"] },\n flags: { type: \"string\" },\n },\n additionalProperties: false,\n};\n\nexport const LIST_DIRECTORY_SCHEMA: JsonSchema = {\n type: \"object\",\n properties: {\n folderPath: { type: \"string\" },\n },\n additionalProperties: false,\n};\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction valueMatchesType(value: unknown, type: string): boolean {\n if (type === \"array\") return Array.isArray(value);\n if (type === \"object\") return isPlainObject(value);\n if (type === \"integer\") return Number.isInteger(value);\n if (type === \"null\") return value === null;\n return typeof value === type;\n}\n\nexport function validateJsonSchemaValue(\n schema: JsonSchema | undefined,\n value: unknown,\n pathName = \"$\"\n): string[] {\n if (!schema) return [];\n\n const errors: string[] = [];\n const allowedTypes: string[] = Array.isArray(schema.type)\n ? schema.type\n : schema.type\n ? [schema.type]\n : [];\n\n if (allowedTypes.length > 0 && !allowedTypes.some((type) => valueMatchesType(value, type))) {\n errors.push(`${pathName} expected ${allowedTypes.join(\"|\")}`);\n return errors;\n }\n\n if (Array.isArray(value)) {\n if (typeof schema.minItems === \"number\" && value.length < schema.minItems) {\n errors.push(`${pathName} must have at least ${schema.minItems} item(s)`);\n }\n if (typeof schema.maxItems === \"number\" && value.length > schema.maxItems) {\n errors.push(`${pathName} must have at most ${schema.maxItems} item(s)`);\n }\n if (schema.items) {\n value.forEach((item, index) => {\n errors.push(...validateJsonSchemaValue(schema.items, item, `${pathName}[${index}]`));\n });\n }\n }\n\n if (typeof value === \"number\") {\n if (typeof schema.minimum === \"number\" && value < schema.minimum) {\n errors.push(`${pathName} must be >= ${schema.minimum}`);\n }\n if (typeof schema.maximum === \"number\" && value > schema.maximum) {\n errors.push(`${pathName} must be <= ${schema.maximum}`);\n }\n }\n\n if (isPlainObject(value)) {\n const required = schema.required ?? [];\n for (const key of required) {\n if (!(key in value)) {\n errors.push(`${pathName}.${key} is required`);\n }\n }\n\n const properties = schema.properties ?? {};\n for (const [key, childSchema] of Object.entries(properties)) {\n if (key in value) {\n errors.push(...validateJsonSchemaValue(childSchema, value[key], `${pathName}.${key}`));\n }\n }\n\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(value)) {\n if (!(key in properties)) {\n errors.push(`${pathName}.${key} is not allowed`);\n }\n }\n }\n }\n\n return errors;\n}\n\nexport function validateActionArgs(spec: AgentActionSpec, args: Record<string, unknown>): string[] {\n return validateJsonSchemaValue(spec.inputSchema, args);\n}\n"]}
|