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,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds compact staged-change summaries for standalone git commands.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - `scai commit` should stay a direct command pipeline instead of entering the task agent runtime
|
|
6
|
+
* - large staged diffs need a cheap summary path so commit suggestions stay fast
|
|
7
|
+
* - pure parsing, ranking, and truncation helpers here are easy to test and reuse
|
|
8
|
+
*/
|
|
9
|
+
import { execFileSync } from "child_process";
|
|
10
|
+
const DEFAULT_TOP_FILE_COUNT = 5;
|
|
11
|
+
const DEFAULT_SAMPLE_CHARS = 1400;
|
|
12
|
+
function runGit(args) {
|
|
13
|
+
return execFileSync("git", args, {
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
16
|
+
}).trimEnd();
|
|
17
|
+
}
|
|
18
|
+
export function classifyCommitFileCategory(filePath) {
|
|
19
|
+
const lowered = filePath.toLowerCase();
|
|
20
|
+
if (lowered.endsWith(".md") ||
|
|
21
|
+
lowered.endsWith(".txt") ||
|
|
22
|
+
lowered.includes("readme") ||
|
|
23
|
+
lowered.includes("changelog") ||
|
|
24
|
+
lowered.includes("docs/")) {
|
|
25
|
+
return "docs";
|
|
26
|
+
}
|
|
27
|
+
if (lowered.includes("__tests__/") ||
|
|
28
|
+
lowered.includes("/test/") ||
|
|
29
|
+
lowered.includes("/tests/") ||
|
|
30
|
+
lowered.includes(".test.") ||
|
|
31
|
+
lowered.includes(".spec.")) {
|
|
32
|
+
return "tests";
|
|
33
|
+
}
|
|
34
|
+
if (lowered.endsWith("package.json") ||
|
|
35
|
+
lowered.endsWith("tsconfig.json") ||
|
|
36
|
+
lowered.endsWith("vitest.config.ts") ||
|
|
37
|
+
lowered.endsWith("vitest.config.js") ||
|
|
38
|
+
lowered.endsWith(".yml") ||
|
|
39
|
+
lowered.endsWith(".yaml") ||
|
|
40
|
+
lowered.includes("/config") ||
|
|
41
|
+
lowered.includes("schema")) {
|
|
42
|
+
return "config";
|
|
43
|
+
}
|
|
44
|
+
if (lowered.includes("/src/") ||
|
|
45
|
+
lowered.startsWith("src/") ||
|
|
46
|
+
lowered.includes("/server/") ||
|
|
47
|
+
lowered.includes("/cli/") ||
|
|
48
|
+
lowered.endsWith(".ts") ||
|
|
49
|
+
lowered.endsWith(".js") ||
|
|
50
|
+
lowered.endsWith(".tsx") ||
|
|
51
|
+
lowered.endsWith(".jsx")) {
|
|
52
|
+
return "source";
|
|
53
|
+
}
|
|
54
|
+
return "other";
|
|
55
|
+
}
|
|
56
|
+
export function compactPatchSample(patch, maxChars = DEFAULT_SAMPLE_CHARS) {
|
|
57
|
+
const trimmed = patch.trim();
|
|
58
|
+
if (!trimmed)
|
|
59
|
+
return "";
|
|
60
|
+
const interestingLines = trimmed
|
|
61
|
+
.split("\n")
|
|
62
|
+
.filter((line) => {
|
|
63
|
+
return (line.startsWith("diff --git") ||
|
|
64
|
+
line.startsWith("@@") ||
|
|
65
|
+
line.startsWith("+") ||
|
|
66
|
+
line.startsWith("-") ||
|
|
67
|
+
line.startsWith("rename from") ||
|
|
68
|
+
line.startsWith("rename to"));
|
|
69
|
+
})
|
|
70
|
+
.join("\n")
|
|
71
|
+
.trim();
|
|
72
|
+
const effective = interestingLines || trimmed;
|
|
73
|
+
if (effective.length <= maxChars) {
|
|
74
|
+
return effective;
|
|
75
|
+
}
|
|
76
|
+
const headChars = Math.max(200, Math.floor(maxChars * 0.6));
|
|
77
|
+
const tailChars = Math.max(120, maxChars - headChars - 24);
|
|
78
|
+
const compacted = `${effective.slice(0, headChars).trimEnd()}\n...\n${effective.slice(-tailChars).trimStart()}`;
|
|
79
|
+
return compacted.length <= maxChars
|
|
80
|
+
? compacted
|
|
81
|
+
: `${compacted.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;
|
|
82
|
+
}
|
|
83
|
+
export function scoreCommitFile(file) {
|
|
84
|
+
const churn = Math.min(file.added + file.deleted, 200);
|
|
85
|
+
const lowered = file.path.toLowerCase();
|
|
86
|
+
let score = churn;
|
|
87
|
+
switch (file.category) {
|
|
88
|
+
case "source":
|
|
89
|
+
score += 100;
|
|
90
|
+
break;
|
|
91
|
+
case "config":
|
|
92
|
+
score += 80;
|
|
93
|
+
break;
|
|
94
|
+
case "tests":
|
|
95
|
+
score += 50;
|
|
96
|
+
break;
|
|
97
|
+
case "docs":
|
|
98
|
+
score += 25;
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
score += 10;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (lowered.includes("mainagent") || lowered.includes("index.ts") || lowered.includes("factory.ts")) {
|
|
105
|
+
score += 25;
|
|
106
|
+
}
|
|
107
|
+
if (lowered.endsWith("package.json") || lowered.includes("schema")) {
|
|
108
|
+
score += 20;
|
|
109
|
+
}
|
|
110
|
+
if (file.status === "A") {
|
|
111
|
+
score += 10;
|
|
112
|
+
}
|
|
113
|
+
if (file.status === "R") {
|
|
114
|
+
score += 8;
|
|
115
|
+
}
|
|
116
|
+
if (file.status === "D") {
|
|
117
|
+
score -= 5;
|
|
118
|
+
}
|
|
119
|
+
return score;
|
|
120
|
+
}
|
|
121
|
+
export function parseNameStatusEntries(raw) {
|
|
122
|
+
return raw
|
|
123
|
+
.split("\n")
|
|
124
|
+
.map((line) => line.trim())
|
|
125
|
+
.filter(Boolean)
|
|
126
|
+
.map((line) => {
|
|
127
|
+
const parts = line.split("\t");
|
|
128
|
+
const statusToken = String(parts[0] ?? "M").trim();
|
|
129
|
+
const status = statusToken.charAt(0) || "M";
|
|
130
|
+
const path = (status === "R" || status === "C")
|
|
131
|
+
? String(parts[2] ?? parts[1] ?? "").trim()
|
|
132
|
+
: String(parts[1] ?? "").trim();
|
|
133
|
+
return { path, status };
|
|
134
|
+
})
|
|
135
|
+
.filter((entry) => entry.path.length > 0);
|
|
136
|
+
}
|
|
137
|
+
export function parseNumstatEntries(raw) {
|
|
138
|
+
return raw
|
|
139
|
+
.split("\n")
|
|
140
|
+
.map((line) => line.trim())
|
|
141
|
+
.filter(Boolean)
|
|
142
|
+
.map((line) => {
|
|
143
|
+
const parts = line.split("\t");
|
|
144
|
+
return {
|
|
145
|
+
path: String(parts.slice(2).join("\t") ?? "").trim(),
|
|
146
|
+
added: Number.isFinite(Number(parts[0])) ? Number(parts[0]) : 0,
|
|
147
|
+
deleted: Number.isFinite(Number(parts[1])) ? Number(parts[1]) : 0,
|
|
148
|
+
};
|
|
149
|
+
})
|
|
150
|
+
.filter((entry) => entry.path.length > 0);
|
|
151
|
+
}
|
|
152
|
+
function buildCategoryCounts(files) {
|
|
153
|
+
return files.reduce((counts, file) => {
|
|
154
|
+
counts[file.category] += 1;
|
|
155
|
+
return counts;
|
|
156
|
+
}, {
|
|
157
|
+
source: 0,
|
|
158
|
+
tests: 0,
|
|
159
|
+
docs: 0,
|
|
160
|
+
config: 0,
|
|
161
|
+
other: 0,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function readPatchSample(filePath, maxChars) {
|
|
165
|
+
const patch = runGit(["diff", "--cached", "--unified=1", "--", filePath]);
|
|
166
|
+
return compactPatchSample(patch, maxChars);
|
|
167
|
+
}
|
|
168
|
+
export function buildCommitSummaryFromRaw(args) {
|
|
169
|
+
const topFileCount = args.topFileCount ?? DEFAULT_TOP_FILE_COUNT;
|
|
170
|
+
const statsByPath = new Map(parseNumstatEntries(args.numstat).map((entry) => [entry.path, entry]));
|
|
171
|
+
const files = parseNameStatusEntries(args.nameStatus)
|
|
172
|
+
.map((entry) => {
|
|
173
|
+
const stats = statsByPath.get(entry.path);
|
|
174
|
+
const category = classifyCommitFileCategory(entry.path);
|
|
175
|
+
const file = {
|
|
176
|
+
path: entry.path,
|
|
177
|
+
status: entry.status,
|
|
178
|
+
added: stats?.added ?? 0,
|
|
179
|
+
deleted: stats?.deleted ?? 0,
|
|
180
|
+
category,
|
|
181
|
+
score: 0,
|
|
182
|
+
sample: args.sampleByPath?.[entry.path],
|
|
183
|
+
};
|
|
184
|
+
file.score = scoreCommitFile(file);
|
|
185
|
+
return file;
|
|
186
|
+
})
|
|
187
|
+
.sort((left, right) => right.score - left.score || right.added + right.deleted - (left.added + left.deleted) || left.path.localeCompare(right.path));
|
|
188
|
+
const topFiles = files.slice(0, topFileCount);
|
|
189
|
+
const categoryCounts = buildCategoryCounts(files);
|
|
190
|
+
const dominantCategories = Object.entries(categoryCounts)
|
|
191
|
+
.filter(([, count]) => count > 0)
|
|
192
|
+
.sort((left, right) => Number(right[1]) - Number(left[1]) || left[0].localeCompare(right[0]))
|
|
193
|
+
.slice(0, 2)
|
|
194
|
+
.map(([category]) => category);
|
|
195
|
+
return {
|
|
196
|
+
mode: "staged-summary",
|
|
197
|
+
stagedOnly: true,
|
|
198
|
+
totalFiles: files.length,
|
|
199
|
+
totalAdded: files.reduce((sum, file) => sum + file.added, 0),
|
|
200
|
+
totalDeleted: files.reduce((sum, file) => sum + file.deleted, 0),
|
|
201
|
+
categoryCounts,
|
|
202
|
+
dominantCategories,
|
|
203
|
+
topFiles,
|
|
204
|
+
omittedFileCount: Math.max(0, files.length - topFiles.length),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export function buildStagedCommitSummary(options) {
|
|
208
|
+
const nameStatus = runGit(["diff", "--cached", "--name-status", "--find-renames"]);
|
|
209
|
+
if (!nameStatus.trim()) {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
const numstat = runGit(["diff", "--cached", "--numstat", "--find-renames"]);
|
|
213
|
+
const baseSummary = buildCommitSummaryFromRaw({
|
|
214
|
+
nameStatus,
|
|
215
|
+
numstat,
|
|
216
|
+
topFileCount: options?.topFileCount,
|
|
217
|
+
});
|
|
218
|
+
const sampleChars = options?.sampleChars ?? DEFAULT_SAMPLE_CHARS;
|
|
219
|
+
const sampleByPath = Object.fromEntries(baseSummary.topFiles.map((file) => [file.path, readPatchSample(file.path, sampleChars)]));
|
|
220
|
+
return buildCommitSummaryFromRaw({
|
|
221
|
+
nameStatus,
|
|
222
|
+
numstat,
|
|
223
|
+
sampleByPath,
|
|
224
|
+
topFileCount: options?.topFileCount,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=commitSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commitSummary.js","sourceRoot":"","sources":["../../src/git/commitSummary.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Builds compact staged-change summaries for standalone git commands.\n *\n * Why this file exists:\n * - `scai commit` should stay a direct command pipeline instead of entering the task agent runtime\n * - large staged diffs need a cheap summary path so commit suggestions stay fast\n * - pure parsing, ranking, and truncation helpers here are easy to test and reuse\n */\nimport { execFileSync } from \"child_process\";\n\nexport type CommitFileCategory = \"source\" | \"tests\" | \"docs\" | \"config\" | \"other\";\n\nexport interface CommitFileSummary {\n path: string;\n status: string;\n added: number;\n deleted: number;\n category: CommitFileCategory;\n score: number;\n sample?: string;\n}\n\nexport interface CommitSummaryPayload {\n mode: \"staged-summary\";\n stagedOnly: true;\n totalFiles: number;\n totalAdded: number;\n totalDeleted: number;\n categoryCounts: Record<CommitFileCategory, number>;\n dominantCategories: CommitFileCategory[];\n topFiles: CommitFileSummary[];\n omittedFileCount: number;\n}\n\ntype NameStatusEntry = {\n path: string;\n status: string;\n};\n\ntype NumstatEntry = {\n path: string;\n added: number;\n deleted: number;\n};\n\nconst DEFAULT_TOP_FILE_COUNT = 5;\nconst DEFAULT_SAMPLE_CHARS = 1400;\n\nfunction runGit(args: string[]): string {\n return execFileSync(\"git\", args, {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trimEnd();\n}\n\nexport function classifyCommitFileCategory(filePath: string): CommitFileCategory {\n const lowered = filePath.toLowerCase();\n\n if (\n lowered.endsWith(\".md\") ||\n lowered.endsWith(\".txt\") ||\n lowered.includes(\"readme\") ||\n lowered.includes(\"changelog\") ||\n lowered.includes(\"docs/\")\n ) {\n return \"docs\";\n }\n\n if (\n lowered.includes(\"__tests__/\") ||\n lowered.includes(\"/test/\") ||\n lowered.includes(\"/tests/\") ||\n lowered.includes(\".test.\") ||\n lowered.includes(\".spec.\")\n ) {\n return \"tests\";\n }\n\n if (\n lowered.endsWith(\"package.json\") ||\n lowered.endsWith(\"tsconfig.json\") ||\n lowered.endsWith(\"vitest.config.ts\") ||\n lowered.endsWith(\"vitest.config.js\") ||\n lowered.endsWith(\".yml\") ||\n lowered.endsWith(\".yaml\") ||\n lowered.includes(\"/config\") ||\n lowered.includes(\"schema\")\n ) {\n return \"config\";\n }\n\n if (\n lowered.includes(\"/src/\") ||\n lowered.startsWith(\"src/\") ||\n lowered.includes(\"/server/\") ||\n lowered.includes(\"/cli/\") ||\n lowered.endsWith(\".ts\") ||\n lowered.endsWith(\".js\") ||\n lowered.endsWith(\".tsx\") ||\n lowered.endsWith(\".jsx\")\n ) {\n return \"source\";\n }\n\n return \"other\";\n}\n\nexport function compactPatchSample(patch: string, maxChars = DEFAULT_SAMPLE_CHARS): string {\n const trimmed = patch.trim();\n if (!trimmed) return \"\";\n\n const interestingLines = trimmed\n .split(\"\\n\")\n .filter((line) => {\n return (\n line.startsWith(\"diff --git\") ||\n line.startsWith(\"@@\") ||\n line.startsWith(\"+\") ||\n line.startsWith(\"-\") ||\n line.startsWith(\"rename from\") ||\n line.startsWith(\"rename to\")\n );\n })\n .join(\"\\n\")\n .trim();\n\n const effective = interestingLines || trimmed;\n if (effective.length <= maxChars) {\n return effective;\n }\n\n const headChars = Math.max(200, Math.floor(maxChars * 0.6));\n const tailChars = Math.max(120, maxChars - headChars - 24);\n const compacted = `${effective.slice(0, headChars).trimEnd()}\\n...\\n${effective.slice(-tailChars).trimStart()}`;\n return compacted.length <= maxChars\n ? compacted\n : `${compacted.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\n\nexport function scoreCommitFile(file: Pick<CommitFileSummary, \"path\" | \"category\" | \"status\" | \"added\" | \"deleted\">): number {\n const churn = Math.min(file.added + file.deleted, 200);\n const lowered = file.path.toLowerCase();\n\n let score = churn;\n\n switch (file.category) {\n case \"source\":\n score += 100;\n break;\n case \"config\":\n score += 80;\n break;\n case \"tests\":\n score += 50;\n break;\n case \"docs\":\n score += 25;\n break;\n default:\n score += 10;\n break;\n }\n\n if (lowered.includes(\"mainagent\") || lowered.includes(\"index.ts\") || lowered.includes(\"factory.ts\")) {\n score += 25;\n }\n if (lowered.endsWith(\"package.json\") || lowered.includes(\"schema\")) {\n score += 20;\n }\n if (file.status === \"A\") {\n score += 10;\n }\n if (file.status === \"R\") {\n score += 8;\n }\n if (file.status === \"D\") {\n score -= 5;\n }\n\n return score;\n}\n\nexport function parseNameStatusEntries(raw: string): NameStatusEntry[] {\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const parts = line.split(\"\\t\");\n const statusToken = String(parts[0] ?? \"M\").trim();\n const status = statusToken.charAt(0) || \"M\";\n const path = (status === \"R\" || status === \"C\")\n ? String(parts[2] ?? parts[1] ?? \"\").trim()\n : String(parts[1] ?? \"\").trim();\n return { path, status };\n })\n .filter((entry) => entry.path.length > 0);\n}\n\nexport function parseNumstatEntries(raw: string): NumstatEntry[] {\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const parts = line.split(\"\\t\");\n return {\n path: String(parts.slice(2).join(\"\\t\") ?? \"\").trim(),\n added: Number.isFinite(Number(parts[0])) ? Number(parts[0]) : 0,\n deleted: Number.isFinite(Number(parts[1])) ? Number(parts[1]) : 0,\n };\n })\n .filter((entry) => entry.path.length > 0);\n}\n\nfunction buildCategoryCounts(files: CommitFileSummary[]): Record<CommitFileCategory, number> {\n return files.reduce<Record<CommitFileCategory, number>>((counts, file) => {\n counts[file.category] += 1;\n return counts;\n }, {\n source: 0,\n tests: 0,\n docs: 0,\n config: 0,\n other: 0,\n });\n}\n\nfunction readPatchSample(filePath: string, maxChars: number): string {\n const patch = runGit([\"diff\", \"--cached\", \"--unified=1\", \"--\", filePath]);\n return compactPatchSample(patch, maxChars);\n}\n\nexport function buildCommitSummaryFromRaw(args: {\n nameStatus: string;\n numstat: string;\n sampleByPath?: Record<string, string>;\n topFileCount?: number;\n}): CommitSummaryPayload {\n const topFileCount = args.topFileCount ?? DEFAULT_TOP_FILE_COUNT;\n const statsByPath = new Map(parseNumstatEntries(args.numstat).map((entry) => [entry.path, entry]));\n\n const files = parseNameStatusEntries(args.nameStatus)\n .map((entry) => {\n const stats = statsByPath.get(entry.path);\n const category = classifyCommitFileCategory(entry.path);\n const file: CommitFileSummary = {\n path: entry.path,\n status: entry.status,\n added: stats?.added ?? 0,\n deleted: stats?.deleted ?? 0,\n category,\n score: 0,\n sample: args.sampleByPath?.[entry.path],\n };\n file.score = scoreCommitFile(file);\n return file;\n })\n .sort((left, right) => right.score - left.score || right.added + right.deleted - (left.added + left.deleted) || left.path.localeCompare(right.path));\n\n const topFiles = files.slice(0, topFileCount);\n const categoryCounts = buildCategoryCounts(files);\n const dominantCategories = Object.entries(categoryCounts)\n .filter(([, count]) => count > 0)\n .sort((left, right) => Number(right[1]) - Number(left[1]) || left[0].localeCompare(right[0]))\n .slice(0, 2)\n .map(([category]) => category as CommitFileCategory);\n\n return {\n mode: \"staged-summary\",\n stagedOnly: true,\n totalFiles: files.length,\n totalAdded: files.reduce((sum, file) => sum + file.added, 0),\n totalDeleted: files.reduce((sum, file) => sum + file.deleted, 0),\n categoryCounts,\n dominantCategories,\n topFiles,\n omittedFileCount: Math.max(0, files.length - topFiles.length),\n };\n}\n\nexport function buildStagedCommitSummary(options?: {\n topFileCount?: number;\n sampleChars?: number;\n}): CommitSummaryPayload | undefined {\n const nameStatus = runGit([\"diff\", \"--cached\", \"--name-status\", \"--find-renames\"]);\n if (!nameStatus.trim()) {\n return undefined;\n }\n\n const numstat = runGit([\"diff\", \"--cached\", \"--numstat\", \"--find-renames\"]);\n const baseSummary = buildCommitSummaryFromRaw({\n nameStatus,\n numstat,\n topFileCount: options?.topFileCount,\n });\n const sampleChars = options?.sampleChars ?? DEFAULT_SAMPLE_CHARS;\n\n const sampleByPath = Object.fromEntries(\n baseSummary.topFiles.map((file) => [file.path, readPatchSample(file.path, sampleChars)])\n );\n\n return buildCommitSummaryFromRaw({\n nameStatus,\n numstat,\n sampleByPath,\n topFileCount: options?.topFileCount,\n });\n}\n"]}
|
package/dist/github/api.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/github/api.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAa,EAAE,KAAa,EAAE,IAAY;IACpF,MAAM,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,QAAQ,CAAC;IAElE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,KAAK,EAAE;YAC/B,MAAM,EAAE,gCAAgC;SACzC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,QAAQ,EAAE,EAAE,CAAC,QAAQ;KACtB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAe,EAAE,KAAa;IACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,KAAK,EAAE;YAC/B,MAAM,EAAE,gCAAgC;SACzC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa;IACnD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE;QACrD,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,KAAK,EAAE;YAC/B,MAAM,EAAE,gCAAgC;SACzC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAE,kBAAkB;AACxC,CAAC","sourcesContent":["export interface PullRequest {\r\n number: number;\r\n title: string;\r\n diff_url: string;\r\n}\r\n\r\nexport async function fetchOpenPullRequests(token: string, owner: string, repo: string): Promise<PullRequest[]> {\r\n const url = `https://api.github.com/repos/${owner}/${repo}/pulls`;\r\n\r\n const res = await fetch(url, {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: \"application/vnd.github.v3+json\",\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`GitHub API error: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n const prs = await res.json();\r\n return prs.map((pr: any) => ({\r\n number: pr.number,\r\n title: pr.title,\r\n diff_url: pr.diff_url,\r\n }));\r\n}\r\n\r\nexport async function fetchPullRequestDiff(pr: PullRequest, token: string): Promise<string> {\r\n const res = await fetch(pr.diff_url, {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: \"application/vnd.github.v3.diff\",\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`Error fetching PR diff: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n return await res.text();\r\n}\r\n\r\nexport async function getGitHubUsername(token: string): Promise<string> {\r\n const res = await fetch('https://api.github.com/user', {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: \"application/vnd.github.v3+json\",\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`Error fetching user info: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n const user = await res.json();\r\n return user.login; // GitHub username\r\n}\r\n\r\n"]}
|
package/dist/github/auth.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/github/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,gDAAgD;IAChD,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAEpC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,CAAE,4CAA4C;IAC7D,CAAC;IAED,wDAAwD;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAErD,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IAE/B,kGAAkG;IAClG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACjC,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAE,2BAA2B;AACnD,CAAC","sourcesContent":["import chalk from 'chalk';\r\nimport { Config } from '../config.js';\r\nimport { promptForToken } from './token.js';\r\n\r\nexport async function ensureGitHubAuth(): Promise<string> {\r\n // First check if the token exists in the config\r\n let token = Config.getGitHubToken();\r\n\r\n if (token) {\r\n console.log(\"🔐 GitHub token found in config.\");\r\n return token; // Token already exists in config, return it\r\n }\r\n\r\n // Token doesn't exist in config, prompt the user for it\r\n console.log(chalk.red(\"🔐 GitHub token not found.\"));\r\n\r\n token = await promptForToken();\r\n\r\n // Ensure the token is not empty and has the required format (you can extend this check as needed)\r\n while (!token || token.trim().length === 0) {\r\n console.log(\"❌ Invalid token entered. Please enter a valid GitHub token.\");\r\n token = await promptForToken();\r\n }\r\n\r\n // Save the token in the config\r\n Config.setGitHubToken(token.trim());\r\n\r\n console.log(chalk.green(\"✅ GitHub token successfully saved.\"));\r\n return token.trim(); // Return the trimmed token\r\n}\r\n"]}
|
package/dist/github/github.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/github/github.ts"],"names":[],"mappings":"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","sourcesContent":["import { PullRequest, ReviewEvent } from '../types.js';\r\nimport { ensureGitHubAuth } from './auth.js';\r\nimport { getRepoDetails } from './repo.js';\r\n\r\nexport async function fetchOpenPullRequests(token: string, owner: string, repo: string): Promise<PullRequest[]> {\r\n const url = `https://api.github.com/repos/${owner}/${repo}/pulls?state=open&per_page=100`;\r\n\r\n const res = await fetch(url, {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: 'application/vnd.github.v3+json',\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`GitHub API error: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n const prs = await res.json();\r\n\r\n const augmentedPRs = await Promise.all(prs.map(async (pr: any) => {\r\n const reviewsRes = await fetch(`${pr.url}/reviews`, {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: 'application/vnd.github.v3+json',\r\n }\r\n });\r\n\r\n let latestState = '—';\r\n let reviewers: string[] = [];\r\n\r\n if (reviewsRes.ok) {\r\n const reviews = await reviewsRes.json();\r\n\r\n const latestPerUser = new Map<string, string>();\r\n for (const review of reviews) {\r\n latestPerUser.set(review.user.login, review.state);\r\n }\r\n\r\n reviewers = [...latestPerUser.keys()]; // ✅ actual reviewers\r\n\r\n if ([...latestPerUser.values()].includes('CHANGES_REQUESTED')) {\r\n latestState = 'Changes Requested';\r\n } else if ([...latestPerUser.values()].includes('APPROVED')) {\r\n latestState = 'Approved';\r\n }\r\n }\r\n\r\n return {\r\n number: pr.number,\r\n title: pr.title,\r\n url: pr.url,\r\n diff_url: pr.diff_url,\r\n draft: pr.draft,\r\n merged_at: pr.merged_at,\r\n base: pr.base,\r\n user: pr.user?.login || 'unknown',\r\n created_at: pr.created_at,\r\n requested_reviewers: pr.requested_reviewers?.map((r: any) => r.login) || [],\r\n reviewers,\r\n review_status: latestState,\r\n };\r\n }));\r\n\r\n return augmentedPRs;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport async function getGitHubUsername(token: string): Promise<string> {\r\n const res = await fetch('https://api.github.com/user', {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: \"application/vnd.github.v3+json\",\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`Error fetching user info: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n const user = await res.json();\r\n return user.login; // GitHub username\r\n}\r\n\r\nexport async function fetchPullRequestDiff(pr: PullRequest, token: string): Promise<string> {\r\n const res = await fetch(pr.diff_url, {\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: \"application/vnd.github.v3.diff\",\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(`Error fetching PR diff: ${res.status} ${res.statusText}`);\r\n }\r\n\r\n return await res.text();\r\n}\r\n\r\nexport async function submitReview(\r\n prNumber: number,\r\n body: string,\r\n event: 'APPROVE' | 'REQUEST_CHANGES' | 'COMMENT',\r\n comments?: Array<{ path: string; body: string; position: number }>\r\n): Promise<void> {\r\n const token = await ensureGitHubAuth();\r\n const { owner, repo } = await getRepoDetails();\r\n\r\n const url = `https://api.github.com/repos/${owner}/${repo}/pulls/${prNumber}/reviews`;\r\n\r\n // Prepare payload\r\n const payload: {\r\n body: string;\r\n event: 'APPROVE' | 'REQUEST_CHANGES' | 'COMMENT';\r\n comments?: Array<{ path: string; body: string; position: number }>;\r\n } = { body, event };\r\n\r\n if (comments && comments.length > 0) {\r\n payload.comments = comments;\r\n }\r\n\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: 'application/vnd.github.v3+json',\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n\r\n if (!res.ok) {\r\n const errorText = await res.text();\r\n\r\n let parsed: any = {};\r\n try {\r\n parsed = JSON.parse(errorText);\r\n } catch (_) {\r\n // fallback to raw text\r\n }\r\n\r\n const knownErrors = Array.isArray(parsed.errors) ? parsed.errors.map((e: any) => e.message || e).join('; ') : '';\r\n\r\n if (res.status === 422) {\r\n if (knownErrors.includes('Can not approve your own pull request')) {\r\n console.warn(`⚠️ Skipping approval: You cannot approve your own pull request.`);\r\n return;\r\n }\r\n\r\n if (knownErrors.includes('Comments may only be specified on pull requests with a diff')) {\r\n console.warn(`⚠️ Cannot post comments: PR has no diff.`);\r\n return;\r\n }\r\n\r\n if (knownErrors.includes('path is missing') || knownErrors.includes('line is missing') || knownErrors.includes('position is missing')) {\r\n console.warn(`⚠️ Some inline comments are missing required fields. Skipping review.`);\r\n return;\r\n }\r\n\r\n if (knownErrors.includes('Position is invalid') || knownErrors.includes('line must be part of the diff')) {\r\n console.warn(`⚠️ One or more comment positions are invalid — probably outside the diff. Skipping review.`);\r\n return;\r\n }\r\n }\r\n\r\n throw new Error(`Failed to submit review: ${res.status} ${res.statusText} - ${errorText}`);\r\n }\r\n\r\n console.log(`✅ Submitted ${event} review for PR #${prNumber}`);\r\n}\r\n\r\n\r\nexport async function postInlineComment(\r\n prNumber: number,\r\n commitId: string,\r\n path: string,\r\n body: string,\r\n line: number,\r\n side: 'RIGHT' | 'LEFT' = 'RIGHT',\r\n reviewId: number | null = null // Associate with a review if available\r\n): Promise<void> {\r\n const token = await ensureGitHubAuth();\r\n const { owner, repo } = await getRepoDetails();\r\n\r\n const url = `https://api.github.com/repos/${owner}/${repo}/pulls/${prNumber}/comments`;\r\n\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n Authorization: `token ${token}`,\r\n Accept: 'application/vnd.github.v3+json',\r\n },\r\n body: JSON.stringify({\r\n body,\r\n commit_id: commitId,\r\n path,\r\n line,\r\n side,\r\n review_id: reviewId, // Include review_id if available\r\n }),\r\n });\r\n\r\n if (!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(\r\n `Failed to post inline comment: ${res.status} ${res.statusText} - ${errorText}`\r\n );\r\n }\r\n\r\n console.log(`💬 Posted inline comment on ${path}:${line}`);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubAuthCheck.js","sourceRoot":"","sources":["../../src/github/githubAuthCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,KAAK,IAAI,IAAI,EAAE,EAAE;QAC5E,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,YAAY,EAAE,UAAU;SACzB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,yCAAyC,KAAK,IAAI,IAAI,kBAAkB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAC5G,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAC1C,EAAE,CACH,CAAC;IACJ,CAAC;IAED,OAAO,+BAA+B,KAAK,IAAI,IAAI,EAAE,CAAC;AACxD,CAAC","sourcesContent":["import { ensureGitHubAuth } from './auth.js';\r\nimport { getRepoDetails } from './repo.js';\r\n\r\nexport async function validateGitHubTokenAgainstRepo(): Promise<string> {\r\n const token = await ensureGitHubAuth();\r\n const { owner, repo } = await getRepoDetails();\r\n\r\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n 'User-Agent': 'scai-cli',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n const error = await response.json().catch(() => ({}));\r\n throw new Error(\r\n `❌ Token is invalid or lacks access to ${owner}/${repo}. GitHub says: ${response.status} ${response.statusText}${\r\n error.message ? ` – ${error.message}` : ''\r\n }`\r\n );\r\n }\r\n\r\n return `✅ GitHub token is valid for ${owner}/${repo}`;\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postComments.js","sourceRoot":"","sources":["../../src/github/postComments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,UAAkB;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,kFAAkF;IAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,qDAAqD;QACrD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,WAAW,EAAE,CAAC;YAEd,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,CAAC,wDAAwD;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,qDAAqD;AACpE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAa,EACb,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,UAAkB,EAClB,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC,CAAC;IAExD,+DAA+D;IAC/D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QACjC,KAAK;QACL,IAAI;QACJ,WAAW,EAAE,QAAQ;KACtB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAElC,6DAA6D;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAElC,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE3D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,yBAAyB,UAAU,wBAAwB,QAAQ,GAAG,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC;YACtC,KAAK;YACL,IAAI;YACJ,WAAW,EAAE,QAAQ;YACrB,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,QAAQ,EAAE,4CAA4C;SACjE,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,qBAAqB,QAAQ,GAAG,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC","sourcesContent":["import { Octokit } from '@octokit/rest';\r\n\r\n/**\r\n * Parses the PR diff to determine the correct position for inline comments.\r\n * The position is the \"index\" of the changed line in the diff.\r\n * @param diff The diff content of the PR\r\n * @param lineNumber The line number to convert to a position in the diff\r\n */\r\nfunction getLinePositionFromDiff(diff: string, lineNumber: number): number | null {\r\n const lines = diff.split('\\n');\r\n let currentLine = 0;\r\n\r\n // Iterate through the lines and determine the correct position for the lineNumber\r\n for (let i = 0; i < lines.length; i++) {\r\n // Only count the lines that are part of a diff chunk\r\n if (lines[i].startsWith('+') || lines[i].startsWith('-')) {\r\n currentLine++;\r\n\r\n if (currentLine === lineNumber) {\r\n return i; // Position is the index of the changed line in the diff\r\n }\r\n }\r\n }\r\n\r\n return null; // Return null if lineNumber is not found in the diff\r\n}\r\n\r\n/**\r\n * Posts an inline review comment on a specific line of a PR.\r\n *\r\n * @param token GitHub personal access token\r\n * @param owner Repository owner (e.g. 'my-org')\r\n * @param repo Repository name (e.g. 'my-repo')\r\n * @param prNumber Pull Request number\r\n * @param fileName Path to the file in the PR (relative to repo root)\r\n * @param lineNumber Line number to comment on in the file (not in the diff)\r\n * @param comment Text of the comment\r\n */\r\nexport async function postReviewComment(\r\n token: string,\r\n owner: string,\r\n repo: string,\r\n prNumber: number,\r\n fileName: string,\r\n lineNumber: number,\r\n comment: string\r\n) {\r\n const octokit = new Octokit({ auth: `token ${token}` });\r\n\r\n // First, get PR details so we can retrieve the head commit SHA\r\n const pr = await octokit.pulls.get({\r\n owner,\r\n repo,\r\n pull_number: prNumber,\r\n });\r\n\r\n const commitId = pr.data.head.sha;\r\n\r\n // Fetch the PR diff by getting the full diff URL from the PR\r\n const diffUrl = pr.data.diff_url;\r\n const diffRes = await fetch(diffUrl);\r\n const diff = await diffRes.text();\r\n\r\n // Get the position of the line in the diff\r\n const position = getLinePositionFromDiff(diff, lineNumber);\r\n\r\n if (position === null) {\r\n console.error(`❌ Unable to find line ${lineNumber} in the diff for PR #${prNumber}.`);\r\n return;\r\n }\r\n\r\n // Now, post the inline comment\r\n try {\r\n await octokit.pulls.createReviewComment({\r\n owner,\r\n repo,\r\n pull_number: prNumber,\r\n commit_id: commitId,\r\n path: fileName,\r\n body: comment,\r\n position: position, // Use the position calculated from the diff\r\n });\r\n\r\n console.log(`✅ Inline comment posted to ${fileName} at diff position ${position}.`);\r\n } catch (err: any) {\r\n console.error(`❌ Error posting inline comment: ${err.message}`);\r\n }\r\n}\r\n"]}
|
package/dist/github/repo.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves GitHub repo coordinates for the active configured repository.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - GitHub helpers should reuse current repo setup instead of silently creating it
|
|
6
|
+
* - repo resolution should fail with one clear repair path when setup is missing
|
|
7
|
+
* - Git remote parsing should stay separate from command wiring
|
|
8
|
+
*/
|
|
1
9
|
import path from 'path';
|
|
2
10
|
import { execSync } from 'child_process';
|
|
3
11
|
import { Config } from '../config.js';
|
|
4
12
|
import { ensureGitHubAuth } from './auth.js';
|
|
5
13
|
import chalk from 'chalk';
|
|
14
|
+
import { ensureRegisteredRepoForCurrentDir } from '../setup/setupOwner.js';
|
|
6
15
|
/**
|
|
7
16
|
* Executes a Git command inside the specified working directory.
|
|
8
17
|
*/
|
|
@@ -51,23 +60,12 @@ function getRepoOwnerAndNameFromIndexDir(indexDir) {
|
|
|
51
60
|
* Prefers Git config, falls back to parsing the path.
|
|
52
61
|
*/
|
|
53
62
|
export async function getRepoDetails() {
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
console.log("❌ indexDir is not configured. Setting up a new index for the current directory...");
|
|
58
|
-
// Automatically set the index directory for the current directory
|
|
59
|
-
await setIndexDirForCurrentDir(currentDir);
|
|
60
|
-
// Now that the indexDir is set, fetch it again
|
|
61
|
-
indexDir = Config.getIndexDir();
|
|
62
|
-
}
|
|
63
|
+
const registration = ensureRegisteredRepoForCurrentDir();
|
|
64
|
+
const indexDir = path.normalize(Config.getIndexDir() || registration.repoRootPath);
|
|
65
|
+
const currentDir = path.normalize(process.cwd());
|
|
63
66
|
console.log(chalk.yellow(`📦 Resolving GitHub repo info from indexDir: ${indexDir}`));
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
console.log(`🚧 Current directory is not the index directory. Setting up new index...`);
|
|
67
|
-
// Use the existing functionality to set up a new index directory
|
|
68
|
-
await setIndexDirForCurrentDir(currentDir);
|
|
69
|
-
// Now update indexDir to the newly set one
|
|
70
|
-
indexDir = Config.getIndexDir(); // Re-fetch the updated indexDir
|
|
67
|
+
if (!currentDir.startsWith(path.resolve(indexDir))) {
|
|
68
|
+
throw new Error("❌ Current directory is not part of the active configured repository.\n➡️ Run `scai setup` from the repository root.");
|
|
71
69
|
}
|
|
72
70
|
// Ensure the repository authentication is available
|
|
73
71
|
await ensureAuthCredentials();
|
|
@@ -80,14 +78,6 @@ export async function getRepoDetails() {
|
|
|
80
78
|
return getRepoOwnerAndNameFromIndexDir(indexDir); // Fallback if Git config fails
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
|
-
async function setIndexDirForCurrentDir(currentDir) {
|
|
84
|
-
console.log(`🔧 Setting up index directory for the current directory: ${currentDir}`);
|
|
85
|
-
// Use the existing scai index set functionality to set the index directory
|
|
86
|
-
await Config.setIndexDir(currentDir);
|
|
87
|
-
// After setting the index, verify the directory is set correctly
|
|
88
|
-
const indexDir = Config.getIndexDir();
|
|
89
|
-
console.log(`✅ Index directory set to: ${indexDir}`);
|
|
90
|
-
}
|
|
91
81
|
async function ensureAuthCredentials() {
|
|
92
82
|
const token = await ensureGitHubAuth();
|
|
93
83
|
if (!token) {
|
|
@@ -95,3 +85,4 @@ async function ensureAuthCredentials() {
|
|
|
95
85
|
}
|
|
96
86
|
console.log('✅ GitHub authentication credentials are valid.');
|
|
97
87
|
}
|
|
88
|
+
//# sourceMappingURL=repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/github/repo.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Resolves GitHub repo coordinates for the active configured repository.\n *\n * Why this file exists:\n * - GitHub helpers should reuse current repo setup instead of silently creating it\n * - repo resolution should fail with one clear repair path when setup is missing\n * - Git remote parsing should stay separate from command wiring\n */\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { Config } from '../config.js';\nimport { ensureGitHubAuth } from './auth.js';\nimport chalk from 'chalk';\nimport { ensureRegisteredRepoForCurrentDir } from '../setup/setupOwner.js';\n\r\n/**\r\n * Executes a Git command inside the specified working directory.\r\n */\r\nfunction runGitCommand(cmd: string, cwd: string): string {\r\n return execSync(cmd, { cwd, encoding: 'utf-8' }).trim();\r\n}\r\n\r\n/**\r\n * Retrieves the owner and repo name from the Git remote URL inside the indexDir.\r\n * This ensures we get the correct GitHub repo owner and name, regardless of current working directory.\r\n */\r\nfunction getRepoOwnerAndNameFromGit(indexDir: string): { owner: string; repo: string } {\r\n try {\r\n const originUrl = runGitCommand('git config --get remote.origin.url', indexDir).trim();\r\n console.log(`🔗 Git origin URL from '${indexDir}': ${originUrl}`);\r\n\r\n // Handle both SSH and HTTPS formats, with or without extra slashes\r\n // Examples:\r\n // - git@github.com:owner/repo.git\r\n // - git@github.com:/owner/repo.git\r\n // - https://github.com/owner/repo.git\r\n const match = originUrl.match(/github[^:/]*[:/]\\/?(.+?)(?:\\.git)?$/);\r\n if (!match) throw new Error(\"❌ Could not parse GitHub repo from origin URL.\");\r\n\r\n const [owner, repo] = match[1].split('/');\r\n if (!owner || !repo) throw new Error(\"❌ Failed to extract owner or repo name from URL.\");\r\n\r\n console.log(`✅ Parsed from Git: owner='${owner}', repo='${repo}'`);\r\n return { owner, repo };\r\n } catch (error: unknown) {\r\n console.warn(`⚠️ Failed to parse GitHub info from Git config in '${indexDir}': ${error instanceof Error ? error.message : error}`);\r\n throw error;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Fallback: Extracts GitHub repo owner and name from the index directory path.\r\n */\r\nfunction getRepoOwnerAndNameFromIndexDir(indexDir: string): { owner: string; repo: string } {\r\n const parts = path.resolve(indexDir).split(path.sep);\r\n const repo = parts.pop()!;\r\n const owner = parts.pop()!;\r\n console.log(`📁 Parsed from indexDir: owner='${owner}', repo='${repo}'`);\r\n\r\n return { owner, repo };\r\n}\r\n\r\n/**\r\n * Get the GitHub repo details, always from the configured indexDir.\r\n * Prefers Git config, falls back to parsing the path.\r\n */\r\nexport async function getRepoDetails(): Promise<{ owner: string; repo: string }> {\n const registration = ensureRegisteredRepoForCurrentDir();\n const indexDir = path.normalize(Config.getIndexDir() || registration.repoRootPath);\n const currentDir = path.normalize(process.cwd());\n\n console.log(chalk.yellow(`📦 Resolving GitHub repo info from indexDir: ${indexDir}`));\n\n if (!currentDir.startsWith(path.resolve(indexDir))) {\n throw new Error(\"❌ Current directory is not part of the active configured repository.\\n➡️ Run `scai setup` from the repository root.\");\n }\n\r\n // Ensure the repository authentication is available\r\n await ensureAuthCredentials();\r\n\r\n // Proceed with the normal flow to fetch the repo details\r\n try {\r\n return getRepoOwnerAndNameFromGit(indexDir); // Try fetching from Git config\r\n } catch {\r\n console.log(\"🔁 Falling back to extracting from indexDir path...\");\r\n return getRepoOwnerAndNameFromIndexDir(indexDir); // Fallback if Git config fails\r\n }\r\n}\n\r\nasync function ensureAuthCredentials(): Promise<void> {\r\n const token = await ensureGitHubAuth();\r\n if (!token) {\r\n throw new Error('❌ GitHub authentication token not found. Please authenticate first.');\r\n }\r\n\r\n console.log('✅ GitHub authentication credentials are valid.');\r\n}\r\n\r\n"]}
|
package/dist/github/token.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/github/token.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CACT,+CAA+C,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,IAAI,EAC9F,CAAC,KAAK,EAAE,EAAE;YACR,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Utility function to prompt for GitHub token\r\nimport chalk from 'chalk';\r\nimport readline from 'readline';\r\n\r\nexport function promptForToken(): Promise<string> {\r\n return new Promise((resolve) => {\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n });\r\n\r\n rl.question(\r\n `\\nPaste your GitHub Personal Access Token:\\n${chalk.yellow('(press Control + C to exit)')}\\n`,\r\n (token) => {\r\n rl.close();\r\n resolve(token);\r\n });\r\n });\r\n}"]}
|
package/dist/github/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/github/types.ts"],"names":[],"mappings":"","sourcesContent":["\r\n"]}
|