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
package/dist/index.js
CHANGED
|
@@ -1,34 +1,203 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Starts the SCAI CLI in shell mode or command mode.
|
|
4
|
+
*
|
|
5
|
+
* Why this file exists:
|
|
6
|
+
* - it owns the top-level shell loop and command boot path
|
|
7
|
+
* - shell shortcuts like `/resume` should stay aligned with the public CLI commands
|
|
8
|
+
* - shell command UX like `/resume` should stay friendly and consistent in one place
|
|
9
|
+
* - shell mode controls like `/cancel` should stay shallow and not touch task state
|
|
10
|
+
* - query routing here should stay thin and delegate real work to the shared ask pipeline
|
|
11
|
+
*/
|
|
2
12
|
import { spawn } from 'child_process';
|
|
3
13
|
import { createRequire } from 'module';
|
|
4
14
|
import fs from 'fs';
|
|
5
15
|
import os from 'os';
|
|
6
16
|
import path from 'path';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
7
18
|
import chalk from 'chalk';
|
|
8
19
|
const require = createRequire(import.meta.url);
|
|
9
20
|
const shellQuote = require('shell-quote');
|
|
10
21
|
import { createProgram as cmdFactory } from './commands/factory.js';
|
|
22
|
+
import { isDevCommandsEnabled } from './commands/commandVisibility.js';
|
|
23
|
+
import { registerEvalShellCommands } from './commands/evalCommands.js';
|
|
11
24
|
import enquirer from 'enquirer';
|
|
12
25
|
import { runQueryWithDaemonControl } from './utils/runQueryWithDaemonControl.js';
|
|
13
|
-
import { RUN_LOG_PATH } from './constants.js';
|
|
14
26
|
import { registerTestingCommands } from './testing/testCommands.js';
|
|
27
|
+
import { resumeTaskCommand } from './commands/TasksCmd.js';
|
|
28
|
+
import { clearRuntimeLogs } from './utils/runtimeLogger.js';
|
|
29
|
+
import { buildShellAgentRunOptions, buildShellPromptLabel, cancelShellInputMode, clearShellInputMode, clearShellTaskBinding, getAwaitingAgentDialog, printShellCurrentContext, setShellInputMode, updateShellTaskBindingFromAgentMemory, } from './shellSession.js';
|
|
30
|
+
import { buildDialogDisplayLines, normalizeShellDialogReply, resolveShellInputKind } from './shell/dialogUi.js';
|
|
15
31
|
const { prompt } = enquirer;
|
|
16
32
|
const program = cmdFactory();
|
|
33
|
+
const enableDevTestCommands = isDevCommandsEnabled();
|
|
17
34
|
const customCommands = {};
|
|
35
|
+
const shellSession = { inputMode: 'normal' };
|
|
18
36
|
// ---------------- Run Query with Daemon Control ----------------
|
|
19
|
-
async function runQuery(query) {
|
|
20
|
-
await runQueryWithDaemonControl(query);
|
|
37
|
+
async function runQuery(query, options) {
|
|
38
|
+
await runQueryWithDaemonControl(query, options);
|
|
39
|
+
}
|
|
40
|
+
function isAgentMemory(memory) {
|
|
41
|
+
return !!memory && typeof memory === "object" && "session" in memory && "events" in memory && "steps" in memory;
|
|
42
|
+
}
|
|
43
|
+
function bindShellResult(result) {
|
|
44
|
+
if (isAgentMemory(result)) {
|
|
45
|
+
updateShellTaskBindingFromAgentMemory(shellSession, result);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function runShellAgentQuery(query) {
|
|
49
|
+
const trimmed = query.trim();
|
|
50
|
+
const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, false));
|
|
51
|
+
bindShellResult(memory);
|
|
52
|
+
clearShellInputMode(shellSession);
|
|
53
|
+
}
|
|
54
|
+
async function runShellAgentResumeQuery(query) {
|
|
55
|
+
const trimmed = query.trim();
|
|
56
|
+
if (!trimmed) {
|
|
57
|
+
console.log(chalk.yellow(buildResumeHelpText()));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!shellSession.agentMemory) {
|
|
61
|
+
console.log(chalk.yellow('No current task to resume.'));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, true));
|
|
65
|
+
bindShellResult(memory);
|
|
66
|
+
clearShellInputMode(shellSession);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parses one slash command while keeping the original free-text tail intact.
|
|
70
|
+
*
|
|
71
|
+
* Why this helper exists:
|
|
72
|
+
* - shell-quote token parsing is useful for command dispatch
|
|
73
|
+
* - free-text query commands like `/resume` must keep punctuation exactly as typed
|
|
74
|
+
* - raw tails and tokenized args should be derived once in one place
|
|
75
|
+
*/
|
|
76
|
+
export function parseSlashCommand(trimmed) {
|
|
77
|
+
const withoutSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
|
|
78
|
+
const parsed = shellQuote
|
|
79
|
+
.parse(withoutSlash)
|
|
80
|
+
.map((tok) => typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok))
|
|
81
|
+
.filter(Boolean);
|
|
82
|
+
const cmdName = String(parsed[0] ?? '');
|
|
83
|
+
const rawArgs = cmdName
|
|
84
|
+
? withoutSlash.slice(cmdName.length).trim()
|
|
85
|
+
: '';
|
|
86
|
+
return {
|
|
87
|
+
cmdName,
|
|
88
|
+
argvParts: parsed,
|
|
89
|
+
rawArgs,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export function buildResumeHelpText() {
|
|
93
|
+
return [
|
|
94
|
+
'/resume continue the current task by prompting for the next query',
|
|
95
|
+
'/resume <query> continue the current task immediately',
|
|
96
|
+
'/resume --help show resume command help',
|
|
97
|
+
].join('\n');
|
|
98
|
+
}
|
|
99
|
+
export function resolveResumeCommandAction(rawArgs, hasCurrentTask) {
|
|
100
|
+
const trimmed = rawArgs.trim();
|
|
101
|
+
if (!trimmed) {
|
|
102
|
+
return hasCurrentTask ? { kind: 'enter-input-mode' } : { kind: 'missing-context' };
|
|
103
|
+
}
|
|
104
|
+
if (trimmed === '--help' || trimmed === '-h') {
|
|
105
|
+
return { kind: 'show-help' };
|
|
106
|
+
}
|
|
107
|
+
return hasCurrentTask
|
|
108
|
+
? { kind: 'run-query', query: trimmed }
|
|
109
|
+
: { kind: 'missing-context' };
|
|
110
|
+
}
|
|
111
|
+
function extractTaskResumeQuery(rawArgs) {
|
|
112
|
+
const trimmed = rawArgs.trim();
|
|
113
|
+
if (!trimmed) {
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
const parts = trimmed.split(/\s+/);
|
|
117
|
+
if (parts[0] !== 'resume') {
|
|
118
|
+
return '';
|
|
119
|
+
}
|
|
120
|
+
if (parts.length < 2) {
|
|
121
|
+
return '';
|
|
122
|
+
}
|
|
123
|
+
return trimmed.slice(`resume ${parts[1]}`.length).trim();
|
|
124
|
+
}
|
|
125
|
+
async function runShellPlanQuery(query) {
|
|
126
|
+
const trimmed = query.trim();
|
|
127
|
+
if (!trimmed) {
|
|
128
|
+
throw new Error('Usage: /plan <query>');
|
|
129
|
+
}
|
|
130
|
+
await runQueryWithDaemonControl(trimmed, {
|
|
131
|
+
continueCurrentTask: false,
|
|
132
|
+
bindAsCurrentTask: false,
|
|
133
|
+
planOnly: true,
|
|
134
|
+
});
|
|
135
|
+
clearShellInputMode(shellSession);
|
|
136
|
+
}
|
|
137
|
+
async function handleResumeShellCommand(rawArgs) {
|
|
138
|
+
const action = resolveResumeCommandAction(rawArgs, !!shellSession.task);
|
|
139
|
+
switch (action.kind) {
|
|
140
|
+
case 'show-help':
|
|
141
|
+
console.log(chalk.yellow(buildResumeHelpText()));
|
|
142
|
+
return;
|
|
143
|
+
case 'missing-context':
|
|
144
|
+
console.log(chalk.yellow('No current task to resume.'));
|
|
145
|
+
return;
|
|
146
|
+
case 'enter-input-mode':
|
|
147
|
+
setShellInputMode(shellSession, 'resume-query');
|
|
148
|
+
console.log(chalk.yellow(`Resume mode enabled for task ${shellSession.task?.taskId}. Describe what to do next.`));
|
|
149
|
+
return;
|
|
150
|
+
case 'run-query':
|
|
151
|
+
await runShellAgentResumeQuery(action.query);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
21
154
|
}
|
|
22
155
|
// ---------------- Testing Commands ----------------
|
|
23
|
-
|
|
156
|
+
if (enableDevTestCommands) {
|
|
157
|
+
registerEvalShellCommands(customCommands, runQuery);
|
|
158
|
+
registerTestingCommands(customCommands, runQuery);
|
|
159
|
+
}
|
|
24
160
|
// ---------------- Built-in Commands ----------------
|
|
161
|
+
export function buildShellHelpText() {
|
|
162
|
+
const devSection = enableDevTestCommands
|
|
163
|
+
? `\nDev:\n` +
|
|
164
|
+
` /plan [query]\n` +
|
|
165
|
+
` /eval /eval-random /evals /evals-transform /eval-run <id> [id...] /eval-list /eval-report\n` +
|
|
166
|
+
` /tests /test-run <id> /test-list /test-cmd [id]`
|
|
167
|
+
: '';
|
|
168
|
+
return (`${chalk.green('SCAI shell commands')}\n\n` +
|
|
169
|
+
`Query: type normally to continue the current task\n` +
|
|
170
|
+
`Shell: !command\n` +
|
|
171
|
+
`CLI: scai --help\n\n` +
|
|
172
|
+
`Common:\n` +
|
|
173
|
+
` /help\n` +
|
|
174
|
+
` /clear\n` +
|
|
175
|
+
` /cancel\n` +
|
|
176
|
+
` /edit\n` +
|
|
177
|
+
` /resume [query]\n` +
|
|
178
|
+
` /context\n` +
|
|
179
|
+
` /new-context\n` +
|
|
180
|
+
` /task resume <id>\n` +
|
|
181
|
+
` /task show <id>\n` +
|
|
182
|
+
` /task path <id>\n` +
|
|
183
|
+
` /commit` +
|
|
184
|
+
`${devSection}\n`);
|
|
185
|
+
}
|
|
25
186
|
customCommands.clear = async () => {
|
|
26
187
|
// Clear screen and move cursor to top-left
|
|
27
188
|
process.stdout.write('\x1Bc');
|
|
28
189
|
};
|
|
190
|
+
customCommands.cancel = async () => {
|
|
191
|
+
const previousMode = cancelShellInputMode(shellSession);
|
|
192
|
+
if (!previousMode) {
|
|
193
|
+
console.log(chalk.yellow('No active input mode to cancel.'));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
console.log(chalk.yellow(`Cancelled ${previousMode}.`));
|
|
197
|
+
};
|
|
29
198
|
customCommands.help = async () => {
|
|
30
|
-
console.log(
|
|
31
|
-
console.log(
|
|
199
|
+
console.log('');
|
|
200
|
+
console.log(buildShellHelpText());
|
|
32
201
|
};
|
|
33
202
|
customCommands.exit = async () => {
|
|
34
203
|
console.log('Exiting...');
|
|
@@ -36,6 +205,60 @@ customCommands.exit = async () => {
|
|
|
36
205
|
};
|
|
37
206
|
customCommands.q = customCommands.exit;
|
|
38
207
|
customCommands.quit = customCommands.exit;
|
|
208
|
+
function printPromptContextHint() {
|
|
209
|
+
console.log('');
|
|
210
|
+
if (shellSession.inputMode === 'plan-query') {
|
|
211
|
+
console.log(chalk.yellow('Plan mode is waiting for a task description.'));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);
|
|
215
|
+
if (awaitingAgentDialog) {
|
|
216
|
+
for (const line of buildDialogDisplayLines(awaitingAgentDialog)) {
|
|
217
|
+
console.log(chalk.yellow(line));
|
|
218
|
+
}
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (shellSession.task?.dialogState?.status === 'awaiting-user') {
|
|
222
|
+
console.log(chalk.yellow('Reply to the active task dialog, or use /context to inspect it.'));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
console.log(chalk.yellow('/context to inspect, /new-context to clear, type a query to continue'));
|
|
226
|
+
}
|
|
227
|
+
customCommands.context = async () => {
|
|
228
|
+
printShellCurrentContext(shellSession);
|
|
229
|
+
};
|
|
230
|
+
customCommands['new-context'] = async () => {
|
|
231
|
+
await program.parseAsync(['new-context'], { from: 'user' });
|
|
232
|
+
clearShellTaskBinding(shellSession);
|
|
233
|
+
};
|
|
234
|
+
if (enableDevTestCommands) {
|
|
235
|
+
customCommands.plan = async (...args) => {
|
|
236
|
+
const query = args.join(' ').trim();
|
|
237
|
+
if (!query) {
|
|
238
|
+
setShellInputMode(shellSession, 'plan-query');
|
|
239
|
+
console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
await runShellPlanQuery(query);
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
customCommands.resume = async (...args) => {
|
|
246
|
+
await handleResumeShellCommand(args.join(' '));
|
|
247
|
+
};
|
|
248
|
+
customCommands.task = async (...args) => {
|
|
249
|
+
const subcommand = args[0];
|
|
250
|
+
if (subcommand === 'resume') {
|
|
251
|
+
const taskId = Number(args[1]);
|
|
252
|
+
if (!Number.isInteger(taskId)) {
|
|
253
|
+
throw new Error('Usage: /task resume <id> [question]');
|
|
254
|
+
}
|
|
255
|
+
const query = args.slice(2).join(' ').trim();
|
|
256
|
+
const context = await resumeTaskCommand(taskId, query || undefined);
|
|
257
|
+
bindShellResult(context);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
await program.parseAsync(['task', ...args], { from: 'user' });
|
|
261
|
+
};
|
|
39
262
|
// ---------------- Extension API ----------------
|
|
40
263
|
export function registerCommand(name, fn) {
|
|
41
264
|
customCommands[name] = fn;
|
|
@@ -68,29 +291,33 @@ async function startShell() {
|
|
|
68
291
|
// Clear screen first
|
|
69
292
|
process.stdout.write('\x1Bc');
|
|
70
293
|
console.log(chalk.yellow("Welcome to SCAI shell!") + "\n" +
|
|
71
|
-
chalk.blueBright(
|
|
72
|
-
- Use !command to run terminal commands.
|
|
73
|
-
- Use /command for built-in or custom commands.
|
|
74
|
-
- /help
|
|
75
|
-
- /clear
|
|
76
|
-
- /edit for pasting long queries & multi-line input
|
|
77
|
-
- /test, /test-random, /test-evals
|
|
78
|
-
- /git commit\n`));
|
|
294
|
+
chalk.blueBright('Use /help for shell commands'));
|
|
79
295
|
while (true) {
|
|
80
296
|
try {
|
|
297
|
+
printPromptContextHint();
|
|
81
298
|
const { line } = (await prompt({
|
|
82
299
|
type: 'input',
|
|
83
300
|
name: 'line',
|
|
84
|
-
message:
|
|
301
|
+
message: chalk.cyan(buildShellPromptLabel(shellSession)),
|
|
85
302
|
validate: (input) => !!input.trim() || 'Please enter something',
|
|
86
303
|
}));
|
|
87
304
|
const trimmed = line.trim();
|
|
305
|
+
const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);
|
|
306
|
+
const inputKind = resolveShellInputKind(trimmed, awaitingAgentDialog);
|
|
88
307
|
// --- Exit immediately
|
|
89
308
|
if (['exit', 'quit', 'q'].includes(trimmed)) {
|
|
90
309
|
await customCommands.exit();
|
|
91
310
|
}
|
|
311
|
+
if (inputKind === 'dialog-reply' && awaitingAgentDialog) {
|
|
312
|
+
const reply = normalizeShellDialogReply(awaitingAgentDialog, trimmed);
|
|
313
|
+
if (!reply.response.trim()) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
await runShellAgentQuery(reply.response);
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
92
319
|
// --- Shell commands (!)
|
|
93
|
-
if (trimmed.startsWith('!')) {
|
|
320
|
+
if (inputKind === 'shell-command' && trimmed.startsWith('!')) {
|
|
94
321
|
const child = spawn(trimmed.slice(1), {
|
|
95
322
|
shell: true,
|
|
96
323
|
stdio: 'inherit',
|
|
@@ -99,32 +326,60 @@ async function startShell() {
|
|
|
99
326
|
continue;
|
|
100
327
|
}
|
|
101
328
|
// --- Slash commands (/)
|
|
102
|
-
if (trimmed.startsWith('/')) {
|
|
103
|
-
const argvParts =
|
|
104
|
-
.parse(trimmed.slice(1))
|
|
105
|
-
.map((tok) => typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok))
|
|
106
|
-
.filter(Boolean);
|
|
107
|
-
const cmdName = argvParts[0];
|
|
329
|
+
if (inputKind === 'shell-command' && trimmed.startsWith('/')) {
|
|
330
|
+
const { argvParts, cmdName, rawArgs } = parseSlashCommand(trimmed);
|
|
108
331
|
// Special case: open editor
|
|
109
332
|
if (cmdName === 'edit') {
|
|
110
333
|
const content = await editInEditorAsync();
|
|
111
334
|
const trimmedContent = content.trim();
|
|
112
335
|
if (trimmedContent) {
|
|
113
336
|
console.log(chalk.hex('#FFA500')('\n[Editor input]:\n' + trimmedContent + '\n'));
|
|
114
|
-
await
|
|
337
|
+
await runShellAgentQuery(trimmedContent);
|
|
338
|
+
}
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
if (cmdName === 'resume') {
|
|
342
|
+
await handleResumeShellCommand(rawArgs);
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
if (enableDevTestCommands && cmdName === 'plan') {
|
|
346
|
+
if (!rawArgs) {
|
|
347
|
+
setShellInputMode(shellSession, 'plan-query');
|
|
348
|
+
console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
await runShellPlanQuery(rawArgs);
|
|
115
352
|
}
|
|
116
353
|
continue;
|
|
117
354
|
}
|
|
355
|
+
if (cmdName === 'task' && String(argvParts[1] ?? '') === 'resume') {
|
|
356
|
+
const taskId = Number(argvParts[2]);
|
|
357
|
+
if (!Number.isInteger(taskId)) {
|
|
358
|
+
throw new Error('Usage: /task resume <id> [question]');
|
|
359
|
+
}
|
|
360
|
+
const query = extractTaskResumeQuery(rawArgs);
|
|
361
|
+
const context = await resumeTaskCommand(taskId, query || undefined);
|
|
362
|
+
bindShellResult(context);
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
118
365
|
if (customCommands[cmdName]) {
|
|
119
|
-
await customCommands[cmdName]();
|
|
366
|
+
await customCommands[cmdName](...argvParts.slice(1));
|
|
120
367
|
}
|
|
121
368
|
else {
|
|
122
369
|
await program.parseAsync(argvParts, { from: 'user' });
|
|
123
370
|
}
|
|
124
371
|
continue;
|
|
125
372
|
}
|
|
373
|
+
if (shellSession.inputMode === 'plan-query') {
|
|
374
|
+
await runShellPlanQuery(trimmed);
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
if (shellSession.inputMode === 'resume-query') {
|
|
378
|
+
await runShellAgentResumeQuery(trimmed);
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
126
381
|
// --- Otherwise → treat as normal query
|
|
127
|
-
await
|
|
382
|
+
await runShellAgentQuery(trimmed);
|
|
128
383
|
}
|
|
129
384
|
catch (err) {
|
|
130
385
|
console.error('REPL error:', err instanceof Error ? err.stack : err);
|
|
@@ -132,8 +387,18 @@ async function startShell() {
|
|
|
132
387
|
}
|
|
133
388
|
}
|
|
134
389
|
function initRunLog() {
|
|
135
|
-
|
|
136
|
-
|
|
390
|
+
clearRuntimeLogs();
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Decides if CLI startup should auto-check or auto-start Ollama.
|
|
394
|
+
*
|
|
395
|
+
* Example:
|
|
396
|
+
* - ["model", "status"] -> false because the model command owns its own output
|
|
397
|
+
* - ["setup"] -> false because setup owns its own model bootstrap
|
|
398
|
+
* - ["find", "query"] -> true because normal command flow still wants the model gate
|
|
399
|
+
*/
|
|
400
|
+
export function shouldAutoStartModel(args) {
|
|
401
|
+
return args[0] !== 'model' && args[0] !== 'setup' && args[0] !== 'init';
|
|
137
402
|
}
|
|
138
403
|
// ---------------- Main ----------------
|
|
139
404
|
async function main() {
|
|
@@ -144,18 +409,20 @@ async function main() {
|
|
|
144
409
|
console.error('Uncaught Exception:', err.stack ?? err);
|
|
145
410
|
process.exit(1);
|
|
146
411
|
});
|
|
147
|
-
// ---------------- Start Model Once ----------------
|
|
148
|
-
try {
|
|
149
|
-
const { startModelProcess } = await import('./utils/checkModel.js');
|
|
150
|
-
await startModelProcess(); // 🔒 ensures only one startup
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
console.error('❌ Failed to start model process:', err);
|
|
154
|
-
process.exit(1);
|
|
155
|
-
}
|
|
156
412
|
// ---------------- Determine CLI Mode ----------------
|
|
157
413
|
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
158
414
|
const args = process.argv.slice(2);
|
|
415
|
+
// ---------------- Start Model Once ----------------
|
|
416
|
+
if (shouldAutoStartModel(args)) {
|
|
417
|
+
try {
|
|
418
|
+
const { startModelProcess } = await import('./utils/checkModel.js');
|
|
419
|
+
await startModelProcess(); // 🔒 ensures only one startup
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
console.error('❌ Failed to start the Ollama server:', err instanceof Error ? err.message : err);
|
|
423
|
+
process.exit(1);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
159
426
|
if (isInteractive && (args.length === 0 || (args.length === 1 && args[0] === 'shell'))) {
|
|
160
427
|
await startShell(); // REPL mode
|
|
161
428
|
return;
|
|
@@ -163,4 +430,18 @@ async function main() {
|
|
|
163
430
|
// ---------------- Non-interactive / command mode ----------------
|
|
164
431
|
await program.parseAsync(process.argv);
|
|
165
432
|
}
|
|
166
|
-
|
|
433
|
+
function isMainEntrypoint() {
|
|
434
|
+
if (!process.argv[1]) {
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
try {
|
|
438
|
+
return fs.realpathSync(process.argv[1]) === fs.realpathSync(fileURLToPath(import.meta.url));
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
return path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (isMainEntrypoint()) {
|
|
445
|
+
main();
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Starts the SCAI CLI in shell mode or command mode.\n *\n * Why this file exists:\n * - it owns the top-level shell loop and command boot path\n * - shell shortcuts like `/resume` should stay aligned with the public CLI commands\n * - shell command UX like `/resume` should stay friendly and consistent in one place\n * - shell mode controls like `/cancel` should stay shallow and not touch task state\n * - query routing here should stay thin and delegate real work to the shared ask pipeline\n */\nimport { spawn } from 'child_process';\nimport { createRequire } from 'module';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport chalk from 'chalk';\nconst require = createRequire(import.meta.url);\nconst shellQuote = require('shell-quote');\n\nimport { createProgram as cmdFactory } from './commands/factory.js';\nimport { isDevCommandsEnabled } from './commands/commandVisibility.js';\nimport { registerEvalShellCommands } from './commands/evalCommands.js';\nimport enquirer from 'enquirer';\nimport { runQueryWithDaemonControl } from './utils/runQueryWithDaemonControl.js';\nimport { registerTestingCommands } from './testing/testCommands.js';\nimport { resumeTaskCommand } from './commands/TasksCmd.js';\nimport { clearRuntimeLogs } from './utils/runtimeLogger.js';\nimport {\n buildShellAgentRunOptions,\n buildShellPromptLabel,\n cancelShellInputMode,\n clearShellInputMode,\n clearShellTaskBinding,\n getAwaitingAgentDialog,\n printShellCurrentContext,\n setShellInputMode,\n type ShellSessionState,\n updateShellTaskBindingFromAgentMemory,\n} from './shellSession.js';\nimport { buildDialogDisplayLines, normalizeShellDialogReply, resolveShellInputKind } from './shell/dialogUi.js';\nimport type { AgentMemory } from './agents/agentTypes.js';\n\nconst { prompt } = enquirer;\n\nconst program = cmdFactory();\nconst enableDevTestCommands = isDevCommandsEnabled();\n\n// ---------------- Command Registry ----------------\ntype CommandFn = (...args: string[]) => Promise<void>;\nconst customCommands: Record<string, CommandFn> = {};\n\nconst shellSession: ShellSessionState = { inputMode: 'normal' };\n\ntype ParsedSlashCommand = {\n cmdName: string;\n argvParts: string[];\n rawArgs: string;\n};\n\ntype ResumeCommandAction =\n | { kind: 'show-help' }\n | { kind: 'missing-context' }\n | { kind: 'enter-input-mode' }\n | { kind: 'run-query'; query: string };\n\n// ---------------- Run Query with Daemon Control ----------------\nasync function runQuery(\n query: string,\n options?: {\n resumeTaskId?: number;\n continueCurrentTask?: boolean;\n bindAsCurrentTask?: boolean;\n runtime?: \"agent\";\n agentMemory?: AgentMemory;\n planOnly?: boolean;\n }\n) {\n await runQueryWithDaemonControl(query, options);\n}\n\nfunction isAgentMemory(memory: unknown): memory is AgentMemory {\n return !!memory && typeof memory === \"object\" && \"session\" in memory && \"events\" in memory && \"steps\" in memory;\n}\n\nfunction bindShellResult(result: AgentMemory | undefined): void {\n if (isAgentMemory(result)) {\n updateShellTaskBindingFromAgentMemory(shellSession, result);\n }\n}\n\nasync function runShellAgentQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, false));\n bindShellResult(memory);\n clearShellInputMode(shellSession);\n}\n\nasync function runShellAgentResumeQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n if (!trimmed) {\n console.log(chalk.yellow(buildResumeHelpText()));\n return;\n }\n if (!shellSession.agentMemory) {\n console.log(chalk.yellow('No current task to resume.'));\n return;\n }\n const memory = await runQueryWithDaemonControl(trimmed, buildShellAgentRunOptions(shellSession, true));\n bindShellResult(memory);\n clearShellInputMode(shellSession);\n}\n\n/**\n * Parses one slash command while keeping the original free-text tail intact.\n *\n * Why this helper exists:\n * - shell-quote token parsing is useful for command dispatch\n * - free-text query commands like `/resume` must keep punctuation exactly as typed\n * - raw tails and tokenized args should be derived once in one place\n */\nexport function parseSlashCommand(trimmed: string): ParsedSlashCommand {\n const withoutSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;\n const parsed = shellQuote\n .parse(withoutSlash)\n .map((tok: any) =>\n typeof tok === 'object' ? tok.op ?? tok.pattern ?? '' : String(tok)\n )\n .filter(Boolean);\n const cmdName = String(parsed[0] ?? '');\n const rawArgs = cmdName\n ? withoutSlash.slice(cmdName.length).trim()\n : '';\n return {\n cmdName,\n argvParts: parsed,\n rawArgs,\n };\n}\n\nexport function buildResumeHelpText(): string {\n return [\n '/resume continue the current task by prompting for the next query',\n '/resume <query> continue the current task immediately',\n '/resume --help show resume command help',\n ].join('\\n');\n}\n\nexport function resolveResumeCommandAction(\n rawArgs: string,\n hasCurrentTask: boolean\n): ResumeCommandAction {\n const trimmed = rawArgs.trim();\n if (!trimmed) {\n return hasCurrentTask ? { kind: 'enter-input-mode' } : { kind: 'missing-context' };\n }\n if (trimmed === '--help' || trimmed === '-h') {\n return { kind: 'show-help' };\n }\n return hasCurrentTask\n ? { kind: 'run-query', query: trimmed }\n : { kind: 'missing-context' };\n}\n\nfunction extractTaskResumeQuery(rawArgs: string): string {\n const trimmed = rawArgs.trim();\n if (!trimmed) {\n return '';\n }\n const parts = trimmed.split(/\\s+/);\n if (parts[0] !== 'resume') {\n return '';\n }\n if (parts.length < 2) {\n return '';\n }\n return trimmed.slice(`resume ${parts[1]}`.length).trim();\n}\n\nasync function runShellPlanQuery(query: string): Promise<void> {\n const trimmed = query.trim();\n if (!trimmed) {\n throw new Error('Usage: /plan <query>');\n }\n await runQueryWithDaemonControl(trimmed, {\n continueCurrentTask: false,\n bindAsCurrentTask: false,\n planOnly: true,\n });\n clearShellInputMode(shellSession);\n}\n\nasync function handleResumeShellCommand(rawArgs: string): Promise<void> {\n const action = resolveResumeCommandAction(rawArgs, !!shellSession.task);\n switch (action.kind) {\n case 'show-help':\n console.log(chalk.yellow(buildResumeHelpText()));\n return;\n case 'missing-context':\n console.log(chalk.yellow('No current task to resume.'));\n return;\n case 'enter-input-mode':\n setShellInputMode(shellSession, 'resume-query');\n console.log(chalk.yellow(`Resume mode enabled for task ${shellSession.task?.taskId}. Describe what to do next.`));\n return;\n case 'run-query':\n await runShellAgentResumeQuery(action.query);\n return;\n }\n}\n\n// ---------------- Testing Commands ----------------\nif (enableDevTestCommands) {\n registerEvalShellCommands(customCommands, runQuery);\n registerTestingCommands(customCommands, runQuery);\n}\n\n// ---------------- Built-in Commands ----------------\nexport function buildShellHelpText(): string {\n const devSection = enableDevTestCommands\n ? `\\nDev:\\n` +\n ` /plan [query]\\n` +\n ` /eval /eval-random /evals /evals-transform /eval-run <id> [id...] /eval-list /eval-report\\n` +\n ` /tests /test-run <id> /test-list /test-cmd [id]`\n : '';\n\n return (\n `${chalk.green('SCAI shell commands')}\\n\\n` +\n `Query: type normally to continue the current task\\n` +\n `Shell: !command\\n` +\n `CLI: scai --help\\n\\n` +\n `Common:\\n` +\n ` /help\\n` +\n ` /clear\\n` +\n ` /cancel\\n` +\n ` /edit\\n` +\n ` /resume [query]\\n` +\n ` /context\\n` +\n ` /new-context\\n` +\n ` /task resume <id>\\n` +\n ` /task show <id>\\n` +\n ` /task path <id>\\n` +\n ` /commit` +\n `${devSection}\\n`\n );\n}\n\ncustomCommands.clear = async () => {\n // Clear screen and move cursor to top-left\n process.stdout.write('\\x1Bc');\n};\n\ncustomCommands.cancel = async () => {\n const previousMode = cancelShellInputMode(shellSession);\n if (!previousMode) {\n console.log(chalk.yellow('No active input mode to cancel.'));\n return;\n }\n console.log(chalk.yellow(`Cancelled ${previousMode}.`));\n};\n\ncustomCommands.help = async () => {\n console.log('');\n console.log(buildShellHelpText());\n};\n\ncustomCommands.exit = async () => {\n console.log('Exiting...');\n process.exit(0);\n};\n\ncustomCommands.q = customCommands.exit;\ncustomCommands.quit = customCommands.exit;\n\nfunction printPromptContextHint(): void {\n console.log('');\n if (shellSession.inputMode === 'plan-query') {\n console.log(chalk.yellow('Plan mode is waiting for a task description.'));\n return;\n }\n const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);\n if (awaitingAgentDialog) {\n for (const line of buildDialogDisplayLines(awaitingAgentDialog)) {\n console.log(chalk.yellow(line));\n }\n return;\n }\n if (shellSession.task?.dialogState?.status === 'awaiting-user') {\n console.log(chalk.yellow('Reply to the active task dialog, or use /context to inspect it.'));\n return;\n }\n console.log(chalk.yellow('/context to inspect, /new-context to clear, type a query to continue'));\n}\n\ncustomCommands.context = async () => {\n printShellCurrentContext(shellSession);\n};\n\ncustomCommands['new-context'] = async () => {\n await program.parseAsync(['new-context'], { from: 'user' });\n clearShellTaskBinding(shellSession);\n};\n\nif (enableDevTestCommands) {\n customCommands.plan = async (...args: string[]) => {\n const query = args.join(' ').trim();\n if (!query) {\n setShellInputMode(shellSession, 'plan-query');\n console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));\n return;\n }\n await runShellPlanQuery(query);\n };\n}\n\ncustomCommands.resume = async (...args: string[]) => {\n await handleResumeShellCommand(args.join(' '));\n};\n\ncustomCommands.task = async (...args: string[]) => {\n const subcommand = args[0];\n if (subcommand === 'resume') {\n const taskId = Number(args[1]);\n if (!Number.isInteger(taskId)) {\n throw new Error('Usage: /task resume <id> [question]');\n }\n const query = args.slice(2).join(' ').trim();\n const context = await resumeTaskCommand(taskId, query || undefined);\n bindShellResult(context);\n return;\n }\n\n await program.parseAsync(['task', ...args], { from: 'user' });\n};\n\n// ---------------- Extension API ----------------\nexport function registerCommand(name: string, fn: CommandFn) {\n customCommands[name] = fn;\n}\n\n// ---------------- Editor Helper ----------------\nfunction editInEditorAsync(initialContent = ''): Promise<string> {\n return new Promise((resolve, reject) => {\n const tmpFile = path.join(os.tmpdir(), `scai_input_${Date.now()}.txt`);\n fs.writeFileSync(tmpFile, initialContent);\n\n const editor = process.env.EDITOR || 'vi';\n const child = spawn(editor, [tmpFile], { stdio: 'inherit' });\n\n child.on('exit', (code) => {\n try {\n const content = fs.readFileSync(tmpFile, 'utf-8');\n fs.unlinkSync(tmpFile);\n resolve(content);\n } catch (err) {\n reject(err);\n }\n });\n\n child.on('error', (err) => reject(err));\n });\n}\n\n\n// ---------------- REPL / Shell ----------------\n// The startShell function initializes an interactive shell for the CLI.\n// It allows users to input queries directly, use built-in commands with '/',\n// run terminal commands with '!', or edit input in an external editor with '/edit'.\nasync function startShell() {\n // Clear screen first\n process.stdout.write('\\x1Bc');\n\n console.log(\n chalk.yellow(\"Welcome to SCAI shell!\") + \"\\n\" +\n chalk.blueBright('Use /help for shell commands')\n );\n\n while (true) {\n try {\n printPromptContextHint();\n const { line } = (await prompt({\n type: 'input',\n name: 'line',\n message: chalk.cyan(buildShellPromptLabel(shellSession)),\n validate: (input: string) =>\n !!input.trim() || 'Please enter something',\n })) as { line: string };\n\n const trimmed = line.trim();\n const awaitingAgentDialog = getAwaitingAgentDialog(shellSession);\n const inputKind = resolveShellInputKind(trimmed, awaitingAgentDialog);\n\n // --- Exit immediately\n if (['exit', 'quit', 'q'].includes(trimmed)) {\n await customCommands.exit();\n }\n\n if (inputKind === 'dialog-reply' && awaitingAgentDialog) {\n const reply = normalizeShellDialogReply(awaitingAgentDialog, trimmed);\n if (!reply.response.trim()) {\n continue;\n }\n await runShellAgentQuery(reply.response);\n continue;\n }\n\n // --- Shell commands (!)\n if (inputKind === 'shell-command' && trimmed.startsWith('!')) {\n const child = spawn(trimmed.slice(1), {\n shell: true,\n stdio: 'inherit',\n });\n await new Promise((resolve) => child.on('exit', resolve));\n continue;\n }\n\n // --- Slash commands (/)\n if (inputKind === 'shell-command' && trimmed.startsWith('/')) {\n const { argvParts, cmdName, rawArgs } = parseSlashCommand(trimmed);\n\n // Special case: open editor\n if (cmdName === 'edit') {\n const content = await editInEditorAsync();\n const trimmedContent = content.trim();\n if (trimmedContent) {\n console.log(chalk.hex('#FFA500')('\\n[Editor input]:\\n' + trimmedContent + '\\n'));\n await runShellAgentQuery(trimmedContent);\n }\n continue;\n }\n\n if (cmdName === 'resume') {\n await handleResumeShellCommand(rawArgs);\n continue;\n }\n\n if (enableDevTestCommands && cmdName === 'plan') {\n if (!rawArgs) {\n setShellInputMode(shellSession, 'plan-query');\n console.log(chalk.yellow('Plan mode enabled. Describe the task you want planned.'));\n } else {\n await runShellPlanQuery(rawArgs);\n }\n continue;\n }\n\n if (cmdName === 'task' && String(argvParts[1] ?? '') === 'resume') {\n const taskId = Number(argvParts[2]);\n if (!Number.isInteger(taskId)) {\n throw new Error('Usage: /task resume <id> [question]');\n }\n const query = extractTaskResumeQuery(rawArgs);\n const context = await resumeTaskCommand(taskId, query || undefined);\n bindShellResult(context);\n continue;\n }\n\n if (customCommands[cmdName]) {\n await customCommands[cmdName](...argvParts.slice(1));\n } else {\n await program.parseAsync(argvParts, { from: 'user' });\n }\n continue;\n }\n\n if (shellSession.inputMode === 'plan-query') {\n await runShellPlanQuery(trimmed);\n continue;\n }\n\n if (shellSession.inputMode === 'resume-query') {\n await runShellAgentResumeQuery(trimmed);\n continue;\n }\n\n // --- Otherwise → treat as normal query\n await runShellAgentQuery(trimmed);\n\n } catch (err) {\n console.error('REPL error:', err instanceof Error ? err.stack : err);\n }\n }\n}\n\nfunction initRunLog() {\n clearRuntimeLogs();\n}\n\n/**\n * Decides if CLI startup should auto-check or auto-start Ollama.\n *\n * Example:\n * - [\"model\", \"status\"] -> false because the model command owns its own output\n * - [\"setup\"] -> false because setup owns its own model bootstrap\n * - [\"find\", \"query\"] -> true because normal command flow still wants the model gate\n */\nexport function shouldAutoStartModel(args: string[]): boolean {\n return args[0] !== 'model' && args[0] !== 'setup' && args[0] !== 'init';\n}\n\n// ---------------- Main ----------------\nasync function main() {\n initRunLog();\n\n // ---------------- Global Error Handlers ----------------\n process.on('unhandledRejection', (reason) =>\n console.error('Unhandled Rejection:', reason)\n );\n\n process.on('uncaughtException', (err) => {\n console.error('Uncaught Exception:', err.stack ?? err);\n process.exit(1);\n });\n\n // ---------------- Determine CLI Mode ----------------\n const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n const args = process.argv.slice(2);\n\n // ---------------- Start Model Once ----------------\n if (shouldAutoStartModel(args)) {\n try {\n const { startModelProcess } = await import('./utils/checkModel.js');\n await startModelProcess(); // 🔒 ensures only one startup\n } catch (err) {\n console.error('❌ Failed to start the Ollama server:', err instanceof Error ? err.message : err);\n process.exit(1);\n }\n }\n\n if (isInteractive && (args.length === 0 || (args.length === 1 && args[0] === 'shell'))) {\n await startShell(); // REPL mode\n return;\n }\n\n // ---------------- Non-interactive / command mode ----------------\n await program.parseAsync(process.argv);\n}\n\nfunction isMainEntrypoint(): boolean {\n if (!process.argv[1]) {\n return false;\n }\n try {\n return fs.realpathSync(process.argv[1]) === fs.realpathSync(fileURLToPath(import.meta.url));\n } catch {\n return path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);\n }\n}\n\nif (isMainEntrypoint()) {\n main();\n}\n"]}
|