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,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes shared runtime records to the human log and structured ndjson log.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - `runtime.log` is the human log renderer for local runs
|
|
6
|
+
* - `runtime.ndjson` is the machine log sink with canonical structured records
|
|
7
|
+
* - old and new runtimes should write through one backend during migration
|
|
8
|
+
* - human log header shaping should stay here so console formatting stays separate
|
|
9
|
+
*/
|
|
10
|
+
import fs from "fs";
|
|
11
|
+
import { Chalk } from "chalk";
|
|
12
|
+
import { log } from "../utils/log.js";
|
|
13
|
+
import { RUNTIME_LOG_PATH, RUNTIME_NDJSON_PATH, SCAI_HOME } from "../constants.js";
|
|
14
|
+
import { formatHumanTimestamp, formatLocalIso, nowLocalIso } from "./time.js";
|
|
15
|
+
const runtimeLogChalk = new Chalk({ level: 3 });
|
|
16
|
+
/**
|
|
17
|
+
* Formats one human-only run-start section so new ask runs are easy to spot in `runtime.log`.
|
|
18
|
+
* Example: `agent`, `Explain agentLoop.ts` -> yellow `== Simple Agent Run ==` plus the query.
|
|
19
|
+
*/
|
|
20
|
+
function formatRunStartSection(runtime, query) {
|
|
21
|
+
const title = getRunTitle(runtime);
|
|
22
|
+
const section = runtimeLogChalk.hex("#FF9500").bold(`== ${title} ==`);
|
|
23
|
+
const queryLine = runtimeLogChalk.hex("#FFD166")(`Query: ${query.trim()}`);
|
|
24
|
+
return `\n${section}\n${queryLine}\n`;
|
|
25
|
+
}
|
|
26
|
+
function getRunTitle(runtime) {
|
|
27
|
+
return runtime === "agent"
|
|
28
|
+
? "Simple Agent Run"
|
|
29
|
+
: runtime === "main"
|
|
30
|
+
? "Main Agent Run"
|
|
31
|
+
: "Shared Run";
|
|
32
|
+
}
|
|
33
|
+
function ensureHomeDir() {
|
|
34
|
+
if (!fs.existsSync(SCAI_HOME)) {
|
|
35
|
+
fs.mkdirSync(SCAI_HOME, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function stringifyPayload(payload) {
|
|
39
|
+
if (payload === undefined) {
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
42
|
+
if (typeof payload === "string") {
|
|
43
|
+
return payload.trim();
|
|
44
|
+
}
|
|
45
|
+
return JSON.stringify(payload, null, 2);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Colors one human runtime header token while keeping the bracketed shape stable.
|
|
49
|
+
* Example: `step:started step=step-003 action=read-file` -> cyan.
|
|
50
|
+
*/
|
|
51
|
+
function colorHumanHeaderTag(kind, text) {
|
|
52
|
+
switch (kind) {
|
|
53
|
+
case "llm":
|
|
54
|
+
return runtimeLogChalk.blue(text);
|
|
55
|
+
case "step":
|
|
56
|
+
return runtimeLogChalk.cyan(text);
|
|
57
|
+
case "tool":
|
|
58
|
+
return runtimeLogChalk.green(text);
|
|
59
|
+
case "error":
|
|
60
|
+
return runtimeLogChalk.red(text);
|
|
61
|
+
case "task":
|
|
62
|
+
return runtimeLogChalk.yellow(text);
|
|
63
|
+
case "user-message":
|
|
64
|
+
return runtimeLogChalk.magenta(text);
|
|
65
|
+
case "legacy":
|
|
66
|
+
return runtimeLogChalk.gray(text);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extracts step transition parts from a `[STATE]` user message.
|
|
71
|
+
* Example: `[STATE] step step-004 running -> done | action=read-file | 38.7s`
|
|
72
|
+
* becomes `{ stepId: "step-004", from: "running", to: "done", action: "read-file", durationText: "38.7s" }`.
|
|
73
|
+
*/
|
|
74
|
+
function parseUserMessageStateHeader(summary) {
|
|
75
|
+
const stateMatch = summary?.match(/^\[STATE\] step (\S+) (\S+) -> (\S+) \| action=(\S+?)(?: \| (.+))?$/);
|
|
76
|
+
if (!stateMatch) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
stepId: stateMatch[1],
|
|
81
|
+
from: stateMatch[2],
|
|
82
|
+
to: stateMatch[3],
|
|
83
|
+
action: stateMatch[4],
|
|
84
|
+
durationText: stateMatch[5]?.trim() || undefined,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extracts header metadata from structured payloads and user-facing messages.
|
|
89
|
+
* Example: a step payload with `action=read-file` becomes `action=read-file` in the header.
|
|
90
|
+
*/
|
|
91
|
+
function extractHeaderMetadata(record) {
|
|
92
|
+
const objectPayload = typeof record.payload === "object" && record.payload !== null
|
|
93
|
+
? record.payload
|
|
94
|
+
: undefined;
|
|
95
|
+
const nestedPayload = typeof objectPayload?.payload === "object" && objectPayload.payload !== null
|
|
96
|
+
? objectPayload.payload
|
|
97
|
+
: undefined;
|
|
98
|
+
const readString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
99
|
+
const normalizeAgentLabel = (value) => value?.replace(/^agent\./, "");
|
|
100
|
+
const summary = readString(record.summary);
|
|
101
|
+
const stepId = readString(record.stepId) ?? readString(objectPayload?.stepId);
|
|
102
|
+
const payloadAction = readString(objectPayload?.action) ?? readString(nestedPayload?.action);
|
|
103
|
+
const payloadLabel = readString(objectPayload?.label) ?? readString(nestedPayload?.label);
|
|
104
|
+
if (record.kind === "user-message") {
|
|
105
|
+
const stateDetails = parseUserMessageStateHeader(summary);
|
|
106
|
+
if (stateDetails) {
|
|
107
|
+
return {
|
|
108
|
+
stepId: stateDetails.stepId,
|
|
109
|
+
from: stateDetails.from,
|
|
110
|
+
to: stateDetails.to,
|
|
111
|
+
action: stateDetails.action,
|
|
112
|
+
summaryOverride: stateDetails.durationText
|
|
113
|
+
? `[STATE] ${stateDetails.durationText}`
|
|
114
|
+
: "[STATE]",
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const llmMatch = summary?.match(/^\[LLM\] ([^|]+?) finished\b/);
|
|
118
|
+
if (llmMatch) {
|
|
119
|
+
return {
|
|
120
|
+
label: llmMatch[1]?.trim(),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {};
|
|
124
|
+
}
|
|
125
|
+
if (record.kind === "llm") {
|
|
126
|
+
const label = normalizeAgentLabel(payloadLabel) ?? normalizeAgentLabel(summary);
|
|
127
|
+
return {
|
|
128
|
+
stepId,
|
|
129
|
+
...(label ? { label } : {}),
|
|
130
|
+
suppressSummary: Boolean(label && summary),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (record.kind === "tool") {
|
|
134
|
+
const action = payloadAction ?? summary;
|
|
135
|
+
return {
|
|
136
|
+
stepId,
|
|
137
|
+
...(action ? { action } : {}),
|
|
138
|
+
suppressSummary: Boolean(action),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (record.kind === "step") {
|
|
142
|
+
const action = payloadAction;
|
|
143
|
+
const genericStepSummary = summary === "step-created"
|
|
144
|
+
|| summary === "step-started"
|
|
145
|
+
|| summary === "step-succeeded"
|
|
146
|
+
|| summary === "step-failed";
|
|
147
|
+
const actionInputSummary = Boolean(action && summary === `${action} input`);
|
|
148
|
+
return {
|
|
149
|
+
stepId,
|
|
150
|
+
...(action ? { action } : {}),
|
|
151
|
+
suppressSummary: genericStepSummary || actionInputSummary,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (record.kind === "error") {
|
|
155
|
+
return {
|
|
156
|
+
stepId,
|
|
157
|
+
...(payloadAction ? { action: payloadAction } : {}),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { stepId };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Groups runtime phase and scan keys into one colored token for fast scanning.
|
|
164
|
+
* Example: `tool`, `output`, `step-002`, `triage-file` -> `tool:output step=step-002 action=triage-file`.
|
|
165
|
+
*/
|
|
166
|
+
function formatHumanHeaderTag(record) {
|
|
167
|
+
const metadata = extractHeaderMetadata(record);
|
|
168
|
+
const isStateUserMessage = record.kind === "user-message"
|
|
169
|
+
&& Boolean(metadata.from && metadata.to && metadata.stepId && metadata.action);
|
|
170
|
+
const parts = isStateUserMessage
|
|
171
|
+
? [
|
|
172
|
+
`${record.kind}:${record.phase}`,
|
|
173
|
+
`${metadata.stepId} ${metadata.from} -> ${metadata.to}`,
|
|
174
|
+
`| action=${metadata.action}`,
|
|
175
|
+
]
|
|
176
|
+
: [
|
|
177
|
+
`${record.kind}:${record.phase}`,
|
|
178
|
+
metadata.stepId ? `step=${metadata.stepId}` : "",
|
|
179
|
+
metadata.action ? `action=${metadata.action}` : "",
|
|
180
|
+
metadata.label ? `label=${metadata.label}` : "",
|
|
181
|
+
].filter(Boolean);
|
|
182
|
+
return colorHumanHeaderTag(record.kind, parts.join(" "));
|
|
183
|
+
}
|
|
184
|
+
function formatHumanRecord(record) {
|
|
185
|
+
const timestamp = formatHumanTimestamp(record.at ?? nowLocalIso());
|
|
186
|
+
const runtime = record.runtime ?? "shared";
|
|
187
|
+
const metadata = extractHeaderMetadata(record);
|
|
188
|
+
const ids = [
|
|
189
|
+
record.sessionId ? `session=${record.sessionId}` : "",
|
|
190
|
+
record.taskId !== undefined ? `task=${record.taskId}` : "",
|
|
191
|
+
].filter(Boolean).join(" ");
|
|
192
|
+
const status = record.status ? ` status=${record.status}` : "";
|
|
193
|
+
const visibleSummary = metadata.summaryOverride ?? record.summary;
|
|
194
|
+
const summary = metadata.suppressSummary || !visibleSummary ? "" : ` ${visibleSummary}`;
|
|
195
|
+
const payload = stringifyPayload(record.payload);
|
|
196
|
+
const header = `[${timestamp}] [${runtime}] [${formatHumanHeaderTag(record)}]${status}${ids ? ` ${ids}` : ""}${summary}`;
|
|
197
|
+
return payload ? `${header}\n${payload}\n` : `${header}\n`;
|
|
198
|
+
}
|
|
199
|
+
export function appendHumanRuntimeEntry(entry) {
|
|
200
|
+
try {
|
|
201
|
+
ensureHomeDir();
|
|
202
|
+
fs.appendFileSync(RUNTIME_LOG_PATH, entry.endsWith("\n") ? entry : `${entry}\n`, "utf-8");
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
log("ā Failed to append runtime log entry:", err);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export function appendRunStartSection(runtime, query) {
|
|
209
|
+
appendHumanRuntimeEntry(formatRunStartSection(runtime, query));
|
|
210
|
+
}
|
|
211
|
+
export function logRunStart(runtime, query) {
|
|
212
|
+
appendRunStartSection(runtime, query);
|
|
213
|
+
return logRuntimeRecord({
|
|
214
|
+
runtime,
|
|
215
|
+
kind: "task",
|
|
216
|
+
phase: "created",
|
|
217
|
+
status: "active",
|
|
218
|
+
summary: "run started",
|
|
219
|
+
payload: {
|
|
220
|
+
boundary: "start",
|
|
221
|
+
title: getRunTitle(runtime),
|
|
222
|
+
query: query.trim(),
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
export function logRuntimeRecord(record) {
|
|
227
|
+
const normalized = {
|
|
228
|
+
...record,
|
|
229
|
+
at: formatLocalIso(record.at ?? nowLocalIso()),
|
|
230
|
+
runtime: record.runtime ?? "shared",
|
|
231
|
+
};
|
|
232
|
+
try {
|
|
233
|
+
ensureHomeDir();
|
|
234
|
+
appendHumanRuntimeEntry(formatHumanRecord(normalized));
|
|
235
|
+
fs.appendFileSync(RUNTIME_NDJSON_PATH, `${JSON.stringify(normalized)}\n`, "utf-8");
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
log("ā Failed to write runtime log record:", err);
|
|
239
|
+
}
|
|
240
|
+
return normalized;
|
|
241
|
+
}
|
|
242
|
+
export function clearRuntimeLogs() {
|
|
243
|
+
try {
|
|
244
|
+
ensureHomeDir();
|
|
245
|
+
fs.writeFileSync(RUNTIME_LOG_PATH, "", { flag: "w" });
|
|
246
|
+
fs.writeFileSync(RUNTIME_NDJSON_PATH, "", { flag: "w" });
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
log("ā Failed to clear runtime logs:", err);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=runtimeLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeLogger.js","sourceRoot":"","sources":["../../src/utils/runtimeLogger.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Writes shared runtime records to the human log and structured ndjson log.\n *\n * Why this file exists:\n * - `runtime.log` is the human log renderer for local runs\n * - `runtime.ndjson` is the machine log sink with canonical structured records\n * - old and new runtimes should write through one backend during migration\n * - human log header shaping should stay here so console formatting stays separate\n */\nimport fs from \"fs\";\nimport { Chalk } from \"chalk\";\nimport { log } from \"../utils/log.js\";\nimport { RUNTIME_LOG_PATH, RUNTIME_NDJSON_PATH, SCAI_HOME } from \"../constants.js\";\nimport { formatHumanTimestamp, formatLocalIso, nowLocalIso } from \"./time.js\";\n\nexport type RuntimeLogKind = \"task\" | \"step\" | \"llm\" | \"tool\" | \"error\" | \"user-message\" | \"legacy\";\nexport type RuntimeLogPhase =\n | \"input\"\n | \"output\"\n | \"created\"\n | \"started\"\n | \"finished\"\n | \"succeeded\"\n | \"failed\"\n | \"finalized\"\n | \"requested\"\n | \"shown\";\nexport type RuntimeLogStatus = \"ok\" | \"error\" | \"active\" | \"done\" | \"blocked\" | \"failed\" | \"skipped\";\nexport type RuntimeLifecycleStatus = RuntimeLogStatus | \"pending\" | \"running\" | \"waiting\";\n\nexport type RuntimeLogRecord = {\n at?: string;\n runtime?: \"main\" | \"agent\" | \"shared\";\n sessionId?: string;\n taskId?: string | number;\n stepId?: string;\n kind: RuntimeLogKind;\n phase: RuntimeLogPhase;\n status?: RuntimeLifecycleStatus;\n summary: string;\n payload?: unknown;\n};\n\nconst runtimeLogChalk = new Chalk({ level: 3 });\n\n/**\n * Formats one human-only run-start section so new ask runs are easy to spot in `runtime.log`.\n * Example: `agent`, `Explain agentLoop.ts` -> yellow `== Simple Agent Run ==` plus the query.\n */\nfunction formatRunStartSection(runtime: RuntimeLogRecord[\"runtime\"], query: string): string {\n const title = getRunTitle(runtime);\n const section = runtimeLogChalk.hex(\"#FF9500\").bold(`== ${title} ==`);\n const queryLine = runtimeLogChalk.hex(\"#FFD166\")(`Query: ${query.trim()}`);\n return `\\n${section}\\n${queryLine}\\n`;\n}\n\nfunction getRunTitle(runtime: RuntimeLogRecord[\"runtime\"]): string {\n return runtime === \"agent\"\n ? \"Simple Agent Run\"\n : runtime === \"main\"\n ? \"Main Agent Run\"\n : \"Shared Run\";\n}\n\nfunction ensureHomeDir(): void {\n if (!fs.existsSync(SCAI_HOME)) {\n fs.mkdirSync(SCAI_HOME, { recursive: true });\n }\n}\n\nfunction stringifyPayload(payload: unknown): string {\n if (payload === undefined) {\n return \"\";\n }\n if (typeof payload === \"string\") {\n return payload.trim();\n }\n return JSON.stringify(payload, null, 2);\n}\n\n/**\n * Colors one human runtime header token while keeping the bracketed shape stable.\n * Example: `step:started step=step-003 action=read-file` -> cyan.\n */\nfunction colorHumanHeaderTag(kind: RuntimeLogKind, text: string): string {\n switch (kind) {\n case \"llm\":\n return runtimeLogChalk.blue(text);\n case \"step\":\n return runtimeLogChalk.cyan(text);\n case \"tool\":\n return runtimeLogChalk.green(text);\n case \"error\":\n return runtimeLogChalk.red(text);\n case \"task\":\n return runtimeLogChalk.yellow(text);\n case \"user-message\":\n return runtimeLogChalk.magenta(text);\n case \"legacy\":\n return runtimeLogChalk.gray(text);\n }\n}\n\ntype StateHeaderMatch = {\n stepId: string;\n from: string;\n to: string;\n action: string;\n durationText?: string;\n};\n\n/**\n * Extracts step transition parts from a `[STATE]` user message.\n * Example: `[STATE] step step-004 running -> done | action=read-file | 38.7s`\n * becomes `{ stepId: \"step-004\", from: \"running\", to: \"done\", action: \"read-file\", durationText: \"38.7s\" }`.\n */\nfunction parseUserMessageStateHeader(summary: string | undefined): StateHeaderMatch | undefined {\n const stateMatch = summary?.match(\n /^\\[STATE\\] step (\\S+) (\\S+) -> (\\S+) \\| action=(\\S+?)(?: \\| (.+))?$/\n );\n if (!stateMatch) {\n return undefined;\n }\n return {\n stepId: stateMatch[1],\n from: stateMatch[2],\n to: stateMatch[3],\n action: stateMatch[4],\n durationText: stateMatch[5]?.trim() || undefined,\n };\n}\n\n/**\n * Extracts header metadata from structured payloads and user-facing messages.\n * Example: a step payload with `action=read-file` becomes `action=read-file` in the header.\n */\nfunction extractHeaderMetadata(record: RuntimeLogRecord): {\n stepId?: string;\n action?: string;\n label?: string;\n from?: string;\n to?: string;\n summaryOverride?: string;\n suppressSummary?: boolean;\n} {\n const objectPayload = typeof record.payload === \"object\" && record.payload !== null\n ? record.payload as Record<string, unknown>\n : undefined;\n const nestedPayload = typeof objectPayload?.payload === \"object\" && objectPayload.payload !== null\n ? objectPayload.payload as Record<string, unknown>\n : undefined;\n const readString = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n const normalizeAgentLabel = (value: string | undefined): string | undefined =>\n value?.replace(/^agent\\./, \"\");\n const summary = readString(record.summary);\n const stepId = readString(record.stepId) ?? readString(objectPayload?.stepId);\n const payloadAction = readString(objectPayload?.action) ?? readString(nestedPayload?.action);\n const payloadLabel = readString(objectPayload?.label) ?? readString(nestedPayload?.label);\n\n if (record.kind === \"user-message\") {\n const stateDetails = parseUserMessageStateHeader(summary);\n if (stateDetails) {\n return {\n stepId: stateDetails.stepId,\n from: stateDetails.from,\n to: stateDetails.to,\n action: stateDetails.action,\n summaryOverride: stateDetails.durationText\n ? `[STATE] ${stateDetails.durationText}`\n : \"[STATE]\",\n };\n }\n const llmMatch = summary?.match(/^\\[LLM\\] ([^|]+?) finished\\b/);\n if (llmMatch) {\n return {\n label: llmMatch[1]?.trim(),\n };\n }\n return {};\n }\n\n if (record.kind === \"llm\") {\n const label = normalizeAgentLabel(payloadLabel) ?? normalizeAgentLabel(summary);\n return {\n stepId,\n ...(label ? { label } : {}),\n suppressSummary: Boolean(label && summary),\n };\n }\n\n if (record.kind === \"tool\") {\n const action = payloadAction ?? summary;\n return {\n stepId,\n ...(action ? { action } : {}),\n suppressSummary: Boolean(action),\n };\n }\n\n if (record.kind === \"step\") {\n const action = payloadAction;\n const genericStepSummary = summary === \"step-created\"\n || summary === \"step-started\"\n || summary === \"step-succeeded\"\n || summary === \"step-failed\";\n const actionInputSummary = Boolean(action && summary === `${action} input`);\n return {\n stepId,\n ...(action ? { action } : {}),\n suppressSummary: genericStepSummary || actionInputSummary,\n };\n }\n\n if (record.kind === \"error\") {\n return {\n stepId,\n ...(payloadAction ? { action: payloadAction } : {}),\n };\n }\n\n return { stepId };\n}\n\n/**\n * Groups runtime phase and scan keys into one colored token for fast scanning.\n * Example: `tool`, `output`, `step-002`, `triage-file` -> `tool:output step=step-002 action=triage-file`.\n */\nfunction formatHumanHeaderTag(record: RuntimeLogRecord): string {\n const metadata = extractHeaderMetadata(record);\n const isStateUserMessage = record.kind === \"user-message\"\n && Boolean(metadata.from && metadata.to && metadata.stepId && metadata.action);\n const parts = isStateUserMessage\n ? [\n `${record.kind}:${record.phase}`,\n `${metadata.stepId} ${metadata.from} -> ${metadata.to}`,\n `| action=${metadata.action}`,\n ]\n : [\n `${record.kind}:${record.phase}`,\n metadata.stepId ? `step=${metadata.stepId}` : \"\",\n metadata.action ? `action=${metadata.action}` : \"\",\n metadata.label ? `label=${metadata.label}` : \"\",\n ].filter(Boolean);\n return colorHumanHeaderTag(record.kind, parts.join(\" \"));\n}\n\nfunction formatHumanRecord(record: RuntimeLogRecord): string {\n const timestamp = formatHumanTimestamp(record.at ?? nowLocalIso());\n const runtime = record.runtime ?? \"shared\";\n const metadata = extractHeaderMetadata(record);\n const ids = [\n record.sessionId ? `session=${record.sessionId}` : \"\",\n record.taskId !== undefined ? `task=${record.taskId}` : \"\",\n ].filter(Boolean).join(\" \");\n const status = record.status ? ` status=${record.status}` : \"\";\n const visibleSummary = metadata.summaryOverride ?? record.summary;\n const summary = metadata.suppressSummary || !visibleSummary ? \"\" : ` ${visibleSummary}`;\n const payload = stringifyPayload(record.payload);\n const header = `[${timestamp}] [${runtime}] [${formatHumanHeaderTag(record)}]${status}${ids ? ` ${ids}` : \"\"}${summary}`;\n return payload ? `${header}\\n${payload}\\n` : `${header}\\n`;\n}\n\nexport function appendHumanRuntimeEntry(entry: string): void {\n try {\n ensureHomeDir();\n fs.appendFileSync(RUNTIME_LOG_PATH, entry.endsWith(\"\\n\") ? entry : `${entry}\\n`, \"utf-8\");\n } catch (err) {\n log(\"ā Failed to append runtime log entry:\", err);\n }\n}\n\nexport function appendRunStartSection(runtime: RuntimeLogRecord[\"runtime\"], query: string): void {\n appendHumanRuntimeEntry(formatRunStartSection(runtime, query));\n}\n\nexport function logRunStart(runtime: RuntimeLogRecord[\"runtime\"], query: string): RuntimeLogRecord {\n appendRunStartSection(runtime, query);\n return logRuntimeRecord({\n runtime,\n kind: \"task\",\n phase: \"created\",\n status: \"active\",\n summary: \"run started\",\n payload: {\n boundary: \"start\",\n title: getRunTitle(runtime),\n query: query.trim(),\n },\n });\n}\n\nexport function logRuntimeRecord(record: RuntimeLogRecord): RuntimeLogRecord {\n const normalized: RuntimeLogRecord = {\n ...record,\n at: formatLocalIso(record.at ?? nowLocalIso()),\n runtime: record.runtime ?? \"shared\",\n };\n try {\n ensureHomeDir();\n appendHumanRuntimeEntry(formatHumanRecord(normalized));\n fs.appendFileSync(RUNTIME_NDJSON_PATH, `${JSON.stringify(normalized)}\\n`, \"utf-8\");\n } catch (err) {\n log(\"ā Failed to write runtime log record:\", err);\n }\n return normalized;\n}\n\nexport function clearRuntimeLogs(): void {\n try {\n ensureHomeDir();\n fs.writeFileSync(RUNTIME_LOG_PATH, \"\", { flag: \"w\" });\n fs.writeFileSync(RUNTIME_NDJSON_PATH, \"\", { flag: \"w\" });\n } catch (err) {\n log(\"ā Failed to clear runtime logs:\", err);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeQuery.js","sourceRoot":"","sources":["../../src/utils/sanitizeQuery.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG;SACP,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAW,gBAAgB;SAC/C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAU,4BAA4B;SAC3D,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,0BAA0B;SAC3D,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAW,yCAAyC;SACxE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAQ,2BAA2B;SAC1D,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAa,2BAA2B;SAC1D,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAQ,qCAAqC;SACpE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAW,sBAAsB;SACrD,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;SACxB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;SACvF,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,wBAAwB;IAEjD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,KAAK;SACjB,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,KAAK,CAAC,EAAE;QACX,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK;aACT,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;SACD,MAAM,CAAC,KAAK,CAAC,EAAE,CACd,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAC5C;SACA,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACvD,CAAC","sourcesContent":["// src/utils/sanitizeQuery.ts\r\nimport { STOP_WORDS } from '../fileRules/stopWords.js';\r\n\r\n// Stage 1: normalize junk out of query\r\nexport function basicCleanup(raw: string): string {\r\n return raw\r\n .replace(/[\"']/g, '') // remove quotes\r\n .replace(/[()]/g, ' ') // replace parens with space\r\n .replace(/\\bOR\\b|\\bAND\\b/gi, ' ') // strip boolean operators\r\n .replace(/\\w+:/g, '') // remove field prefixes like path:, ext:\r\n .replace(/[<>=*]/g, ' ') // remove invalid operators\r\n .replace(/\\\\/g, '') // remove stray backslashes\r\n .replace(/<[^>]+>/g, '') // strip placeholders like <endpoint>\r\n .replace(/\\s+/g, ' ') // collapse whitespace\r\n .trim();\r\n}\r\n\r\n// Stage 2: tokenize & prepare for FTS5\r\nexport function sanitizeQueryForFts(input: string): string {\r\n input = basicCleanup(input)\r\n .toLowerCase()\r\n .replace(/\\(([^)]+)\\)/g, (_, inner) => inner.replace(/[|]/g, ' ')) // expand grouped ORs\r\n .replace(/[|]/g, ' '); // handle standalone ORs\r\n\r\n if (/^[\\w\\-./]+$/.test(input) && !/\\s/.test(input)) {\r\n return `\"${input.replace(/\"/g, '\"\"')}\"*`;\r\n }\r\n\r\n const tokens = input\r\n .split(/\\s+/)\r\n .map(token => {\r\n if (/[\\w]+\\.[a-z0-9]+$/.test(token)) {\r\n return `\"${token.replace(/\"/g, '\"\"')}\"`;\r\n }\r\n return token\r\n .replace(/[^a-z0-9_*\"]/gi, '')\r\n .replace(/'/g, \"''\");\r\n })\r\n .filter(token =>\r\n token.length > 2 &&\r\n !STOP_WORDS.has(token.replace(/[*\"]/g, ''))\r\n )\r\n .map(token => (token.startsWith('\"') ? token : token + '*'));\r\n\r\n return tokens.length > 0 ? tokens.join(' OR ') : '*';\r\n}\r\n\r\n"]}
|
|
@@ -6,3 +6,4 @@ export function getUniqueId(name, filePath, startLine, startColumn, content) {
|
|
|
6
6
|
const hash = crypto.createHash('md5').update(content).digest('hex').slice(0, 6);
|
|
7
7
|
return `${name}@${normalizedPath}:${startLine}:${startColumn}:${hash}`;
|
|
8
8
|
}
|
|
9
|
+
//# sourceMappingURL=sharedUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedUtils.js","sourceRoot":"","sources":["../../src/utils/sharedUtils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CACvB,IAAY,EACZ,QAAgB,EAChB,SAAiB,EACjB,WAAmB,EACnB,OAAe;IAEf,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,IAAI,IAAI,cAAc,IAAI,SAAS,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;AAC3E,CAAC","sourcesContent":["import path from 'path';\nimport crypto from 'crypto';\n\n// put this helper at top-level (or import from shared utils)\nexport function getUniqueId(\n name: string,\n filePath: string,\n startLine: number,\n startColumn: number,\n content: string\n) {\n const normalizedPath = path.normalize(filePath).replace(/\\\\/g, '/');\n const hash = crypto.createHash('md5').update(content).digest('hex').slice(0, 6);\n return `${name}@${normalizedPath}:${startLine}:${startColumn}:${hash}`;\n}"]}
|
package/dist/utils/sleep.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/utils/sleep.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["export function sleep(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitCodeIntoChunk.js","sourceRoot":"","sources":["../../src/utils/splitCodeIntoChunk.ts"],"names":[],"mappings":"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","sourcesContent":["import { encode } from \"gpt-3-encoder\";\r\n\r\n/**\r\n * Split code into semantically safer chunks.\r\n *\r\n * Strategy:\r\n * - Aim for `softLimit` tokens\r\n * - Allow overflow up to `hardLimit` to finish structural blocks\r\n * - Never split inside functions, try-chains, comments, or open delimiters\r\n */\r\nexport function splitCodeIntoChunks(\r\n text: string,\r\n softLimit: number = 2200, // ā¬
ļø increased from 1000\r\n hardLimitMultiplier: number = 1.35 // ā¬
ļø allows structural completion (~3000)\r\n): string[] {\r\n const hardLimit = Math.floor(softLimit * hardLimitMultiplier);\r\n\r\n const lines = text.split(\"\\n\");\r\n const chunks: string[] = [];\r\n\r\n let currentChunkLines: string[] = [];\r\n let currentTokens = 0;\r\n\r\n // āāāāāāāāāāāāā State tracking āāāāāāāāāāāāā\r\n let inMultiComment = false;\r\n\r\n let inFunction = false;\r\n let functionBraceDepth = 0;\r\n let justClosedFunction = false;\r\n\r\n let inTryBlock = false;\r\n let inTryChain = false;\r\n let tryChainHasHandler = false;\r\n let tryBraceDepth = 0;\r\n let justClosedTryBlock = false;\r\n\r\n let globalBraceDepth = 0;\r\n let parenDepth = 0;\r\n let bracketDepth = 0;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n justClosedFunction = false;\r\n justClosedTryBlock = false;\r\n\r\n // ---------- multi-line comments ----------\r\n if (trimmed.includes(\"/*\") && !trimmed.includes(\"*/\")) inMultiComment = true;\r\n if (trimmed.includes(\"*/\")) inMultiComment = false;\r\n\r\n // ---------- function / class start ----------\r\n const isFunctionStart =\r\n trimmed.startsWith(\"function \") ||\r\n trimmed.startsWith(\"async function \") ||\r\n trimmed.startsWith(\"class \") ||\r\n /^\\w+\\s*=\\s*\\(.*\\)\\s*=>\\s*{/.test(trimmed);\r\n\r\n if (!inFunction && isFunctionStart) {\r\n inFunction = true;\r\n functionBraceDepth = 0;\r\n }\r\n\r\n // ---------- try / catch / finally ----------\r\n if (!inTryChain && trimmed.startsWith(\"try\")) {\r\n inTryChain = true;\r\n inTryBlock = true;\r\n tryBraceDepth = 0;\r\n }\r\n\r\n if (\r\n inTryChain &&\r\n (trimmed.startsWith(\"catch\") || trimmed.startsWith(\"finally\"))\r\n ) {\r\n inTryBlock = true;\r\n tryChainHasHandler = true;\r\n }\r\n\r\n // ---------- depth tracking ----------\r\n for (const char of line) {\r\n switch (char) {\r\n case \"{\":\r\n globalBraceDepth++;\r\n if (inFunction) functionBraceDepth++;\r\n if (inTryChain) tryBraceDepth++;\r\n break;\r\n\r\n case \"}\":\r\n globalBraceDepth = Math.max(0, globalBraceDepth - 1);\r\n\r\n if (inFunction) {\r\n functionBraceDepth = Math.max(0, functionBraceDepth - 1);\r\n if (functionBraceDepth === 0) justClosedFunction = true;\r\n }\r\n\r\n if (inTryChain) {\r\n tryBraceDepth = Math.max(0, tryBraceDepth - 1);\r\n if (tryBraceDepth === 0) justClosedTryBlock = true;\r\n }\r\n break;\r\n\r\n case \"(\":\r\n parenDepth++;\r\n break;\r\n\r\n case \")\":\r\n parenDepth = Math.max(0, parenDepth - 1);\r\n break;\r\n\r\n case \"[\":\r\n bracketDepth++;\r\n break;\r\n\r\n case \"]\":\r\n bracketDepth = Math.max(0, bracketDepth - 1);\r\n break;\r\n }\r\n }\r\n\r\n if (justClosedFunction) inFunction = false;\r\n\r\n if (justClosedTryBlock) {\r\n inTryBlock = false;\r\n if (tryChainHasHandler) {\r\n inTryChain = false;\r\n tryChainHasHandler = false;\r\n }\r\n }\r\n\r\n // ---------- add line ----------\r\n currentChunkLines.push(line);\r\n currentTokens += encode(line + \"\\n\").length;\r\n\r\n // ---------- split decision ----------\r\n const softLimitReached = currentTokens >= softLimit;\r\n const hardLimitReached = currentTokens >= hardLimit;\r\n\r\n /**\r\n * Safe split means:\r\n * - no open comments\r\n * - not inside function or try-chain\r\n * - no dangling delimiters\r\n * - not immediately after a structural close\r\n */\r\n const safeToSplit =\r\n !inMultiComment &&\r\n !inFunction &&\r\n !inTryChain &&\r\n !justClosedFunction &&\r\n !justClosedTryBlock &&\r\n functionBraceDepth === 0 &&\r\n parenDepth === 0 &&\r\n bracketDepth === 0;\r\n\r\n // Prefer soft limit + safety, but enforce hard limit regardless\r\n if ((softLimitReached && safeToSplit) || hardLimitReached) {\r\n chunks.push(currentChunkLines.join(\"\\n\"));\r\n currentChunkLines = [];\r\n currentTokens = 0;\r\n }\r\n }\r\n\r\n if (currentChunkLines.length > 0) {\r\n chunks.push(currentChunkLines.join(\"\\n\"));\r\n }\r\n\r\n return chunks;\r\n}\r\n\r\nexport function countTokens(text: string): number {\r\n return encode(text).length;\r\n}\r\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats local machine timestamps for logs and short runtime timing helpers.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - log-facing time should stay consistent across runtime logs, debug logs, and traces
|
|
6
|
+
* - local time with offset is easier to compare with the operator's machine clock
|
|
7
|
+
* - one helper avoids mixed UTC and local rendering across modules
|
|
8
|
+
*/
|
|
9
|
+
function pad(value, width = 2) {
|
|
10
|
+
return String(value).padStart(width, "0");
|
|
11
|
+
}
|
|
12
|
+
function formatOffset(date) {
|
|
13
|
+
const offsetMinutes = -date.getTimezoneOffset();
|
|
14
|
+
const sign = offsetMinutes >= 0 ? "+" : "-";
|
|
15
|
+
const absoluteOffset = Math.abs(offsetMinutes);
|
|
16
|
+
const hours = Math.floor(absoluteOffset / 60);
|
|
17
|
+
const minutes = absoluteOffset % 60;
|
|
18
|
+
return `${sign}${pad(hours)}:${pad(minutes)}`;
|
|
19
|
+
}
|
|
20
|
+
function formatLocalDateParts(date) {
|
|
21
|
+
return {
|
|
22
|
+
datePart: `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`,
|
|
23
|
+
timePart: `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}.${pad(date.getMilliseconds(), 3)}`,
|
|
24
|
+
offsetPart: formatOffset(date),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns one local ISO-like timestamp with the machine offset.
|
|
29
|
+
* Example: `2026-05-01T12:15:00.123+02:00`.
|
|
30
|
+
*/
|
|
31
|
+
export function nowLocalIso() {
|
|
32
|
+
return formatLocalIso(new Date());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Formats a parseable timestamp into local ISO-like time with offset.
|
|
36
|
+
* Example: `2026-05-01T10:15:00.123Z` -> `2026-05-01T12:15:00.123+02:00`.
|
|
37
|
+
*/
|
|
38
|
+
export function formatLocalIso(timestamp) {
|
|
39
|
+
const date = timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
40
|
+
if (Number.isNaN(date.getTime())) {
|
|
41
|
+
return String(timestamp);
|
|
42
|
+
}
|
|
43
|
+
const { datePart, timePart, offsetPart } = formatLocalDateParts(date);
|
|
44
|
+
return `${datePart}T${timePart}${offsetPart}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Formats one parseable timestamp for human log headers.
|
|
48
|
+
* Example: `2026-05-01T10:15:00.123Z` -> `2026-05-01 12:15:00 +02:00`.
|
|
49
|
+
*/
|
|
50
|
+
export function formatHumanTimestamp(timestamp) {
|
|
51
|
+
const date = timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
52
|
+
if (Number.isNaN(date.getTime())) {
|
|
53
|
+
return String(timestamp);
|
|
54
|
+
}
|
|
55
|
+
const { datePart, timePart, offsetPart } = formatLocalDateParts(date);
|
|
56
|
+
return `${datePart} ${timePart.slice(0, 8)} ${offsetPart}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Creates a small wall-clock timer for one logical operation.
|
|
60
|
+
* Example: `const stop = startTimer(); ... stop() -> 42`.
|
|
61
|
+
*/
|
|
62
|
+
export function startTimer() {
|
|
63
|
+
const startedAt = Date.now();
|
|
64
|
+
return () => Date.now() - startedAt;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Formats local machine timestamps for logs and short runtime timing helpers.\n *\n * Why this file exists:\n * - log-facing time should stay consistent across runtime logs, debug logs, and traces\n * - local time with offset is easier to compare with the operator's machine clock\n * - one helper avoids mixed UTC and local rendering across modules\n */\n\nfunction pad(value: number, width = 2): string {\n return String(value).padStart(width, \"0\");\n}\n\nfunction formatOffset(date: Date): string {\n const offsetMinutes = -date.getTimezoneOffset();\n const sign = offsetMinutes >= 0 ? \"+\" : \"-\";\n const absoluteOffset = Math.abs(offsetMinutes);\n const hours = Math.floor(absoluteOffset / 60);\n const minutes = absoluteOffset % 60;\n return `${sign}${pad(hours)}:${pad(minutes)}`;\n}\n\nfunction formatLocalDateParts(date: Date): {\n datePart: string;\n timePart: string;\n offsetPart: string;\n} {\n return {\n datePart: `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`,\n timePart: `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}.${pad(date.getMilliseconds(), 3)}`,\n offsetPart: formatOffset(date),\n };\n}\n\n/**\n * Returns one local ISO-like timestamp with the machine offset.\n * Example: `2026-05-01T12:15:00.123+02:00`.\n */\nexport function nowLocalIso(): string {\n return formatLocalIso(new Date());\n}\n\n/**\n * Formats a parseable timestamp into local ISO-like time with offset.\n * Example: `2026-05-01T10:15:00.123Z` -> `2026-05-01T12:15:00.123+02:00`.\n */\nexport function formatLocalIso(timestamp: string | Date): string {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) {\n return String(timestamp);\n }\n\n const { datePart, timePart, offsetPart } = formatLocalDateParts(date);\n return `${datePart}T${timePart}${offsetPart}`;\n}\n\n/**\n * Formats one parseable timestamp for human log headers.\n * Example: `2026-05-01T10:15:00.123Z` -> `2026-05-01 12:15:00 +02:00`.\n */\nexport function formatHumanTimestamp(timestamp: string | Date): string {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) {\n return String(timestamp);\n }\n\n const { datePart, timePart, offsetPart } = formatLocalDateParts(date);\n return `${datePart} ${timePart.slice(0, 8)} ${offsetPart}`;\n}\n\n/**\n * Creates a small wall-clock timer for one logical operation.\n * Example: `const stop = startTimer(); ... stop() -> 42`.\n */\nexport function startTimer(): () => number {\n const startedAt = Date.now();\n return () => Date.now() - startedAt;\n}\n"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes shared file-preference signals for verify-heavy repo-wide queries.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - retrieval, verify focus refinement, and final grounding all need the same preference policy
|
|
6
|
+
* - verify-focused questions should favor real verify pipeline files over broad docs or preload-only files
|
|
7
|
+
* - callers combine this preference with their own local evidence instead of persisting one global score
|
|
8
|
+
*/
|
|
9
|
+
import path from "path";
|
|
10
|
+
import { extractFileReferences } from "./extractFileReferences.js";
|
|
11
|
+
const VERIFY_FOCUS_QUERY_TERMS = [
|
|
12
|
+
"selectedfiles",
|
|
13
|
+
"candidatefiles",
|
|
14
|
+
"verify",
|
|
15
|
+
"wave",
|
|
16
|
+
"waves",
|
|
17
|
+
"budget",
|
|
18
|
+
"maxwaves",
|
|
19
|
+
"groundingbudget",
|
|
20
|
+
"readiness",
|
|
21
|
+
"focus",
|
|
22
|
+
"trace",
|
|
23
|
+
];
|
|
24
|
+
const VERIFY_FOCUS_STRONG_TERMS = [
|
|
25
|
+
"selectedfiles",
|
|
26
|
+
"candidatefiles",
|
|
27
|
+
"verify",
|
|
28
|
+
"budget",
|
|
29
|
+
"groundingbudget",
|
|
30
|
+
];
|
|
31
|
+
const VERIFY_FOCUS_PREFERRED_HINTS = [
|
|
32
|
+
{ hint: "getgroundingwavebudget", score: 1.35 },
|
|
33
|
+
{ hint: "mainagentverify", score: 1.2 },
|
|
34
|
+
{ hint: "filecheckstep", score: 1.1 },
|
|
35
|
+
{ hint: "readinessgatestep", score: 1.05 },
|
|
36
|
+
{ hint: "selectrelevantsourcesstep", score: 1.0 },
|
|
37
|
+
{ hint: "executionpolicyresolver", score: 0.9 },
|
|
38
|
+
];
|
|
39
|
+
const VERIFY_FOCUS_DEBOOST_HINTS = [
|
|
40
|
+
{ hint: "analysisplangenstep", score: -0.45 },
|
|
41
|
+
{ hint: "structuralpreloadstep", score: -0.5 },
|
|
42
|
+
{ hint: "/readme.md", score: -0.35 },
|
|
43
|
+
{ hint: "/agents.md", score: -0.35 },
|
|
44
|
+
{ hint: "/changelog.md", score: -0.35 },
|
|
45
|
+
];
|
|
46
|
+
const VERIFY_FOCUS_TEXT_SIGNALS = [
|
|
47
|
+
{ term: "selectedfiles", score: 0.4 },
|
|
48
|
+
{ term: "candidatefiles", score: 0.4 },
|
|
49
|
+
{ term: "groundingbudget", score: 0.45 },
|
|
50
|
+
{ term: "maxwaves", score: 0.35 },
|
|
51
|
+
{ term: "budget", score: 0.2 },
|
|
52
|
+
{ term: "readiness", score: 0.2 },
|
|
53
|
+
{ term: "verify", score: 0.2 },
|
|
54
|
+
];
|
|
55
|
+
/**
|
|
56
|
+
* Detects real verify-flow questions and avoids boosting unrelated trace queries.
|
|
57
|
+
* Example: "Trace selectedFiles across verify waves" => true.
|
|
58
|
+
* Example: "Trace SQLite queries in db/client.ts" => false.
|
|
59
|
+
*/
|
|
60
|
+
export function isVerifyFocusQueryText(query) {
|
|
61
|
+
const queryLower = query.toLowerCase();
|
|
62
|
+
const matchedTerms = VERIFY_FOCUS_QUERY_TERMS.filter(term => queryLower.includes(term));
|
|
63
|
+
if (matchedTerms.length < 2)
|
|
64
|
+
return false;
|
|
65
|
+
const strongMatchCount = VERIFY_FOCUS_STRONG_TERMS.filter(term => queryLower.includes(term)).length;
|
|
66
|
+
return strongMatchCount > 0;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns a reusable verify-focus preference score for one file.
|
|
70
|
+
* Example: `mainAgentVerify.ts` with selectedFiles evidence scores above `README.md`.
|
|
71
|
+
*/
|
|
72
|
+
export function getVerifyFocusFilePreference(args) {
|
|
73
|
+
if (!isVerifyFocusQueryText(args.query)) {
|
|
74
|
+
return { applies: false, score: 0, reasons: [] };
|
|
75
|
+
}
|
|
76
|
+
const explicitRefs = args.explicitRefs ?? extractFileReferences(args.query, { lowercase: true });
|
|
77
|
+
const explicitBasenames = new Set(explicitRefs.map(ref => path.basename(ref)));
|
|
78
|
+
const fileLower = args.filePath.toLowerCase();
|
|
79
|
+
const basename = path.basename(fileLower);
|
|
80
|
+
const searchableText = `${args.evidenceText ?? ""} ${args.contentText ?? ""}`.toLowerCase();
|
|
81
|
+
let score = 0;
|
|
82
|
+
const reasons = [];
|
|
83
|
+
for (const { hint, score: hintScore } of VERIFY_FOCUS_PREFERRED_HINTS) {
|
|
84
|
+
if (basename.includes(hint) || fileLower.includes(hint)) {
|
|
85
|
+
score += hintScore;
|
|
86
|
+
reasons.push(`prefer:${hint}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const { hint, score: hintScore } of VERIFY_FOCUS_DEBOOST_HINTS) {
|
|
90
|
+
if ((basename.includes(hint) || fileLower.includes(hint)) && !explicitBasenames.has(basename)) {
|
|
91
|
+
score += hintScore;
|
|
92
|
+
reasons.push(`deboost:${hint}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const { term, score: termScore } of VERIFY_FOCUS_TEXT_SIGNALS) {
|
|
96
|
+
if (fileLower.includes(term)) {
|
|
97
|
+
score += termScore;
|
|
98
|
+
reasons.push(`path-signal:${term}`);
|
|
99
|
+
}
|
|
100
|
+
if (searchableText.includes(term)) {
|
|
101
|
+
score += termScore;
|
|
102
|
+
reasons.push(`text-signal:${term}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { applies: true, score, reasons };
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=verifyFocusPreference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyFocusPreference.js","sourceRoot":"","sources":["../../src/utils/verifyFocusPreference.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Computes shared file-preference signals for verify-heavy repo-wide queries.\n *\n * Why this exists:\n * - retrieval, verify focus refinement, and final grounding all need the same preference policy\n * - verify-focused questions should favor real verify pipeline files over broad docs or preload-only files\n * - callers combine this preference with their own local evidence instead of persisting one global score\n */\nimport path from \"path\";\nimport { extractFileReferences } from \"./extractFileReferences.js\";\n\nconst VERIFY_FOCUS_QUERY_TERMS = [\n \"selectedfiles\",\n \"candidatefiles\",\n \"verify\",\n \"wave\",\n \"waves\",\n \"budget\",\n \"maxwaves\",\n \"groundingbudget\",\n \"readiness\",\n \"focus\",\n \"trace\",\n];\n\nconst VERIFY_FOCUS_STRONG_TERMS = [\n \"selectedfiles\",\n \"candidatefiles\",\n \"verify\",\n \"budget\",\n \"groundingbudget\",\n];\n\nconst VERIFY_FOCUS_PREFERRED_HINTS: Array<{ hint: string; score: number }> = [\n { hint: \"getgroundingwavebudget\", score: 1.35 },\n { hint: \"mainagentverify\", score: 1.2 },\n { hint: \"filecheckstep\", score: 1.1 },\n { hint: \"readinessgatestep\", score: 1.05 },\n { hint: \"selectrelevantsourcesstep\", score: 1.0 },\n { hint: \"executionpolicyresolver\", score: 0.9 },\n];\n\nconst VERIFY_FOCUS_DEBOOST_HINTS: Array<{ hint: string; score: number }> = [\n { hint: \"analysisplangenstep\", score: -0.45 },\n { hint: \"structuralpreloadstep\", score: -0.5 },\n { hint: \"/readme.md\", score: -0.35 },\n { hint: \"/agents.md\", score: -0.35 },\n { hint: \"/changelog.md\", score: -0.35 },\n];\n\nconst VERIFY_FOCUS_TEXT_SIGNALS: Array<{ term: string; score: number }> = [\n { term: \"selectedfiles\", score: 0.4 },\n { term: \"candidatefiles\", score: 0.4 },\n { term: \"groundingbudget\", score: 0.45 },\n { term: \"maxwaves\", score: 0.35 },\n { term: \"budget\", score: 0.2 },\n { term: \"readiness\", score: 0.2 },\n { term: \"verify\", score: 0.2 },\n];\n\nexport type VerifyFocusPreference = {\n applies: boolean;\n score: number;\n reasons: string[];\n};\n\n/**\n * Detects real verify-flow questions and avoids boosting unrelated trace queries.\n * Example: \"Trace selectedFiles across verify waves\" => true.\n * Example: \"Trace SQLite queries in db/client.ts\" => false.\n */\nexport function isVerifyFocusQueryText(query: string): boolean {\n const queryLower = query.toLowerCase();\n const matchedTerms = VERIFY_FOCUS_QUERY_TERMS.filter(term => queryLower.includes(term));\n if (matchedTerms.length < 2) return false;\n\n const strongMatchCount = VERIFY_FOCUS_STRONG_TERMS.filter(term => queryLower.includes(term)).length;\n return strongMatchCount > 0;\n}\n\n/**\n * Returns a reusable verify-focus preference score for one file.\n * Example: `mainAgentVerify.ts` with selectedFiles evidence scores above `README.md`.\n */\nexport function getVerifyFocusFilePreference(args: {\n query: string;\n filePath: string;\n evidenceText?: string;\n contentText?: string;\n explicitRefs?: string[];\n}): VerifyFocusPreference {\n if (!isVerifyFocusQueryText(args.query)) {\n return { applies: false, score: 0, reasons: [] };\n }\n\n const explicitRefs = args.explicitRefs ?? extractFileReferences(args.query, { lowercase: true });\n const explicitBasenames = new Set(explicitRefs.map(ref => path.basename(ref)));\n const fileLower = args.filePath.toLowerCase();\n const basename = path.basename(fileLower);\n const searchableText = `${args.evidenceText ?? \"\"} ${args.contentText ?? \"\"}`.toLowerCase();\n let score = 0;\n const reasons: string[] = [];\n\n for (const { hint, score: hintScore } of VERIFY_FOCUS_PREFERRED_HINTS) {\n if (basename.includes(hint) || fileLower.includes(hint)) {\n score += hintScore;\n reasons.push(`prefer:${hint}`);\n }\n }\n\n for (const { hint, score: hintScore } of VERIFY_FOCUS_DEBOOST_HINTS) {\n if ((basename.includes(hint) || fileLower.includes(hint)) && !explicitBasenames.has(basename)) {\n score += hintScore;\n reasons.push(`deboost:${hint}`);\n }\n }\n\n for (const { term, score: termScore } of VERIFY_FOCUS_TEXT_SIGNALS) {\n if (fileLower.includes(term)) {\n score += termScore;\n reasons.push(`path-signal:${term}`);\n }\n if (searchableText.includes(term)) {\n score += termScore;\n reasons.push(`text-signal:${term}`);\n }\n }\n\n return { applies: true, score, reasons };\n}\n"]}
|
package/dist/utils/vscode.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/utils/vscode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,QAAgB,EAChB,WAAmB;IAEnB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAEpE,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;QAE9D,0CAA0C;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,wCAAwC;gBACxC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACL,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,IAAI,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE;YAChE,KAAK,EAAE,SAAS;SACnB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CACT,wFAAwF,CAC3F,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;AACL,CAAC","sourcesContent":["import fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { spawn } from \"child_process\";\n\n/**\n * Opens a visual diff in VS Code between the original and modified versions.\n *\n * @param filePath - The path or name of the file being diffed.\n * @param diffContent - The unified diff text for that file.\n */\nexport async function openDiffInVSCode(\n filePath: string,\n diffContent: string\n): Promise<void> {\n try {\n const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"scai-diff-\"));\n\n // Temporary file paths\n const baseName = path.basename(filePath);\n const originalPath = path.join(tmpDir, `${baseName}_OLD.tmp`);\n const modifiedPath = path.join(tmpDir, `${baseName}_NEW.tmp`);\n\n // Extract file versions from unified diff\n const oldLines: string[] = [];\n const newLines: string[] = [];\n\n for (const line of diffContent.split(\"\\n\")) {\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) {\n newLines.push(line.slice(1));\n } else if (line.startsWith(\"-\") && !line.startsWith(\"---\")) {\n oldLines.push(line.slice(1));\n } else if (!line.startsWith(\"@@\")) {\n // context lines appear in both versions\n oldLines.push(line);\n newLines.push(line);\n }\n }\n\n fs.writeFileSync(originalPath, oldLines.join(\"\\n\"), \"utf-8\");\n fs.writeFileSync(modifiedPath, newLines.join(\"\\n\"), \"utf-8\");\n\n console.log(`\\nš Opening VS Code diff:`);\n console.log(` ${originalPath}`);\n console.log(`ā ${modifiedPath}\\n`);\n\n const child = spawn(\"code\", [\"--diff\", originalPath, modifiedPath], {\n stdio: \"inherit\",\n });\n\n child.on(\"error\", () => {\n console.error(\n \"ā Failed to open diff in VS Code. Ensure the 'code' CLI is installed and in your PATH.\"\n );\n });\n } catch (err) {\n console.error(\"ā Error while preparing diff for VS Code:\", err);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowResolver.js","sourceRoot":"","sources":["../../src/workflow/workflowResolver.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC1C,2CAA2C;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["// src/agents/WorkflowResolver.ts\r\nimport { resolveModulesByNames } from \"../pipeline/registry/moduleRegistry.js\";\r\n\r\n/**\r\n * Simple resolver function to compute module order (honours before/after relationships).\r\n * This replaces the previous Workflow class used only to resolve modules.\r\n *\r\n * Returns an array of PromptModuleMeta (the existing shape your registry returns).\r\n */\r\nexport function resolveModules(goals: string[]) {\r\n // Trim and validate names here (defensive)\r\n const trimmed = goals.map((g) => (typeof g === \"string\" ? g.trim() : g));\r\n const modules = resolveModulesByNames(trimmed);\r\n return modules;\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowRunner.js","sourceRoot":"","sources":["../../src/workflow/workflowRunner.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAKjC;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE5D,MAAM,EAAE,GAAa;gBACnB,KAAK,EAAE,WAAW,QAAQ,IAAI,SAAS,SAAS,GAAG,CAAC,IAAI,EAAE;gBAC1D,OAAO,EAAE,WAAW;aACrB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEjC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,MAAM,GACV,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC7B,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAE3C,MAAM,IAAI,GACP,MAAc,CAAC,IAAI;gBACpB,WAAW,CAAC,CAAC,0CAA0C;YACzD,MAAM,WAAW,GAAI,MAAc,CAAC,WAAW,CAAC;YAEhD,EAAE;YACF,sCAAsC;YACtC,EAAE;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,uCAAuC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,WAAW,GAAG,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,EAAE;YACF,2DAA2D;YAC3D,EAAE;YACF,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,WAAW;oBACd,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvD,WAAW,GAAG,MAAM,CAAC;oBACrB,MAAM;gBAER,KAAK,QAAQ;oBACX,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACpD,WAAW,IAAI,MAAM,CAAC;oBACtB,MAAM;gBAER,KAAK,SAAS;oBACZ,IAAI,CAAC,WAAW;wBACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACzD,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC/D,QAAQ,GAAG,WAAW,CAAC;oBACvB,WAAW,GAAG,MAAM,CAAC;oBACrB,MAAM;gBAER,KAAK,MAAM;oBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACrE,WAAW,GAAG,MAAM,CAAC;oBACrB,MAAM;gBAER;oBACE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAC1E,CAAC;oBACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC9C,WAAW,GAAG,MAAM,CAAC;oBACrB,MAAM;YACV,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QAC1E,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["// File: src/workflow/workflowRunner.ts\r\nimport fs from \"fs/promises\";\r\nimport chalk from \"chalk\";\r\nimport { normalizePath } from \"../utils/contentUtils.js\";\r\nimport type { Module, ModuleIO } from \"../types.js\";\r\n\r\n/**\r\n * runWorkflow - orchestrates running a modular I/O pipeline.\r\n *\r\n * Each module conforms to the `ModuleIO` interface:\r\n * input: { query, content? }\r\n * output: { data?, mode?, newFilepath? }\r\n *\r\n * Options:\r\n * - modules: ordered modules to run (Module[])\r\n * - filepath: optional file path to read/write\r\n * - inputContent: optional string for stdin content\r\n *\r\n * Behaviours:\r\n * - Sequentially runs each module on the full file content\r\n * - Supports output modes: overwrite, append, newFile, skip\r\n * - Stream mode (no filepath): prints final output to stdout\r\n */\r\nexport async function runWorkflow(opts: {\r\n modules: Module[];\r\n goals?: string[];\r\n filepath?: string;\r\n inputContent?: string;\r\n}) {\r\n const { modules } = opts;\r\n let filepath = opts.filepath;\r\n let fileContent = \"\";\r\n\r\n try {\r\n if (filepath) {\r\n filepath = normalizePath(filepath);\r\n await fs.access(filepath);\r\n fileContent = await fs.readFile(filepath, \"utf-8\");\r\n } else {\r\n fileContent = opts.inputContent ?? \"\";\r\n }\r\n\r\n for (const mod of modules) {\r\n console.log(chalk.cyan(`\\nāļø Running module: ${mod.name}`));\r\n\r\n const io: ModuleIO = {\r\n query: `Process ${filepath ?? \"<stdin>\"} with ${mod.name}`,\r\n content: fileContent,\r\n };\r\n\r\n const result = await mod.run(io);\r\n\r\n if (!result || !result.data || !String(result.data).trim()) {\r\n throw new Error(`ā ļø Empty result from module ${mod.name}`);\r\n }\r\n\r\n const output =\r\n typeof result.data === \"string\"\r\n ? result.data\r\n : JSON.stringify(result.data, null, 2);\r\n\r\n const mode =\r\n (result as any).mode ??\r\n \"overwrite\"; // default mode if not specified by module\r\n const newFilepath = (result as any).newFilepath;\r\n\r\n //\r\n // === Handle stdout vs file modes ===\r\n //\r\n if (!filepath) {\r\n // stdin mode: print directly to stdout\r\n process.stdout.write(output);\r\n fileContent = output;\r\n continue;\r\n }\r\n\r\n //\r\n // === File-backed mode handling (honor mode semantics) ===\r\n //\r\n switch (mode) {\r\n case \"overwrite\":\r\n await fs.writeFile(filepath, output, \"utf-8\");\r\n console.log(chalk.green(`ā
Overwritten: ${filepath}`));\r\n fileContent = output;\r\n break;\r\n\r\n case \"append\":\r\n await fs.appendFile(filepath, output, \"utf-8\");\r\n console.log(chalk.green(`ā
Appended: ${filepath}`));\r\n fileContent += output;\r\n break;\r\n\r\n case \"newFile\":\r\n if (!newFilepath)\r\n throw new Error(`newFile mode requires a newFilepath`);\r\n const resolvedNew = normalizePath(newFilepath);\r\n await fs.writeFile(resolvedNew, output, \"utf-8\");\r\n console.log(chalk.green(`ā
New file created: ${resolvedNew}`));\r\n filepath = resolvedNew;\r\n fileContent = output;\r\n break;\r\n\r\n case \"skip\":\r\n console.log(chalk.gray(`āļø Skipped writing for module ${mod.name}`));\r\n fileContent = output;\r\n break;\r\n\r\n default:\r\n console.log(\r\n chalk.yellow(`ā ļø Unknown mode (${String(mode)}). Treating as overwrite.`)\r\n );\r\n await fs.writeFile(filepath, output, \"utf-8\");\r\n fileContent = output;\r\n break;\r\n }\r\n }\r\n\r\n // Final stdout flush if running without filepath\r\n if (!opts.filepath) {\r\n process.stdout.write(\"\\n\");\r\n }\r\n } catch (err: any) {\r\n console.error(chalk.red(\"ā Error in workflow run:\"), err?.message ?? err);\r\n throw err;\r\n }\r\n}"]}
|