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,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Covers deterministic run diagnosis so reports and artifacts point to one likely owner.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - the diagnosis layer should stay cheap and deterministic
|
|
6
|
+
* - explicit contradictions should classify into one subsystem quickly
|
|
7
|
+
* - resumed direct answers should not be misclassified as execution failures
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { diagnoseRun, parseRunLogInsightsFromText } from "../../testing/runDiagnosis.js";
|
|
11
|
+
function payload(step, value) {
|
|
12
|
+
return [
|
|
13
|
+
"",
|
|
14
|
+
"====================================================================",
|
|
15
|
+
`📂 OUTPUT | ${step}`,
|
|
16
|
+
"====================================================================",
|
|
17
|
+
typeof value === "string" ? value : JSON.stringify(value, null, 2),
|
|
18
|
+
"====================================================================",
|
|
19
|
+
"",
|
|
20
|
+
].join("\n");
|
|
21
|
+
}
|
|
22
|
+
describe("runDiagnosis", () => {
|
|
23
|
+
it("classifies final answer plus deferred zero-step runs as persistence", () => {
|
|
24
|
+
const task = {
|
|
25
|
+
status: "deferred",
|
|
26
|
+
initial_query: "Explain routing in MainAgent.ts",
|
|
27
|
+
summary: "answer",
|
|
28
|
+
routing_decision_json: JSON.stringify({
|
|
29
|
+
allowSearch: false,
|
|
30
|
+
allowResearch: false,
|
|
31
|
+
allowTransform: false,
|
|
32
|
+
rationale: "route=explicit-target",
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
const routing = {
|
|
36
|
+
allowSearch: false,
|
|
37
|
+
allowResearch: false,
|
|
38
|
+
allowTransform: false,
|
|
39
|
+
rationale: "route=explicit-target",
|
|
40
|
+
};
|
|
41
|
+
const runLog = [
|
|
42
|
+
payload("resolveExplicitTargetsStep", {
|
|
43
|
+
resolvedTargetFiles: ["/repo/cli/src/agents/MainAgent.ts"],
|
|
44
|
+
enteredBroadFallback: false,
|
|
45
|
+
}),
|
|
46
|
+
payload("runtimeState", { phase: "route", lane: "explicit-target", status: "active" }),
|
|
47
|
+
payload("finalAnswerModule", { data: "answer" }),
|
|
48
|
+
].join("");
|
|
49
|
+
const diagnosis = diagnoseRun({
|
|
50
|
+
task,
|
|
51
|
+
steps: [],
|
|
52
|
+
routing,
|
|
53
|
+
insights: parseRunLogInsightsFromText(runLog, routing),
|
|
54
|
+
query: "Explain routing in cli/src/agents/MainAgent.ts.",
|
|
55
|
+
finalAnswerText: "answer",
|
|
56
|
+
passed: false,
|
|
57
|
+
});
|
|
58
|
+
expect(diagnosis.primaryCategory).toBe("persistence");
|
|
59
|
+
});
|
|
60
|
+
it("classifies broad fallback after explicit target resolution as routing", () => {
|
|
61
|
+
const routing = {
|
|
62
|
+
allowSearch: true,
|
|
63
|
+
allowResearch: false,
|
|
64
|
+
allowTransform: false,
|
|
65
|
+
rationale: "route=explicit-target",
|
|
66
|
+
};
|
|
67
|
+
const runLog = payload("resolveExplicitTargetsStep", {
|
|
68
|
+
resolvedTargetFiles: ["/repo/cli/src/agents/MainAgent.ts"],
|
|
69
|
+
enteredBroadFallback: true,
|
|
70
|
+
});
|
|
71
|
+
const diagnosis = diagnoseRun({
|
|
72
|
+
task: { status: "active", initial_query: "Explain routing", summary: null },
|
|
73
|
+
steps: [],
|
|
74
|
+
routing,
|
|
75
|
+
insights: parseRunLogInsightsFromText(runLog, routing),
|
|
76
|
+
query: "Explain routing in cli/src/agents/MainAgent.ts.",
|
|
77
|
+
finalAnswerText: "",
|
|
78
|
+
passed: false,
|
|
79
|
+
});
|
|
80
|
+
expect(diagnosis.primaryCategory).toBe("routing");
|
|
81
|
+
});
|
|
82
|
+
it("keeps direct continuity answers out of execution failure diagnosis", () => {
|
|
83
|
+
const routing = {
|
|
84
|
+
allowSearch: false,
|
|
85
|
+
allowResearch: false,
|
|
86
|
+
allowTransform: false,
|
|
87
|
+
rationale: "route=resume-continuity",
|
|
88
|
+
};
|
|
89
|
+
const runLog = [
|
|
90
|
+
payload("resumeContinuityStep", { kind: "continuity-summary" }),
|
|
91
|
+
payload("continuityRoutingAnalysisStep", { kind: "direct-resume-answer", answerNow: true }),
|
|
92
|
+
payload("continuityAnswerModule", { data: "Original task: ..." }),
|
|
93
|
+
].join("");
|
|
94
|
+
const diagnosis = diagnoseRun({
|
|
95
|
+
task: { status: "completed", initial_query: "where were we?", summary: "Original task: ..." },
|
|
96
|
+
steps: [],
|
|
97
|
+
routing,
|
|
98
|
+
insights: parseRunLogInsightsFromText(runLog, routing),
|
|
99
|
+
query: "where were we?",
|
|
100
|
+
finalAnswerText: "Original task: ...",
|
|
101
|
+
passed: true,
|
|
102
|
+
});
|
|
103
|
+
expect(diagnosis.primaryCategory).toBe("unknown");
|
|
104
|
+
});
|
|
105
|
+
it("classifies missing explicit answer anchors as answer-quality", () => {
|
|
106
|
+
const routing = {
|
|
107
|
+
allowSearch: false,
|
|
108
|
+
allowResearch: false,
|
|
109
|
+
allowTransform: false,
|
|
110
|
+
rationale: "route=explicit-target",
|
|
111
|
+
};
|
|
112
|
+
const runLog = payload("finalAnswerModule", { data: "This file handles routing in broad terms." });
|
|
113
|
+
const diagnosis = diagnoseRun({
|
|
114
|
+
task: { status: "completed", initial_query: "Explain cli/src/agents/MainAgent.ts", summary: "This file handles routing in broad terms." },
|
|
115
|
+
steps: [],
|
|
116
|
+
routing,
|
|
117
|
+
insights: parseRunLogInsightsFromText(runLog, routing),
|
|
118
|
+
query: "Explain cli/src/agents/MainAgent.ts",
|
|
119
|
+
finalAnswerText: "This file handles routing in broad terms.",
|
|
120
|
+
passed: false,
|
|
121
|
+
});
|
|
122
|
+
expect(diagnosis.primaryCategory).toBe("answer-quality");
|
|
123
|
+
});
|
|
124
|
+
it("classifies stale exact-target eval failures as reporting drift", () => {
|
|
125
|
+
const routing = {
|
|
126
|
+
allowSearch: false,
|
|
127
|
+
allowResearch: false,
|
|
128
|
+
allowTransform: false,
|
|
129
|
+
rationale: "route=explicit-target",
|
|
130
|
+
};
|
|
131
|
+
const runLog = [
|
|
132
|
+
payload("resolveExplicitTargetsStep", {
|
|
133
|
+
resolvedTargetFiles: ["/repo/cli/src/db/fileIndex.ts", "/repo/cli/src/db/client.ts"],
|
|
134
|
+
enteredBroadFallback: false,
|
|
135
|
+
}),
|
|
136
|
+
payload("runtimeState", { phase: "route", lane: "explicit-target", status: "active" }),
|
|
137
|
+
payload("finalAnswerModule", { data: "Queries are defined in sqlTemplates and executed from fileIndex.ts." }),
|
|
138
|
+
].join("");
|
|
139
|
+
const diagnosis = diagnoseRun({
|
|
140
|
+
task: {
|
|
141
|
+
status: "completed",
|
|
142
|
+
initial_query: "Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?",
|
|
143
|
+
summary: "Queries are defined in sqlTemplates and executed from fileIndex.ts.",
|
|
144
|
+
},
|
|
145
|
+
steps: [],
|
|
146
|
+
routing,
|
|
147
|
+
insights: parseRunLogInsightsFromText(runLog, routing),
|
|
148
|
+
query: "Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?",
|
|
149
|
+
finalAnswerText: "Queries are defined in sqlTemplates and executed from fileIndex.ts.",
|
|
150
|
+
failures: [
|
|
151
|
+
'missing expected token: OUTPUT | deterministicPreGroundingPrefilter',
|
|
152
|
+
'missing expected token: domain-anchors:',
|
|
153
|
+
],
|
|
154
|
+
passed: false,
|
|
155
|
+
});
|
|
156
|
+
expect(diagnosis.primaryCategory).toBe("reporting");
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=runDiagnosis.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDiagnosis.test.js","sourceRoot":"","sources":["../../../src/__tests__/testing/runDiagnosis.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers deterministic run diagnosis so reports and artifacts point to one likely owner.\n *\n * Why this exists:\n * - the diagnosis layer should stay cheap and deterministic\n * - explicit contradictions should classify into one subsystem quickly\n * - resumed direct answers should not be misclassified as execution failures\n */\nimport { describe, expect, it } from \"vitest\";\nimport { diagnoseRun, parseRunLogInsightsFromText } from \"../../testing/runDiagnosis.js\";\n\nfunction payload(step: string, value: unknown): string {\n return [\n \"\",\n \"====================================================================\",\n `📂 OUTPUT | ${step}`,\n \"====================================================================\",\n typeof value === \"string\" ? value : JSON.stringify(value, null, 2),\n \"====================================================================\",\n \"\",\n ].join(\"\\n\");\n}\n\ndescribe(\"runDiagnosis\", () => {\n it(\"classifies final answer plus deferred zero-step runs as persistence\", () => {\n const task = {\n status: \"deferred\",\n initial_query: \"Explain routing in MainAgent.ts\",\n summary: \"answer\",\n routing_decision_json: JSON.stringify({\n allowSearch: false,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=explicit-target\",\n }),\n };\n const routing = {\n allowSearch: false,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=explicit-target\",\n };\n const runLog = [\n payload(\"resolveExplicitTargetsStep\", {\n resolvedTargetFiles: [\"/repo/cli/src/agents/MainAgent.ts\"],\n enteredBroadFallback: false,\n }),\n payload(\"runtimeState\", { phase: \"route\", lane: \"explicit-target\", status: \"active\" }),\n payload(\"finalAnswerModule\", { data: \"answer\" }),\n ].join(\"\");\n\n const diagnosis = diagnoseRun({\n task,\n steps: [],\n routing,\n insights: parseRunLogInsightsFromText(runLog, routing),\n query: \"Explain routing in cli/src/agents/MainAgent.ts.\",\n finalAnswerText: \"answer\",\n passed: false,\n });\n\n expect(diagnosis.primaryCategory).toBe(\"persistence\");\n });\n\n it(\"classifies broad fallback after explicit target resolution as routing\", () => {\n const routing = {\n allowSearch: true,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=explicit-target\",\n };\n const runLog = payload(\"resolveExplicitTargetsStep\", {\n resolvedTargetFiles: [\"/repo/cli/src/agents/MainAgent.ts\"],\n enteredBroadFallback: true,\n });\n\n const diagnosis = diagnoseRun({\n task: { status: \"active\", initial_query: \"Explain routing\", summary: null },\n steps: [],\n routing,\n insights: parseRunLogInsightsFromText(runLog, routing),\n query: \"Explain routing in cli/src/agents/MainAgent.ts.\",\n finalAnswerText: \"\",\n passed: false,\n });\n\n expect(diagnosis.primaryCategory).toBe(\"routing\");\n });\n\n it(\"keeps direct continuity answers out of execution failure diagnosis\", () => {\n const routing = {\n allowSearch: false,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=resume-continuity\",\n };\n const runLog = [\n payload(\"resumeContinuityStep\", { kind: \"continuity-summary\" }),\n payload(\"continuityRoutingAnalysisStep\", { kind: \"direct-resume-answer\", answerNow: true }),\n payload(\"continuityAnswerModule\", { data: \"Original task: ...\" }),\n ].join(\"\");\n\n const diagnosis = diagnoseRun({\n task: { status: \"completed\", initial_query: \"where were we?\", summary: \"Original task: ...\" },\n steps: [],\n routing,\n insights: parseRunLogInsightsFromText(runLog, routing),\n query: \"where were we?\",\n finalAnswerText: \"Original task: ...\",\n passed: true,\n });\n\n expect(diagnosis.primaryCategory).toBe(\"unknown\");\n });\n\n it(\"classifies missing explicit answer anchors as answer-quality\", () => {\n const routing = {\n allowSearch: false,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=explicit-target\",\n };\n const runLog = payload(\"finalAnswerModule\", { data: \"This file handles routing in broad terms.\" });\n\n const diagnosis = diagnoseRun({\n task: { status: \"completed\", initial_query: \"Explain cli/src/agents/MainAgent.ts\", summary: \"This file handles routing in broad terms.\" },\n steps: [],\n routing,\n insights: parseRunLogInsightsFromText(runLog, routing),\n query: \"Explain cli/src/agents/MainAgent.ts\",\n finalAnswerText: \"This file handles routing in broad terms.\",\n passed: false,\n });\n\n expect(diagnosis.primaryCategory).toBe(\"answer-quality\");\n });\n\n it(\"classifies stale exact-target eval failures as reporting drift\", () => {\n const routing = {\n allowSearch: false,\n allowResearch: false,\n allowTransform: false,\n rationale: \"route=explicit-target\",\n };\n const runLog = [\n payload(\"resolveExplicitTargetsStep\", {\n resolvedTargetFiles: [\"/repo/cli/src/db/fileIndex.ts\", \"/repo/cli/src/db/client.ts\"],\n enteredBroadFallback: false,\n }),\n payload(\"runtimeState\", { phase: \"route\", lane: \"explicit-target\", status: \"active\" }),\n payload(\"finalAnswerModule\", { data: \"Queries are defined in sqlTemplates and executed from fileIndex.ts.\" }),\n ].join(\"\");\n\n const diagnosis = diagnoseRun({\n task: {\n status: \"completed\",\n initial_query: \"Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?\",\n summary: \"Queries are defined in sqlTemplates and executed from fileIndex.ts.\",\n },\n steps: [],\n routing,\n insights: parseRunLogInsightsFromText(runLog, routing),\n query: \"Where are SQLite queries defined in db/fileIndex.ts and db/client.ts?\",\n finalAnswerText: \"Queries are defined in sqlTemplates and executed from fileIndex.ts.\",\n failures: [\n 'missing expected token: OUTPUT | deterministicPreGroundingPrefilter',\n 'missing expected token: domain-anchors:',\n ],\n passed: false,\n });\n\n expect(diagnosis.primaryCategory).toBe(\"reporting\");\n });\n});\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Covers shared runtime-log parsing during the logging migration.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - evals and reports still need old banner logs during migration
|
|
6
|
+
* - newer runtime logs use shared runtime headers instead of only banner blocks
|
|
7
|
+
* - one test keeps the parser honest across both shapes
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { extractFinalAnswerTextFromRuntimeLog, extractStepPayloadsFromRuntimeLog, normalizeRuntimeLogText, } from "../../testing/runtimeLogReader.js";
|
|
11
|
+
describe("runtimeLogReader", () => {
|
|
12
|
+
it("extracts legacy step payloads from shared runtime log entries", () => {
|
|
13
|
+
const runLog = [
|
|
14
|
+
`[2026-04-30T12:00:00.000Z] [shared] [legacy:output] status=ok resolveExplicitTargetsStep output`,
|
|
15
|
+
JSON.stringify({
|
|
16
|
+
payload: {
|
|
17
|
+
stepName: "resolveExplicitTargetsStep",
|
|
18
|
+
type: "output",
|
|
19
|
+
content: {
|
|
20
|
+
resolvedTargetFiles: ["cli/src/index.ts"],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
}, null, 2),
|
|
24
|
+
"",
|
|
25
|
+
].join("\n");
|
|
26
|
+
const payloads = extractStepPayloadsFromRuntimeLog(runLog, "resolveExplicitTargetsStep");
|
|
27
|
+
expect(payloads).toEqual([
|
|
28
|
+
{
|
|
29
|
+
resolvedTargetFiles: ["cli/src/index.ts"],
|
|
30
|
+
},
|
|
31
|
+
]);
|
|
32
|
+
});
|
|
33
|
+
it("extracts the final answer from new shared runtime log entries", () => {
|
|
34
|
+
const runLog = [
|
|
35
|
+
`[2026-04-30T12:00:00.000Z] [agent] [step:output] status=ok session=session-1 task=task-1 step=step-004 artifact final-answer`,
|
|
36
|
+
"The final answer text.",
|
|
37
|
+
"",
|
|
38
|
+
].join("\n");
|
|
39
|
+
expect(extractFinalAnswerTextFromRuntimeLog(runLog)).toBe("The final answer text.");
|
|
40
|
+
});
|
|
41
|
+
it("parses new local-time human runtime headers", () => {
|
|
42
|
+
const runLog = [
|
|
43
|
+
`[2026-05-01 12:15:00 +02:00] [shared] [legacy:output] status=ok resolveExplicitTargetsStep output`,
|
|
44
|
+
JSON.stringify({
|
|
45
|
+
payload: {
|
|
46
|
+
stepName: "resolveExplicitTargetsStep",
|
|
47
|
+
type: "output",
|
|
48
|
+
content: {
|
|
49
|
+
resolvedTargetFiles: ["cli/src/index.ts"],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
}, null, 2),
|
|
53
|
+
"",
|
|
54
|
+
].join("\n");
|
|
55
|
+
expect(extractStepPayloadsFromRuntimeLog(runLog, "resolveExplicitTargetsStep")).toEqual([
|
|
56
|
+
{
|
|
57
|
+
resolvedTargetFiles: ["cli/src/index.ts"],
|
|
58
|
+
},
|
|
59
|
+
]);
|
|
60
|
+
});
|
|
61
|
+
it("strips ANSI color codes before eval token matching", () => {
|
|
62
|
+
const runLog = `[2026-05-01 12:15:00 +02:00] [agent] [\x1b[33mtask:created\x1b[39m] status=active run started`;
|
|
63
|
+
expect(normalizeRuntimeLogText(runLog)).toContain("[agent] [task:created]");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=runtimeLogReader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeLogReader.test.js","sourceRoot":"","sources":["../../../src/__tests__/testing/runtimeLogReader.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,oCAAoC,EACpC,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAE3C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG;YACb,iGAAiG;YACjG,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE;oBACP,QAAQ,EAAE,4BAA4B;oBACtC,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;wBACP,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;qBAC1C;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC;YACX,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,QAAQ,GAAG,iCAAiC,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAEzF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB;gBACE,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;aAC1C;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG;YACb,8HAA8H;YAC9H,wBAAwB;YACxB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,CAAC,oCAAoC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG;YACb,mGAAmG;YACnG,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE;oBACP,QAAQ,EAAE,4BAA4B;oBACtC,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;wBACP,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;qBAC1C;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC;YACX,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,CAAC,iCAAiC,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC;YACtF;gBACE,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;aAC1C;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,+FAA+F,CAAC;QAE/G,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Covers shared runtime-log parsing during the logging migration.\n *\n * Why this file exists:\n * - evals and reports still need old banner logs during migration\n * - newer runtime logs use shared runtime headers instead of only banner blocks\n * - one test keeps the parser honest across both shapes\n */\nimport { describe, expect, it } from \"vitest\";\nimport {\n extractFinalAnswerTextFromRuntimeLog,\n extractStepPayloadsFromRuntimeLog,\n normalizeRuntimeLogText,\n} from \"../../testing/runtimeLogReader.js\";\n\ndescribe(\"runtimeLogReader\", () => {\n it(\"extracts legacy step payloads from shared runtime log entries\", () => {\n const runLog = [\n `[2026-04-30T12:00:00.000Z] [shared] [legacy:output] status=ok resolveExplicitTargetsStep output`,\n JSON.stringify({\n payload: {\n stepName: \"resolveExplicitTargetsStep\",\n type: \"output\",\n content: {\n resolvedTargetFiles: [\"cli/src/index.ts\"],\n },\n },\n }, null, 2),\n \"\",\n ].join(\"\\n\");\n\n const payloads = extractStepPayloadsFromRuntimeLog(runLog, \"resolveExplicitTargetsStep\");\n\n expect(payloads).toEqual([\n {\n resolvedTargetFiles: [\"cli/src/index.ts\"],\n },\n ]);\n });\n\n it(\"extracts the final answer from new shared runtime log entries\", () => {\n const runLog = [\n `[2026-04-30T12:00:00.000Z] [agent] [step:output] status=ok session=session-1 task=task-1 step=step-004 artifact final-answer`,\n \"The final answer text.\",\n \"\",\n ].join(\"\\n\");\n\n expect(extractFinalAnswerTextFromRuntimeLog(runLog)).toBe(\"The final answer text.\");\n });\n\n it(\"parses new local-time human runtime headers\", () => {\n const runLog = [\n `[2026-05-01 12:15:00 +02:00] [shared] [legacy:output] status=ok resolveExplicitTargetsStep output`,\n JSON.stringify({\n payload: {\n stepName: \"resolveExplicitTargetsStep\",\n type: \"output\",\n content: {\n resolvedTargetFiles: [\"cli/src/index.ts\"],\n },\n },\n }, null, 2),\n \"\",\n ].join(\"\\n\");\n\n expect(extractStepPayloadsFromRuntimeLog(runLog, \"resolveExplicitTargetsStep\")).toEqual([\n {\n resolvedTargetFiles: [\"cli/src/index.ts\"],\n },\n ]);\n });\n\n it(\"strips ANSI color codes before eval token matching\", () => {\n const runLog = `[2026-05-01 12:15:00 +02:00] [agent] [\\x1b[33mtask:created\\x1b[39m] status=active run started`;\n\n expect(normalizeRuntimeLogText(runLog)).toContain(\"[agent] [task:created]\");\n });\n});\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifies shell dev commands stay wired to the remaining test helpers.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - the shell command table is string-based, so wiring regressions are easy to miss
|
|
6
|
+
* - command cleanup should not remove the supported test shortcuts
|
|
7
|
+
*/
|
|
8
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
9
|
+
const mockedTestCmd = vi.hoisted(() => ({
|
|
10
|
+
runAllTestsCommand: vi.fn(),
|
|
11
|
+
listRegisteredTests: vi.fn(),
|
|
12
|
+
printTestCommand: vi.fn(),
|
|
13
|
+
runRegisteredTestCommand: vi.fn(),
|
|
14
|
+
}));
|
|
15
|
+
vi.mock("../../commands/TestCmd.js", () => ({
|
|
16
|
+
runAllTestsCommand: mockedTestCmd.runAllTestsCommand,
|
|
17
|
+
listRegisteredTests: mockedTestCmd.listRegisteredTests,
|
|
18
|
+
printTestCommand: mockedTestCmd.printTestCommand,
|
|
19
|
+
runRegisteredTestCommand: mockedTestCmd.runRegisteredTestCommand,
|
|
20
|
+
}));
|
|
21
|
+
import { registerTestingCommands } from "../../testing/testCommands.js";
|
|
22
|
+
describe("registerTestingCommands", () => {
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
vi.clearAllMocks();
|
|
25
|
+
});
|
|
26
|
+
it("wires /tests to the full suite command", async () => {
|
|
27
|
+
const commands = {};
|
|
28
|
+
registerTestingCommands(commands, async () => { });
|
|
29
|
+
await commands.tests();
|
|
30
|
+
expect(mockedTestCmd.runAllTestsCommand).toHaveBeenCalledTimes(1);
|
|
31
|
+
expect(mockedTestCmd.runRegisteredTestCommand).not.toHaveBeenCalled();
|
|
32
|
+
});
|
|
33
|
+
it("wires /test-run to one registered target", async () => {
|
|
34
|
+
const commands = {};
|
|
35
|
+
registerTestingCommands(commands, async () => { });
|
|
36
|
+
await commands["test-run"]("scope-single-file");
|
|
37
|
+
expect(mockedTestCmd.runRegisteredTestCommand).toHaveBeenCalledWith("scope-single-file");
|
|
38
|
+
});
|
|
39
|
+
it("wires /test-cmd with no id to the full-suite command printer", async () => {
|
|
40
|
+
const commands = {};
|
|
41
|
+
registerTestingCommands(commands, async () => { });
|
|
42
|
+
await commands["test-cmd"]();
|
|
43
|
+
expect(mockedTestCmd.printTestCommand).toHaveBeenCalledWith(undefined);
|
|
44
|
+
});
|
|
45
|
+
it("does not register integration shell commands anymore", async () => {
|
|
46
|
+
const commands = {};
|
|
47
|
+
registerTestingCommands(commands, async () => { });
|
|
48
|
+
expect(commands["integration-list"]).toBeUndefined();
|
|
49
|
+
expect(commands["integration-run"]).toBeUndefined();
|
|
50
|
+
expect(commands.integrations).toBeUndefined();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=testCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testCommands.test.js","sourceRoot":"","sources":["../../../src/__tests__/testing/testCommands.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC3B,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC5B,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;CAClC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,kBAAkB,EAAE,aAAa,CAAC,kBAAkB;IACpD,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;IACtD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;IAChD,wBAAwB,EAAE,aAAa,CAAC,wBAAwB;CACjE,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,uBAAuB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEvB,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,uBAAuB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAEhD,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,uBAAuB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAE7B,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,uBAAuB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Verifies shell dev commands stay wired to the remaining test helpers.\n *\n * Why this file exists:\n * - the shell command table is string-based, so wiring regressions are easy to miss\n * - command cleanup should not remove the supported test shortcuts\n */\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst mockedTestCmd = vi.hoisted(() => ({\n runAllTestsCommand: vi.fn(),\n listRegisteredTests: vi.fn(),\n printTestCommand: vi.fn(),\n runRegisteredTestCommand: vi.fn(),\n}));\n\nvi.mock(\"../../commands/TestCmd.js\", () => ({\n runAllTestsCommand: mockedTestCmd.runAllTestsCommand,\n listRegisteredTests: mockedTestCmd.listRegisteredTests,\n printTestCommand: mockedTestCmd.printTestCommand,\n runRegisteredTestCommand: mockedTestCmd.runRegisteredTestCommand,\n}));\n\nimport { registerTestingCommands } from \"../../testing/testCommands.js\";\n\ndescribe(\"registerTestingCommands\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"wires /tests to the full suite command\", async () => {\n const commands: Record<string, (...args: string[]) => Promise<void>> = {};\n registerTestingCommands(commands, async () => {});\n\n await commands.tests();\n\n expect(mockedTestCmd.runAllTestsCommand).toHaveBeenCalledTimes(1);\n expect(mockedTestCmd.runRegisteredTestCommand).not.toHaveBeenCalled();\n });\n\n it(\"wires /test-run to one registered target\", async () => {\n const commands: Record<string, (...args: string[]) => Promise<void>> = {};\n registerTestingCommands(commands, async () => {});\n\n await commands[\"test-run\"](\"scope-single-file\");\n\n expect(mockedTestCmd.runRegisteredTestCommand).toHaveBeenCalledWith(\"scope-single-file\");\n });\n\n it(\"wires /test-cmd with no id to the full-suite command printer\", async () => {\n const commands: Record<string, (...args: string[]) => Promise<void>> = {};\n registerTestingCommands(commands, async () => {});\n\n await commands[\"test-cmd\"]();\n\n expect(mockedTestCmd.printTestCommand).toHaveBeenCalledWith(undefined);\n });\n\n it(\"does not register integration shell commands anymore\", async () => {\n const commands: Record<string, (...args: string[]) => Promise<void>> = {};\n registerTestingCommands(commands, async () => {});\n\n expect(commands[\"integration-list\"]).toBeUndefined();\n expect(commands[\"integration-run\"]).toBeUndefined();\n expect(commands.integrations).toBeUndefined();\n });\n});\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifies compiled search queries stay aligned with shared token classification.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - `/resume` should not leak into file anchors
|
|
6
|
+
* - prose with `generate()` should not auto-enable regex mode
|
|
7
|
+
* - true operator snippets should still enable regex search
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { compileSearchQuery } from "../../utils/compileSearchQuery.js";
|
|
11
|
+
describe("compileSearchQuery", () => {
|
|
12
|
+
it("does not auto-enable regex for prose that mentions a call", () => {
|
|
13
|
+
const compiled = compileSearchQuery({
|
|
14
|
+
query: "Trace how generate() timing reaches structured logs",
|
|
15
|
+
mode: "auto",
|
|
16
|
+
});
|
|
17
|
+
expect(compiled.regex.enabled).toBe(false);
|
|
18
|
+
expect(compiled.anchors.files).toEqual([]);
|
|
19
|
+
});
|
|
20
|
+
it("filters command-style target files out of anchors", () => {
|
|
21
|
+
const compiled = compileSearchQuery({
|
|
22
|
+
query: "How does /resume work?",
|
|
23
|
+
intent: {
|
|
24
|
+
targetFiles: ["/resume", "cli/src/commands/TasksCmd.ts"],
|
|
25
|
+
},
|
|
26
|
+
mode: "auto",
|
|
27
|
+
});
|
|
28
|
+
expect(compiled.anchors.files).toEqual(["cli/src/commands/TasksCmd.ts"]);
|
|
29
|
+
});
|
|
30
|
+
it("keeps true operator snippets on regex mode", () => {
|
|
31
|
+
const compiled = compileSearchQuery({
|
|
32
|
+
query: "runSearch|plannerSearchFiles",
|
|
33
|
+
mode: "auto",
|
|
34
|
+
});
|
|
35
|
+
expect(compiled.regex.enabled).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=compileSearchQuery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compileSearchQuery.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/compileSearchQuery.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,KAAK,EAAE,qDAAqD;YAC5D,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,KAAK,EAAE,wBAAwB;YAC/B,MAAM,EAAE;gBACN,WAAW,EAAE,CAAC,SAAS,EAAE,8BAA8B,CAAC;aACzD;YACD,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Verifies compiled search queries stay aligned with shared token classification.\n *\n * Why this exists:\n * - `/resume` should not leak into file anchors\n * - prose with `generate()` should not auto-enable regex mode\n * - true operator snippets should still enable regex search\n */\nimport { describe, expect, it } from \"vitest\";\n\nimport { compileSearchQuery } from \"../../utils/compileSearchQuery.js\";\n\ndescribe(\"compileSearchQuery\", () => {\n it(\"does not auto-enable regex for prose that mentions a call\", () => {\n const compiled = compileSearchQuery({\n query: \"Trace how generate() timing reaches structured logs\",\n mode: \"auto\",\n });\n\n expect(compiled.regex.enabled).toBe(false);\n expect(compiled.anchors.files).toEqual([]);\n });\n\n it(\"filters command-style target files out of anchors\", () => {\n const compiled = compileSearchQuery({\n query: \"How does /resume work?\",\n intent: {\n targetFiles: [\"/resume\", \"cli/src/commands/TasksCmd.ts\"],\n },\n mode: \"auto\",\n });\n\n expect(compiled.anchors.files).toEqual([\"cli/src/commands/TasksCmd.ts\"]);\n });\n\n it(\"keeps true operator snippets on regex mode\", () => {\n const compiled = compileSearchQuery({\n query: \"runSearch|plannerSearchFiles\",\n mode: \"auto\",\n });\n\n expect(compiled.regex.enabled).toBe(true);\n });\n});\n"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Covers the shared console presentation sink used by both runtimes.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - transient spinner status and durable milestone lines should stay distinct
|
|
6
|
+
* - durable console messages should also reach the shared runtime logger
|
|
7
|
+
* - the shared UI factory should keep spinner pause/resume behavior consistent
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it, vi } from "vitest";
|
|
10
|
+
function stripAnsi(text) {
|
|
11
|
+
return text.replace(/\x1B\[[0-9;]*m/g, "");
|
|
12
|
+
}
|
|
13
|
+
const logRuntimeRecord = vi.fn();
|
|
14
|
+
const state = vi.hoisted(() => ({
|
|
15
|
+
getDevOutput: vi.fn(() => false),
|
|
16
|
+
}));
|
|
17
|
+
vi.mock("../../config.js", () => ({
|
|
18
|
+
Config: {
|
|
19
|
+
getDevOutput: state.getDevOutput,
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
vi.mock("../../utils/runtimeLogger.js", () => ({
|
|
23
|
+
logRuntimeRecord,
|
|
24
|
+
}));
|
|
25
|
+
describe("consolePresentation", () => {
|
|
26
|
+
it("routes durable messages through the shared logger and spinner boundary", async () => {
|
|
27
|
+
const { createConsoleAgentUI } = await import("../../utils/consolePresentation.js");
|
|
28
|
+
const spinner = {
|
|
29
|
+
update: vi.fn(),
|
|
30
|
+
stop: vi.fn(),
|
|
31
|
+
start: vi.fn(),
|
|
32
|
+
succeed: vi.fn(),
|
|
33
|
+
fail: vi.fn(),
|
|
34
|
+
isActive: vi.fn(() => true),
|
|
35
|
+
};
|
|
36
|
+
const logSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
37
|
+
logRuntimeRecord.mockReset();
|
|
38
|
+
const ui = createConsoleAgentUI(spinner, "agent", () => "task-1");
|
|
39
|
+
ui.message("Searching indexed files.");
|
|
40
|
+
expect(spinner.stop).toHaveBeenCalled();
|
|
41
|
+
expect(spinner.start).toHaveBeenCalled();
|
|
42
|
+
expect(logSpy).toHaveBeenCalledWith("Searching indexed files.");
|
|
43
|
+
expect(logRuntimeRecord).toHaveBeenCalledWith(expect.objectContaining({
|
|
44
|
+
runtime: "agent",
|
|
45
|
+
taskId: "task-1",
|
|
46
|
+
kind: "user-message",
|
|
47
|
+
phase: "shown",
|
|
48
|
+
summary: "Searching indexed files.",
|
|
49
|
+
}));
|
|
50
|
+
logSpy.mockRestore();
|
|
51
|
+
});
|
|
52
|
+
it("does not start the spinner when a durable message is shown before spinner start", async () => {
|
|
53
|
+
const { createConsoleAgentUI } = await import("../../utils/consolePresentation.js");
|
|
54
|
+
const spinner = {
|
|
55
|
+
update: vi.fn(),
|
|
56
|
+
stop: vi.fn(),
|
|
57
|
+
start: vi.fn(),
|
|
58
|
+
succeed: vi.fn(),
|
|
59
|
+
fail: vi.fn(),
|
|
60
|
+
isActive: vi.fn(() => false),
|
|
61
|
+
};
|
|
62
|
+
const logSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
63
|
+
const ui = createConsoleAgentUI(spinner, "agent", () => "task-1");
|
|
64
|
+
ui.message("Launching simple agent...");
|
|
65
|
+
expect(spinner.stop).toHaveBeenCalledTimes(1);
|
|
66
|
+
expect(spinner.start).not.toHaveBeenCalled();
|
|
67
|
+
logSpy.mockRestore();
|
|
68
|
+
});
|
|
69
|
+
it("formats shared agent progress text in the presentation layer", async () => {
|
|
70
|
+
const { formatFinalAnswerBlock, formatAgentLlmTimingMessage, formatAgentStepStateMessage, formatAgentTaskStateMessage, formatAgentLaunchMessage, formatConsoleDuration, formatConsoleSectionHeader, formatIndexRootMessage, formatStructuredAgentFailure, formatTopLevelAgentFailure, } = await import("../../utils/consolePresentation.js");
|
|
71
|
+
state.getDevOutput.mockReturnValue(true);
|
|
72
|
+
expect(formatAgentLaunchMessage("agent")).toBe("Launching simple agent...");
|
|
73
|
+
expect(formatConsoleDuration(12)).toBe("12ms");
|
|
74
|
+
expect(formatConsoleDuration(4800)).toBe("4.8s");
|
|
75
|
+
expect(formatConsoleDuration(72000)).toBe("1m 12s");
|
|
76
|
+
expect(formatConsoleSectionHeader("Boot", false)).toBe("== Boot ==");
|
|
77
|
+
expect(formatIndexRootMessage("/repo")).toBe("Using index root: /repo");
|
|
78
|
+
expect(stripAnsi(formatFinalAnswerBlock("Done."))).toBe("\n\n[FINAL ANSWER]\nDone.\n");
|
|
79
|
+
expect(formatConsoleSectionHeader("Scope", true)).toBe("\n== Scope ==");
|
|
80
|
+
expect(formatAgentLlmTimingMessage("agent.plan", { durationMs: 4800, attemptCount: 2 })).toBe("[LLM] plan finished | 4.8s | attempts=2");
|
|
81
|
+
expect(formatAgentLlmTimingMessage("agent.final-answer", { durationMs: 3200 })).toBe("[LLM] final-answer finished | 3.2s");
|
|
82
|
+
expect(formatAgentStepStateMessage({
|
|
83
|
+
stepId: "step-2",
|
|
84
|
+
action: "read-file",
|
|
85
|
+
from: "running",
|
|
86
|
+
to: "done",
|
|
87
|
+
durationMs: 38,
|
|
88
|
+
})).toBe("[STATE] step step-2 running -> done | action=read-file | 38ms");
|
|
89
|
+
expect(formatAgentTaskStateMessage({
|
|
90
|
+
from: "active",
|
|
91
|
+
to: "waiting",
|
|
92
|
+
reason: "need-user-input",
|
|
93
|
+
})).toBe("[STATE] task active -> waiting | reason=need-user-input");
|
|
94
|
+
expect(formatStructuredAgentFailure({
|
|
95
|
+
stage: "final-answer",
|
|
96
|
+
message: "Model call failed",
|
|
97
|
+
stepId: "step-2",
|
|
98
|
+
action: "final-answer",
|
|
99
|
+
})).toContain("Step: step-2");
|
|
100
|
+
expect(formatTopLevelAgentFailure("agent", "boom")).toBe("simple agent run failed: boom");
|
|
101
|
+
state.getDevOutput.mockReturnValue(false);
|
|
102
|
+
expect(formatAgentLlmTimingMessage("agent.plan", { durationMs: 4800, attemptCount: 1 })).toBeNull();
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=consolePresentation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolePresentation.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/consolePresentation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Covers the shared console presentation sink used by both runtimes.\n *\n * Why this file exists:\n * - transient spinner status and durable milestone lines should stay distinct\n * - durable console messages should also reach the shared runtime logger\n * - the shared UI factory should keep spinner pause/resume behavior consistent\n */\nimport { describe, expect, it, vi } from \"vitest\";\n\nfunction stripAnsi(text: string): string {\n return text.replace(/\\x1B\\[[0-9;]*m/g, \"\");\n}\n\nconst logRuntimeRecord = vi.fn();\nconst state = vi.hoisted(() => ({\n getDevOutput: vi.fn(() => false),\n}));\n\nvi.mock(\"../../config.js\", () => ({\n Config: {\n getDevOutput: state.getDevOutput,\n },\n}));\n\nvi.mock(\"../../utils/runtimeLogger.js\", () => ({\n logRuntimeRecord,\n}));\n\ndescribe(\"consolePresentation\", () => {\n it(\"routes durable messages through the shared logger and spinner boundary\", async () => {\n const { createConsoleAgentUI } = await import(\"../../utils/consolePresentation.js\");\n const spinner = {\n update: vi.fn(),\n stop: vi.fn(),\n start: vi.fn(),\n succeed: vi.fn(),\n fail: vi.fn(),\n isActive: vi.fn(() => true),\n };\n const logSpy = vi.spyOn(console, \"log\").mockImplementation(() => {});\n logRuntimeRecord.mockReset();\n\n const ui = createConsoleAgentUI(spinner as any, \"agent\", () => \"task-1\");\n ui.message(\"Searching indexed files.\");\n\n expect(spinner.stop).toHaveBeenCalled();\n expect(spinner.start).toHaveBeenCalled();\n expect(logSpy).toHaveBeenCalledWith(\"Searching indexed files.\");\n expect(logRuntimeRecord).toHaveBeenCalledWith(expect.objectContaining({\n runtime: \"agent\",\n taskId: \"task-1\",\n kind: \"user-message\",\n phase: \"shown\",\n summary: \"Searching indexed files.\",\n }));\n logSpy.mockRestore();\n });\n\n it(\"does not start the spinner when a durable message is shown before spinner start\", async () => {\n const { createConsoleAgentUI } = await import(\"../../utils/consolePresentation.js\");\n const spinner = {\n update: vi.fn(),\n stop: vi.fn(),\n start: vi.fn(),\n succeed: vi.fn(),\n fail: vi.fn(),\n isActive: vi.fn(() => false),\n };\n const logSpy = vi.spyOn(console, \"log\").mockImplementation(() => {});\n\n const ui = createConsoleAgentUI(spinner as any, \"agent\", () => \"task-1\");\n ui.message(\"Launching simple agent...\");\n\n expect(spinner.stop).toHaveBeenCalledTimes(1);\n expect(spinner.start).not.toHaveBeenCalled();\n logSpy.mockRestore();\n });\n\n it(\"formats shared agent progress text in the presentation layer\", async () => {\n const {\n formatFinalAnswerBlock,\n formatAgentLlmTimingMessage,\n formatAgentStepStateMessage,\n formatAgentTaskStateMessage,\n formatAgentLaunchMessage,\n formatConsoleDuration,\n formatConsoleSectionHeader,\n formatIndexRootMessage,\n formatStructuredAgentFailure,\n formatTopLevelAgentFailure,\n } = await import(\"../../utils/consolePresentation.js\");\n\n state.getDevOutput.mockReturnValue(true);\n expect(formatAgentLaunchMessage(\"agent\")).toBe(\"Launching simple agent...\");\n expect(formatConsoleDuration(12)).toBe(\"12ms\");\n expect(formatConsoleDuration(4800)).toBe(\"4.8s\");\n expect(formatConsoleDuration(72_000)).toBe(\"1m 12s\");\n expect(formatConsoleSectionHeader(\"Boot\", false)).toBe(\"== Boot ==\");\n expect(formatIndexRootMessage(\"/repo\")).toBe(\"Using index root: /repo\");\n expect(stripAnsi(formatFinalAnswerBlock(\"Done.\"))).toBe(\"\\n\\n[FINAL ANSWER]\\nDone.\\n\");\n expect(formatConsoleSectionHeader(\"Scope\", true)).toBe(\"\\n== Scope ==\");\n expect(\n formatAgentLlmTimingMessage(\"agent.plan\", { durationMs: 4800, attemptCount: 2 })\n ).toBe(\"[LLM] plan finished | 4.8s | attempts=2\");\n expect(\n formatAgentLlmTimingMessage(\"agent.final-answer\", { durationMs: 3200 })\n ).toBe(\"[LLM] final-answer finished | 3.2s\");\n expect(\n formatAgentStepStateMessage({\n stepId: \"step-2\",\n action: \"read-file\",\n from: \"running\",\n to: \"done\",\n durationMs: 38,\n })\n ).toBe(\"[STATE] step step-2 running -> done | action=read-file | 38ms\");\n expect(\n formatAgentTaskStateMessage({\n from: \"active\",\n to: \"waiting\",\n reason: \"need-user-input\",\n })\n ).toBe(\"[STATE] task active -> waiting | reason=need-user-input\");\n expect(\n formatStructuredAgentFailure({\n stage: \"final-answer\",\n message: \"Model call failed\",\n stepId: \"step-2\",\n action: \"final-answer\",\n })\n ).toContain(\"Step: step-2\");\n expect(formatTopLevelAgentFailure(\"agent\", \"boom\")).toBe(\"simple agent run failed: boom\");\n state.getDevOutput.mockReturnValue(false);\n expect(formatAgentLlmTimingMessage(\"agent.plan\", { durationMs: 4800, attemptCount: 1 })).toBeNull();\n });\n});\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifies explicit repo-ref extraction stays broad enough for files and folders.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists:
|
|
5
|
+
* - search mode selection and intent fallback both depend on the same extractor
|
|
6
|
+
* - folder names like `guards` must surface before the orchestrator can resolve them
|
|
7
|
+
* - fake dotted member expressions must still stay out of exact-target search
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { extractFileReferences } from "../../utils/extractFileReferences.js";
|
|
11
|
+
describe("extractFileReferences", () => {
|
|
12
|
+
it("extracts folder basenames, slash paths, extensionless files, and absolute paths", () => {
|
|
13
|
+
expect(extractFileReferences("check guards")).toContain("guards");
|
|
14
|
+
expect(extractFileReferences("check agents/guards")).toContain("agents/guards");
|
|
15
|
+
expect(extractFileReferences("Explain EvalReportCmd")).toContain("EvalReportCmd");
|
|
16
|
+
expect(extractFileReferences("check /Users/rzs/dev/repos/scai/cli/src/agents/guards")).toContain("/Users/rzs/dev/repos/scai/cli/src/agents/guards");
|
|
17
|
+
});
|
|
18
|
+
it("drops slashless path aliases already covered by one absolute path", () => {
|
|
19
|
+
expect(extractFileReferences("Explain /var/folders/qf/tmp-ABC123/sample.ts")).toEqual(["/var/folders/qf/tmp-ABC123/sample.ts"]);
|
|
20
|
+
});
|
|
21
|
+
it("extracts natural-language folder refs without requiring a path", () => {
|
|
22
|
+
expect(extractFileReferences("please tell me what the three files in the guards folder do?")).toContain("guards");
|
|
23
|
+
expect(extractFileReferences("show files in guards")).toContain("guards");
|
|
24
|
+
});
|
|
25
|
+
it("extracts doc-like refs from natural verb phrasing with articles", () => {
|
|
26
|
+
expect(extractFileReferences("please check the readme for how to install scai cli?")).toContain("readme");
|
|
27
|
+
expect(extractFileReferences("show me the install file")).toContain("install");
|
|
28
|
+
});
|
|
29
|
+
it("rejects member expressions and operator-pattern queries", () => {
|
|
30
|
+
expect(extractFileReferences("trace task.id and lines.push")).toEqual([]);
|
|
31
|
+
expect(extractFileReferences("runSearch|semanticSearchFiles|plannerSearchFiles")).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
it("rejects shell command tokens and code-call prose", () => {
|
|
34
|
+
expect(extractFileReferences("How does /resume work?")).toEqual([]);
|
|
35
|
+
expect(extractFileReferences("Trace how generate() timing reaches logs")).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
it("does not treat interrogatives as explicit file refs in multi-question asks", () => {
|
|
38
|
+
expect(extractFileReferences("Where is search routed? How is verify triggered?")).toEqual([]);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=extractFileReferences.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractFileReferences.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/extractFileReferences.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAChF,MAAM,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAClF,MAAM,CACJ,qBAAqB,CAAC,uDAAuD,CAAC,CAC/E,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CACJ,qBAAqB,CAAC,8CAA8C,CAAC,CACtE,CAAC,OAAO,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,qBAAqB,CAAC,8DAA8D,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClH,MAAM,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,qBAAqB,CAAC,sDAAsD,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1G,MAAM,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,qBAAqB,CAAC,kDAAkD,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,qBAAqB,CAAC,0CAA0C,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,qBAAqB,CAAC,kDAAkD,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Verifies explicit repo-ref extraction stays broad enough for files and folders.\n *\n * Why this exists:\n * - search mode selection and intent fallback both depend on the same extractor\n * - folder names like `guards` must surface before the orchestrator can resolve them\n * - fake dotted member expressions must still stay out of exact-target search\n */\nimport { describe, expect, it } from \"vitest\";\n\nimport { extractFileReferences } from \"../../utils/extractFileReferences.js\";\n\ndescribe(\"extractFileReferences\", () => {\n it(\"extracts folder basenames, slash paths, extensionless files, and absolute paths\", () => {\n expect(extractFileReferences(\"check guards\")).toContain(\"guards\");\n expect(extractFileReferences(\"check agents/guards\")).toContain(\"agents/guards\");\n expect(extractFileReferences(\"Explain EvalReportCmd\")).toContain(\"EvalReportCmd\");\n expect(\n extractFileReferences(\"check /Users/rzs/dev/repos/scai/cli/src/agents/guards\")\n ).toContain(\"/Users/rzs/dev/repos/scai/cli/src/agents/guards\");\n });\n\n it(\"drops slashless path aliases already covered by one absolute path\", () => {\n expect(\n extractFileReferences(\"Explain /var/folders/qf/tmp-ABC123/sample.ts\")\n ).toEqual([\"/var/folders/qf/tmp-ABC123/sample.ts\"]);\n });\n\n it(\"extracts natural-language folder refs without requiring a path\", () => {\n expect(extractFileReferences(\"please tell me what the three files in the guards folder do?\")).toContain(\"guards\");\n expect(extractFileReferences(\"show files in guards\")).toContain(\"guards\");\n });\n\n it(\"extracts doc-like refs from natural verb phrasing with articles\", () => {\n expect(extractFileReferences(\"please check the readme for how to install scai cli?\")).toContain(\"readme\");\n expect(extractFileReferences(\"show me the install file\")).toContain(\"install\");\n });\n\n it(\"rejects member expressions and operator-pattern queries\", () => {\n expect(extractFileReferences(\"trace task.id and lines.push\")).toEqual([]);\n expect(extractFileReferences(\"runSearch|semanticSearchFiles|plannerSearchFiles\")).toEqual([]);\n });\n\n it(\"rejects shell command tokens and code-call prose\", () => {\n expect(extractFileReferences(\"How does /resume work?\")).toEqual([]);\n expect(extractFileReferences(\"Trace how generate() timing reaches logs\")).toEqual([]);\n });\n\n it(\"does not treat interrogatives as explicit file refs in multi-question asks\", () => {\n expect(extractFileReferences(\"Where is search routed? How is verify triggered?\")).toEqual([]);\n });\n});\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Covers the small shared debug logger timestamp policy.
|
|
3
|
+
*
|
|
4
|
+
* Why this file exists:
|
|
5
|
+
* - debug log output should use the same local-time policy as runtime logs
|
|
6
|
+
* - both console and background log paths should avoid UTC-looking `Z` timestamps
|
|
7
|
+
*/
|
|
8
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
9
|
+
describe("log", () => {
|
|
10
|
+
let originalTz;
|
|
11
|
+
let originalBackground;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
originalTz = process.env.TZ;
|
|
14
|
+
originalBackground = process.env.BACKGROUND_MODE;
|
|
15
|
+
vi.resetModules();
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
process.env.TZ = originalTz;
|
|
19
|
+
process.env.BACKGROUND_MODE = originalBackground;
|
|
20
|
+
vi.restoreAllMocks();
|
|
21
|
+
});
|
|
22
|
+
it("uses local machine time for foreground console output", async () => {
|
|
23
|
+
process.env.TZ = "Europe/Copenhagen";
|
|
24
|
+
process.env.BACKGROUND_MODE = "false";
|
|
25
|
+
vi.useFakeTimers();
|
|
26
|
+
vi.setSystemTime(new Date("2026-05-01T10:15:00.000Z"));
|
|
27
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
28
|
+
const { log } = await import("../../utils/log.js");
|
|
29
|
+
log("hello");
|
|
30
|
+
expect(consoleSpy).toHaveBeenCalledWith("[2026-05-01T12:15:00.000+02:00] hello");
|
|
31
|
+
vi.useRealTimers();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=log.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/log.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,IAAI,UAA8B,CAAC;IACnC,IAAI,kBAAsC,CAAC;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACjD,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,kBAAkB,CAAC;QACjD,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,mBAAmB,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;QACtC,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,CAAC;QAEb,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,uCAAuC,CAAC,CAAC;QACjF,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Covers the small shared debug logger timestamp policy.\n *\n * Why this file exists:\n * - debug log output should use the same local-time policy as runtime logs\n * - both console and background log paths should avoid UTC-looking `Z` timestamps\n */\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\ndescribe(\"log\", () => {\n let originalTz: string | undefined;\n let originalBackground: string | undefined;\n\n beforeEach(() => {\n originalTz = process.env.TZ;\n originalBackground = process.env.BACKGROUND_MODE;\n vi.resetModules();\n });\n\n afterEach(() => {\n process.env.TZ = originalTz;\n process.env.BACKGROUND_MODE = originalBackground;\n vi.restoreAllMocks();\n });\n\n it(\"uses local machine time for foreground console output\", async () => {\n process.env.TZ = \"Europe/Copenhagen\";\n process.env.BACKGROUND_MODE = \"false\";\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-01T10:15:00.000Z\"));\n const consoleSpy = vi.spyOn(console, \"log\").mockImplementation(() => {});\n\n const { log } = await import(\"../../utils/log.js\");\n log(\"hello\");\n\n expect(consoleSpy).toHaveBeenCalledWith(\"[2026-05-01T12:15:00.000+02:00] hello\");\n vi.useRealTimers();\n });\n});\n"]}
|