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,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs shell-backed fixed-string content search for broad repo questions.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - broad "where is X set?" asks benefit from literal content search before semantic retrieval
|
|
6
|
+
* - grep-style execution should have one owner in the new agent search area
|
|
7
|
+
* - `rg` is preferred, but the lane must still work with an in-process fallback
|
|
8
|
+
* - shell search should retrieve a broad frontier, not own final candidate ordering
|
|
9
|
+
*/
|
|
10
|
+
import { execFileSync } from "child_process";
|
|
11
|
+
import { collectFixedStringMatches, collectSearchablePaths, dedupeStrings, tokenizeSearchTerms } from "./shared.js";
|
|
12
|
+
const GENERIC_TERMS = new Set(["agent", "code", "config", "file", "files", "repo", "runtime"]);
|
|
13
|
+
const SECONDARY_TERMS = new Set(["point", "points", "configured", "configure", "configuration"]);
|
|
14
|
+
const OWNER_SIGNAL_TERMS = new Set(["command", "count", "entry", "limit", "loop", "max", "register", "test", "tests", "threshold", "turn"]);
|
|
15
|
+
function deriveShellTerms(query) {
|
|
16
|
+
const rawTerms = tokenizeSearchTerms(query).flatMap((term) => {
|
|
17
|
+
const normalized = term.endsWith("s") && term.length > 4 ? term.slice(0, -1) : term;
|
|
18
|
+
return normalized !== term ? [normalized, term] : [term];
|
|
19
|
+
});
|
|
20
|
+
const preferredTerms = rawTerms.filter((term) => !GENERIC_TERMS.has(term));
|
|
21
|
+
const strongTerms = preferredTerms.filter((term) => !SECONDARY_TERMS.has(term));
|
|
22
|
+
const secondaryTerms = preferredTerms.filter((term) => SECONDARY_TERMS.has(term));
|
|
23
|
+
const ordered = strongTerms.length > 0
|
|
24
|
+
? [...strongTerms, ...secondaryTerms, ...rawTerms]
|
|
25
|
+
: preferredTerms.length > 0
|
|
26
|
+
? [...preferredTerms, ...rawTerms]
|
|
27
|
+
: rawTerms;
|
|
28
|
+
return dedupeStrings(ordered).slice(0, 10);
|
|
29
|
+
}
|
|
30
|
+
function clampSnippet(snippet) {
|
|
31
|
+
return snippet.trim().slice(0, 220);
|
|
32
|
+
}
|
|
33
|
+
function dedupeMatches(matches) {
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const out = [];
|
|
36
|
+
for (const match of matches) {
|
|
37
|
+
const key = [match.filePath, match.line ?? "", match.column ?? "", match.snippet, match.matchKind].join("|");
|
|
38
|
+
if (seen.has(key)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
seen.add(key);
|
|
42
|
+
out.push(match);
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
function buildShellFrontier(matches, limit) {
|
|
47
|
+
const maxFiles = Math.max(limit * 6, 24);
|
|
48
|
+
const filePaths = [];
|
|
49
|
+
const seen = new Set();
|
|
50
|
+
for (const match of matches) {
|
|
51
|
+
if (seen.has(match.filePath)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
seen.add(match.filePath);
|
|
55
|
+
filePaths.push(match.filePath);
|
|
56
|
+
if (filePaths.length >= maxFiles) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return filePaths;
|
|
61
|
+
}
|
|
62
|
+
function extractMatchedTerms(matches) {
|
|
63
|
+
return dedupeStrings(matches
|
|
64
|
+
.flatMap((match) => match.reasons ?? [])
|
|
65
|
+
.map((reason) => reason.match(/^term:(.+)$/i)?.[1]?.toLowerCase())
|
|
66
|
+
.filter((term) => Boolean(term)));
|
|
67
|
+
}
|
|
68
|
+
function isGenericShellTerm(term) {
|
|
69
|
+
return GENERIC_TERMS.has(term) || SECONDARY_TERMS.has(term);
|
|
70
|
+
}
|
|
71
|
+
function resolveShellWeakReason(matches, filePaths) {
|
|
72
|
+
if (filePaths.length === 0) {
|
|
73
|
+
return "no-match";
|
|
74
|
+
}
|
|
75
|
+
const matchedTerms = extractMatchedTerms(matches);
|
|
76
|
+
if (matchedTerms.length === 0) {
|
|
77
|
+
return "no-term-confirmation";
|
|
78
|
+
}
|
|
79
|
+
const strongMatchedTerms = matchedTerms.filter((term) => !isGenericShellTerm(term));
|
|
80
|
+
if (strongMatchedTerms.length === 0) {
|
|
81
|
+
const ownerSignalTerms = matchedTerms.filter((term) => OWNER_SIGNAL_TERMS.has(term));
|
|
82
|
+
return ownerSignalTerms.length >= 2 ? undefined : "generic-terms-only";
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
function collectShellMatchesWithRg(rootDir, terms, limit) {
|
|
87
|
+
const matches = [];
|
|
88
|
+
for (const term of terms) {
|
|
89
|
+
const maxPerTerm = Math.max(limit * 2, 8);
|
|
90
|
+
const maxTotal = Math.max(limit * 10, 40);
|
|
91
|
+
let output = "";
|
|
92
|
+
try {
|
|
93
|
+
output = execFileSync("rg", [
|
|
94
|
+
"--line-number",
|
|
95
|
+
"--column",
|
|
96
|
+
"--no-heading",
|
|
97
|
+
"--color",
|
|
98
|
+
"never",
|
|
99
|
+
"--ignore-case",
|
|
100
|
+
"--fixed-strings",
|
|
101
|
+
"--glob",
|
|
102
|
+
"!node_modules",
|
|
103
|
+
"--glob",
|
|
104
|
+
"!.git",
|
|
105
|
+
term,
|
|
106
|
+
rootDir,
|
|
107
|
+
], {
|
|
108
|
+
encoding: "utf8",
|
|
109
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
114
|
+
if (message.includes("spawnSync rg ENOENT")) {
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
output = typeof error.stdout === "string"
|
|
118
|
+
? error.stdout ?? ""
|
|
119
|
+
: "";
|
|
120
|
+
}
|
|
121
|
+
let addedForTerm = 0;
|
|
122
|
+
for (const line of output.split(/\r?\n/)) {
|
|
123
|
+
if (!line.trim() || addedForTerm >= maxPerTerm || matches.length >= maxTotal)
|
|
124
|
+
continue;
|
|
125
|
+
const parts = line.match(/^(.+?):(\d+):(\d+):(.*)$/);
|
|
126
|
+
if (!parts)
|
|
127
|
+
continue;
|
|
128
|
+
matches.push({
|
|
129
|
+
filePath: parts[1],
|
|
130
|
+
line: Number(parts[2]),
|
|
131
|
+
column: Number(parts[3]),
|
|
132
|
+
snippet: clampSnippet(parts[4]),
|
|
133
|
+
matchKind: "shell-content",
|
|
134
|
+
score: term.length,
|
|
135
|
+
reasons: [`term:${term}`],
|
|
136
|
+
});
|
|
137
|
+
addedForTerm += 1;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return dedupeMatches(matches);
|
|
141
|
+
}
|
|
142
|
+
function collectShellMatches(rootDir, terms, limit) {
|
|
143
|
+
try {
|
|
144
|
+
return collectShellMatchesWithRg(rootDir, terms, limit);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
const files = collectSearchablePaths(rootDir);
|
|
148
|
+
return collectFixedStringMatches(files, terms, "shell-content", {
|
|
149
|
+
caseSensitive: false,
|
|
150
|
+
maxPerFile: 2,
|
|
151
|
+
maxTotal: Math.max(limit * 10, 40),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export function shouldFallbackFromShell(packet) {
|
|
156
|
+
if (packet.lane !== "shell-content") {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
return packet.failure?.failureClass === "no-match" || packet.debug?.recoveryReason === "weak-shell-results";
|
|
160
|
+
}
|
|
161
|
+
export function runShellSearch(rootDir, query, limit = 5) {
|
|
162
|
+
const terms = deriveShellTerms(query);
|
|
163
|
+
if (terms.length === 0) {
|
|
164
|
+
return {
|
|
165
|
+
lane: "shell-content",
|
|
166
|
+
query,
|
|
167
|
+
filePaths: [],
|
|
168
|
+
failure: {
|
|
169
|
+
status: "failed",
|
|
170
|
+
failureClass: "no-match",
|
|
171
|
+
message: "Shell content search could not derive any useful search terms.",
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const matches = collectShellMatches(rootDir, terms, limit);
|
|
176
|
+
const filePaths = buildShellFrontier(matches, limit);
|
|
177
|
+
const weakReason = resolveShellWeakReason(matches, filePaths);
|
|
178
|
+
return {
|
|
179
|
+
lane: "shell-content",
|
|
180
|
+
query,
|
|
181
|
+
filePaths,
|
|
182
|
+
matches,
|
|
183
|
+
debug: {
|
|
184
|
+
matchTerms: terms,
|
|
185
|
+
...(weakReason ? { recoveryReason: "weak-shell-results" } : {}),
|
|
186
|
+
},
|
|
187
|
+
...(filePaths.length === 0 ? {
|
|
188
|
+
failure: {
|
|
189
|
+
status: "failed",
|
|
190
|
+
failureClass: "no-match",
|
|
191
|
+
message: "Shell content search found no matches in scope.",
|
|
192
|
+
},
|
|
193
|
+
} : weakReason ? {
|
|
194
|
+
failure: {
|
|
195
|
+
status: "failed",
|
|
196
|
+
failureClass: "too-broad",
|
|
197
|
+
message: `Shell content search found only weak matches: ${weakReason}.`,
|
|
198
|
+
},
|
|
199
|
+
} : {}),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/agent/search/shell.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runs shell-backed fixed-string content search for broad repo questions.\n *\n * Why this file exists:\n * - broad \"where is X set?\" asks benefit from literal content search before semantic retrieval\n * - grep-style execution should have one owner in the new agent search area\n * - `rg` is preferred, but the lane must still work with an in-process fallback\n * - shell search should retrieve a broad frontier, not own final candidate ordering\n */\nimport { execFileSync } from \"child_process\";\nimport type { AgentSearchMatch } from \"../types.js\";\nimport type { AgentSearchPacket } from \"./types.js\";\nimport { collectFixedStringMatches, collectSearchablePaths, dedupeStrings, tokenizeSearchTerms } from \"./shared.js\";\n\nconst GENERIC_TERMS = new Set([\"agent\", \"code\", \"config\", \"file\", \"files\", \"repo\", \"runtime\"]);\nconst SECONDARY_TERMS = new Set([\"point\", \"points\", \"configured\", \"configure\", \"configuration\"]);\nconst OWNER_SIGNAL_TERMS = new Set([\"command\", \"count\", \"entry\", \"limit\", \"loop\", \"max\", \"register\", \"test\", \"tests\", \"threshold\", \"turn\"]);\n\nfunction deriveShellTerms(query: string): string[] {\n const rawTerms = tokenizeSearchTerms(query).flatMap((term) => {\n const normalized = term.endsWith(\"s\") && term.length > 4 ? term.slice(0, -1) : term;\n return normalized !== term ? [normalized, term] : [term];\n });\n const preferredTerms = rawTerms.filter((term) => !GENERIC_TERMS.has(term));\n const strongTerms = preferredTerms.filter((term) => !SECONDARY_TERMS.has(term));\n const secondaryTerms = preferredTerms.filter((term) => SECONDARY_TERMS.has(term));\n const ordered = strongTerms.length > 0\n ? [...strongTerms, ...secondaryTerms, ...rawTerms]\n : preferredTerms.length > 0\n ? [...preferredTerms, ...rawTerms]\n : rawTerms;\n return dedupeStrings(ordered).slice(0, 10);\n}\n\nfunction clampSnippet(snippet: string): string {\n return snippet.trim().slice(0, 220);\n}\n\nfunction dedupeMatches(matches: AgentSearchMatch[]): AgentSearchMatch[] {\n const seen = new Set<string>();\n const out: AgentSearchMatch[] = [];\n for (const match of matches) {\n const key = [match.filePath, match.line ?? \"\", match.column ?? \"\", match.snippet, match.matchKind].join(\"|\");\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push(match);\n }\n return out;\n}\n\nfunction buildShellFrontier(matches: AgentSearchMatch[], limit: number): string[] {\n const maxFiles = Math.max(limit * 6, 24);\n const filePaths: string[] = [];\n const seen = new Set<string>();\n for (const match of matches) {\n if (seen.has(match.filePath)) {\n continue;\n }\n seen.add(match.filePath);\n filePaths.push(match.filePath);\n if (filePaths.length >= maxFiles) {\n break;\n }\n }\n return filePaths;\n}\n\nfunction extractMatchedTerms(matches: AgentSearchMatch[]): string[] {\n return dedupeStrings(\n matches\n .flatMap((match) => match.reasons ?? [])\n .map((reason) => reason.match(/^term:(.+)$/i)?.[1]?.toLowerCase())\n .filter((term): term is string => Boolean(term))\n );\n}\n\nfunction isGenericShellTerm(term: string): boolean {\n return GENERIC_TERMS.has(term) || SECONDARY_TERMS.has(term);\n}\n\nfunction resolveShellWeakReason(matches: AgentSearchMatch[], filePaths: string[]): string | undefined {\n if (filePaths.length === 0) {\n return \"no-match\";\n }\n\n const matchedTerms = extractMatchedTerms(matches);\n if (matchedTerms.length === 0) {\n return \"no-term-confirmation\";\n }\n\n const strongMatchedTerms = matchedTerms.filter((term) => !isGenericShellTerm(term));\n if (strongMatchedTerms.length === 0) {\n const ownerSignalTerms = matchedTerms.filter((term) => OWNER_SIGNAL_TERMS.has(term));\n return ownerSignalTerms.length >= 2 ? undefined : \"generic-terms-only\";\n }\n return undefined;\n}\n\nfunction collectShellMatchesWithRg(rootDir: string, terms: string[], limit: number): AgentSearchMatch[] {\n const matches: AgentSearchMatch[] = [];\n for (const term of terms) {\n const maxPerTerm = Math.max(limit * 2, 8);\n const maxTotal = Math.max(limit * 10, 40);\n let output = \"\";\n try {\n output = execFileSync(\"rg\", [\n \"--line-number\",\n \"--column\",\n \"--no-heading\",\n \"--color\",\n \"never\",\n \"--ignore-case\",\n \"--fixed-strings\",\n \"--glob\",\n \"!node_modules\",\n \"--glob\",\n \"!.git\",\n term,\n rootDir,\n ], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"spawnSync rg ENOENT\")) {\n throw error;\n }\n output = typeof (error as { stdout?: string }).stdout === \"string\"\n ? (error as { stdout?: string }).stdout ?? \"\"\n : \"\";\n }\n\n let addedForTerm = 0;\n for (const line of output.split(/\\r?\\n/)) {\n if (!line.trim() || addedForTerm >= maxPerTerm || matches.length >= maxTotal) continue;\n const parts = line.match(/^(.+?):(\\d+):(\\d+):(.*)$/);\n if (!parts) continue;\n matches.push({\n filePath: parts[1],\n line: Number(parts[2]),\n column: Number(parts[3]),\n snippet: clampSnippet(parts[4]),\n matchKind: \"shell-content\",\n score: term.length,\n reasons: [`term:${term}`],\n });\n addedForTerm += 1;\n }\n }\n return dedupeMatches(matches);\n}\n\nfunction collectShellMatches(rootDir: string, terms: string[], limit: number): AgentSearchMatch[] {\n try {\n return collectShellMatchesWithRg(rootDir, terms, limit);\n } catch {\n const files = collectSearchablePaths(rootDir);\n return collectFixedStringMatches(files, terms, \"shell-content\", {\n caseSensitive: false,\n maxPerFile: 2,\n maxTotal: Math.max(limit * 10, 40),\n });\n }\n}\n\nexport function shouldFallbackFromShell(packet: AgentSearchPacket): boolean {\n if (packet.lane !== \"shell-content\") {\n return false;\n }\n return packet.failure?.failureClass === \"no-match\" || packet.debug?.recoveryReason === \"weak-shell-results\";\n}\n\nexport function runShellSearch(rootDir: string, query: string, limit = 5): AgentSearchPacket {\n const terms = deriveShellTerms(query);\n if (terms.length === 0) {\n return {\n lane: \"shell-content\",\n query,\n filePaths: [],\n failure: {\n status: \"failed\",\n failureClass: \"no-match\",\n message: \"Shell content search could not derive any useful search terms.\",\n },\n };\n }\n\n const matches = collectShellMatches(rootDir, terms, limit);\n const filePaths = buildShellFrontier(matches, limit);\n const weakReason = resolveShellWeakReason(matches, filePaths);\n return {\n lane: \"shell-content\",\n query,\n filePaths,\n matches,\n debug: {\n matchTerms: terms,\n ...(weakReason ? { recoveryReason: \"weak-shell-results\" } : {}),\n },\n ...(filePaths.length === 0 ? {\n failure: {\n status: \"failed\" as const,\n failureClass: \"no-match\" as const,\n message: \"Shell content search found no matches in scope.\",\n },\n } : weakReason ? {\n failure: {\n status: \"failed\" as const,\n failureClass: \"too-broad\" as const,\n message: `Shell content search found only weak matches: ${weakReason}.`,\n },\n } : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Labels one snippet by structural value.
|
|
3
|
+
* Example: `import { Foo } from "./x"` -> `reference-signal`.
|
|
4
|
+
*/
|
|
5
|
+
export function classifySnippetEvidence(snippet, matchKind) {
|
|
6
|
+
const trimmed = String(snippet ?? "").trim();
|
|
7
|
+
if (!trimmed) {
|
|
8
|
+
return "noise";
|
|
9
|
+
}
|
|
10
|
+
// Example: `query: "\"Find foo\""` or `"Explain foo",`
|
|
11
|
+
if (/\b(?:query|userQuery|prompt|input|expected|fixture)\s*:/.test(trimmed)) {
|
|
12
|
+
return "noise";
|
|
13
|
+
}
|
|
14
|
+
if (/^["'`][^"'`]+["'`],?$/.test(trimmed)) {
|
|
15
|
+
return "noise";
|
|
16
|
+
}
|
|
17
|
+
if (/^import\s+(?:type\s+)?[\s\S]+?\s+from\s+["'][^"']+["'];?$/.test(trimmed) ||
|
|
18
|
+
/^export\s+\*\s+from\s+["'][^"']+["'];?$/.test(trimmed) ||
|
|
19
|
+
/^export\s+\{[\s\S]+?\}\s+from\s+["'][^"']+["'];?$/.test(trimmed) ||
|
|
20
|
+
/^const\s+[A-Za-z0-9_$]+\s*=\s*require\(\s*["'][^"']+["']\s*\);?$/.test(trimmed)) {
|
|
21
|
+
return "reference-signal";
|
|
22
|
+
}
|
|
23
|
+
// Example: `type AgentActions = Record<...>;`
|
|
24
|
+
if (/^(?:export\s+)?type\s+[A-Za-z0-9_$]+\s*=/.test(trimmed)) {
|
|
25
|
+
return "reference-signal";
|
|
26
|
+
}
|
|
27
|
+
if (/\.(?:command|action)\s*\(/.test(trimmed) ||
|
|
28
|
+
/\b(?:export\s+)?(?:async\s+)?function\b/.test(trimmed) ||
|
|
29
|
+
/\bclass\s+[A-Za-z0-9_$]+/.test(trimmed) ||
|
|
30
|
+
/\b(?:if|switch|return)\b/.test(trimmed) ||
|
|
31
|
+
/\bprocess\.env\b/.test(trimmed) ||
|
|
32
|
+
/\b(?:export\s+)?(?:const|let|var)\s+[A-Za-z0-9_$]+\s*=/.test(trimmed) ||
|
|
33
|
+
/^[A-Za-z0-9_$"'`.-]+\s*:\s*(?:["'`[{]|true\b|false\b|null\b|\d)/.test(trimmed)) {
|
|
34
|
+
return "answer-evidence";
|
|
35
|
+
}
|
|
36
|
+
if (matchKind === "path-match") {
|
|
37
|
+
return "reference-signal";
|
|
38
|
+
}
|
|
39
|
+
return "answer-evidence";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Keeps answer-evidence by default and allows one weak fallback per file.
|
|
43
|
+
* Example: a file with only `export * from "./x"` may keep one fallback snippet.
|
|
44
|
+
*/
|
|
45
|
+
export function shouldKeepSnippetInMatches(kind, state) {
|
|
46
|
+
if (kind === "noise") {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (kind === "answer-evidence") {
|
|
50
|
+
return state.keptAnswerCount < state.maxPerFile;
|
|
51
|
+
}
|
|
52
|
+
if (state.hasAnswerEvidence) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return state.keptReferenceCount < 1;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=snippetEvidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snippetEvidence.js","sourceRoot":"","sources":["../../../src/agent/search/snippetEvidence.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,SAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uDAAuD;IACvD,IAAI,yDAAyD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IACE,2DAA2D,CAAC,IAAI,CAAC,OAAO,CAAC;QACzE,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC;QACvD,mDAAmD,CAAC,IAAI,CAAC,OAAO,CAAC;QACjE,kEAAkE,CAAC,IAAI,CAAC,OAAO,CAAC,EAChF,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,8CAA8C;IAC9C,IAAI,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IACE,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;QACzC,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC;QACvD,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QACxC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QACxC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,wDAAwD,CAAC,IAAI,CAAC,OAAO,CAAC;QACtE,iEAAiE,CAAC,IAAI,CAAC,OAAO,CAAC,EAC/E,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAA8B,EAC9B,KAAiC;IAEjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACtC,CAAC","sourcesContent":["/**\n * Classifies search snippets by how useful they are as answer evidence.\n *\n * Why this file exists:\n * - shared match extraction should decide snippet quality in one place\n * - imports and re-exports are still useful as follow-up hints, but weak as answer proof\n * - query echoes and fixture text should not show up as primary search evidence\n */\nimport type { AgentSearchMatchKind } from \"../types.js\";\n\nexport type AgentSnippetEvidenceKind = \"answer-evidence\" | \"reference-signal\" | \"noise\";\n\nexport type SnippetMatchSelectionState = {\n maxPerFile: number;\n hasAnswerEvidence: boolean;\n keptAnswerCount: number;\n keptReferenceCount: number;\n};\n\n/**\n * Labels one snippet by structural value.\n * Example: `import { Foo } from \"./x\"` -> `reference-signal`.\n */\nexport function classifySnippetEvidence(\n snippet: string,\n matchKind: AgentSearchMatchKind\n): AgentSnippetEvidenceKind {\n const trimmed = String(snippet ?? \"\").trim();\n if (!trimmed) {\n return \"noise\";\n }\n\n // Example: `query: \"\\\"Find foo\\\"\"` or `\"Explain foo\",`\n if (/\\b(?:query|userQuery|prompt|input|expected|fixture)\\s*:/.test(trimmed)) {\n return \"noise\";\n }\n\n if (/^[\"'`][^\"'`]+[\"'`],?$/.test(trimmed)) {\n return \"noise\";\n }\n\n if (\n /^import\\s+(?:type\\s+)?[\\s\\S]+?\\s+from\\s+[\"'][^\"']+[\"'];?$/.test(trimmed) ||\n /^export\\s+\\*\\s+from\\s+[\"'][^\"']+[\"'];?$/.test(trimmed) ||\n /^export\\s+\\{[\\s\\S]+?\\}\\s+from\\s+[\"'][^\"']+[\"'];?$/.test(trimmed) ||\n /^const\\s+[A-Za-z0-9_$]+\\s*=\\s*require\\(\\s*[\"'][^\"']+[\"']\\s*\\);?$/.test(trimmed)\n ) {\n return \"reference-signal\";\n }\n\n // Example: `type AgentActions = Record<...>;`\n if (/^(?:export\\s+)?type\\s+[A-Za-z0-9_$]+\\s*=/.test(trimmed)) {\n return \"reference-signal\";\n }\n\n if (\n /\\.(?:command|action)\\s*\\(/.test(trimmed) ||\n /\\b(?:export\\s+)?(?:async\\s+)?function\\b/.test(trimmed) ||\n /\\bclass\\s+[A-Za-z0-9_$]+/.test(trimmed) ||\n /\\b(?:if|switch|return)\\b/.test(trimmed) ||\n /\\bprocess\\.env\\b/.test(trimmed) ||\n /\\b(?:export\\s+)?(?:const|let|var)\\s+[A-Za-z0-9_$]+\\s*=/.test(trimmed) ||\n /^[A-Za-z0-9_$\"'`.-]+\\s*:\\s*(?:[\"'`[{]|true\\b|false\\b|null\\b|\\d)/.test(trimmed)\n ) {\n return \"answer-evidence\";\n }\n\n if (matchKind === \"path-match\") {\n return \"reference-signal\";\n }\n\n return \"answer-evidence\";\n}\n\n/**\n * Keeps answer-evidence by default and allows one weak fallback per file.\n * Example: a file with only `export * from \"./x\"` may keep one fallback snippet.\n */\nexport function shouldKeepSnippetInMatches(\n kind: AgentSnippetEvidenceKind,\n state: SnippetMatchSelectionState\n): boolean {\n if (kind === \"noise\") {\n return false;\n }\n\n if (kind === \"answer-evidence\") {\n return state.keptAnswerCount < state.maxPerFile;\n }\n\n if (state.hasAnswerEvidence) {\n return false;\n }\n\n return state.keptReferenceCount < 1;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/search/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Defines small public search packet types for the modular agent runtime.\n */\nimport type { AgentSearchMatch } from \"../types.js\";\n\nexport type AgentSearchLane = \"exact-target\" | \"semantic\" | \"regex\" | \"directory\" | \"fragment\" | \"shell-content\";\n\nexport interface AgentLaneDecision {\n lane: AgentSearchLane;\n reason: string;\n resolvedTarget?: string;\n}\n\nexport type AgentSearchFailureClass =\n | \"no-match\"\n | \"too-broad\"\n | \"ambiguous\"\n | \"invalid-regex\"\n | \"scope-missing\"\n | \"executor-error\";\n\nexport interface AgentSearchFailure {\n status: \"failed\";\n failureClass: AgentSearchFailureClass;\n message: string;\n pattern?: string;\n flags?: string;\n}\n\nexport interface AgentDirectoryEntry {\n name: string;\n kind: \"file\" | \"folder\";\n}\n\nexport interface AgentSearchPacket {\n lane: AgentSearchLane;\n query: string;\n filePaths: string[];\n relatedFileScores?: Record<string, number>;\n topHits?: Array<{\n filePath: string;\n score: number;\n bm25Raw?: number;\n reasons: string[];\n }>;\n matches?: AgentSearchMatch[];\n directoryPath?: string;\n directoryEntries?: AgentDirectoryEntry[];\n summary?: string;\n matchCount?: number;\n failure?: AgentSearchFailure;\n debug?: {\n queriesRun?: string[];\n recoveryUsed?: boolean;\n recoveryReason?: string;\n matchTerms?: string[];\n batchDebug?: Array<{\n query: string;\n source: \"base-query\" | \"search-term-group\";\n termGroupIndex?: number;\n kind?: \"repo-anchor\" | \"command-path\" | \"generic\";\n terms?: string[];\n continued: boolean;\n strongEnough: boolean;\n strongReason?: string;\n }>;\n };\n}\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Applies explicit task and step state transitions for the new simple agent.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - status changes should not be open-coded across the loop
|
|
6
|
+
* - invalid transitions should fail fast in tests and during development
|
|
7
|
+
* - the first runtime slice only needs a small validated state helper
|
|
8
|
+
* - runtime-created steps should come from one shared helper
|
|
9
|
+
*/
|
|
10
|
+
import { nowIso } from "../evidence/index.js";
|
|
11
|
+
const ALLOWED_STEP_TRANSITIONS = {
|
|
12
|
+
pending: ["running", "skipped", "blocked"],
|
|
13
|
+
running: ["done", "failed", "blocked"],
|
|
14
|
+
done: [],
|
|
15
|
+
failed: [],
|
|
16
|
+
blocked: [],
|
|
17
|
+
skipped: [],
|
|
18
|
+
};
|
|
19
|
+
const ALLOWED_TASK_TRANSITIONS = {
|
|
20
|
+
active: ["waiting", "done", "blocked", "failed"],
|
|
21
|
+
waiting: ["active", "blocked", "failed", "done"],
|
|
22
|
+
done: [],
|
|
23
|
+
blocked: [],
|
|
24
|
+
failed: [],
|
|
25
|
+
};
|
|
26
|
+
function assertStepTransition(from, to) {
|
|
27
|
+
if (!ALLOWED_STEP_TRANSITIONS[from].includes(to)) {
|
|
28
|
+
throw new Error(`Invalid agent step transition: ${from} -> ${to}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function assertTaskTransition(from, to) {
|
|
32
|
+
if (!ALLOWED_TASK_TRANSITIONS[from].includes(to)) {
|
|
33
|
+
throw new Error(`Invalid agent task transition: ${from} -> ${to}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function createStepId(memory) {
|
|
37
|
+
return `step-${String(memory.steps.length + 1).padStart(3, "0")}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates one pending runtime step in a shared way.
|
|
41
|
+
* Example: a chosen `read-file` action becomes one explicit `pending` step.
|
|
42
|
+
*/
|
|
43
|
+
export function createRuntimeStep(memory, action, purpose, args = {}, expectedEvidence = []) {
|
|
44
|
+
const step = {
|
|
45
|
+
id: createStepId(memory),
|
|
46
|
+
action,
|
|
47
|
+
status: "pending",
|
|
48
|
+
args,
|
|
49
|
+
purpose,
|
|
50
|
+
expectedEvidence,
|
|
51
|
+
createdAt: nowIso(),
|
|
52
|
+
};
|
|
53
|
+
memory.steps.push(step);
|
|
54
|
+
return step;
|
|
55
|
+
}
|
|
56
|
+
export function startStep(memory, step) {
|
|
57
|
+
assertStepTransition(step.status, "running");
|
|
58
|
+
step.status = "running";
|
|
59
|
+
step.startedAt = nowIso();
|
|
60
|
+
memory.task.currentStepId = step.id;
|
|
61
|
+
}
|
|
62
|
+
export function finishStep(memory, step, nextStatus, summary) {
|
|
63
|
+
assertStepTransition(step.status, nextStatus);
|
|
64
|
+
step.status = nextStatus;
|
|
65
|
+
step.resultSummary = summary;
|
|
66
|
+
step.completedAt = nowIso();
|
|
67
|
+
memory.task.currentStepId = undefined;
|
|
68
|
+
}
|
|
69
|
+
export function failStep(memory, step, summary) {
|
|
70
|
+
finishStep(memory, step, "failed", summary);
|
|
71
|
+
}
|
|
72
|
+
export function finalizeTask(memory, nextStatus, stopReason) {
|
|
73
|
+
assertTaskTransition(memory.task.status, nextStatus);
|
|
74
|
+
memory.task.status = nextStatus;
|
|
75
|
+
memory.task.stopReason = stopReason;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resumes one waiting task after the user supplies the missing clarification.
|
|
79
|
+
* Example: `waiting -> active` keeps the same task id while clearing the prior stop reason.
|
|
80
|
+
*/
|
|
81
|
+
export function resumeTask(memory) {
|
|
82
|
+
assertTaskTransition(memory.task.status, "active");
|
|
83
|
+
memory.task.status = "active";
|
|
84
|
+
memory.task.stopReason = undefined;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Moves one task into the shared waiting state before the loop returns to the user.
|
|
88
|
+
* Example: `active -> waiting` records that one concrete clarification is still needed.
|
|
89
|
+
*/
|
|
90
|
+
export function setWaitingTask(memory, stopReason = "need-user-input") {
|
|
91
|
+
finalizeTask(memory, "waiting", stopReason);
|
|
92
|
+
}
|
|
93
|
+
export function requestReplan(memory) {
|
|
94
|
+
if (memory.steps.some((candidate) => candidate.status === "pending" && candidate.action === "plan")) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
return createRuntimeStep(memory, "plan", "Adjust the next steps using the latest evidence.", {}, ["revised plan"]);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/state/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Applies explicit task and step state transitions for the new simple agent.\n *\n * Why this file exists:\n * - status changes should not be open-coded across the loop\n * - invalid transitions should fail fast in tests and during development\n * - the first runtime slice only needs a small validated state helper\n * - runtime-created steps should come from one shared helper\n */\nimport { nowIso } from \"../evidence/index.js\";\nimport type { AgentActionName, AgentMemory, AgentStep, AgentStepStatus, AgentTaskStatus } from \"../types.js\";\n\nconst ALLOWED_STEP_TRANSITIONS: Record<AgentStepStatus, AgentStepStatus[]> = {\n pending: [\"running\", \"skipped\", \"blocked\"],\n running: [\"done\", \"failed\", \"blocked\"],\n done: [],\n failed: [],\n blocked: [],\n skipped: [],\n};\n\nconst ALLOWED_TASK_TRANSITIONS: Record<AgentTaskStatus, AgentTaskStatus[]> = {\n active: [\"waiting\", \"done\", \"blocked\", \"failed\"],\n waiting: [\"active\", \"blocked\", \"failed\", \"done\"],\n done: [],\n blocked: [],\n failed: [],\n};\n\nfunction assertStepTransition(from: AgentStepStatus, to: AgentStepStatus): void {\n if (!ALLOWED_STEP_TRANSITIONS[from].includes(to)) {\n throw new Error(`Invalid agent step transition: ${from} -> ${to}`);\n }\n}\n\nfunction assertTaskTransition(from: AgentTaskStatus, to: AgentTaskStatus): void {\n if (!ALLOWED_TASK_TRANSITIONS[from].includes(to)) {\n throw new Error(`Invalid agent task transition: ${from} -> ${to}`);\n }\n}\n\nfunction createStepId(memory: AgentMemory): string {\n return `step-${String(memory.steps.length + 1).padStart(3, \"0\")}`;\n}\n\n/**\n * Creates one pending runtime step in a shared way.\n * Example: a chosen `read-file` action becomes one explicit `pending` step.\n */\nexport function createRuntimeStep(\n memory: AgentMemory,\n action: AgentActionName,\n purpose: string,\n args: Record<string, unknown> = {},\n expectedEvidence: string[] = []\n): AgentStep {\n const step: AgentStep = {\n id: createStepId(memory),\n action,\n status: \"pending\",\n args,\n purpose,\n expectedEvidence,\n createdAt: nowIso(),\n };\n memory.steps.push(step);\n return step;\n}\n\nexport function startStep(memory: AgentMemory, step: AgentStep): void {\n assertStepTransition(step.status, \"running\");\n step.status = \"running\";\n step.startedAt = nowIso();\n memory.task.currentStepId = step.id;\n}\n\nexport function finishStep(\n memory: AgentMemory,\n step: AgentStep,\n nextStatus: Extract<AgentStepStatus, \"done\" | \"failed\" | \"blocked\" | \"skipped\">,\n summary: string\n): void {\n assertStepTransition(step.status, nextStatus);\n step.status = nextStatus;\n step.resultSummary = summary;\n step.completedAt = nowIso();\n memory.task.currentStepId = undefined;\n}\n\nexport function failStep(memory: AgentMemory, step: AgentStep, summary: string): void {\n finishStep(memory, step, \"failed\", summary);\n}\n\nexport function finalizeTask(\n memory: AgentMemory,\n nextStatus: Extract<AgentTaskStatus, \"waiting\" | \"done\" | \"blocked\" | \"failed\">,\n stopReason?: string\n): void {\n assertTaskTransition(memory.task.status, nextStatus);\n memory.task.status = nextStatus;\n memory.task.stopReason = stopReason;\n}\n\n/**\n * Resumes one waiting task after the user supplies the missing clarification.\n * Example: `waiting -> active` keeps the same task id while clearing the prior stop reason.\n */\nexport function resumeTask(memory: AgentMemory): void {\n assertTaskTransition(memory.task.status, \"active\");\n memory.task.status = \"active\";\n memory.task.stopReason = undefined;\n}\n\n/**\n * Moves one task into the shared waiting state before the loop returns to the user.\n * Example: `active -> waiting` records that one concrete clarification is still needed.\n */\nexport function setWaitingTask(memory: AgentMemory, stopReason = \"need-user-input\"): void {\n finalizeTask(memory, \"waiting\", stopReason);\n}\n\nexport function requestReplan(memory: AgentMemory): AgentStep | undefined {\n if (memory.steps.some((candidate) => candidate.status === \"pending\" && candidate.action === \"plan\")) {\n return undefined;\n }\n return createRuntimeStep(\n memory,\n \"plan\",\n \"Adjust the next steps using the latest evidence.\",\n {},\n [\"revised plan\"]\n );\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { nowIso } from "../evidence/index.js";
|
|
2
|
+
let nextSessionId = 1;
|
|
3
|
+
let nextTaskId = 1;
|
|
4
|
+
export function createAgentMemory(query, repoRootPath, executionPath) {
|
|
5
|
+
const startedAt = nowIso();
|
|
6
|
+
const sessionId = nextSessionId++;
|
|
7
|
+
const taskId = nextTaskId++;
|
|
8
|
+
return {
|
|
9
|
+
session: {
|
|
10
|
+
id: sessionId,
|
|
11
|
+
runtime: "agent",
|
|
12
|
+
startedAt,
|
|
13
|
+
repoRootPath,
|
|
14
|
+
executionPath,
|
|
15
|
+
initialQuery: query,
|
|
16
|
+
},
|
|
17
|
+
task: {
|
|
18
|
+
id: taskId,
|
|
19
|
+
mode: "ask",
|
|
20
|
+
initialQuery: query,
|
|
21
|
+
normalizedQuery: query,
|
|
22
|
+
status: "active",
|
|
23
|
+
primaryIntent: "Understand and answer the user's request.",
|
|
24
|
+
alternativeIntents: [],
|
|
25
|
+
searchTermGroups: [],
|
|
26
|
+
ambiguityFlags: [],
|
|
27
|
+
queryScope: "general",
|
|
28
|
+
explicitTargets: [],
|
|
29
|
+
explicitTargetOverrides: {},
|
|
30
|
+
hardFileTargets: [],
|
|
31
|
+
softHints: [],
|
|
32
|
+
constraints: [],
|
|
33
|
+
turnCount: 0,
|
|
34
|
+
replanCount: 0,
|
|
35
|
+
maxTurns: 12,
|
|
36
|
+
},
|
|
37
|
+
steps: [],
|
|
38
|
+
evidence: {
|
|
39
|
+
candidateFiles: [],
|
|
40
|
+
candidateMetadata: {},
|
|
41
|
+
targetResolutions: {},
|
|
42
|
+
searches: [],
|
|
43
|
+
fileReads: {},
|
|
44
|
+
notes: [],
|
|
45
|
+
},
|
|
46
|
+
artifacts: {
|
|
47
|
+
plans: [],
|
|
48
|
+
actionResults: {},
|
|
49
|
+
transform: {
|
|
50
|
+
files: {},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
events: [],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/agent/state/memory.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,YAAoB,EAAE,aAAqB;IAC1F,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO;QACL,OAAO,EAAE;YACP,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,OAAO;YAChB,SAAS;YACT,YAAY;YACZ,aAAa;YACb,YAAY,EAAE,KAAK;SACpB;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,2CAA2C;YAC1D,kBAAkB,EAAE,EAAE;YACtB,gBAAgB,EAAE,EAAE;YACpB,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,SAAS;YACrB,eAAe,EAAE,EAAE;YACnB,uBAAuB,EAAE,EAAE;YAC3B,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,EAAE;SACb;QACD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE;YACR,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,EAAE;YACrB,iBAAiB,EAAE,EAAE;YACrB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;SACV;QACD,SAAS,EAAE;YACT,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE;gBACT,KAAK,EAAE,EAAE;aACV;SACF;QACD,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Creates the in-memory runtime state for the new simple agent.\n *\n * Why this file exists:\n * - runtime state creation should stay separate from loop execution\n * - `memory` is the public shape for the new runtime state\n * - ids and default budgets should stay in one place\n * - transform memory needs one default home from the start\n */\nimport type { AgentMemory } from \"../types.js\";\nimport { nowIso } from \"../evidence/index.js\";\n\nlet nextSessionId = 1;\nlet nextTaskId = 1;\n\nexport function createAgentMemory(query: string, repoRootPath: string, executionPath: string): AgentMemory {\n const startedAt = nowIso();\n const sessionId = nextSessionId++;\n const taskId = nextTaskId++;\n return {\n session: {\n id: sessionId,\n runtime: \"agent\",\n startedAt,\n repoRootPath,\n executionPath,\n initialQuery: query,\n },\n task: {\n id: taskId,\n mode: \"ask\",\n initialQuery: query,\n normalizedQuery: query,\n status: \"active\",\n primaryIntent: \"Understand and answer the user's request.\",\n alternativeIntents: [],\n searchTermGroups: [],\n ambiguityFlags: [],\n queryScope: \"general\",\n explicitTargets: [],\n explicitTargetOverrides: {},\n hardFileTargets: [],\n softHints: [],\n constraints: [],\n turnCount: 0,\n replanCount: 0,\n maxTurns: 12,\n },\n steps: [],\n evidence: {\n candidateFiles: [],\n candidateMetadata: {},\n targetResolutions: {},\n searches: [],\n fileReads: {},\n notes: [],\n },\n artifacts: {\n plans: [],\n actionResults: {},\n transform: {\n files: {},\n },\n },\n events: [],\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function parseStructuredJsonResult(raw, options) {
|
|
2
|
+
const trimmed = raw.trim();
|
|
3
|
+
const fenced = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
4
|
+
const candidate = fenced?.[1]?.trim() || trimmed;
|
|
5
|
+
try {
|
|
6
|
+
return {
|
|
7
|
+
value: JSON.parse(candidate),
|
|
8
|
+
meta: {
|
|
9
|
+
usedFallback: false,
|
|
10
|
+
candidateSource: fenced ? "fenced" : "plain",
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return {
|
|
16
|
+
value: options.fallback,
|
|
17
|
+
meta: {
|
|
18
|
+
usedFallback: true,
|
|
19
|
+
candidateSource: fenced ? "fenced" : "plain",
|
|
20
|
+
parseError: error instanceof Error ? error.message : String(error),
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function parseStructuredJson(raw, options) {
|
|
26
|
+
return parseStructuredJsonResult(raw, options).value;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/structuredOutput/index.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,yBAAyB,CAAI,GAAW,EAAE,OAAwB;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAM;YACjC,IAAI,EAAE;gBACJ,YAAY,EAAE,KAAK;gBACnB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;aAC7C;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;gBAC5C,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACnE;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,GAAW,EAAE,OAAwB;IAC1E,OAAO,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC","sourcesContent":["/**\n * Owns shared structured output parsing for new-agent model calls.\n *\n * Why this file exists:\n * - model output parsing should stay separate from prompt building\n * - fenced JSON fallback should not live inside one action-specific prompt file\n * - new-agent call sites should share one small parser under one owner\n */\nexport interface StructuredJsonParseMeta {\n usedFallback: boolean;\n candidateSource: \"plain\" | \"fenced\";\n parseError?: string;\n}\n\nexport interface StructuredJsonParseResult<T> {\n value: T;\n meta: StructuredJsonParseMeta;\n}\n\nexport function parseStructuredJsonResult<T>(raw: string, options: { fallback: T }): StructuredJsonParseResult<T> {\n const trimmed = raw.trim();\n const fenced = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n const candidate = fenced?.[1]?.trim() || trimmed;\n try {\n return {\n value: JSON.parse(candidate) as T,\n meta: {\n usedFallback: false,\n candidateSource: fenced ? \"fenced\" : \"plain\",\n },\n };\n } catch (error) {\n return {\n value: options.fallback,\n meta: {\n usedFallback: true,\n candidateSource: fenced ? \"fenced\" : \"plain\",\n parseError: error instanceof Error ? error.message : String(error),\n },\n };\n }\n}\n\nexport function parseStructuredJson<T>(raw: string, options: { fallback: T }): T {\n return parseStructuredJsonResult(raw, options).value;\n}\n"]}
|