@pcircle/claude-code-buddy-mcp 2.3.1
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/LICENSE +661 -0
- package/README.md +599 -0
- package/README.zh-TW.md +577 -0
- package/dist/__benchmarks__/performance-fixes.bench.d.ts +8 -0
- package/dist/__benchmarks__/performance-fixes.bench.d.ts.map +1 -0
- package/dist/__benchmarks__/performance-fixes.bench.js +213 -0
- package/dist/__benchmarks__/performance-fixes.bench.js.map +1 -0
- package/dist/agents/DevelopmentButler.d.ts +80 -0
- package/dist/agents/DevelopmentButler.d.ts.map +1 -0
- package/dist/agents/DevelopmentButler.js +328 -0
- package/dist/agents/DevelopmentButler.js.map +1 -0
- package/dist/agents/E2EHealingAgent.d.ts +30 -0
- package/dist/agents/E2EHealingAgent.d.ts.map +1 -0
- package/dist/agents/E2EHealingAgent.js +162 -0
- package/dist/agents/E2EHealingAgent.js.map +1 -0
- package/dist/agents/TestWriterAgent.d.ts +26 -0
- package/dist/agents/TestWriterAgent.d.ts.map +1 -0
- package/dist/agents/TestWriterAgent.js +139 -0
- package/dist/agents/TestWriterAgent.js.map +1 -0
- package/dist/agents/base/AgentExecutor.d.ts +7 -0
- package/dist/agents/base/AgentExecutor.d.ts.map +1 -0
- package/dist/agents/base/AgentExecutor.js +13 -0
- package/dist/agents/base/AgentExecutor.js.map +1 -0
- package/dist/agents/base/index.d.ts +2 -0
- package/dist/agents/base/index.d.ts.map +1 -0
- package/dist/agents/base/index.js +2 -0
- package/dist/agents/base/index.js.map +1 -0
- package/dist/agents/e2e-healing/analyzers/EvidenceCollector.d.ts +24 -0
- package/dist/agents/e2e-healing/analyzers/EvidenceCollector.d.ts.map +1 -0
- package/dist/agents/e2e-healing/analyzers/EvidenceCollector.js +55 -0
- package/dist/agents/e2e-healing/analyzers/EvidenceCollector.js.map +1 -0
- package/dist/agents/e2e-healing/analyzers/FailureAnalyzer.d.ts +22 -0
- package/dist/agents/e2e-healing/analyzers/FailureAnalyzer.d.ts.map +1 -0
- package/dist/agents/e2e-healing/analyzers/FailureAnalyzer.js +36 -0
- package/dist/agents/e2e-healing/analyzers/FailureAnalyzer.js.map +1 -0
- package/dist/agents/e2e-healing/config.d.ts +4 -0
- package/dist/agents/e2e-healing/config.d.ts.map +1 -0
- package/dist/agents/e2e-healing/config.js +28 -0
- package/dist/agents/e2e-healing/config.js.map +1 -0
- package/dist/agents/e2e-healing/generators/FixGenerator.d.ts +21 -0
- package/dist/agents/e2e-healing/generators/FixGenerator.d.ts.map +1 -0
- package/dist/agents/e2e-healing/generators/FixGenerator.js +33 -0
- package/dist/agents/e2e-healing/generators/FixGenerator.js.map +1 -0
- package/dist/agents/e2e-healing/orchestrator/TestOrchestrator.d.ts +29 -0
- package/dist/agents/e2e-healing/orchestrator/TestOrchestrator.d.ts.map +1 -0
- package/dist/agents/e2e-healing/orchestrator/TestOrchestrator.js +70 -0
- package/dist/agents/e2e-healing/orchestrator/TestOrchestrator.js.map +1 -0
- package/dist/agents/e2e-healing/policy/GraduatedAutonomyPolicy.d.ts +30 -0
- package/dist/agents/e2e-healing/policy/GraduatedAutonomyPolicy.d.ts.map +1 -0
- package/dist/agents/e2e-healing/policy/GraduatedAutonomyPolicy.js +115 -0
- package/dist/agents/e2e-healing/policy/GraduatedAutonomyPolicy.js.map +1 -0
- package/dist/agents/e2e-healing/runners/PlaywrightRunner.d.ts +19 -0
- package/dist/agents/e2e-healing/runners/PlaywrightRunner.d.ts.map +1 -0
- package/dist/agents/e2e-healing/runners/PlaywrightRunner.js +79 -0
- package/dist/agents/e2e-healing/runners/PlaywrightRunner.js.map +1 -0
- package/dist/agents/e2e-healing/safety/CircuitBreaker.d.ts +26 -0
- package/dist/agents/e2e-healing/safety/CircuitBreaker.d.ts.map +1 -0
- package/dist/agents/e2e-healing/safety/CircuitBreaker.js +75 -0
- package/dist/agents/e2e-healing/safety/CircuitBreaker.js.map +1 -0
- package/dist/agents/e2e-healing/safety/RollbackManager.d.ts +31 -0
- package/dist/agents/e2e-healing/safety/RollbackManager.d.ts.map +1 -0
- package/dist/agents/e2e-healing/safety/RollbackManager.js +130 -0
- package/dist/agents/e2e-healing/safety/RollbackManager.js.map +1 -0
- package/dist/agents/e2e-healing/safety/SafetyGate.d.ts +21 -0
- package/dist/agents/e2e-healing/safety/SafetyGate.d.ts.map +1 -0
- package/dist/agents/e2e-healing/safety/SafetyGate.js +62 -0
- package/dist/agents/e2e-healing/safety/SafetyGate.js.map +1 -0
- package/dist/agents/e2e-healing/safety/ScopeLimiter.d.ts +14 -0
- package/dist/agents/e2e-healing/safety/ScopeLimiter.d.ts.map +1 -0
- package/dist/agents/e2e-healing/safety/ScopeLimiter.js +36 -0
- package/dist/agents/e2e-healing/safety/ScopeLimiter.js.map +1 -0
- package/dist/agents/e2e-healing/sdk/AgentSDKAdapter.d.ts +29 -0
- package/dist/agents/e2e-healing/sdk/AgentSDKAdapter.d.ts.map +1 -0
- package/dist/agents/e2e-healing/sdk/AgentSDKAdapter.js +86 -0
- package/dist/agents/e2e-healing/sdk/AgentSDKAdapter.js.map +1 -0
- package/dist/agents/e2e-healing/types.d.ts +46 -0
- package/dist/agents/e2e-healing/types.d.ts.map +1 -0
- package/dist/agents/e2e-healing/types.js +2 -0
- package/dist/agents/e2e-healing/types.js.map +1 -0
- package/dist/agents/knowledge/KnowledgeGraph.d.ts +26 -0
- package/dist/agents/knowledge/KnowledgeGraph.d.ts.map +1 -0
- package/dist/agents/knowledge/KnowledgeGraph.js +106 -0
- package/dist/agents/knowledge/KnowledgeGraph.js.map +1 -0
- package/dist/agents/knowledge/KnowledgeGraphSQLite.d.ts +42 -0
- package/dist/agents/knowledge/KnowledgeGraphSQLite.d.ts.map +1 -0
- package/dist/agents/knowledge/KnowledgeGraphSQLite.js +349 -0
- package/dist/agents/knowledge/KnowledgeGraphSQLite.js.map +1 -0
- package/dist/agents/knowledge/index.d.ts +94 -0
- package/dist/agents/knowledge/index.d.ts.map +1 -0
- package/dist/agents/knowledge/index.js +296 -0
- package/dist/agents/knowledge/index.js.map +1 -0
- package/dist/agents/knowledge/storage/KnowledgeGraphStore.d.ts +25 -0
- package/dist/agents/knowledge/storage/KnowledgeGraphStore.d.ts.map +1 -0
- package/dist/agents/knowledge/storage/KnowledgeGraphStore.js +342 -0
- package/dist/agents/knowledge/storage/KnowledgeGraphStore.js.map +1 -0
- package/dist/agents/knowledge/types.d.ts +21 -0
- package/dist/agents/knowledge/types.d.ts.map +1 -0
- package/dist/agents/knowledge/types.js +2 -0
- package/dist/agents/knowledge/types.js.map +1 -0
- package/dist/agents/templates/ci-templates.d.ts +8 -0
- package/dist/agents/templates/ci-templates.d.ts.map +1 -0
- package/dist/agents/templates/ci-templates.js +119 -0
- package/dist/agents/templates/ci-templates.js.map +1 -0
- package/dist/agents/templates/test-templates.d.ts +18 -0
- package/dist/agents/templates/test-templates.d.ts.map +1 -0
- package/dist/agents/templates/test-templates.js +22 -0
- package/dist/agents/templates/test-templates.js.map +1 -0
- package/dist/config/index.d.ts +51 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +96 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/models.d.ts +47 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +57 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/simple-config.d.ts +32 -0
- package/dist/config/simple-config.d.ts.map +1 -0
- package/dist/config/simple-config.js +225 -0
- package/dist/config/simple-config.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts +32 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -0
- package/dist/core/AgentRegistry.js +281 -0
- package/dist/core/AgentRegistry.js.map +1 -0
- package/dist/core/BackgroundExecutor.d.ts +56 -0
- package/dist/core/BackgroundExecutor.d.ts.map +1 -0
- package/dist/core/BackgroundExecutor.js +492 -0
- package/dist/core/BackgroundExecutor.js.map +1 -0
- package/dist/core/BackgroundExecutorConstants.d.ts +8 -0
- package/dist/core/BackgroundExecutorConstants.d.ts.map +1 -0
- package/dist/core/BackgroundExecutorConstants.js +8 -0
- package/dist/core/BackgroundExecutorConstants.js.map +1 -0
- package/dist/core/CheckpointDetector.d.ts +25 -0
- package/dist/core/CheckpointDetector.d.ts.map +1 -0
- package/dist/core/CheckpointDetector.js +67 -0
- package/dist/core/CheckpointDetector.js.map +1 -0
- package/dist/core/ExecutionMonitor.d.ts +29 -0
- package/dist/core/ExecutionMonitor.d.ts.map +1 -0
- package/dist/core/ExecutionMonitor.js +124 -0
- package/dist/core/ExecutionMonitor.js.map +1 -0
- package/dist/core/ExecutionQueue.d.ts +21 -0
- package/dist/core/ExecutionQueue.d.ts.map +1 -0
- package/dist/core/ExecutionQueue.js +104 -0
- package/dist/core/ExecutionQueue.js.map +1 -0
- package/dist/core/HealthCheck.d.ts +39 -0
- package/dist/core/HealthCheck.d.ts.map +1 -0
- package/dist/core/HealthCheck.js +219 -0
- package/dist/core/HealthCheck.js.map +1 -0
- package/dist/core/HookIntegration.d.ts +45 -0
- package/dist/core/HookIntegration.d.ts.map +1 -0
- package/dist/core/HookIntegration.js +241 -0
- package/dist/core/HookIntegration.js.map +1 -0
- package/dist/core/MCPToolInterface.d.ts +120 -0
- package/dist/core/MCPToolInterface.d.ts.map +1 -0
- package/dist/core/MCPToolInterface.js +376 -0
- package/dist/core/MCPToolInterface.js.map +1 -0
- package/dist/core/PromptEnhancer.d.ts +13 -0
- package/dist/core/PromptEnhancer.d.ts.map +1 -0
- package/dist/core/PromptEnhancer.js +112 -0
- package/dist/core/PromptEnhancer.js.map +1 -0
- package/dist/core/ResourceMonitor.d.ts +32 -0
- package/dist/core/ResourceMonitor.d.ts.map +1 -0
- package/dist/core/ResourceMonitor.js +181 -0
- package/dist/core/ResourceMonitor.js.map +1 -0
- package/dist/core/ResultHandler.d.ts +9 -0
- package/dist/core/ResultHandler.d.ts.map +1 -0
- package/dist/core/ResultHandler.js +60 -0
- package/dist/core/ResultHandler.js.map +1 -0
- package/dist/core/ServiceLocator.d.ts +10 -0
- package/dist/core/ServiceLocator.d.ts.map +1 -0
- package/dist/core/ServiceLocator.js +29 -0
- package/dist/core/ServiceLocator.js.map +1 -0
- package/dist/core/SessionContextMonitor.d.ts +41 -0
- package/dist/core/SessionContextMonitor.d.ts.map +1 -0
- package/dist/core/SessionContextMonitor.js +156 -0
- package/dist/core/SessionContextMonitor.js.map +1 -0
- package/dist/core/SessionTokenTracker.d.ts +43 -0
- package/dist/core/SessionTokenTracker.d.ts.map +1 -0
- package/dist/core/SessionTokenTracker.js +76 -0
- package/dist/core/SessionTokenTracker.js.map +1 -0
- package/dist/core/TaskScheduler.d.ts +19 -0
- package/dist/core/TaskScheduler.d.ts.map +1 -0
- package/dist/core/TaskScheduler.js +59 -0
- package/dist/core/TaskScheduler.js.map +1 -0
- package/dist/core/WorkflowGuidanceEngine.d.ts +35 -0
- package/dist/core/WorkflowGuidanceEngine.d.ts.map +1 -0
- package/dist/core/WorkflowGuidanceEngine.js +104 -0
- package/dist/core/WorkflowGuidanceEngine.js.map +1 -0
- package/dist/core/types.d.ts +66 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/db/ConnectionPool.d.ts +47 -0
- package/dist/db/ConnectionPool.d.ts.map +1 -0
- package/dist/db/ConnectionPool.js +432 -0
- package/dist/db/ConnectionPool.js.map +1 -0
- package/dist/db/QueryCache.d.ts +46 -0
- package/dist/db/QueryCache.d.ts.map +1 -0
- package/dist/db/QueryCache.js +229 -0
- package/dist/db/QueryCache.js.map +1 -0
- package/dist/errors/index.d.ts +62 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +124 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/evolution/ABTestManager.d.ts +21 -0
- package/dist/evolution/ABTestManager.d.ts.map +1 -0
- package/dist/evolution/ABTestManager.js +183 -0
- package/dist/evolution/ABTestManager.js.map +1 -0
- package/dist/evolution/AdaptationEngine.d.ts +60 -0
- package/dist/evolution/AdaptationEngine.d.ts.map +1 -0
- package/dist/evolution/AdaptationEngine.js +313 -0
- package/dist/evolution/AdaptationEngine.js.map +1 -0
- package/dist/evolution/AgentEvolutionConfig.d.ts +32 -0
- package/dist/evolution/AgentEvolutionConfig.d.ts.map +1 -0
- package/dist/evolution/AgentEvolutionConfig.js +329 -0
- package/dist/evolution/AgentEvolutionConfig.js.map +1 -0
- package/dist/evolution/ContextMatcher.d.ts +24 -0
- package/dist/evolution/ContextMatcher.d.ts.map +1 -0
- package/dist/evolution/ContextMatcher.js +85 -0
- package/dist/evolution/ContextMatcher.js.map +1 -0
- package/dist/evolution/EvolutionBootstrap.d.ts +69 -0
- package/dist/evolution/EvolutionBootstrap.d.ts.map +1 -0
- package/dist/evolution/EvolutionBootstrap.js +332 -0
- package/dist/evolution/EvolutionBootstrap.js.map +1 -0
- package/dist/evolution/EvolutionMonitor.d.ts +111 -0
- package/dist/evolution/EvolutionMonitor.d.ts.map +1 -0
- package/dist/evolution/EvolutionMonitor.js +540 -0
- package/dist/evolution/EvolutionMonitor.js.map +1 -0
- package/dist/evolution/FeedbackCollector.d.ts +26 -0
- package/dist/evolution/FeedbackCollector.d.ts.map +1 -0
- package/dist/evolution/FeedbackCollector.js +93 -0
- package/dist/evolution/FeedbackCollector.js.map +1 -0
- package/dist/evolution/KnowledgeTransferManager.d.ts +16 -0
- package/dist/evolution/KnowledgeTransferManager.d.ts.map +1 -0
- package/dist/evolution/KnowledgeTransferManager.js +34 -0
- package/dist/evolution/KnowledgeTransferManager.js.map +1 -0
- package/dist/evolution/LearningManager.d.ts +79 -0
- package/dist/evolution/LearningManager.d.ts.map +1 -0
- package/dist/evolution/LearningManager.js +582 -0
- package/dist/evolution/LearningManager.js.map +1 -0
- package/dist/evolution/LearningManagerConstants.d.ts +55 -0
- package/dist/evolution/LearningManagerConstants.d.ts.map +1 -0
- package/dist/evolution/LearningManagerConstants.js +55 -0
- package/dist/evolution/LearningManagerConstants.js.map +1 -0
- package/dist/evolution/MultiObjectiveOptimizer.d.ts +9 -0
- package/dist/evolution/MultiObjectiveOptimizer.d.ts.map +1 -0
- package/dist/evolution/MultiObjectiveOptimizer.js +92 -0
- package/dist/evolution/MultiObjectiveOptimizer.js.map +1 -0
- package/dist/evolution/PatternExplainer.d.ts +14 -0
- package/dist/evolution/PatternExplainer.d.ts.map +1 -0
- package/dist/evolution/PatternExplainer.js +113 -0
- package/dist/evolution/PatternExplainer.js.map +1 -0
- package/dist/evolution/PerformanceTracker.d.ts +43 -0
- package/dist/evolution/PerformanceTracker.d.ts.map +1 -0
- package/dist/evolution/PerformanceTracker.js +453 -0
- package/dist/evolution/PerformanceTracker.js.map +1 -0
- package/dist/evolution/PerformanceTrackerConstants.d.ts +5 -0
- package/dist/evolution/PerformanceTrackerConstants.d.ts.map +1 -0
- package/dist/evolution/PerformanceTrackerConstants.js +5 -0
- package/dist/evolution/PerformanceTrackerConstants.js.map +1 -0
- package/dist/evolution/StatisticalAnalyzer.d.ts +20 -0
- package/dist/evolution/StatisticalAnalyzer.d.ts.map +1 -0
- package/dist/evolution/StatisticalAnalyzer.js +154 -0
- package/dist/evolution/StatisticalAnalyzer.js.map +1 -0
- package/dist/evolution/TransferabilityChecker.d.ts +11 -0
- package/dist/evolution/TransferabilityChecker.d.ts.map +1 -0
- package/dist/evolution/TransferabilityChecker.js +78 -0
- package/dist/evolution/TransferabilityChecker.js.map +1 -0
- package/dist/evolution/index.d.ts +11 -0
- package/dist/evolution/index.d.ts.map +1 -0
- package/dist/evolution/index.js +9 -0
- package/dist/evolution/index.js.map +1 -0
- package/dist/evolution/instrumentation/SpanTracker.d.ts +64 -0
- package/dist/evolution/instrumentation/SpanTracker.d.ts.map +1 -0
- package/dist/evolution/instrumentation/SpanTracker.js +229 -0
- package/dist/evolution/instrumentation/SpanTracker.js.map +1 -0
- package/dist/evolution/instrumentation/withEvolutionTracking.d.ts +19 -0
- package/dist/evolution/instrumentation/withEvolutionTracking.d.ts.map +1 -0
- package/dist/evolution/instrumentation/withEvolutionTracking.js +256 -0
- package/dist/evolution/instrumentation/withEvolutionTracking.js.map +1 -0
- package/dist/evolution/integration-test-scenarios.d.ts +56 -0
- package/dist/evolution/integration-test-scenarios.d.ts.map +1 -0
- package/dist/evolution/integration-test-scenarios.js +131 -0
- package/dist/evolution/integration-test-scenarios.js.map +1 -0
- package/dist/evolution/links/LinkManager.d.ts +17 -0
- package/dist/evolution/links/LinkManager.d.ts.map +1 -0
- package/dist/evolution/links/LinkManager.js +41 -0
- package/dist/evolution/links/LinkManager.js.map +1 -0
- package/dist/evolution/storage/EvolutionStore.d.ts +87 -0
- package/dist/evolution/storage/EvolutionStore.d.ts.map +1 -0
- package/dist/evolution/storage/EvolutionStore.js +2 -0
- package/dist/evolution/storage/EvolutionStore.js.map +1 -0
- package/dist/evolution/storage/IEvolutionStore.d.ts +87 -0
- package/dist/evolution/storage/IEvolutionStore.d.ts.map +1 -0
- package/dist/evolution/storage/IEvolutionStore.js +2 -0
- package/dist/evolution/storage/IEvolutionStore.js.map +1 -0
- package/dist/evolution/storage/SQLiteStore.d.ts +115 -0
- package/dist/evolution/storage/SQLiteStore.d.ts.map +1 -0
- package/dist/evolution/storage/SQLiteStore.enhanced.d.ts +35 -0
- package/dist/evolution/storage/SQLiteStore.enhanced.d.ts.map +1 -0
- package/dist/evolution/storage/SQLiteStore.enhanced.js +514 -0
- package/dist/evolution/storage/SQLiteStore.enhanced.js.map +1 -0
- package/dist/evolution/storage/SQLiteStore.js +915 -0
- package/dist/evolution/storage/SQLiteStore.js.map +1 -0
- package/dist/evolution/storage/deprecated/SQLiteStore.basic.d.ts +109 -0
- package/dist/evolution/storage/deprecated/SQLiteStore.basic.d.ts.map +1 -0
- package/dist/evolution/storage/deprecated/SQLiteStore.basic.js +1033 -0
- package/dist/evolution/storage/deprecated/SQLiteStore.basic.js.map +1 -0
- package/dist/evolution/storage/index.d.ts +6 -0
- package/dist/evolution/storage/index.d.ts.map +1 -0
- package/dist/evolution/storage/index.js +3 -0
- package/dist/evolution/storage/index.js.map +1 -0
- package/dist/evolution/storage/migrations/MigrationManager.d.ts +17 -0
- package/dist/evolution/storage/migrations/MigrationManager.d.ts.map +1 -0
- package/dist/evolution/storage/migrations/MigrationManager.js +242 -0
- package/dist/evolution/storage/migrations/MigrationManager.js.map +1 -0
- package/dist/evolution/storage/repositories/AdaptationRepository.d.ts +17 -0
- package/dist/evolution/storage/repositories/AdaptationRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/AdaptationRepository.js +82 -0
- package/dist/evolution/storage/repositories/AdaptationRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/CostRecordsRepository.d.ts +43 -0
- package/dist/evolution/storage/repositories/CostRecordsRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/CostRecordsRepository.js +157 -0
- package/dist/evolution/storage/repositories/CostRecordsRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/ExecutionRepository.d.ts +12 -0
- package/dist/evolution/storage/repositories/ExecutionRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/ExecutionRepository.js +87 -0
- package/dist/evolution/storage/repositories/ExecutionRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/PatternRepository.d.ts +12 -0
- package/dist/evolution/storage/repositories/PatternRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/PatternRepository.js +150 -0
- package/dist/evolution/storage/repositories/PatternRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/PerformanceMetricsRepository.d.ts +39 -0
- package/dist/evolution/storage/repositories/PerformanceMetricsRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/PerformanceMetricsRepository.js +130 -0
- package/dist/evolution/storage/repositories/PerformanceMetricsRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/RewardRepository.d.ts +17 -0
- package/dist/evolution/storage/repositories/RewardRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/RewardRepository.js +82 -0
- package/dist/evolution/storage/repositories/RewardRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/SpanRepository.d.ts +14 -0
- package/dist/evolution/storage/repositories/SpanRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/SpanRepository.js +191 -0
- package/dist/evolution/storage/repositories/SpanRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/StatsRepository.d.ts +16 -0
- package/dist/evolution/storage/repositories/StatsRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/StatsRepository.js +271 -0
- package/dist/evolution/storage/repositories/StatsRepository.js.map +1 -0
- package/dist/evolution/storage/repositories/TaskRepository.d.ts +16 -0
- package/dist/evolution/storage/repositories/TaskRepository.d.ts.map +1 -0
- package/dist/evolution/storage/repositories/TaskRepository.js +93 -0
- package/dist/evolution/storage/repositories/TaskRepository.js.map +1 -0
- package/dist/evolution/storage/schema.d.ts +81 -0
- package/dist/evolution/storage/schema.d.ts.map +1 -0
- package/dist/evolution/storage/schema.js +241 -0
- package/dist/evolution/storage/schema.js.map +1 -0
- package/dist/evolution/storage/types.d.ts +402 -0
- package/dist/evolution/storage/types.d.ts.map +1 -0
- package/dist/evolution/storage/types.js +2 -0
- package/dist/evolution/storage/types.js.map +1 -0
- package/dist/evolution/storage/validation.d.ts +12 -0
- package/dist/evolution/storage/validation.d.ts.map +1 -0
- package/dist/evolution/storage/validation.js +88 -0
- package/dist/evolution/storage/validation.js.map +1 -0
- package/dist/evolution/types.d.ts +214 -0
- package/dist/evolution/types.d.ts.map +1 -0
- package/dist/evolution/types.js +2 -0
- package/dist/evolution/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +27 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +353 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/types.d.ts +37 -0
- package/dist/knowledge-graph/types.d.ts.map +1 -0
- package/dist/knowledge-graph/types.js +2 -0
- package/dist/knowledge-graph/types.js.map +1 -0
- package/dist/management/UninstallManager.d.ts +23 -0
- package/dist/management/UninstallManager.d.ts.map +1 -0
- package/dist/management/UninstallManager.js +186 -0
- package/dist/management/UninstallManager.js.map +1 -0
- package/dist/management/index.d.ts +3 -0
- package/dist/management/index.d.ts.map +1 -0
- package/dist/management/index.js +2 -0
- package/dist/management/index.js.map +1 -0
- package/dist/mcp/BuddyCommands.d.ts +13 -0
- package/dist/mcp/BuddyCommands.d.ts.map +1 -0
- package/dist/mcp/BuddyCommands.js +110 -0
- package/dist/mcp/BuddyCommands.js.map +1 -0
- package/dist/mcp/ClaudeMdReloader.d.ts +37 -0
- package/dist/mcp/ClaudeMdReloader.d.ts.map +1 -0
- package/dist/mcp/ClaudeMdReloader.js +92 -0
- package/dist/mcp/ClaudeMdReloader.js.map +1 -0
- package/dist/mcp/HumanInLoopUI.d.ts +23 -0
- package/dist/mcp/HumanInLoopUI.d.ts.map +1 -0
- package/dist/mcp/HumanInLoopUI.js +92 -0
- package/dist/mcp/HumanInLoopUI.js.map +1 -0
- package/dist/mcp/ServerInitializer.d.ts +47 -0
- package/dist/mcp/ServerInitializer.d.ts.map +1 -0
- package/dist/mcp/ServerInitializer.js +89 -0
- package/dist/mcp/ServerInitializer.js.map +1 -0
- package/dist/mcp/SessionBootstrapper.d.ts +11 -0
- package/dist/mcp/SessionBootstrapper.d.ts.map +1 -0
- package/dist/mcp/SessionBootstrapper.js +67 -0
- package/dist/mcp/SessionBootstrapper.js.map +1 -0
- package/dist/mcp/ToolDefinitions.d.ts +42 -0
- package/dist/mcp/ToolDefinitions.d.ts.map +1 -0
- package/dist/mcp/ToolDefinitions.js +234 -0
- package/dist/mcp/ToolDefinitions.js.map +1 -0
- package/dist/mcp/ToolRouter.d.ts +22 -0
- package/dist/mcp/ToolRouter.d.ts.map +1 -0
- package/dist/mcp/ToolRouter.js +102 -0
- package/dist/mcp/ToolRouter.js.map +1 -0
- package/dist/mcp/handlers/BuddyHandlers.d.ts +14 -0
- package/dist/mcp/handlers/BuddyHandlers.d.ts.map +1 -0
- package/dist/mcp/handlers/BuddyHandlers.js +152 -0
- package/dist/mcp/handlers/BuddyHandlers.js.map +1 -0
- package/dist/mcp/handlers/ResourceHandlers.d.ts +3 -0
- package/dist/mcp/handlers/ResourceHandlers.d.ts.map +1 -0
- package/dist/mcp/handlers/ResourceHandlers.js +86 -0
- package/dist/mcp/handlers/ResourceHandlers.js.map +1 -0
- package/dist/mcp/handlers/ToolHandlers.d.ts +52 -0
- package/dist/mcp/handlers/ToolHandlers.d.ts.map +1 -0
- package/dist/mcp/handlers/ToolHandlers.js +914 -0
- package/dist/mcp/handlers/ToolHandlers.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +4 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +4 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/schemas/OutputSchemas.d.ts +368 -0
- package/dist/mcp/schemas/OutputSchemas.d.ts.map +1 -0
- package/dist/mcp/schemas/OutputSchemas.js +191 -0
- package/dist/mcp/schemas/OutputSchemas.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +184 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/add-observations.d.ts +48 -0
- package/dist/mcp/tools/add-observations.d.ts.map +1 -0
- package/dist/mcp/tools/add-observations.js +64 -0
- package/dist/mcp/tools/add-observations.js.map +1 -0
- package/dist/mcp/tools/buddy-do.d.ts +14 -0
- package/dist/mcp/tools/buddy-do.d.ts.map +1 -0
- package/dist/mcp/tools/buddy-do.js +77 -0
- package/dist/mcp/tools/buddy-do.js.map +1 -0
- package/dist/mcp/tools/buddy-help.d.ts +13 -0
- package/dist/mcp/tools/buddy-help.d.ts.map +1 -0
- package/dist/mcp/tools/buddy-help.js +52 -0
- package/dist/mcp/tools/buddy-help.js.map +1 -0
- package/dist/mcp/tools/buddy-remember.d.ts +15 -0
- package/dist/mcp/tools/buddy-remember.d.ts.map +1 -0
- package/dist/mcp/tools/buddy-remember.js +77 -0
- package/dist/mcp/tools/buddy-remember.js.map +1 -0
- package/dist/mcp/tools/create-entities.d.ts +57 -0
- package/dist/mcp/tools/create-entities.d.ts.map +1 -0
- package/dist/mcp/tools/create-entities.js +64 -0
- package/dist/mcp/tools/create-entities.js.map +1 -0
- package/dist/mcp/tools/create-relations.d.ts +60 -0
- package/dist/mcp/tools/create-relations.d.ts.map +1 -0
- package/dist/mcp/tools/create-relations.js +84 -0
- package/dist/mcp/tools/create-relations.js.map +1 -0
- package/dist/mcp/tools/health-check.d.ts +10 -0
- package/dist/mcp/tools/health-check.d.ts.map +1 -0
- package/dist/mcp/tools/health-check.js +37 -0
- package/dist/mcp/tools/health-check.js.map +1 -0
- package/dist/mcp/tools/recall-memory.d.ts +31 -0
- package/dist/mcp/tools/recall-memory.d.ts.map +1 -0
- package/dist/mcp/tools/recall-memory.js +31 -0
- package/dist/mcp/tools/recall-memory.js.map +1 -0
- package/dist/mcp/validation.d.ts +88 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +119 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/memory/ProjectAutoTracker.d.ts +36 -0
- package/dist/memory/ProjectAutoTracker.d.ts.map +1 -0
- package/dist/memory/ProjectAutoTracker.js +200 -0
- package/dist/memory/ProjectAutoTracker.js.map +1 -0
- package/dist/memory/ProjectMemoryCleanup.d.ts +17 -0
- package/dist/memory/ProjectMemoryCleanup.d.ts.map +1 -0
- package/dist/memory/ProjectMemoryCleanup.js +57 -0
- package/dist/memory/ProjectMemoryCleanup.js.map +1 -0
- package/dist/memory/ProjectMemoryManager.d.ts +15 -0
- package/dist/memory/ProjectMemoryManager.d.ts.map +1 -0
- package/dist/memory/ProjectMemoryManager.js +36 -0
- package/dist/memory/ProjectMemoryManager.js.map +1 -0
- package/dist/orchestrator/AgentRouter.d.ts +20 -0
- package/dist/orchestrator/AgentRouter.d.ts.map +1 -0
- package/dist/orchestrator/AgentRouter.js +274 -0
- package/dist/orchestrator/AgentRouter.js.map +1 -0
- package/dist/orchestrator/CostTracker.d.ts +25 -0
- package/dist/orchestrator/CostTracker.d.ts.map +1 -0
- package/dist/orchestrator/CostTracker.js +199 -0
- package/dist/orchestrator/CostTracker.js.map +1 -0
- package/dist/orchestrator/GlobalResourcePool.d.ts +59 -0
- package/dist/orchestrator/GlobalResourcePool.d.ts.map +1 -0
- package/dist/orchestrator/GlobalResourcePool.js +224 -0
- package/dist/orchestrator/GlobalResourcePool.js.map +1 -0
- package/dist/orchestrator/GlobalResourcePoolConstants.d.ts +22 -0
- package/dist/orchestrator/GlobalResourcePoolConstants.d.ts.map +1 -0
- package/dist/orchestrator/GlobalResourcePoolConstants.js +22 -0
- package/dist/orchestrator/GlobalResourcePoolConstants.js.map +1 -0
- package/dist/orchestrator/TaskAnalyzer.d.ts +15 -0
- package/dist/orchestrator/TaskAnalyzer.d.ts.map +1 -0
- package/dist/orchestrator/TaskAnalyzer.js +234 -0
- package/dist/orchestrator/TaskAnalyzer.js.map +1 -0
- package/dist/orchestrator/TaskAnalyzerConstants.d.ts +16 -0
- package/dist/orchestrator/TaskAnalyzerConstants.d.ts.map +1 -0
- package/dist/orchestrator/TaskAnalyzerConstants.js +16 -0
- package/dist/orchestrator/TaskAnalyzerConstants.js.map +1 -0
- package/dist/orchestrator/example.d.ts +2 -0
- package/dist/orchestrator/example.d.ts.map +1 -0
- package/dist/orchestrator/example.js +118 -0
- package/dist/orchestrator/example.js.map +1 -0
- package/dist/orchestrator/index.d.ts +82 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +364 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/router.d.ts +48 -0
- package/dist/orchestrator/router.d.ts.map +1 -0
- package/dist/orchestrator/router.js +126 -0
- package/dist/orchestrator/router.js.map +1 -0
- package/dist/orchestrator/types.d.ts +60 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +2 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/planning/PlanningEngine.d.ts +52 -0
- package/dist/planning/PlanningEngine.d.ts.map +1 -0
- package/dist/planning/PlanningEngine.js +271 -0
- package/dist/planning/PlanningEngine.js.map +1 -0
- package/dist/planning/TaskDecomposer.d.ts +32 -0
- package/dist/planning/TaskDecomposer.d.ts.map +1 -0
- package/dist/planning/TaskDecomposer.js +152 -0
- package/dist/planning/TaskDecomposer.js.map +1 -0
- package/dist/prompts/templates/PromptTemplates.d.ts +11 -0
- package/dist/prompts/templates/PromptTemplates.d.ts.map +1 -0
- package/dist/prompts/templates/PromptTemplates.js +942 -0
- package/dist/prompts/templates/PromptTemplates.js.map +1 -0
- package/dist/prompts/templates/index.d.ts +2 -0
- package/dist/prompts/templates/index.d.ts.map +1 -0
- package/dist/prompts/templates/index.js +2 -0
- package/dist/prompts/templates/index.js.map +1 -0
- package/dist/skills/SkillManager.d.ts +33 -0
- package/dist/skills/SkillManager.d.ts.map +1 -0
- package/dist/skills/SkillManager.js +153 -0
- package/dist/skills/SkillManager.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/telemetry/TelemetryCollector.d.ts +19 -0
- package/dist/telemetry/TelemetryCollector.d.ts.map +1 -0
- package/dist/telemetry/TelemetryCollector.js +62 -0
- package/dist/telemetry/TelemetryCollector.js.map +1 -0
- package/dist/telemetry/TelemetryStore.d.ts +20 -0
- package/dist/telemetry/TelemetryStore.d.ts.map +1 -0
- package/dist/telemetry/TelemetryStore.js +126 -0
- package/dist/telemetry/TelemetryStore.js.map +1 -0
- package/dist/telemetry/index.d.ts +8 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +33 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/sanitization.d.ts +6 -0
- package/dist/telemetry/sanitization.d.ts.map +1 -0
- package/dist/telemetry/sanitization.js +180 -0
- package/dist/telemetry/sanitization.js.map +1 -0
- package/dist/telemetry/types.d.ts +73 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +16 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/templates/git-education-templates.d.ts +26 -0
- package/dist/templates/git-education-templates.d.ts.map +1 -0
- package/dist/templates/git-education-templates.js +455 -0
- package/dist/templates/git-education-templates.js.map +1 -0
- package/dist/types/AgentClassification.d.ts +6 -0
- package/dist/types/AgentClassification.d.ts.map +1 -0
- package/dist/types/AgentClassification.js +7 -0
- package/dist/types/AgentClassification.js.map +1 -0
- package/dist/types/Checkpoint.d.ts +12 -0
- package/dist/types/Checkpoint.d.ts.map +1 -0
- package/dist/types/Checkpoint.js +13 -0
- package/dist/types/Checkpoint.js.map +1 -0
- package/dist/types/toonify.d.ts +91 -0
- package/dist/types/toonify.d.ts.map +1 -0
- package/dist/types/toonify.js +18 -0
- package/dist/types/toonify.js.map +1 -0
- package/dist/ui/AsciiProgressBar.d.ts +29 -0
- package/dist/ui/AsciiProgressBar.d.ts.map +1 -0
- package/dist/ui/AsciiProgressBar.js +131 -0
- package/dist/ui/AsciiProgressBar.js.map +1 -0
- package/dist/ui/AttributionManager.d.ts +19 -0
- package/dist/ui/AttributionManager.d.ts.map +1 -0
- package/dist/ui/AttributionManager.js +107 -0
- package/dist/ui/AttributionManager.js.map +1 -0
- package/dist/ui/Dashboard.d.ts +24 -0
- package/dist/ui/Dashboard.d.ts.map +1 -0
- package/dist/ui/Dashboard.js +135 -0
- package/dist/ui/Dashboard.js.map +1 -0
- package/dist/ui/LoadingIndicator.d.ts +53 -0
- package/dist/ui/LoadingIndicator.d.ts.map +1 -0
- package/dist/ui/LoadingIndicator.js +174 -0
- package/dist/ui/LoadingIndicator.js.map +1 -0
- package/dist/ui/MetricsStore.d.ts +15 -0
- package/dist/ui/MetricsStore.d.ts.map +1 -0
- package/dist/ui/MetricsStore.js +111 -0
- package/dist/ui/MetricsStore.js.map +1 -0
- package/dist/ui/ProgressRenderer.d.ts +24 -0
- package/dist/ui/ProgressRenderer.d.ts.map +1 -0
- package/dist/ui/ProgressRenderer.js +121 -0
- package/dist/ui/ProgressRenderer.js.map +1 -0
- package/dist/ui/ResponseFormatter.d.ts +42 -0
- package/dist/ui/ResponseFormatter.d.ts.map +1 -0
- package/dist/ui/ResponseFormatter.js +243 -0
- package/dist/ui/ResponseFormatter.js.map +1 -0
- package/dist/ui/UIEventBus.d.ts +38 -0
- package/dist/ui/UIEventBus.d.ts.map +1 -0
- package/dist/ui/UIEventBus.js +173 -0
- package/dist/ui/UIEventBus.js.map +1 -0
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +6 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/theme.d.ts +292 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +153 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +146 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +16 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/utils/ILogger.d.ts +7 -0
- package/dist/utils/ILogger.d.ts.map +1 -0
- package/dist/utils/ILogger.js +2 -0
- package/dist/utils/ILogger.js.map +1 -0
- package/dist/utils/MinHeap.d.ts +15 -0
- package/dist/utils/MinHeap.d.ts.map +1 -0
- package/dist/utils/MinHeap.js +69 -0
- package/dist/utils/MinHeap.js.map +1 -0
- package/dist/utils/RateLimiter.d.ts +28 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +115 -0
- package/dist/utils/RateLimiter.js.map +1 -0
- package/dist/utils/SecureKeyStore.d.ts +10 -0
- package/dist/utils/SecureKeyStore.d.ts.map +1 -0
- package/dist/utils/SecureKeyStore.js +32 -0
- package/dist/utils/SecureKeyStore.js.map +1 -0
- package/dist/utils/SystemResources.d.ts +40 -0
- package/dist/utils/SystemResources.d.ts.map +1 -0
- package/dist/utils/SystemResources.js +221 -0
- package/dist/utils/SystemResources.js.map +1 -0
- package/dist/utils/cost-tracker.d.ts +34 -0
- package/dist/utils/cost-tracker.d.ts.map +1 -0
- package/dist/utils/cost-tracker.js +92 -0
- package/dist/utils/cost-tracker.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +28 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +206 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/json.d.ts +13 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +85 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/lru-cache.d.ts +40 -0
- package/dist/utils/lru-cache.d.ts.map +1 -0
- package/dist/utils/lru-cache.js +209 -0
- package/dist/utils/lru-cache.js.map +1 -0
- package/dist/utils/memory.d.ts +20 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +53 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/money.d.ts +10 -0
- package/dist/utils/money.d.ts.map +1 -0
- package/dist/utils/money.js +25 -0
- package/dist/utils/money.js.map +1 -0
- package/dist/utils/pathValidation.d.ts +2 -0
- package/dist/utils/pathValidation.d.ts.map +1 -0
- package/dist/utils/pathValidation.js +62 -0
- package/dist/utils/pathValidation.js.map +1 -0
- package/dist/utils/paths.d.ts +4 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +28 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/requestId.d.ts +4 -0
- package/dist/utils/requestId.d.ts.map +1 -0
- package/dist/utils/requestId.js +17 -0
- package/dist/utils/requestId.js.map +1 -0
- package/dist/utils/retry.d.ts +20 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +226 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/toonify-adapter.d.ts +77 -0
- package/dist/utils/toonify-adapter.d.ts.map +1 -0
- package/dist/utils/toonify-adapter.js +283 -0
- package/dist/utils/toonify-adapter.js.map +1 -0
- package/dist/utils/validation.d.ts +7 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +62 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +116 -0
- package/plugin.json +21 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import { PromptEnhancer } from '../core/PromptEnhancer.js';
|
|
3
|
+
import { toDollars } from '../utils/money.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export class AgentRouter {
|
|
6
|
+
promptEnhancer;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.promptEnhancer = new PromptEnhancer();
|
|
9
|
+
}
|
|
10
|
+
async route(analysis) {
|
|
11
|
+
const systemResources = await this.getSystemResources();
|
|
12
|
+
if (!this.hasEnoughMemory(systemResources, analysis)) {
|
|
13
|
+
return this.createFallbackDecision(analysis, 'Insufficient memory');
|
|
14
|
+
}
|
|
15
|
+
const selectedAgent = this.selectAgent(analysis);
|
|
16
|
+
const fallbackAgent = this.getFallbackAgent(selectedAgent);
|
|
17
|
+
const task = {
|
|
18
|
+
id: analysis.taskId,
|
|
19
|
+
description: `Task requiring ${analysis.requiredCapabilities.join(', ')} capabilities`,
|
|
20
|
+
requiredCapabilities: analysis.requiredCapabilities.length > 0
|
|
21
|
+
? analysis.requiredCapabilities
|
|
22
|
+
: this.getCapabilitiesForAgent(selectedAgent),
|
|
23
|
+
metadata: {
|
|
24
|
+
complexity: analysis.complexity,
|
|
25
|
+
estimatedTokens: analysis.estimatedTokens,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const enhancedPrompt = this.promptEnhancer.enhance(selectedAgent, task, analysis.complexity);
|
|
29
|
+
return {
|
|
30
|
+
taskId: analysis.taskId,
|
|
31
|
+
selectedAgent,
|
|
32
|
+
enhancedPrompt,
|
|
33
|
+
estimatedCost: analysis.estimatedCost,
|
|
34
|
+
fallbackAgent,
|
|
35
|
+
reasoning: this.generateRoutingReasoning(analysis, selectedAgent, systemResources),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async getSystemResources() {
|
|
39
|
+
const totalMemory = os.totalmem();
|
|
40
|
+
const freeMemory = os.freemem();
|
|
41
|
+
const usedMemory = totalMemory - freeMemory;
|
|
42
|
+
return {
|
|
43
|
+
totalMemoryMB: Math.floor(totalMemory / 1024 / 1024),
|
|
44
|
+
availableMemoryMB: Math.floor(freeMemory / 1024 / 1024),
|
|
45
|
+
memoryUsagePercent: Math.floor((usedMemory / totalMemory) * 100),
|
|
46
|
+
cpuUsagePercent: this.getCPUUsage(),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
hasEnoughMemory(resources, analysis) {
|
|
50
|
+
const requiredMemoryMB = this.estimateRequiredMemory(analysis);
|
|
51
|
+
const platform = process.platform;
|
|
52
|
+
if (platform === 'darwin') {
|
|
53
|
+
if (resources.totalMemoryMB >= 4096) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (resources.availableMemoryMB < requiredMemoryMB) {
|
|
58
|
+
logger.warn(`⚠️ Insufficient memory: Available ${resources.availableMemoryMB}MB, ` +
|
|
59
|
+
`Required ${requiredMemoryMB}MB`);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
estimateRequiredMemory(analysis) {
|
|
65
|
+
const baseMemory = {
|
|
66
|
+
simple: 50,
|
|
67
|
+
medium: 100,
|
|
68
|
+
complex: 200,
|
|
69
|
+
};
|
|
70
|
+
return baseMemory[analysis.complexity];
|
|
71
|
+
}
|
|
72
|
+
selectAgent(analysis) {
|
|
73
|
+
const requiredCapabilities = analysis.requiredCapabilities;
|
|
74
|
+
const capabilityToAgent = {
|
|
75
|
+
'code-review': 'code-reviewer',
|
|
76
|
+
'code-generation': 'general-agent',
|
|
77
|
+
'testing': 'test-writer',
|
|
78
|
+
'debugging': 'debugger',
|
|
79
|
+
'refactoring': 'refactorer',
|
|
80
|
+
'api-design': 'api-designer',
|
|
81
|
+
'research': 'research-agent',
|
|
82
|
+
'architecture': 'architecture-agent',
|
|
83
|
+
'data-analysis': 'data-analyst',
|
|
84
|
+
'knowledge-query': 'knowledge-agent',
|
|
85
|
+
'documentation': 'technical-writer',
|
|
86
|
+
};
|
|
87
|
+
for (const required of requiredCapabilities) {
|
|
88
|
+
const mappedAgent = capabilityToAgent[required];
|
|
89
|
+
if (mappedAgent) {
|
|
90
|
+
return mappedAgent;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return 'general-agent';
|
|
94
|
+
}
|
|
95
|
+
getCapabilitiesForAgent(agent) {
|
|
96
|
+
const agentCapabilities = {
|
|
97
|
+
'code-reviewer': ['code-review'],
|
|
98
|
+
'test-writer': ['testing'],
|
|
99
|
+
'test-automator': ['testing'],
|
|
100
|
+
'e2e-healing-agent': ['e2e-testing', 'auto-healing', 'testing'],
|
|
101
|
+
'debugger': ['debugging'],
|
|
102
|
+
'refactorer': ['refactoring'],
|
|
103
|
+
'api-designer': ['api-design'],
|
|
104
|
+
'research-agent': ['research'],
|
|
105
|
+
'architecture-agent': ['architecture'],
|
|
106
|
+
'data-analyst': ['data-analysis'],
|
|
107
|
+
'knowledge-agent': ['knowledge-query'],
|
|
108
|
+
'db-optimizer': ['general'],
|
|
109
|
+
'frontend-specialist': ['general'],
|
|
110
|
+
'frontend-developer': ['general'],
|
|
111
|
+
'backend-specialist': ['general'],
|
|
112
|
+
'backend-developer': ['general'],
|
|
113
|
+
'database-administrator': ['general'],
|
|
114
|
+
'development-butler': ['general'],
|
|
115
|
+
'performance-profiler': ['general'],
|
|
116
|
+
'performance-engineer': ['general'],
|
|
117
|
+
'security-auditor': ['general'],
|
|
118
|
+
'technical-writer': ['general'],
|
|
119
|
+
'ui-designer': ['general'],
|
|
120
|
+
'migration-assistant': ['general'],
|
|
121
|
+
'api-integrator': ['general'],
|
|
122
|
+
'general-agent': ['general'],
|
|
123
|
+
'project-manager': ['general'],
|
|
124
|
+
'product-manager': ['general'],
|
|
125
|
+
'data-engineer': ['data-analysis'],
|
|
126
|
+
'ml-engineer': ['data-analysis'],
|
|
127
|
+
'marketing-strategist': ['general'],
|
|
128
|
+
};
|
|
129
|
+
return agentCapabilities[agent] || ['general'];
|
|
130
|
+
}
|
|
131
|
+
getFallbackAgent(primaryAgent) {
|
|
132
|
+
const fallbackMap = {
|
|
133
|
+
'code-reviewer': 'general-agent',
|
|
134
|
+
'test-writer': 'general-agent',
|
|
135
|
+
'test-automator': 'test-writer',
|
|
136
|
+
'e2e-healing-agent': 'test-automator',
|
|
137
|
+
'debugger': 'general-agent',
|
|
138
|
+
'refactorer': 'general-agent',
|
|
139
|
+
'api-designer': 'general-agent',
|
|
140
|
+
'research-agent': 'general-agent',
|
|
141
|
+
'architecture-agent': 'general-agent',
|
|
142
|
+
'data-analyst': 'general-agent',
|
|
143
|
+
'knowledge-agent': 'research-agent',
|
|
144
|
+
'db-optimizer': 'general-agent',
|
|
145
|
+
'development-butler': 'general-agent',
|
|
146
|
+
'frontend-specialist': 'general-agent',
|
|
147
|
+
'frontend-developer': 'frontend-specialist',
|
|
148
|
+
'backend-specialist': 'general-agent',
|
|
149
|
+
'backend-developer': 'backend-specialist',
|
|
150
|
+
'database-administrator': 'db-optimizer',
|
|
151
|
+
'performance-profiler': 'general-agent',
|
|
152
|
+
'performance-engineer': 'performance-profiler',
|
|
153
|
+
'security-auditor': 'general-agent',
|
|
154
|
+
'technical-writer': 'general-agent',
|
|
155
|
+
'ui-designer': 'general-agent',
|
|
156
|
+
'migration-assistant': 'general-agent',
|
|
157
|
+
'api-integrator': 'general-agent',
|
|
158
|
+
'project-manager': 'general-agent',
|
|
159
|
+
'product-manager': 'general-agent',
|
|
160
|
+
'data-engineer': 'data-analyst',
|
|
161
|
+
'ml-engineer': 'data-analyst',
|
|
162
|
+
'marketing-strategist': 'general-agent',
|
|
163
|
+
'general-agent': undefined,
|
|
164
|
+
};
|
|
165
|
+
return fallbackMap[primaryAgent];
|
|
166
|
+
}
|
|
167
|
+
generateRoutingReasoning(analysis, selectedAgent, resources) {
|
|
168
|
+
const reasons = [];
|
|
169
|
+
reasons.push(`Selected ${selectedAgent} based on task capabilities and ${analysis.complexity} complexity`);
|
|
170
|
+
reasons.push(`Available memory: ${resources.availableMemoryMB}MB`);
|
|
171
|
+
reasons.push(`Memory usage: ${resources.memoryUsagePercent}%`);
|
|
172
|
+
reasons.push(`Estimated cost: $${toDollars(analysis.estimatedCost).toFixed(6)}`);
|
|
173
|
+
const agentDescriptions = {
|
|
174
|
+
'code-reviewer': 'Specialized in code quality analysis and security review',
|
|
175
|
+
'test-writer': 'Expert in test automation and TDD',
|
|
176
|
+
'test-automator': 'Automated test execution, CI/CD integration, test coverage analysis',
|
|
177
|
+
'e2e-healing-agent': 'E2E test automation with self-healing capabilities, Playwright-powered browser testing, automatic failure analysis and code fixing',
|
|
178
|
+
'debugger': 'Specialized in root cause analysis and debugging',
|
|
179
|
+
'refactorer': 'Expert in code refactoring and design patterns',
|
|
180
|
+
'api-designer': 'Specialized in API design and RESTful principles',
|
|
181
|
+
'research-agent': 'Specialized in research and information gathering',
|
|
182
|
+
'architecture-agent': 'Expert in system architecture and design',
|
|
183
|
+
'data-analyst': 'Specialized in data analysis and visualization',
|
|
184
|
+
'knowledge-agent': 'Expert in knowledge management and organization',
|
|
185
|
+
'db-optimizer': 'Database optimization, query tuning, index design specialist',
|
|
186
|
+
'development-butler': 'Event-driven workflow automation, automates everything except coding/planning/reviewing',
|
|
187
|
+
'frontend-specialist': 'Frontend development, React, Vue, modern web frameworks expert',
|
|
188
|
+
'frontend-developer': 'Full-stack frontend development, component libraries, state management',
|
|
189
|
+
'backend-specialist': 'Backend development, API design, server architecture expert',
|
|
190
|
+
'backend-developer': 'Full-stack backend development, microservices, databases, caching',
|
|
191
|
+
'database-administrator': 'Database administration, schema design, performance tuning, backup and recovery',
|
|
192
|
+
'performance-profiler': 'Performance profiling, optimization, bottleneck identification',
|
|
193
|
+
'performance-engineer': 'End-to-end performance engineering, scalability, load testing',
|
|
194
|
+
'security-auditor': 'Security auditing, vulnerability assessment, compliance expert',
|
|
195
|
+
'technical-writer': 'Technical writing, documentation, user guides, API docs expert',
|
|
196
|
+
'ui-designer': 'UI/UX design, user experience, interface design specialist',
|
|
197
|
+
'migration-assistant': 'Migration assistance, upgrade planning, legacy modernization',
|
|
198
|
+
'api-integrator': 'API integration, third-party services, SDK implementation',
|
|
199
|
+
'general-agent': 'Versatile AI assistant for general tasks',
|
|
200
|
+
'project-manager': 'Project planning, task management, resource allocation, risk management',
|
|
201
|
+
'product-manager': 'Product strategy, roadmap planning, user requirements, feature prioritization',
|
|
202
|
+
'data-engineer': 'Data pipeline engineering, ETL/ELT, data infrastructure, data quality',
|
|
203
|
+
'ml-engineer': 'Machine learning engineering, model development, ML ops, deployment',
|
|
204
|
+
'marketing-strategist': 'Marketing strategy, campaign planning, growth, customer acquisition',
|
|
205
|
+
};
|
|
206
|
+
if (agentDescriptions[selectedAgent]) {
|
|
207
|
+
reasons.push(agentDescriptions[selectedAgent]);
|
|
208
|
+
}
|
|
209
|
+
return reasons.join('. ');
|
|
210
|
+
}
|
|
211
|
+
createFallbackDecision(analysis, reason) {
|
|
212
|
+
const fallbackAgent = 'general-agent';
|
|
213
|
+
const task = {
|
|
214
|
+
id: analysis.taskId,
|
|
215
|
+
description: `Fallback task due to: ${reason}`,
|
|
216
|
+
requiredCapabilities: ['general'],
|
|
217
|
+
metadata: {
|
|
218
|
+
complexity: 'simple',
|
|
219
|
+
isFallback: true,
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
const enhancedPrompt = this.promptEnhancer.enhance(fallbackAgent, task, 'simple');
|
|
223
|
+
return {
|
|
224
|
+
taskId: analysis.taskId,
|
|
225
|
+
selectedAgent: fallbackAgent,
|
|
226
|
+
enhancedPrompt,
|
|
227
|
+
estimatedCost: Math.round(analysis.estimatedCost * 0.2),
|
|
228
|
+
reasoning: `Fallback to ${fallbackAgent} due to: ${reason}`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
cpuUsageCache = { value: 50, timestamp: 0 };
|
|
232
|
+
CPU_CACHE_TTL = 1000;
|
|
233
|
+
getCPUUsage() {
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
if (now - this.cpuUsageCache.timestamp < this.CPU_CACHE_TTL) {
|
|
236
|
+
return this.cpuUsageCache.value;
|
|
237
|
+
}
|
|
238
|
+
const cpus = os.cpus();
|
|
239
|
+
let totalIdle = 0;
|
|
240
|
+
let totalTick = 0;
|
|
241
|
+
for (const cpu of cpus) {
|
|
242
|
+
for (const type in cpu.times) {
|
|
243
|
+
totalTick += cpu.times[type];
|
|
244
|
+
}
|
|
245
|
+
totalIdle += cpu.times.idle;
|
|
246
|
+
}
|
|
247
|
+
const idlePercentage = (100 * totalIdle) / totalTick;
|
|
248
|
+
const usage = Math.round(100 - idlePercentage);
|
|
249
|
+
this.cpuUsageCache = { value: usage, timestamp: now };
|
|
250
|
+
return usage;
|
|
251
|
+
}
|
|
252
|
+
async routeBatch(analyses) {
|
|
253
|
+
const CONCURRENCY_LIMIT = 10;
|
|
254
|
+
const results = [];
|
|
255
|
+
for (let i = 0; i < analyses.length; i += CONCURRENCY_LIMIT) {
|
|
256
|
+
const batch = analyses.slice(i, i + CONCURRENCY_LIMIT);
|
|
257
|
+
const batchResults = await Promise.all(batch.map(analysis => this.route(analysis)));
|
|
258
|
+
results.push(...batchResults);
|
|
259
|
+
}
|
|
260
|
+
return results;
|
|
261
|
+
}
|
|
262
|
+
async shouldUseParallel(decisions) {
|
|
263
|
+
const allSimple = decisions.every(decision => decision.selectedAgent === 'general-agent');
|
|
264
|
+
if (allSimple) {
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
const totalCost = decisions.reduce((sum, d) => (sum + d.estimatedCost), 0);
|
|
268
|
+
const systemResources = await this.getSystemResources();
|
|
269
|
+
const hasEnoughMemory = systemResources.memoryUsagePercent < 80;
|
|
270
|
+
const costReasonable = toDollars(totalCost) < 0.1;
|
|
271
|
+
return hasEnoughMemory && costReasonable;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=AgentRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRouter.js","sourceRoot":"","sources":["../../src/orchestrator/AgentRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CostStats } from './types.js';
|
|
2
|
+
import { type MicroDollars } from '../utils/money.js';
|
|
3
|
+
import { CostRecordsRepository } from '../evolution/storage/repositories/CostRecordsRepository.js';
|
|
4
|
+
export declare class CostTracker {
|
|
5
|
+
private costs;
|
|
6
|
+
private monthlyBudget;
|
|
7
|
+
private alertThreshold;
|
|
8
|
+
private repository?;
|
|
9
|
+
constructor(config?: {
|
|
10
|
+
repository?: CostRecordsRepository;
|
|
11
|
+
});
|
|
12
|
+
private loadFromRepository;
|
|
13
|
+
recordCost(taskId: string, modelName: string, inputTokens: number, outputTokens: number): MicroDollars;
|
|
14
|
+
private calculateCost;
|
|
15
|
+
getStats(): CostStats;
|
|
16
|
+
private checkBudgetAlert;
|
|
17
|
+
getCostByDateRange(startDate: Date, endDate: Date): MicroDollars;
|
|
18
|
+
getCostByTask(taskId: string): MicroDollars;
|
|
19
|
+
generateReport(): string;
|
|
20
|
+
clearOldRecords(keepRecent?: number): void;
|
|
21
|
+
exportData(): string;
|
|
22
|
+
isWithinBudget(estimatedCost: MicroDollars): boolean;
|
|
23
|
+
getRecommendation(): string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=CostTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.d.ts","sourceRoot":"","sources":["../../src/orchestrator/CostTracker.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,SAAS,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EACL,KAAK,YAAY,EAOlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AAEnG,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,UAAU,CAAC,CAAwB;gBAE/B,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,qBAAqB,CAAA;KAAE;IA+B3D,OAAO,CAAC,kBAAkB;IA+B1B,UAAU,CACR,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,YAAY;IAqCf,OAAO,CAAC,aAAa;IAkCrB,QAAQ,IAAI,SAAS;IA0CrB,OAAO,CAAC,gBAAgB;IAsBxB,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,YAAY;IAgBhE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAW3C,cAAc,IAAI,MAAM;IAqCxB,eAAe,CAAC,UAAU,GAAE,MAAa,GAAG,IAAI;IAUhD,UAAU,IAAI,MAAM;IAiBpB,cAAc,CAAC,aAAa,EAAE,YAAY,GAAG,OAAO;IAUpD,iBAAiB,IAAI,MAAM;CAiB5B"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { MODEL_COSTS } from '../config/models.js';
|
|
2
|
+
import { appConfig } from '../config/index.js';
|
|
3
|
+
import { toMicroDollars, formatMoney, calculateTokenCost, addCosts, calculateBudgetPercentage, } from '../utils/money.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export class CostTracker {
|
|
6
|
+
costs = [];
|
|
7
|
+
monthlyBudget;
|
|
8
|
+
alertThreshold;
|
|
9
|
+
repository;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.monthlyBudget = toMicroDollars(appConfig.costs.monthlyBudget);
|
|
12
|
+
this.alertThreshold = appConfig.costs.alertThreshold;
|
|
13
|
+
this.repository = config?.repository;
|
|
14
|
+
if (this.repository) {
|
|
15
|
+
try {
|
|
16
|
+
this.repository.ensureSchema();
|
|
17
|
+
this.loadFromRepository();
|
|
18
|
+
logger.info('CostTracker initialized with SQLite persistence', {
|
|
19
|
+
monthlyBudget: formatMoney(this.monthlyBudget),
|
|
20
|
+
loadedRecords: this.costs.length,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
logger.warn('Failed to initialize SQLite persistence, falling back to in-memory only', {
|
|
25
|
+
error: error instanceof Error ? error.message : String(error),
|
|
26
|
+
});
|
|
27
|
+
this.repository = undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
logger.info('CostTracker initialized (in-memory only)', {
|
|
32
|
+
monthlyBudget: formatMoney(this.monthlyBudget),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
loadFromRepository() {
|
|
37
|
+
if (!this.repository)
|
|
38
|
+
return;
|
|
39
|
+
const now = new Date();
|
|
40
|
+
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
41
|
+
const records = this.repository.getByTimeRange(monthStart, now);
|
|
42
|
+
for (const record of records) {
|
|
43
|
+
this.costs.push({
|
|
44
|
+
timestamp: record.timestamp,
|
|
45
|
+
taskId: record.taskId,
|
|
46
|
+
modelName: record.modelName,
|
|
47
|
+
inputTokens: record.inputTokens,
|
|
48
|
+
outputTokens: record.outputTokens,
|
|
49
|
+
cost: record.cost,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
logger.debug('Loaded cost records from SQLite', {
|
|
53
|
+
recordCount: records.length,
|
|
54
|
+
monthStart: monthStart.toISOString(),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
recordCost(taskId, modelName, inputTokens, outputTokens) {
|
|
58
|
+
const cost = this.calculateCost(modelName, inputTokens, outputTokens);
|
|
59
|
+
const record = {
|
|
60
|
+
timestamp: new Date(),
|
|
61
|
+
taskId,
|
|
62
|
+
modelName,
|
|
63
|
+
inputTokens,
|
|
64
|
+
outputTokens,
|
|
65
|
+
cost,
|
|
66
|
+
};
|
|
67
|
+
this.costs.push(record);
|
|
68
|
+
if (this.repository) {
|
|
69
|
+
try {
|
|
70
|
+
this.repository.save(record);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.warn('Failed to persist cost record to SQLite', {
|
|
74
|
+
taskId,
|
|
75
|
+
error: error instanceof Error ? error.message : String(error),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.checkBudgetAlert();
|
|
80
|
+
return cost;
|
|
81
|
+
}
|
|
82
|
+
calculateCost(modelName, inputTokens, outputTokens) {
|
|
83
|
+
const costs = MODEL_COSTS[modelName];
|
|
84
|
+
if (!costs || !('input' in costs && 'output' in costs)) {
|
|
85
|
+
logger.warn(`⚠️ Unknown model or unsupported cost structure: ${modelName}\n` +
|
|
86
|
+
` Using fallback pricing (Claude Sonnet: $3/$15 per 1M tokens) for cost estimation.\n` +
|
|
87
|
+
` Please add this model to MODEL_COSTS configuration.`);
|
|
88
|
+
const inputCost = calculateTokenCost(inputTokens, 3.0);
|
|
89
|
+
const outputCost = calculateTokenCost(outputTokens, 15.0);
|
|
90
|
+
return addCosts(inputCost, outputCost);
|
|
91
|
+
}
|
|
92
|
+
const inputCost = calculateTokenCost(inputTokens, costs.input);
|
|
93
|
+
const outputCost = calculateTokenCost(outputTokens, costs.output);
|
|
94
|
+
return addCosts(inputCost, outputCost);
|
|
95
|
+
}
|
|
96
|
+
getStats() {
|
|
97
|
+
const now = new Date();
|
|
98
|
+
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
99
|
+
const monthlyCosts = this.costs.filter(record => record.timestamp >= monthStart);
|
|
100
|
+
const totalCost = monthlyCosts.reduce((sum, record) => (sum + record.cost), 0);
|
|
101
|
+
const taskCount = monthlyCosts.length;
|
|
102
|
+
const averageCostPerTask = taskCount > 0
|
|
103
|
+
? Math.round(totalCost / taskCount)
|
|
104
|
+
: 0;
|
|
105
|
+
const costByModel = monthlyCosts.reduce((acc, record) => {
|
|
106
|
+
const currentCost = (acc[record.modelName] || 0);
|
|
107
|
+
acc[record.modelName] = (currentCost + record.cost);
|
|
108
|
+
return acc;
|
|
109
|
+
}, {});
|
|
110
|
+
const remainingBudget = (this.monthlyBudget - totalCost);
|
|
111
|
+
return {
|
|
112
|
+
totalCost,
|
|
113
|
+
taskCount,
|
|
114
|
+
averageCostPerTask,
|
|
115
|
+
costByModel,
|
|
116
|
+
monthlySpend: totalCost,
|
|
117
|
+
remainingBudget,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
checkBudgetAlert() {
|
|
121
|
+
const stats = this.getStats();
|
|
122
|
+
const budgetUsagePercent = calculateBudgetPercentage(stats.monthlySpend, this.monthlyBudget) / 100;
|
|
123
|
+
if (budgetUsagePercent >= this.alertThreshold) {
|
|
124
|
+
logger.warn(`\n⚠️ BUDGET ALERT ⚠️\n` +
|
|
125
|
+
`Monthly spend: ${formatMoney(stats.monthlySpend, 2)} / ${formatMoney(this.monthlyBudget, 2)}\n` +
|
|
126
|
+
`Usage: ${(budgetUsagePercent * 100).toFixed(1)}%\n` +
|
|
127
|
+
`Remaining: ${formatMoney(stats.remainingBudget, 2)}\n`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
getCostByDateRange(startDate, endDate) {
|
|
131
|
+
const filtered = this.costs.filter(record => record.timestamp >= startDate && record.timestamp <= endDate);
|
|
132
|
+
return filtered.reduce((sum, record) => (sum + record.cost), 0);
|
|
133
|
+
}
|
|
134
|
+
getCostByTask(taskId) {
|
|
135
|
+
const taskCosts = this.costs.filter(record => record.taskId === taskId);
|
|
136
|
+
return taskCosts.reduce((sum, record) => (sum + record.cost), 0);
|
|
137
|
+
}
|
|
138
|
+
generateReport() {
|
|
139
|
+
const stats = this.getStats();
|
|
140
|
+
const budgetUsagePercent = calculateBudgetPercentage(stats.monthlySpend, this.monthlyBudget);
|
|
141
|
+
const lines = [
|
|
142
|
+
'📊 Cost Report',
|
|
143
|
+
'═'.repeat(50),
|
|
144
|
+
'',
|
|
145
|
+
`Total Tasks: ${stats.taskCount}`,
|
|
146
|
+
`Total Cost: ${formatMoney(stats.totalCost)}`,
|
|
147
|
+
`Average Cost/Task: ${formatMoney(stats.averageCostPerTask)}`,
|
|
148
|
+
'',
|
|
149
|
+
`Monthly Budget: ${formatMoney(this.monthlyBudget, 2)}`,
|
|
150
|
+
`Monthly Spend: ${formatMoney(stats.monthlySpend)}`,
|
|
151
|
+
`Remaining Budget: ${formatMoney(stats.remainingBudget)}`,
|
|
152
|
+
`Budget Usage: ${budgetUsagePercent.toFixed(1)}%`,
|
|
153
|
+
'',
|
|
154
|
+
'Cost by Model:',
|
|
155
|
+
'─'.repeat(50),
|
|
156
|
+
];
|
|
157
|
+
for (const [model, cost] of Object.entries(stats.costByModel)) {
|
|
158
|
+
const percentage = calculateBudgetPercentage(cost, stats.totalCost);
|
|
159
|
+
lines.push(` ${model}: ${formatMoney(cost)} (${percentage.toFixed(1)}%)`);
|
|
160
|
+
}
|
|
161
|
+
lines.push('═'.repeat(50));
|
|
162
|
+
return lines.join('\n');
|
|
163
|
+
}
|
|
164
|
+
clearOldRecords(keepRecent = 1000) {
|
|
165
|
+
if (this.costs.length > keepRecent) {
|
|
166
|
+
this.costs = this.costs.slice(-keepRecent);
|
|
167
|
+
logger.info(`🧹 Cleared old cost records. Keeping ${keepRecent} recent records.`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exportData() {
|
|
171
|
+
return JSON.stringify({
|
|
172
|
+
costs: this.costs,
|
|
173
|
+
stats: this.getStats(),
|
|
174
|
+
exportedAt: new Date().toISOString(),
|
|
175
|
+
}, null, 2);
|
|
176
|
+
}
|
|
177
|
+
isWithinBudget(estimatedCost) {
|
|
178
|
+
const stats = this.getStats();
|
|
179
|
+
const projectedSpend = (stats.monthlySpend + estimatedCost);
|
|
180
|
+
return projectedSpend <= this.monthlyBudget;
|
|
181
|
+
}
|
|
182
|
+
getRecommendation() {
|
|
183
|
+
const stats = this.getStats();
|
|
184
|
+
const budgetUsagePercent = calculateBudgetPercentage(stats.monthlySpend, this.monthlyBudget);
|
|
185
|
+
if (budgetUsagePercent < 50) {
|
|
186
|
+
return '✅ Budget usage is healthy. Continue normal operations.';
|
|
187
|
+
}
|
|
188
|
+
else if (budgetUsagePercent < 80) {
|
|
189
|
+
return '⚠️ Budget usage is moderate. Monitor spending closely.';
|
|
190
|
+
}
|
|
191
|
+
else if (budgetUsagePercent < 100) {
|
|
192
|
+
return '🚨 Budget usage is high. Consider using more cost-efficient models (Haiku).';
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
return '❌ Budget exceeded! Switch to Haiku-only mode or pause operations.';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=CostTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.js","sourceRoot":"","sources":["../../src/orchestrator/CostTracker.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAEL,cAAc,EAEd,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,OAAO,WAAW;IACd,KAAK,GAAiB,EAAE,CAAC;IAEzB,aAAa,CAAe;IAC5B,cAAc,CAAS;IAEvB,UAAU,CAAyB;IAE3C,YAAY,MAA+C;QAEzD,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC;QAGrC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;oBAC7D,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC9C,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;iBACjC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,yEAAyE,EAAE;oBACrF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;gBACtD,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAKO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAG7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAGhE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;YAC9C,WAAW,EAAE,OAAO,CAAC,MAAM;YAC3B,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAOD,UAAU,CACR,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,YAAoB;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAe;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM;YACN,SAAS;YACT,WAAW;YACX,YAAY;YACZ,IAAI;SACL,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAGxB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;oBACrD,MAAM;oBACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC;IACd,CAAC;IAOO,aAAa,CACnB,SAAiB,EACjB,WAAmB,EACnB,YAAoB;QAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,SAAqC,CAAC,CAAC;QAGjE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CACT,oDAAoD,SAAS,IAAI;gBACjE,wFAAwF;gBACxF,wDAAwD,CACzD,CAAC;YAIF,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAE1D,OAAO,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAID,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAElE,OAAO,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAKD,QAAQ;QACN,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAGlE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU,CACzC,CAAC;QAGF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAiB,EACpD,CAAiB,CAClB,CAAC;QAEF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;QACtC,MAAM,kBAAkB,GAAG,SAAS,GAAG,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAiB;YACnD,CAAC,CAAC,CAAiB,CAAC;QAGtB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAW,CAAC;YAC3D,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAiB,CAAC;YACpE,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAkC,CAAC,CAAC;QAEvC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAiB,CAAC;QAEzE,OAAO;YACL,SAAS;YACT,SAAS;YACT,kBAAkB;YAClB,WAAW;YACX,YAAY,EAAE,SAAS;YACvB,eAAe;SAChB,CAAC;IACJ,CAAC;IAKO,gBAAgB;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,KAAK,CAAC,YAAY,EAClB,IAAI,CAAC,aAAa,CACnB,GAAG,GAAG,CAAC;QAER,IAAI,kBAAkB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CACT,yBAAyB;gBACzB,kBAAkB,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI;gBAChG,UAAU,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACpD,cAAc,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAOD,kBAAkB,CAAC,SAAe,EAAE,OAAa;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAChC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,OAAO,CACvE,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAiB,EACpD,CAAiB,CAClB,CAAC;IACJ,CAAC;IAOD,aAAa,CAAC,MAAc;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACxE,OAAO,SAAS,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAiB,EACpD,CAAiB,CAClB,CAAC;IACJ,CAAC;IAKD,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,KAAK,CAAC,YAAY,EAClB,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,MAAM,KAAK,GAAG;YACZ,gBAAgB;YAChB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACd,EAAE;YACF,gBAAgB,KAAK,CAAC,SAAS,EAAE;YACjC,eAAe,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC7C,sBAAsB,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YAC7D,EAAE;YACF,mBAAmB,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE;YACvD,kBAAkB,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YACnD,qBAAqB,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;YACzD,iBAAiB,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACjD,EAAE;YACF,gBAAgB;YAChB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;SACf,CAAC;QAEF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAKD,eAAe,CAAC,aAAqB,IAAI;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,wCAAwC,UAAU,kBAAkB,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAKD,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;YACtB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAOD,cAAc,CAAC,aAA2B;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,aAAa,CAAiB,CAAC;QAE5E,OAAO,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC;IAC9C,CAAC;IAKD,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,KAAK,CAAC,YAAY,EAClB,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,IAAI,kBAAkB,GAAG,EAAE,EAAE,CAAC;YAC5B,OAAO,wDAAwD,CAAC;QAClE,CAAC;aAAM,IAAI,kBAAkB,GAAG,EAAE,EAAE,CAAC;YACnC,OAAO,yDAAyD,CAAC;QACnE,CAAC;aAAM,IAAI,kBAAkB,GAAG,GAAG,EAAE,CAAC;YACpC,OAAO,6EAA6E,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,OAAO,mEAAmE,CAAC;QAC7E,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { SystemResourcesConfig } from '../utils/SystemResources.js';
|
|
2
|
+
export interface ResourceSlot {
|
|
3
|
+
type: 'e2e' | 'build' | 'heavy_compute';
|
|
4
|
+
orchestratorId: string;
|
|
5
|
+
acquiredAt: Date;
|
|
6
|
+
pid: number;
|
|
7
|
+
}
|
|
8
|
+
export interface GlobalResourcePoolConfig extends SystemResourcesConfig {
|
|
9
|
+
maxConcurrentE2E?: number;
|
|
10
|
+
e2eWaitTimeout?: number;
|
|
11
|
+
maxConcurrentBuilds?: number;
|
|
12
|
+
buildWaitTimeout?: number;
|
|
13
|
+
staleCheckInterval?: number;
|
|
14
|
+
staleLockThreshold?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class GlobalResourcePool {
|
|
17
|
+
private static instance;
|
|
18
|
+
private resourceManager;
|
|
19
|
+
private config;
|
|
20
|
+
private activeE2E;
|
|
21
|
+
private activeBuilds;
|
|
22
|
+
private e2eMutex;
|
|
23
|
+
private e2eWaitQueue;
|
|
24
|
+
private staleCheckTimer;
|
|
25
|
+
private constructor();
|
|
26
|
+
static getInstance(config?: GlobalResourcePoolConfig): GlobalResourcePool;
|
|
27
|
+
static resetInstance(): void;
|
|
28
|
+
acquireE2ESlot(orchestratorId: string): Promise<void>;
|
|
29
|
+
private acquireMutex;
|
|
30
|
+
releaseE2ESlot(orchestratorId: string): void;
|
|
31
|
+
private processE2EWaitQueue;
|
|
32
|
+
canRunE2E(count?: number): Promise<{
|
|
33
|
+
canRun: boolean;
|
|
34
|
+
reason?: string;
|
|
35
|
+
recommendation?: string;
|
|
36
|
+
}>;
|
|
37
|
+
getStatus(): {
|
|
38
|
+
e2e: {
|
|
39
|
+
active: number;
|
|
40
|
+
max: number;
|
|
41
|
+
waiting: number;
|
|
42
|
+
slots: ResourceSlot[];
|
|
43
|
+
};
|
|
44
|
+
builds: {
|
|
45
|
+
active: number;
|
|
46
|
+
max: number;
|
|
47
|
+
slots: ResourceSlot[];
|
|
48
|
+
};
|
|
49
|
+
systemResources?: unknown;
|
|
50
|
+
};
|
|
51
|
+
generateReport(): Promise<string>;
|
|
52
|
+
private checkStaleLocksと;
|
|
53
|
+
private startStaleCheckTimer;
|
|
54
|
+
cleanup(): void;
|
|
55
|
+
}
|
|
56
|
+
export declare function acquireE2ESlot(orchestratorId: string): Promise<void>;
|
|
57
|
+
export declare function releaseE2ESlot(orchestratorId: string): void;
|
|
58
|
+
export declare function canRunE2E(count?: number): Promise<ReturnType<GlobalResourcePool['canRunE2E']>>;
|
|
59
|
+
//# sourceMappingURL=GlobalResourcePool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalResourcePool.d.ts","sourceRoot":"","sources":["../../src/orchestrator/GlobalResourcePool.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyB,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAQ3F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,eAAe,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,IAAI,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IAErE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAE1D,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAAqC;IAGnD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,YAAY,CAAwC;IAG5D,OAAO,CAAC,QAAQ,CAAoC;IAGpD,OAAO,CAAC,YAAY,CAKZ;IAGR,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO;IA4BP,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,wBAAwB,GAAG,kBAAkB;IAUzE,MAAM,CAAC,aAAa,IAAI,IAAI;IAgBtB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA4E7C,YAAY;IAqB1B,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAkB5C,OAAO,CAAC,mBAAmB;IA4BrB,SAAS,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAkBF,SAAS,IAAI;QACX,GAAG,EAAE;YACH,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,YAAY,EAAE,CAAC;SACvB,CAAC;QACF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,YAAY,EAAE,CAAC;SACvB,CAAC;QACF,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B;IAmBK,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YA6BzB,gBAAgB;IA6B9B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,IAAI,IAAI;CAehB;AAGD,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAsB,SAAS,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAGvG"}
|