@gracker/smartperfetto 1.0.13
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/.env.example +586 -0
- package/LICENSE +685 -0
- package/data/perfettoSqlDocs.json +33478 -0
- package/data/perfettoSqlIndex.json +9458 -0
- package/data/perfettoSqlIndex.light.json +13129 -0
- package/data/perfettoStdlibSymbols.json +677 -0
- package/dist/agent/agents/base/baseAgent.d.ts +378 -0
- package/dist/agent/agents/base/baseAgent.d.ts.map +1 -0
- package/dist/agent/agents/base/baseAgent.js +1484 -0
- package/dist/agent/agents/base/baseAgent.js.map +1 -0
- package/dist/agent/agents/base/baseSubAgent.d.ts +135 -0
- package/dist/agent/agents/base/baseSubAgent.d.ts.map +1 -0
- package/dist/agent/agents/base/baseSubAgent.js +483 -0
- package/dist/agent/agents/base/baseSubAgent.js.map +1 -0
- package/dist/agent/agents/baseExpertAgent.d.ts +37 -0
- package/dist/agent/agents/baseExpertAgent.d.ts.map +1 -0
- package/dist/agent/agents/baseExpertAgent.js +322 -0
- package/dist/agent/agents/baseExpertAgent.js.map +1 -0
- package/dist/agent/agents/domain/additionalAgents.d.ts +54 -0
- package/dist/agent/agents/domain/additionalAgents.d.ts.map +1 -0
- package/dist/agent/agents/domain/additionalAgents.js +292 -0
- package/dist/agent/agents/domain/additionalAgents.js.map +1 -0
- package/dist/agent/agents/domain/binderAgent.d.ts +27 -0
- package/dist/agent/agents/domain/binderAgent.d.ts.map +1 -0
- package/dist/agent/agents/domain/binderAgent.js +100 -0
- package/dist/agent/agents/domain/binderAgent.js.map +1 -0
- package/dist/agent/agents/domain/cpuAgent.d.ts +35 -0
- package/dist/agent/agents/domain/cpuAgent.d.ts.map +1 -0
- package/dist/agent/agents/domain/cpuAgent.js +163 -0
- package/dist/agent/agents/domain/cpuAgent.js.map +1 -0
- package/dist/agent/agents/domain/frameAgent.d.ts +59 -0
- package/dist/agent/agents/domain/frameAgent.d.ts.map +1 -0
- package/dist/agent/agents/domain/frameAgent.js +511 -0
- package/dist/agent/agents/domain/frameAgent.js.map +1 -0
- package/dist/agent/agents/domain/index.d.ts +92 -0
- package/dist/agent/agents/domain/index.d.ts.map +1 -0
- package/dist/agent/agents/domain/index.js +250 -0
- package/dist/agent/agents/domain/index.js.map +1 -0
- package/dist/agent/agents/domain/memoryAgent.d.ts +26 -0
- package/dist/agent/agents/domain/memoryAgent.d.ts.map +1 -0
- package/dist/agent/agents/domain/memoryAgent.js +94 -0
- package/dist/agent/agents/domain/memoryAgent.js.map +1 -0
- package/dist/agent/agents/domain/skillCatalog.d.ts +10 -0
- package/dist/agent/agents/domain/skillCatalog.d.ts.map +1 -0
- package/dist/agent/agents/domain/skillCatalog.js +66 -0
- package/dist/agent/agents/domain/skillCatalog.js.map +1 -0
- package/dist/agent/agents/evaluatorAgent.d.ts +76 -0
- package/dist/agent/agents/evaluatorAgent.d.ts.map +1 -0
- package/dist/agent/agents/evaluatorAgent.js +517 -0
- package/dist/agent/agents/evaluatorAgent.js.map +1 -0
- package/dist/agent/agents/index.d.ts +13 -0
- package/dist/agent/agents/index.d.ts.map +1 -0
- package/dist/agent/agents/index.js +25 -0
- package/dist/agent/agents/index.js.map +1 -0
- package/dist/agent/agents/iterationStrategyPlanner.d.ts +140 -0
- package/dist/agent/agents/iterationStrategyPlanner.d.ts.map +1 -0
- package/dist/agent/agents/iterationStrategyPlanner.js +359 -0
- package/dist/agent/agents/iterationStrategyPlanner.js.map +1 -0
- package/dist/agent/agents/plannerAgent.d.ts +56 -0
- package/dist/agent/agents/plannerAgent.d.ts.map +1 -0
- package/dist/agent/agents/plannerAgent.js +379 -0
- package/dist/agent/agents/plannerAgent.js.map +1 -0
- package/dist/agent/agents/scrollingExpertAgent.d.ts +11 -0
- package/dist/agent/agents/scrollingExpertAgent.d.ts.map +1 -0
- package/dist/agent/agents/scrollingExpertAgent.js +132 -0
- package/dist/agent/agents/scrollingExpertAgent.js.map +1 -0
- package/dist/agent/agents/tools/adbTools.d.ts +5 -0
- package/dist/agent/agents/tools/adbTools.d.ts.map +1 -0
- package/dist/agent/agents/tools/adbTools.js +326 -0
- package/dist/agent/agents/tools/adbTools.js.map +1 -0
- package/dist/agent/communication/agentMessageBus.d.ts +138 -0
- package/dist/agent/communication/agentMessageBus.d.ts.map +1 -0
- package/dist/agent/communication/agentMessageBus.js +542 -0
- package/dist/agent/communication/agentMessageBus.js.map +1 -0
- package/dist/agent/communication/index.d.ts +7 -0
- package/dist/agent/communication/index.d.ts.map +1 -0
- package/dist/agent/communication/index.js +15 -0
- package/dist/agent/communication/index.js.map +1 -0
- package/dist/agent/compaction/compactionTypes.d.ts +163 -0
- package/dist/agent/compaction/compactionTypes.d.ts.map +1 -0
- package/dist/agent/compaction/compactionTypes.js +32 -0
- package/dist/agent/compaction/compactionTypes.js.map +1 -0
- package/dist/agent/compaction/contextCompactor.d.ts +109 -0
- package/dist/agent/compaction/contextCompactor.d.ts.map +1 -0
- package/dist/agent/compaction/contextCompactor.js +225 -0
- package/dist/agent/compaction/contextCompactor.js.map +1 -0
- package/dist/agent/compaction/index.d.ts +10 -0
- package/dist/agent/compaction/index.d.ts.map +1 -0
- package/dist/agent/compaction/index.js +43 -0
- package/dist/agent/compaction/index.js.map +1 -0
- package/dist/agent/compaction/strategies/index.d.ts +5 -0
- package/dist/agent/compaction/strategies/index.d.ts.map +1 -0
- package/dist/agent/compaction/strategies/index.js +13 -0
- package/dist/agent/compaction/strategies/index.js.map +1 -0
- package/dist/agent/compaction/strategies/slidingWindowStrategy.d.ts +53 -0
- package/dist/agent/compaction/strategies/slidingWindowStrategy.d.ts.map +1 -0
- package/dist/agent/compaction/strategies/slidingWindowStrategy.js +237 -0
- package/dist/agent/compaction/strategies/slidingWindowStrategy.js.map +1 -0
- package/dist/agent/compaction/tokenEstimator.d.ts +78 -0
- package/dist/agent/compaction/tokenEstimator.d.ts.map +1 -0
- package/dist/agent/compaction/tokenEstimator.js +203 -0
- package/dist/agent/compaction/tokenEstimator.js.map +1 -0
- package/dist/agent/config/decisionThresholdManifest.d.ts +72 -0
- package/dist/agent/config/decisionThresholdManifest.d.ts.map +1 -0
- package/dist/agent/config/decisionThresholdManifest.js +77 -0
- package/dist/agent/config/decisionThresholdManifest.js.map +1 -0
- package/dist/agent/config/domainManifest.d.ts +77 -0
- package/dist/agent/config/domainManifest.d.ts.map +1 -0
- package/dist/agent/config/domainManifest.js +269 -0
- package/dist/agent/config/domainManifest.js.map +1 -0
- package/dist/agent/config/drillDownRegistry.d.ts +19 -0
- package/dist/agent/config/drillDownRegistry.d.ts.map +1 -0
- package/dist/agent/config/drillDownRegistry.js +118 -0
- package/dist/agent/config/drillDownRegistry.js.map +1 -0
- package/dist/agent/context/contextBuilder.d.ts +79 -0
- package/dist/agent/context/contextBuilder.d.ts.map +1 -0
- package/dist/agent/context/contextBuilder.js +273 -0
- package/dist/agent/context/contextBuilder.js.map +1 -0
- package/dist/agent/context/contextTypes.d.ts +121 -0
- package/dist/agent/context/contextTypes.d.ts.map +1 -0
- package/dist/agent/context/contextTypes.js +14 -0
- package/dist/agent/context/contextTypes.js.map +1 -0
- package/dist/agent/context/enhancedSessionContext.d.ts +283 -0
- package/dist/agent/context/enhancedSessionContext.d.ts.map +1 -0
- package/dist/agent/context/enhancedSessionContext.js +1636 -0
- package/dist/agent/context/enhancedSessionContext.js.map +1 -0
- package/dist/agent/context/entityStore.d.ts +374 -0
- package/dist/agent/context/entityStore.d.ts.map +1 -0
- package/dist/agent/context/entityStore.js +621 -0
- package/dist/agent/context/entityStore.js.map +1 -0
- package/dist/agent/context/focusStore.d.ts +229 -0
- package/dist/agent/context/focusStore.d.ts.map +1 -0
- package/dist/agent/context/focusStore.js +528 -0
- package/dist/agent/context/focusStore.js.map +1 -0
- package/dist/agent/context/index.d.ts +10 -0
- package/dist/agent/context/index.d.ts.map +1 -0
- package/dist/agent/context/index.js +42 -0
- package/dist/agent/context/index.js.map +1 -0
- package/dist/agent/context/policies/evaluatorPolicy.d.ts +22 -0
- package/dist/agent/context/policies/evaluatorPolicy.d.ts.map +1 -0
- package/dist/agent/context/policies/evaluatorPolicy.js +82 -0
- package/dist/agent/context/policies/evaluatorPolicy.js.map +1 -0
- package/dist/agent/context/policies/index.d.ts +7 -0
- package/dist/agent/context/policies/index.d.ts.map +1 -0
- package/dist/agent/context/policies/index.js +18 -0
- package/dist/agent/context/policies/index.js.map +1 -0
- package/dist/agent/context/policies/plannerPolicy.d.ts +27 -0
- package/dist/agent/context/policies/plannerPolicy.d.ts.map +1 -0
- package/dist/agent/context/policies/plannerPolicy.js +67 -0
- package/dist/agent/context/policies/plannerPolicy.js.map +1 -0
- package/dist/agent/context/policies/workerPolicy.d.ts +29 -0
- package/dist/agent/context/policies/workerPolicy.d.ts.map +1 -0
- package/dist/agent/context/policies/workerPolicy.js +99 -0
- package/dist/agent/context/policies/workerPolicy.js.map +1 -0
- package/dist/agent/core/circuitBreaker.d.ts +150 -0
- package/dist/agent/core/circuitBreaker.d.ts.map +1 -0
- package/dist/agent/core/circuitBreaker.js +500 -0
- package/dist/agent/core/circuitBreaker.js.map +1 -0
- package/dist/agent/core/conclusionContract.d.ts +61 -0
- package/dist/agent/core/conclusionContract.d.ts.map +1 -0
- package/dist/agent/core/conclusionContract.js +6 -0
- package/dist/agent/core/conclusionContract.js.map +1 -0
- package/dist/agent/core/conclusionGenerator.d.ts +42 -0
- package/dist/agent/core/conclusionGenerator.d.ts.map +1 -0
- package/dist/agent/core/conclusionGenerator.js +4109 -0
- package/dist/agent/core/conclusionGenerator.js.map +1 -0
- package/dist/agent/core/conclusionSceneTemplates.d.ts +8 -0
- package/dist/agent/core/conclusionSceneTemplates.d.ts.map +1 -0
- package/dist/agent/core/conclusionSceneTemplates.js +31 -0
- package/dist/agent/core/conclusionSceneTemplates.js.map +1 -0
- package/dist/agent/core/drillDownResolver.d.ts +67 -0
- package/dist/agent/core/drillDownResolver.d.ts.map +1 -0
- package/dist/agent/core/drillDownResolver.js +583 -0
- package/dist/agent/core/drillDownResolver.js.map +1 -0
- package/dist/agent/core/emittedEnvelopeRegistry.d.ts +75 -0
- package/dist/agent/core/emittedEnvelopeRegistry.d.ts.map +1 -0
- package/dist/agent/core/emittedEnvelopeRegistry.js +164 -0
- package/dist/agent/core/emittedEnvelopeRegistry.js.map +1 -0
- package/dist/agent/core/entityCapture.d.ts +53 -0
- package/dist/agent/core/entityCapture.d.ts.map +1 -0
- package/dist/agent/core/entityCapture.js +522 -0
- package/dist/agent/core/entityCapture.js.map +1 -0
- package/dist/agent/core/entityRegistry.d.ts +19 -0
- package/dist/agent/core/entityRegistry.d.ts.map +1 -0
- package/dist/agent/core/entityRegistry.js +102 -0
- package/dist/agent/core/entityRegistry.js.map +1 -0
- package/dist/agent/core/executors/analysisExecutor.d.ts +21 -0
- package/dist/agent/core/executors/analysisExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/analysisExecutor.js +6 -0
- package/dist/agent/core/executors/analysisExecutor.js.map +1 -0
- package/dist/agent/core/executors/clarifyExecutor.d.ts +42 -0
- package/dist/agent/core/executors/clarifyExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/clarifyExecutor.js +316 -0
- package/dist/agent/core/executors/clarifyExecutor.js.map +1 -0
- package/dist/agent/core/executors/comparisonExecutor.d.ts +39 -0
- package/dist/agent/core/executors/comparisonExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/comparisonExecutor.js +404 -0
- package/dist/agent/core/executors/comparisonExecutor.js.map +1 -0
- package/dist/agent/core/executors/directDrillDownExecutor.d.ts +56 -0
- package/dist/agent/core/executors/directDrillDownExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/directDrillDownExecutor.js +665 -0
- package/dist/agent/core/executors/directDrillDownExecutor.js.map +1 -0
- package/dist/agent/core/executors/directSkillExecutor.d.ts +106 -0
- package/dist/agent/core/executors/directSkillExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/directSkillExecutor.js +633 -0
- package/dist/agent/core/executors/directSkillExecutor.js.map +1 -0
- package/dist/agent/core/executors/extendExecutor.d.ts +50 -0
- package/dist/agent/core/executors/extendExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/extendExecutor.js +402 -0
- package/dist/agent/core/executors/extendExecutor.js.map +1 -0
- package/dist/agent/core/executors/hypothesisExecutor.d.ts +52 -0
- package/dist/agent/core/executors/hypothesisExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/hypothesisExecutor.js +564 -0
- package/dist/agent/core/executors/hypothesisExecutor.js.map +1 -0
- package/dist/agent/core/executors/index.d.ts +9 -0
- package/dist/agent/core/executors/index.d.ts.map +1 -0
- package/dist/agent/core/executors/index.js +15 -0
- package/dist/agent/core/executors/index.js.map +1 -0
- package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.d.ts +12 -0
- package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.d.ts.map +1 -0
- package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.js +186 -0
- package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.js.map +1 -0
- package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.d.ts +9 -0
- package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.d.ts.map +1 -0
- package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.js +123 -0
- package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.js.map +1 -0
- package/dist/agent/core/executors/strategy/strategyStagePlanner.d.ts +18 -0
- package/dist/agent/core/executors/strategy/strategyStagePlanner.d.ts.map +1 -0
- package/dist/agent/core/executors/strategy/strategyStagePlanner.js +69 -0
- package/dist/agent/core/executors/strategy/strategyStagePlanner.js.map +1 -0
- package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.d.ts +14 -0
- package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.d.ts.map +1 -0
- package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.js +129 -0
- package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.js.map +1 -0
- package/dist/agent/core/executors/strategyExecutor.d.ts +16 -0
- package/dist/agent/core/executors/strategyExecutor.d.ts.map +1 -0
- package/dist/agent/core/executors/strategyExecutor.js +377 -0
- package/dist/agent/core/executors/strategyExecutor.js.map +1 -0
- package/dist/agent/core/executors/traceConfigDetector.d.ts +28 -0
- package/dist/agent/core/executors/traceConfigDetector.d.ts.map +1 -0
- package/dist/agent/core/executors/traceConfigDetector.js +156 -0
- package/dist/agent/core/executors/traceConfigDetector.js.map +1 -0
- package/dist/agent/core/feedbackSynthesizer.d.ts +28 -0
- package/dist/agent/core/feedbackSynthesizer.d.ts.map +1 -0
- package/dist/agent/core/feedbackSynthesizer.js +841 -0
- package/dist/agent/core/feedbackSynthesizer.js.map +1 -0
- package/dist/agent/core/followUpHandler.d.ts +36 -0
- package/dist/agent/core/followUpHandler.d.ts.map +1 -0
- package/dist/agent/core/followUpHandler.js +413 -0
- package/dist/agent/core/followUpHandler.js.map +1 -0
- package/dist/agent/core/hypothesisGenerator.d.ts +45 -0
- package/dist/agent/core/hypothesisGenerator.d.ts.map +1 -0
- package/dist/agent/core/hypothesisGenerator.js +257 -0
- package/dist/agent/core/hypothesisGenerator.js.map +1 -0
- package/dist/agent/core/incrementalAnalyzer.d.ts +164 -0
- package/dist/agent/core/incrementalAnalyzer.d.ts.map +1 -0
- package/dist/agent/core/incrementalAnalyzer.js +382 -0
- package/dist/agent/core/incrementalAnalyzer.js.map +1 -0
- package/dist/agent/core/index.d.ts +25 -0
- package/dist/agent/core/index.d.ts.map +1 -0
- package/dist/agent/core/index.js +61 -0
- package/dist/agent/core/index.js.map +1 -0
- package/dist/agent/core/intentUnderstanding.d.ts +28 -0
- package/dist/agent/core/intentUnderstanding.d.ts.map +1 -0
- package/dist/agent/core/intentUnderstanding.js +451 -0
- package/dist/agent/core/intentUnderstanding.js.map +1 -0
- package/dist/agent/core/interventionController.d.ts +211 -0
- package/dist/agent/core/interventionController.d.ts.map +1 -0
- package/dist/agent/core/interventionController.js +477 -0
- package/dist/agent/core/interventionController.js.map +1 -0
- package/dist/agent/core/jankCauseSummarizer.d.ts +87 -0
- package/dist/agent/core/jankCauseSummarizer.d.ts.map +1 -0
- package/dist/agent/core/jankCauseSummarizer.js +432 -0
- package/dist/agent/core/jankCauseSummarizer.js.map +1 -0
- package/dist/agent/core/modelRouter.d.ts +164 -0
- package/dist/agent/core/modelRouter.d.ts.map +1 -0
- package/dist/agent/core/modelRouter.js +1169 -0
- package/dist/agent/core/modelRouter.js.map +1 -0
- package/dist/agent/core/modelRouterSingleton.d.ts +4 -0
- package/dist/agent/core/modelRouterSingleton.d.ts.map +1 -0
- package/dist/agent/core/modelRouterSingleton.js +20 -0
- package/dist/agent/core/modelRouterSingleton.js.map +1 -0
- package/dist/agent/core/orchestratorTypes.d.ts +506 -0
- package/dist/agent/core/orchestratorTypes.d.ts.map +1 -0
- package/dist/agent/core/orchestratorTypes.js +91 -0
- package/dist/agent/core/orchestratorTypes.js.map +1 -0
- package/dist/agent/core/pipelineExecutor.d.ts +154 -0
- package/dist/agent/core/pipelineExecutor.d.ts.map +1 -0
- package/dist/agent/core/pipelineExecutor.js +677 -0
- package/dist/agent/core/pipelineExecutor.js.map +1 -0
- package/dist/agent/core/scenePolicy.d.ts +3 -0
- package/dist/agent/core/scenePolicy.d.ts.map +1 -0
- package/dist/agent/core/scenePolicy.js +49 -0
- package/dist/agent/core/scenePolicy.js.map +1 -0
- package/dist/agent/core/sceneRouter.d.ts +8 -0
- package/dist/agent/core/sceneRouter.d.ts.map +1 -0
- package/dist/agent/core/sceneRouter.js +122 -0
- package/dist/agent/core/sceneRouter.js.map +1 -0
- package/dist/agent/core/sceneTaxonomy.d.ts +6 -0
- package/dist/agent/core/sceneTaxonomy.d.ts.map +1 -0
- package/dist/agent/core/sceneTaxonomy.js +83 -0
- package/dist/agent/core/sceneTaxonomy.js.map +1 -0
- package/dist/agent/core/sceneTemplateStore.d.ts +10 -0
- package/dist/agent/core/sceneTemplateStore.d.ts.map +1 -0
- package/dist/agent/core/sceneTemplateStore.js +244 -0
- package/dist/agent/core/sceneTemplateStore.js.map +1 -0
- package/dist/agent/core/sceneTemplateValidator.d.ts +22 -0
- package/dist/agent/core/sceneTemplateValidator.d.ts.map +1 -0
- package/dist/agent/core/sceneTemplateValidator.js +226 -0
- package/dist/agent/core/sceneTemplateValidator.js.map +1 -0
- package/dist/agent/core/sceneTypes.d.ts +53 -0
- package/dist/agent/core/sceneTypes.d.ts.map +1 -0
- package/dist/agent/core/sceneTypes.js +6 -0
- package/dist/agent/core/sceneTypes.js.map +1 -0
- package/dist/agent/core/stateMachine.d.ts +135 -0
- package/dist/agent/core/stateMachine.d.ts.map +1 -0
- package/dist/agent/core/stateMachine.js +516 -0
- package/dist/agent/core/stateMachine.js.map +1 -0
- package/dist/agent/core/strategySelector.d.ts +121 -0
- package/dist/agent/core/strategySelector.d.ts.map +1 -0
- package/dist/agent/core/strategySelector.js +344 -0
- package/dist/agent/core/strategySelector.js.map +1 -0
- package/dist/agent/core/taskGraphExecutor.d.ts +30 -0
- package/dist/agent/core/taskGraphExecutor.d.ts.map +1 -0
- package/dist/agent/core/taskGraphExecutor.js +142 -0
- package/dist/agent/core/taskGraphExecutor.js.map +1 -0
- package/dist/agent/core/taskGraphPlanner.d.ts +33 -0
- package/dist/agent/core/taskGraphPlanner.d.ts.map +1 -0
- package/dist/agent/core/taskGraphPlanner.js +312 -0
- package/dist/agent/core/taskGraphPlanner.js.map +1 -0
- package/dist/agent/decision/decisionTreeExecutor.d.ts +55 -0
- package/dist/agent/decision/decisionTreeExecutor.d.ts.map +1 -0
- package/dist/agent/decision/decisionTreeExecutor.js +250 -0
- package/dist/agent/decision/decisionTreeExecutor.js.map +1 -0
- package/dist/agent/decision/decisionTreeStageExecutor.d.ts +65 -0
- package/dist/agent/decision/decisionTreeStageExecutor.d.ts.map +1 -0
- package/dist/agent/decision/decisionTreeStageExecutor.js +286 -0
- package/dist/agent/decision/decisionTreeStageExecutor.js.map +1 -0
- package/dist/agent/decision/index.d.ts +27 -0
- package/dist/agent/decision/index.d.ts.map +1 -0
- package/dist/agent/decision/index.js +70 -0
- package/dist/agent/decision/index.js.map +1 -0
- package/dist/agent/decision/skillExecutorAdapter.d.ts +89 -0
- package/dist/agent/decision/skillExecutorAdapter.d.ts.map +1 -0
- package/dist/agent/decision/skillExecutorAdapter.js +447 -0
- package/dist/agent/decision/skillExecutorAdapter.js.map +1 -0
- package/dist/agent/decision/trees/index.d.ts +8 -0
- package/dist/agent/decision/trees/index.d.ts.map +1 -0
- package/dist/agent/decision/trees/index.js +16 -0
- package/dist/agent/decision/trees/index.js.map +1 -0
- package/dist/agent/decision/trees/launchDecisionTree.d.ts +7 -0
- package/dist/agent/decision/trees/launchDecisionTree.d.ts.map +1 -0
- package/dist/agent/decision/trees/launchDecisionTree.js +670 -0
- package/dist/agent/decision/trees/launchDecisionTree.js.map +1 -0
- package/dist/agent/decision/trees/scrollingDecisionTree.d.ts +7 -0
- package/dist/agent/decision/trees/scrollingDecisionTree.d.ts.map +1 -0
- package/dist/agent/decision/trees/scrollingDecisionTree.js +698 -0
- package/dist/agent/decision/trees/scrollingDecisionTree.js.map +1 -0
- package/dist/agent/decision/types.d.ts +191 -0
- package/dist/agent/decision/types.d.ts.map +1 -0
- package/dist/agent/decision/types.js +6 -0
- package/dist/agent/decision/types.js.map +1 -0
- package/dist/agent/detectors/architectureDetector.d.ts +31 -0
- package/dist/agent/detectors/architectureDetector.d.ts.map +1 -0
- package/dist/agent/detectors/architectureDetector.js +190 -0
- package/dist/agent/detectors/architectureDetector.js.map +1 -0
- package/dist/agent/detectors/index.d.ts +11 -0
- package/dist/agent/detectors/index.d.ts.map +1 -0
- package/dist/agent/detectors/index.js +36 -0
- package/dist/agent/detectors/index.js.map +1 -0
- package/dist/agent/detectors/types.d.ts +113 -0
- package/dist/agent/detectors/types.d.ts.map +1 -0
- package/dist/agent/detectors/types.js +6 -0
- package/dist/agent/detectors/types.js.map +1 -0
- package/dist/agent/evalSystem.d.ts +61 -0
- package/dist/agent/evalSystem.d.ts.map +1 -0
- package/dist/agent/evalSystem.js +210 -0
- package/dist/agent/evalSystem.js.map +1 -0
- package/dist/agent/experts/base/baseExpert.d.ts +108 -0
- package/dist/agent/experts/base/baseExpert.d.ts.map +1 -0
- package/dist/agent/experts/base/baseExpert.js +359 -0
- package/dist/agent/experts/base/baseExpert.js.map +1 -0
- package/dist/agent/experts/base/index.d.ts +9 -0
- package/dist/agent/experts/base/index.d.ts.map +1 -0
- package/dist/agent/experts/base/index.js +15 -0
- package/dist/agent/experts/base/index.js.map +1 -0
- package/dist/agent/experts/base/types.d.ts +202 -0
- package/dist/agent/experts/base/types.d.ts.map +1 -0
- package/dist/agent/experts/base/types.js +6 -0
- package/dist/agent/experts/base/types.js.map +1 -0
- package/dist/agent/experts/crossDomain/baseCrossDomainExpert.d.ts +113 -0
- package/dist/agent/experts/crossDomain/baseCrossDomainExpert.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/baseCrossDomainExpert.js +412 -0
- package/dist/agent/experts/crossDomain/baseCrossDomainExpert.js.map +1 -0
- package/dist/agent/experts/crossDomain/dialogueProtocol.d.ts +164 -0
- package/dist/agent/experts/crossDomain/dialogueProtocol.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/dialogueProtocol.js +390 -0
- package/dist/agent/experts/crossDomain/dialogueProtocol.js.map +1 -0
- package/dist/agent/experts/crossDomain/experts/performanceExpert.d.ts +119 -0
- package/dist/agent/experts/crossDomain/experts/performanceExpert.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/experts/performanceExpert.js +736 -0
- package/dist/agent/experts/crossDomain/experts/performanceExpert.js.map +1 -0
- package/dist/agent/experts/crossDomain/hypothesisManager.d.ts +105 -0
- package/dist/agent/experts/crossDomain/hypothesisManager.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/hypothesisManager.js +283 -0
- package/dist/agent/experts/crossDomain/hypothesisManager.js.map +1 -0
- package/dist/agent/experts/crossDomain/index.d.ts +18 -0
- package/dist/agent/experts/crossDomain/index.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/index.js +28 -0
- package/dist/agent/experts/crossDomain/index.js.map +1 -0
- package/dist/agent/experts/crossDomain/moduleCatalog.d.ts +97 -0
- package/dist/agent/experts/crossDomain/moduleCatalog.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/moduleCatalog.js +453 -0
- package/dist/agent/experts/crossDomain/moduleCatalog.js.map +1 -0
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts +149 -0
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js +582 -0
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js.map +1 -0
- package/dist/agent/experts/crossDomain/types.d.ts +369 -0
- package/dist/agent/experts/crossDomain/types.d.ts.map +1 -0
- package/dist/agent/experts/crossDomain/types.js +6 -0
- package/dist/agent/experts/crossDomain/types.js.map +1 -0
- package/dist/agent/experts/index.d.ts +81 -0
- package/dist/agent/experts/index.d.ts.map +1 -0
- package/dist/agent/experts/index.js +222 -0
- package/dist/agent/experts/index.js.map +1 -0
- package/dist/agent/experts/interactionExpert.d.ts +66 -0
- package/dist/agent/experts/interactionExpert.d.ts.map +1 -0
- package/dist/agent/experts/interactionExpert.js +280 -0
- package/dist/agent/experts/interactionExpert.js.map +1 -0
- package/dist/agent/experts/launchExpert.d.ts +73 -0
- package/dist/agent/experts/launchExpert.d.ts.map +1 -0
- package/dist/agent/experts/launchExpert.js +411 -0
- package/dist/agent/experts/launchExpert.js.map +1 -0
- package/dist/agent/experts/systemExpert.d.ts +81 -0
- package/dist/agent/experts/systemExpert.d.ts.map +1 -0
- package/dist/agent/experts/systemExpert.js +507 -0
- package/dist/agent/experts/systemExpert.js.map +1 -0
- package/dist/agent/fork/forkManager.d.ts +161 -0
- package/dist/agent/fork/forkManager.d.ts.map +1 -0
- package/dist/agent/fork/forkManager.js +721 -0
- package/dist/agent/fork/forkManager.js.map +1 -0
- package/dist/agent/fork/forkTypes.d.ts +274 -0
- package/dist/agent/fork/forkTypes.d.ts.map +1 -0
- package/dist/agent/fork/forkTypes.js +18 -0
- package/dist/agent/fork/forkTypes.js.map +1 -0
- package/dist/agent/fork/index.d.ts +10 -0
- package/dist/agent/fork/index.d.ts.map +1 -0
- package/dist/agent/fork/index.js +47 -0
- package/dist/agent/fork/index.js.map +1 -0
- package/dist/agent/fork/mergeStrategies.d.ts +115 -0
- package/dist/agent/fork/mergeStrategies.d.ts.map +1 -0
- package/dist/agent/fork/mergeStrategies.js +404 -0
- package/dist/agent/fork/mergeStrategies.js.map +1 -0
- package/dist/agent/fork/sessionTree.d.ts +141 -0
- package/dist/agent/fork/sessionTree.d.ts.map +1 -0
- package/dist/agent/fork/sessionTree.js +443 -0
- package/dist/agent/fork/sessionTree.js.map +1 -0
- package/dist/agent/hooks/hookContext.d.ts +19 -0
- package/dist/agent/hooks/hookContext.d.ts.map +1 -0
- package/dist/agent/hooks/hookContext.js +67 -0
- package/dist/agent/hooks/hookContext.js.map +1 -0
- package/dist/agent/hooks/hookRegistry.d.ts +73 -0
- package/dist/agent/hooks/hookRegistry.d.ts.map +1 -0
- package/dist/agent/hooks/hookRegistry.js +271 -0
- package/dist/agent/hooks/hookRegistry.js.map +1 -0
- package/dist/agent/hooks/hookTypes.d.ts +186 -0
- package/dist/agent/hooks/hookTypes.d.ts.map +1 -0
- package/dist/agent/hooks/hookTypes.js +24 -0
- package/dist/agent/hooks/hookTypes.js.map +1 -0
- package/dist/agent/hooks/index.d.ts +10 -0
- package/dist/agent/hooks/index.d.ts.map +1 -0
- package/dist/agent/hooks/index.js +41 -0
- package/dist/agent/hooks/index.js.map +1 -0
- package/dist/agent/hooks/middleware/index.d.ts +6 -0
- package/dist/agent/hooks/middleware/index.d.ts.map +1 -0
- package/dist/agent/hooks/middleware/index.js +17 -0
- package/dist/agent/hooks/middleware/index.js.map +1 -0
- package/dist/agent/hooks/middleware/loggingMiddleware.d.ts +27 -0
- package/dist/agent/hooks/middleware/loggingMiddleware.d.ts.map +1 -0
- package/dist/agent/hooks/middleware/loggingMiddleware.js +104 -0
- package/dist/agent/hooks/middleware/loggingMiddleware.js.map +1 -0
- package/dist/agent/hooks/middleware/timingMiddleware.d.ts +56 -0
- package/dist/agent/hooks/middleware/timingMiddleware.d.ts.map +1 -0
- package/dist/agent/hooks/middleware/timingMiddleware.js +171 -0
- package/dist/agent/hooks/middleware/timingMiddleware.js.map +1 -0
- package/dist/agent/index.d.ts +15 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +88 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/llmAdapter.d.ts +33 -0
- package/dist/agent/llmAdapter.d.ts.map +1 -0
- package/dist/agent/llmAdapter.js +257 -0
- package/dist/agent/llmAdapter.js.map +1 -0
- package/dist/agent/scene/sceneAnalysisJobRunner.d.ts +106 -0
- package/dist/agent/scene/sceneAnalysisJobRunner.d.ts.map +1 -0
- package/dist/agent/scene/sceneAnalysisJobRunner.js +201 -0
- package/dist/agent/scene/sceneAnalysisJobRunner.js.map +1 -0
- package/dist/agent/scene/sceneCostEstimator.d.ts +33 -0
- package/dist/agent/scene/sceneCostEstimator.d.ts.map +1 -0
- package/dist/agent/scene/sceneCostEstimator.js +42 -0
- package/dist/agent/scene/sceneCostEstimator.js.map +1 -0
- package/dist/agent/scene/sceneIntervalBuilder.d.ts +37 -0
- package/dist/agent/scene/sceneIntervalBuilder.d.ts.map +1 -0
- package/dist/agent/scene/sceneIntervalBuilder.js +748 -0
- package/dist/agent/scene/sceneIntervalBuilder.js.map +1 -0
- package/dist/agent/scene/sceneStage1Runner.d.ts +47 -0
- package/dist/agent/scene/sceneStage1Runner.d.ts.map +1 -0
- package/dist/agent/scene/sceneStage1Runner.js +49 -0
- package/dist/agent/scene/sceneStage1Runner.js.map +1 -0
- package/dist/agent/scene/sceneStage3Summarizer.d.ts +11 -0
- package/dist/agent/scene/sceneStage3Summarizer.d.ts.map +1 -0
- package/dist/agent/scene/sceneStage3Summarizer.js +155 -0
- package/dist/agent/scene/sceneStage3Summarizer.js.map +1 -0
- package/dist/agent/scene/sceneStoryService.d.ts +168 -0
- package/dist/agent/scene/sceneStoryService.d.ts.map +1 -0
- package/dist/agent/scene/sceneStoryService.js +623 -0
- package/dist/agent/scene/sceneStoryService.js.map +1 -0
- package/dist/agent/scene/sceneTraceDurationProbe.d.ts +16 -0
- package/dist/agent/scene/sceneTraceDurationProbe.d.ts.map +1 -0
- package/dist/agent/scene/sceneTraceDurationProbe.js +22 -0
- package/dist/agent/scene/sceneTraceDurationProbe.js.map +1 -0
- package/dist/agent/scene/traceHash.d.ts +23 -0
- package/dist/agent/scene/traceHash.d.ts.map +1 -0
- package/dist/agent/scene/traceHash.js +65 -0
- package/dist/agent/scene/traceHash.js.map +1 -0
- package/dist/agent/scene/types.d.ts +199 -0
- package/dist/agent/scene/types.d.ts.map +1 -0
- package/dist/agent/scene/types.js +6 -0
- package/dist/agent/scene/types.js.map +1 -0
- package/dist/agent/state/checkpointManager.d.ts +85 -0
- package/dist/agent/state/checkpointManager.d.ts.map +1 -0
- package/dist/agent/state/checkpointManager.js +339 -0
- package/dist/agent/state/checkpointManager.js.map +1 -0
- package/dist/agent/state/index.d.ts +11 -0
- package/dist/agent/state/index.d.ts.map +1 -0
- package/dist/agent/state/index.js +21 -0
- package/dist/agent/state/index.js.map +1 -0
- package/dist/agent/state/sessionStore.d.ts +126 -0
- package/dist/agent/state/sessionStore.d.ts.map +1 -0
- package/dist/agent/state/sessionStore.js +440 -0
- package/dist/agent/state/sessionStore.js.map +1 -0
- package/dist/agent/state/traceAgentState.d.ts +125 -0
- package/dist/agent/state/traceAgentState.d.ts.map +1 -0
- package/dist/agent/state/traceAgentState.js +173 -0
- package/dist/agent/state/traceAgentState.js.map +1 -0
- package/dist/agent/strategies/helpers.d.ts +44 -0
- package/dist/agent/strategies/helpers.d.ts.map +1 -0
- package/dist/agent/strategies/helpers.js +138 -0
- package/dist/agent/strategies/helpers.js.map +1 -0
- package/dist/agent/strategies/index.d.ts +15 -0
- package/dist/agent/strategies/index.d.ts.map +1 -0
- package/dist/agent/strategies/index.js +23 -0
- package/dist/agent/strategies/index.js.map +1 -0
- package/dist/agent/strategies/interactionStrategy.d.ts +3 -0
- package/dist/agent/strategies/interactionStrategy.d.ts.map +1 -0
- package/dist/agent/strategies/interactionStrategy.js +242 -0
- package/dist/agent/strategies/interactionStrategy.js.map +1 -0
- package/dist/agent/strategies/registry.d.ts +110 -0
- package/dist/agent/strategies/registry.d.ts.map +1 -0
- package/dist/agent/strategies/registry.js +264 -0
- package/dist/agent/strategies/registry.js.map +1 -0
- package/dist/agent/strategies/sceneReconstructionStrategy.d.ts +4 -0
- package/dist/agent/strategies/sceneReconstructionStrategy.d.ts.map +1 -0
- package/dist/agent/strategies/sceneReconstructionStrategy.js +593 -0
- package/dist/agent/strategies/sceneReconstructionStrategy.js.map +1 -0
- package/dist/agent/strategies/scrollingStrategy.d.ts +3 -0
- package/dist/agent/strategies/scrollingStrategy.d.ts.map +1 -0
- package/dist/agent/strategies/scrollingStrategy.js +414 -0
- package/dist/agent/strategies/scrollingStrategy.js.map +1 -0
- package/dist/agent/strategies/startupStrategy.d.ts +3 -0
- package/dist/agent/strategies/startupStrategy.d.ts.map +1 -0
- package/dist/agent/strategies/startupStrategy.js +495 -0
- package/dist/agent/strategies/startupStrategy.js.map +1 -0
- package/dist/agent/strategies/types.d.ts +156 -0
- package/dist/agent/strategies/types.d.ts.map +1 -0
- package/dist/agent/strategies/types.js +6 -0
- package/dist/agent/strategies/types.js.map +1 -0
- package/dist/agent/toolRegistry.d.ts +4 -0
- package/dist/agent/toolRegistry.d.ts.map +1 -0
- package/dist/agent/toolRegistry.js +45 -0
- package/dist/agent/toolRegistry.js.map +1 -0
- package/dist/agent/tools/dataStats.d.ts +23 -0
- package/dist/agent/tools/dataStats.d.ts.map +1 -0
- package/dist/agent/tools/dataStats.js +123 -0
- package/dist/agent/tools/dataStats.js.map +1 -0
- package/dist/agent/tools/frameAnalyzer.d.ts +45 -0
- package/dist/agent/tools/frameAnalyzer.d.ts.map +1 -0
- package/dist/agent/tools/frameAnalyzer.js +338 -0
- package/dist/agent/tools/frameAnalyzer.js.map +1 -0
- package/dist/agent/tools/index.d.ts +6 -0
- package/dist/agent/tools/index.d.ts.map +1 -0
- package/dist/agent/tools/index.js +31 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/skillInvoker.d.ts +50 -0
- package/dist/agent/tools/skillInvoker.d.ts.map +1 -0
- package/dist/agent/tools/skillInvoker.js +279 -0
- package/dist/agent/tools/skillInvoker.js.map +1 -0
- package/dist/agent/tools/sqlExecutor.d.ts +12 -0
- package/dist/agent/tools/sqlExecutor.d.ts.map +1 -0
- package/dist/agent/tools/sqlExecutor.js +193 -0
- package/dist/agent/tools/sqlExecutor.js.map +1 -0
- package/dist/agent/tools/sqlGenerator.d.ts +154 -0
- package/dist/agent/tools/sqlGenerator.d.ts.map +1 -0
- package/dist/agent/tools/sqlGenerator.js +449 -0
- package/dist/agent/tools/sqlGenerator.js.map +1 -0
- package/dist/agent/tools/sqlValidator.d.ts +149 -0
- package/dist/agent/tools/sqlValidator.d.ts.map +1 -0
- package/dist/agent/tools/sqlValidator.js +376 -0
- package/dist/agent/tools/sqlValidator.js.map +1 -0
- package/dist/agent/traceRecorder.d.ts +42 -0
- package/dist/agent/traceRecorder.d.ts.map +1 -0
- package/dist/agent/traceRecorder.js +122 -0
- package/dist/agent/traceRecorder.js.map +1 -0
- package/dist/agent/types/agentProtocol.d.ts +377 -0
- package/dist/agent/types/agentProtocol.d.ts.map +1 -0
- package/dist/agent/types/agentProtocol.js +102 -0
- package/dist/agent/types/agentProtocol.js.map +1 -0
- package/dist/agent/types/jankCause.d.ts +47 -0
- package/dist/agent/types/jankCause.d.ts.map +1 -0
- package/dist/agent/types/jankCause.js +6 -0
- package/dist/agent/types/jankCause.js.map +1 -0
- package/dist/agent/types.d.ts +725 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +63 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agentOpenAI/index.d.ts +4 -0
- package/dist/agentOpenAI/index.d.ts.map +1 -0
- package/dist/agentOpenAI/index.js +17 -0
- package/dist/agentOpenAI/index.js.map +1 -0
- package/dist/agentOpenAI/mimoReasoningCompat.d.ts +9 -0
- package/dist/agentOpenAI/mimoReasoningCompat.d.ts.map +1 -0
- package/dist/agentOpenAI/mimoReasoningCompat.js +367 -0
- package/dist/agentOpenAI/mimoReasoningCompat.js.map +1 -0
- package/dist/agentOpenAI/openAiComplexityClassifier.d.ts +18 -0
- package/dist/agentOpenAI/openAiComplexityClassifier.d.ts.map +1 -0
- package/dist/agentOpenAI/openAiComplexityClassifier.js +102 -0
- package/dist/agentOpenAI/openAiComplexityClassifier.js.map +1 -0
- package/dist/agentOpenAI/openAiConfig.d.ts +38 -0
- package/dist/agentOpenAI/openAiConfig.d.ts.map +1 -0
- package/dist/agentOpenAI/openAiConfig.js +104 -0
- package/dist/agentOpenAI/openAiConfig.js.map +1 -0
- package/dist/agentOpenAI/openAiRuntime.d.ts +99 -0
- package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -0
- package/dist/agentOpenAI/openAiRuntime.js +1440 -0
- package/dist/agentOpenAI/openAiRuntime.js.map +1 -0
- package/dist/agentOpenAI/openAiToolAdapter.d.ts +9 -0
- package/dist/agentOpenAI/openAiToolAdapter.d.ts.map +1 -0
- package/dist/agentOpenAI/openAiToolAdapter.js +111 -0
- package/dist/agentOpenAI/openAiToolAdapter.js.map +1 -0
- package/dist/agentRuntime/envCredentialSources.d.ts +6 -0
- package/dist/agentRuntime/envCredentialSources.d.ts.map +1 -0
- package/dist/agentRuntime/envCredentialSources.js +104 -0
- package/dist/agentRuntime/envCredentialSources.js.map +1 -0
- package/dist/agentRuntime/index.d.ts +2 -0
- package/dist/agentRuntime/index.d.ts.map +1 -0
- package/dist/agentRuntime/index.js +10 -0
- package/dist/agentRuntime/index.js.map +1 -0
- package/dist/agentRuntime/runtimeHealth.d.ts +65 -0
- package/dist/agentRuntime/runtimeHealth.d.ts.map +1 -0
- package/dist/agentRuntime/runtimeHealth.js +58 -0
- package/dist/agentRuntime/runtimeHealth.js.map +1 -0
- package/dist/agentRuntime/runtimeSelection.d.ts +25 -0
- package/dist/agentRuntime/runtimeSelection.d.ts.map +1 -0
- package/dist/agentRuntime/runtimeSelection.js +66 -0
- package/dist/agentRuntime/runtimeSelection.js.map +1 -0
- package/dist/agentv3/__mocks__/claude-agent-sdk.d.ts +25 -0
- package/dist/agentv3/__mocks__/claude-agent-sdk.d.ts.map +1 -0
- package/dist/agentv3/__mocks__/claude-agent-sdk.js +48 -0
- package/dist/agentv3/__mocks__/claude-agent-sdk.js.map +1 -0
- package/dist/agentv3/activePhaseReminder.d.ts +12 -0
- package/dist/agentv3/activePhaseReminder.d.ts.map +1 -0
- package/dist/agentv3/activePhaseReminder.js +73 -0
- package/dist/agentv3/activePhaseReminder.js.map +1 -0
- package/dist/agentv3/agentMetrics.d.ts +114 -0
- package/dist/agentv3/agentMetrics.d.ts.map +1 -0
- package/dist/agentv3/agentMetrics.js +262 -0
- package/dist/agentv3/agentMetrics.js.map +1 -0
- package/dist/agentv3/analysisPatternMemory.d.ts +146 -0
- package/dist/agentv3/analysisPatternMemory.d.ts.map +1 -0
- package/dist/agentv3/analysisPatternMemory.js +860 -0
- package/dist/agentv3/analysisPatternMemory.js.map +1 -0
- package/dist/agentv3/analysisTermination.d.ts +21 -0
- package/dist/agentv3/analysisTermination.d.ts.map +1 -0
- package/dist/agentv3/analysisTermination.js +97 -0
- package/dist/agentv3/analysisTermination.js.map +1 -0
- package/dist/agentv3/artifactStore.d.ts +131 -0
- package/dist/agentv3/artifactStore.d.ts.map +1 -0
- package/dist/agentv3/artifactStore.js +208 -0
- package/dist/agentv3/artifactStore.js.map +1 -0
- package/dist/agentv3/claudeAgentDefinitions.d.ts +44 -0
- package/dist/agentv3/claudeAgentDefinitions.d.ts.map +1 -0
- package/dist/agentv3/claudeAgentDefinitions.js +209 -0
- package/dist/agentv3/claudeAgentDefinitions.js.map +1 -0
- package/dist/agentv3/claudeConfig.d.ts +156 -0
- package/dist/agentv3/claudeConfig.d.ts.map +1 -0
- package/dist/agentv3/claudeConfig.js +553 -0
- package/dist/agentv3/claudeConfig.js.map +1 -0
- package/dist/agentv3/claudeFindingExtractor.d.ts +15 -0
- package/dist/agentv3/claudeFindingExtractor.d.ts.map +1 -0
- package/dist/agentv3/claudeFindingExtractor.js +150 -0
- package/dist/agentv3/claudeFindingExtractor.js.map +1 -0
- package/dist/agentv3/claudeMcpServer.d.ts +89 -0
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -0
- package/dist/agentv3/claudeMcpServer.js +3785 -0
- package/dist/agentv3/claudeMcpServer.js.map +1 -0
- package/dist/agentv3/claudeRuntime.d.ts +137 -0
- package/dist/agentv3/claudeRuntime.d.ts.map +1 -0
- package/dist/agentv3/claudeRuntime.js +2541 -0
- package/dist/agentv3/claudeRuntime.js.map +1 -0
- package/dist/agentv3/claudeSseBridge.d.ts +23 -0
- package/dist/agentv3/claudeSseBridge.d.ts.map +1 -0
- package/dist/agentv3/claudeSseBridge.js +385 -0
- package/dist/agentv3/claudeSseBridge.js.map +1 -0
- package/dist/agentv3/claudeSystemPrompt.d.ts +65 -0
- package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -0
- package/dist/agentv3/claudeSystemPrompt.js +486 -0
- package/dist/agentv3/claudeSystemPrompt.js.map +1 -0
- package/dist/agentv3/claudeVerifier.d.ts +82 -0
- package/dist/agentv3/claudeVerifier.d.ts.map +1 -0
- package/dist/agentv3/claudeVerifier.js +1047 -0
- package/dist/agentv3/claudeVerifier.js.map +1 -0
- package/dist/agentv3/contextTokenMeter.d.ts +78 -0
- package/dist/agentv3/contextTokenMeter.d.ts.map +1 -0
- package/dist/agentv3/contextTokenMeter.js +88 -0
- package/dist/agentv3/contextTokenMeter.js.map +1 -0
- package/dist/agentv3/focusAppDetector.d.ts +22 -0
- package/dist/agentv3/focusAppDetector.d.ts.map +1 -0
- package/dist/agentv3/focusAppDetector.js +208 -0
- package/dist/agentv3/focusAppDetector.js.map +1 -0
- package/dist/agentv3/index.d.ts +6 -0
- package/dist/agentv3/index.d.ts.map +1 -0
- package/dist/agentv3/index.js +16 -0
- package/dist/agentv3/index.js.map +1 -0
- package/dist/agentv3/mcpToolRegistry.d.ts +90 -0
- package/dist/agentv3/mcpToolRegistry.d.ts.map +1 -0
- package/dist/agentv3/mcpToolRegistry.js +152 -0
- package/dist/agentv3/mcpToolRegistry.js.map +1 -0
- package/dist/agentv3/outputLanguage.d.ts +6 -0
- package/dist/agentv3/outputLanguage.d.ts.map +1 -0
- package/dist/agentv3/outputLanguage.js +37 -0
- package/dist/agentv3/outputLanguage.js.map +1 -0
- package/dist/agentv3/phaseHintMatcher.d.ts +36 -0
- package/dist/agentv3/phaseHintMatcher.d.ts.map +1 -0
- package/dist/agentv3/phaseHintMatcher.js +48 -0
- package/dist/agentv3/phaseHintMatcher.js.map +1 -0
- package/dist/agentv3/projectMemory.d.ts +80 -0
- package/dist/agentv3/projectMemory.d.ts.map +1 -0
- package/dist/agentv3/projectMemory.js +334 -0
- package/dist/agentv3/projectMemory.js.map +1 -0
- package/dist/agentv3/queryComplexityClassifier.d.ts +21 -0
- package/dist/agentv3/queryComplexityClassifier.d.ts.map +1 -0
- package/dist/agentv3/queryComplexityClassifier.js +196 -0
- package/dist/agentv3/queryComplexityClassifier.js.map +1 -0
- package/dist/agentv3/rawSqlNormalizer.d.ts +11 -0
- package/dist/agentv3/rawSqlNormalizer.d.ts.map +1 -0
- package/dist/agentv3/rawSqlNormalizer.js +649 -0
- package/dist/agentv3/rawSqlNormalizer.js.map +1 -0
- package/dist/agentv3/recoveryNoteBuilder.d.ts +51 -0
- package/dist/agentv3/recoveryNoteBuilder.d.ts.map +1 -0
- package/dist/agentv3/recoveryNoteBuilder.js +84 -0
- package/dist/agentv3/recoveryNoteBuilder.js.map +1 -0
- package/dist/agentv3/sceneClassifier.d.ts +11 -0
- package/dist/agentv3/sceneClassifier.d.ts.map +1 -0
- package/dist/agentv3/sceneClassifier.js +46 -0
- package/dist/agentv3/sceneClassifier.js.map +1 -0
- package/dist/agentv3/scenePlanTemplates.d.ts +80 -0
- package/dist/agentv3/scenePlanTemplates.d.ts.map +1 -0
- package/dist/agentv3/scenePlanTemplates.js +164 -0
- package/dist/agentv3/scenePlanTemplates.js.map +1 -0
- package/dist/agentv3/selfImprove/contentScanner.d.ts +44 -0
- package/dist/agentv3/selfImprove/contentScanner.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/contentScanner.js +112 -0
- package/dist/agentv3/selfImprove/contentScanner.js.map +1 -0
- package/dist/agentv3/selfImprove/failureTaxonomy.d.ts +38 -0
- package/dist/agentv3/selfImprove/failureTaxonomy.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/failureTaxonomy.js +102 -0
- package/dist/agentv3/selfImprove/failureTaxonomy.js.map +1 -0
- package/dist/agentv3/selfImprove/feedbackEnricher.d.ts +69 -0
- package/dist/agentv3/selfImprove/feedbackEnricher.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/feedbackEnricher.js +135 -0
- package/dist/agentv3/selfImprove/feedbackEnricher.js.map +1 -0
- package/dist/agentv3/selfImprove/feedbackPipeline.d.ts +63 -0
- package/dist/agentv3/selfImprove/feedbackPipeline.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/feedbackPipeline.js +239 -0
- package/dist/agentv3/selfImprove/feedbackPipeline.js.map +1 -0
- package/dist/agentv3/selfImprove/hintFingerprint.d.ts +14 -0
- package/dist/agentv3/selfImprove/hintFingerprint.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/hintFingerprint.js +47 -0
- package/dist/agentv3/selfImprove/hintFingerprint.js.map +1 -0
- package/dist/agentv3/selfImprove/metricsAggregator.d.ts +46 -0
- package/dist/agentv3/selfImprove/metricsAggregator.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/metricsAggregator.js +195 -0
- package/dist/agentv3/selfImprove/metricsAggregator.js.map +1 -0
- package/dist/agentv3/selfImprove/migrateFailureModeHash.d.ts +31 -0
- package/dist/agentv3/selfImprove/migrateFailureModeHash.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/migrateFailureModeHash.js +220 -0
- package/dist/agentv3/selfImprove/migrateFailureModeHash.js.map +1 -0
- package/dist/agentv3/selfImprove/phaseHintsRenderer.d.ts +56 -0
- package/dist/agentv3/selfImprove/phaseHintsRenderer.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/phaseHintsRenderer.js +202 -0
- package/dist/agentv3/selfImprove/phaseHintsRenderer.js.map +1 -0
- package/dist/agentv3/selfImprove/promoteSkillNote.d.ts +17 -0
- package/dist/agentv3/selfImprove/promoteSkillNote.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/promoteSkillNote.js +146 -0
- package/dist/agentv3/selfImprove/promoteSkillNote.js.map +1 -0
- package/dist/agentv3/selfImprove/proposeStrategyPatch.d.ts +40 -0
- package/dist/agentv3/selfImprove/proposeStrategyPatch.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/proposeStrategyPatch.js +115 -0
- package/dist/agentv3/selfImprove/proposeStrategyPatch.js.map +1 -0
- package/dist/agentv3/selfImprove/reviewAgentSdk.d.ts +32 -0
- package/dist/agentv3/selfImprove/reviewAgentSdk.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/reviewAgentSdk.js +173 -0
- package/dist/agentv3/selfImprove/reviewAgentSdk.js.map +1 -0
- package/dist/agentv3/selfImprove/reviewOutbox.d.ts +128 -0
- package/dist/agentv3/selfImprove/reviewOutbox.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/reviewOutbox.js +313 -0
- package/dist/agentv3/selfImprove/reviewOutbox.js.map +1 -0
- package/dist/agentv3/selfImprove/reviewWorker.d.ts +95 -0
- package/dist/agentv3/selfImprove/reviewWorker.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/reviewWorker.js +172 -0
- package/dist/agentv3/selfImprove/reviewWorker.js.map +1 -0
- package/dist/agentv3/selfImprove/skillNotesInjector.d.ts +71 -0
- package/dist/agentv3/selfImprove/skillNotesInjector.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/skillNotesInjector.js +214 -0
- package/dist/agentv3/selfImprove/skillNotesInjector.js.map +1 -0
- package/dist/agentv3/selfImprove/skillNotesWriter.d.ts +89 -0
- package/dist/agentv3/selfImprove/skillNotesWriter.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/skillNotesWriter.js +274 -0
- package/dist/agentv3/selfImprove/skillNotesWriter.js.map +1 -0
- package/dist/agentv3/selfImprove/strategyFingerprint.d.ts +85 -0
- package/dist/agentv3/selfImprove/strategyFingerprint.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/strategyFingerprint.js +189 -0
- package/dist/agentv3/selfImprove/strategyFingerprint.js.map +1 -0
- package/dist/agentv3/selfImprove/strategyPatchApplier.d.ts +15 -0
- package/dist/agentv3/selfImprove/strategyPatchApplier.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/strategyPatchApplier.js +138 -0
- package/dist/agentv3/selfImprove/strategyPatchApplier.js.map +1 -0
- package/dist/agentv3/selfImprove/supersedeStore.d.ts +136 -0
- package/dist/agentv3/selfImprove/supersedeStore.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/supersedeStore.js +386 -0
- package/dist/agentv3/selfImprove/supersedeStore.js.map +1 -0
- package/dist/agentv3/selfImprove/worktreeRunner.d.ts +49 -0
- package/dist/agentv3/selfImprove/worktreeRunner.d.ts.map +1 -0
- package/dist/agentv3/selfImprove/worktreeRunner.js +153 -0
- package/dist/agentv3/selfImprove/worktreeRunner.js.map +1 -0
- package/dist/agentv3/sessionStateSnapshot.d.ts +166 -0
- package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -0
- package/dist/agentv3/sessionStateSnapshot.js +6 -0
- package/dist/agentv3/sessionStateSnapshot.js.map +1 -0
- package/dist/agentv3/sqlIncludeInjector.d.ts +24 -0
- package/dist/agentv3/sqlIncludeInjector.d.ts.map +1 -0
- package/dist/agentv3/sqlIncludeInjector.js +78 -0
- package/dist/agentv3/sqlIncludeInjector.js.map +1 -0
- package/dist/agentv3/sqlSummarizer.d.ts +38 -0
- package/dist/agentv3/sqlSummarizer.d.ts.map +1 -0
- package/dist/agentv3/sqlSummarizer.js +101 -0
- package/dist/agentv3/sqlSummarizer.js.map +1 -0
- package/dist/agentv3/standaloneMcpServer.d.ts +96 -0
- package/dist/agentv3/standaloneMcpServer.d.ts.map +1 -0
- package/dist/agentv3/standaloneMcpServer.js +244 -0
- package/dist/agentv3/standaloneMcpServer.js.map +1 -0
- package/dist/agentv3/strategyLoader.d.ts +96 -0
- package/dist/agentv3/strategyLoader.d.ts.map +1 -0
- package/dist/agentv3/strategyLoader.js +204 -0
- package/dist/agentv3/strategyLoader.js.map +1 -0
- package/dist/agentv3/toolCallSummary.d.ts +15 -0
- package/dist/agentv3/toolCallSummary.d.ts.map +1 -0
- package/dist/agentv3/toolCallSummary.js +66 -0
- package/dist/agentv3/toolCallSummary.js.map +1 -0
- package/dist/agentv3/toolNarration.d.ts +4 -0
- package/dist/agentv3/toolNarration.d.ts.map +1 -0
- package/dist/agentv3/toolNarration.js +371 -0
- package/dist/agentv3/toolNarration.js.map +1 -0
- package/dist/agentv3/traceCompletenessProber.d.ts +56 -0
- package/dist/agentv3/traceCompletenessProber.d.ts.map +1 -0
- package/dist/agentv3/traceCompletenessProber.js +337 -0
- package/dist/agentv3/traceCompletenessProber.js.map +1 -0
- package/dist/agentv3/types.d.ts +443 -0
- package/dist/agentv3/types.d.ts.map +1 -0
- package/dist/agentv3/types.js +37 -0
- package/dist/agentv3/types.js.map +1 -0
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts +130 -0
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts.map +1 -0
- package/dist/assistant/application/agentAnalyzeSessionService.js +433 -0
- package/dist/assistant/application/agentAnalyzeSessionService.js.map +1 -0
- package/dist/assistant/application/assistantApplicationService.d.ts +39 -0
- package/dist/assistant/application/assistantApplicationService.d.ts.map +1 -0
- package/dist/assistant/application/assistantApplicationService.js +88 -0
- package/dist/assistant/application/assistantApplicationService.js.map +1 -0
- package/dist/assistant/contracts/assistantResultContract.d.ts +41 -0
- package/dist/assistant/contracts/assistantResultContract.d.ts.map +1 -0
- package/dist/assistant/contracts/assistantResultContract.js +145 -0
- package/dist/assistant/contracts/assistantResultContract.js.map +1 -0
- package/dist/assistant/stream/sessionSseReplay.d.ts +10 -0
- package/dist/assistant/stream/sessionSseReplay.d.ts.map +1 -0
- package/dist/assistant/stream/sessionSseReplay.js +42 -0
- package/dist/assistant/stream/sessionSseReplay.js.map +1 -0
- package/dist/assistant/stream/streamProjector.d.ts +53 -0
- package/dist/assistant/stream/streamProjector.d.ts.map +1 -0
- package/dist/assistant/stream/streamProjector.js +150 -0
- package/dist/assistant/stream/streamProjector.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +12 -0
- package/dist/cli/commands/coverage.d.ts.map +1 -0
- package/dist/cli/commands/coverage.js +106 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/list.d.ts +11 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +169 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/smoke.d.ts +11 -0
- package/dist/cli/commands/smoke.d.ts.map +1 -0
- package/dist/cli/commands/smoke.js +215 -0
- package/dist/cli/commands/smoke.js.map +1 -0
- package/dist/cli/commands/test.d.ts +11 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +183 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +26 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +918 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli-user/bin.d.ts +3 -0
- package/dist/cli-user/bin.d.ts.map +1 -0
- package/dist/cli-user/bin.js +490 -0
- package/dist/cli-user/bin.js.map +1 -0
- package/dist/cli-user/bootstrap.d.ts +12 -0
- package/dist/cli-user/bootstrap.d.ts.map +1 -0
- package/dist/cli-user/bootstrap.js +165 -0
- package/dist/cli-user/bootstrap.js.map +1 -0
- package/dist/cli-user/commands/analyze.d.ts +12 -0
- package/dist/cli-user/commands/analyze.d.ts.map +1 -0
- package/dist/cli-user/commands/analyze.js +83 -0
- package/dist/cli-user/commands/analyze.js.map +1 -0
- package/dist/cli-user/commands/capture.d.ts +12 -0
- package/dist/cli-user/commands/capture.d.ts.map +1 -0
- package/dist/cli-user/commands/capture.js +155 -0
- package/dist/cli-user/commands/capture.js.map +1 -0
- package/dist/cli-user/commands/compare.d.ts +13 -0
- package/dist/cli-user/commands/compare.d.ts.map +1 -0
- package/dist/cli-user/commands/compare.js +74 -0
- package/dist/cli-user/commands/compare.js.map +1 -0
- package/dist/cli-user/commands/config.d.ts +9 -0
- package/dist/cli-user/commands/config.d.ts.map +1 -0
- package/dist/cli-user/commands/config.js +109 -0
- package/dist/cli-user/commands/config.js.map +1 -0
- package/dist/cli-user/commands/doctor.d.ts +8 -0
- package/dist/cli-user/commands/doctor.d.ts.map +1 -0
- package/dist/cli-user/commands/doctor.js +37 -0
- package/dist/cli-user/commands/doctor.js.map +1 -0
- package/dist/cli-user/commands/list.d.ts +10 -0
- package/dist/cli-user/commands/list.d.ts.map +1 -0
- package/dist/cli-user/commands/list.js +79 -0
- package/dist/cli-user/commands/list.js.map +1 -0
- package/dist/cli-user/commands/provider.d.ts +12 -0
- package/dist/cli-user/commands/provider.d.ts.map +1 -0
- package/dist/cli-user/commands/provider.js +121 -0
- package/dist/cli-user/commands/provider.js.map +1 -0
- package/dist/cli-user/commands/query.d.ts +10 -0
- package/dist/cli-user/commands/query.d.ts.map +1 -0
- package/dist/cli-user/commands/query.js +128 -0
- package/dist/cli-user/commands/query.js.map +1 -0
- package/dist/cli-user/commands/report.d.ts +18 -0
- package/dist/cli-user/commands/report.d.ts.map +1 -0
- package/dist/cli-user/commands/report.js +225 -0
- package/dist/cli-user/commands/report.js.map +1 -0
- package/dist/cli-user/commands/resume.d.ts +12 -0
- package/dist/cli-user/commands/resume.d.ts.map +1 -0
- package/dist/cli-user/commands/resume.js +48 -0
- package/dist/cli-user/commands/resume.js.map +1 -0
- package/dist/cli-user/commands/rm.d.ts +8 -0
- package/dist/cli-user/commands/rm.d.ts.map +1 -0
- package/dist/cli-user/commands/rm.js +91 -0
- package/dist/cli-user/commands/rm.js.map +1 -0
- package/dist/cli-user/commands/show.d.ts +8 -0
- package/dist/cli-user/commands/show.d.ts.map +1 -0
- package/dist/cli-user/commands/show.js +84 -0
- package/dist/cli-user/commands/show.js.map +1 -0
- package/dist/cli-user/commands/skill.d.ts +11 -0
- package/dist/cli-user/commands/skill.d.ts.map +1 -0
- package/dist/cli-user/commands/skill.js +118 -0
- package/dist/cli-user/commands/skill.js.map +1 -0
- package/dist/cli-user/constants.d.ts +10 -0
- package/dist/cli-user/constants.d.ts.map +1 -0
- package/dist/cli-user/constants.js +16 -0
- package/dist/cli-user/constants.js.map +1 -0
- package/dist/cli-user/io/indexJson.d.ts +11 -0
- package/dist/cli-user/io/indexJson.d.ts.map +1 -0
- package/dist/cli-user/io/indexJson.js +79 -0
- package/dist/cli-user/io/indexJson.js.map +1 -0
- package/dist/cli-user/io/openFile.d.ts +8 -0
- package/dist/cli-user/io/openFile.d.ts.map +1 -0
- package/dist/cli-user/io/openFile.js +34 -0
- package/dist/cli-user/io/openFile.js.map +1 -0
- package/dist/cli-user/io/paths.d.ts +33 -0
- package/dist/cli-user/io/paths.d.ts.map +1 -0
- package/dist/cli-user/io/paths.js +149 -0
- package/dist/cli-user/io/paths.js.map +1 -0
- package/dist/cli-user/io/sessionStore.d.ts +17 -0
- package/dist/cli-user/io/sessionStore.d.ts.map +1 -0
- package/dist/cli-user/io/sessionStore.js +101 -0
- package/dist/cli-user/io/sessionStore.js.map +1 -0
- package/dist/cli-user/io/stdio.d.ts +8 -0
- package/dist/cli-user/io/stdio.d.ts.map +1 -0
- package/dist/cli-user/io/stdio.js +25 -0
- package/dist/cli-user/io/stdio.js.map +1 -0
- package/dist/cli-user/io/transcriptWriter.d.ts +5 -0
- package/dist/cli-user/io/transcriptWriter.d.ts.map +1 -0
- package/dist/cli-user/io/transcriptWriter.js +60 -0
- package/dist/cli-user/io/transcriptWriter.js.map +1 -0
- package/dist/cli-user/repl/index.d.ts +14 -0
- package/dist/cli-user/repl/index.d.ts.map +1 -0
- package/dist/cli-user/repl/index.js +301 -0
- package/dist/cli-user/repl/index.js.map +1 -0
- package/dist/cli-user/repl/renderer.d.ts +43 -0
- package/dist/cli-user/repl/renderer.d.ts.map +1 -0
- package/dist/cli-user/repl/renderer.js +210 -0
- package/dist/cli-user/repl/renderer.js.map +1 -0
- package/dist/cli-user/repl/slashCommands.d.ts +49 -0
- package/dist/cli-user/repl/slashCommands.d.ts.map +1 -0
- package/dist/cli-user/repl/slashCommands.js +65 -0
- package/dist/cli-user/repl/slashCommands.js.map +1 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts +73 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -0
- package/dist/cli-user/services/cliAnalyzeService.js +393 -0
- package/dist/cli-user/services/cliAnalyzeService.js.map +1 -0
- package/dist/cli-user/services/runtimeGuard.d.ts +46 -0
- package/dist/cli-user/services/runtimeGuard.d.ts.map +1 -0
- package/dist/cli-user/services/runtimeGuard.js +188 -0
- package/dist/cli-user/services/runtimeGuard.js.map +1 -0
- package/dist/cli-user/services/traceProcessorInstaller.d.ts +2 -0
- package/dist/cli-user/services/traceProcessorInstaller.d.ts.map +1 -0
- package/dist/cli-user/services/traceProcessorInstaller.js +241 -0
- package/dist/cli-user/services/traceProcessorInstaller.js.map +1 -0
- package/dist/cli-user/services/turnPersistence.d.ts +41 -0
- package/dist/cli-user/services/turnPersistence.d.ts.map +1 -0
- package/dist/cli-user/services/turnPersistence.js +55 -0
- package/dist/cli-user/services/turnPersistence.js.map +1 -0
- package/dist/cli-user/services/turnRunner.d.ts +49 -0
- package/dist/cli-user/services/turnRunner.d.ts.map +1 -0
- package/dist/cli-user/services/turnRunner.js +436 -0
- package/dist/cli-user/services/turnRunner.js.map +1 -0
- package/dist/cli-user/types.d.ts +62 -0
- package/dist/cli-user/types.d.ts.map +1 -0
- package/dist/cli-user/types.js +6 -0
- package/dist/cli-user/types.js.map +1 -0
- package/dist/config/index.d.ts +393 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +334 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/prompts.d.ts +20 -0
- package/dist/config/prompts.d.ts.map +1 -0
- package/dist/config/prompts.js +74 -0
- package/dist/config/prompts.js.map +1 -0
- package/dist/config/teaching.config.d.ts +253 -0
- package/dist/config/teaching.config.d.ts.map +1 -0
- package/dist/config/teaching.config.js +203 -0
- package/dist/config/teaching.config.js.map +1 -0
- package/dist/config/thresholds.d.ts +300 -0
- package/dist/config/thresholds.d.ts.map +1 -0
- package/dist/config/thresholds.js +338 -0
- package/dist/config/thresholds.js.map +1 -0
- package/dist/controllers/skillAdminController.d.ts +62 -0
- package/dist/controllers/skillAdminController.d.ts.map +1 -0
- package/dist/controllers/skillAdminController.js +482 -0
- package/dist/controllers/skillAdminController.js.map +1 -0
- package/dist/controllers/skillController.d.ts +49 -0
- package/dist/controllers/skillController.d.ts.map +1 -0
- package/dist/controllers/skillController.js +246 -0
- package/dist/controllers/skillController.js.map +1 -0
- package/dist/controllers/sqlController.d.ts +9 -0
- package/dist/controllers/sqlController.d.ts.map +1 -0
- package/dist/controllers/sqlController.js +125 -0
- package/dist/controllers/sqlController.js.map +1 -0
- package/dist/controllers/traceController.d.ts +13 -0
- package/dist/controllers/traceController.d.ts.map +1 -0
- package/dist/controllers/traceController.js +209 -0
- package/dist/controllers/traceController.js.map +1 -0
- package/dist/controllers/traceProcessorController.d.ts +14 -0
- package/dist/controllers/traceProcessorController.d.ts.map +1 -0
- package/dist/controllers/traceProcessorController.js +222 -0
- package/dist/controllers/traceProcessorController.js.map +1 -0
- package/dist/data/perfettoSchema.d.ts +9 -0
- package/dist/data/perfettoSchema.d.ts.map +1 -0
- package/dist/data/perfettoSchema.js +286 -0
- package/dist/data/perfettoSchema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +251 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +37 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +307 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/legacyAgentApi.d.ts +8 -0
- package/dist/middleware/legacyAgentApi.d.ts.map +1 -0
- package/dist/middleware/legacyAgentApi.js +64 -0
- package/dist/middleware/legacyAgentApi.js.map +1 -0
- package/dist/middleware/workspaceRouteContext.d.ts +4 -0
- package/dist/middleware/workspaceRouteContext.d.ts.map +1 -0
- package/dist/middleware/workspaceRouteContext.js +44 -0
- package/dist/middleware/workspaceRouteContext.js.map +1 -0
- package/dist/models/sessionSchema.d.ts +106 -0
- package/dist/models/sessionSchema.d.ts.map +1 -0
- package/dist/models/sessionSchema.js +6 -0
- package/dist/models/sessionSchema.js.map +1 -0
- package/dist/routes/agentLogsRoutes.d.ts +3 -0
- package/dist/routes/agentLogsRoutes.d.ts.map +1 -0
- package/dist/routes/agentLogsRoutes.js +283 -0
- package/dist/routes/agentLogsRoutes.js.map +1 -0
- package/dist/routes/agentQuickSceneRoutes.d.ts +9 -0
- package/dist/routes/agentQuickSceneRoutes.d.ts.map +1 -0
- package/dist/routes/agentQuickSceneRoutes.js +51 -0
- package/dist/routes/agentQuickSceneRoutes.js.map +1 -0
- package/dist/routes/agentReportRoutes.d.ts +11 -0
- package/dist/routes/agentReportRoutes.d.ts.map +1 -0
- package/dist/routes/agentReportRoutes.js +100 -0
- package/dist/routes/agentReportRoutes.js.map +1 -0
- package/dist/routes/agentResumeRoutes.d.ts +14 -0
- package/dist/routes/agentResumeRoutes.d.ts.map +1 -0
- package/dist/routes/agentResumeRoutes.js +263 -0
- package/dist/routes/agentResumeRoutes.js.map +1 -0
- package/dist/routes/agentRoutes.d.ts +3 -0
- package/dist/routes/agentRoutes.d.ts.map +1 -0
- package/dist/routes/agentRoutes.js +4349 -0
- package/dist/routes/agentRoutes.js.map +1 -0
- package/dist/routes/agentSceneReconstructRoutes.d.ts +68 -0
- package/dist/routes/agentSceneReconstructRoutes.d.ts.map +1 -0
- package/dist/routes/agentSceneReconstructRoutes.js +448 -0
- package/dist/routes/agentSceneReconstructRoutes.js.map +1 -0
- package/dist/routes/agentSessionCatalogRoutes.d.ts +20 -0
- package/dist/routes/agentSessionCatalogRoutes.d.ts.map +1 -0
- package/dist/routes/agentSessionCatalogRoutes.js +90 -0
- package/dist/routes/agentSessionCatalogRoutes.js.map +1 -0
- package/dist/routes/agentTeachingRoutes.d.ts +3 -0
- package/dist/routes/agentTeachingRoutes.d.ts.map +1 -0
- package/dist/routes/agentTeachingRoutes.js +62 -0
- package/dist/routes/agentTeachingRoutes.js.map +1 -0
- package/dist/routes/analysisResultRoutes.d.ts +3 -0
- package/dist/routes/analysisResultRoutes.d.ts.map +1 -0
- package/dist/routes/analysisResultRoutes.js +216 -0
- package/dist/routes/analysisResultRoutes.js.map +1 -0
- package/dist/routes/baselineRoutes.d.ts +29 -0
- package/dist/routes/baselineRoutes.d.ts.map +1 -0
- package/dist/routes/baselineRoutes.js +123 -0
- package/dist/routes/baselineRoutes.js.map +1 -0
- package/dist/routes/caseRoutes.d.ts +29 -0
- package/dist/routes/caseRoutes.d.ts.map +1 -0
- package/dist/routes/caseRoutes.js +194 -0
- package/dist/routes/caseRoutes.js.map +1 -0
- package/dist/routes/ciGateRoutes.d.ts +11 -0
- package/dist/routes/ciGateRoutes.d.ts.map +1 -0
- package/dist/routes/ciGateRoutes.js +363 -0
- package/dist/routes/ciGateRoutes.js.map +1 -0
- package/dist/routes/comparisonRoutes.d.ts +3 -0
- package/dist/routes/comparisonRoutes.d.ts.map +1 -0
- package/dist/routes/comparisonRoutes.js +536 -0
- package/dist/routes/comparisonRoutes.js.map +1 -0
- package/dist/routes/criticalPathRoutes.d.ts +3 -0
- package/dist/routes/criticalPathRoutes.d.ts.map +1 -0
- package/dist/routes/criticalPathRoutes.js +88 -0
- package/dist/routes/criticalPathRoutes.js.map +1 -0
- package/dist/routes/enterpriseApiKeyRoutes.d.ts +9 -0
- package/dist/routes/enterpriseApiKeyRoutes.d.ts.map +1 -0
- package/dist/routes/enterpriseApiKeyRoutes.js +126 -0
- package/dist/routes/enterpriseApiKeyRoutes.js.map +1 -0
- package/dist/routes/enterpriseAuthRoutes.d.ts +18 -0
- package/dist/routes/enterpriseAuthRoutes.d.ts.map +1 -0
- package/dist/routes/enterpriseAuthRoutes.js +160 -0
- package/dist/routes/enterpriseAuthRoutes.js.map +1 -0
- package/dist/routes/enterpriseRuntimeDashboardRoutes.d.ts +6 -0
- package/dist/routes/enterpriseRuntimeDashboardRoutes.d.ts.map +1 -0
- package/dist/routes/enterpriseRuntimeDashboardRoutes.js +32 -0
- package/dist/routes/enterpriseRuntimeDashboardRoutes.js.map +1 -0
- package/dist/routes/enterpriseTenantRoutes.d.ts +4 -0
- package/dist/routes/enterpriseTenantRoutes.d.ts.map +1 -0
- package/dist/routes/enterpriseTenantRoutes.js +313 -0
- package/dist/routes/enterpriseTenantRoutes.js.map +1 -0
- package/dist/routes/exportRoutes.d.ts +3 -0
- package/dist/routes/exportRoutes.d.ts.map +1 -0
- package/dist/routes/exportRoutes.js +196 -0
- package/dist/routes/exportRoutes.js.map +1 -0
- package/dist/routes/flamegraphRoutes.d.ts +3 -0
- package/dist/routes/flamegraphRoutes.d.ts.map +1 -0
- package/dist/routes/flamegraphRoutes.js +99 -0
- package/dist/routes/flamegraphRoutes.js.map +1 -0
- package/dist/routes/memoryRoutes.d.ts +31 -0
- package/dist/routes/memoryRoutes.d.ts.map +1 -0
- package/dist/routes/memoryRoutes.js +150 -0
- package/dist/routes/memoryRoutes.js.map +1 -0
- package/dist/routes/narrativeSanitizer.d.ts +2 -0
- package/dist/routes/narrativeSanitizer.d.ts.map +1 -0
- package/dist/routes/narrativeSanitizer.js +167 -0
- package/dist/routes/narrativeSanitizer.js.map +1 -0
- package/dist/routes/perfettoLocalRoutes.d.ts +3 -0
- package/dist/routes/perfettoLocalRoutes.d.ts.map +1 -0
- package/dist/routes/perfettoLocalRoutes.js +222 -0
- package/dist/routes/perfettoLocalRoutes.js.map +1 -0
- package/dist/routes/perfettoSqlRoutes.d.ts +7 -0
- package/dist/routes/perfettoSqlRoutes.d.ts.map +1 -0
- package/dist/routes/perfettoSqlRoutes.js +738 -0
- package/dist/routes/perfettoSqlRoutes.js.map +1 -0
- package/dist/routes/providerRoutes.d.ts +3 -0
- package/dist/routes/providerRoutes.d.ts.map +1 -0
- package/dist/routes/providerRoutes.js +219 -0
- package/dist/routes/providerRoutes.js.map +1 -0
- package/dist/routes/ragAdminRoutes.d.ts +30 -0
- package/dist/routes/ragAdminRoutes.d.ts.map +1 -0
- package/dist/routes/ragAdminRoutes.js +93 -0
- package/dist/routes/ragAdminRoutes.js.map +1 -0
- package/dist/routes/reportRoutes.d.ts +17 -0
- package/dist/routes/reportRoutes.d.ts.map +1 -0
- package/dist/routes/reportRoutes.js +579 -0
- package/dist/routes/reportRoutes.js.map +1 -0
- package/dist/routes/sessionRoutes.d.ts +3 -0
- package/dist/routes/sessionRoutes.d.ts.map +1 -0
- package/dist/routes/sessionRoutes.js +144 -0
- package/dist/routes/sessionRoutes.js.map +1 -0
- package/dist/routes/simpleTraceRoutes.d.ts +3 -0
- package/dist/routes/simpleTraceRoutes.d.ts.map +1 -0
- package/dist/routes/simpleTraceRoutes.js +1131 -0
- package/dist/routes/simpleTraceRoutes.js.map +1 -0
- package/dist/routes/skillAdminRoutes.d.ts +3 -0
- package/dist/routes/skillAdminRoutes.d.ts.map +1 -0
- package/dist/routes/skillAdminRoutes.js +100 -0
- package/dist/routes/skillAdminRoutes.js.map +1 -0
- package/dist/routes/skillRoutes.d.ts +3 -0
- package/dist/routes/skillRoutes.d.ts.map +1 -0
- package/dist/routes/skillRoutes.js +88 -0
- package/dist/routes/skillRoutes.js.map +1 -0
- package/dist/routes/sql.d.ts +3 -0
- package/dist/routes/sql.d.ts.map +1 -0
- package/dist/routes/sql.js +19 -0
- package/dist/routes/sql.js.map +1 -0
- package/dist/routes/strategyAdminRoutes.d.ts +3 -0
- package/dist/routes/strategyAdminRoutes.d.ts.map +1 -0
- package/dist/routes/strategyAdminRoutes.js +65 -0
- package/dist/routes/strategyAdminRoutes.js.map +1 -0
- package/dist/routes/templateAnalysisRoutes.d.ts +3 -0
- package/dist/routes/templateAnalysisRoutes.d.ts.map +1 -0
- package/dist/routes/templateAnalysisRoutes.js +173 -0
- package/dist/routes/templateAnalysisRoutes.js.map +1 -0
- package/dist/routes/trace.d.ts +3 -0
- package/dist/routes/trace.d.ts.map +1 -0
- package/dist/routes/trace.js +48 -0
- package/dist/routes/trace.js.map +1 -0
- package/dist/routes/traceProcessorProxyRoutes.d.ts +6 -0
- package/dist/routes/traceProcessorProxyRoutes.d.ts.map +1 -0
- package/dist/routes/traceProcessorProxyRoutes.js +607 -0
- package/dist/routes/traceProcessorProxyRoutes.js.map +1 -0
- package/dist/routes/traceProcessorRoutes.d.ts +3 -0
- package/dist/routes/traceProcessorRoutes.d.ts.map +1 -0
- package/dist/routes/traceProcessorRoutes.js +40 -0
- package/dist/routes/traceProcessorRoutes.js.map +1 -0
- package/dist/routes/workspaceWindowRoutes.d.ts +3 -0
- package/dist/routes/workspaceWindowRoutes.d.ts.map +1 -0
- package/dist/routes/workspaceWindowRoutes.js +146 -0
- package/dist/routes/workspaceWindowRoutes.js.map +1 -0
- package/dist/runtimePaths.d.ts +3 -0
- package/dist/runtimePaths.d.ts.map +1 -0
- package/dist/runtimePaths.js +20 -0
- package/dist/runtimePaths.js.map +1 -0
- package/dist/scripts/analyzeComprehensiveTrace.d.ts +2 -0
- package/dist/scripts/analyzeComprehensiveTrace.d.ts.map +1 -0
- package/dist/scripts/analyzeComprehensiveTrace.js +210 -0
- package/dist/scripts/analyzeComprehensiveTrace.js.map +1 -0
- package/dist/scripts/analyzeUserTrace.d.ts +2 -0
- package/dist/scripts/analyzeUserTrace.d.ts.map +1 -0
- package/dist/scripts/analyzeUserTrace.js +170 -0
- package/dist/scripts/analyzeUserTrace.js.map +1 -0
- package/dist/scripts/auditTraceProcessorRssMatrix.d.ts +49 -0
- package/dist/scripts/auditTraceProcessorRssMatrix.d.ts.map +1 -0
- package/dist/scripts/auditTraceProcessorRssMatrix.js +390 -0
- package/dist/scripts/auditTraceProcessorRssMatrix.js.map +1 -0
- package/dist/scripts/benchmarkTraceProcessorRss.d.ts +96 -0
- package/dist/scripts/benchmarkTraceProcessorRss.d.ts.map +1 -0
- package/dist/scripts/benchmarkTraceProcessorRss.js +569 -0
- package/dist/scripts/benchmarkTraceProcessorRss.js.map +1 -0
- package/dist/scripts/captureContextEngineeringBaseline.d.ts +2 -0
- package/dist/scripts/captureContextEngineeringBaseline.d.ts.map +1 -0
- package/dist/scripts/captureContextEngineeringBaseline.js +271 -0
- package/dist/scripts/captureContextEngineeringBaseline.js.map +1 -0
- package/dist/scripts/checkTables.d.ts +2 -0
- package/dist/scripts/checkTables.d.ts.map +1 -0
- package/dist/scripts/checkTables.js +22 -0
- package/dist/scripts/checkTables.js.map +1 -0
- package/dist/scripts/diagnoseJankDetection.d.ts +2 -0
- package/dist/scripts/diagnoseJankDetection.d.ts.map +1 -0
- package/dist/scripts/diagnoseJankDetection.js +314 -0
- package/dist/scripts/diagnoseJankDetection.js.map +1 -0
- package/dist/scripts/diagnoseTrace.d.ts +2 -0
- package/dist/scripts/diagnoseTrace.d.ts.map +1 -0
- package/dist/scripts/diagnoseTrace.js +74 -0
- package/dist/scripts/diagnoseTrace.js.map +1 -0
- package/dist/scripts/enterpriseAcceptanceLoadTest.d.ts +193 -0
- package/dist/scripts/enterpriseAcceptanceLoadTest.d.ts.map +1 -0
- package/dist/scripts/enterpriseAcceptanceLoadTest.js +912 -0
- package/dist/scripts/enterpriseAcceptanceLoadTest.js.map +1 -0
- package/dist/scripts/enterpriseMigrationSnapshot.d.ts +3 -0
- package/dist/scripts/enterpriseMigrationSnapshot.d.ts.map +1 -0
- package/dist/scripts/enterpriseMigrationSnapshot.js +57 -0
- package/dist/scripts/enterpriseMigrationSnapshot.js.map +1 -0
- package/dist/scripts/enterpriseReadinessAudit.d.ts +30 -0
- package/dist/scripts/enterpriseReadinessAudit.d.ts.map +1 -0
- package/dist/scripts/enterpriseReadinessAudit.js +743 -0
- package/dist/scripts/enterpriseReadinessAudit.js.map +1 -0
- package/dist/scripts/enterpriseRssBenchmarkMatrix.d.ts +6 -0
- package/dist/scripts/enterpriseRssBenchmarkMatrix.d.ts.map +1 -0
- package/dist/scripts/enterpriseRssBenchmarkMatrix.js +20 -0
- package/dist/scripts/enterpriseRssBenchmarkMatrix.js.map +1 -0
- package/dist/scripts/enterpriseRuntimeIsolationChecklist.d.ts +22 -0
- package/dist/scripts/enterpriseRuntimeIsolationChecklist.d.ts.map +1 -0
- package/dist/scripts/enterpriseRuntimeIsolationChecklist.js +374 -0
- package/dist/scripts/enterpriseRuntimeIsolationChecklist.js.map +1 -0
- package/dist/scripts/enterpriseSecurityAuditChecklist.d.ts +20 -0
- package/dist/scripts/enterpriseSecurityAuditChecklist.d.ts.map +1 -0
- package/dist/scripts/enterpriseSecurityAuditChecklist.js +113 -0
- package/dist/scripts/enterpriseSecurityAuditChecklist.js.map +1 -0
- package/dist/scripts/probeStdlibSchema.d.ts +2 -0
- package/dist/scripts/probeStdlibSchema.d.ts.map +1 -0
- package/dist/scripts/probeStdlibSchema.js +209 -0
- package/dist/scripts/probeStdlibSchema.js.map +1 -0
- package/dist/scripts/runAgentTest.d.ts +2 -0
- package/dist/scripts/runAgentTest.d.ts.map +1 -0
- package/dist/scripts/runAgentTest.js +149 -0
- package/dist/scripts/runAgentTest.js.map +1 -0
- package/dist/scripts/runScrollingTest.d.ts +2 -0
- package/dist/scripts/runScrollingTest.d.ts.map +1 -0
- package/dist/scripts/runScrollingTest.js +199 -0
- package/dist/scripts/runScrollingTest.js.map +1 -0
- package/dist/scripts/runScrollingTestRealData.d.ts +2 -0
- package/dist/scripts/runScrollingTestRealData.d.ts.map +1 -0
- package/dist/scripts/runScrollingTestRealData.js +121 -0
- package/dist/scripts/runScrollingTestRealData.js.map +1 -0
- package/dist/scripts/testAndroidTrace.d.ts +2 -0
- package/dist/scripts/testAndroidTrace.d.ts.map +1 -0
- package/dist/scripts/testAndroidTrace.js +21 -0
- package/dist/scripts/testAndroidTrace.js.map +1 -0
- package/dist/scripts/testCrossDomainExpert.d.ts +2 -0
- package/dist/scripts/testCrossDomainExpert.d.ts.map +1 -0
- package/dist/scripts/testCrossDomainExpert.js +288 -0
- package/dist/scripts/testCrossDomainExpert.js.map +1 -0
- package/dist/scripts/testCrossDomainIntegration.d.ts +2 -0
- package/dist/scripts/testCrossDomainIntegration.d.ts.map +1 -0
- package/dist/scripts/testCrossDomainIntegration.js +282 -0
- package/dist/scripts/testCrossDomainIntegration.js.map +1 -0
- package/dist/scripts/testDeepLayerFix.d.ts +2 -0
- package/dist/scripts/testDeepLayerFix.d.ts.map +1 -0
- package/dist/scripts/testDeepLayerFix.js +137 -0
- package/dist/scripts/testDeepLayerFix.js.map +1 -0
- package/dist/scripts/testHtmlReportGen.d.ts +2 -0
- package/dist/scripts/testHtmlReportGen.d.ts.map +1 -0
- package/dist/scripts/testHtmlReportGen.js +148 -0
- package/dist/scripts/testHtmlReportGen.js.map +1 -0
- package/dist/scripts/verifyAgentSseScrolling.d.ts +2 -0
- package/dist/scripts/verifyAgentSseScrolling.d.ts.map +1 -0
- package/dist/scripts/verifyAgentSseScrolling.js +558 -0
- package/dist/scripts/verifyAgentSseScrolling.js.map +1 -0
- package/dist/scripts/verifyCriticalPathE2E.d.ts +2 -0
- package/dist/scripts/verifyCriticalPathE2E.d.ts.map +1 -0
- package/dist/scripts/verifyCriticalPathE2E.js +171 -0
- package/dist/scripts/verifyCriticalPathE2E.js.map +1 -0
- package/dist/scripts/verifyEnterpriseMultiTenantWindows.d.ts +24 -0
- package/dist/scripts/verifyEnterpriseMultiTenantWindows.d.ts.map +1 -0
- package/dist/scripts/verifyEnterpriseMultiTenantWindows.js +1363 -0
- package/dist/scripts/verifyEnterpriseMultiTenantWindows.js.map +1 -0
- package/dist/services/adb/adbContextDetector.d.ts +3 -0
- package/dist/services/adb/adbContextDetector.d.ts.map +1 -0
- package/dist/services/adb/adbContextDetector.js +151 -0
- package/dist/services/adb/adbContextDetector.js.map +1 -0
- package/dist/services/adb/adbService.d.ts +28 -0
- package/dist/services/adb/adbService.d.ts.map +1 -0
- package/dist/services/adb/adbService.js +238 -0
- package/dist/services/adb/adbService.js.map +1 -0
- package/dist/services/adb/index.d.ts +5 -0
- package/dist/services/adb/index.d.ts.map +1 -0
- package/dist/services/adb/index.js +24 -0
- package/dist/services/adb/index.js.map +1 -0
- package/dist/services/adb/traceDeviceMatcher.d.ts +12 -0
- package/dist/services/adb/traceDeviceMatcher.d.ts.map +1 -0
- package/dist/services/adb/traceDeviceMatcher.js +149 -0
- package/dist/services/adb/traceDeviceMatcher.js.map +1 -0
- package/dist/services/adb/types.d.ts +69 -0
- package/dist/services/adb/types.d.ts.map +1 -0
- package/dist/services/adb/types.js +6 -0
- package/dist/services/adb/types.js.map +1 -0
- package/dist/services/agentEventStore.d.ts +17 -0
- package/dist/services/agentEventStore.d.ts.map +1 -0
- package/dist/services/agentEventStore.js +139 -0
- package/dist/services/agentEventStore.js.map +1 -0
- package/dist/services/agentReportData.d.ts +42 -0
- package/dist/services/agentReportData.d.ts.map +1 -0
- package/dist/services/agentReportData.js +81 -0
- package/dist/services/agentReportData.js.map +1 -0
- package/dist/services/agentResultNormalizer.d.ts +33 -0
- package/dist/services/agentResultNormalizer.d.ts.map +1 -0
- package/dist/services/agentResultNormalizer.js +92 -0
- package/dist/services/agentResultNormalizer.js.map +1 -0
- package/dist/services/analysisResultSnapshotPipeline.d.ts +24 -0
- package/dist/services/analysisResultSnapshotPipeline.d.ts.map +1 -0
- package/dist/services/analysisResultSnapshotPipeline.js +466 -0
- package/dist/services/analysisResultSnapshotPipeline.js.map +1 -0
- package/dist/services/analysisResultSnapshotStore.d.ts +29 -0
- package/dist/services/analysisResultSnapshotStore.d.ts.map +1 -0
- package/dist/services/analysisResultSnapshotStore.js +457 -0
- package/dist/services/analysisResultSnapshotStore.js.map +1 -0
- package/dist/services/analysisResultWindowStateStore.d.ts +37 -0
- package/dist/services/analysisResultWindowStateStore.d.ts.map +1 -0
- package/dist/services/analysisResultWindowStateStore.js +190 -0
- package/dist/services/analysisResultWindowStateStore.js.map +1 -0
- package/dist/services/analysisRunStore.d.ts +38 -0
- package/dist/services/analysisRunStore.d.ts.map +1 -0
- package/dist/services/analysisRunStore.js +195 -0
- package/dist/services/analysisRunStore.js.map +1 -0
- package/dist/services/analysisTemplates/cpuCoreAnalysis.d.ts +70 -0
- package/dist/services/analysisTemplates/cpuCoreAnalysis.d.ts.map +1 -0
- package/dist/services/analysisTemplates/cpuCoreAnalysis.js +277 -0
- package/dist/services/analysisTemplates/cpuCoreAnalysis.js.map +1 -0
- package/dist/services/analysisTemplates/fourQuadrantAnalysis.d.ts +64 -0
- package/dist/services/analysisTemplates/fourQuadrantAnalysis.d.ts.map +1 -0
- package/dist/services/analysisTemplates/fourQuadrantAnalysis.js +288 -0
- package/dist/services/analysisTemplates/fourQuadrantAnalysis.js.map +1 -0
- package/dist/services/analysisTemplates/frameStatsAnalysis.d.ts +77 -0
- package/dist/services/analysisTemplates/frameStatsAnalysis.d.ts.map +1 -0
- package/dist/services/analysisTemplates/frameStatsAnalysis.js +232 -0
- package/dist/services/analysisTemplates/frameStatsAnalysis.js.map +1 -0
- package/dist/services/analysisTemplates/templateManager.d.ts +70 -0
- package/dist/services/analysisTemplates/templateManager.d.ts.map +1 -0
- package/dist/services/analysisTemplates/templateManager.js +293 -0
- package/dist/services/analysisTemplates/templateManager.js.map +1 -0
- package/dist/services/anonymizer.d.ts +61 -0
- package/dist/services/anonymizer.d.ts.map +1 -0
- package/dist/services/anonymizer.js +232 -0
- package/dist/services/anonymizer.js.map +1 -0
- package/dist/services/aospKnowledgeIngester.d.ts +67 -0
- package/dist/services/aospKnowledgeIngester.d.ts.map +1 -0
- package/dist/services/aospKnowledgeIngester.js +171 -0
- package/dist/services/aospKnowledgeIngester.js.map +1 -0
- package/dist/services/artifactCompression.d.ts +52 -0
- package/dist/services/artifactCompression.d.ts.map +1 -0
- package/dist/services/artifactCompression.js +215 -0
- package/dist/services/artifactCompression.js.map +1 -0
- package/dist/services/baselineDiffer.d.ts +85 -0
- package/dist/services/baselineDiffer.d.ts.map +1 -0
- package/dist/services/baselineDiffer.js +287 -0
- package/dist/services/baselineDiffer.js.map +1 -0
- package/dist/services/baselineStore.d.ts +52 -0
- package/dist/services/baselineStore.d.ts.map +1 -0
- package/dist/services/baselineStore.js +224 -0
- package/dist/services/baselineStore.js.map +1 -0
- package/dist/services/binderRootCauseChain.d.ts +38 -0
- package/dist/services/binderRootCauseChain.d.ts.map +1 -0
- package/dist/services/binderRootCauseChain.js +74 -0
- package/dist/services/binderRootCauseChain.js.map +1 -0
- package/dist/services/blogKnowledgeIngester.d.ts +89 -0
- package/dist/services/blogKnowledgeIngester.d.ts.map +1 -0
- package/dist/services/blogKnowledgeIngester.js +192 -0
- package/dist/services/blogKnowledgeIngester.js.map +1 -0
- package/dist/services/caseGraph.d.ts +55 -0
- package/dist/services/caseGraph.d.ts.map +1 -0
- package/dist/services/caseGraph.js +260 -0
- package/dist/services/caseGraph.js.map +1 -0
- package/dist/services/caseLibrary.d.ts +61 -0
- package/dist/services/caseLibrary.d.ts.map +1 -0
- package/dist/services/caseLibrary.js +269 -0
- package/dist/services/caseLibrary.js.map +1 -0
- package/dist/services/ciGateRunStore.d.ts +39 -0
- package/dist/services/ciGateRunStore.d.ts.map +1 -0
- package/dist/services/ciGateRunStore.js +208 -0
- package/dist/services/ciGateRunStore.js.map +1 -0
- package/dist/services/comparisonAiConclusionService.d.ts +23 -0
- package/dist/services/comparisonAiConclusionService.d.ts.map +1 -0
- package/dist/services/comparisonAiConclusionService.js +207 -0
- package/dist/services/comparisonAiConclusionService.js.map +1 -0
- package/dist/services/comparisonAppendixService.d.ts +50 -0
- package/dist/services/comparisonAppendixService.d.ts.map +1 -0
- package/dist/services/comparisonAppendixService.js +276 -0
- package/dist/services/comparisonAppendixService.js.map +1 -0
- package/dist/services/comparisonHtmlReportService.d.ts +20 -0
- package/dist/services/comparisonHtmlReportService.d.ts.map +1 -0
- package/dist/services/comparisonHtmlReportService.js +214 -0
- package/dist/services/comparisonHtmlReportService.js.map +1 -0
- package/dist/services/comparisonMatrixService.d.ts +7 -0
- package/dist/services/comparisonMatrixService.d.ts.map +1 -0
- package/dist/services/comparisonMatrixService.js +211 -0
- package/dist/services/comparisonMatrixService.js.map +1 -0
- package/dist/services/comparisonResultService.d.ts +13 -0
- package/dist/services/comparisonResultService.d.ts.map +1 -0
- package/dist/services/comparisonResultService.js +99 -0
- package/dist/services/comparisonResultService.js.map +1 -0
- package/dist/services/comparisonSignificance.d.ts +3 -0
- package/dist/services/comparisonSignificance.d.ts.map +1 -0
- package/dist/services/comparisonSignificance.js +42 -0
- package/dist/services/comparisonSignificance.js.map +1 -0
- package/dist/services/cpuThermalPmu.d.ts +38 -0
- package/dist/services/cpuThermalPmu.d.ts.map +1 -0
- package/dist/services/cpuThermalPmu.js +141 -0
- package/dist/services/cpuThermalPmu.js.map +1 -0
- package/dist/services/criticalPathAiSummary.d.ts +29 -0
- package/dist/services/criticalPathAiSummary.d.ts.map +1 -0
- package/dist/services/criticalPathAiSummary.js +310 -0
- package/dist/services/criticalPathAiSummary.js.map +1 -0
- package/dist/services/criticalPathAnalyzer.d.ts +108 -0
- package/dist/services/criticalPathAnalyzer.d.ts.map +1 -0
- package/dist/services/criticalPathAnalyzer.js +880 -0
- package/dist/services/criticalPathAnalyzer.js.map +1 -0
- package/dist/services/criticalPathQuantify.d.ts +70 -0
- package/dist/services/criticalPathQuantify.d.ts.map +1 -0
- package/dist/services/criticalPathQuantify.js +214 -0
- package/dist/services/criticalPathQuantify.js.map +1 -0
- package/dist/services/criticalPathSemantics.d.ts +95 -0
- package/dist/services/criticalPathSemantics.d.ts.map +1 -0
- package/dist/services/criticalPathSemantics.js +453 -0
- package/dist/services/criticalPathSemantics.js.map +1 -0
- package/dist/services/criticalPathWakerChain.d.ts +38 -0
- package/dist/services/criticalPathWakerChain.d.ts.map +1 -0
- package/dist/services/criticalPathWakerChain.js +144 -0
- package/dist/services/criticalPathWakerChain.js.map +1 -0
- package/dist/services/domainSkillEvalHarness.d.ts +51 -0
- package/dist/services/domainSkillEvalHarness.d.ts.map +1 -0
- package/dist/services/domainSkillEvalHarness.js +141 -0
- package/dist/services/domainSkillEvalHarness.js.map +1 -0
- package/dist/services/enhancedAIService.d.ts +81 -0
- package/dist/services/enhancedAIService.d.ts.map +1 -0
- package/dist/services/enhancedAIService.js +277 -0
- package/dist/services/enhancedAIService.js.map +1 -0
- package/dist/services/enterpriseAdminControlPlaneService.d.ts +124 -0
- package/dist/services/enterpriseAdminControlPlaneService.d.ts.map +1 -0
- package/dist/services/enterpriseAdminControlPlaneService.js +323 -0
- package/dist/services/enterpriseAdminControlPlaneService.js.map +1 -0
- package/dist/services/enterpriseApiKeyService.d.ts +56 -0
- package/dist/services/enterpriseApiKeyService.d.ts.map +1 -0
- package/dist/services/enterpriseApiKeyService.js +260 -0
- package/dist/services/enterpriseApiKeyService.js.map +1 -0
- package/dist/services/enterpriseAuditService.d.ts +30 -0
- package/dist/services/enterpriseAuditService.d.ts.map +1 -0
- package/dist/services/enterpriseAuditService.js +73 -0
- package/dist/services/enterpriseAuditService.js.map +1 -0
- package/dist/services/enterpriseDb.d.ts +5 -0
- package/dist/services/enterpriseDb.d.ts.map +1 -0
- package/dist/services/enterpriseDb.js +33 -0
- package/dist/services/enterpriseDb.js.map +1 -0
- package/dist/services/enterpriseMigration.d.ts +89 -0
- package/dist/services/enterpriseMigration.d.ts.map +1 -0
- package/dist/services/enterpriseMigration.js +506 -0
- package/dist/services/enterpriseMigration.js.map +1 -0
- package/dist/services/enterpriseOidcClient.d.ts +36 -0
- package/dist/services/enterpriseOidcClient.d.ts.map +1 -0
- package/dist/services/enterpriseOidcClient.js +124 -0
- package/dist/services/enterpriseOidcClient.js.map +1 -0
- package/dist/services/enterpriseQuotaPolicyService.d.ts +37 -0
- package/dist/services/enterpriseQuotaPolicyService.d.ts.map +1 -0
- package/dist/services/enterpriseQuotaPolicyService.js +198 -0
- package/dist/services/enterpriseQuotaPolicyService.js.map +1 -0
- package/dist/services/enterpriseRepository.d.ts +36 -0
- package/dist/services/enterpriseRepository.d.ts.map +1 -0
- package/dist/services/enterpriseRepository.js +208 -0
- package/dist/services/enterpriseRepository.js.map +1 -0
- package/dist/services/enterpriseRuntimeDashboardService.d.ts +114 -0
- package/dist/services/enterpriseRuntimeDashboardService.d.ts.map +1 -0
- package/dist/services/enterpriseRuntimeDashboardService.js +205 -0
- package/dist/services/enterpriseRuntimeDashboardService.js.map +1 -0
- package/dist/services/enterpriseSchema.d.ts +7 -0
- package/dist/services/enterpriseSchema.d.ts.map +1 -0
- package/dist/services/enterpriseSchema.js +688 -0
- package/dist/services/enterpriseSchema.js.map +1 -0
- package/dist/services/enterpriseSsoService.d.ts +99 -0
- package/dist/services/enterpriseSsoService.d.ts.map +1 -0
- package/dist/services/enterpriseSsoService.js +538 -0
- package/dist/services/enterpriseSsoService.js.map +1 -0
- package/dist/services/enterpriseTenantExportService.d.ts +58 -0
- package/dist/services/enterpriseTenantExportService.d.ts.map +1 -0
- package/dist/services/enterpriseTenantExportService.js +339 -0
- package/dist/services/enterpriseTenantExportService.js.map +1 -0
- package/dist/services/enterpriseTenantLifecycleService.d.ts +52 -0
- package/dist/services/enterpriseTenantLifecycleService.d.ts.map +1 -0
- package/dist/services/enterpriseTenantLifecycleService.js +323 -0
- package/dist/services/enterpriseTenantLifecycleService.js.map +1 -0
- package/dist/services/flamegraphAiSummary.d.ts +4 -0
- package/dist/services/flamegraphAiSummary.d.ts.map +1 -0
- package/dist/services/flamegraphAiSummary.js +172 -0
- package/dist/services/flamegraphAiSummary.js.map +1 -0
- package/dist/services/flamegraphAnalyzer.d.ts +14 -0
- package/dist/services/flamegraphAnalyzer.d.ts.map +1 -0
- package/dist/services/flamegraphAnalyzer.js +607 -0
- package/dist/services/flamegraphAnalyzer.js.map +1 -0
- package/dist/services/flamegraphTypes.d.ts +106 -0
- package/dist/services/flamegraphTypes.d.ts.map +1 -0
- package/dist/services/flamegraphTypes.js +6 -0
- package/dist/services/flamegraphTypes.js.map +1 -0
- package/dist/services/gpuSurfaceFlinger.d.ts +27 -0
- package/dist/services/gpuSurfaceFlinger.d.ts.map +1 -0
- package/dist/services/gpuSurfaceFlinger.js +68 -0
- package/dist/services/gpuSurfaceFlinger.js.map +1 -0
- package/dist/services/htmlReportGenerator.d.ts +425 -0
- package/dist/services/htmlReportGenerator.d.ts.map +1 -0
- package/dist/services/htmlReportGenerator.js +5110 -0
- package/dist/services/htmlReportGenerator.js.map +1 -0
- package/dist/services/ioNetworkWakeup.d.ts +27 -0
- package/dist/services/ioNetworkWakeup.d.ts.map +1 -0
- package/dist/services/ioNetworkWakeup.js +68 -0
- package/dist/services/ioNetworkWakeup.js.map +1 -0
- package/dist/services/jankDecisionTree.d.ts +39 -0
- package/dist/services/jankDecisionTree.d.ts.map +1 -0
- package/dist/services/jankDecisionTree.js +230 -0
- package/dist/services/jankDecisionTree.js.map +1 -0
- package/dist/services/legacyApiTelemetry.d.ts +28 -0
- package/dist/services/legacyApiTelemetry.d.ts.map +1 -0
- package/dist/services/legacyApiTelemetry.js +157 -0
- package/dist/services/legacyApiTelemetry.js.map +1 -0
- package/dist/services/memoryRootCause.d.ts +24 -0
- package/dist/services/memoryRootCause.d.ts.map +1 -0
- package/dist/services/memoryRootCause.js +70 -0
- package/dist/services/memoryRootCause.js.map +1 -0
- package/dist/services/multiTraceComparisonStore.d.ts +28 -0
- package/dist/services/multiTraceComparisonStore.d.ts.map +1 -0
- package/dist/services/multiTraceComparisonStore.js +220 -0
- package/dist/services/multiTraceComparisonStore.js.map +1 -0
- package/dist/services/oemSdkKnowledgeIngester.d.ts +62 -0
- package/dist/services/oemSdkKnowledgeIngester.d.ts.map +1 -0
- package/dist/services/oemSdkKnowledgeIngester.js +154 -0
- package/dist/services/oemSdkKnowledgeIngester.js.map +1 -0
- package/dist/services/perfettoLocalService.d.ts +25 -0
- package/dist/services/perfettoLocalService.d.ts.map +1 -0
- package/dist/services/perfettoLocalService.js +213 -0
- package/dist/services/perfettoLocalService.js.map +1 -0
- package/dist/services/perfettoService.d.ts +39 -0
- package/dist/services/perfettoService.d.ts.map +1 -0
- package/dist/services/perfettoService.js +330 -0
- package/dist/services/perfettoService.js.map +1 -0
- package/dist/services/perfettoSqlDocs.d.ts +94 -0
- package/dist/services/perfettoSqlDocs.d.ts.map +1 -0
- package/dist/services/perfettoSqlDocs.js +222 -0
- package/dist/services/perfettoSqlDocs.js.map +1 -0
- package/dist/services/perfettoSqlSkill.d.ts +263 -0
- package/dist/services/perfettoSqlSkill.d.ts.map +1 -0
- package/dist/services/perfettoSqlSkill.js +3731 -0
- package/dist/services/perfettoSqlSkill.js.map +1 -0
- package/dist/services/perfettoStdlibScanner.d.ts +66 -0
- package/dist/services/perfettoStdlibScanner.d.ts.map +1 -0
- package/dist/services/perfettoStdlibScanner.js +345 -0
- package/dist/services/perfettoStdlibScanner.js.map +1 -0
- package/dist/services/persistAgentSession.d.ts +43 -0
- package/dist/services/persistAgentSession.d.ts.map +1 -0
- package/dist/services/persistAgentSession.js +146 -0
- package/dist/services/persistAgentSession.js.map +1 -0
- package/dist/services/pipelineDocService.d.ts +83 -0
- package/dist/services/pipelineDocService.d.ts.map +1 -0
- package/dist/services/pipelineDocService.js +417 -0
- package/dist/services/pipelineDocService.js.map +1 -0
- package/dist/services/pipelineSkillLoader.d.ts +173 -0
- package/dist/services/pipelineSkillLoader.d.ts.map +1 -0
- package/dist/services/pipelineSkillLoader.js +301 -0
- package/dist/services/pipelineSkillLoader.js.map +1 -0
- package/dist/services/portPool.d.ts +85 -0
- package/dist/services/portPool.d.ts.map +1 -0
- package/dist/services/portPool.js +221 -0
- package/dist/services/portPool.js.map +1 -0
- package/dist/services/processIdentity/identityGate.d.ts +27 -0
- package/dist/services/processIdentity/identityGate.d.ts.map +1 -0
- package/dist/services/processIdentity/identityGate.js +284 -0
- package/dist/services/processIdentity/identityGate.js.map +1 -0
- package/dist/services/processIdentity/types.d.ts +49 -0
- package/dist/services/processIdentity/types.d.ts.map +1 -0
- package/dist/services/processIdentity/types.js +16 -0
- package/dist/services/processIdentity/types.js.map +1 -0
- package/dist/services/processRss.d.ts +10 -0
- package/dist/services/processRss.d.ts.map +1 -0
- package/dist/services/processRss.js +78 -0
- package/dist/services/processRss.js.map +1 -0
- package/dist/services/promptTemplateService.d.ts +68 -0
- package/dist/services/promptTemplateService.d.ts.map +1 -0
- package/dist/services/promptTemplateService.js +196 -0
- package/dist/services/promptTemplateService.js.map +1 -0
- package/dist/services/providerManager/connectionTester.d.ts +3 -0
- package/dist/services/providerManager/connectionTester.d.ts.map +1 -0
- package/dist/services/providerManager/connectionTester.js +479 -0
- package/dist/services/providerManager/connectionTester.js.map +1 -0
- package/dist/services/providerManager/envIsolation.d.ts +3 -0
- package/dist/services/providerManager/envIsolation.d.ts.map +1 -0
- package/dist/services/providerManager/envIsolation.js +31 -0
- package/dist/services/providerManager/envIsolation.js.map +1 -0
- package/dist/services/providerManager/index.d.ts +9 -0
- package/dist/services/providerManager/index.d.ts.map +1 -0
- package/dist/services/providerManager/index.js +40 -0
- package/dist/services/providerManager/index.js.map +1 -0
- package/dist/services/providerManager/localSecretStore.d.ts +32 -0
- package/dist/services/providerManager/localSecretStore.d.ts.map +1 -0
- package/dist/services/providerManager/localSecretStore.js +338 -0
- package/dist/services/providerManager/localSecretStore.js.map +1 -0
- package/dist/services/providerManager/providerService.d.ts +31 -0
- package/dist/services/providerManager/providerService.d.ts.map +1 -0
- package/dist/services/providerManager/providerService.js +460 -0
- package/dist/services/providerManager/providerService.js.map +1 -0
- package/dist/services/providerManager/providerSnapshot.d.ts +30 -0
- package/dist/services/providerManager/providerSnapshot.d.ts.map +1 -0
- package/dist/services/providerManager/providerSnapshot.js +224 -0
- package/dist/services/providerManager/providerSnapshot.js.map +1 -0
- package/dist/services/providerManager/providerStore.d.ts +31 -0
- package/dist/services/providerManager/providerStore.d.ts.map +1 -0
- package/dist/services/providerManager/providerStore.js +553 -0
- package/dist/services/providerManager/providerStore.js.map +1 -0
- package/dist/services/providerManager/templates.d.ts +3 -0
- package/dist/services/providerManager/templates.d.ts.map +1 -0
- package/dist/services/providerManager/templates.js +328 -0
- package/dist/services/providerManager/templates.js.map +1 -0
- package/dist/services/providerManager/types.d.ts +119 -0
- package/dist/services/providerManager/types.d.ts.map +1 -0
- package/dist/services/providerManager/types.js +5 -0
- package/dist/services/providerManager/types.js.map +1 -0
- package/dist/services/ragStore.d.ts +60 -0
- package/dist/services/ragStore.d.ts.map +1 -0
- package/dist/services/ragStore.js +297 -0
- package/dist/services/ragStore.js.map +1 -0
- package/dist/services/rbac.d.ts +19 -0
- package/dist/services/rbac.d.ts.map +1 -0
- package/dist/services/rbac.js +153 -0
- package/dist/services/rbac.js.map +1 -0
- package/dist/services/renderingPipelineDetectionSkillGenerator.d.ts +3 -0
- package/dist/services/renderingPipelineDetectionSkillGenerator.d.ts.map +1 -0
- package/dist/services/renderingPipelineDetectionSkillGenerator.js +1120 -0
- package/dist/services/renderingPipelineDetectionSkillGenerator.js.map +1 -0
- package/dist/services/renderingPipelineTeachingService.d.ts +33 -0
- package/dist/services/renderingPipelineTeachingService.d.ts.map +1 -0
- package/dist/services/renderingPipelineTeachingService.js +1312 -0
- package/dist/services/renderingPipelineTeachingService.js.map +1 -0
- package/dist/services/reportCausalMapAssets.d.ts +3 -0
- package/dist/services/reportCausalMapAssets.d.ts.map +1 -0
- package/dist/services/reportCausalMapAssets.js +898 -0
- package/dist/services/reportCausalMapAssets.js.map +1 -0
- package/dist/services/reportGenerator.d.ts +54 -0
- package/dist/services/reportGenerator.d.ts.map +1 -0
- package/dist/services/reportGenerator.js +241 -0
- package/dist/services/reportGenerator.js.map +1 -0
- package/dist/services/resourceOwnership.d.ts +21 -0
- package/dist/services/resourceOwnership.d.ts.map +1 -0
- package/dist/services/resourceOwnership.js +50 -0
- package/dist/services/resourceOwnership.js.map +1 -0
- package/dist/services/resultExportService.d.ts +66 -0
- package/dist/services/resultExportService.d.ts.map +1 -0
- package/dist/services/resultExportService.js +170 -0
- package/dist/services/resultExportService.js.map +1 -0
- package/dist/services/runtimeSnapshotStore.d.ts +19 -0
- package/dist/services/runtimeSnapshotStore.d.ts.map +1 -0
- package/dist/services/runtimeSnapshotStore.js +222 -0
- package/dist/services/runtimeSnapshotStore.js.map +1 -0
- package/dist/services/sceneReport/sceneReportMemoryCache.d.ts +38 -0
- package/dist/services/sceneReport/sceneReportMemoryCache.d.ts.map +1 -0
- package/dist/services/sceneReport/sceneReportMemoryCache.js +55 -0
- package/dist/services/sceneReport/sceneReportMemoryCache.js.map +1 -0
- package/dist/services/sceneReport/sceneReportStore.d.ts +41 -0
- package/dist/services/sceneReport/sceneReportStore.d.ts.map +1 -0
- package/dist/services/sceneReport/sceneReportStore.js +248 -0
- package/dist/services/sceneReport/sceneReportStore.js.map +1 -0
- package/dist/services/scopedKnowledgeStore.d.ts +45 -0
- package/dist/services/scopedKnowledgeStore.d.ts.map +1 -0
- package/dist/services/scopedKnowledgeStore.js +225 -0
- package/dist/services/scopedKnowledgeStore.js.map +1 -0
- package/dist/services/sessionLogger.d.ts +142 -0
- package/dist/services/sessionLogger.d.ts.map +1 -0
- package/dist/services/sessionLogger.js +566 -0
- package/dist/services/sessionLogger.js.map +1 -0
- package/dist/services/sessionPersistenceService.d.ts +190 -0
- package/dist/services/sessionPersistenceService.d.ts.map +1 -0
- package/dist/services/sessionPersistenceService.js +737 -0
- package/dist/services/sessionPersistenceService.js.map +1 -0
- package/dist/services/skillEngine/answerGenerator.d.ts +102 -0
- package/dist/services/skillEngine/answerGenerator.d.ts.map +1 -0
- package/dist/services/skillEngine/answerGenerator.js +508 -0
- package/dist/services/skillEngine/answerGenerator.js.map +1 -0
- package/dist/services/skillEngine/displayContractValidator.d.ts +26 -0
- package/dist/services/skillEngine/displayContractValidator.d.ts.map +1 -0
- package/dist/services/skillEngine/displayContractValidator.js +232 -0
- package/dist/services/skillEngine/displayContractValidator.js.map +1 -0
- package/dist/services/skillEngine/eventCollector.d.ts +96 -0
- package/dist/services/skillEngine/eventCollector.d.ts.map +1 -0
- package/dist/services/skillEngine/eventCollector.js +226 -0
- package/dist/services/skillEngine/eventCollector.js.map +1 -0
- package/dist/services/skillEngine/expressionUtils.d.ts +25 -0
- package/dist/services/skillEngine/expressionUtils.d.ts.map +1 -0
- package/dist/services/skillEngine/expressionUtils.js +66 -0
- package/dist/services/skillEngine/expressionUtils.js.map +1 -0
- package/dist/services/skillEngine/index.d.ts +25 -0
- package/dist/services/skillEngine/index.d.ts.map +1 -0
- package/dist/services/skillEngine/index.js +98 -0
- package/dist/services/skillEngine/index.js.map +1 -0
- package/dist/services/skillEngine/skillAnalysisAdapter.d.ts +149 -0
- package/dist/services/skillEngine/skillAnalysisAdapter.d.ts.map +1 -0
- package/dist/services/skillEngine/skillAnalysisAdapter.js +752 -0
- package/dist/services/skillEngine/skillAnalysisAdapter.js.map +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts +371 -0
- package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -0
- package/dist/services/skillEngine/skillExecutor.js +4129 -0
- package/dist/services/skillEngine/skillExecutor.js.map +1 -0
- package/dist/services/skillEngine/skillLoader.d.ts +163 -0
- package/dist/services/skillEngine/skillLoader.d.ts.map +1 -0
- package/dist/services/skillEngine/skillLoader.js +840 -0
- package/dist/services/skillEngine/skillLoader.js.map +1 -0
- package/dist/services/skillEngine/skillValidator.d.ts +53 -0
- package/dist/services/skillEngine/skillValidator.d.ts.map +1 -0
- package/dist/services/skillEngine/skillValidator.js +274 -0
- package/dist/services/skillEngine/skillValidator.js.map +1 -0
- package/dist/services/skillEngine/smartSummaryGenerator.d.ts +70 -0
- package/dist/services/skillEngine/smartSummaryGenerator.d.ts.map +1 -0
- package/dist/services/skillEngine/smartSummaryGenerator.js +324 -0
- package/dist/services/skillEngine/smartSummaryGenerator.js.map +1 -0
- package/dist/services/skillEngine/types.d.ts +584 -0
- package/dist/services/skillEngine/types.d.ts.map +1 -0
- package/dist/services/skillEngine/types.js +6 -0
- package/dist/services/skillEngine/types.js.map +1 -0
- package/dist/services/smartperfettoSqlPackage.d.ts +11 -0
- package/dist/services/smartperfettoSqlPackage.d.ts.map +1 -0
- package/dist/services/smartperfettoSqlPackage.js +168 -0
- package/dist/services/smartperfettoSqlPackage.js.map +1 -0
- package/dist/services/sqlGuardrailAnalyzer.d.ts +24 -0
- package/dist/services/sqlGuardrailAnalyzer.d.ts.map +1 -0
- package/dist/services/sqlGuardrailAnalyzer.js +362 -0
- package/dist/services/sqlGuardrailAnalyzer.js.map +1 -0
- package/dist/services/sqlKnowledgeBase.d.ts +236 -0
- package/dist/services/sqlKnowledgeBase.d.ts.map +1 -0
- package/dist/services/sqlKnowledgeBase.js +1109 -0
- package/dist/services/sqlKnowledgeBase.js.map +1 -0
- package/dist/services/sqlStdlibDependencyAnalyzer.d.ts +26 -0
- package/dist/services/sqlStdlibDependencyAnalyzer.d.ts.map +1 -0
- package/dist/services/sqlStdlibDependencyAnalyzer.js +486 -0
- package/dist/services/sqlStdlibDependencyAnalyzer.js.map +1 -0
- package/dist/services/sqlTemplateEngine.d.ts +134 -0
- package/dist/services/sqlTemplateEngine.d.ts.map +1 -0
- package/dist/services/sqlTemplateEngine.js +430 -0
- package/dist/services/sqlTemplateEngine.js.map +1 -0
- package/dist/services/sqlValidator.d.ts +21 -0
- package/dist/services/sqlValidator.d.ts.map +1 -0
- package/dist/services/sqlValidator.js +175 -0
- package/dist/services/sqlValidator.js.map +1 -0
- package/dist/services/standardMetricBackfillService.d.ts +23 -0
- package/dist/services/standardMetricBackfillService.d.ts.map +1 -0
- package/dist/services/standardMetricBackfillService.js +196 -0
- package/dist/services/standardMetricBackfillService.js.map +1 -0
- package/dist/services/startupAnrMethodGraph.d.ts +20 -0
- package/dist/services/startupAnrMethodGraph.d.ts.map +1 -0
- package/dist/services/startupAnrMethodGraph.js +70 -0
- package/dist/services/startupAnrMethodGraph.js.map +1 -0
- package/dist/services/stdlibSkillCoverage.d.ts +23 -0
- package/dist/services/stdlibSkillCoverage.d.ts.map +1 -0
- package/dist/services/stdlibSkillCoverage.js +289 -0
- package/dist/services/stdlibSkillCoverage.js.map +1 -0
- package/dist/services/threadSchedContext.d.ts +49 -0
- package/dist/services/threadSchedContext.d.ts.map +1 -0
- package/dist/services/threadSchedContext.js +84 -0
- package/dist/services/threadSchedContext.js.map +1 -0
- package/dist/services/timelineBinning.d.ts +44 -0
- package/dist/services/timelineBinning.d.ts.map +1 -0
- package/dist/services/timelineBinning.js +150 -0
- package/dist/services/timelineBinning.js.map +1 -0
- package/dist/services/traceConfigGenerator.d.ts +36 -0
- package/dist/services/traceConfigGenerator.d.ts.map +1 -0
- package/dist/services/traceConfigGenerator.js +110 -0
- package/dist/services/traceConfigGenerator.js.map +1 -0
- package/dist/services/traceFormatDetector.d.ts +39 -0
- package/dist/services/traceFormatDetector.d.ts.map +1 -0
- package/dist/services/traceFormatDetector.js +287 -0
- package/dist/services/traceFormatDetector.js.map +1 -0
- package/dist/services/traceMetadataStore.d.ts +32 -0
- package/dist/services/traceMetadataStore.d.ts.map +1 -0
- package/dist/services/traceMetadataStore.js +375 -0
- package/dist/services/traceMetadataStore.js.map +1 -0
- package/dist/services/traceProcessorConnectionModel.d.ts +32 -0
- package/dist/services/traceProcessorConnectionModel.d.ts.map +1 -0
- package/dist/services/traceProcessorConnectionModel.js +38 -0
- package/dist/services/traceProcessorConnectionModel.js.map +1 -0
- package/dist/services/traceProcessorHttpRpcClient.d.ts +22 -0
- package/dist/services/traceProcessorHttpRpcClient.d.ts.map +1 -0
- package/dist/services/traceProcessorHttpRpcClient.js +89 -0
- package/dist/services/traceProcessorHttpRpcClient.js.map +1 -0
- package/dist/services/traceProcessorLeaseModeDecision.d.ts +52 -0
- package/dist/services/traceProcessorLeaseModeDecision.d.ts.map +1 -0
- package/dist/services/traceProcessorLeaseModeDecision.js +150 -0
- package/dist/services/traceProcessorLeaseModeDecision.js.map +1 -0
- package/dist/services/traceProcessorLeaseStore.d.ts +88 -0
- package/dist/services/traceProcessorLeaseStore.d.ts.map +1 -0
- package/dist/services/traceProcessorLeaseStore.js +463 -0
- package/dist/services/traceProcessorLeaseStore.js.map +1 -0
- package/dist/services/traceProcessorProtobuf.d.ts +56 -0
- package/dist/services/traceProcessorProtobuf.d.ts.map +1 -0
- package/dist/services/traceProcessorProtobuf.js +442 -0
- package/dist/services/traceProcessorProtobuf.js.map +1 -0
- package/dist/services/traceProcessorRamBudget.d.ts +55 -0
- package/dist/services/traceProcessorRamBudget.d.ts.map +1 -0
- package/dist/services/traceProcessorRamBudget.js +140 -0
- package/dist/services/traceProcessorRamBudget.js.map +1 -0
- package/dist/services/traceProcessorService.d.ts +223 -0
- package/dist/services/traceProcessorService.d.ts.map +1 -0
- package/dist/services/traceProcessorService.js +838 -0
- package/dist/services/traceProcessorService.js.map +1 -0
- package/dist/services/traceProcessorSqlWorker.d.ts +49 -0
- package/dist/services/traceProcessorSqlWorker.d.ts.map +1 -0
- package/dist/services/traceProcessorSqlWorker.js +218 -0
- package/dist/services/traceProcessorSqlWorker.js.map +1 -0
- package/dist/services/traceProcessorSqlWorkerThread.d.ts +2 -0
- package/dist/services/traceProcessorSqlWorkerThread.d.ts.map +1 -0
- package/dist/services/traceProcessorSqlWorkerThread.js +35 -0
- package/dist/services/traceProcessorSqlWorkerThread.js.map +1 -0
- package/dist/services/traceSummaryV2.d.ts +47 -0
- package/dist/services/traceSummaryV2.d.ts.map +1 -0
- package/dist/services/traceSummaryV2.js +241 -0
- package/dist/services/traceSummaryV2.js.map +1 -0
- package/dist/services/traceUploadLimit.d.ts +3 -0
- package/dist/services/traceUploadLimit.d.ts.map +1 -0
- package/dist/services/traceUploadLimit.js +24 -0
- package/dist/services/traceUploadLimit.js.map +1 -0
- package/dist/services/workingTraceProcessor.d.ts +226 -0
- package/dist/services/workingTraceProcessor.d.ts.map +1 -0
- package/dist/services/workingTraceProcessor.js +1093 -0
- package/dist/services/workingTraceProcessor.js.map +1 -0
- package/dist/trace-processor-pin.env +39 -0
- package/dist/types/analysis.d.ts +511 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +112 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/ciGateContracts.d.ts +63 -0
- package/dist/types/ciGateContracts.d.ts.map +1 -0
- package/dist/types/ciGateContracts.js +6 -0
- package/dist/types/ciGateContracts.js.map +1 -0
- package/dist/types/dataContract.d.ts +624 -0
- package/dist/types/dataContract.d.ts.map +1 -0
- package/dist/types/dataContract.js +775 -0
- package/dist/types/dataContract.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/multiTraceComparison.d.ts +215 -0
- package/dist/types/multiTraceComparison.d.ts.map +1 -0
- package/dist/types/multiTraceComparison.js +33 -0
- package/dist/types/multiTraceComparison.js.map +1 -0
- package/dist/types/perfettoSql.d.ts +596 -0
- package/dist/types/perfettoSql.d.ts.map +1 -0
- package/dist/types/perfettoSql.js +28 -0
- package/dist/types/perfettoSql.js.map +1 -0
- package/dist/types/sparkContracts.d.ts +1642 -0
- package/dist/types/sparkContracts.d.ts.map +1 -0
- package/dist/types/sparkContracts.js +25 -0
- package/dist/types/sparkContracts.js.map +1 -0
- package/dist/types/teaching.types.d.ts +395 -0
- package/dist/types/teaching.types.d.ts.map +1 -0
- package/dist/types/teaching.types.js +300 -0
- package/dist/types/teaching.types.js.map +1 -0
- package/dist/utils/analysisNarrative.d.ts +24 -0
- package/dist/utils/analysisNarrative.d.ts.map +1 -0
- package/dist/utils/analysisNarrative.js +101 -0
- package/dist/utils/analysisNarrative.js.map +1 -0
- package/dist/utils/atomicFileWriter.d.ts +5 -0
- package/dist/utils/atomicFileWriter.d.ts.map +1 -0
- package/dist/utils/atomicFileWriter.js +90 -0
- package/dist/utils/atomicFileWriter.js.map +1 -0
- package/dist/utils/epipeGuard.d.ts +10 -0
- package/dist/utils/epipeGuard.d.ts.map +1 -0
- package/dist/utils/epipeGuard.js +40 -0
- package/dist/utils/epipeGuard.js.map +1 -0
- package/dist/utils/httpValue.d.ts +2 -0
- package/dist/utils/httpValue.d.ts.map +1 -0
- package/dist/utils/httpValue.js +24 -0
- package/dist/utils/httpValue.js.map +1 -0
- package/dist/utils/llmJson.d.ts +33 -0
- package/dist/utils/llmJson.d.ts.map +1 -0
- package/dist/utils/llmJson.js +148 -0
- package/dist/utils/llmJson.js.map +1 -0
- package/dist/utils/llmPrivacy.d.ts +15 -0
- package/dist/utils/llmPrivacy.d.ts.map +1 -0
- package/dist/utils/llmPrivacy.js +126 -0
- package/dist/utils/llmPrivacy.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +68 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/traceProcessorRowUtils.d.ts +11 -0
- package/dist/utils/traceProcessorRowUtils.d.ts.map +1 -0
- package/dist/utils/traceProcessorRowUtils.js +64 -0
- package/dist/utils/traceProcessorRowUtils.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +7 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +53 -0
- package/dist/version.js.map +1 -0
- package/package.json +128 -0
- package/prebuilts/trace_processor/README.md +20 -0
- package/prebuilts/trace_processor/darwin-arm64/trace_processor_shell +0 -0
- package/prebuilts/trace_processor/linux-x64/trace_processor_shell +0 -0
- package/prebuilts/trace_processor/win32-x64/trace_processor_shell.exe +0 -0
- package/skills/README.md +686 -0
- package/skills/_template/README.md +43 -0
- package/skills/_template/atomic_A_template.skill.yaml +79 -0
- package/skills/_template/atomic_B_template.skill.yaml +61 -0
- package/skills/_template/atomic_S_template.skill.yaml +92 -0
- package/skills/_template/composite_S_template.skill.yaml +198 -0
- package/skills/_template/vendor_override_template.yaml +72 -0
- package/skills/atomic/android_bitmap_memory_per_process.skill.yaml +203 -0
- package/skills/atomic/android_dvfs_counter_stats.skill.yaml +60 -0
- package/skills/atomic/android_gpu_work_period_track.skill.yaml +55 -0
- package/skills/atomic/android_heap_graph_summary.skill.yaml +232 -0
- package/skills/atomic/android_job_scheduler_events.skill.yaml +58 -0
- package/skills/atomic/android_kernel_wakelock_summary.skill.yaml +57 -0
- package/skills/atomic/anr_context_in_range.skill.yaml +99 -0
- package/skills/atomic/anr_main_thread_blocking.skill.yaml +513 -0
- package/skills/atomic/app_frame_production.skill.yaml +147 -0
- package/skills/atomic/app_lifecycle_in_range.skill.yaml +142 -0
- package/skills/atomic/app_process_starts_summary.skill.yaml +75 -0
- package/skills/atomic/battery_charge_timeline.skill.yaml +72 -0
- package/skills/atomic/battery_doze_state_timeline.skill.yaml +83 -0
- package/skills/atomic/binder_blocking_in_range.skill.yaml +99 -0
- package/skills/atomic/binder_in_range.skill.yaml +86 -0
- package/skills/atomic/binder_root_cause.skill.yaml +191 -0
- package/skills/atomic/binder_storm_detection.skill.yaml +394 -0
- package/skills/atomic/blocking_chain_analysis.skill.yaml +316 -0
- package/skills/atomic/buffer_transaction_lifecycle.skill.yaml +256 -0
- package/skills/atomic/cache_miss_impact.skill.yaml +115 -0
- package/skills/atomic/chrome_scroll_jank_frame_timeline.skill.yaml +337 -0
- package/skills/atomic/compose_recomposition_hotspot.skill.yaml +403 -0
- package/skills/atomic/consumer_jank_detection.skill.yaml +556 -0
- package/skills/atomic/cpu_cluster_load_in_range.skill.yaml +138 -0
- package/skills/atomic/cpu_cluster_mapping_view.skill.yaml +47 -0
- package/skills/atomic/cpu_freq_timeline.skill.yaml +143 -0
- package/skills/atomic/cpu_idle_analysis.skill.yaml +101 -0
- package/skills/atomic/cpu_idle_state_residency.skill.yaml +54 -0
- package/skills/atomic/cpu_load_in_range.skill.yaml +145 -0
- package/skills/atomic/cpu_process_utilization_period.skill.yaml +51 -0
- package/skills/atomic/cpu_slice_analysis.skill.yaml +118 -0
- package/skills/atomic/cpu_thread_utilization_period.skill.yaml +68 -0
- package/skills/atomic/cpu_throttling_in_range.skill.yaml +131 -0
- package/skills/atomic/cpu_time_per_frame.skill.yaml +59 -0
- package/skills/atomic/cpu_topology_detection.skill.yaml +233 -0
- package/skills/atomic/cpu_topology_view.skill.yaml +272 -0
- package/skills/atomic/cpu_utilization_per_period.skill.yaml +55 -0
- package/skills/atomic/device_state_snapshot.skill.yaml +171 -0
- package/skills/atomic/device_state_timeline.skill.yaml +308 -0
- package/skills/atomic/fence_wait_decomposition.skill.yaml +314 -0
- package/skills/atomic/fpsgo_analysis.skill.yaml +80 -0
- package/skills/atomic/frame_blocking_calls.skill.yaml +215 -0
- package/skills/atomic/frame_overrun_summary.skill.yaml +68 -0
- package/skills/atomic/frame_pipeline_variance.skill.yaml +124 -0
- package/skills/atomic/frame_production_gap.skill.yaml +337 -0
- package/skills/atomic/frame_ui_time_breakdown.skill.yaml +58 -0
- package/skills/atomic/futex_wait_distribution.skill.yaml +117 -0
- package/skills/atomic/game_fps_analysis.skill.yaml +385 -0
- package/skills/atomic/game_main_loop_jank.skill.yaml +309 -0
- package/skills/atomic/gc_events_in_range.skill.yaml +118 -0
- package/skills/atomic/gl_standalone_swap_jank.skill.yaml +259 -0
- package/skills/atomic/gpu_freq_in_range.skill.yaml +99 -0
- package/skills/atomic/gpu_frequency_analysis.skill.yaml +94 -0
- package/skills/atomic/gpu_metrics.skill.yaml +411 -0
- package/skills/atomic/gpu_power_state_analysis.skill.yaml +117 -0
- package/skills/atomic/gpu_render_in_range.skill.yaml +104 -0
- package/skills/atomic/input_events_in_range.skill.yaml +130 -0
- package/skills/atomic/input_to_frame_latency.skill.yaml +436 -0
- package/skills/atomic/linux_irq_summary.skill.yaml +66 -0
- package/skills/atomic/linux_perf_counter_hotspots.skill.yaml +108 -0
- package/skills/atomic/linux_process_rss_swap_timeline.skill.yaml +96 -0
- package/skills/atomic/linux_runqueue_depth_timeline.skill.yaml +132 -0
- package/skills/atomic/linux_sched_latency_distribution.skill.yaml +130 -0
- package/skills/atomic/lmk_kill_attribution.skill.yaml +72 -0
- package/skills/atomic/lock_contention_in_range.skill.yaml +402 -0
- package/skills/atomic/logcat_analysis.skill.yaml +85 -0
- package/skills/atomic/main_thread_file_io_in_range.skill.yaml +116 -0
- package/skills/atomic/main_thread_sched_latency_in_range.skill.yaml +91 -0
- package/skills/atomic/main_thread_slices_in_range.skill.yaml +129 -0
- package/skills/atomic/main_thread_states_in_range.skill.yaml +105 -0
- package/skills/atomic/mali_gpu_power_state.skill.yaml +54 -0
- package/skills/atomic/media_codec_activity.skill.yaml +236 -0
- package/skills/atomic/memory_growth_detector.skill.yaml +146 -0
- package/skills/atomic/memory_pressure_in_range.skill.yaml +382 -0
- package/skills/atomic/memory_rss_high_watermark.skill.yaml +62 -0
- package/skills/atomic/native_heap_breakdown.skill.yaml +80 -0
- package/skills/atomic/oom_adjuster_score_timeline.skill.yaml +77 -0
- package/skills/atomic/page_fault_in_range.skill.yaml +113 -0
- package/skills/atomic/pipeline_4feature_scoring.skill.yaml +299 -0
- package/skills/atomic/pipeline_key_slices_overlay.skill.yaml +108 -0
- package/skills/atomic/present_fence_timing.skill.yaml +156 -0
- package/skills/atomic/process_identity_resolver.skill.yaml +503 -0
- package/skills/atomic/render_pipeline_latency.skill.yaml +120 -0
- package/skills/atomic/render_thread_slices.skill.yaml +107 -0
- package/skills/atomic/rendering_pipeline_detection.skill.yaml +770 -0
- package/skills/atomic/rn_bridge_to_frame_jank.skill.yaml +209 -0
- package/skills/atomic/rn_fabric_render_jank.skill.yaml +213 -0
- package/skills/atomic/sched_latency_in_range.skill.yaml +94 -0
- package/skills/atomic/scheduling_analysis.skill.yaml +103 -0
- package/skills/atomic/scroll_response_latency.skill.yaml +131 -0
- package/skills/atomic/sf_composition_in_range.skill.yaml +99 -0
- package/skills/atomic/sf_frame_consumption.skill.yaml +133 -0
- package/skills/atomic/sf_layer_count_in_range.skill.yaml +155 -0
- package/skills/atomic/startup_binder_in_range.skill.yaml +106 -0
- package/skills/atomic/startup_binder_pool_analysis.skill.yaml +115 -0
- package/skills/atomic/startup_breakdown_in_range.skill.yaml +115 -0
- package/skills/atomic/startup_class_loading_in_range.skill.yaml +93 -0
- package/skills/atomic/startup_cpu_placement_timeline.skill.yaml +135 -0
- package/skills/atomic/startup_critical_tasks.skill.yaml +247 -0
- package/skills/atomic/startup_events_in_range.skill.yaml +251 -0
- package/skills/atomic/startup_freq_rampup.skill.yaml +110 -0
- package/skills/atomic/startup_gc_in_range.skill.yaml +97 -0
- package/skills/atomic/startup_hot_slice_states.skill.yaml +116 -0
- package/skills/atomic/startup_jit_analysis.skill.yaml +158 -0
- package/skills/atomic/startup_main_thread_binder_blocking_in_range.skill.yaml +114 -0
- package/skills/atomic/startup_main_thread_file_io_in_range.skill.yaml +117 -0
- package/skills/atomic/startup_main_thread_slices_in_range.skill.yaml +138 -0
- package/skills/atomic/startup_main_thread_states_in_range.skill.yaml +100 -0
- package/skills/atomic/startup_main_thread_sync_binder_in_range.skill.yaml +103 -0
- package/skills/atomic/startup_sched_latency_in_range.skill.yaml +93 -0
- package/skills/atomic/startup_slow_reasons.skill.yaml +625 -0
- package/skills/atomic/startup_thread_blocking_graph.skill.yaml +181 -0
- package/skills/atomic/system_load_in_range.skill.yaml +95 -0
- package/skills/atomic/task_migration_in_range.skill.yaml +115 -0
- package/skills/atomic/textureview_producer_frame_timing.skill.yaml +302 -0
- package/skills/atomic/thermal_predictor.skill.yaml +182 -0
- package/skills/atomic/thread_affinity_violation.skill.yaml +139 -0
- package/skills/atomic/touch_to_display_latency.skill.yaml +130 -0
- package/skills/atomic/util_tracking_analysis.skill.yaml +89 -0
- package/skills/atomic/vrr_detection.skill.yaml +301 -0
- package/skills/atomic/vsync_alignment_in_range.skill.yaml +116 -0
- package/skills/atomic/vsync_config.skill.yaml +147 -0
- package/skills/atomic/vsync_period_detection.skill.yaml +178 -0
- package/skills/atomic/vsync_phase_alignment.skill.yaml +255 -0
- package/skills/atomic/wakelock_tracking.skill.yaml +276 -0
- package/skills/atomic/wattson_app_startup_power.skill.yaml +66 -0
- package/skills/atomic/wattson_rails_power_breakdown.skill.yaml +70 -0
- package/skills/atomic/wattson_thread_power_attribution.skill.yaml +74 -0
- package/skills/atomic/webview_v8_analysis.skill.yaml +297 -0
- package/skills/comparison/multi_trace_result_comparison.skill.yaml +60 -0
- package/skills/composite/anr_analysis.skill.yaml +889 -0
- package/skills/composite/anr_detail.skill.yaml +796 -0
- package/skills/composite/battery_drain_attribution.skill.yaml +134 -0
- package/skills/composite/binder_analysis.skill.yaml +742 -0
- package/skills/composite/binder_detail.skill.yaml +388 -0
- package/skills/composite/block_io_analysis.skill.yaml +559 -0
- package/skills/composite/click_response_analysis.skill.yaml +915 -0
- package/skills/composite/click_response_detail.skill.yaml +800 -0
- package/skills/composite/cpu_analysis.skill.yaml +960 -0
- package/skills/composite/dmabuf_analysis.skill.yaml +622 -0
- package/skills/composite/flutter_scrolling_analysis.skill.yaml +443 -0
- package/skills/composite/gc_analysis.skill.yaml +744 -0
- package/skills/composite/global_trace_sanity_check.skill.yaml +716 -0
- package/skills/composite/gpu_analysis.skill.yaml +700 -0
- package/skills/composite/io_pressure.skill.yaml +654 -0
- package/skills/composite/irq_analysis.skill.yaml +696 -0
- package/skills/composite/jank_frame_detail.skill.yaml +2065 -0
- package/skills/composite/lmk_analysis.skill.yaml +626 -0
- package/skills/composite/lock_binder_wait.skill.yaml +95 -0
- package/skills/composite/lock_contention_analysis.skill.yaml +878 -0
- package/skills/composite/memory_analysis.skill.yaml +718 -0
- package/skills/composite/navigation_analysis.skill.yaml +901 -0
- package/skills/composite/network_analysis.skill.yaml +760 -0
- package/skills/composite/power_consumption_overview.skill.yaml +143 -0
- package/skills/composite/scene_reconstruction.skill.yaml +2788 -0
- package/skills/composite/scroll_session_analysis.skill.yaml +496 -0
- package/skills/composite/scrolling_analysis.skill.yaml +3295 -0
- package/skills/composite/startup_analysis.skill.yaml +1172 -0
- package/skills/composite/startup_detail.skill.yaml +1339 -0
- package/skills/composite/state_timeline.skill.yaml +1021 -0
- package/skills/composite/surfaceflinger_analysis.skill.yaml +808 -0
- package/skills/composite/suspend_wakeup_analysis.skill.yaml +698 -0
- package/skills/composite/thermal_throttling.skill.yaml +964 -0
- package/skills/composite/thermal_throttling_chain.skill.yaml +147 -0
- package/skills/composite/webview_drawfunctor_jank_chain.skill.yaml +343 -0
- package/skills/config/conclusion_scene_templates.base.yaml +181 -0
- package/skills/config/conclusion_scene_templates.yaml +17 -0
- package/skills/deep/callstack_analysis.skill.yaml +436 -0
- package/skills/deep/cpu_profiling.skill.yaml +617 -0
- package/skills/docs/scrolling.sop.md +312 -0
- package/skills/docs/startup.sop.md +382 -0
- package/skills/docs/upstream-perfetto-ai-skill-translation.sop.md +50 -0
- package/skills/fragments/target_threads.sql +34 -0
- package/skills/fragments/thread_states_quadrant.sql +26 -0
- package/skills/fragments/vsync_config.sql +32 -0
- package/skills/modules/app/launcher_module.skill.yaml +473 -0
- package/skills/modules/app/systemui_module.skill.yaml +565 -0
- package/skills/modules/app/third_party_module.skill.yaml +275 -0
- package/skills/modules/framework/ams_module.skill.yaml +239 -0
- package/skills/modules/framework/art_module.skill.yaml +266 -0
- package/skills/modules/framework/choreographer_module.skill.yaml +419 -0
- package/skills/modules/framework/input_module.skill.yaml +219 -0
- package/skills/modules/framework/surfaceflinger_module.skill.yaml +343 -0
- package/skills/modules/framework/wms_module.skill.yaml +356 -0
- package/skills/modules/hardware/cpu_module.skill.yaml +300 -0
- package/skills/modules/hardware/gpu_module.skill.yaml +229 -0
- package/skills/modules/hardware/memory_module.skill.yaml +443 -0
- package/skills/modules/hardware/power_module.skill.yaml +377 -0
- package/skills/modules/hardware/thermal_module.skill.yaml +410 -0
- package/skills/modules/kernel/binder_module.skill.yaml +223 -0
- package/skills/modules/kernel/filesystem_module.skill.yaml +423 -0
- package/skills/modules/kernel/lock_contention_module.skill.yaml +424 -0
- package/skills/modules/kernel/scheduler_module.skill.yaml +247 -0
- package/skills/pipelines/_base.skill.yaml +103 -0
- package/skills/pipelines/android_pip_freeform.skill.yaml +224 -0
- package/skills/pipelines/android_view_mixed.skill.yaml +305 -0
- package/skills/pipelines/android_view_multi_window.skill.yaml +271 -0
- package/skills/pipelines/android_view_software.skill.yaml +172 -0
- package/skills/pipelines/android_view_standard_blast.skill.yaml +357 -0
- package/skills/pipelines/android_view_standard_legacy.skill.yaml +233 -0
- package/skills/pipelines/angle_gles_vulkan.skill.yaml +178 -0
- package/skills/pipelines/camera_pipeline.skill.yaml +215 -0
- package/skills/pipelines/chrome_browser_viz.skill.yaml +288 -0
- package/skills/pipelines/compose_standard.skill.yaml +250 -0
- package/skills/pipelines/flutter_surfaceview_impeller.skill.yaml +233 -0
- package/skills/pipelines/flutter_surfaceview_skia.skill.yaml +194 -0
- package/skills/pipelines/flutter_textureview.skill.yaml +219 -0
- package/skills/pipelines/game_engine.skill.yaml +311 -0
- package/skills/pipelines/hardware_buffer_renderer.skill.yaml +205 -0
- package/skills/pipelines/imagereader_pipeline.skill.yaml +237 -0
- package/skills/pipelines/index.yaml +122 -0
- package/skills/pipelines/opengl_es.skill.yaml +185 -0
- package/skills/pipelines/rn_new_arch.skill.yaml +126 -0
- package/skills/pipelines/rn_old_arch.skill.yaml +137 -0
- package/skills/pipelines/rn_skia.skill.yaml +115 -0
- package/skills/pipelines/software_compositing.skill.yaml +203 -0
- package/skills/pipelines/surface_control_api.skill.yaml +208 -0
- package/skills/pipelines/surfaceview_blast.skill.yaml +210 -0
- package/skills/pipelines/textureview_standard.skill.yaml +301 -0
- package/skills/pipelines/variable_refresh_rate.skill.yaml +264 -0
- package/skills/pipelines/video_overlay_hwc.skill.yaml +193 -0
- package/skills/pipelines/vulkan_native.skill.yaml +215 -0
- package/skills/pipelines/webview_gl_functor.skill.yaml +232 -0
- package/skills/pipelines/webview_surface_control.skill.yaml +187 -0
- package/skills/pipelines/webview_surfaceview_wrapper.skill.yaml +196 -0
- package/skills/pipelines/webview_textureview_custom.skill.yaml +201 -0
- package/skills/vendors/honor/startup.override.yaml +117 -0
- package/skills/vendors/mtk/startup.override.yaml +133 -0
- package/skills/vendors/oppo/startup.override.yaml +188 -0
- package/skills/vendors/pixel/startup.override.yaml +163 -0
- package/skills/vendors/qualcomm/startup.override.yaml +175 -0
- package/skills/vendors/samsung/startup.override.yaml +161 -0
- package/skills/vendors/vivo/startup.override.yaml +144 -0
- package/skills/vendors/xiaomi/startup.override.yaml +120 -0
- package/sql/smartperfetto/PACKAGE.json +24 -0
- package/sql/smartperfetto/binder/victim_to_server.sql +36 -0
- package/sql/smartperfetto/scrolling/jank_frames.sql +55 -0
- package/strategies/anr.strategy.md +200 -0
- package/strategies/arch-compose.template.md +10 -0
- package/strategies/arch-flutter.template.md +17 -0
- package/strategies/arch-standard.template.md +31 -0
- package/strategies/arch-webview.template.md +9 -0
- package/strategies/comparison-conclusion.template.md +36 -0
- package/strategies/comparison-methodology.template.md +41 -0
- package/strategies/comparison-result-methodology.template.md +35 -0
- package/strategies/game.strategy.md +121 -0
- package/strategies/general.strategy.md +48 -0
- package/strategies/interaction.strategy.md +149 -0
- package/strategies/knowledge-binder-ipc.template.md +59 -0
- package/strategies/knowledge-cpu-scheduler.template.md +67 -0
- package/strategies/knowledge-data-sources.template.md +738 -0
- package/strategies/knowledge-gc-dynamics.template.md +65 -0
- package/strategies/knowledge-harmonyos-rendering.template.md +54 -0
- package/strategies/knowledge-harmonyos-tools.template.md +73 -0
- package/strategies/knowledge-lock-contention.template.md +61 -0
- package/strategies/knowledge-pipeline-anchors.template.md +136 -0
- package/strategies/knowledge-pipeline-fences.template.md +158 -0
- package/strategies/knowledge-rendering-pipeline.template.md +170 -0
- package/strategies/knowledge-startup-root-causes.template.md +951 -0
- package/strategies/knowledge-thermal-throttling.template.md +53 -0
- package/strategies/linux.strategy.md +86 -0
- package/strategies/media.strategy.md +75 -0
- package/strategies/memory.strategy.md +94 -0
- package/strategies/multi-trace-result-comparison.strategy.md +96 -0
- package/strategies/network.strategy.md +80 -0
- package/strategies/overview.strategy.md +139 -0
- package/strategies/phase_hint_templates/misdiagnosis_vsync_vrr.template.yaml +37 -0
- package/strategies/pipeline.strategy.md +208 -0
- package/strategies/power.strategy.md +165 -0
- package/strategies/prompt-complexity-classifier.template.md +26 -0
- package/strategies/prompt-language-en.template.md +9 -0
- package/strategies/prompt-language-zh.template.md +8 -0
- package/strategies/prompt-methodology.template.md +183 -0
- package/strategies/prompt-output-format.template.md +115 -0
- package/strategies/prompt-quick.template.md +44 -0
- package/strategies/prompt-role.template.md +13 -0
- package/strategies/runtime-correctness.strategy.md +73 -0
- package/strategies/scroll-response.strategy.md +236 -0
- package/strategies/scrolling.strategy.md +467 -0
- package/strategies/selection-area.template.md +46 -0
- package/strategies/selection-slice.template.md +126 -0
- package/strategies/startup.strategy.md +694 -0
- package/strategies/teaching.strategy.md +176 -0
- package/strategies/touch-tracking.strategy.md +213 -0
|
@@ -0,0 +1,2541 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
// This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ClaudeRuntime = exports.__testing = void 0;
|
|
40
|
+
const events_1 = require("events");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const claude_agent_sdk_1 = require("@anthropic-ai/claude-agent-sdk");
|
|
44
|
+
const skillExecutor_1 = require("../services/skillEngine/skillExecutor");
|
|
45
|
+
const skillLoader_1 = require("../services/skillEngine/skillLoader");
|
|
46
|
+
const skillAnalysisAdapter_1 = require("../services/skillEngine/skillAnalysisAdapter");
|
|
47
|
+
const architectureDetector_1 = require("../agent/detectors/architectureDetector");
|
|
48
|
+
const enhancedSessionContext_1 = require("../agent/context/enhancedSessionContext");
|
|
49
|
+
const claudeMcpServer_1 = require("./claudeMcpServer");
|
|
50
|
+
const claudeSystemPrompt_1 = require("./claudeSystemPrompt");
|
|
51
|
+
const claudeSseBridge_1 = require("./claudeSseBridge");
|
|
52
|
+
const analysisTermination_1 = require("./analysisTermination");
|
|
53
|
+
const claudeFindingExtractor_1 = require("./claudeFindingExtractor");
|
|
54
|
+
const claudeConfig_1 = require("./claudeConfig");
|
|
55
|
+
const focusAppDetector_1 = require("./focusAppDetector");
|
|
56
|
+
const sceneClassifier_1 = require("./sceneClassifier");
|
|
57
|
+
const queryComplexityClassifier_1 = require("./queryComplexityClassifier");
|
|
58
|
+
const claudeAgentDefinitions_1 = require("./claudeAgentDefinitions");
|
|
59
|
+
const sqlKnowledgeBase_1 = require("../services/sqlKnowledgeBase");
|
|
60
|
+
const types_1 = require("./types");
|
|
61
|
+
const artifactStore_1 = require("./artifactStore");
|
|
62
|
+
const toolCallSummary_1 = require("./toolCallSummary");
|
|
63
|
+
const recoveryNoteBuilder_1 = require("./recoveryNoteBuilder");
|
|
64
|
+
const contextTokenMeter_1 = require("./contextTokenMeter");
|
|
65
|
+
const agentMetrics_1 = require("./agentMetrics");
|
|
66
|
+
const analysisPatternMemory_1 = require("./analysisPatternMemory");
|
|
67
|
+
const skillNotesInjector_1 = require("./selfImprove/skillNotesInjector");
|
|
68
|
+
const strategyFingerprint_1 = require("./selfImprove/strategyFingerprint");
|
|
69
|
+
const claudeVerifier_1 = require("./claudeVerifier");
|
|
70
|
+
const runtimePaths_1 = require("../runtimePaths");
|
|
71
|
+
function parseQuickBudgetEnv() {
|
|
72
|
+
const v = process.env.SELF_IMPROVE_QUICK_NOTES_BUDGET;
|
|
73
|
+
if (!v)
|
|
74
|
+
return undefined;
|
|
75
|
+
const n = Number.parseInt(v, 10);
|
|
76
|
+
return Number.isFinite(n) && n >= 0 ? n : undefined;
|
|
77
|
+
}
|
|
78
|
+
function parseLeadingJsonObject(text) {
|
|
79
|
+
let depth = 0;
|
|
80
|
+
let inString = false;
|
|
81
|
+
let escaped = false;
|
|
82
|
+
for (let i = 0; i < text.length; i++) {
|
|
83
|
+
const char = text[i];
|
|
84
|
+
if (inString) {
|
|
85
|
+
if (escaped) {
|
|
86
|
+
escaped = false;
|
|
87
|
+
}
|
|
88
|
+
else if (char === '\\') {
|
|
89
|
+
escaped = true;
|
|
90
|
+
}
|
|
91
|
+
else if (char === '"') {
|
|
92
|
+
inString = false;
|
|
93
|
+
}
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (char === '"') {
|
|
97
|
+
inString = true;
|
|
98
|
+
}
|
|
99
|
+
else if (char === '{') {
|
|
100
|
+
depth++;
|
|
101
|
+
}
|
|
102
|
+
else if (char === '}') {
|
|
103
|
+
depth--;
|
|
104
|
+
if (depth === 0) {
|
|
105
|
+
try {
|
|
106
|
+
const parsed = JSON.parse(text.slice(0, i + 1));
|
|
107
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
108
|
+
? parsed
|
|
109
|
+
: null;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
function extractPlanPhaseIdFromToolResult(resultStr) {
|
|
120
|
+
const candidates = [resultStr];
|
|
121
|
+
try {
|
|
122
|
+
const parsed = JSON.parse(resultStr);
|
|
123
|
+
const entries = Array.isArray(parsed) ? parsed : [parsed];
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
if (entry && typeof entry === 'object' && typeof entry.text === 'string') {
|
|
126
|
+
candidates.push(entry.text);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Fall through to leading-object parsing below.
|
|
132
|
+
}
|
|
133
|
+
for (const candidate of candidates) {
|
|
134
|
+
const trimmed = candidate.trim();
|
|
135
|
+
const parsed = parseLeadingJsonObject(trimmed);
|
|
136
|
+
const planPhaseId = parsed?.planPhaseId;
|
|
137
|
+
if (typeof planPhaseId === 'string' && planPhaseId.trim())
|
|
138
|
+
return planPhaseId.trim();
|
|
139
|
+
}
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
const traceCompletenessProber_1 = require("./traceCompletenessProber");
|
|
143
|
+
const entityCapture_1 = require("../agent/core/entityCapture");
|
|
144
|
+
const outputLanguage_1 = require("./outputLanguage");
|
|
145
|
+
const runtimeSnapshotStore_1 = require("../services/runtimeSnapshotStore");
|
|
146
|
+
const enterpriseMigration_1 = require("../services/enterpriseMigration");
|
|
147
|
+
const SESSION_MAP_FILE = (0, runtimePaths_1.backendLogPath)('claude_session_map.json');
|
|
148
|
+
/** Max age for session map entries before pruning (24 hours). */
|
|
149
|
+
const SESSION_MAP_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
150
|
+
/** Claude SDK sessions expire server-side after roughly 4 hours. */
|
|
151
|
+
const SDK_SESSION_FRESHNESS_MS = 4 * 60 * 60 * 1000;
|
|
152
|
+
function enterpriseSessionMapDbWritesEnabled() {
|
|
153
|
+
return (0, enterpriseMigration_1.enterpriseDbWritesEnabled)();
|
|
154
|
+
}
|
|
155
|
+
function legacySessionMapWritesEnabled() {
|
|
156
|
+
return (0, enterpriseMigration_1.legacyFilesystemWritesEnabled)();
|
|
157
|
+
}
|
|
158
|
+
function loadPersistedSessionMap() {
|
|
159
|
+
try {
|
|
160
|
+
if (fs.existsSync(SESSION_MAP_FILE)) {
|
|
161
|
+
const data = JSON.parse(fs.readFileSync(SESSION_MAP_FILE, 'utf-8'));
|
|
162
|
+
const map = new Map();
|
|
163
|
+
for (const [key, value] of Object.entries(data)) {
|
|
164
|
+
// Migration: old format stored plain string, new format stores {sdkSessionId, updatedAt}
|
|
165
|
+
if (typeof value === 'string') {
|
|
166
|
+
map.set(key, { sdkSessionId: value, updatedAt: Date.now() });
|
|
167
|
+
}
|
|
168
|
+
else if (value && typeof value === 'object') {
|
|
169
|
+
const entry = value;
|
|
170
|
+
if (typeof entry.sdkSessionId !== 'string')
|
|
171
|
+
continue;
|
|
172
|
+
const updatedAt = typeof entry.updatedAt === 'number' && Number.isFinite(entry.updatedAt)
|
|
173
|
+
? entry.updatedAt
|
|
174
|
+
: Date.now();
|
|
175
|
+
const mode = entry.mode === 'full' ? entry.mode : undefined;
|
|
176
|
+
map.set(key, { sdkSessionId: entry.sdkSessionId, updatedAt, ...(mode ? { mode } : {}) });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return map;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Ignore — start with empty map
|
|
184
|
+
}
|
|
185
|
+
return new Map();
|
|
186
|
+
}
|
|
187
|
+
function loadSessionMapForCurrentMode() {
|
|
188
|
+
if ((0, enterpriseMigration_1.legacyFilesystemReadAuthorityEnabled)()) {
|
|
189
|
+
return loadPersistedSessionMap();
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
return (0, runtimeSnapshotStore_1.loadClaudeSessionMapFromRuntimeSnapshots)(SESSION_MAP_MAX_AGE_MS);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
console.warn('[ClaudeRuntime] Failed to load runtime_snapshots session map:', err.message);
|
|
196
|
+
}
|
|
197
|
+
return new Map();
|
|
198
|
+
}
|
|
199
|
+
function providerScopeFromOptions(options) {
|
|
200
|
+
if (!options.tenantId || !options.workspaceId)
|
|
201
|
+
return undefined;
|
|
202
|
+
return {
|
|
203
|
+
tenantId: options.tenantId,
|
|
204
|
+
workspaceId: options.workspaceId,
|
|
205
|
+
userId: options.userId,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function knowledgeScopeFromOptions(options) {
|
|
209
|
+
if (!options.tenantId || !options.workspaceId)
|
|
210
|
+
return undefined;
|
|
211
|
+
return {
|
|
212
|
+
tenantId: options.tenantId,
|
|
213
|
+
workspaceId: options.workspaceId,
|
|
214
|
+
userId: options.userId,
|
|
215
|
+
sourceRunId: options.runId,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Debounce timer for session map persistence — avoids blocking event loop on every SDK message.
|
|
220
|
+
* P2-1: Use a Map keyed by the Map reference to support multiple ClaudeRuntime instances.
|
|
221
|
+
*/
|
|
222
|
+
const saveTimers = new WeakMap();
|
|
223
|
+
const SAVE_DEBOUNCE_MS = 2000;
|
|
224
|
+
function savePersistedSessionMap(map) {
|
|
225
|
+
const existing = saveTimers.get(map);
|
|
226
|
+
if (existing)
|
|
227
|
+
clearTimeout(existing);
|
|
228
|
+
saveTimers.set(map, setTimeout(() => {
|
|
229
|
+
saveTimers.delete(map);
|
|
230
|
+
savePersistedSessionMapSync(map);
|
|
231
|
+
}, SAVE_DEBOUNCE_MS));
|
|
232
|
+
}
|
|
233
|
+
/** Immediate save — used by debounce timer and for critical operations (session removal). */
|
|
234
|
+
function savePersistedSessionMapSync(map) {
|
|
235
|
+
try {
|
|
236
|
+
const dir = path.dirname(SESSION_MAP_FILE);
|
|
237
|
+
if (!fs.existsSync(dir))
|
|
238
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
239
|
+
// Prune stale entries before saving
|
|
240
|
+
const now = Date.now();
|
|
241
|
+
for (const [key, entry] of map) {
|
|
242
|
+
if (now - entry.updatedAt > SESSION_MAP_MAX_AGE_MS) {
|
|
243
|
+
map.delete(key);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const tmpFile = SESSION_MAP_FILE + '.tmp';
|
|
247
|
+
fs.writeFileSync(tmpFile, JSON.stringify(Object.fromEntries(map)));
|
|
248
|
+
fs.renameSync(tmpFile, SESSION_MAP_FILE);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
console.warn('[ClaudeRuntime] Failed to persist session map:', err.message);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Notes persistence now handled by unified SessionStateSnapshot — no separate disk I/O.
|
|
255
|
+
// The old logs/session_notes/ directory is no longer written to.
|
|
256
|
+
// P2-G1: ALLOWED_TOOLS is now auto-derived from createClaudeMcpServer() return value.
|
|
257
|
+
// No longer hardcoded — adding a new MCP tool automatically includes it.
|
|
258
|
+
/**
|
|
259
|
+
* Format pre-queried trace datasets as Markdown tables to prepend to the AI prompt.
|
|
260
|
+
* Mirrors smartperfetto's approach: data is ready upfront so the AI skips basic SQL turns.
|
|
261
|
+
*/
|
|
262
|
+
function formatTraceContext(datasets, outputLanguage = outputLanguage_1.DEFAULT_OUTPUT_LANGUAGE) {
|
|
263
|
+
if (!datasets || datasets.length === 0)
|
|
264
|
+
return '';
|
|
265
|
+
const parts = datasets.map((d) => {
|
|
266
|
+
const header = `| ${d.columns.join(' | ')} |`;
|
|
267
|
+
const sep = `| ${d.columns.map(() => '---').join(' | ')} |`;
|
|
268
|
+
const rows = d.rows.slice(0, 100).map((r) => `| ${r.map((v) => String(v ?? '—')).join(' | ')} |`);
|
|
269
|
+
const truncNote = d.rows.length > 100
|
|
270
|
+
? (0, outputLanguage_1.localize)(outputLanguage, `\n*(前 100 行,共 ${d.rows.length} 行)*`, `\n*(first 100 rows out of ${d.rows.length})*`)
|
|
271
|
+
: '';
|
|
272
|
+
return `### ${d.label}\n${header}\n${sep}\n${rows.join('\n')}${truncNote}`;
|
|
273
|
+
});
|
|
274
|
+
return (0, outputLanguage_1.localize)(outputLanguage, `## 前端预查询 Trace 数据\n\n以下数据已由前端查询完毕,直接使用,无需重复 SQL 查询:\n\n${parts.join('\n\n')}`, `## Frontend Pre-queried Trace Data\n\nThe frontend has already queried the following data. Use it directly; do not repeat the same SQL query.\n\n${parts.join('\n\n')}`);
|
|
275
|
+
}
|
|
276
|
+
/** Check if an error is retryable (API overload/server errors). */
|
|
277
|
+
function isRetryableError(err) {
|
|
278
|
+
const msg = err.message || '';
|
|
279
|
+
// Anthropic API errors: 529 (overload), 500 (server), 503 (service unavailable)
|
|
280
|
+
return /529|overload|500|server error|503|service unavailable|ECONNRESET|ETIMEDOUT/i.test(msg);
|
|
281
|
+
}
|
|
282
|
+
function getSdkResultErrorMessage(msg) {
|
|
283
|
+
if (!msg || msg.type !== 'result')
|
|
284
|
+
return undefined;
|
|
285
|
+
const subtype = typeof msg.subtype === 'string' ? msg.subtype : 'unknown';
|
|
286
|
+
if (subtype === 'success' || (0, analysisTermination_1.isSdkMaxTurnsSubtype)(subtype))
|
|
287
|
+
return undefined;
|
|
288
|
+
const errors = Array.isArray(msg.errors)
|
|
289
|
+
? msg.errors.map(formatSdkError).filter(Boolean)
|
|
290
|
+
: [];
|
|
291
|
+
return `Claude analysis error (${subtype}): ${errors.join('; ') || 'Unknown error'}`;
|
|
292
|
+
}
|
|
293
|
+
function formatSdkError(error) {
|
|
294
|
+
if (typeof error === 'string')
|
|
295
|
+
return error;
|
|
296
|
+
if (error instanceof Error)
|
|
297
|
+
return error.message;
|
|
298
|
+
if (error && typeof error === 'object') {
|
|
299
|
+
const maybeMessage = error.message;
|
|
300
|
+
if (typeof maybeMessage === 'string')
|
|
301
|
+
return maybeMessage;
|
|
302
|
+
try {
|
|
303
|
+
return JSON.stringify(error);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return String(error);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return String(error);
|
|
310
|
+
}
|
|
311
|
+
function isMissingSdkConversationError(message) {
|
|
312
|
+
return /No conversation found with session ID/i.test(message);
|
|
313
|
+
}
|
|
314
|
+
function isFreshFullSdkSessionEntry(entry, now = Date.now()) {
|
|
315
|
+
return !!entry
|
|
316
|
+
&& entry.mode === 'full'
|
|
317
|
+
&& now - (entry.updatedAt || 0) < SDK_SESSION_FRESHNESS_MS;
|
|
318
|
+
}
|
|
319
|
+
function compactForPrompt(value, maxChars) {
|
|
320
|
+
const text = String(value ?? '').replace(/\s+/g, ' ').trim();
|
|
321
|
+
if (text.length <= maxChars)
|
|
322
|
+
return text;
|
|
323
|
+
return `${text.slice(0, Math.max(0, maxChars - 1))}...`;
|
|
324
|
+
}
|
|
325
|
+
function buildQuickConversationContext(previousTurns, outputLanguage = outputLanguage_1.DEFAULT_OUTPUT_LANGUAGE) {
|
|
326
|
+
const turns = previousTurns.filter(turn => turn.completed).slice(-3);
|
|
327
|
+
if (turns.length === 0)
|
|
328
|
+
return undefined;
|
|
329
|
+
const lines = [
|
|
330
|
+
(0, outputLanguage_1.localize)(outputLanguage, '## 最近对话上下文\n\n以下是 SmartPerfetto 本地保存的最近问答,用于理解“继续/刚才/这个”等指代;不要把它当作当前问题的新证据。', '## Recent Conversation Context\n\nThe following recent SmartPerfetto turns are local context for references like "continue", "earlier", or "this"; do not treat them as new evidence for the current question.'),
|
|
331
|
+
];
|
|
332
|
+
for (const turn of turns) {
|
|
333
|
+
const query = compactForPrompt(turn.query, 220);
|
|
334
|
+
const answer = compactForPrompt(turn.result?.message || '', 700);
|
|
335
|
+
const findings = turn.findings
|
|
336
|
+
.slice(0, 3)
|
|
337
|
+
.map(f => `[${f.severity}] ${compactForPrompt(f.title, 160)}`)
|
|
338
|
+
.filter(Boolean);
|
|
339
|
+
lines.push(`### Turn ${turn.turnIndex + 1}`);
|
|
340
|
+
lines.push(`- ${(0, outputLanguage_1.localize)(outputLanguage, '用户', 'User')}: ${query}`);
|
|
341
|
+
if (answer) {
|
|
342
|
+
lines.push(`- ${(0, outputLanguage_1.localize)(outputLanguage, '上轮回答', 'Previous answer')}: ${answer}`);
|
|
343
|
+
}
|
|
344
|
+
if (findings.length > 0) {
|
|
345
|
+
lines.push(`- ${(0, outputLanguage_1.localize)(outputLanguage, '上轮发现', 'Previous findings')}: ${findings.join('; ')}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return lines.join('\n');
|
|
349
|
+
}
|
|
350
|
+
exports.__testing = {
|
|
351
|
+
getSdkResultErrorMessage,
|
|
352
|
+
isMissingSdkConversationError,
|
|
353
|
+
isFreshFullSdkSessionEntry,
|
|
354
|
+
buildQuickConversationContext,
|
|
355
|
+
};
|
|
356
|
+
/** Sleep for the given milliseconds. */
|
|
357
|
+
function sleep(ms) {
|
|
358
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Wrap sdkQuery with exponential backoff retry for transient API errors
|
|
362
|
+
* and expose a `close()` handle so timeout/abort paths can terminate the
|
|
363
|
+
* SDK subprocess instead of just breaking out of the `for await` loop.
|
|
364
|
+
*
|
|
365
|
+
* Without `close()`, a consumer that `break`s out of the iterator leaves
|
|
366
|
+
* the SDK free to continue executing queued MCP tool calls (e.g.
|
|
367
|
+
* `execute_sql`). Those "ghost" calls hit trace_processor after the
|
|
368
|
+
* session logger has closed, producing orphan errors no one handles.
|
|
369
|
+
*/
|
|
370
|
+
function sdkQueryWithRetry(params, options = {}) {
|
|
371
|
+
const { maxRetries = 2, baseDelayMs = 2000, emitUpdate, outputLanguage = (0, claudeConfig_1.loadClaudeConfig)().outputLanguage } = options;
|
|
372
|
+
const queryOptions = params.options ?? {};
|
|
373
|
+
const binaryOpt = (0, claudeConfig_1.getSdkBinaryOption)(queryOptions.env);
|
|
374
|
+
const mergedParams = binaryOpt.pathToClaudeCodeExecutable
|
|
375
|
+
? { ...params, options: { ...queryOptions, ...binaryOpt } }
|
|
376
|
+
: params;
|
|
377
|
+
// Tracks the Query instance currently being iterated so `close()` can
|
|
378
|
+
// forward termination to the underlying SDK subprocess across retries.
|
|
379
|
+
let currentQuery;
|
|
380
|
+
let closed = false;
|
|
381
|
+
// We can't directly retry an async iterable, so we use a generator wrapper.
|
|
382
|
+
// On the first call to next(), we attempt sdkQuery. If it throws, we retry.
|
|
383
|
+
async function* retryableStream() {
|
|
384
|
+
let lastErr;
|
|
385
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
386
|
+
if (closed)
|
|
387
|
+
return;
|
|
388
|
+
try {
|
|
389
|
+
currentQuery = (0, claude_agent_sdk_1.query)(mergedParams);
|
|
390
|
+
// Yield all messages from the stream
|
|
391
|
+
for await (const msg of currentQuery) {
|
|
392
|
+
if (closed)
|
|
393
|
+
return;
|
|
394
|
+
yield msg;
|
|
395
|
+
}
|
|
396
|
+
return; // Success — exit generator
|
|
397
|
+
}
|
|
398
|
+
catch (err) {
|
|
399
|
+
lastErr = err;
|
|
400
|
+
// If the caller invoked close(), treat the resulting error as
|
|
401
|
+
// intentional termination rather than a retryable failure.
|
|
402
|
+
if (closed)
|
|
403
|
+
return;
|
|
404
|
+
if (isRetryableError(lastErr) && attempt < maxRetries) {
|
|
405
|
+
const delay = baseDelayMs * Math.pow(2, attempt);
|
|
406
|
+
console.warn(`[ClaudeRuntime] API error (attempt ${attempt + 1}/${maxRetries + 1}): ${lastErr.message}. Retrying in ${delay}ms...`);
|
|
407
|
+
emitUpdate?.({
|
|
408
|
+
type: 'progress',
|
|
409
|
+
content: {
|
|
410
|
+
phase: 'starting',
|
|
411
|
+
message: (0, outputLanguage_1.localize)(outputLanguage, `API 暂时不可用,${Math.round(delay / 1000)}s 后重试 (${attempt + 1}/${maxRetries})...`, `API is temporarily unavailable. Retrying in ${Math.round(delay / 1000)}s (${attempt + 1}/${maxRetries})...`),
|
|
412
|
+
},
|
|
413
|
+
timestamp: Date.now(),
|
|
414
|
+
});
|
|
415
|
+
await sleep(delay);
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
throw lastErr; // Non-retryable or max retries exceeded
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
if (lastErr)
|
|
422
|
+
throw lastErr;
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
stream: retryableStream(),
|
|
426
|
+
close: () => {
|
|
427
|
+
if (closed)
|
|
428
|
+
return; // Idempotent — safe to call from timeout handler AND finally.
|
|
429
|
+
closed = true;
|
|
430
|
+
try {
|
|
431
|
+
currentQuery?.close();
|
|
432
|
+
}
|
|
433
|
+
catch (err) {
|
|
434
|
+
console.warn('[ClaudeRuntime] sdkQueryWithRetry close() failed (non-fatal):', err.message);
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Claude Agent SDK runtime for SmartPerfetto.
|
|
441
|
+
* Claude SDK orchestrator implementation behind the shared IOrchestrator contract.
|
|
442
|
+
* Implements the same EventEmitter + analyze() interface as AgentRuntime.
|
|
443
|
+
*/
|
|
444
|
+
class ClaudeRuntime extends events_1.EventEmitter {
|
|
445
|
+
constructor(traceProcessorService, config) {
|
|
446
|
+
super();
|
|
447
|
+
/** Cache architecture detection results per traceId (deterministic per trace). */
|
|
448
|
+
this.architectureCache = new Map();
|
|
449
|
+
/** Cache vendor detection results per traceId (deterministic per trace). */
|
|
450
|
+
this.vendorCache = new Map();
|
|
451
|
+
/** Cache trace completeness probe results per traceId (deterministic per trace). */
|
|
452
|
+
this.completenessCache = new Map();
|
|
453
|
+
/** Per-session artifact stores — persist across turns within a session. */
|
|
454
|
+
this.artifactStores = new Map();
|
|
455
|
+
/** Per-session analysis notes — persist across turns within a session. */
|
|
456
|
+
this.sessionNotes = new Map();
|
|
457
|
+
/** Per-session SQL error tracking for error-fix pair learning. */
|
|
458
|
+
this.sessionSqlErrors = new Map();
|
|
459
|
+
/** Per-session analysis plans for plan adherence tracking. */
|
|
460
|
+
this.sessionPlans = new Map();
|
|
461
|
+
/** Per-session hypotheses for hypothesis-verify cycle (P0-G4). */
|
|
462
|
+
this.sessionHypotheses = new Map();
|
|
463
|
+
/** Per-session uncertainty flags for non-blocking human interaction (P1-G1). */
|
|
464
|
+
this.sessionUncertaintyFlags = new Map();
|
|
465
|
+
/** Guard against concurrent analyze() calls for the same session. */
|
|
466
|
+
this.activeAnalyses = new Set();
|
|
467
|
+
this.traceProcessorService = traceProcessorService;
|
|
468
|
+
this.config = (0, claudeConfig_1.loadClaudeConfig)(config);
|
|
469
|
+
this.sessionMap = loadSessionMapForCurrentMode();
|
|
470
|
+
}
|
|
471
|
+
/** Restore a previously persisted SDK session mapping (e.g., after server restart). */
|
|
472
|
+
restoreSessionMapping(smartPerfettoSessionId, sdkSessionId) {
|
|
473
|
+
this.sessionMap.set(smartPerfettoSessionId, { sdkSessionId, updatedAt: Date.now(), mode: 'full' });
|
|
474
|
+
}
|
|
475
|
+
/** Restore a cached architecture detection result (e.g., from session persistence). */
|
|
476
|
+
restoreArchitectureCache(traceId, architecture) {
|
|
477
|
+
this.architectureCache.set(traceId, architecture);
|
|
478
|
+
}
|
|
479
|
+
/** Get cached architecture for a traceId (used for persistence). */
|
|
480
|
+
getCachedArchitecture(traceId) {
|
|
481
|
+
return this.architectureCache.get(traceId);
|
|
482
|
+
}
|
|
483
|
+
/** Get SDK session ID for persistence. */
|
|
484
|
+
getSdkSessionId(smartPerfettoSessionId, referenceTraceId) {
|
|
485
|
+
const entry = this.sessionMap.get(this.buildSessionMapKey(smartPerfettoSessionId, referenceTraceId));
|
|
486
|
+
return isFreshFullSdkSessionEntry(entry) ? entry.sdkSessionId : undefined;
|
|
487
|
+
}
|
|
488
|
+
buildSessionMapKey(sessionId, referenceTraceId) {
|
|
489
|
+
return referenceTraceId ? `${sessionId}:ref:${referenceTraceId}` : sessionId;
|
|
490
|
+
}
|
|
491
|
+
persistSessionMapEntry(sessionId, traceId, sessionMapKey, entry, options) {
|
|
492
|
+
if (legacySessionMapWritesEnabled()) {
|
|
493
|
+
savePersistedSessionMap(this.sessionMap);
|
|
494
|
+
}
|
|
495
|
+
if (!enterpriseSessionMapDbWritesEnabled())
|
|
496
|
+
return;
|
|
497
|
+
if (!options.tenantId || !options.workspaceId) {
|
|
498
|
+
console.warn('[ClaudeRuntime] Enterprise session map persistence skipped: missing tenant/workspace scope');
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
try {
|
|
502
|
+
(0, runtimeSnapshotStore_1.saveClaudeSessionMapToRuntimeSnapshots)({
|
|
503
|
+
tenantId: options.tenantId,
|
|
504
|
+
workspaceId: options.workspaceId,
|
|
505
|
+
userId: options.userId,
|
|
506
|
+
sessionId,
|
|
507
|
+
runId: options.runId,
|
|
508
|
+
traceId,
|
|
509
|
+
}, sessionMapKey, entry);
|
|
510
|
+
}
|
|
511
|
+
catch (err) {
|
|
512
|
+
console.warn('[ClaudeRuntime] Failed to persist session map to runtime_snapshots:', err.message);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
rememberFullSdkSessionMapping(sessionId, traceId, sessionMapKey, sdkSessionId, options) {
|
|
516
|
+
const entry = { sdkSessionId, updatedAt: Date.now(), mode: 'full' };
|
|
517
|
+
this.sessionMap.set(sessionMapKey, entry);
|
|
518
|
+
this.persistSessionMapEntry(sessionId, traceId, sessionMapKey, entry, options);
|
|
519
|
+
}
|
|
520
|
+
forgetSdkSessionMapping(sessionId, sessionMapKey, reason, options = {}) {
|
|
521
|
+
const removed = this.sessionMap.delete(sessionMapKey);
|
|
522
|
+
if (legacySessionMapWritesEnabled()) {
|
|
523
|
+
savePersistedSessionMapSync(this.sessionMap);
|
|
524
|
+
}
|
|
525
|
+
if (enterpriseSessionMapDbWritesEnabled()) {
|
|
526
|
+
try {
|
|
527
|
+
(0, runtimeSnapshotStore_1.deleteClaudeSessionMapRuntimeSnapshot)(sessionId, sessionMapKey, providerScopeFromOptions(options));
|
|
528
|
+
}
|
|
529
|
+
catch (err) {
|
|
530
|
+
console.warn('[ClaudeRuntime] Failed to delete stale SDK session map from runtime_snapshots:', err.message);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
console.warn(`[ClaudeRuntime] Discarded stale SDK session mapping for ${sessionMapKey}` +
|
|
534
|
+
`${removed ? '' : ' (not present in memory)'}: ${reason}`);
|
|
535
|
+
}
|
|
536
|
+
async retryWithoutSdkResume(params) {
|
|
537
|
+
this.forgetSdkSessionMapping(params.sessionId, params.sessionMapKey, params.errorMessage, params.options);
|
|
538
|
+
this.emitUpdate({
|
|
539
|
+
type: 'degraded',
|
|
540
|
+
content: {
|
|
541
|
+
module: 'claudeRuntime',
|
|
542
|
+
fallback: 'fresh_sdk_session_after_missing_conversation',
|
|
543
|
+
error: 'missing_sdk_conversation',
|
|
544
|
+
mode: params.mode,
|
|
545
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, 'Claude 远端对话已不可用,已清理旧会话并使用本地持久化上下文重新发起分析...', 'Claude remote conversation is no longer available. Retrying with persisted local context in a fresh SDK session...'),
|
|
546
|
+
},
|
|
547
|
+
timestamp: Date.now(),
|
|
548
|
+
});
|
|
549
|
+
this.activeAnalyses.delete(params.sessionId);
|
|
550
|
+
strategyFingerprint_1.runSnapshots.release(params.sessionId);
|
|
551
|
+
return this.analyze(params.query, params.sessionId, params.traceId, params.options);
|
|
552
|
+
}
|
|
553
|
+
removeSessionMapEntries(sessionId) {
|
|
554
|
+
const referencePrefix = `${sessionId}:ref:`;
|
|
555
|
+
for (const key of [...this.sessionMap.keys()]) {
|
|
556
|
+
if (key === sessionId || key.startsWith(referencePrefix)) {
|
|
557
|
+
this.sessionMap.delete(key);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
async analyze(query, sessionId, traceId, options = {}) {
|
|
562
|
+
// Prevent concurrent analyze() calls for the same session
|
|
563
|
+
if (this.activeAnalyses.has(sessionId)) {
|
|
564
|
+
throw new Error(`Analysis already in progress for session ${sessionId}`);
|
|
565
|
+
}
|
|
566
|
+
this.activeAnalyses.add(sessionId);
|
|
567
|
+
const startTime = Date.now();
|
|
568
|
+
const allFindings = [];
|
|
569
|
+
let conclusionText = '';
|
|
570
|
+
let sdkSessionId;
|
|
571
|
+
let rounds = 0;
|
|
572
|
+
let delegatedRetry = false;
|
|
573
|
+
const metricsCollector = new agentMetrics_1.AgentMetricsCollector(sessionId);
|
|
574
|
+
try {
|
|
575
|
+
// Phase 0: Complexity classification — runs in parallel with early context prep
|
|
576
|
+
const sessionContext = enhancedSessionContext_1.sessionContextManager.getOrCreate(sessionId, traceId);
|
|
577
|
+
const previousTurns = sessionContext.getAllTurns?.() || [];
|
|
578
|
+
const sceneType = (0, sceneClassifier_1.classifyScene)(query);
|
|
579
|
+
// Freeze the strategy version for the duration of this analyze() call so
|
|
580
|
+
// a hot-reload mid-flight can't split-brain the agent's reasoning.
|
|
581
|
+
strategyFingerprint_1.runSnapshots.capture(sessionId, sceneType);
|
|
582
|
+
const classifierInput = {
|
|
583
|
+
query,
|
|
584
|
+
sceneType,
|
|
585
|
+
hasSelectionContext: !!options.selectionContext,
|
|
586
|
+
selectionContext: options.selectionContext,
|
|
587
|
+
hasReferenceTrace: !!options.referenceTraceId,
|
|
588
|
+
// Only count findings from full (non-simple) turns as "existing findings" for drill-down detection
|
|
589
|
+
hasExistingFindings: previousTurns.some(t => t.intent?.complexity !== 'simple' && t.findings?.length > 0),
|
|
590
|
+
// Distinguish: only full analysis turns trigger multi-turn continuity (not prior quick turns)
|
|
591
|
+
hasPriorFullAnalysis: previousTurns.some(t => t.intent?.complexity !== 'simple'),
|
|
592
|
+
};
|
|
593
|
+
const cachedArch = this.architectureCache.get(traceId);
|
|
594
|
+
// Focus detection runs for every path — kick it off once and let the classifier
|
|
595
|
+
// (if needed) share the wait. Explicit 'fast'/'full' skips the classifier entirely.
|
|
596
|
+
const explicitMode = options.analysisMode;
|
|
597
|
+
const focusPromise = (0, focusAppDetector_1.detectFocusApps)(this.traceProcessorService, traceId).catch((err) => {
|
|
598
|
+
console.warn('[ClaudeRuntime] Focus app detection failed (graceful):', err.message);
|
|
599
|
+
return { apps: [], primaryApp: undefined, method: 'none' };
|
|
600
|
+
});
|
|
601
|
+
const providerScope = providerScopeFromOptions(options);
|
|
602
|
+
const runtimeConfig = (0, claudeConfig_1.resolveRuntimeConfig)(this.config, options.providerId, providerScope);
|
|
603
|
+
let queryComplexity;
|
|
604
|
+
let classifierSource;
|
|
605
|
+
let classifierReason;
|
|
606
|
+
if (explicitMode === 'fast' || explicitMode === 'full') {
|
|
607
|
+
queryComplexity = explicitMode === 'fast' ? 'quick' : 'full';
|
|
608
|
+
classifierSource = 'user_explicit';
|
|
609
|
+
classifierReason = `user requested ${explicitMode}`;
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
const classifierResult = await (0, queryComplexityClassifier_1.classifyQueryComplexity)(classifierInput, runtimeConfig);
|
|
613
|
+
queryComplexity = classifierResult.complexity;
|
|
614
|
+
classifierSource = classifierResult.source;
|
|
615
|
+
classifierReason = classifierResult.reason;
|
|
616
|
+
}
|
|
617
|
+
const focusResult = await focusPromise;
|
|
618
|
+
const displayMode = explicitMode ?? 'auto';
|
|
619
|
+
console.log(`[ClaudeRuntime] Query complexity: ${queryComplexity} ` +
|
|
620
|
+
`(mode: ${displayMode}, source: ${classifierSource}, reason: ${classifierReason})`);
|
|
621
|
+
metricsCollector.recordAnalysisMode(displayMode, classifierSource);
|
|
622
|
+
// Quick path: lightweight analysis for simple factual queries
|
|
623
|
+
if (queryComplexity === 'quick') {
|
|
624
|
+
return await this.analyzeQuick(query, sessionId, traceId, options, {
|
|
625
|
+
sceneType,
|
|
626
|
+
focusResult,
|
|
627
|
+
cachedArch,
|
|
628
|
+
sessionContext,
|
|
629
|
+
previousTurns,
|
|
630
|
+
metricsCollector,
|
|
631
|
+
startTime,
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
// Full path: original comprehensive analysis pipeline
|
|
635
|
+
const ctx = await this.prepareAnalysisContext(query, sessionId, traceId, options, {
|
|
636
|
+
focusResult,
|
|
637
|
+
sessionContext,
|
|
638
|
+
previousTurns,
|
|
639
|
+
sceneType,
|
|
640
|
+
});
|
|
641
|
+
const { handleMessage: bridge, getAccumulatedAnswer } = (0, claudeSseBridge_1.createSseBridge)((update) => {
|
|
642
|
+
this.emitUpdate(update);
|
|
643
|
+
if (update.type === 'agent_response' && update.content?.result) {
|
|
644
|
+
try {
|
|
645
|
+
const parsed = typeof update.content.result === 'string'
|
|
646
|
+
? JSON.parse(update.content.result)
|
|
647
|
+
: update.content.result;
|
|
648
|
+
if (parsed?.success && parsed?.skillId) {
|
|
649
|
+
allFindings.push((0, claudeFindingExtractor_1.extractFindingsFromSkillResult)(parsed));
|
|
650
|
+
}
|
|
651
|
+
if (parsed?.success && parsed?.displayResults) {
|
|
652
|
+
this.captureEntitiesFromSkillDisplayResults(parsed.displayResults, ctx.entityStore);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
// Not a skill result — ignore
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}, this.config.outputLanguage);
|
|
660
|
+
this.emitUpdate({
|
|
661
|
+
type: 'progress',
|
|
662
|
+
content: {
|
|
663
|
+
phase: 'starting',
|
|
664
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `使用 ${runtimeConfig.model} 开始分析 (effort: ${ctx.effectiveEffort})...`, `Starting analysis with ${runtimeConfig.model} (effort: ${ctx.effectiveEffort})...`),
|
|
665
|
+
},
|
|
666
|
+
timestamp: Date.now(),
|
|
667
|
+
});
|
|
668
|
+
// Reuse composite key from prepareAnalysisContext for comparison mode session identity isolation
|
|
669
|
+
const existingSessionMapEntry = this.sessionMap.get(ctx.sessionMapKey);
|
|
670
|
+
const existingSdkSessionId = isFreshFullSdkSessionEntry(existingSessionMapEntry)
|
|
671
|
+
? existingSessionMapEntry.sdkSessionId
|
|
672
|
+
: undefined;
|
|
673
|
+
let missingSdkConversationError;
|
|
674
|
+
if (existingSessionMapEntry && existingSdkSessionId && enterpriseSessionMapDbWritesEnabled()) {
|
|
675
|
+
this.persistSessionMapEntry(sessionId, traceId, ctx.sessionMapKey, existingSessionMapEntry, options);
|
|
676
|
+
}
|
|
677
|
+
// When resuming an SDK session, systemPrompt is ignored by the SDK (mutually exclusive).
|
|
678
|
+
// Prepend selectionContext directly into the prompt so the AI sees it in the conversation.
|
|
679
|
+
let effectivePrompt = query;
|
|
680
|
+
if (existingSdkSessionId && options.selectionContext) {
|
|
681
|
+
const selSection = (0, claudeSystemPrompt_1.buildSelectionContextSection)(options.selectionContext);
|
|
682
|
+
if (selSection) {
|
|
683
|
+
effectivePrompt = `${selSection}\n\n${query}`;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
// Prepend pre-queried trace data so the AI has all context without spending turns on SQL
|
|
687
|
+
if (options.traceContext && options.traceContext.length > 0) {
|
|
688
|
+
const traceSection = formatTraceContext(options.traceContext, this.config.outputLanguage);
|
|
689
|
+
effectivePrompt = `${traceSection}\n\n${effectivePrompt}`;
|
|
690
|
+
}
|
|
691
|
+
const sdkEnv = (0, claudeConfig_1.createSdkEnv)(options.providerId, providerScope);
|
|
692
|
+
const { stream, close: closeSdk } = sdkQueryWithRetry({
|
|
693
|
+
prompt: effectivePrompt,
|
|
694
|
+
options: {
|
|
695
|
+
model: runtimeConfig.model,
|
|
696
|
+
maxTurns: runtimeConfig.maxTurns,
|
|
697
|
+
systemPrompt: ctx.systemPrompt,
|
|
698
|
+
mcpServers: { smartperfetto: ctx.mcpServer },
|
|
699
|
+
includePartialMessages: true,
|
|
700
|
+
permissionMode: 'bypassPermissions',
|
|
701
|
+
allowDangerouslySkipPermissions: true,
|
|
702
|
+
cwd: runtimeConfig.cwd,
|
|
703
|
+
effort: ctx.effectiveEffort,
|
|
704
|
+
allowedTools: ctx.allowedTools,
|
|
705
|
+
env: sdkEnv,
|
|
706
|
+
stderr: (data) => {
|
|
707
|
+
console.warn(`[ClaudeRuntime] SDK stderr [${sessionId}]: ${data.trimEnd()}`);
|
|
708
|
+
},
|
|
709
|
+
...(runtimeConfig.maxBudgetUsd ? { maxBudgetUsd: runtimeConfig.maxBudgetUsd } : {}),
|
|
710
|
+
...(existingSdkSessionId ? { resume: existingSdkSessionId } : {}),
|
|
711
|
+
...(ctx.agents ? { agents: ctx.agents } : {}),
|
|
712
|
+
},
|
|
713
|
+
}, {
|
|
714
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
715
|
+
outputLanguage: this.config.outputLanguage,
|
|
716
|
+
});
|
|
717
|
+
let finalResult;
|
|
718
|
+
let terminationReason;
|
|
719
|
+
let terminationMessage;
|
|
720
|
+
// Safety timeout with stream cancellation via Promise.race.
|
|
721
|
+
// Per-turn budget is env-configurable (CLAUDE_FULL_PER_TURN_MS, default 60s) so slower
|
|
722
|
+
// LLMs (DeepSeek / Ollama / GLM) have room per turn without false timeouts.
|
|
723
|
+
// Scrolling deep-drill (hypothesis + SQL + knowledge + conclusion) still needs ~6-8 min.
|
|
724
|
+
const timeoutMs = (runtimeConfig.maxTurns || 15) * runtimeConfig.fullPathPerTurnMs;
|
|
725
|
+
let timedOut = false;
|
|
726
|
+
// Sub-agent timeout tracking — stop tasks that exceed subAgentTimeoutMs
|
|
727
|
+
const activeSubAgentTimers = new Map();
|
|
728
|
+
const subAgentTimeoutMs = runtimeConfig.subAgentTimeoutMs;
|
|
729
|
+
// P2-1: Turn-level autonomy watchdog — detect repetitive tool failures
|
|
730
|
+
// P1-G2: Per-tool tracking — each tool gets its own failure tracking
|
|
731
|
+
const toolCallHistory = [];
|
|
732
|
+
const WATCHDOG_WINDOW = 3; // consecutive same-tool failures to trigger warning
|
|
733
|
+
const watchdogFiredTools = new Set(); // tracks which tools have triggered warnings
|
|
734
|
+
// P0-G16: Circuit breaker — overall tool call failure rate monitoring
|
|
735
|
+
let circuitBreakerFires = 0;
|
|
736
|
+
const MAX_CIRCUIT_BREAKER_FIRES = 2;
|
|
737
|
+
const CIRCUIT_BREAKER_WINDOW = 5;
|
|
738
|
+
const CIRCUIT_BREAKER_THRESHOLD = 0.6; // 60% failure rate
|
|
739
|
+
let lastCircuitBreakerFireIdx = -Infinity;
|
|
740
|
+
// P1: Negative memory — collect failed approaches for cross-session learning
|
|
741
|
+
const failedApproaches = [];
|
|
742
|
+
/** Track whether SDK auto-compact has fired during this turn.
|
|
743
|
+
* When true, the SDK has summarized prior conversation history,
|
|
744
|
+
* potentially losing early-turn details. We log this for diagnostics. */
|
|
745
|
+
let sdkCompactDetected = false;
|
|
746
|
+
const turnMetricsList = [];
|
|
747
|
+
let currentTurnMetrics = null;
|
|
748
|
+
let turnCounter = 0;
|
|
749
|
+
let firstTokenReceived = false;
|
|
750
|
+
// Phase 3-3 of v2.1 (monitor-only): track when the running conversation
|
|
751
|
+
// crosses the pre-rot threshold so prod can quantify how often we *would*
|
|
752
|
+
// have benefited from an interrupt+resume cycle. The actual interrupt+
|
|
753
|
+
// resume orchestration is intentionally not wired yet — see
|
|
754
|
+
// `docs/archive/context-engineering/v2.1-phase-3-active-compact-design.md`. Disable by setting
|
|
755
|
+
// `CLAUDE_PRECOMPACT_WARN_ENABLED=false`.
|
|
756
|
+
let preCompactWarned = false;
|
|
757
|
+
const preCompactWarnEnabled = process.env.CLAUDE_PRECOMPACT_WARN_ENABLED !== 'false';
|
|
758
|
+
const emitUpdate = this.emitUpdate.bind(this);
|
|
759
|
+
const outputLanguage = this.config.outputLanguage;
|
|
760
|
+
function checkContextPressure() {
|
|
761
|
+
if (!preCompactWarnEnabled || preCompactWarned)
|
|
762
|
+
return;
|
|
763
|
+
const cumulativeUncached = turnMetricsList.reduce((acc, t) => acc + (t.inputTokens ?? 0), 0);
|
|
764
|
+
const cumulativeCacheCreation = turnMetricsList.reduce((acc, t) => acc + (t.cacheCreationTokens ?? 0), 0);
|
|
765
|
+
const cumulativePayloadBytes = turnMetricsList.reduce((acc, t) => acc + t.toolResultPayloadBytes, 0);
|
|
766
|
+
const decision = (0, contextTokenMeter_1.evaluateThreshold)({
|
|
767
|
+
uncachedInputTokens: cumulativeUncached,
|
|
768
|
+
cacheCreationInputTokens: cumulativeCacheCreation,
|
|
769
|
+
recentToolPayloadBytes: cumulativePayloadBytes,
|
|
770
|
+
});
|
|
771
|
+
if (decision.shouldPrecompact) {
|
|
772
|
+
preCompactWarned = true;
|
|
773
|
+
console.warn(`[ClaudeRuntime] Session ${sessionId}: pre-rot threshold crossed ` +
|
|
774
|
+
`(pressure=${decision.pressureTokens} / ${decision.thresholdTokens} tokens, ratio=${decision.pressureRatio.toFixed(2)}). ` +
|
|
775
|
+
`Phase 3-3 will eventually interrupt+resume here; for now we only log.`);
|
|
776
|
+
emitUpdate({
|
|
777
|
+
type: 'progress',
|
|
778
|
+
content: {
|
|
779
|
+
phase: 'analyzing',
|
|
780
|
+
message: (0, outputLanguage_1.localize)(outputLanguage, `⚠️ 接近上下文上限(已用 ${(decision.pressureRatio * 100).toFixed(0)}%),后续轮次可能因压缩丢失细节`, `⚠️ Context window is close to its limit (${(decision.pressureRatio * 100).toFixed(0)}% used); later turns may lose details after compaction`),
|
|
781
|
+
},
|
|
782
|
+
timestamp: Date.now(),
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
function findToolCallForResult(toolUseId) {
|
|
787
|
+
if (toolUseId) {
|
|
788
|
+
for (let i = toolCallHistory.length - 1; i >= 0; i--) {
|
|
789
|
+
if (toolCallHistory[i].id === toolUseId)
|
|
790
|
+
return toolCallHistory[i];
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
for (let i = toolCallHistory.length - 1; i >= 0; i--) {
|
|
794
|
+
if (!toolCallHistory[i].completed)
|
|
795
|
+
return toolCallHistory[i];
|
|
796
|
+
}
|
|
797
|
+
return toolCallHistory[toolCallHistory.length - 1];
|
|
798
|
+
}
|
|
799
|
+
function finalizeTurnMetrics() {
|
|
800
|
+
if (currentTurnMetrics) {
|
|
801
|
+
currentTurnMetrics.durationMs = Date.now() - currentTurnMetrics.startMs;
|
|
802
|
+
turnMetricsList.push(currentTurnMetrics);
|
|
803
|
+
checkContextPressure();
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
const processStream = async () => {
|
|
807
|
+
for await (const msg of stream) {
|
|
808
|
+
if (timedOut)
|
|
809
|
+
break; // P0-1: Actually cancel stream on timeout
|
|
810
|
+
// Detect SDK auto-compact boundary — conversation history was summarized
|
|
811
|
+
if (msg.type === 'system' && msg.subtype === 'compact_boundary') {
|
|
812
|
+
sdkCompactDetected = true;
|
|
813
|
+
console.warn(`[ClaudeRuntime] SDK auto-compact detected for session ${sessionId} — prior turns summarized`);
|
|
814
|
+
}
|
|
815
|
+
if (msg.session_id && !sdkSessionId) {
|
|
816
|
+
sdkSessionId = msg.session_id;
|
|
817
|
+
this.rememberFullSdkSessionMapping(sessionId, traceId, ctx.sessionMapKey, sdkSessionId, options);
|
|
818
|
+
}
|
|
819
|
+
const sdkResultError = getSdkResultErrorMessage(msg);
|
|
820
|
+
if (sdkResultError && existingSdkSessionId && isMissingSdkConversationError(sdkResultError)) {
|
|
821
|
+
if (msg.type === 'result') {
|
|
822
|
+
finalizeTurnMetrics();
|
|
823
|
+
currentTurnMetrics = null;
|
|
824
|
+
metricsCollector.recordSdkUsage({
|
|
825
|
+
usage: msg.usage,
|
|
826
|
+
modelUsage: msg.modelUsage,
|
|
827
|
+
total_cost_usd: msg.total_cost_usd,
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
missingSdkConversationError = sdkResultError;
|
|
831
|
+
continue;
|
|
832
|
+
}
|
|
833
|
+
// Track sub-agent lifecycle for per-agent timeouts
|
|
834
|
+
if (msg.type === 'system' && msg.subtype === 'task_started') {
|
|
835
|
+
const taskId = msg.task_id;
|
|
836
|
+
if (taskId && subAgentTimeoutMs > 0) {
|
|
837
|
+
const timer = setTimeout(() => {
|
|
838
|
+
console.warn(`[ClaudeRuntime] Sub-agent timeout: stopping task ${taskId} after ${subAgentTimeoutMs / 1000}s`);
|
|
839
|
+
activeSubAgentTimers.delete(taskId);
|
|
840
|
+
if (typeof stream.stopTask === 'function') {
|
|
841
|
+
stream.stopTask(taskId).catch((err) => {
|
|
842
|
+
console.warn(`[ClaudeRuntime] Failed to stop sub-agent task ${taskId}:`, err.message);
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
// P1-6: Record timeout as a finding so it's reflected in confidence
|
|
846
|
+
allFindings.push([{
|
|
847
|
+
id: `sub-agent-timeout-${taskId}`,
|
|
848
|
+
title: (0, outputLanguage_1.localize)(this.config.outputLanguage, '子代理超时', 'Sub-agent timeout'),
|
|
849
|
+
severity: 'medium',
|
|
850
|
+
category: 'sub-agent',
|
|
851
|
+
description: (0, outputLanguage_1.localize)(this.config.outputLanguage, `子代理 ${taskId} 超时 (${subAgentTimeoutMs / 1000}s),分析可能不完整`, `Sub-agent ${taskId} timed out (${subAgentTimeoutMs / 1000}s); the analysis may be incomplete`),
|
|
852
|
+
confidence: 0.3,
|
|
853
|
+
}]);
|
|
854
|
+
this.emitUpdate({
|
|
855
|
+
type: 'progress',
|
|
856
|
+
content: {
|
|
857
|
+
phase: 'analyzing',
|
|
858
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `子代理超时 (${subAgentTimeoutMs / 1000}s),已停止`, `Sub-agent timed out (${subAgentTimeoutMs / 1000}s) and was stopped`),
|
|
859
|
+
},
|
|
860
|
+
timestamp: Date.now(),
|
|
861
|
+
});
|
|
862
|
+
}, subAgentTimeoutMs);
|
|
863
|
+
activeSubAgentTimers.set(taskId, timer);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
if (msg.type === 'system' && msg.subtype === 'task_notification') {
|
|
867
|
+
const taskId = msg.task_id;
|
|
868
|
+
if (taskId) {
|
|
869
|
+
const timer = activeSubAgentTimers.get(taskId);
|
|
870
|
+
if (timer) {
|
|
871
|
+
clearTimeout(timer);
|
|
872
|
+
activeSubAgentTimers.delete(taskId);
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
// P1-5: Extract findings from sub-agent completion summaries.
|
|
876
|
+
// Without this, sub-agent evidence is only in the conclusion text
|
|
877
|
+
// and not merged into allFindings for confidence estimation.
|
|
878
|
+
const summary = msg.summary || '';
|
|
879
|
+
const status = msg.status || 'completed';
|
|
880
|
+
if (status === 'completed' && summary) {
|
|
881
|
+
allFindings.push((0, claudeFindingExtractor_1.extractFindingsFromText)(summary));
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
// Bridge SDK messages to SSE events
|
|
885
|
+
try {
|
|
886
|
+
bridge(msg);
|
|
887
|
+
}
|
|
888
|
+
catch (bridgeErr) {
|
|
889
|
+
console.warn('[ClaudeRuntime] SSE bridge error (non-fatal):', bridgeErr.message);
|
|
890
|
+
}
|
|
891
|
+
// ── Per-turn metrics: track stream_event signals ──
|
|
892
|
+
if (msg.type === 'stream_event' && currentTurnMetrics) {
|
|
893
|
+
const event = msg.event;
|
|
894
|
+
// First token latency
|
|
895
|
+
if (!firstTokenReceived &&
|
|
896
|
+
event?.type === 'content_block_delta' &&
|
|
897
|
+
(event.delta?.type === 'text_delta' || event.delta?.type === 'tool_use')) {
|
|
898
|
+
firstTokenReceived = true;
|
|
899
|
+
currentTurnMetrics.firstTokenLatencyMs = Date.now() - currentTurnMetrics.startMs;
|
|
900
|
+
}
|
|
901
|
+
// Extended thinking detection
|
|
902
|
+
if (event?.type === 'content_block_start' && event.content_block?.type === 'thinking') {
|
|
903
|
+
currentTurnMetrics.hasExtendedThinking = true;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
// assistant message = new turn starts; finalize previous turn + watchdog tracking
|
|
907
|
+
if (msg.type === 'assistant' && Array.isArray(msg.message?.content)) {
|
|
908
|
+
finalizeTurnMetrics();
|
|
909
|
+
turnCounter++;
|
|
910
|
+
firstTokenReceived = false;
|
|
911
|
+
const toolNames = [];
|
|
912
|
+
for (const block of msg.message.content) {
|
|
913
|
+
if (block.type === 'tool_use') {
|
|
914
|
+
toolNames.push(block.name.replace(claudeMcpServer_1.MCP_NAME_PREFIX, ''));
|
|
915
|
+
// P2-1: Watchdog — track tool calls for repetitive failure detection
|
|
916
|
+
toolCallHistory.push({
|
|
917
|
+
id: block.id,
|
|
918
|
+
name: block.name,
|
|
919
|
+
success: true,
|
|
920
|
+
startTime: Date.now(),
|
|
921
|
+
input: block.input,
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
currentTurnMetrics = {
|
|
926
|
+
turnIndex: turnCounter,
|
|
927
|
+
startMs: Date.now(),
|
|
928
|
+
toolCalls: toolNames,
|
|
929
|
+
toolResultPayloadBytes: 0,
|
|
930
|
+
hasExtendedThinking: false,
|
|
931
|
+
};
|
|
932
|
+
}
|
|
933
|
+
if (msg.type === 'user' && msg.tool_use_result !== undefined) {
|
|
934
|
+
const resultBlocks = (0, claudeSseBridge_1.extractSdkToolResultBlocks)(msg);
|
|
935
|
+
const observedResults = resultBlocks.length > 0
|
|
936
|
+
? resultBlocks
|
|
937
|
+
: [{ result: msg.tool_use_result, isError: undefined, toolUseId: undefined }];
|
|
938
|
+
for (const observed of observedResults) {
|
|
939
|
+
const resultStr = (0, claudeSseBridge_1.stringifySdkToolResult)(observed.result);
|
|
940
|
+
// Per-turn metrics: track tool result payload size
|
|
941
|
+
if (currentTurnMetrics) {
|
|
942
|
+
currentTurnMetrics.toolResultPayloadBytes += Buffer.byteLength(resultStr, 'utf-8');
|
|
943
|
+
}
|
|
944
|
+
const isFailed = observed.isError === true ||
|
|
945
|
+
resultStr.includes('"success":false') ||
|
|
946
|
+
resultStr.includes('"isError":true');
|
|
947
|
+
const matchedTool = findToolCallForResult(observed.toolUseId);
|
|
948
|
+
if (matchedTool) {
|
|
949
|
+
matchedTool.success = !isFailed;
|
|
950
|
+
matchedTool.completed = true;
|
|
951
|
+
// Record tool execution in metrics collector (stream-observed timing)
|
|
952
|
+
const toolName = matchedTool.name.replace(claudeMcpServer_1.MCP_NAME_PREFIX, '');
|
|
953
|
+
const durationMs = matchedTool.startTime ? Date.now() - matchedTool.startTime : 0;
|
|
954
|
+
metricsCollector.recordToolFromStream(toolName, durationMs, !isFailed);
|
|
955
|
+
}
|
|
956
|
+
// Check for consecutive same-tool failures (P1-G2: per-tool tracking)
|
|
957
|
+
if (toolCallHistory.length >= WATCHDOG_WINDOW) {
|
|
958
|
+
const recent = toolCallHistory.slice(-WATCHDOG_WINDOW);
|
|
959
|
+
const allSameTool = recent.every(t => t.name === recent[0].name);
|
|
960
|
+
const allFailed = recent.every(t => !t.success);
|
|
961
|
+
const toolName = recent[0].name.replace(claudeMcpServer_1.MCP_NAME_PREFIX, '');
|
|
962
|
+
if (allSameTool && allFailed && !watchdogFiredTools.has(toolName)) {
|
|
963
|
+
watchdogFiredTools.add(toolName);
|
|
964
|
+
console.warn(`[ClaudeRuntime] Watchdog: ${WATCHDOG_WINDOW} consecutive failures for ${toolName}`);
|
|
965
|
+
// P1-2: Inject warning into next MCP tool result (Claude reads this)
|
|
966
|
+
ctx.watchdogWarning.current = (0, outputLanguage_1.localize)(this.config.outputLanguage, `${toolName} 已连续失败 ${WATCHDOG_WINDOW} 次。请切换分析策略:尝试不同的 SQL 查询、使用其他 skill、或调整参数。不要重复相同的失败操作。`, `${toolName} has failed ${WATCHDOG_WINDOW} times in a row. Switch analysis strategy: try a different SQL query, use another skill, or adjust parameters. Do not repeat the same failed action.`);
|
|
967
|
+
// P1: Record for negative memory
|
|
968
|
+
failedApproaches.push({
|
|
969
|
+
type: 'tool_failure',
|
|
970
|
+
approach: `连续调用 ${toolName} ${WATCHDOG_WINDOW} 次均失败`,
|
|
971
|
+
reason: '同一工具重复失败,需要切换策略',
|
|
972
|
+
});
|
|
973
|
+
this.emitUpdate({
|
|
974
|
+
type: 'progress',
|
|
975
|
+
content: {
|
|
976
|
+
phase: 'analyzing',
|
|
977
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `⚠ 检测到 ${toolName} 连续 ${WATCHDOG_WINDOW} 次失败,已注入策略切换指令`, `⚠ Detected ${WATCHDOG_WINDOW} consecutive failures for ${toolName}; injected a strategy-switch instruction`),
|
|
978
|
+
},
|
|
979
|
+
timestamp: Date.now(),
|
|
980
|
+
});
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
// Track tool call for plan adherence with phase matching (P0-1 + P1-1)
|
|
984
|
+
// P1-G5: Best-fit phase-tool matching — search all eligible phases, not just first
|
|
985
|
+
if (ctx.analysisPlan.current && matchedTool) {
|
|
986
|
+
const plan = ctx.analysisPlan.current;
|
|
987
|
+
const shortToolName = matchedTool.name.replace(claudeMcpServer_1.MCP_NAME_PREFIX, '');
|
|
988
|
+
const callSummary = (0, toolCallSummary_1.summarizeToolCallInput)(shortToolName, matchedTool.input);
|
|
989
|
+
const candidate = {
|
|
990
|
+
toolName: matchedTool.name,
|
|
991
|
+
timestamp: Date.now(),
|
|
992
|
+
...callSummary,
|
|
993
|
+
};
|
|
994
|
+
const toolReturnedPhaseId = extractPlanPhaseIdFromToolResult(resultStr);
|
|
995
|
+
let matchedPhaseId = toolReturnedPhaseId &&
|
|
996
|
+
plan.phases.some(p => p.id === toolReturnedPhaseId)
|
|
997
|
+
? toolReturnedPhaseId
|
|
998
|
+
: undefined;
|
|
999
|
+
// Priority: MCP-side semantic attribution first, then in_progress phase,
|
|
1000
|
+
// then any pending phase whose expectations match.
|
|
1001
|
+
if (!matchedPhaseId) {
|
|
1002
|
+
const activePhase = plan.phases.find(p => p.status === 'in_progress');
|
|
1003
|
+
if (activePhase && (0, types_1.phaseMatchesCall)(activePhase, candidate)) {
|
|
1004
|
+
matchedPhaseId = activePhase.id;
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
if (!matchedPhaseId) {
|
|
1008
|
+
const pendingMatch = plan.phases.find(p => p.status === 'pending' && (0, types_1.phaseMatchesCall)(p, candidate));
|
|
1009
|
+
matchedPhaseId = pendingMatch?.id;
|
|
1010
|
+
}
|
|
1011
|
+
plan.toolCallLog.push({ ...candidate, matchedPhaseId });
|
|
1012
|
+
// P2-8: Cap toolCallLog to prevent unbounded growth within a turn
|
|
1013
|
+
if (plan.toolCallLog.length > 100) {
|
|
1014
|
+
plan.toolCallLog.splice(0, plan.toolCallLog.length - 100);
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
// P0-G16: Circuit breaker — overall failure rate monitoring
|
|
1018
|
+
// Unlike watchdog (same-tool consecutive failures), this monitors aggregate health.
|
|
1019
|
+
// Fires when >60% of recent tool calls fail, regardless of which tools.
|
|
1020
|
+
// P1-G9: Circuit breaker can fire even with pending watchdog warning
|
|
1021
|
+
// (CB is higher priority — its "simplify scope" message overwrites per-tool warnings)
|
|
1022
|
+
if (circuitBreakerFires < MAX_CIRCUIT_BREAKER_FIRES
|
|
1023
|
+
&& toolCallHistory.length >= CIRCUIT_BREAKER_WINDOW
|
|
1024
|
+
&& toolCallHistory.length - lastCircuitBreakerFireIdx >= 3) {
|
|
1025
|
+
const recentWindow = toolCallHistory.slice(-CIRCUIT_BREAKER_WINDOW);
|
|
1026
|
+
const failCount = recentWindow.filter(t => !t.success).length;
|
|
1027
|
+
const failRate = failCount / recentWindow.length;
|
|
1028
|
+
if (failRate >= CIRCUIT_BREAKER_THRESHOLD) {
|
|
1029
|
+
circuitBreakerFires++;
|
|
1030
|
+
lastCircuitBreakerFireIdx = toolCallHistory.length;
|
|
1031
|
+
ctx.watchdogWarning.current = (0, outputLanguage_1.localize)(this.config.outputLanguage, `⚠️ 分析断路器触发:最近 ${CIRCUIT_BREAKER_WINDOW} 次工具调用中 ${failCount} 次失败 (${(failRate * 100).toFixed(0)}%)。` +
|
|
1032
|
+
'请:1) 简化分析范围,2) 使用更基础的查询,3) 如果数据不可用则基于已有证据出结论。不要继续尝试失败的操作。', `⚠️ Analysis circuit breaker triggered: ${failCount} of the last ${CIRCUIT_BREAKER_WINDOW} tool calls failed (${(failRate * 100).toFixed(0)}%). ` +
|
|
1033
|
+
'Simplify the scope, use more basic queries, and conclude from existing evidence if data is unavailable. Do not keep retrying failed actions.');
|
|
1034
|
+
failedApproaches.push({
|
|
1035
|
+
type: 'strategy_failure',
|
|
1036
|
+
approach: `整体工具调用失败率过高 (${(failRate * 100).toFixed(0)}%)`,
|
|
1037
|
+
reason: `最近 ${CIRCUIT_BREAKER_WINDOW} 次调用中 ${failCount} 次失败`,
|
|
1038
|
+
});
|
|
1039
|
+
this.emitUpdate({
|
|
1040
|
+
type: 'progress',
|
|
1041
|
+
content: {
|
|
1042
|
+
phase: 'analyzing',
|
|
1043
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `⚠ 分析断路器触发:工具调用失败率 ${(failRate * 100).toFixed(0)}%,建议简化分析范围`, `⚠ Analysis circuit breaker triggered: tool failure rate ${(failRate * 100).toFixed(0)}%; simplify the analysis scope`),
|
|
1044
|
+
},
|
|
1045
|
+
timestamp: Date.now(),
|
|
1046
|
+
});
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
// Per-turn metrics: capture usage from stream_event message_delta (per API turn)
|
|
1052
|
+
if (msg.type === 'stream_event' && currentTurnMetrics) {
|
|
1053
|
+
const event = msg.event;
|
|
1054
|
+
if (event?.type === 'message_delta' && event.usage) {
|
|
1055
|
+
currentTurnMetrics.outputTokens = event.usage.output_tokens;
|
|
1056
|
+
}
|
|
1057
|
+
if (event?.type === 'message_start' && event.message?.usage) {
|
|
1058
|
+
currentTurnMetrics.inputTokens = event.message.usage.input_tokens;
|
|
1059
|
+
currentTurnMetrics.cacheReadTokens = event.message.usage.cache_read_input_tokens;
|
|
1060
|
+
currentTurnMetrics.cacheCreationTokens = event.message.usage.cache_creation_input_tokens;
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
if (msg.type === 'result') {
|
|
1064
|
+
// Finalize last turn metrics before stream ends
|
|
1065
|
+
finalizeTurnMetrics();
|
|
1066
|
+
currentTurnMetrics = null;
|
|
1067
|
+
rounds = msg.num_turns || rounds;
|
|
1068
|
+
const resultSubtype = msg.subtype;
|
|
1069
|
+
if (resultSubtype === 'success') {
|
|
1070
|
+
finalResult = msg.result;
|
|
1071
|
+
}
|
|
1072
|
+
else if ((0, analysisTermination_1.isSdkMaxTurnsSubtype)(resultSubtype)) {
|
|
1073
|
+
terminationReason = analysisTermination_1.MAX_TURNS_TERMINATION_REASON;
|
|
1074
|
+
terminationMessage = (0, analysisTermination_1.buildMaxTurnsTerminationMessage)({
|
|
1075
|
+
mode: 'full',
|
|
1076
|
+
turns: rounds,
|
|
1077
|
+
maxTurns: this.config.maxTurns,
|
|
1078
|
+
outputLanguage: this.config.outputLanguage,
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
// Record SDK token usage and prompt cache metrics
|
|
1082
|
+
metricsCollector.recordSdkUsage({
|
|
1083
|
+
usage: msg.usage,
|
|
1084
|
+
modelUsage: msg.modelUsage,
|
|
1085
|
+
total_cost_usd: msg.total_cost_usd,
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
// Clean up any remaining sub-agent timers
|
|
1090
|
+
for (const timer of activeSubAgentTimers.values())
|
|
1091
|
+
clearTimeout(timer);
|
|
1092
|
+
activeSubAgentTimers.clear();
|
|
1093
|
+
// Log per-turn metrics for performance analysis
|
|
1094
|
+
if (turnMetricsList.length > 0) {
|
|
1095
|
+
const summary = {
|
|
1096
|
+
totalTurns: turnMetricsList.length,
|
|
1097
|
+
totalDurationMs: turnMetricsList.reduce((s, t) => s + (t.durationMs || 0), 0),
|
|
1098
|
+
totalToolCalls: turnMetricsList.reduce((s, t) => s + t.toolCalls.length, 0),
|
|
1099
|
+
totalPayloadBytes: turnMetricsList.reduce((s, t) => s + t.toolResultPayloadBytes, 0),
|
|
1100
|
+
turns: turnMetricsList.map(t => ({
|
|
1101
|
+
turn: t.turnIndex,
|
|
1102
|
+
durationMs: t.durationMs,
|
|
1103
|
+
firstTokenMs: t.firstTokenLatencyMs,
|
|
1104
|
+
tools: t.toolCalls,
|
|
1105
|
+
payloadBytes: t.toolResultPayloadBytes,
|
|
1106
|
+
thinking: t.hasExtendedThinking,
|
|
1107
|
+
inputTokens: t.inputTokens,
|
|
1108
|
+
outputTokens: t.outputTokens,
|
|
1109
|
+
cacheReadTokens: t.cacheReadTokens,
|
|
1110
|
+
cacheCreationTokens: t.cacheCreationTokens,
|
|
1111
|
+
})),
|
|
1112
|
+
};
|
|
1113
|
+
console.log(`[ClaudeRuntime] Turn metrics [${sessionId}]:`, JSON.stringify(summary));
|
|
1114
|
+
metricsCollector.recordTurnMetrics(summary);
|
|
1115
|
+
}
|
|
1116
|
+
};
|
|
1117
|
+
let safetyTimer;
|
|
1118
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
1119
|
+
safetyTimer = setTimeout(() => {
|
|
1120
|
+
timedOut = true;
|
|
1121
|
+
// Forcefully terminate the SDK subprocess — without this, queued
|
|
1122
|
+
// MCP tool calls (e.g. execute_sql) keep executing in the background
|
|
1123
|
+
// after the session logger has closed, producing orphan SQL errors.
|
|
1124
|
+
closeSdk();
|
|
1125
|
+
reject(new Error(`Analysis safety timeout after ${timeoutMs / 1000}s`));
|
|
1126
|
+
}, timeoutMs);
|
|
1127
|
+
});
|
|
1128
|
+
try {
|
|
1129
|
+
await Promise.race([processStream(), timeoutPromise]);
|
|
1130
|
+
}
|
|
1131
|
+
catch (err) {
|
|
1132
|
+
if (timedOut) {
|
|
1133
|
+
console.error('[ClaudeRuntime] Analysis safety timeout reached — SDK subprocess has been closed');
|
|
1134
|
+
this.emitUpdate({
|
|
1135
|
+
type: 'progress',
|
|
1136
|
+
content: {
|
|
1137
|
+
phase: 'concluding',
|
|
1138
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, '分析超时,正在生成已有结果的结论...', 'Analysis timed out. Generating a conclusion from the evidence collected so far...'),
|
|
1139
|
+
},
|
|
1140
|
+
timestamp: Date.now(),
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
1143
|
+
else if (existingSdkSessionId && isMissingSdkConversationError(err.message || '')) {
|
|
1144
|
+
missingSdkConversationError = err.message || 'No conversation found with SDK session';
|
|
1145
|
+
}
|
|
1146
|
+
else {
|
|
1147
|
+
throw err;
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
finally {
|
|
1151
|
+
if (safetyTimer)
|
|
1152
|
+
clearTimeout(safetyTimer);
|
|
1153
|
+
closeSdk();
|
|
1154
|
+
}
|
|
1155
|
+
if (missingSdkConversationError && existingSdkSessionId) {
|
|
1156
|
+
delegatedRetry = true;
|
|
1157
|
+
return await this.retryWithoutSdkResume({
|
|
1158
|
+
query,
|
|
1159
|
+
sessionId,
|
|
1160
|
+
traceId,
|
|
1161
|
+
options,
|
|
1162
|
+
sessionMapKey: ctx.sessionMapKey,
|
|
1163
|
+
errorMessage: missingSdkConversationError,
|
|
1164
|
+
mode: 'full',
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
// Use SDK terminal result if available; fall back to accumulated streamed answer tokens.
|
|
1168
|
+
// On timeout, the SDK result message may never arrive, but answer_token events
|
|
1169
|
+
// were already streamed to the frontend — use that text to populate the report.
|
|
1170
|
+
conclusionText = finalResult || getAccumulatedAnswer() || '';
|
|
1171
|
+
if (!finalResult && conclusionText) {
|
|
1172
|
+
console.warn(`[ClaudeRuntime] Session ${sessionId}: SDK result was empty, recovered ${conclusionText.length} chars from streamed answer tokens`);
|
|
1173
|
+
}
|
|
1174
|
+
allFindings.push((0, claudeFindingExtractor_1.extractFindingsFromText)(conclusionText));
|
|
1175
|
+
let mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)(allFindings);
|
|
1176
|
+
if (conclusionText.trim() && ctx.analysisPlan.current) {
|
|
1177
|
+
const plan = ctx.analysisPlan.current;
|
|
1178
|
+
const conclusionPhase = plan.phases.find(p => p.status === 'pending' &&
|
|
1179
|
+
p.expectedTools.length === 0 &&
|
|
1180
|
+
/结论|conclusion|报告|report|总结/.test(`${p.name} ${p.goal}`));
|
|
1181
|
+
if (conclusionPhase) {
|
|
1182
|
+
const summary = (0, outputLanguage_1.localize)(this.config.outputLanguage, `自动完成阶段:模型已生成最终结论(${conclusionText.length} 字符)。`, `Auto-completed phase: the model produced the final conclusion (${conclusionText.length} chars).`);
|
|
1183
|
+
conclusionPhase.status = 'completed';
|
|
1184
|
+
conclusionPhase.completedAt = Date.now();
|
|
1185
|
+
conclusionPhase.summary = summary;
|
|
1186
|
+
this.emitUpdate({
|
|
1187
|
+
type: 'plan_phase_updated',
|
|
1188
|
+
content: { phaseId: conclusionPhase.id, status: 'completed', summary, phaseName: conclusionPhase.name },
|
|
1189
|
+
timestamp: Date.now(),
|
|
1190
|
+
});
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
// Log compaction for diagnostics — helps debug cases where Claude seems to lose context
|
|
1194
|
+
if (sdkCompactDetected) {
|
|
1195
|
+
console.warn(`[ClaudeRuntime] Session ${sessionId}: analysis completed after SDK auto-compact. Findings count: ${mergedFindings.length}`);
|
|
1196
|
+
// P1-C1: Write a structured compact recovery note so the next turn's system prompt
|
|
1197
|
+
// carries plan progress + findings + entity context that may have been lost.
|
|
1198
|
+
// Phase 3-2: also preserves the last N raw tool calls as structured digests
|
|
1199
|
+
// so the post-compact agent knows what it was just doing.
|
|
1200
|
+
const sessionNotes = this.sessionNotes.get(sessionId);
|
|
1201
|
+
if (sessionNotes) {
|
|
1202
|
+
const note = (0, recoveryNoteBuilder_1.buildRecoveryNote)({
|
|
1203
|
+
plan: ctx.analysisPlan.current ?? undefined,
|
|
1204
|
+
findings: mergedFindings,
|
|
1205
|
+
recentToolCalls: ctx.analysisPlan.current?.toolCallLog ?? [],
|
|
1206
|
+
entitySnapshot: this.buildEntityContext(ctx.entityStore),
|
|
1207
|
+
});
|
|
1208
|
+
sessionNotes.push({
|
|
1209
|
+
section: 'next_step',
|
|
1210
|
+
content: note.text,
|
|
1211
|
+
priority: 'high',
|
|
1212
|
+
timestamp: Date.now(),
|
|
1213
|
+
});
|
|
1214
|
+
if (sessionNotes.length > 20)
|
|
1215
|
+
sessionNotes.shift();
|
|
1216
|
+
console.log(`[ClaudeRuntime] Compact recovery note: ${note.sectionsIncluded.length} sections, ${note.usedChars} chars (${note.sectionsIncluded.join('/')})`);
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
// Verification + reflection-driven retry (P0-2 + P2-2)
|
|
1220
|
+
// Default ON. Up to 2 correction retries, but second only if new/different errors.
|
|
1221
|
+
// Run unconditionally when enabled — plan adherence, hypothesis resolution,
|
|
1222
|
+
// and conclusion-length checks must fire even when zero findings are extracted.
|
|
1223
|
+
console.log(`[ClaudeRuntime] Pre-verification: conclusionText=${conclusionText.length} chars, sdkSessionId=${sdkSessionId ? 'set' : 'MISSING'}, enableVerification=${runtimeConfig.enableVerification}`);
|
|
1224
|
+
if (runtimeConfig.enableVerification) {
|
|
1225
|
+
const MAX_CORRECTION_ATTEMPTS = 2;
|
|
1226
|
+
let previousErrorSignatures = new Set();
|
|
1227
|
+
try {
|
|
1228
|
+
for (let attempt = 0; attempt < MAX_CORRECTION_ATTEMPTS; attempt++) {
|
|
1229
|
+
const verification = await (0, claudeVerifier_1.verifyConclusion)(mergedFindings, conclusionText, {
|
|
1230
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
1231
|
+
enableLLM: true,
|
|
1232
|
+
plan: ctx.analysisPlan.current,
|
|
1233
|
+
hypotheses: ctx.hypotheses,
|
|
1234
|
+
sceneType: ctx.sceneType,
|
|
1235
|
+
lightModel: runtimeConfig.lightModel,
|
|
1236
|
+
verifierTimeoutMs: runtimeConfig.verifierTimeoutMs,
|
|
1237
|
+
outputLanguage: this.config.outputLanguage,
|
|
1238
|
+
});
|
|
1239
|
+
console.log(`[ClaudeRuntime] Verification (attempt ${attempt + 1}): ${verification.passed ? 'PASSED' : 'ISSUES FOUND'} (${verification.durationMs}ms, ${verification.heuristicIssues.length} heuristic + ${verification.llmIssues?.length || 0} LLM issues)`);
|
|
1240
|
+
if (verification.passed || !sdkSessionId)
|
|
1241
|
+
break;
|
|
1242
|
+
const allIssues = [...verification.heuristicIssues, ...(verification.llmIssues || [])];
|
|
1243
|
+
const errorIssues = allIssues.filter(i => i.severity === 'error');
|
|
1244
|
+
if (errorIssues.length === 0)
|
|
1245
|
+
break;
|
|
1246
|
+
// P2-2: Check if these are the SAME errors as last attempt — if so, stop retrying
|
|
1247
|
+
const currentSignatures = new Set(errorIssues.map(i => `${i.type}:${i.message.substring(0, 60)}`));
|
|
1248
|
+
if (attempt > 0) {
|
|
1249
|
+
const newErrors = [...currentSignatures].filter(s => !previousErrorSignatures.has(s));
|
|
1250
|
+
if (newErrors.length === 0) {
|
|
1251
|
+
console.log(`[ClaudeRuntime] Reflection retry: same ${errorIssues.length} errors persist after correction, stopping`);
|
|
1252
|
+
// P1: Record persistent verification failures as negative memory
|
|
1253
|
+
for (const issue of errorIssues) {
|
|
1254
|
+
failedApproaches.push({
|
|
1255
|
+
type: 'verification_failure',
|
|
1256
|
+
approach: issue.message.substring(0, 150),
|
|
1257
|
+
reason: `验证发现持续性问题 (${issue.type}),修正重试未能解决`,
|
|
1258
|
+
});
|
|
1259
|
+
}
|
|
1260
|
+
break;
|
|
1261
|
+
}
|
|
1262
|
+
console.log(`[ClaudeRuntime] Reflection retry: ${newErrors.length} new errors detected, attempting correction ${attempt + 1}`);
|
|
1263
|
+
}
|
|
1264
|
+
previousErrorSignatures = currentSignatures;
|
|
1265
|
+
this.emitUpdate({
|
|
1266
|
+
type: 'progress',
|
|
1267
|
+
content: {
|
|
1268
|
+
phase: 'concluding',
|
|
1269
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `发现 ${errorIssues.length} 个 ERROR 级问题,启动修正重试 (${attempt + 1}/${MAX_CORRECTION_ATTEMPTS})...`, `Found ${errorIssues.length} ERROR-level issue(s). Starting correction retry (${attempt + 1}/${MAX_CORRECTION_ATTEMPTS})...`),
|
|
1270
|
+
},
|
|
1271
|
+
timestamp: Date.now(),
|
|
1272
|
+
});
|
|
1273
|
+
try {
|
|
1274
|
+
const correctionPrompt = (0, claudeVerifier_1.generateCorrectionPrompt)(allIssues, conclusionText, this.config.outputLanguage);
|
|
1275
|
+
// When the conclusion is incomplete (just reasoning notes, no structured report),
|
|
1276
|
+
// the agent ran out of turns before generating a report. Give substantially more
|
|
1277
|
+
// budget so the correction can produce a complete structured output.
|
|
1278
|
+
const conclusionNeedsFullGeneration = (0, claudeVerifier_1.isConclusionIncomplete)(conclusionText);
|
|
1279
|
+
// P2-2: Give more turn budget on second attempt (may need additional data)
|
|
1280
|
+
const correctionTurns = conclusionNeedsFullGeneration
|
|
1281
|
+
? (attempt === 0 ? 10 : 12) // Full report generation needs more turns
|
|
1282
|
+
: (attempt === 0 ? 5 : 8); // Normal correction (fixing specific issues)
|
|
1283
|
+
// Rebuild system prompt with reduced budget for correction retries.
|
|
1284
|
+
// After SDK auto-compact or verification failure, conversation history is longer,
|
|
1285
|
+
// so we shrink the system prompt to leave more room (4500 → 3000 tokens).
|
|
1286
|
+
const correctionSystemPrompt = sdkCompactDetected
|
|
1287
|
+
? (0, claudeSystemPrompt_1.buildSystemPrompt)(ctx.analysisContextForRebuild, 3000)
|
|
1288
|
+
: ctx.systemPrompt;
|
|
1289
|
+
const { stream: correctionStream, close: closeCorrection } = sdkQueryWithRetry({
|
|
1290
|
+
prompt: correctionPrompt,
|
|
1291
|
+
options: {
|
|
1292
|
+
model: runtimeConfig.model,
|
|
1293
|
+
maxTurns: correctionTurns,
|
|
1294
|
+
systemPrompt: correctionSystemPrompt,
|
|
1295
|
+
mcpServers: { smartperfetto: ctx.mcpServer },
|
|
1296
|
+
includePartialMessages: true,
|
|
1297
|
+
permissionMode: 'bypassPermissions',
|
|
1298
|
+
allowDangerouslySkipPermissions: true,
|
|
1299
|
+
cwd: runtimeConfig.cwd,
|
|
1300
|
+
effort: ctx.effectiveEffort,
|
|
1301
|
+
allowedTools: ctx.allowedTools,
|
|
1302
|
+
resume: sdkSessionId,
|
|
1303
|
+
env: sdkEnv,
|
|
1304
|
+
stderr: (data) => {
|
|
1305
|
+
console.warn(`[ClaudeRuntime] SDK stderr (correction) [${sessionId}]: ${data.trimEnd()}`);
|
|
1306
|
+
},
|
|
1307
|
+
},
|
|
1308
|
+
}, {
|
|
1309
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
1310
|
+
outputLanguage: this.config.outputLanguage,
|
|
1311
|
+
});
|
|
1312
|
+
// P1-G8: Independent timeout for correction retries — prevents indefinite hangs.
|
|
1313
|
+
// When generating a full report from scratch (conclusionNeedsFullGeneration),
|
|
1314
|
+
// each turn needs more time (25s) since structured report output is verbose.
|
|
1315
|
+
// Normal corrections (fixing specific issues) use 10s per turn.
|
|
1316
|
+
const correctionTimeoutMs = correctionTurns * (conclusionNeedsFullGeneration ? 25000 : 10000);
|
|
1317
|
+
let correctionTimedOut = false;
|
|
1318
|
+
const correctionTimer = setTimeout(() => {
|
|
1319
|
+
correctionTimedOut = true;
|
|
1320
|
+
console.warn(`[ClaudeRuntime] Correction retry ${attempt + 1} timed out after ${correctionTimeoutMs}ms`);
|
|
1321
|
+
// Forcefully terminate the SDK subprocess so any queued MCP
|
|
1322
|
+
// tool calls (execute_sql, invoke_skill) stop running after
|
|
1323
|
+
// the main analyze() flow has moved on. Without this, those
|
|
1324
|
+
// calls hit trace_processor after the session has closed and
|
|
1325
|
+
// surface as orphan SQL errors with no owner.
|
|
1326
|
+
closeCorrection();
|
|
1327
|
+
}, correctionTimeoutMs);
|
|
1328
|
+
let correctedResult = '';
|
|
1329
|
+
try {
|
|
1330
|
+
for await (const msg of correctionStream) {
|
|
1331
|
+
if (correctionTimedOut)
|
|
1332
|
+
break;
|
|
1333
|
+
if (msg.type === 'result' && msg.subtype === 'success') {
|
|
1334
|
+
correctedResult = msg.result || '';
|
|
1335
|
+
rounds += msg.num_turns || 0;
|
|
1336
|
+
}
|
|
1337
|
+
// Bridge tool call events (agent_task_dispatched, agent_response)
|
|
1338
|
+
// but suppress text/conclusion events to avoid duplicating the report.
|
|
1339
|
+
// The corrected conclusion is captured in correctedResult and will
|
|
1340
|
+
// replace conclusionText below — no need to stream it again.
|
|
1341
|
+
if (msg.type !== 'stream_event' && msg.type !== 'assistant' && msg.type !== 'result') {
|
|
1342
|
+
try {
|
|
1343
|
+
bridge(msg);
|
|
1344
|
+
}
|
|
1345
|
+
catch { /* non-fatal */ }
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
finally {
|
|
1350
|
+
clearTimeout(correctionTimer);
|
|
1351
|
+
// Safety net: guarantee the correction SDK subprocess is
|
|
1352
|
+
// closed on every exit (success, break, throw). Idempotent.
|
|
1353
|
+
closeCorrection();
|
|
1354
|
+
}
|
|
1355
|
+
if (correctionTimedOut) {
|
|
1356
|
+
console.warn(`[ClaudeRuntime] Correction attempt ${attempt + 1} timed out, using partial result (${correctedResult.length} chars)`);
|
|
1357
|
+
}
|
|
1358
|
+
// P2-G13: Compare correction quality by finding count and coverage, not text length.
|
|
1359
|
+
// A shorter corrected conclusion with more findings is better than a longer empty one.
|
|
1360
|
+
const correctedFindings = correctedResult ? (0, claudeFindingExtractor_1.extractFindingsFromText)(correctedResult) : [];
|
|
1361
|
+
const previousFindingCount = mergedFindings.length;
|
|
1362
|
+
const hasSubstantiveCorrection = correctedResult && (correctedFindings.length >= previousFindingCount ||
|
|
1363
|
+
correctedResult.length > 100);
|
|
1364
|
+
if (hasSubstantiveCorrection) {
|
|
1365
|
+
conclusionText = correctedResult;
|
|
1366
|
+
// Re-extract findings from corrected conclusion and re-merge
|
|
1367
|
+
allFindings.push(correctedFindings);
|
|
1368
|
+
mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)(allFindings);
|
|
1369
|
+
console.log(`[ClaudeRuntime] Reflection retry ${attempt + 1}: conclusion corrected (findings: ${previousFindingCount} → ${mergedFindings.length})`);
|
|
1370
|
+
}
|
|
1371
|
+
else {
|
|
1372
|
+
console.log(`[ClaudeRuntime] Reflection retry ${attempt + 1}: correction insufficient (findings: ${correctedFindings.length} vs ${previousFindingCount}), keeping previous`);
|
|
1373
|
+
break; // No point retrying if correction failed to improve
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
catch (correctionErr) {
|
|
1377
|
+
console.warn(`[ClaudeRuntime] Reflection retry ${attempt + 1} failed (non-blocking):`, correctionErr.message);
|
|
1378
|
+
break;
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
catch (err) {
|
|
1383
|
+
console.warn('[ClaudeRuntime] Verification failed (non-blocking):', err.message);
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
// Fallback: if conclusionText is still incomplete after verification (or verification was skipped),
|
|
1387
|
+
// check if accumulatedAnswer has more content. This handles the case where the SDK result
|
|
1388
|
+
// was a short summary but the streamed answer_tokens contained the full report.
|
|
1389
|
+
const accumulatedAnswer = getAccumulatedAnswer();
|
|
1390
|
+
if ((0, claudeVerifier_1.isConclusionIncomplete)(conclusionText) && accumulatedAnswer.length > conclusionText.length) {
|
|
1391
|
+
console.warn(`[ClaudeRuntime] Session ${sessionId}: conclusionText incomplete (${conclusionText.length} chars), using accumulatedAnswer (${accumulatedAnswer.length} chars) instead`);
|
|
1392
|
+
conclusionText = accumulatedAnswer;
|
|
1393
|
+
// Re-extract findings from the more complete text
|
|
1394
|
+
allFindings.push((0, claudeFindingExtractor_1.extractFindingsFromText)(conclusionText));
|
|
1395
|
+
mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)(allFindings);
|
|
1396
|
+
}
|
|
1397
|
+
const isPartialResult = terminationReason === analysisTermination_1.MAX_TURNS_TERMINATION_REASON;
|
|
1398
|
+
if (isPartialResult) {
|
|
1399
|
+
terminationMessage || (terminationMessage = (0, analysisTermination_1.buildMaxTurnsTerminationMessage)({
|
|
1400
|
+
mode: 'full',
|
|
1401
|
+
turns: rounds,
|
|
1402
|
+
maxTurns: this.config.maxTurns,
|
|
1403
|
+
outputLanguage: this.config.outputLanguage,
|
|
1404
|
+
}));
|
|
1405
|
+
conclusionText = conclusionText.trim()
|
|
1406
|
+
? (0, analysisTermination_1.prependPartialNotice)(conclusionText, terminationMessage, this.config.outputLanguage)
|
|
1407
|
+
: (0, analysisTermination_1.buildMaxTurnsFallbackConclusion)({
|
|
1408
|
+
mode: 'full',
|
|
1409
|
+
turns: rounds,
|
|
1410
|
+
maxTurns: this.config.maxTurns,
|
|
1411
|
+
outputLanguage: this.config.outputLanguage,
|
|
1412
|
+
});
|
|
1413
|
+
allFindings.push((0, claudeFindingExtractor_1.extractFindingsFromText)(conclusionText));
|
|
1414
|
+
mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)(allFindings);
|
|
1415
|
+
failedApproaches.push({
|
|
1416
|
+
type: 'strategy_failure',
|
|
1417
|
+
approach: `analysis reached ${this.config.maxTurns} full-mode turns`,
|
|
1418
|
+
reason: 'SDK returned error_max_turns before a normal success result',
|
|
1419
|
+
});
|
|
1420
|
+
this.emitUpdate({
|
|
1421
|
+
type: 'degraded',
|
|
1422
|
+
content: {
|
|
1423
|
+
module: 'claudeRuntime',
|
|
1424
|
+
fallback: 'partial_result_after_max_turns',
|
|
1425
|
+
error: analysisTermination_1.SDK_MAX_TURNS_SUBTYPE,
|
|
1426
|
+
message: terminationMessage,
|
|
1427
|
+
partial: true,
|
|
1428
|
+
terminationReason,
|
|
1429
|
+
turns: rounds,
|
|
1430
|
+
maxTurns: this.config.maxTurns,
|
|
1431
|
+
},
|
|
1432
|
+
timestamp: Date.now(),
|
|
1433
|
+
});
|
|
1434
|
+
}
|
|
1435
|
+
const baseConfidence = this.estimateConfidence(mergedFindings);
|
|
1436
|
+
const turnConfidence = isPartialResult
|
|
1437
|
+
? (0, analysisTermination_1.capPartialConfidence)(baseConfidence, mergedFindings.length > 0)
|
|
1438
|
+
: baseConfidence;
|
|
1439
|
+
ctx.sessionContext.addTurn(query, {
|
|
1440
|
+
primaryGoal: query,
|
|
1441
|
+
aspects: [],
|
|
1442
|
+
expectedOutputType: 'diagnosis',
|
|
1443
|
+
complexity: 'complex',
|
|
1444
|
+
followUpType: ctx.previousTurns.length > 0 ? 'extend' : 'initial',
|
|
1445
|
+
}, {
|
|
1446
|
+
agentId: 'claude-agent',
|
|
1447
|
+
success: true,
|
|
1448
|
+
findings: mergedFindings,
|
|
1449
|
+
confidence: turnConfidence,
|
|
1450
|
+
message: conclusionText,
|
|
1451
|
+
partial: isPartialResult || undefined,
|
|
1452
|
+
terminationReason,
|
|
1453
|
+
terminationMessage,
|
|
1454
|
+
}, mergedFindings);
|
|
1455
|
+
ctx.sessionContext.updateWorkingMemoryFromConclusion({
|
|
1456
|
+
turnIndex: ctx.previousTurns.length,
|
|
1457
|
+
query,
|
|
1458
|
+
conclusion: conclusionText,
|
|
1459
|
+
confidence: turnConfidence,
|
|
1460
|
+
});
|
|
1461
|
+
// P2-2: Save analysis pattern to long-term memory (fire-and-forget)
|
|
1462
|
+
// Note: sceneType is from the outer analyze() scope (classified before context prep)
|
|
1463
|
+
const fullFeatures = (0, analysisPatternMemory_1.extractTraceFeatures)({
|
|
1464
|
+
architectureType: ctx.architecture?.type,
|
|
1465
|
+
sceneType,
|
|
1466
|
+
packageName: options.packageName,
|
|
1467
|
+
findingTitles: mergedFindings.map(f => f.title),
|
|
1468
|
+
findingCategories: mergedFindings.map(f => f.category).filter(Boolean),
|
|
1469
|
+
});
|
|
1470
|
+
// Per Self-Improving v3.3 §4.4: full-path patterns now save as
|
|
1471
|
+
// 'provisional' regardless of confidence. The state machine + 24h
|
|
1472
|
+
// auto-confirm decides whether they earn injection weight.
|
|
1473
|
+
if (!isPartialResult && mergedFindings.length > 0) {
|
|
1474
|
+
const insights = (0, analysisPatternMemory_1.extractKeyInsights)(mergedFindings, conclusionText);
|
|
1475
|
+
const patternExtras = {
|
|
1476
|
+
status: 'provisional',
|
|
1477
|
+
provenance: {
|
|
1478
|
+
sessionId,
|
|
1479
|
+
turnIndex: ctx.previousTurns.length,
|
|
1480
|
+
},
|
|
1481
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
1482
|
+
};
|
|
1483
|
+
(0, analysisPatternMemory_1.saveAnalysisPattern)(fullFeatures, insights, sceneType, ctx.architecture?.type, turnConfidence, patternExtras)
|
|
1484
|
+
.catch(err => console.warn('[ClaudeRuntime] Pattern save failed:', err.message));
|
|
1485
|
+
// Try to promote any matching quick-path pattern that has been waiting
|
|
1486
|
+
// for full-path verification. Best-effort — failure does not block.
|
|
1487
|
+
(0, analysisPatternMemory_1.promoteQuickPatternIfMatching)({
|
|
1488
|
+
fullPathFeatures: fullFeatures,
|
|
1489
|
+
fullPathInsights: insights,
|
|
1490
|
+
sceneType,
|
|
1491
|
+
architectureType: ctx.architecture?.type,
|
|
1492
|
+
verifierPassed: true,
|
|
1493
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
1494
|
+
}).catch(err => console.warn('[ClaudeRuntime] Quick→full promote failed:', err.message));
|
|
1495
|
+
}
|
|
1496
|
+
// Derive sql_error FailedApproach entries from persistent SQL errors
|
|
1497
|
+
// (errors that were never auto-fixed during the session — still in the array)
|
|
1498
|
+
const persistentSqlErrors = this.sessionSqlErrors.get(sessionId)?.filter((e) => !e.fixedSql && e.errorMessage) || [];
|
|
1499
|
+
for (const sqlErr of persistentSqlErrors.slice(-3)) { // cap at 3 to avoid noise
|
|
1500
|
+
failedApproaches.push({
|
|
1501
|
+
type: 'sql_error',
|
|
1502
|
+
approach: sqlErr.errorSql?.substring(0, 150) || 'unknown SQL',
|
|
1503
|
+
reason: sqlErr.errorMessage?.substring(0, 150) || 'SQL query error',
|
|
1504
|
+
});
|
|
1505
|
+
}
|
|
1506
|
+
// P1: Save negative patterns to long-term memory (fire-and-forget)
|
|
1507
|
+
if (failedApproaches.length > 0 && fullFeatures.length > 0) {
|
|
1508
|
+
(0, analysisPatternMemory_1.saveNegativePattern)(fullFeatures, failedApproaches, sceneType, ctx.architecture?.type, {
|
|
1509
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
1510
|
+
})
|
|
1511
|
+
.catch(err => console.warn('[ClaudeRuntime] Negative pattern save failed:', err.message));
|
|
1512
|
+
}
|
|
1513
|
+
// P0-1: Export actual hypotheses from this turn (not hardcoded empty array)
|
|
1514
|
+
// Convert agentv3 Hypothesis to agentProtocol Hypothesis format for AnalysisResult
|
|
1515
|
+
const turnHypotheses = (this.sessionHypotheses.get(sessionId) || []).map(h => this.toProtocolHypothesis(h));
|
|
1516
|
+
return {
|
|
1517
|
+
sessionId,
|
|
1518
|
+
success: true,
|
|
1519
|
+
findings: mergedFindings,
|
|
1520
|
+
hypotheses: turnHypotheses,
|
|
1521
|
+
conclusion: conclusionText,
|
|
1522
|
+
confidence: turnConfidence,
|
|
1523
|
+
rounds,
|
|
1524
|
+
totalDurationMs: Date.now() - startTime,
|
|
1525
|
+
partial: isPartialResult || undefined,
|
|
1526
|
+
terminationReason,
|
|
1527
|
+
terminationMessage,
|
|
1528
|
+
};
|
|
1529
|
+
}
|
|
1530
|
+
catch (error) {
|
|
1531
|
+
const rawErrorMessage = error.message || 'Unknown error';
|
|
1532
|
+
const errMsg = (0, claudeConfig_1.explainClaudeRuntimeError)(rawErrorMessage, this.config.outputLanguage, (0, claudeConfig_1.getCredentialSourceHint)(options.providerId, providerScopeFromOptions(options)));
|
|
1533
|
+
const quotaExceeded = (0, claudeConfig_1.isClaudeQuotaError)(rawErrorMessage);
|
|
1534
|
+
console.error('[ClaudeRuntime] Analysis failed:', errMsg);
|
|
1535
|
+
// P1-3: Preserve partial findings and generate partial conclusion on mid-stream errors
|
|
1536
|
+
const partialFindings = (0, claudeFindingExtractor_1.mergeFindings)(allFindings);
|
|
1537
|
+
const hasPartialResults = partialFindings.length > 0;
|
|
1538
|
+
// P0-1: Export actual hypotheses even on error paths
|
|
1539
|
+
const errorHypotheses = (this.sessionHypotheses.get(sessionId) || []).map(h => this.toProtocolHypothesis(h));
|
|
1540
|
+
if (hasPartialResults) {
|
|
1541
|
+
const partialConclusion = (0, outputLanguage_1.localize)(this.config.outputLanguage, `分析过程中出错 (${errMsg}),以下是已收集的部分发现:\n\n`, `An error occurred during analysis (${errMsg}). Partial findings collected so far:\n\n`) +
|
|
1542
|
+
partialFindings.map(f => `- **[${f.severity.toUpperCase()}]** ${f.title}: ${f.description || ''}`).join('\n');
|
|
1543
|
+
this.emitUpdate({
|
|
1544
|
+
type: 'progress',
|
|
1545
|
+
content: {
|
|
1546
|
+
phase: 'concluding',
|
|
1547
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `分析中断,已保留 ${partialFindings.length} 个部分发现`, `Analysis interrupted; preserved ${partialFindings.length} partial finding(s)`),
|
|
1548
|
+
},
|
|
1549
|
+
timestamp: Date.now(),
|
|
1550
|
+
});
|
|
1551
|
+
return {
|
|
1552
|
+
sessionId,
|
|
1553
|
+
success: true, // partial success — downstream can check confidence < 1
|
|
1554
|
+
findings: partialFindings,
|
|
1555
|
+
hypotheses: errorHypotheses,
|
|
1556
|
+
conclusion: partialConclusion,
|
|
1557
|
+
confidence: this.estimateConfidence(partialFindings) * 0.7, // penalize for incomplete
|
|
1558
|
+
rounds,
|
|
1559
|
+
totalDurationMs: Date.now() - startTime,
|
|
1560
|
+
partial: true,
|
|
1561
|
+
terminationReason: quotaExceeded ? 'max_budget_usd' : 'execution_error',
|
|
1562
|
+
terminationMessage: errMsg,
|
|
1563
|
+
};
|
|
1564
|
+
}
|
|
1565
|
+
this.emitUpdate({
|
|
1566
|
+
type: 'error',
|
|
1567
|
+
content: {
|
|
1568
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `分析失败: ${errMsg}`, `Analysis failed: ${errMsg}`),
|
|
1569
|
+
},
|
|
1570
|
+
timestamp: Date.now(),
|
|
1571
|
+
});
|
|
1572
|
+
return {
|
|
1573
|
+
sessionId,
|
|
1574
|
+
success: false,
|
|
1575
|
+
findings: partialFindings,
|
|
1576
|
+
hypotheses: errorHypotheses,
|
|
1577
|
+
conclusion: (0, outputLanguage_1.localize)(this.config.outputLanguage, `分析过程中出错: ${errMsg}`, `An error occurred during analysis: ${errMsg}`),
|
|
1578
|
+
confidence: 0,
|
|
1579
|
+
rounds,
|
|
1580
|
+
totalDurationMs: Date.now() - startTime,
|
|
1581
|
+
terminationReason: quotaExceeded ? 'max_budget_usd' : 'execution_error',
|
|
1582
|
+
terminationMessage: errMsg,
|
|
1583
|
+
};
|
|
1584
|
+
}
|
|
1585
|
+
finally {
|
|
1586
|
+
this.activeAnalyses.delete(sessionId);
|
|
1587
|
+
strategyFingerprint_1.runSnapshots.release(sessionId);
|
|
1588
|
+
// Notes persistence now handled by unified SessionStateSnapshot in the route layer.
|
|
1589
|
+
// No separate disk I/O needed here.
|
|
1590
|
+
// Persist session metrics (fire-and-forget, non-blocking)
|
|
1591
|
+
try {
|
|
1592
|
+
if (!delegatedRetry) {
|
|
1593
|
+
metricsCollector.recordTurn(); // Record final turn
|
|
1594
|
+
(0, agentMetrics_1.persistSessionMetrics)(metricsCollector.summarize());
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
catch (metricsErr) {
|
|
1598
|
+
console.warn('[ClaudeRuntime] Failed to persist metrics:', metricsErr.message);
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
/**
|
|
1603
|
+
* Quick analysis path for simple factual queries.
|
|
1604
|
+
* Minimal context prep, 3 MCP tools, no planning/verification/report.
|
|
1605
|
+
* Target: 3-8s latency, 2k-5k tokens.
|
|
1606
|
+
*/
|
|
1607
|
+
async analyzeQuick(query, sessionId, traceId, options, precomputed) {
|
|
1608
|
+
const { sceneType, focusResult, cachedArch, sessionContext, previousTurns, metricsCollector, startTime } = precomputed;
|
|
1609
|
+
let delegatedRetry = false;
|
|
1610
|
+
try {
|
|
1611
|
+
let effectivePackageName = options.packageName;
|
|
1612
|
+
if (!effectivePackageName && focusResult.primaryApp) {
|
|
1613
|
+
effectivePackageName = focusResult.primaryApp;
|
|
1614
|
+
}
|
|
1615
|
+
// Architecture detection + skill registry init in parallel
|
|
1616
|
+
const [architecture, _skillRegistryReady] = await Promise.all([
|
|
1617
|
+
cachedArch ? Promise.resolve(cachedArch) : (async () => {
|
|
1618
|
+
try {
|
|
1619
|
+
const detector = (0, architectureDetector_1.createArchitectureDetector)();
|
|
1620
|
+
const arch = await detector.detect({
|
|
1621
|
+
traceId,
|
|
1622
|
+
traceProcessorService: this.traceProcessorService,
|
|
1623
|
+
packageName: effectivePackageName,
|
|
1624
|
+
});
|
|
1625
|
+
if (arch) {
|
|
1626
|
+
this.architectureCache.set(traceId, arch);
|
|
1627
|
+
// LRU eviction: match full path's 50-entry cap
|
|
1628
|
+
if (this.architectureCache.size > 50) {
|
|
1629
|
+
const firstKey = this.architectureCache.keys().next().value;
|
|
1630
|
+
if (firstKey)
|
|
1631
|
+
this.architectureCache.delete(firstKey);
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
return arch;
|
|
1635
|
+
}
|
|
1636
|
+
catch (err) {
|
|
1637
|
+
console.warn('[ClaudeRuntime] Quick: architecture detection failed:', err.message);
|
|
1638
|
+
return undefined;
|
|
1639
|
+
}
|
|
1640
|
+
})(),
|
|
1641
|
+
(0, skillLoader_1.ensureSkillRegistryInitialized)(),
|
|
1642
|
+
]);
|
|
1643
|
+
const skillExecutor = (0, skillExecutor_1.createSkillExecutor)(this.traceProcessorService);
|
|
1644
|
+
skillExecutor.registerSkills(skillLoader_1.skillRegistry.getAllSkills());
|
|
1645
|
+
skillExecutor.setFragmentRegistry(skillLoader_1.skillRegistry.getFragmentCache());
|
|
1646
|
+
const watchdogWarning = { current: null };
|
|
1647
|
+
// Quick path defaults to no skill-notes injection per §8 of the
|
|
1648
|
+
// self-improving design. Operators can opt-in via the env override.
|
|
1649
|
+
const quickNotesBudget = process.env.SELF_IMPROVE_NOTES_INJECT_ENABLED === '1'
|
|
1650
|
+
? new skillNotesInjector_1.SkillNotesBudget({
|
|
1651
|
+
mode: 'quick',
|
|
1652
|
+
quickOverrideTotal: parseQuickBudgetEnv(),
|
|
1653
|
+
})
|
|
1654
|
+
: undefined;
|
|
1655
|
+
const { server: mcpServer, allowedTools } = (0, claudeMcpServer_1.createClaudeMcpServer)({
|
|
1656
|
+
traceId,
|
|
1657
|
+
traceProcessorService: this.traceProcessorService,
|
|
1658
|
+
skillExecutor,
|
|
1659
|
+
packageName: effectivePackageName,
|
|
1660
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
1661
|
+
watchdogWarning,
|
|
1662
|
+
sceneType,
|
|
1663
|
+
lightweight: true,
|
|
1664
|
+
skillNotesBudget: quickNotesBudget,
|
|
1665
|
+
outputLanguage: this.config.outputLanguage,
|
|
1666
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
1667
|
+
});
|
|
1668
|
+
const systemPrompt = (0, claudeSystemPrompt_1.buildQuickSystemPrompt)({
|
|
1669
|
+
architecture,
|
|
1670
|
+
packageName: effectivePackageName,
|
|
1671
|
+
focusApps: focusResult.apps.length > 0 ? focusResult.apps : undefined,
|
|
1672
|
+
focusMethod: focusResult.method,
|
|
1673
|
+
selectionContext: options.selectionContext,
|
|
1674
|
+
outputLanguage: this.config.outputLanguage,
|
|
1675
|
+
});
|
|
1676
|
+
const providerScope = providerScopeFromOptions(options);
|
|
1677
|
+
const quickConfig = (0, claudeConfig_1.createQuickConfig)((0, claudeConfig_1.resolveRuntimeConfig)(this.config, options.providerId, providerScope));
|
|
1678
|
+
const { handleMessage: bridge, getAccumulatedAnswer } = (0, claudeSseBridge_1.createSseBridge)((update) => {
|
|
1679
|
+
this.emitUpdate(update);
|
|
1680
|
+
}, this.config.outputLanguage);
|
|
1681
|
+
this.emitUpdate({
|
|
1682
|
+
type: 'progress',
|
|
1683
|
+
content: {
|
|
1684
|
+
phase: 'answering',
|
|
1685
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `快速问答模式 (${quickConfig.model})...`, `Fast Q&A mode (${quickConfig.model})...`),
|
|
1686
|
+
},
|
|
1687
|
+
timestamp: Date.now(),
|
|
1688
|
+
});
|
|
1689
|
+
const sdkEnv = (0, claudeConfig_1.createSdkEnv)(options.providerId, providerScope);
|
|
1690
|
+
// Quick calls intentionally do not resume or persist Claude SDK sessions.
|
|
1691
|
+
// The SDK's maxTurns budget is tied to the resumed conversation, while
|
|
1692
|
+
// SmartPerfetto's fast mode budget is a per-question latency guard. Keep
|
|
1693
|
+
// cross-turn context local and compact so quick cannot exhaust or overwrite
|
|
1694
|
+
// the full-mode SDK conversation.
|
|
1695
|
+
let quickPrompt = query;
|
|
1696
|
+
const quickConversationContext = buildQuickConversationContext(previousTurns, this.config.outputLanguage);
|
|
1697
|
+
if (quickConversationContext) {
|
|
1698
|
+
quickPrompt = `${quickConversationContext}\n\n${quickPrompt}`;
|
|
1699
|
+
}
|
|
1700
|
+
// Prepend pre-queried trace data so the AI skips basic SQL turns in fast mode.
|
|
1701
|
+
if (options.traceContext && options.traceContext.length > 0) {
|
|
1702
|
+
quickPrompt = `${formatTraceContext(options.traceContext, this.config.outputLanguage)}\n\n${quickPrompt}`;
|
|
1703
|
+
}
|
|
1704
|
+
const { stream, close: closeSdk } = sdkQueryWithRetry({
|
|
1705
|
+
prompt: quickPrompt,
|
|
1706
|
+
options: {
|
|
1707
|
+
model: quickConfig.model,
|
|
1708
|
+
maxTurns: quickConfig.maxTurns,
|
|
1709
|
+
systemPrompt,
|
|
1710
|
+
mcpServers: { smartperfetto: mcpServer },
|
|
1711
|
+
includePartialMessages: true,
|
|
1712
|
+
permissionMode: 'bypassPermissions',
|
|
1713
|
+
allowDangerouslySkipPermissions: true,
|
|
1714
|
+
cwd: quickConfig.cwd,
|
|
1715
|
+
effort: quickConfig.effort,
|
|
1716
|
+
allowedTools,
|
|
1717
|
+
env: sdkEnv,
|
|
1718
|
+
stderr: (data) => {
|
|
1719
|
+
console.warn(`[ClaudeRuntime] Quick SDK stderr [${sessionId}]: ${data.trimEnd()}`);
|
|
1720
|
+
},
|
|
1721
|
+
},
|
|
1722
|
+
}, {
|
|
1723
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
1724
|
+
outputLanguage: this.config.outputLanguage,
|
|
1725
|
+
});
|
|
1726
|
+
let finalResult;
|
|
1727
|
+
let quickRounds = 0;
|
|
1728
|
+
let terminationReason;
|
|
1729
|
+
let terminationMessage;
|
|
1730
|
+
// Quick path per-turn budget from env CLAUDE_QUICK_PER_TURN_MS (default 40s/turn).
|
|
1731
|
+
const timeoutMs = quickConfig.maxTurns * quickConfig.quickPathPerTurnMs;
|
|
1732
|
+
let timedOut = false;
|
|
1733
|
+
let safetyTimer;
|
|
1734
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
1735
|
+
safetyTimer = setTimeout(() => {
|
|
1736
|
+
timedOut = true;
|
|
1737
|
+
// Forcefully terminate SDK subprocess so queued MCP tool calls
|
|
1738
|
+
// stop running after analyzeQuick returns (prevents orphan queries).
|
|
1739
|
+
closeSdk();
|
|
1740
|
+
reject(new Error(`Quick analysis timeout after ${timeoutMs / 1000}s`));
|
|
1741
|
+
}, timeoutMs);
|
|
1742
|
+
});
|
|
1743
|
+
const processStream = async () => {
|
|
1744
|
+
for await (const msg of stream) {
|
|
1745
|
+
if (timedOut)
|
|
1746
|
+
break;
|
|
1747
|
+
const sdkResultError = getSdkResultErrorMessage(msg);
|
|
1748
|
+
if (sdkResultError)
|
|
1749
|
+
throw new Error(sdkResultError);
|
|
1750
|
+
try {
|
|
1751
|
+
bridge(msg);
|
|
1752
|
+
}
|
|
1753
|
+
catch { /* non-fatal */ }
|
|
1754
|
+
if (msg.type === 'result') {
|
|
1755
|
+
quickRounds = msg.num_turns || quickRounds;
|
|
1756
|
+
const resultSubtype = msg.subtype;
|
|
1757
|
+
if (resultSubtype === 'success') {
|
|
1758
|
+
finalResult = msg.result;
|
|
1759
|
+
}
|
|
1760
|
+
else if ((0, analysisTermination_1.isSdkMaxTurnsSubtype)(resultSubtype)) {
|
|
1761
|
+
terminationReason = analysisTermination_1.MAX_TURNS_TERMINATION_REASON;
|
|
1762
|
+
terminationMessage = (0, analysisTermination_1.buildMaxTurnsTerminationMessage)({
|
|
1763
|
+
mode: 'fast',
|
|
1764
|
+
turns: quickRounds,
|
|
1765
|
+
maxTurns: quickConfig.maxTurns,
|
|
1766
|
+
outputLanguage: this.config.outputLanguage,
|
|
1767
|
+
});
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
};
|
|
1772
|
+
try {
|
|
1773
|
+
await Promise.race([processStream(), timeoutPromise]);
|
|
1774
|
+
}
|
|
1775
|
+
catch (err) {
|
|
1776
|
+
if (timedOut) {
|
|
1777
|
+
console.warn('[ClaudeRuntime] Quick analysis timeout reached — SDK subprocess has been closed');
|
|
1778
|
+
}
|
|
1779
|
+
else {
|
|
1780
|
+
throw err;
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
finally {
|
|
1784
|
+
if (safetyTimer)
|
|
1785
|
+
clearTimeout(safetyTimer);
|
|
1786
|
+
closeSdk();
|
|
1787
|
+
}
|
|
1788
|
+
let conclusionText = finalResult || getAccumulatedAnswer() || '';
|
|
1789
|
+
let mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)([(0, claudeFindingExtractor_1.extractFindingsFromText)(conclusionText)]);
|
|
1790
|
+
const isPartialResult = terminationReason === analysisTermination_1.MAX_TURNS_TERMINATION_REASON;
|
|
1791
|
+
if (isPartialResult) {
|
|
1792
|
+
terminationMessage || (terminationMessage = (0, analysisTermination_1.buildMaxTurnsTerminationMessage)({
|
|
1793
|
+
mode: 'fast',
|
|
1794
|
+
turns: quickRounds,
|
|
1795
|
+
maxTurns: quickConfig.maxTurns,
|
|
1796
|
+
outputLanguage: this.config.outputLanguage,
|
|
1797
|
+
}));
|
|
1798
|
+
conclusionText = conclusionText.trim()
|
|
1799
|
+
? (0, analysisTermination_1.prependPartialNotice)(conclusionText, terminationMessage, this.config.outputLanguage)
|
|
1800
|
+
: (0, analysisTermination_1.buildMaxTurnsFallbackConclusion)({
|
|
1801
|
+
mode: 'fast',
|
|
1802
|
+
turns: quickRounds,
|
|
1803
|
+
maxTurns: quickConfig.maxTurns,
|
|
1804
|
+
outputLanguage: this.config.outputLanguage,
|
|
1805
|
+
});
|
|
1806
|
+
mergedFindings = (0, claudeFindingExtractor_1.mergeFindings)([(0, claudeFindingExtractor_1.extractFindingsFromText)(conclusionText)]);
|
|
1807
|
+
this.emitUpdate({
|
|
1808
|
+
type: 'degraded',
|
|
1809
|
+
content: {
|
|
1810
|
+
module: 'claudeRuntime',
|
|
1811
|
+
fallback: 'partial_result_after_max_turns',
|
|
1812
|
+
error: analysisTermination_1.SDK_MAX_TURNS_SUBTYPE,
|
|
1813
|
+
message: terminationMessage,
|
|
1814
|
+
partial: true,
|
|
1815
|
+
terminationReason,
|
|
1816
|
+
turns: quickRounds,
|
|
1817
|
+
maxTurns: quickConfig.maxTurns,
|
|
1818
|
+
},
|
|
1819
|
+
timestamp: Date.now(),
|
|
1820
|
+
});
|
|
1821
|
+
}
|
|
1822
|
+
const quickConfidenceBase = mergedFindings.length > 0 ? 0.8 : 0.5;
|
|
1823
|
+
const quickConfidence = isPartialResult
|
|
1824
|
+
? (0, analysisTermination_1.capPartialConfidence)(quickConfidenceBase, mergedFindings.length > 0)
|
|
1825
|
+
: quickConfidenceBase;
|
|
1826
|
+
if (conclusionText.length > 0 && conclusionText.length < 20) {
|
|
1827
|
+
console.warn(`[ClaudeRuntime] Quick: suspiciously short answer (${conclusionText.length} chars)`);
|
|
1828
|
+
}
|
|
1829
|
+
// Record turn in session context
|
|
1830
|
+
sessionContext.addTurn(query, {
|
|
1831
|
+
primaryGoal: query,
|
|
1832
|
+
aspects: [],
|
|
1833
|
+
expectedOutputType: 'summary',
|
|
1834
|
+
complexity: 'simple',
|
|
1835
|
+
followUpType: previousTurns.length > 0 ? 'extend' : 'initial',
|
|
1836
|
+
}, {
|
|
1837
|
+
agentId: 'claude-agent',
|
|
1838
|
+
success: true,
|
|
1839
|
+
findings: mergedFindings,
|
|
1840
|
+
confidence: quickConfidence,
|
|
1841
|
+
message: conclusionText,
|
|
1842
|
+
partial: isPartialResult || undefined,
|
|
1843
|
+
terminationReason,
|
|
1844
|
+
terminationMessage,
|
|
1845
|
+
}, mergedFindings);
|
|
1846
|
+
console.log(`[ClaudeRuntime] Quick analysis completed: ${quickRounds} rounds, ${Date.now() - startTime}ms, ${conclusionText.length} chars`);
|
|
1847
|
+
// Quick path writes to a separate 7-day bucket — see Self-Improving v3.3 §6.
|
|
1848
|
+
// Insights are weaker (no verifier, 10-turn budget), so they only surface
|
|
1849
|
+
// as fallbacks at injection time. A future full-path run on similar
|
|
1850
|
+
// features may promote the bucket entry to long-term memory.
|
|
1851
|
+
if (!isPartialResult && mergedFindings.length > 0) {
|
|
1852
|
+
const insights = (0, analysisPatternMemory_1.extractKeyInsights)(mergedFindings, conclusionText);
|
|
1853
|
+
const quickFeatures = (0, analysisPatternMemory_1.extractTraceFeatures)({
|
|
1854
|
+
architectureType: cachedArch?.type,
|
|
1855
|
+
sceneType,
|
|
1856
|
+
packageName: effectivePackageName,
|
|
1857
|
+
findingTitles: mergedFindings.map(f => f.title),
|
|
1858
|
+
findingCategories: mergedFindings.map(f => f.category).filter(Boolean),
|
|
1859
|
+
});
|
|
1860
|
+
(0, analysisPatternMemory_1.saveQuickPathPattern)(quickFeatures, insights, sceneType, cachedArch?.type, {
|
|
1861
|
+
status: 'provisional',
|
|
1862
|
+
provenance: { sessionId, turnIndex: previousTurns.length },
|
|
1863
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
1864
|
+
}).catch(err => console.warn('[ClaudeRuntime] Quick pattern save failed:', err.message));
|
|
1865
|
+
}
|
|
1866
|
+
return {
|
|
1867
|
+
sessionId,
|
|
1868
|
+
success: true,
|
|
1869
|
+
findings: mergedFindings,
|
|
1870
|
+
hypotheses: [],
|
|
1871
|
+
conclusion: conclusionText,
|
|
1872
|
+
confidence: quickConfidence,
|
|
1873
|
+
rounds: quickRounds,
|
|
1874
|
+
totalDurationMs: Date.now() - startTime,
|
|
1875
|
+
partial: isPartialResult || undefined,
|
|
1876
|
+
terminationReason,
|
|
1877
|
+
terminationMessage,
|
|
1878
|
+
};
|
|
1879
|
+
}
|
|
1880
|
+
catch (error) {
|
|
1881
|
+
const rawErrorMessage = error.message || 'Unknown error';
|
|
1882
|
+
const errMsg = (0, claudeConfig_1.explainClaudeRuntimeError)(rawErrorMessage, this.config.outputLanguage, (0, claudeConfig_1.getCredentialSourceHint)(options.providerId, providerScopeFromOptions(options)));
|
|
1883
|
+
const quotaExceeded = (0, claudeConfig_1.isClaudeQuotaError)(rawErrorMessage);
|
|
1884
|
+
console.error('[ClaudeRuntime] Quick analysis failed:', errMsg);
|
|
1885
|
+
this.emitUpdate({
|
|
1886
|
+
type: 'error',
|
|
1887
|
+
content: {
|
|
1888
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `快速问答失败: ${errMsg}`, `Fast Q&A failed: ${errMsg}`),
|
|
1889
|
+
},
|
|
1890
|
+
timestamp: Date.now(),
|
|
1891
|
+
});
|
|
1892
|
+
return {
|
|
1893
|
+
sessionId,
|
|
1894
|
+
success: false,
|
|
1895
|
+
findings: [],
|
|
1896
|
+
hypotheses: [],
|
|
1897
|
+
conclusion: (0, outputLanguage_1.localize)(this.config.outputLanguage, `快速问答过程中出错: ${errMsg}`, `An error occurred during fast Q&A: ${errMsg}`),
|
|
1898
|
+
confidence: 0,
|
|
1899
|
+
rounds: 0,
|
|
1900
|
+
totalDurationMs: Date.now() - startTime,
|
|
1901
|
+
terminationReason: quotaExceeded ? 'max_budget_usd' : 'execution_error',
|
|
1902
|
+
terminationMessage: errMsg,
|
|
1903
|
+
};
|
|
1904
|
+
}
|
|
1905
|
+
finally {
|
|
1906
|
+
this.activeAnalyses.delete(sessionId);
|
|
1907
|
+
try {
|
|
1908
|
+
if (!delegatedRetry) {
|
|
1909
|
+
metricsCollector.recordTurn();
|
|
1910
|
+
(0, agentMetrics_1.persistSessionMetrics)(metricsCollector.summarize());
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
catch (metricsErr) {
|
|
1914
|
+
console.warn('[ClaudeRuntime] Failed to persist quick metrics:', metricsErr.message);
|
|
1915
|
+
}
|
|
1916
|
+
}
|
|
1917
|
+
}
|
|
1918
|
+
removeSession(sessionId) {
|
|
1919
|
+
// Cancel any pending debounced save to prevent stale write after sync save
|
|
1920
|
+
const pendingTimer = saveTimers.get(this.sessionMap);
|
|
1921
|
+
if (pendingTimer) {
|
|
1922
|
+
clearTimeout(pendingTimer);
|
|
1923
|
+
saveTimers.delete(this.sessionMap);
|
|
1924
|
+
}
|
|
1925
|
+
this.removeSessionMapEntries(sessionId);
|
|
1926
|
+
this.artifactStores.delete(sessionId);
|
|
1927
|
+
this.sessionNotes.delete(sessionId);
|
|
1928
|
+
this.sessionSqlErrors.delete(sessionId);
|
|
1929
|
+
this.sessionPlans.delete(sessionId);
|
|
1930
|
+
this.sessionHypotheses.delete(sessionId);
|
|
1931
|
+
this.sessionUncertaintyFlags.delete(sessionId);
|
|
1932
|
+
this.activeAnalyses.delete(sessionId);
|
|
1933
|
+
if (enterpriseSessionMapDbWritesEnabled()) {
|
|
1934
|
+
try {
|
|
1935
|
+
(0, runtimeSnapshotStore_1.deleteClaudeSessionMapRuntimeSnapshots)(sessionId);
|
|
1936
|
+
}
|
|
1937
|
+
catch (err) {
|
|
1938
|
+
console.warn('[ClaudeRuntime] Failed to delete runtime_snapshots session map:', err.message);
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
if (legacySessionMapWritesEnabled()) {
|
|
1942
|
+
// Use immediate save — session is being removed, must persist before cleanup completes
|
|
1943
|
+
savePersistedSessionMapSync(this.sessionMap);
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1946
|
+
/** Clean up all session-scoped state for a given session. */
|
|
1947
|
+
cleanupSession(sessionId) {
|
|
1948
|
+
this.removeSession(sessionId);
|
|
1949
|
+
}
|
|
1950
|
+
/** P1-R3: Public getter for session notes — used by report generation. */
|
|
1951
|
+
getSessionNotes(sessionId) {
|
|
1952
|
+
return this.sessionNotes.get(sessionId) || [];
|
|
1953
|
+
}
|
|
1954
|
+
/** P1-R3: Public getter for current analysis plan — used by report generation. */
|
|
1955
|
+
getSessionPlan(sessionId) {
|
|
1956
|
+
return this.sessionPlans.get(sessionId)?.current ?? null;
|
|
1957
|
+
}
|
|
1958
|
+
/** P1-R3: Public getter for uncertainty flags — used by report generation. */
|
|
1959
|
+
getSessionUncertaintyFlags(sessionId) {
|
|
1960
|
+
return this.sessionUncertaintyFlags.get(sessionId) || [];
|
|
1961
|
+
}
|
|
1962
|
+
/** P1-1: Public getter for plan history — used for persistence. */
|
|
1963
|
+
getSessionPlanHistory(sessionId) {
|
|
1964
|
+
return this.sessionPlans.get(sessionId)?.history || [];
|
|
1965
|
+
}
|
|
1966
|
+
// ===========================================================================
|
|
1967
|
+
// Snapshot — atomic serialization / deserialization boundary
|
|
1968
|
+
// ===========================================================================
|
|
1969
|
+
/**
|
|
1970
|
+
* Take a snapshot of all session state for atomic persistence.
|
|
1971
|
+
*
|
|
1972
|
+
* Reads from ClaudeRuntime's 7 internal Maps (notes, plans, hypotheses,
|
|
1973
|
+
* flags, artifacts, architectureCache, sessionMap) and merges with
|
|
1974
|
+
* session-level arrays provided by the route layer.
|
|
1975
|
+
*
|
|
1976
|
+
* @param sessionId - The SmartPerfetto session ID
|
|
1977
|
+
* @param traceId - The trace ID
|
|
1978
|
+
* @param sessionFields - Session-level arrays from AnalysisSession (route layer)
|
|
1979
|
+
*/
|
|
1980
|
+
takeSnapshot(sessionId, traceId, sessionFields) {
|
|
1981
|
+
const notes = this.sessionNotes.get(sessionId) || [];
|
|
1982
|
+
const planState = this.sessionPlans.get(sessionId);
|
|
1983
|
+
const claudeHypotheses = this.sessionHypotheses.get(sessionId) || [];
|
|
1984
|
+
const flags = this.sessionUncertaintyFlags.get(sessionId) || [];
|
|
1985
|
+
const artifactStore = this.artifactStores.get(sessionId);
|
|
1986
|
+
const architecture = this.architectureCache.get(traceId);
|
|
1987
|
+
const sessionMapEntry = this.sessionMap.get(this.buildSessionMapKey(sessionId, sessionFields.referenceTraceId));
|
|
1988
|
+
const sdkSessionId = isFreshFullSdkSessionEntry(sessionMapEntry)
|
|
1989
|
+
? sessionMapEntry.sdkSessionId
|
|
1990
|
+
: undefined;
|
|
1991
|
+
return {
|
|
1992
|
+
version: 1,
|
|
1993
|
+
snapshotTimestamp: Date.now(),
|
|
1994
|
+
sessionId,
|
|
1995
|
+
traceId,
|
|
1996
|
+
// Session fields (route layer) — fields match SessionFieldsForSnapshot exactly
|
|
1997
|
+
...sessionFields,
|
|
1998
|
+
// ClaudeRuntime Maps
|
|
1999
|
+
analysisNotes: notes,
|
|
2000
|
+
analysisPlan: planState?.current ?? null,
|
|
2001
|
+
planHistory: planState?.history ?? [],
|
|
2002
|
+
uncertaintyFlags: flags,
|
|
2003
|
+
claudeHypotheses: claudeHypotheses.length > 0 ? claudeHypotheses : undefined,
|
|
2004
|
+
// Cached detection
|
|
2005
|
+
architecture,
|
|
2006
|
+
...(sdkSessionId ? { sdkSessionId, sdkSessionMode: 'full' } : {}),
|
|
2007
|
+
agentRuntimeKind: 'claude-agent-sdk',
|
|
2008
|
+
agentRuntimeProviderId: sessionFields.agentRuntimeProviderId,
|
|
2009
|
+
agentRuntimeProviderSnapshotHash: sessionFields.agentRuntimeProviderSnapshotHash,
|
|
2010
|
+
// Artifacts
|
|
2011
|
+
artifacts: artifactStore?.serialize(),
|
|
2012
|
+
};
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Restore all ClaudeRuntime Maps from a persisted snapshot.
|
|
2016
|
+
*
|
|
2017
|
+
* Called during session resume to repopulate the 7 internal Maps
|
|
2018
|
+
* that are normally built up during analysis.
|
|
2019
|
+
*
|
|
2020
|
+
* @param sessionId - The SmartPerfetto session ID
|
|
2021
|
+
* @param traceId - The trace ID (for architectureCache key)
|
|
2022
|
+
* @param snapshot - The persisted snapshot to restore from
|
|
2023
|
+
*/
|
|
2024
|
+
restoreFromSnapshot(sessionId, traceId, snapshot) {
|
|
2025
|
+
if (snapshot.analysisNotes.length > 0) {
|
|
2026
|
+
this.sessionNotes.set(sessionId, [...snapshot.analysisNotes]);
|
|
2027
|
+
}
|
|
2028
|
+
if (snapshot.analysisPlan || snapshot.planHistory.length > 0) {
|
|
2029
|
+
this.sessionPlans.set(sessionId, {
|
|
2030
|
+
current: snapshot.analysisPlan,
|
|
2031
|
+
history: snapshot.planHistory,
|
|
2032
|
+
});
|
|
2033
|
+
}
|
|
2034
|
+
if (snapshot.claudeHypotheses && snapshot.claudeHypotheses.length > 0) {
|
|
2035
|
+
this.sessionHypotheses.set(sessionId, [...snapshot.claudeHypotheses]);
|
|
2036
|
+
}
|
|
2037
|
+
if (snapshot.uncertaintyFlags.length > 0) {
|
|
2038
|
+
this.sessionUncertaintyFlags.set(sessionId, [...snapshot.uncertaintyFlags]);
|
|
2039
|
+
}
|
|
2040
|
+
if (snapshot.artifacts && snapshot.artifacts.length > 0) {
|
|
2041
|
+
this.artifactStores.set(sessionId, artifactStore_1.ArtifactStore.fromSnapshot(snapshot.artifacts));
|
|
2042
|
+
}
|
|
2043
|
+
if (snapshot.architecture) {
|
|
2044
|
+
this.architectureCache.set(traceId, snapshot.architecture);
|
|
2045
|
+
}
|
|
2046
|
+
if (snapshot.sdkSessionId && snapshot.sdkSessionMode === 'full') {
|
|
2047
|
+
this.sessionMap.set(this.buildSessionMapKey(sessionId, snapshot.referenceTraceId), {
|
|
2048
|
+
sdkSessionId: snapshot.sdkSessionId,
|
|
2049
|
+
updatedAt: snapshot.snapshotTimestamp || Date.now(),
|
|
2050
|
+
mode: 'full',
|
|
2051
|
+
});
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
/** P0-1: Convert agentv3 Hypothesis to agentProtocol Hypothesis format for AnalysisResult. */
|
|
2055
|
+
toProtocolHypothesis(h) {
|
|
2056
|
+
const statusMap = {
|
|
2057
|
+
formed: 'proposed',
|
|
2058
|
+
confirmed: 'confirmed',
|
|
2059
|
+
rejected: 'rejected',
|
|
2060
|
+
};
|
|
2061
|
+
const confidenceMap = { formed: 0.5, confirmed: 0.85, rejected: 0.1 };
|
|
2062
|
+
return {
|
|
2063
|
+
id: h.id,
|
|
2064
|
+
description: h.statement,
|
|
2065
|
+
status: statusMap[h.status] || 'proposed',
|
|
2066
|
+
confidence: confidenceMap[h.status] ?? 0.5,
|
|
2067
|
+
supportingEvidence: h.evidence && h.status === 'confirmed' ? [{ id: `${h.id}-ev`, type: 'observation', description: h.evidence, source: 'claude', strength: 0.8 }] : [],
|
|
2068
|
+
contradictingEvidence: h.evidence && h.status === 'rejected' ? [{ id: `${h.id}-ev`, type: 'observation', description: h.evidence, source: 'claude', strength: 0.8 }] : [],
|
|
2069
|
+
proposedBy: 'claude',
|
|
2070
|
+
relevantAgents: ['claude'],
|
|
2071
|
+
createdAt: h.formedAt,
|
|
2072
|
+
updatedAt: h.resolvedAt || h.formedAt,
|
|
2073
|
+
};
|
|
2074
|
+
}
|
|
2075
|
+
reset() {
|
|
2076
|
+
this.architectureCache.clear();
|
|
2077
|
+
this.vendorCache.clear();
|
|
2078
|
+
this.completenessCache.clear();
|
|
2079
|
+
// Also clear all session-scoped stores to prevent unbounded growth
|
|
2080
|
+
this.artifactStores.clear();
|
|
2081
|
+
this.sessionNotes.clear();
|
|
2082
|
+
this.sessionSqlErrors.clear();
|
|
2083
|
+
this.sessionPlans.clear();
|
|
2084
|
+
this.sessionHypotheses.clear();
|
|
2085
|
+
this.sessionUncertaintyFlags.clear();
|
|
2086
|
+
this.activeAnalyses.clear();
|
|
2087
|
+
}
|
|
2088
|
+
emitUpdate(update) {
|
|
2089
|
+
this.emit('update', update);
|
|
2090
|
+
}
|
|
2091
|
+
/**
|
|
2092
|
+
* Collect the most recent findings from previous turns for system prompt injection.
|
|
2093
|
+
* Caps at 5 findings to prevent unbounded prompt growth.
|
|
2094
|
+
*/
|
|
2095
|
+
collectPreviousFindings(sessionContext, maxTurns) {
|
|
2096
|
+
try {
|
|
2097
|
+
let turns = sessionContext.getAllTurns?.() || [];
|
|
2098
|
+
if (maxTurns && maxTurns > 0) {
|
|
2099
|
+
turns = turns.slice(-maxTurns);
|
|
2100
|
+
}
|
|
2101
|
+
return turns.flatMap((turn) => turn.findings || []).slice(-5);
|
|
2102
|
+
}
|
|
2103
|
+
catch {
|
|
2104
|
+
return [];
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
/**
|
|
2108
|
+
* Build a compact entity context string for the system prompt.
|
|
2109
|
+
* Gives Claude awareness of known frames/sessions for drill-down resolution.
|
|
2110
|
+
*/
|
|
2111
|
+
buildEntityContext(entityStore) {
|
|
2112
|
+
try {
|
|
2113
|
+
const stats = entityStore.getStats();
|
|
2114
|
+
if (stats.totalEntityCount === 0)
|
|
2115
|
+
return undefined;
|
|
2116
|
+
const lines = [];
|
|
2117
|
+
const frames = entityStore.getAllFrames?.() || [];
|
|
2118
|
+
if (frames.length > 0) {
|
|
2119
|
+
lines.push(`**帧 (${frames.length})**:`);
|
|
2120
|
+
for (const f of frames.slice(0, 15)) {
|
|
2121
|
+
const parts = [`frame_id=${f.frame_id}`];
|
|
2122
|
+
if (f.start_ts)
|
|
2123
|
+
parts.push(`ts=${f.start_ts}`);
|
|
2124
|
+
if (f.jank_type)
|
|
2125
|
+
parts.push(`jank=${f.jank_type}`);
|
|
2126
|
+
if (f.dur_ms)
|
|
2127
|
+
parts.push(`dur=${f.dur_ms}ms`);
|
|
2128
|
+
if (f.process_name)
|
|
2129
|
+
parts.push(`proc=${f.process_name}`);
|
|
2130
|
+
lines.push(`- ${parts.join(', ')}`);
|
|
2131
|
+
}
|
|
2132
|
+
if (frames.length > 15)
|
|
2133
|
+
lines.push(`- ...及其他 ${frames.length - 15} 帧`);
|
|
2134
|
+
}
|
|
2135
|
+
const sessions = entityStore.getAllSessions?.() || [];
|
|
2136
|
+
if (sessions.length > 0) {
|
|
2137
|
+
lines.push(`**滑动会话 (${sessions.length})**:`);
|
|
2138
|
+
for (const s of sessions.slice(0, 8)) {
|
|
2139
|
+
const parts = [`session_id=${s.session_id}`];
|
|
2140
|
+
if (s.start_ts)
|
|
2141
|
+
parts.push(`ts=${s.start_ts}`);
|
|
2142
|
+
if (s.jank_count)
|
|
2143
|
+
parts.push(`janks=${s.jank_count}`);
|
|
2144
|
+
if (s.process_name)
|
|
2145
|
+
parts.push(`proc=${s.process_name}`);
|
|
2146
|
+
lines.push(`- ${parts.join(', ')}`);
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
return lines.length > 0 ? lines.join('\n') : undefined;
|
|
2150
|
+
}
|
|
2151
|
+
catch {
|
|
2152
|
+
return undefined;
|
|
2153
|
+
}
|
|
2154
|
+
}
|
|
2155
|
+
/**
|
|
2156
|
+
* Prepare all context needed for a Claude analysis run.
|
|
2157
|
+
* Extracts focus app detection, architecture detection, session context,
|
|
2158
|
+
* scene classification, MCP server creation, and system prompt building
|
|
2159
|
+
* into a single cohesive preparation phase.
|
|
2160
|
+
*/
|
|
2161
|
+
async prepareAnalysisContext(query, sessionId, traceId, options, precomputed) {
|
|
2162
|
+
// Phase 0: Selection context logging
|
|
2163
|
+
if (options.selectionContext) {
|
|
2164
|
+
const sc = options.selectionContext;
|
|
2165
|
+
const detail = sc.kind === 'area'
|
|
2166
|
+
? `startNs=${sc.startNs}, endNs=${sc.endNs}`
|
|
2167
|
+
: `eventId=${sc.eventId}, ts=${sc.ts}`;
|
|
2168
|
+
console.log(`[ClaudeRuntime] Selection context received: kind=${sc.kind}, ${detail}`);
|
|
2169
|
+
}
|
|
2170
|
+
// Phase 0.5: Detect focus apps from trace data (reuse precomputed if available)
|
|
2171
|
+
let effectivePackageName = options.packageName;
|
|
2172
|
+
const focusResult = precomputed?.focusResult ?? await (0, focusAppDetector_1.detectFocusApps)(this.traceProcessorService, traceId);
|
|
2173
|
+
if (focusResult.primaryApp) {
|
|
2174
|
+
if (!effectivePackageName) {
|
|
2175
|
+
effectivePackageName = focusResult.primaryApp;
|
|
2176
|
+
console.log(`[ClaudeRuntime] Auto-detected focus app: ${effectivePackageName} (via ${focusResult.method})`);
|
|
2177
|
+
}
|
|
2178
|
+
else {
|
|
2179
|
+
console.log(`[ClaudeRuntime] User-provided packageName: ${effectivePackageName}, also detected: ${focusResult.apps.map(a => a.packageName).join(', ')}`);
|
|
2180
|
+
}
|
|
2181
|
+
this.emitUpdate({
|
|
2182
|
+
type: 'progress',
|
|
2183
|
+
content: {
|
|
2184
|
+
phase: 'starting',
|
|
2185
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, `检测到焦点应用: ${focusResult.primaryApp} (${focusResult.method})`, `Detected focus app: ${focusResult.primaryApp} (${focusResult.method})`),
|
|
2186
|
+
},
|
|
2187
|
+
timestamp: Date.now(),
|
|
2188
|
+
});
|
|
2189
|
+
}
|
|
2190
|
+
// Phase 1: Skill executor setup
|
|
2191
|
+
const skillExecutor = (0, skillExecutor_1.createSkillExecutor)(this.traceProcessorService);
|
|
2192
|
+
await (0, skillLoader_1.ensureSkillRegistryInitialized)();
|
|
2193
|
+
skillExecutor.registerSkills(skillLoader_1.skillRegistry.getAllSkills());
|
|
2194
|
+
skillExecutor.setFragmentRegistry(skillLoader_1.skillRegistry.getFragmentCache());
|
|
2195
|
+
// Phase 2: Architecture detection (LRU cached per traceId)
|
|
2196
|
+
let architecture = this.architectureCache.get(traceId);
|
|
2197
|
+
if (architecture) {
|
|
2198
|
+
// LRU touch: delete and re-insert to move to end of Map iteration order
|
|
2199
|
+
this.architectureCache.delete(traceId);
|
|
2200
|
+
this.architectureCache.set(traceId, architecture);
|
|
2201
|
+
}
|
|
2202
|
+
else {
|
|
2203
|
+
try {
|
|
2204
|
+
const detector = (0, architectureDetector_1.createArchitectureDetector)();
|
|
2205
|
+
architecture = await detector.detect({
|
|
2206
|
+
traceId,
|
|
2207
|
+
traceProcessorService: this.traceProcessorService,
|
|
2208
|
+
packageName: effectivePackageName,
|
|
2209
|
+
});
|
|
2210
|
+
if (architecture) {
|
|
2211
|
+
this.architectureCache.set(traceId, architecture);
|
|
2212
|
+
// LRU eviction: remove oldest entry (first key in Map)
|
|
2213
|
+
if (this.architectureCache.size > 50) {
|
|
2214
|
+
const firstKey = this.architectureCache.keys().next().value;
|
|
2215
|
+
if (firstKey)
|
|
2216
|
+
this.architectureCache.delete(firstKey);
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
this.emitUpdate({ type: 'architecture_detected', content: { architecture }, timestamp: Date.now() });
|
|
2220
|
+
}
|
|
2221
|
+
catch (err) {
|
|
2222
|
+
console.warn('[ClaudeRuntime] Architecture detection failed:', err.message);
|
|
2223
|
+
}
|
|
2224
|
+
}
|
|
2225
|
+
// Phase 2.5: Vendor detection (LRU cached per traceId, reuses SkillAnalysisAdapter.detectVendor)
|
|
2226
|
+
let detectedVendor = this.vendorCache.get(traceId) ?? null;
|
|
2227
|
+
if (!detectedVendor) {
|
|
2228
|
+
try {
|
|
2229
|
+
const adapter = (0, skillAnalysisAdapter_1.getSkillAnalysisAdapter)(this.traceProcessorService);
|
|
2230
|
+
await adapter.ensureInitialized();
|
|
2231
|
+
const vendorResult = await adapter.detectVendor(traceId);
|
|
2232
|
+
detectedVendor = vendorResult.vendor;
|
|
2233
|
+
if (detectedVendor && detectedVendor !== 'aosp') {
|
|
2234
|
+
this.vendorCache.set(traceId, detectedVendor);
|
|
2235
|
+
// LRU eviction: match architectureCache limit
|
|
2236
|
+
if (this.vendorCache.size > 50) {
|
|
2237
|
+
const firstKey = this.vendorCache.keys().next().value;
|
|
2238
|
+
if (firstKey)
|
|
2239
|
+
this.vendorCache.delete(firstKey);
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
catch (err) {
|
|
2244
|
+
console.warn('[ClaudeRuntime] Vendor detection failed:', err.message);
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
2247
|
+
// Phase 2.8: Comparison context (dual-trace mode)
|
|
2248
|
+
let comparisonContext;
|
|
2249
|
+
const referenceTraceId = options.referenceTraceId;
|
|
2250
|
+
if (referenceTraceId) {
|
|
2251
|
+
console.log(`[ClaudeRuntime] Comparison mode: current=${traceId}, reference=${referenceTraceId}`);
|
|
2252
|
+
this.emitUpdate({
|
|
2253
|
+
type: 'progress',
|
|
2254
|
+
content: {
|
|
2255
|
+
phase: 'starting',
|
|
2256
|
+
message: (0, outputLanguage_1.localize)(this.config.outputLanguage, '对比模式:正在检测参考 Trace...', 'Comparison mode: detecting the reference trace...'),
|
|
2257
|
+
},
|
|
2258
|
+
timestamp: Date.now(),
|
|
2259
|
+
});
|
|
2260
|
+
// Detect reference trace focus app, architecture, AND capability handshake in parallel
|
|
2261
|
+
const capSql = "SELECT name FROM sqlite_master WHERE type IN ('table', 'view') AND (name LIKE 'android_%' OR name LIKE 'linux_%' OR name LIKE 'sched_%' OR name LIKE 'slices_%')";
|
|
2262
|
+
const [refFocusResult, refArchitecture, currentTables, refTables] = await Promise.all([
|
|
2263
|
+
(0, focusAppDetector_1.detectFocusApps)(this.traceProcessorService, referenceTraceId).catch(() => ({ apps: [], method: 'none', primaryApp: undefined })),
|
|
2264
|
+
(async () => {
|
|
2265
|
+
let refArch = this.architectureCache.get(referenceTraceId);
|
|
2266
|
+
if (!refArch) {
|
|
2267
|
+
try {
|
|
2268
|
+
const detector = (0, architectureDetector_1.createArchitectureDetector)();
|
|
2269
|
+
refArch = await detector.detect({
|
|
2270
|
+
traceId: referenceTraceId,
|
|
2271
|
+
traceProcessorService: this.traceProcessorService,
|
|
2272
|
+
packageName: undefined,
|
|
2273
|
+
}) ?? undefined;
|
|
2274
|
+
if (refArch)
|
|
2275
|
+
this.architectureCache.set(referenceTraceId, refArch);
|
|
2276
|
+
}
|
|
2277
|
+
catch { /* non-fatal */ }
|
|
2278
|
+
}
|
|
2279
|
+
return refArch;
|
|
2280
|
+
})(),
|
|
2281
|
+
this.traceProcessorService.query(traceId, capSql).catch((e) => { console.warn('[ClaudeRuntime] Capability query failed for current trace:', e.message); return null; }),
|
|
2282
|
+
this.traceProcessorService.query(referenceTraceId, capSql).catch((e) => { console.warn('[ClaudeRuntime] Capability query failed for reference trace:', e.message); return null; }),
|
|
2283
|
+
]);
|
|
2284
|
+
// Capability handshake: compute intersection of available tables on both trace processors
|
|
2285
|
+
// null = query failed (unhealthy processor), non-null = actual result
|
|
2286
|
+
let commonCapabilities = [];
|
|
2287
|
+
let capabilityDiff;
|
|
2288
|
+
if (currentTables && refTables) {
|
|
2289
|
+
const currentSet = new Set(currentTables.rows.map((r) => r[0]));
|
|
2290
|
+
const refSet = new Set(refTables.rows.map((r) => r[0]));
|
|
2291
|
+
commonCapabilities = [...currentSet].filter(t => refSet.has(t));
|
|
2292
|
+
const currentOnly = [...currentSet].filter(t => !refSet.has(t));
|
|
2293
|
+
const referenceOnly = [...refSet].filter(t => !currentSet.has(t));
|
|
2294
|
+
if (currentOnly.length > 0 || referenceOnly.length > 0) {
|
|
2295
|
+
capabilityDiff = { currentOnly, referenceOnly };
|
|
2296
|
+
}
|
|
2297
|
+
}
|
|
2298
|
+
else {
|
|
2299
|
+
console.warn('[ClaudeRuntime] Capability handshake incomplete — one or both trace processors unhealthy');
|
|
2300
|
+
}
|
|
2301
|
+
comparisonContext = {
|
|
2302
|
+
referenceTraceId,
|
|
2303
|
+
referencePackageName: refFocusResult.primaryApp,
|
|
2304
|
+
referenceFocusApps: refFocusResult.apps.length > 0 ? refFocusResult.apps : undefined,
|
|
2305
|
+
referenceArchitecture: refArchitecture,
|
|
2306
|
+
commonCapabilities,
|
|
2307
|
+
capabilityDiff,
|
|
2308
|
+
};
|
|
2309
|
+
console.log(`[ClaudeRuntime] Comparison context built: refApp=${refFocusResult.primaryApp || 'unknown'}, ` +
|
|
2310
|
+
`refArch=${refArchitecture?.type || 'unknown'}, commonCaps=${commonCapabilities.length}, ` +
|
|
2311
|
+
`capDiff=${capabilityDiff ? `cur=${capabilityDiff.currentOnly.length}/ref=${capabilityDiff.referenceOnly.length}` : 'none'}`);
|
|
2312
|
+
}
|
|
2313
|
+
// Phase 2.9: Trace data completeness probe (cached per traceId, ~50ms first run)
|
|
2314
|
+
let traceCompleteness = this.completenessCache.get(traceId);
|
|
2315
|
+
if (!traceCompleteness) {
|
|
2316
|
+
try {
|
|
2317
|
+
traceCompleteness = await (0, traceCompletenessProber_1.probeTraceCompleteness)(this.traceProcessorService, traceId, architecture?.type);
|
|
2318
|
+
this.completenessCache.set(traceId, traceCompleteness);
|
|
2319
|
+
if (this.completenessCache.size > 50) {
|
|
2320
|
+
const firstKey = this.completenessCache.keys().next().value;
|
|
2321
|
+
if (firstKey)
|
|
2322
|
+
this.completenessCache.delete(firstKey);
|
|
2323
|
+
}
|
|
2324
|
+
}
|
|
2325
|
+
catch (err) {
|
|
2326
|
+
console.warn('[ClaudeRuntime] Trace completeness probe failed (non-fatal):', err.message);
|
|
2327
|
+
}
|
|
2328
|
+
}
|
|
2329
|
+
// Phase 3: Session context + conversation history (reuse precomputed if available)
|
|
2330
|
+
const sessionContext = precomputed?.sessionContext ?? enhancedSessionContext_1.sessionContextManager.getOrCreate(sessionId, traceId);
|
|
2331
|
+
const previousTurns = precomputed?.previousTurns ?? (sessionContext.getAllTurns?.() || []);
|
|
2332
|
+
// Composite key for comparison mode session identity isolation
|
|
2333
|
+
const sessionMapKey = this.buildSessionMapKey(sessionId, referenceTraceId);
|
|
2334
|
+
const sessionMapEntry = this.sessionMap.get(sessionMapKey);
|
|
2335
|
+
const existingSdkSession = isFreshFullSdkSessionEntry(sessionMapEntry)
|
|
2336
|
+
? sessionMapEntry.sdkSessionId
|
|
2337
|
+
: undefined;
|
|
2338
|
+
// P0-3: SDK sessions on Anthropic's side expire after ~4 hours.
|
|
2339
|
+
// If the local sessionMap entry is stale, treat it as expired and inject full manual context.
|
|
2340
|
+
// Without this check, `hasActiveResume` stays true for stale entries, causing the system
|
|
2341
|
+
// to skip both SDK context (expired) AND manual context injection → silent context loss.
|
|
2342
|
+
const hasActiveResume = !!existingSdkSession;
|
|
2343
|
+
const previousFindings = hasActiveResume
|
|
2344
|
+
? [] // SDK already has these in conversation history
|
|
2345
|
+
: this.collectPreviousFindings(sessionContext);
|
|
2346
|
+
const conversationSummary = previousTurns.length > 0 && !hasActiveResume
|
|
2347
|
+
? sessionContext.generatePromptContext(2000)
|
|
2348
|
+
: undefined;
|
|
2349
|
+
// Phase 4: Entity store + entity context for drill-down
|
|
2350
|
+
const entityStore = sessionContext.getEntityStore();
|
|
2351
|
+
const entityContext = this.buildEntityContext(entityStore);
|
|
2352
|
+
// Phase 5: Scene classification + effort resolution (reuse precomputed if available)
|
|
2353
|
+
const sceneType = precomputed?.sceneType ?? (0, sceneClassifier_1.classifyScene)(query);
|
|
2354
|
+
const effectiveEffort = (0, claudeConfig_1.resolveEffort)(this.config, sceneType);
|
|
2355
|
+
// Phase 5.5: Pattern memory — match similar historical traces (P2-2)
|
|
2356
|
+
const traceFeatures = (0, analysisPatternMemory_1.extractTraceFeatures)({
|
|
2357
|
+
architectureType: architecture?.type,
|
|
2358
|
+
sceneType,
|
|
2359
|
+
packageName: effectivePackageName,
|
|
2360
|
+
});
|
|
2361
|
+
const patternContext = (0, analysisPatternMemory_1.buildPatternContextSection)(traceFeatures, knowledgeScopeFromOptions(options));
|
|
2362
|
+
const negativePatternContext = (0, analysisPatternMemory_1.buildNegativePatternSection)(traceFeatures, knowledgeScopeFromOptions(options));
|
|
2363
|
+
// Phase 6: Session-scoped artifact store + analysis notes
|
|
2364
|
+
if (!this.artifactStores.has(sessionId)) {
|
|
2365
|
+
this.artifactStores.set(sessionId, new artifactStore_1.ArtifactStore());
|
|
2366
|
+
}
|
|
2367
|
+
const artifactStore = this.artifactStores.get(sessionId);
|
|
2368
|
+
// Notes restored from SessionStateSnapshot on resume — no separate disk I/O.
|
|
2369
|
+
let notes = this.sessionNotes.get(sessionId);
|
|
2370
|
+
if (!notes) {
|
|
2371
|
+
notes = [];
|
|
2372
|
+
this.sessionNotes.set(sessionId, notes);
|
|
2373
|
+
}
|
|
2374
|
+
// Phase 6.5: Session-scoped analysis plan (P0-1: Planning capability)
|
|
2375
|
+
if (!this.sessionPlans.has(sessionId)) {
|
|
2376
|
+
this.sessionPlans.set(sessionId, { current: null, history: [] });
|
|
2377
|
+
}
|
|
2378
|
+
const analysisPlan = this.sessionPlans.get(sessionId);
|
|
2379
|
+
// P1-B1: Preserve plan history (max 3 recent plans) for deeper cross-turn context
|
|
2380
|
+
if (analysisPlan.current) {
|
|
2381
|
+
analysisPlan.history.push(analysisPlan.current);
|
|
2382
|
+
if (analysisPlan.history.length > 3)
|
|
2383
|
+
analysisPlan.history.shift();
|
|
2384
|
+
}
|
|
2385
|
+
const previousPlan = analysisPlan.current ?? undefined;
|
|
2386
|
+
analysisPlan.current = null;
|
|
2387
|
+
// Phase 6.6: Watchdog feedback ref — shared between runtime watchdog and MCP tools
|
|
2388
|
+
const watchdogWarning = { current: null };
|
|
2389
|
+
// Phase 6.7: Session-scoped hypotheses for hypothesis-verify cycle (P0-G4)
|
|
2390
|
+
if (!this.sessionHypotheses.has(sessionId)) {
|
|
2391
|
+
this.sessionHypotheses.set(sessionId, []);
|
|
2392
|
+
}
|
|
2393
|
+
const hypotheses = this.sessionHypotheses.get(sessionId);
|
|
2394
|
+
// Reset for new turn (hypotheses are per-turn, resolved within each analysis cycle)
|
|
2395
|
+
hypotheses.splice(0);
|
|
2396
|
+
// Phase 6.8: Session-scoped uncertainty flags (P1-G1)
|
|
2397
|
+
if (!this.sessionUncertaintyFlags.has(sessionId)) {
|
|
2398
|
+
this.sessionUncertaintyFlags.set(sessionId, []);
|
|
2399
|
+
}
|
|
2400
|
+
const uncertaintyFlags = this.sessionUncertaintyFlags.get(sessionId);
|
|
2401
|
+
uncertaintyFlags.splice(0); // Reset per turn
|
|
2402
|
+
// Phase 7: SQL error tracking for in-context learning
|
|
2403
|
+
// Seed new sessions with previously learned fix pairs from disk (cross-session learning)
|
|
2404
|
+
let sqlErrors = this.sessionSqlErrors.get(sessionId);
|
|
2405
|
+
if (!sqlErrors) {
|
|
2406
|
+
sqlErrors = (0, claudeMcpServer_1.loadLearnedSqlFixPairs)(5, knowledgeScopeFromOptions(options));
|
|
2407
|
+
this.sessionSqlErrors.set(sessionId, sqlErrors);
|
|
2408
|
+
}
|
|
2409
|
+
// Phase 8: MCP server with all session-scoped state
|
|
2410
|
+
// P2-G1: Destructure to get both server and auto-derived allowedTools
|
|
2411
|
+
const fullNotesBudget = process.env.SELF_IMPROVE_NOTES_INJECT_ENABLED === '1'
|
|
2412
|
+
? new skillNotesInjector_1.SkillNotesBudget({ mode: 'full' })
|
|
2413
|
+
: undefined;
|
|
2414
|
+
const { server: mcpServer, allowedTools } = (0, claudeMcpServer_1.createClaudeMcpServer)({
|
|
2415
|
+
traceId,
|
|
2416
|
+
traceProcessorService: this.traceProcessorService,
|
|
2417
|
+
skillExecutor,
|
|
2418
|
+
packageName: effectivePackageName,
|
|
2419
|
+
emitUpdate: (update) => this.emitUpdate(update),
|
|
2420
|
+
onSkillResult: (result) => {
|
|
2421
|
+
if (result.displayResults) {
|
|
2422
|
+
this.captureEntitiesFromSkillDisplayResults(result.displayResults, entityStore);
|
|
2423
|
+
}
|
|
2424
|
+
},
|
|
2425
|
+
analysisNotes: notes,
|
|
2426
|
+
artifactStore,
|
|
2427
|
+
cachedArchitecture: architecture,
|
|
2428
|
+
cachedVendor: detectedVendor,
|
|
2429
|
+
recentSqlErrors: sqlErrors,
|
|
2430
|
+
analysisPlan,
|
|
2431
|
+
watchdogWarning,
|
|
2432
|
+
hypotheses,
|
|
2433
|
+
sceneType,
|
|
2434
|
+
uncertaintyFlags,
|
|
2435
|
+
referenceTraceId,
|
|
2436
|
+
comparisonContext,
|
|
2437
|
+
skillNotesBudget: fullNotesBudget,
|
|
2438
|
+
outputLanguage: this.config.outputLanguage,
|
|
2439
|
+
knowledgeScope: knowledgeScopeFromOptions(options),
|
|
2440
|
+
});
|
|
2441
|
+
// Phase 9: (removed — skillCatalog was populated but never used in prompt;
|
|
2442
|
+
// Claude uses list_skills MCP tool on demand instead)
|
|
2443
|
+
// Phase 10: Knowledge base context (non-fatal — Claude can use lookup_sql_schema tool)
|
|
2444
|
+
let knowledgeBaseContext;
|
|
2445
|
+
try {
|
|
2446
|
+
const kb = await (0, sqlKnowledgeBase_1.getExtendedKnowledgeBase)();
|
|
2447
|
+
knowledgeBaseContext = kb.getContextForAI(query, 8);
|
|
2448
|
+
}
|
|
2449
|
+
catch {
|
|
2450
|
+
// Non-fatal
|
|
2451
|
+
}
|
|
2452
|
+
// Phase 11: Sub-agent definitions (feature-gated)
|
|
2453
|
+
let agents;
|
|
2454
|
+
if (this.config.enableSubAgents && sceneType !== 'anr') {
|
|
2455
|
+
agents = (0, claudeAgentDefinitions_1.buildAgentDefinitions)(sceneType, {
|
|
2456
|
+
architecture,
|
|
2457
|
+
packageName: effectivePackageName,
|
|
2458
|
+
allowedTools,
|
|
2459
|
+
subAgentModel: this.config.subAgentModel,
|
|
2460
|
+
});
|
|
2461
|
+
}
|
|
2462
|
+
// Phase 12: SQL error-fix pairs for prompt injection
|
|
2463
|
+
const sqlErrorFixPairs = sqlErrors
|
|
2464
|
+
.filter((e) => e.fixedSql)
|
|
2465
|
+
.slice(-3)
|
|
2466
|
+
.map((e) => ({ errorSql: e.errorSql, errorMessage: e.errorMessage, fixedSql: e.fixedSql }));
|
|
2467
|
+
// Phase 13: System prompt assembly
|
|
2468
|
+
const traceInfo = this.traceProcessorService.getTrace(traceId);
|
|
2469
|
+
const analysisContextForRebuild = {
|
|
2470
|
+
query,
|
|
2471
|
+
architecture,
|
|
2472
|
+
packageName: effectivePackageName,
|
|
2473
|
+
focusApps: focusResult.apps.length > 0 ? focusResult.apps : undefined,
|
|
2474
|
+
focusMethod: focusResult.method,
|
|
2475
|
+
previousFindings,
|
|
2476
|
+
conversationSummary,
|
|
2477
|
+
knowledgeBaseContext,
|
|
2478
|
+
entityContext,
|
|
2479
|
+
sceneType,
|
|
2480
|
+
analysisNotes: notes.length > 0 ? notes : undefined,
|
|
2481
|
+
availableAgents: agents ? Object.keys(agents) : undefined,
|
|
2482
|
+
sqlErrorFixPairs: sqlErrorFixPairs.length > 0 ? sqlErrorFixPairs : undefined,
|
|
2483
|
+
patternContext,
|
|
2484
|
+
negativePatternContext,
|
|
2485
|
+
previousPlan,
|
|
2486
|
+
planHistory: analysisPlan.history.length > 0 ? analysisPlan.history : undefined,
|
|
2487
|
+
selectionContext: options.selectionContext,
|
|
2488
|
+
comparison: comparisonContext,
|
|
2489
|
+
traceCompleteness,
|
|
2490
|
+
traceOs: traceInfo?.traceOs,
|
|
2491
|
+
traceFormat: traceInfo?.traceFormat,
|
|
2492
|
+
outputLanguage: this.config.outputLanguage,
|
|
2493
|
+
};
|
|
2494
|
+
const systemPrompt = (0, claudeSystemPrompt_1.buildSystemPrompt)(analysisContextForRebuild);
|
|
2495
|
+
return {
|
|
2496
|
+
mcpServer,
|
|
2497
|
+
systemPrompt,
|
|
2498
|
+
effectiveEffort,
|
|
2499
|
+
agents,
|
|
2500
|
+
sessionContext,
|
|
2501
|
+
previousTurns,
|
|
2502
|
+
entityStore,
|
|
2503
|
+
analysisPlan,
|
|
2504
|
+
architecture,
|
|
2505
|
+
watchdogWarning,
|
|
2506
|
+
hypotheses,
|
|
2507
|
+
sceneType,
|
|
2508
|
+
allowedTools, // P2-G1: auto-derived from MCP server registration
|
|
2509
|
+
analysisContextForRebuild, // Used by correction retry to rebuild prompt with reduced budget
|
|
2510
|
+
sessionMapKey, // Composite key for comparison mode session identity isolation
|
|
2511
|
+
};
|
|
2512
|
+
}
|
|
2513
|
+
estimateConfidence(findings) {
|
|
2514
|
+
if (findings.length === 0)
|
|
2515
|
+
return 0.3;
|
|
2516
|
+
const avg = findings.reduce((sum, f) => sum + (f.confidence ?? 0.5), 0) / findings.length;
|
|
2517
|
+
return Math.min(1, Math.max(0, avg));
|
|
2518
|
+
}
|
|
2519
|
+
/** Capture entities from skill displayResults into EntityStore for multi-turn drill-down. */
|
|
2520
|
+
captureEntitiesFromSkillDisplayResults(displayResults, entityStore) {
|
|
2521
|
+
try {
|
|
2522
|
+
const data = {};
|
|
2523
|
+
for (const dr of displayResults) {
|
|
2524
|
+
if (dr.stepId && dr.data) {
|
|
2525
|
+
data[dr.stepId] = dr.data;
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
const captured = (0, entityCapture_1.captureEntitiesFromResponses)([{
|
|
2529
|
+
agentId: 'claude-agent',
|
|
2530
|
+
success: true,
|
|
2531
|
+
toolResults: [{ toolName: 'invoke_skill', data }],
|
|
2532
|
+
}]);
|
|
2533
|
+
(0, entityCapture_1.applyCapturedEntities)(entityStore, captured);
|
|
2534
|
+
}
|
|
2535
|
+
catch (err) {
|
|
2536
|
+
console.warn('[ClaudeRuntime] Entity capture failed:', err.message);
|
|
2537
|
+
}
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
exports.ClaudeRuntime = ClaudeRuntime;
|
|
2541
|
+
//# sourceMappingURL=claudeRuntime.js.map
|