universal-agent-protocol 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +462 -0
- package/dist/analyzers/index.d.ts +3 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +656 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +506 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/tool-calls.d.ts +3 -0
- package/dist/bin/tool-calls.d.ts.map +1 -0
- package/dist/bin/tool-calls.js +4 -0
- package/dist/bin/tool-calls.js.map +1 -0
- package/dist/cli/agent.d.ts +20 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +434 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/analyze.d.ts +7 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +103 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/coord.d.ts +7 -0
- package/dist/cli/coord.d.ts.map +1 -0
- package/dist/cli/coord.js +138 -0
- package/dist/cli/coord.js.map +1 -0
- package/dist/cli/dashboard.d.ts +8 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +704 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/deploy.d.ts +19 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +267 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/droids.d.ts +9 -0
- package/dist/cli/droids.d.ts.map +1 -0
- package/dist/cli/droids.js +227 -0
- package/dist/cli/droids.js.map +1 -0
- package/dist/cli/generate.d.ts +17 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +432 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/hooks.d.ts +9 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +374 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +316 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-router.d.ts +16 -0
- package/dist/cli/mcp-router.d.ts.map +1 -0
- package/dist/cli/mcp-router.js +143 -0
- package/dist/cli/mcp-router.js.map +1 -0
- package/dist/cli/memory.d.ts +24 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +877 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model.d.ts +15 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +270 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/patterns.d.ts +26 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +587 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/setup-mcp-router.d.ts +8 -0
- package/dist/cli/setup-mcp-router.d.ts.map +1 -0
- package/dist/cli/setup-mcp-router.js +163 -0
- package/dist/cli/setup-mcp-router.js.map +1 -0
- package/dist/cli/setup.d.ts +13 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +146 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/sync.d.ts +7 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +26 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/task.d.ts +33 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +616 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/tool-calls.d.ts +8 -0
- package/dist/cli/tool-calls.d.ts.map +1 -0
- package/dist/cli/tool-calls.js +239 -0
- package/dist/cli/tool-calls.js.map +1 -0
- package/dist/cli/update.d.ts +10 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +300 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/visualize.d.ts +77 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +287 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/cli/worktree.d.ts +9 -0
- package/dist/cli/worktree.d.ts.map +1 -0
- package/dist/cli/worktree.js +175 -0
- package/dist/cli/worktree.js.map +1 -0
- package/dist/coordination/capability-router.d.ts +79 -0
- package/dist/coordination/capability-router.d.ts.map +1 -0
- package/dist/coordination/capability-router.js +324 -0
- package/dist/coordination/capability-router.js.map +1 -0
- package/dist/coordination/database.d.ts +13 -0
- package/dist/coordination/database.d.ts.map +1 -0
- package/dist/coordination/database.js +131 -0
- package/dist/coordination/database.js.map +1 -0
- package/dist/coordination/deploy-batcher.d.ts +101 -0
- package/dist/coordination/deploy-batcher.d.ts.map +1 -0
- package/dist/coordination/deploy-batcher.js +565 -0
- package/dist/coordination/deploy-batcher.js.map +1 -0
- package/dist/coordination/index.d.ts +5 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +5 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/service.d.ts +81 -0
- package/dist/coordination/service.d.ts.map +1 -0
- package/dist/coordination/service.js +603 -0
- package/dist/coordination/service.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +977 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/template-loader.d.ts +105 -0
- package/dist/generators/template-loader.d.ts.map +1 -0
- package/dist/generators/template-loader.js +291 -0
- package/dist/generators/template-loader.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-router/config/parser.d.ts +9 -0
- package/dist/mcp-router/config/parser.d.ts.map +1 -0
- package/dist/mcp-router/config/parser.js +174 -0
- package/dist/mcp-router/config/parser.js.map +1 -0
- package/dist/mcp-router/executor/client.d.ts +31 -0
- package/dist/mcp-router/executor/client.d.ts.map +1 -0
- package/dist/mcp-router/executor/client.js +187 -0
- package/dist/mcp-router/executor/client.js.map +1 -0
- package/dist/mcp-router/index.d.ts +22 -0
- package/dist/mcp-router/index.d.ts.map +1 -0
- package/dist/mcp-router/index.js +18 -0
- package/dist/mcp-router/index.js.map +1 -0
- package/dist/mcp-router/output-compressor.d.ts +26 -0
- package/dist/mcp-router/output-compressor.d.ts.map +1 -0
- package/dist/mcp-router/output-compressor.js +236 -0
- package/dist/mcp-router/output-compressor.js.map +1 -0
- package/dist/mcp-router/search/fuzzy.d.ts +26 -0
- package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
- package/dist/mcp-router/search/fuzzy.js +94 -0
- package/dist/mcp-router/search/fuzzy.js.map +1 -0
- package/dist/mcp-router/server.d.ts +50 -0
- package/dist/mcp-router/server.d.ts.map +1 -0
- package/dist/mcp-router/server.js +229 -0
- package/dist/mcp-router/server.js.map +1 -0
- package/dist/mcp-router/session-stats.d.ts +37 -0
- package/dist/mcp-router/session-stats.d.ts.map +1 -0
- package/dist/mcp-router/session-stats.js +56 -0
- package/dist/mcp-router/session-stats.js.map +1 -0
- package/dist/mcp-router/tools/discover.d.ts +37 -0
- package/dist/mcp-router/tools/discover.d.ts.map +1 -0
- package/dist/mcp-router/tools/discover.js +65 -0
- package/dist/mcp-router/tools/discover.js.map +1 -0
- package/dist/mcp-router/tools/execute.d.ts +43 -0
- package/dist/mcp-router/tools/execute.d.ts.map +1 -0
- package/dist/mcp-router/tools/execute.js +103 -0
- package/dist/mcp-router/tools/execute.js.map +1 -0
- package/dist/mcp-router/types.d.ts +62 -0
- package/dist/mcp-router/types.d.ts.map +1 -0
- package/dist/mcp-router/types.js +6 -0
- package/dist/mcp-router/types.js.map +1 -0
- package/dist/memory/adaptive-context.d.ts +146 -0
- package/dist/memory/adaptive-context.d.ts.map +1 -0
- package/dist/memory/adaptive-context.js +1022 -0
- package/dist/memory/adaptive-context.js.map +1 -0
- package/dist/memory/agent-scoped-memory.d.ts +67 -0
- package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
- package/dist/memory/agent-scoped-memory.js +126 -0
- package/dist/memory/agent-scoped-memory.js.map +1 -0
- package/dist/memory/backends/base.d.ts +18 -0
- package/dist/memory/backends/base.d.ts.map +1 -0
- package/dist/memory/backends/base.js +2 -0
- package/dist/memory/backends/base.js.map +1 -0
- package/dist/memory/backends/factory.d.ts +4 -0
- package/dist/memory/backends/factory.d.ts.map +1 -0
- package/dist/memory/backends/factory.js +53 -0
- package/dist/memory/backends/factory.js.map +1 -0
- package/dist/memory/backends/github.d.ts +22 -0
- package/dist/memory/backends/github.d.ts.map +1 -0
- package/dist/memory/backends/github.js +118 -0
- package/dist/memory/backends/github.js.map +1 -0
- package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
- package/dist/memory/backends/qdrant-cloud.js +168 -0
- package/dist/memory/backends/qdrant-cloud.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +74 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +289 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/correction-propagator.d.ts +44 -0
- package/dist/memory/correction-propagator.d.ts.map +1 -0
- package/dist/memory/correction-propagator.js +156 -0
- package/dist/memory/correction-propagator.js.map +1 -0
- package/dist/memory/daily-log.d.ts +67 -0
- package/dist/memory/daily-log.d.ts.map +1 -0
- package/dist/memory/daily-log.js +143 -0
- package/dist/memory/daily-log.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +110 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +688 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +116 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +461 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +141 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +477 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +124 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +514 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-maintenance.d.ts +39 -0
- package/dist/memory/memory-maintenance.d.ts.map +1 -0
- package/dist/memory/memory-maintenance.js +305 -0
- package/dist/memory/memory-maintenance.js.map +1 -0
- package/dist/memory/model-router.d.ts +102 -0
- package/dist/memory/model-router.d.ts.map +1 -0
- package/dist/memory/model-router.js +448 -0
- package/dist/memory/model-router.js.map +1 -0
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +420 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/prepopulate.d.ts +76 -0
- package/dist/memory/prepopulate.d.ts.map +1 -0
- package/dist/memory/prepopulate.js +815 -0
- package/dist/memory/prepopulate.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +348 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/serverless-qdrant.d.ts +102 -0
- package/dist/memory/serverless-qdrant.d.ts.map +1 -0
- package/dist/memory/serverless-qdrant.js +369 -0
- package/dist/memory/serverless-qdrant.js.map +1 -0
- package/dist/memory/short-term/factory.d.ts +26 -0
- package/dist/memory/short-term/factory.d.ts.map +1 -0
- package/dist/memory/short-term/factory.js +28 -0
- package/dist/memory/short-term/factory.js.map +1 -0
- package/dist/memory/short-term/indexeddb.d.ts +25 -0
- package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
- package/dist/memory/short-term/indexeddb.js +64 -0
- package/dist/memory/short-term/indexeddb.js.map +1 -0
- package/dist/memory/short-term/schema.d.ts +6 -0
- package/dist/memory/short-term/schema.d.ts.map +1 -0
- package/dist/memory/short-term/schema.js +119 -0
- package/dist/memory/short-term/schema.js.map +1 -0
- package/dist/memory/short-term/sqlite.d.ts +50 -0
- package/dist/memory/short-term/sqlite.d.ts.map +1 -0
- package/dist/memory/short-term/sqlite.js +221 -0
- package/dist/memory/short-term/sqlite.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +111 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +409 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +34 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +300 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
- package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
- package/dist/memory/terminal-bench-knowledge.js +399 -0
- package/dist/memory/terminal-bench-knowledge.js.map +1 -0
- package/dist/memory/write-gate.d.ts +39 -0
- package/dist/memory/write-gate.d.ts.map +1 -0
- package/dist/memory/write-gate.js +190 -0
- package/dist/memory/write-gate.js.map +1 -0
- package/dist/models/executor.d.ts +130 -0
- package/dist/models/executor.d.ts.map +1 -0
- package/dist/models/executor.js +383 -0
- package/dist/models/executor.js.map +1 -0
- package/dist/models/index.d.ts +15 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +17 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/planner.d.ts +71 -0
- package/dist/models/planner.d.ts.map +1 -0
- package/dist/models/planner.js +344 -0
- package/dist/models/planner.js.map +1 -0
- package/dist/models/router.d.ts +75 -0
- package/dist/models/router.d.ts.map +1 -0
- package/dist/models/router.js +344 -0
- package/dist/models/router.js.map +1 -0
- package/dist/models/types.d.ts +370 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +181 -0
- package/dist/models/types.js.map +1 -0
- package/dist/tasks/coordination.d.ts +74 -0
- package/dist/tasks/coordination.d.ts.map +1 -0
- package/dist/tasks/coordination.js +237 -0
- package/dist/tasks/coordination.js.map +1 -0
- package/dist/tasks/database.d.ts +14 -0
- package/dist/tasks/database.d.ts.map +1 -0
- package/dist/tasks/database.js +128 -0
- package/dist/tasks/database.js.map +1 -0
- package/dist/tasks/index.d.ts +5 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +5 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/service.d.ts +39 -0
- package/dist/tasks/service.d.ts.map +1 -0
- package/dist/tasks/service.js +582 -0
- package/dist/tasks/service.js.map +1 -0
- package/dist/tasks/types.d.ts +224 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +64 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/analysis.d.ts +82 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/config.d.ts +3023 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +292 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coordination.d.ts +240 -0
- package/dist/types/coordination.d.ts.map +1 -0
- package/dist/types/coordination.js +43 -0
- package/dist/types/coordination.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/calculate-average.d.ts +15 -0
- package/dist/utils/calculate-average.d.ts.map +1 -0
- package/dist/utils/calculate-average.js +21 -0
- package/dist/utils/calculate-average.js.map +1 -0
- package/dist/utils/config-manager.d.ts +30 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +41 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/dijkstra.d.ts +17 -0
- package/dist/utils/dijkstra.d.ts.map +1 -0
- package/dist/utils/dijkstra.js +91 -0
- package/dist/utils/dijkstra.js.map +1 -0
- package/dist/utils/fetch-with-retry.d.ts +5 -0
- package/dist/utils/fetch-with-retry.d.ts.map +1 -0
- package/dist/utils/fetch-with-retry.js +61 -0
- package/dist/utils/fetch-with-retry.js.map +1 -0
- package/dist/utils/merge-claude-md.d.ts +28 -0
- package/dist/utils/merge-claude-md.d.ts.map +1 -0
- package/dist/utils/merge-claude-md.js +342 -0
- package/dist/utils/merge-claude-md.js.map +1 -0
- package/dist/utils/order-processor-refactored.d.ts +126 -0
- package/dist/utils/order-processor-refactored.d.ts.map +1 -0
- package/dist/utils/order-processor-refactored.js +165 -0
- package/dist/utils/order-processor-refactored.js.map +1 -0
- package/dist/utils/order-processor-strategy.d.ts +72 -0
- package/dist/utils/order-processor-strategy.d.ts.map +1 -0
- package/dist/utils/order-processor-strategy.js +158 -0
- package/dist/utils/order-processor-strategy.js.map +1 -0
- package/dist/utils/order-processor.d.ts +242 -0
- package/dist/utils/order-processor.d.ts.map +1 -0
- package/dist/utils/order-processor.js +370 -0
- package/dist/utils/order-processor.js.map +1 -0
- package/dist/utils/rate-limiter-simple.d.ts +58 -0
- package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
- package/dist/utils/rate-limiter-simple.js +100 -0
- package/dist/utils/rate-limiter-simple.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +62 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +150 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +37 -0
- package/dist/utils/string-similarity.d.ts.map +1 -0
- package/dist/utils/string-similarity.js +114 -0
- package/dist/utils/string-similarity.js.map +1 -0
- package/dist/utils/validate-json.d.ts +51 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +99 -0
- package/dist/utils/validate-json.js.map +1 -0
- package/package.json +96 -0
- package/templates/CLAUDE.template.md +11 -0
- package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
- package/templates/CLAUDE_CODING.template.md +125 -0
- package/templates/CLAUDE_DROIDS.template.md +109 -0
- package/templates/CLAUDE_MEMORY.template.md +130 -0
- package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
- package/templates/PROJECT.template.md +209 -0
- package/templates/SCHEMA.md +57 -0
- package/templates/archive/CLAUDE.template.root-v6.md +762 -0
- package/templates/archive/CLAUDE.template.v6.md +762 -0
- package/templates/hooks/pre-compact.sh +68 -0
- package/templates/hooks/session-start.sh +106 -0
- package/tools/agents/README.md +224 -0
- package/tools/agents/UAP/README.md +351 -0
- package/tools/agents/UAP/__init__.py +9 -0
- package/tools/agents/UAP/cli.py +675 -0
- package/tools/agents/UAP/version.py +2 -0
- package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
- package/tools/agents/config/chat_template.jinja +172 -0
- package/tools/agents/docker-compose.qdrant.yml +24 -0
- package/tools/agents/migrations/apply.py +256 -0
- package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
- package/tools/agents/scripts/init_qdrant.py +151 -0
- package/tools/agents/scripts/memory_migration.py +518 -0
- package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
- package/tools/agents/scripts/query_memory.py +189 -0
- package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
- package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
- package/tools/agents/scripts/start-services.sh +96 -0
- package/tools/agents/tests/test_uap_compliance.py +257 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp-router/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAS5B,MAAM,OAAO,SAAS;IACZ,MAAM,CAAY;IAClB,WAAW,CAAkB;IAC7B,UAAU,CAAgB;IAC1B,OAAO,CAAgB;IACvB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,OAAO,GAAG;YACb,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,KAAK;YACd,GAAG,OAAO;SACX,CAAC;QAEF,cAAc;QACd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAqB,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACvD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACxB,MAAM,CAAC,UAAU,EAAE,CAAC;gBAEpB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,YAAY,UAAU,KAAK,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,YAAY,UAAU,sBAAsB,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAa;QAC9C,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB;gBACnB,OAAO,mBAAmB,CAAC,IAAiD,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAElG,KAAK,cAAc;gBACjB,OAAO,iBAAiB,CACtB,IAA+C,EAC/C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,CAChB,CAAC;YAEJ;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAEvD,yDAAyD;QACzD,MAAM,iBAAiB,GAAG,KAAK,GAAG,GAAG,CAAC;QAEtC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,2BAA2B,EAAE,GAAG,yBAAyB,EAAE,CAAC;QAEjF,MAAM,OAAO,GAAG,iBAAiB,GAAG,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,YAAY,CAAC,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;YACjF,CAAC,CAAC,IAAI,CAAC;QAET,OAAO;YACL,YAAY,EAAE,OAAO;YACrB,UAAU,EAAE,KAAK;YACjB,iBAAiB;YACjB,YAAY;YACZ,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAyB,EAAE;IAC9D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5D,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,SAAS,IAAI,CAAC,OAAe;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,SAAS,aAAa,CAAC,OAKtB;QACC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAEvC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY;gBACf,IAAI,CAAC;oBACH,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE;wBACN,eAAe,EAAE,YAAY;wBAC7B,YAAY,EAAE;4BACZ,KAAK,EAAE,EAAE;yBACV;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,gBAAgB;4BACtB,OAAO,EAAE,OAAO;yBACjB;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,2BAA2B;gBAC9B,qBAAqB;gBACrB,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC;oBACH,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE;wBACN,KAAK,EAAE,MAAM,CAAC,kBAAkB,EAAE;qBACnC;iBACF,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAA8C,CAAC;gBACjF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;qBAC9B,IAAI,CAAC,MAAM,CAAC,EAAE;oBACb,IAAI,CAAC;wBACH,OAAO,EAAE,KAAK;wBACd,EAAE;wBACF,MAAM,EAAE;4BACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;yBACnE;qBACF,CAAC,CAAC;gBACL,CAAC,CAAC;qBACD,KAAK,CAAC,KAAK,CAAC,EAAE;oBACb,IAAI,CAAC;wBACH,OAAO,EAAE,KAAK;wBACd,EAAE;wBACF,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,KAAK;4BACZ,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAChE;qBACF,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACL,MAAM;YACR,CAAC;YAED;gBACE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,OAAO,EAAE,KAAK;wBACd,EAAE;wBACF,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,KAAK;4BACZ,OAAO,EAAE,qBAAqB,MAAM,EAAE;yBACvC;qBACF,CAAC,CAAC;gBACL,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAE3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Stats - Real-time context consumption tracking.
|
|
3
|
+
*
|
|
4
|
+
* Records per-tool-call byte usage (raw vs compressed) so users
|
|
5
|
+
* can see where their context window budget goes.
|
|
6
|
+
*/
|
|
7
|
+
export interface ToolCallRecord {
|
|
8
|
+
tool: string;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
rawBytes: number;
|
|
11
|
+
contextBytes: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ToolBreakdown {
|
|
14
|
+
tool: string;
|
|
15
|
+
calls: number;
|
|
16
|
+
contextBytes: number;
|
|
17
|
+
rawBytes: number;
|
|
18
|
+
}
|
|
19
|
+
export interface StatsSummary {
|
|
20
|
+
uptimeMs: number;
|
|
21
|
+
totalCalls: number;
|
|
22
|
+
totalContextBytes: number;
|
|
23
|
+
totalRawBytes: number;
|
|
24
|
+
savingsRatio: number;
|
|
25
|
+
savingsPercent: string;
|
|
26
|
+
byTool: ToolBreakdown[];
|
|
27
|
+
}
|
|
28
|
+
export declare class SessionStats {
|
|
29
|
+
private startTime;
|
|
30
|
+
private calls;
|
|
31
|
+
record(tool: string, rawBytes: number, contextBytes: number): void;
|
|
32
|
+
getSummary(): StatsSummary;
|
|
33
|
+
reset(): void;
|
|
34
|
+
getCalls(): ReadonlyArray<ToolCallRecord>;
|
|
35
|
+
}
|
|
36
|
+
export declare const globalSessionStats: SessionStats;
|
|
37
|
+
//# sourceMappingURL=session-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-stats.d.ts","sourceRoot":"","sources":["../../src/mcp-router/session-stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,KAAK,CAAwB;IAErC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IASlE,UAAU,IAAI,YAAY;IAiC1B,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI,aAAa,CAAC,cAAc,CAAC;CAG1C;AAED,eAAO,MAAM,kBAAkB,cAAqB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Stats - Real-time context consumption tracking.
|
|
3
|
+
*
|
|
4
|
+
* Records per-tool-call byte usage (raw vs compressed) so users
|
|
5
|
+
* can see where their context window budget goes.
|
|
6
|
+
*/
|
|
7
|
+
export class SessionStats {
|
|
8
|
+
startTime = Date.now();
|
|
9
|
+
calls = [];
|
|
10
|
+
record(tool, rawBytes, contextBytes) {
|
|
11
|
+
this.calls.push({
|
|
12
|
+
tool,
|
|
13
|
+
timestamp: Date.now(),
|
|
14
|
+
rawBytes,
|
|
15
|
+
contextBytes,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getSummary() {
|
|
19
|
+
const totalRawBytes = this.calls.reduce((s, c) => s + c.rawBytes, 0);
|
|
20
|
+
const totalContextBytes = this.calls.reduce((s, c) => s + c.contextBytes, 0);
|
|
21
|
+
const savingsRatio = totalContextBytes > 0 ? totalRawBytes / totalContextBytes : 1;
|
|
22
|
+
const savingsPercent = totalRawBytes > 0
|
|
23
|
+
? `${Math.round((1 - totalContextBytes / totalRawBytes) * 100)}%`
|
|
24
|
+
: '0%';
|
|
25
|
+
// Aggregate by tool
|
|
26
|
+
const toolMap = new Map();
|
|
27
|
+
for (const call of this.calls) {
|
|
28
|
+
const existing = toolMap.get(call.tool) || { calls: 0, contextBytes: 0, rawBytes: 0 };
|
|
29
|
+
existing.calls++;
|
|
30
|
+
existing.contextBytes += call.contextBytes;
|
|
31
|
+
existing.rawBytes += call.rawBytes;
|
|
32
|
+
toolMap.set(call.tool, existing);
|
|
33
|
+
}
|
|
34
|
+
const byTool = Array.from(toolMap.entries())
|
|
35
|
+
.map(([tool, data]) => ({ tool, ...data }))
|
|
36
|
+
.sort((a, b) => b.contextBytes - a.contextBytes);
|
|
37
|
+
return {
|
|
38
|
+
uptimeMs: Date.now() - this.startTime,
|
|
39
|
+
totalCalls: this.calls.length,
|
|
40
|
+
totalContextBytes,
|
|
41
|
+
totalRawBytes,
|
|
42
|
+
savingsRatio: Math.round(savingsRatio * 10) / 10,
|
|
43
|
+
savingsPercent,
|
|
44
|
+
byTool,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
reset() {
|
|
48
|
+
this.startTime = Date.now();
|
|
49
|
+
this.calls = [];
|
|
50
|
+
}
|
|
51
|
+
getCalls() {
|
|
52
|
+
return this.calls;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const globalSessionStats = new SessionStats();
|
|
56
|
+
//# sourceMappingURL=session-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-stats.js","sourceRoot":"","sources":["../../src/mcp-router/session-stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0BH,MAAM,OAAO,YAAY;IACf,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,GAAqB,EAAE,CAAC;IAErC,MAAM,CAAC,IAAY,EAAE,QAAgB,EAAE,YAAoB;QACzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ;YACR,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC;YACtC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG;YACjE,CAAC,CAAC,IAAI,CAAC;QAET,oBAAoB;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqE,CAAC;QAC7F,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACtF,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;YAC3C,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;aAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;QAEnD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;YACrC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7B,iBAAiB;YACjB,aAAa;YACb,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;YAChD,cAAc;YACd,MAAM;SACP,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* discover_tools - Meta-tool for finding MCP tools
|
|
3
|
+
*
|
|
4
|
+
* This is one of the 2 tools exposed by the router (the other being execute_tool).
|
|
5
|
+
* Instead of loading 150+ tool definitions, the LLM uses this to find relevant tools.
|
|
6
|
+
*/
|
|
7
|
+
import type { DiscoverToolsArgs, ToolSearchResult } from '../types.js';
|
|
8
|
+
import type { ToolSearchIndex } from '../search/fuzzy.js';
|
|
9
|
+
export declare const DISCOVER_TOOLS_DEFINITION: {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: "object";
|
|
14
|
+
properties: {
|
|
15
|
+
query: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
limit: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
default: number;
|
|
23
|
+
};
|
|
24
|
+
server: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
required: string[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export declare function handleDiscoverTools(args: DiscoverToolsArgs, searchIndex: ToolSearchIndex): {
|
|
33
|
+
tools: ToolSearchResult[];
|
|
34
|
+
hint: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function estimateDiscoverToolsTokens(): number;
|
|
37
|
+
//# sourceMappingURL=discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/mcp-router/tools/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;CA6BrC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,eAAe,GAC3B;IAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA0B7C;AAGD,wBAAgB,2BAA2B,IAAI,MAAM,CAIpD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* discover_tools - Meta-tool for finding MCP tools
|
|
3
|
+
*
|
|
4
|
+
* This is one of the 2 tools exposed by the router (the other being execute_tool).
|
|
5
|
+
* Instead of loading 150+ tool definitions, the LLM uses this to find relevant tools.
|
|
6
|
+
*/
|
|
7
|
+
export const DISCOVER_TOOLS_DEFINITION = {
|
|
8
|
+
name: 'discover_tools',
|
|
9
|
+
description: `Find MCP tools matching a natural language query. Returns tool paths that can be used with execute_tool.
|
|
10
|
+
|
|
11
|
+
Examples:
|
|
12
|
+
- "github issues" → finds github.create_issue, github.list_issues, etc.
|
|
13
|
+
- "file operations" → finds filesystem.read_file, filesystem.write_file, etc.
|
|
14
|
+
- "search" → finds tools across all servers with search capabilities
|
|
15
|
+
|
|
16
|
+
Use this FIRST to discover available tools, then use execute_tool with the returned path.`,
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
query: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Natural language search query (e.g., "create github issue", "read files", "search documentation")',
|
|
23
|
+
},
|
|
24
|
+
limit: {
|
|
25
|
+
type: 'number',
|
|
26
|
+
description: 'Maximum number of results to return (default: 10)',
|
|
27
|
+
default: 10,
|
|
28
|
+
},
|
|
29
|
+
server: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Optional: filter to specific server (e.g., "github", "filesystem")',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
required: ['query'],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export function handleDiscoverTools(args, searchIndex) {
|
|
38
|
+
const { query, limit = 10, server } = args;
|
|
39
|
+
let results;
|
|
40
|
+
if (server) {
|
|
41
|
+
// Filter to specific server
|
|
42
|
+
results = searchIndex.searchByServer(server, limit);
|
|
43
|
+
if (query) {
|
|
44
|
+
// Further filter by query within server
|
|
45
|
+
const queryLower = query.toLowerCase();
|
|
46
|
+
results = results.filter(r => r.name.toLowerCase().includes(queryLower) ||
|
|
47
|
+
r.description.toLowerCase().includes(queryLower));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
results = searchIndex.search(query, limit);
|
|
52
|
+
}
|
|
53
|
+
// Format hint for LLM
|
|
54
|
+
const hint = results.length > 0
|
|
55
|
+
? `Found ${results.length} tools. Use execute_tool with the path (e.g., execute_tool({ path: "${results[0].path}", args: {...} }))`
|
|
56
|
+
: 'No tools found. Try a different query or check available servers with discover_tools({ query: "*" })';
|
|
57
|
+
return { tools: results, hint };
|
|
58
|
+
}
|
|
59
|
+
// Token estimation for the discover_tools definition
|
|
60
|
+
export function estimateDiscoverToolsTokens() {
|
|
61
|
+
const json = JSON.stringify(DISCOVER_TOOLS_DEFINITION);
|
|
62
|
+
// Rough estimate: ~4 chars per token
|
|
63
|
+
return Math.ceil(json.length / 4);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/mcp-router/tools/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;0FAO2E;IACxF,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mGAAmG;aACjH;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;gBAChE,OAAO,EAAE,EAAE;aACZ;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oEAAoE;aAClF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CACjC,IAAuB,EACvB,WAA4B;IAE5B,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE3C,IAAI,OAA2B,CAAC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,4BAA4B;QAC5B,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,wCAAwC;YACxC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,sBAAsB;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,uEAAuE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,oBAAoB;QACnI,CAAC,CAAC,sGAAsG,CAAC;IAE3G,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,2BAA2B;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACvD,qCAAqC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute_tool - Meta-tool for executing MCP tools
|
|
3
|
+
*
|
|
4
|
+
* This is one of the 2 tools exposed by the router (the other being discover_tools).
|
|
5
|
+
* Routes tool calls to the appropriate MCP server.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExecuteToolArgs, OutputCompressionStats } from '../types.js';
|
|
8
|
+
import type { ToolSearchIndex } from '../search/fuzzy.js';
|
|
9
|
+
import type { McpClientPool } from '../executor/client.js';
|
|
10
|
+
export declare const EXECUTE_TOOL_DEFINITION: {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object";
|
|
15
|
+
properties: {
|
|
16
|
+
path: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
args: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
additionalProperties: boolean;
|
|
24
|
+
};
|
|
25
|
+
intent: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
required: string[];
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export interface ExecuteResult {
|
|
34
|
+
success: boolean;
|
|
35
|
+
result?: unknown;
|
|
36
|
+
error?: string;
|
|
37
|
+
toolPath: string;
|
|
38
|
+
executionTimeMs: number;
|
|
39
|
+
compressionStats?: OutputCompressionStats;
|
|
40
|
+
}
|
|
41
|
+
export declare function handleExecuteTool(args: ExecuteToolArgs, searchIndex: ToolSearchIndex, clientPool: McpClientPool): Promise<ExecuteResult>;
|
|
42
|
+
export declare function estimateExecuteToolTokens(): number;
|
|
43
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/mcp-router/tools/execute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;CA+BnC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,aAAa,CAAC,CAmExB;AAGD,wBAAgB,yBAAyB,IAAI,MAAM,CAIlD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute_tool - Meta-tool for executing MCP tools
|
|
3
|
+
*
|
|
4
|
+
* This is one of the 2 tools exposed by the router (the other being discover_tools).
|
|
5
|
+
* Routes tool calls to the appropriate MCP server.
|
|
6
|
+
*/
|
|
7
|
+
import { compressToolOutput } from '../output-compressor.js';
|
|
8
|
+
import { globalSessionStats } from '../session-stats.js';
|
|
9
|
+
export const EXECUTE_TOOL_DEFINITION = {
|
|
10
|
+
name: 'execute_tool',
|
|
11
|
+
description: `Execute an MCP tool by its path. Use discover_tools first to find the correct path.
|
|
12
|
+
|
|
13
|
+
Path format: "server.tool_name" (e.g., "github.create_issue", "filesystem.read_file")
|
|
14
|
+
|
|
15
|
+
Example:
|
|
16
|
+
1. First: discover_tools({ query: "github issues" })
|
|
17
|
+
→ Returns: [{ path: "github.create_issue", ... }]
|
|
18
|
+
2. Then: execute_tool({ path: "github.create_issue", args: { title: "Bug", body: "..." } })
|
|
19
|
+
|
|
20
|
+
The args object should match the tool's expected input schema.`,
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
path: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Tool path in format "server.tool_name" (from discover_tools results)',
|
|
27
|
+
},
|
|
28
|
+
args: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
description: 'Arguments to pass to the tool (schema depends on the specific tool)',
|
|
31
|
+
additionalProperties: true,
|
|
32
|
+
},
|
|
33
|
+
intent: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Optional: describe what you are looking for in the output. For large results (>10KB), only matching sections are returned instead of the full output.',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['path'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
export async function handleExecuteTool(args, searchIndex, clientPool) {
|
|
42
|
+
const startTime = Date.now();
|
|
43
|
+
const { path, args: toolArgs = {}, intent } = args;
|
|
44
|
+
// Parse path
|
|
45
|
+
const dotIndex = path.indexOf('.');
|
|
46
|
+
if (dotIndex === -1) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
error: `Invalid tool path "${path}". Expected format: "server.tool_name"`,
|
|
50
|
+
toolPath: path,
|
|
51
|
+
executionTimeMs: Date.now() - startTime,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const serverName = path.slice(0, dotIndex);
|
|
55
|
+
const toolName = path.slice(dotIndex + 1);
|
|
56
|
+
// Find tool definition
|
|
57
|
+
const tool = searchIndex.getToolByPath(path);
|
|
58
|
+
if (!tool) {
|
|
59
|
+
// Try fuzzy match suggestion
|
|
60
|
+
const suggestions = searchIndex.search(toolName, 3);
|
|
61
|
+
const suggestionText = suggestions.length > 0
|
|
62
|
+
? ` Did you mean: ${suggestions.map(s => s.path).join(', ')}?`
|
|
63
|
+
: '';
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: `Tool "${path}" not found.${suggestionText}`,
|
|
67
|
+
toolPath: path,
|
|
68
|
+
executionTimeMs: Date.now() - startTime,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Get or create client for this server
|
|
72
|
+
const client = clientPool.getClient(serverName, tool.serverConfig);
|
|
73
|
+
try {
|
|
74
|
+
await client.connect();
|
|
75
|
+
const rawResult = await client.callTool(toolName, toolArgs);
|
|
76
|
+
// Compress output to save context window
|
|
77
|
+
const compressed = compressToolOutput(rawResult, { intent });
|
|
78
|
+
// Record stats
|
|
79
|
+
globalSessionStats.record(path, compressed.stats.originalBytes, compressed.stats.compressedBytes);
|
|
80
|
+
return {
|
|
81
|
+
success: true,
|
|
82
|
+
result: compressed.output,
|
|
83
|
+
toolPath: path,
|
|
84
|
+
executionTimeMs: Date.now() - startTime,
|
|
85
|
+
compressionStats: compressed.stats,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
toolPath: path,
|
|
93
|
+
executionTimeMs: Date.now() - startTime,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Token estimation for the execute_tool definition
|
|
98
|
+
export function estimateExecuteToolTokens() {
|
|
99
|
+
const json = JSON.stringify(EXECUTE_TOOL_DEFINITION);
|
|
100
|
+
// Rough estimate: ~4 chars per token
|
|
101
|
+
return Math.ceil(json.length / 4);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp-router/tools/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Router Types
|
|
3
|
+
* Lightweight hierarchical router for 98%+ token reduction
|
|
4
|
+
*/
|
|
5
|
+
export interface McpServerConfig {
|
|
6
|
+
command?: string;
|
|
7
|
+
args?: string[];
|
|
8
|
+
env?: Record<string, string>;
|
|
9
|
+
url?: string;
|
|
10
|
+
transport?: 'stdio' | 'http' | 'sse';
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface McpConfig {
|
|
14
|
+
mcpServers: Record<string, McpServerConfig>;
|
|
15
|
+
}
|
|
16
|
+
export interface ToolDefinition {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: 'object';
|
|
21
|
+
properties: Record<string, unknown>;
|
|
22
|
+
required?: string[];
|
|
23
|
+
};
|
|
24
|
+
serverName: string;
|
|
25
|
+
serverConfig: McpServerConfig;
|
|
26
|
+
}
|
|
27
|
+
export interface ToolSearchResult {
|
|
28
|
+
path: string;
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
server: string;
|
|
32
|
+
score: number;
|
|
33
|
+
}
|
|
34
|
+
export interface DiscoverToolsArgs {
|
|
35
|
+
query: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
server?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ExecuteToolArgs {
|
|
40
|
+
path: string;
|
|
41
|
+
args?: Record<string, unknown>;
|
|
42
|
+
intent?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface OutputCompressionStats {
|
|
45
|
+
originalBytes: number;
|
|
46
|
+
compressedBytes: number;
|
|
47
|
+
savings: string;
|
|
48
|
+
method: 'passthrough' | 'truncated' | 'indexed';
|
|
49
|
+
}
|
|
50
|
+
export interface ToolRegistry {
|
|
51
|
+
tools: Map<string, ToolDefinition>;
|
|
52
|
+
servers: Map<string, McpServerConfig>;
|
|
53
|
+
searchIndex: unknown;
|
|
54
|
+
}
|
|
55
|
+
export interface RouterStats {
|
|
56
|
+
totalServers: number;
|
|
57
|
+
totalTools: number;
|
|
58
|
+
traditionalTokens: number;
|
|
59
|
+
routerTokens: number;
|
|
60
|
+
savings: string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp-router/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp-router/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Adaptive Context Selector for UAP (Option 4)
|
|
3
|
+
*
|
|
4
|
+
* VERSION: 2.0.0 - 21 Model Outcome Success Optimizations
|
|
5
|
+
*
|
|
6
|
+
* Combines task classification with time-budget awareness, runtime monitoring,
|
|
7
|
+
* and historical benefit tracking for optimal context loading decisions.
|
|
8
|
+
*
|
|
9
|
+
* OPTIMIZATIONS IMPLEMENTED:
|
|
10
|
+
* 1. Historical Data Persistence - SQLite instead of in-memory Map
|
|
11
|
+
* 2. Task-specific context sections for 5 failing tasks
|
|
12
|
+
* 3. Missing context sections (git_recovery, web_parsing, data_processing, theorem_proving)
|
|
13
|
+
* 4. Weighted keyword relevance scoring (TF-IDF-like specificity weights)
|
|
14
|
+
* 5. Token budget utilization - increase minimal sections from 1→2
|
|
15
|
+
* 6. Task-type-selective pattern injection
|
|
16
|
+
* 7. Smarter progressive context escalation with error-to-section mapping
|
|
17
|
+
* 8. Model Router fingerprint persistence integrated
|
|
18
|
+
* 9. Multi-category task classification support
|
|
19
|
+
* 10. Semantic caching foundation for task→outcome mappings
|
|
20
|
+
*/
|
|
21
|
+
import type { ModelId } from './model-router.js';
|
|
22
|
+
export type ContextLevel = 'none' | 'minimal' | 'full';
|
|
23
|
+
export type TimePressure = 'critical' | 'high' | 'medium' | 'low';
|
|
24
|
+
export interface ContextDecision {
|
|
25
|
+
level: ContextLevel;
|
|
26
|
+
sections: string[];
|
|
27
|
+
reason: string;
|
|
28
|
+
estimatedOverheadMs: number;
|
|
29
|
+
taskType: string;
|
|
30
|
+
timePressure: TimePressure;
|
|
31
|
+
historicalBenefit: number;
|
|
32
|
+
secondaryCategories?: string[];
|
|
33
|
+
relevantPatterns?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface TaskMetadata {
|
|
36
|
+
timeout_sec?: number;
|
|
37
|
+
difficulty?: 'easy' | 'medium' | 'hard';
|
|
38
|
+
category?: string;
|
|
39
|
+
historical_uam_benefit?: number;
|
|
40
|
+
cacheKey?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface HistoricalData {
|
|
43
|
+
taskType: string;
|
|
44
|
+
totalAttempts: number;
|
|
45
|
+
uapSuccesses: number;
|
|
46
|
+
noUamSuccesses: number;
|
|
47
|
+
avgTimeWithUam: number;
|
|
48
|
+
avgTimeWithoutUam: number;
|
|
49
|
+
lastUpdated: number;
|
|
50
|
+
}
|
|
51
|
+
export interface MultiCategoryClassification {
|
|
52
|
+
primary: string;
|
|
53
|
+
secondary: string[];
|
|
54
|
+
confidence: number;
|
|
55
|
+
keywords: string[];
|
|
56
|
+
}
|
|
57
|
+
export declare function classifyTaskMultiCategory(instruction: string): MultiCategoryClassification;
|
|
58
|
+
/**
|
|
59
|
+
* Classify task type from instruction text (backward compatible)
|
|
60
|
+
*/
|
|
61
|
+
export declare function classifyTask(instruction: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Assess time pressure based on timeout and task complexity
|
|
64
|
+
*/
|
|
65
|
+
export declare function assessTimePressure(timeoutSec: number, taskType: string, difficulty?: string): TimePressure;
|
|
66
|
+
/**
|
|
67
|
+
* OPT 1: Get historical benefit from SQLite (persistent)
|
|
68
|
+
*/
|
|
69
|
+
export declare function getHistoricalBenefit(taskType: string): number;
|
|
70
|
+
/**
|
|
71
|
+
* OPT 1: Record task outcome to SQLite (persistent)
|
|
72
|
+
*/
|
|
73
|
+
export declare function recordOutcome(taskType: string, usedUam: boolean, success: boolean, durationMs: number, modelId?: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* OPT 10: Cache lookup for similar tasks
|
|
76
|
+
*/
|
|
77
|
+
export declare function lookupSemanticCache(instructionHash: string): ContextDecision | null;
|
|
78
|
+
/**
|
|
79
|
+
* OPT 10: Store decision in semantic cache
|
|
80
|
+
*/
|
|
81
|
+
export declare function storeSemanticCache(cacheKey: string, instructionHash: string, decision: ContextDecision, success: boolean): void;
|
|
82
|
+
/**
|
|
83
|
+
* Select relevant context sections based on task type and instruction
|
|
84
|
+
* OPT 5: Returns at least 2 sections for minimal mode
|
|
85
|
+
*/
|
|
86
|
+
export declare function selectRelevantSections(instruction: string, taskType: string, secondaryCategories?: string[]): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Calculate estimated overhead for given sections in milliseconds
|
|
89
|
+
*/
|
|
90
|
+
export declare function calculateOverhead(sections: string[]): number;
|
|
91
|
+
/**
|
|
92
|
+
* OPT 6: Get relevant patterns for task type
|
|
93
|
+
*/
|
|
94
|
+
export declare function getRelevantPatterns(taskType: string, sections: string[]): string[];
|
|
95
|
+
/**
|
|
96
|
+
* Main decision function: determine optimal context level using hybrid approach
|
|
97
|
+
*/
|
|
98
|
+
export declare function decideContextLevel(instruction: string, metadata?: TaskMetadata): ContextDecision;
|
|
99
|
+
/**
|
|
100
|
+
* Generate context string based on decision
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateContext(decision: ContextDecision): string;
|
|
103
|
+
/**
|
|
104
|
+
* OPT 7: Enhanced progressive context strategy with error-to-section mapping
|
|
105
|
+
*/
|
|
106
|
+
export declare function getProgressiveContextLevels(instruction: string, initialError: string, metadata?: TaskMetadata): ContextLevel[];
|
|
107
|
+
/**
|
|
108
|
+
* OPT 7: Get additional sections to add based on error analysis
|
|
109
|
+
*/
|
|
110
|
+
export declare function getSectionsForError(error: string): string[];
|
|
111
|
+
/**
|
|
112
|
+
* Export configuration for Python agent integration
|
|
113
|
+
*/
|
|
114
|
+
export declare function exportConfigForPython(instruction: string, metadata?: TaskMetadata): string;
|
|
115
|
+
/**
|
|
116
|
+
* OPT 8: Get model fingerprint for routing integration
|
|
117
|
+
*/
|
|
118
|
+
export declare function getModelFingerprintForTask(taskType: string): {
|
|
119
|
+
recommended: ModelId;
|
|
120
|
+
reason: string;
|
|
121
|
+
} | null;
|
|
122
|
+
/**
|
|
123
|
+
* Close database connection (for cleanup)
|
|
124
|
+
*/
|
|
125
|
+
export declare function closeHistoricalDb(): void;
|
|
126
|
+
export declare const HybridAdaptiveContext: {
|
|
127
|
+
classifyTask: typeof classifyTask;
|
|
128
|
+
classifyTaskMultiCategory: typeof classifyTaskMultiCategory;
|
|
129
|
+
assessTimePressure: typeof assessTimePressure;
|
|
130
|
+
getHistoricalBenefit: typeof getHistoricalBenefit;
|
|
131
|
+
recordOutcome: typeof recordOutcome;
|
|
132
|
+
decideContextLevel: typeof decideContextLevel;
|
|
133
|
+
generateContext: typeof generateContext;
|
|
134
|
+
selectRelevantSections: typeof selectRelevantSections;
|
|
135
|
+
calculateOverhead: typeof calculateOverhead;
|
|
136
|
+
getProgressiveContextLevels: typeof getProgressiveContextLevels;
|
|
137
|
+
getSectionsForError: typeof getSectionsForError;
|
|
138
|
+
getRelevantPatterns: typeof getRelevantPatterns;
|
|
139
|
+
exportConfigForPython: typeof exportConfigForPython;
|
|
140
|
+
lookupSemanticCache: typeof lookupSemanticCache;
|
|
141
|
+
storeSemanticCache: typeof storeSemanticCache;
|
|
142
|
+
getModelFingerprintForTask: typeof getModelFingerprintForTask;
|
|
143
|
+
closeHistoricalDb: typeof closeHistoricalDb;
|
|
144
|
+
};
|
|
145
|
+
export default HybridAdaptiveContext;
|
|
146
|
+
//# sourceMappingURL=adaptive-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-context.d.ts","sourceRoot":"","sources":["../../src/memory/adaptive-context.ts"],"names":[],"mappings":"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"}
|