distill-mcp 0.6.0-beta
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/bin/cli.js +133 -0
- package/dist/analytics/session-tracker.d.ts +74 -0
- package/dist/analytics/session-tracker.d.ts.map +1 -0
- package/dist/analytics/session-tracker.js +123 -0
- package/dist/ast/benchmark.test.d.ts +7 -0
- package/dist/ast/benchmark.test.d.ts.map +1 -0
- package/dist/ast/benchmark.test.js +175 -0
- package/dist/ast/go/index.d.ts +9 -0
- package/dist/ast/go/index.d.ts.map +1 -0
- package/dist/ast/go/index.js +8 -0
- package/dist/ast/go/parser.d.ts +31 -0
- package/dist/ast/go/parser.d.ts.map +1 -0
- package/dist/ast/go/parser.js +428 -0
- package/dist/ast/go/parser.test.d.ts +5 -0
- package/dist/ast/go/parser.test.d.ts.map +1 -0
- package/dist/ast/go/parser.test.js +241 -0
- package/dist/ast/go/queries.d.ts +51 -0
- package/dist/ast/go/queries.d.ts.map +1 -0
- package/dist/ast/go/queries.js +114 -0
- package/dist/ast/go/utils.d.ts +66 -0
- package/dist/ast/go/utils.d.ts.map +1 -0
- package/dist/ast/go/utils.js +140 -0
- package/dist/ast/index.d.ts +39 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +245 -0
- package/dist/ast/php/index.d.ts +9 -0
- package/dist/ast/php/index.d.ts.map +1 -0
- package/dist/ast/php/index.js +8 -0
- package/dist/ast/php/parser.d.ts +31 -0
- package/dist/ast/php/parser.d.ts.map +1 -0
- package/dist/ast/php/parser.js +388 -0
- package/dist/ast/php/parser.test.d.ts +5 -0
- package/dist/ast/php/parser.test.d.ts.map +1 -0
- package/dist/ast/php/parser.test.js +328 -0
- package/dist/ast/php/queries.d.ts +61 -0
- package/dist/ast/php/queries.d.ts.map +1 -0
- package/dist/ast/php/queries.js +117 -0
- package/dist/ast/php/utils.d.ts +83 -0
- package/dist/ast/php/utils.d.ts.map +1 -0
- package/dist/ast/php/utils.js +246 -0
- package/dist/ast/python/index.d.ts +9 -0
- package/dist/ast/python/index.d.ts.map +1 -0
- package/dist/ast/python/index.js +8 -0
- package/dist/ast/python/parser.d.ts +32 -0
- package/dist/ast/python/parser.d.ts.map +1 -0
- package/dist/ast/python/parser.js +422 -0
- package/dist/ast/python/parser.test.d.ts +5 -0
- package/dist/ast/python/parser.test.d.ts.map +1 -0
- package/dist/ast/python/parser.test.js +186 -0
- package/dist/ast/python/queries.d.ts +73 -0
- package/dist/ast/python/queries.d.ts.map +1 -0
- package/dist/ast/python/queries.js +137 -0
- package/dist/ast/python/utils.d.ts +63 -0
- package/dist/ast/python/utils.d.ts.map +1 -0
- package/dist/ast/python/utils.js +159 -0
- package/dist/ast/quick-scan.d.ts +40 -0
- package/dist/ast/quick-scan.d.ts.map +1 -0
- package/dist/ast/quick-scan.js +287 -0
- package/dist/ast/rust/index.d.ts +9 -0
- package/dist/ast/rust/index.d.ts.map +1 -0
- package/dist/ast/rust/index.js +8 -0
- package/dist/ast/rust/parser.d.ts +31 -0
- package/dist/ast/rust/parser.d.ts.map +1 -0
- package/dist/ast/rust/parser.js +416 -0
- package/dist/ast/rust/parser.test.d.ts +5 -0
- package/dist/ast/rust/parser.test.d.ts.map +1 -0
- package/dist/ast/rust/parser.test.js +329 -0
- package/dist/ast/rust/queries.d.ts +66 -0
- package/dist/ast/rust/queries.d.ts.map +1 -0
- package/dist/ast/rust/queries.js +132 -0
- package/dist/ast/rust/utils.d.ts +91 -0
- package/dist/ast/rust/utils.d.ts.map +1 -0
- package/dist/ast/rust/utils.js +254 -0
- package/dist/ast/swift/index.d.ts +10 -0
- package/dist/ast/swift/index.d.ts.map +1 -0
- package/dist/ast/swift/index.js +8 -0
- package/dist/ast/swift/parser.d.ts +31 -0
- package/dist/ast/swift/parser.d.ts.map +1 -0
- package/dist/ast/swift/parser.js +554 -0
- package/dist/ast/swift/parser.test.d.ts +5 -0
- package/dist/ast/swift/parser.test.d.ts.map +1 -0
- package/dist/ast/swift/parser.test.js +398 -0
- package/dist/ast/swift/queries.d.ts +71 -0
- package/dist/ast/swift/queries.d.ts.map +1 -0
- package/dist/ast/swift/queries.js +137 -0
- package/dist/ast/swift/utils.d.ts +94 -0
- package/dist/ast/swift/utils.d.ts.map +1 -0
- package/dist/ast/swift/utils.js +411 -0
- package/dist/ast/types.d.ts +96 -0
- package/dist/ast/types.d.ts.map +1 -0
- package/dist/ast/types.js +21 -0
- package/dist/ast/typescript.d.ts +24 -0
- package/dist/ast/typescript.d.ts.map +1 -0
- package/dist/ast/typescript.js +357 -0
- package/dist/cache/file-hash.d.ts +33 -0
- package/dist/cache/file-hash.d.ts.map +1 -0
- package/dist/cache/file-hash.js +59 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +8 -0
- package/dist/cache/smart-cache.d.ts +68 -0
- package/dist/cache/smart-cache.d.ts.map +1 -0
- package/dist/cache/smart-cache.js +266 -0
- package/dist/cache/types.d.ts +102 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +6 -0
- package/dist/cli/analyze.d.ts +43 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +250 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +127 -0
- package/dist/cli/hooks.d.ts +14 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +229 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/setup.d.ts +10 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +117 -0
- package/dist/cli/utils.d.ts +30 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +116 -0
- package/dist/compressors/config.d.ts +9 -0
- package/dist/compressors/config.d.ts.map +1 -0
- package/dist/compressors/config.js +183 -0
- package/dist/compressors/conversation.d.ts +109 -0
- package/dist/compressors/conversation.d.ts.map +1 -0
- package/dist/compressors/conversation.js +404 -0
- package/dist/compressors/diff.d.ts +35 -0
- package/dist/compressors/diff.d.ts.map +1 -0
- package/dist/compressors/diff.js +389 -0
- package/dist/compressors/generic.d.ts +9 -0
- package/dist/compressors/generic.d.ts.map +1 -0
- package/dist/compressors/generic.js +188 -0
- package/dist/compressors/index.d.ts +31 -0
- package/dist/compressors/index.d.ts.map +1 -0
- package/dist/compressors/index.js +82 -0
- package/dist/compressors/logs.d.ts +9 -0
- package/dist/compressors/logs.d.ts.map +1 -0
- package/dist/compressors/logs.js +245 -0
- package/dist/compressors/multifile.d.ts +106 -0
- package/dist/compressors/multifile.d.ts.map +1 -0
- package/dist/compressors/multifile.js +498 -0
- package/dist/compressors/semantic.d.ts +33 -0
- package/dist/compressors/semantic.d.ts.map +1 -0
- package/dist/compressors/semantic.js +233 -0
- package/dist/compressors/stacktrace.d.ts +9 -0
- package/dist/compressors/stacktrace.d.ts.map +1 -0
- package/dist/compressors/stacktrace.js +259 -0
- package/dist/compressors/types.d.ts +146 -0
- package/dist/compressors/types.d.ts.map +1 -0
- package/dist/compressors/types.js +6 -0
- package/dist/config/output-config.d.ts +56 -0
- package/dist/config/output-config.d.ts.map +1 -0
- package/dist/config/output-config.js +78 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/middleware/chain.d.ts +49 -0
- package/dist/middleware/chain.d.ts.map +1 -0
- package/dist/middleware/chain.js +126 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +3 -0
- package/dist/middleware/logging.d.ts +8 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +71 -0
- package/dist/middleware/types.d.ts +58 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +7 -0
- package/dist/parsers/eslint.d.ts +8 -0
- package/dist/parsers/eslint.d.ts.map +1 -0
- package/dist/parsers/eslint.js +132 -0
- package/dist/parsers/generic.d.ts +8 -0
- package/dist/parsers/generic.d.ts.map +1 -0
- package/dist/parsers/generic.js +234 -0
- package/dist/parsers/index.d.ts +34 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +216 -0
- package/dist/parsers/types.d.ts +84 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +6 -0
- package/dist/parsers/typescript.d.ts +8 -0
- package/dist/parsers/typescript.d.ts.map +1 -0
- package/dist/parsers/typescript.js +107 -0
- package/dist/pipelines/definitions.d.ts +50 -0
- package/dist/pipelines/definitions.d.ts.map +1 -0
- package/dist/pipelines/definitions.js +206 -0
- package/dist/sandbox/executor.d.ts +12 -0
- package/dist/sandbox/executor.d.ts.map +1 -0
- package/dist/sandbox/executor.js +191 -0
- package/dist/sandbox/index.d.ts +11 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +9 -0
- package/dist/sandbox/sandbox.test.d.ts +7 -0
- package/dist/sandbox/sandbox.test.d.ts.map +1 -0
- package/dist/sandbox/sandbox.test.js +202 -0
- package/dist/sandbox/sdk/analyze.d.ts +36 -0
- package/dist/sandbox/sdk/analyze.d.ts.map +1 -0
- package/dist/sandbox/sdk/analyze.js +413 -0
- package/dist/sandbox/sdk/analyze.test.d.ts +7 -0
- package/dist/sandbox/sdk/analyze.test.d.ts.map +1 -0
- package/dist/sandbox/sdk/analyze.test.js +191 -0
- package/dist/sandbox/sdk/code.d.ts +20 -0
- package/dist/sandbox/sdk/code.d.ts.map +1 -0
- package/dist/sandbox/sdk/code.js +104 -0
- package/dist/sandbox/sdk/compress.d.ts +23 -0
- package/dist/sandbox/sdk/compress.d.ts.map +1 -0
- package/dist/sandbox/sdk/compress.js +107 -0
- package/dist/sandbox/sdk/conversation.d.ts +148 -0
- package/dist/sandbox/sdk/conversation.d.ts.map +1 -0
- package/dist/sandbox/sdk/conversation.js +177 -0
- package/dist/sandbox/sdk/files.d.ts +29 -0
- package/dist/sandbox/sdk/files.d.ts.map +1 -0
- package/dist/sandbox/sdk/files.js +41 -0
- package/dist/sandbox/sdk/git.d.ts +37 -0
- package/dist/sandbox/sdk/git.d.ts.map +1 -0
- package/dist/sandbox/sdk/git.js +313 -0
- package/dist/sandbox/sdk/git.test.d.ts +8 -0
- package/dist/sandbox/sdk/git.test.d.ts.map +1 -0
- package/dist/sandbox/sdk/git.test.js +160 -0
- package/dist/sandbox/sdk/index.d.ts +16 -0
- package/dist/sandbox/sdk/index.d.ts.map +1 -0
- package/dist/sandbox/sdk/index.js +15 -0
- package/dist/sandbox/sdk/multifile.d.ts +63 -0
- package/dist/sandbox/sdk/multifile.d.ts.map +1 -0
- package/dist/sandbox/sdk/multifile.js +130 -0
- package/dist/sandbox/sdk/pipeline.d.ts +16 -0
- package/dist/sandbox/sdk/pipeline.d.ts.map +1 -0
- package/dist/sandbox/sdk/pipeline.js +454 -0
- package/dist/sandbox/sdk/pipeline.test.d.ts +7 -0
- package/dist/sandbox/sdk/pipeline.test.d.ts.map +1 -0
- package/dist/sandbox/sdk/pipeline.test.js +197 -0
- package/dist/sandbox/sdk/search.d.ts +36 -0
- package/dist/sandbox/sdk/search.d.ts.map +1 -0
- package/dist/sandbox/sdk/search.js +338 -0
- package/dist/sandbox/sdk/search.test.d.ts +7 -0
- package/dist/sandbox/sdk/search.test.d.ts.map +1 -0
- package/dist/sandbox/sdk/search.test.js +183 -0
- package/dist/sandbox/sdk/utils.d.ts +18 -0
- package/dist/sandbox/sdk/utils.d.ts.map +1 -0
- package/dist/sandbox/sdk/utils.js +24 -0
- package/dist/sandbox/security/code-analyzer.d.ts +15 -0
- package/dist/sandbox/security/code-analyzer.d.ts.map +1 -0
- package/dist/sandbox/security/code-analyzer.js +87 -0
- package/dist/sandbox/security/index.d.ts +6 -0
- package/dist/sandbox/security/index.d.ts.map +1 -0
- package/dist/sandbox/security/index.js +5 -0
- package/dist/sandbox/security/path-validator.d.ts +23 -0
- package/dist/sandbox/security/path-validator.d.ts.map +1 -0
- package/dist/sandbox/security/path-validator.js +113 -0
- package/dist/sandbox/types.d.ts +577 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +14 -0
- package/dist/server.d.ts +36 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +133 -0
- package/dist/summarizers/build-logs.d.ts +11 -0
- package/dist/summarizers/build-logs.d.ts.map +1 -0
- package/dist/summarizers/build-logs.js +234 -0
- package/dist/summarizers/generic.d.ts +11 -0
- package/dist/summarizers/generic.d.ts.map +1 -0
- package/dist/summarizers/generic.js +93 -0
- package/dist/summarizers/index.d.ts +20 -0
- package/dist/summarizers/index.d.ts.map +1 -0
- package/dist/summarizers/index.js +43 -0
- package/dist/summarizers/server-logs.d.ts +11 -0
- package/dist/summarizers/server-logs.d.ts.map +1 -0
- package/dist/summarizers/server-logs.js +215 -0
- package/dist/summarizers/test-logs.d.ts +11 -0
- package/dist/summarizers/test-logs.d.ts.map +1 -0
- package/dist/summarizers/test-logs.js +258 -0
- package/dist/summarizers/types.d.ts +146 -0
- package/dist/summarizers/types.d.ts.map +1 -0
- package/dist/summarizers/types.js +21 -0
- package/dist/tools/analyze-build-output.d.ts +30 -0
- package/dist/tools/analyze-build-output.d.ts.map +1 -0
- package/dist/tools/analyze-build-output.js +45 -0
- package/dist/tools/analyze-context.d.ts +23 -0
- package/dist/tools/analyze-context.d.ts.map +1 -0
- package/dist/tools/analyze-context.js +78 -0
- package/dist/tools/auto-optimize.d.ts +9 -0
- package/dist/tools/auto-optimize.d.ts.map +1 -0
- package/dist/tools/auto-optimize.js +191 -0
- package/dist/tools/code-execute.d.ts +9 -0
- package/dist/tools/code-execute.d.ts.map +1 -0
- package/dist/tools/code-execute.js +84 -0
- package/dist/tools/code-skeleton.d.ts +33 -0
- package/dist/tools/code-skeleton.d.ts.map +1 -0
- package/dist/tools/code-skeleton.js +206 -0
- package/dist/tools/compress-context.d.ts +33 -0
- package/dist/tools/compress-context.d.ts.map +1 -0
- package/dist/tools/compress-context.js +64 -0
- package/dist/tools/context-budget.d.ts +43 -0
- package/dist/tools/context-budget.d.ts.map +1 -0
- package/dist/tools/context-budget.js +260 -0
- package/dist/tools/context-budget.test.d.ts +5 -0
- package/dist/tools/context-budget.test.d.ts.map +1 -0
- package/dist/tools/context-budget.test.js +219 -0
- package/dist/tools/conversation-compress.d.ts +46 -0
- package/dist/tools/conversation-compress.d.ts.map +1 -0
- package/dist/tools/conversation-compress.js +78 -0
- package/dist/tools/conversation-memory.d.ts +75 -0
- package/dist/tools/conversation-memory.d.ts.map +1 -0
- package/dist/tools/conversation-memory.js +289 -0
- package/dist/tools/deduplicate-errors.d.ts +30 -0
- package/dist/tools/deduplicate-errors.d.ts.map +1 -0
- package/dist/tools/deduplicate-errors.js +72 -0
- package/dist/tools/detect-retry-loop.d.ts +40 -0
- package/dist/tools/detect-retry-loop.d.ts.map +1 -0
- package/dist/tools/detect-retry-loop.js +212 -0
- package/dist/tools/diff-compress.d.ts +40 -0
- package/dist/tools/diff-compress.d.ts.map +1 -0
- package/dist/tools/diff-compress.js +94 -0
- package/dist/tools/discover-tools.d.ts +11 -0
- package/dist/tools/discover-tools.d.ts.map +1 -0
- package/dist/tools/discover-tools.js +163 -0
- package/dist/tools/dynamic-loader.d.ts +131 -0
- package/dist/tools/dynamic-loader.d.ts.map +1 -0
- package/dist/tools/dynamic-loader.js +378 -0
- package/dist/tools/dynamic-loader.test.d.ts +10 -0
- package/dist/tools/dynamic-loader.test.d.ts.map +1 -0
- package/dist/tools/dynamic-loader.test.js +164 -0
- package/dist/tools/lazy-mcp.d.ts +31 -0
- package/dist/tools/lazy-mcp.d.ts.map +1 -0
- package/dist/tools/lazy-mcp.js +151 -0
- package/dist/tools/lazy-mcp.test.d.ts +10 -0
- package/dist/tools/lazy-mcp.test.d.ts.map +1 -0
- package/dist/tools/lazy-mcp.test.js +172 -0
- package/dist/tools/multifile-compress.d.ts +36 -0
- package/dist/tools/multifile-compress.d.ts.map +1 -0
- package/dist/tools/multifile-compress.js +223 -0
- package/dist/tools/optimization-tips.d.ts +18 -0
- package/dist/tools/optimization-tips.d.ts.map +1 -0
- package/dist/tools/optimization-tips.js +133 -0
- package/dist/tools/registry.d.ts +70 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +169 -0
- package/dist/tools/semantic-compress.d.ts +39 -0
- package/dist/tools/semantic-compress.d.ts.map +1 -0
- package/dist/tools/semantic-compress.js +113 -0
- package/dist/tools/semantic-compress.test.d.ts +5 -0
- package/dist/tools/semantic-compress.test.d.ts.map +1 -0
- package/dist/tools/semantic-compress.test.js +182 -0
- package/dist/tools/session-stats.d.ts +34 -0
- package/dist/tools/session-stats.d.ts.map +1 -0
- package/dist/tools/session-stats.js +194 -0
- package/dist/tools/set-output-config.d.ts +38 -0
- package/dist/tools/set-output-config.d.ts.map +1 -0
- package/dist/tools/set-output-config.js +122 -0
- package/dist/tools/smart-cache-tool.d.ts +38 -0
- package/dist/tools/smart-cache-tool.d.ts.map +1 -0
- package/dist/tools/smart-cache-tool.js +224 -0
- package/dist/tools/smart-file-read.d.ts +52 -0
- package/dist/tools/smart-file-read.d.ts.map +1 -0
- package/dist/tools/smart-file-read.js +481 -0
- package/dist/tools/smart-pipeline.d.ts +40 -0
- package/dist/tools/smart-pipeline.d.ts.map +1 -0
- package/dist/tools/smart-pipeline.js +295 -0
- package/dist/tools/summarize-logs.d.ts +36 -0
- package/dist/tools/summarize-logs.d.ts.map +1 -0
- package/dist/tools/summarize-logs.js +184 -0
- package/dist/tools/token-budget.test.d.ts +11 -0
- package/dist/tools/token-budget.test.d.ts.map +1 -0
- package/dist/tools/token-budget.test.js +275 -0
- package/dist/utils/bm25.d.ts +86 -0
- package/dist/utils/bm25.d.ts.map +1 -0
- package/dist/utils/bm25.js +153 -0
- package/dist/utils/bm25.test.d.ts +5 -0
- package/dist/utils/bm25.test.d.ts.map +1 -0
- package/dist/utils/bm25.test.js +156 -0
- package/dist/utils/command-normalizer.d.ts +39 -0
- package/dist/utils/command-normalizer.d.ts.map +1 -0
- package/dist/utils/command-normalizer.js +90 -0
- package/dist/utils/content-detector.d.ts +27 -0
- package/dist/utils/content-detector.d.ts.map +1 -0
- package/dist/utils/content-detector.js +127 -0
- package/dist/utils/embeddings.d.ts +54 -0
- package/dist/utils/embeddings.d.ts.map +1 -0
- package/dist/utils/embeddings.js +97 -0
- package/dist/utils/embeddings.test.d.ts +8 -0
- package/dist/utils/embeddings.test.d.ts.map +1 -0
- package/dist/utils/embeddings.test.js +96 -0
- package/dist/utils/error-normalizer.d.ts +39 -0
- package/dist/utils/error-normalizer.d.ts.map +1 -0
- package/dist/utils/error-normalizer.js +233 -0
- package/dist/utils/hybrid-search.d.ts +79 -0
- package/dist/utils/hybrid-search.d.ts.map +1 -0
- package/dist/utils/hybrid-search.js +146 -0
- package/dist/utils/hybrid-search.test.d.ts +5 -0
- package/dist/utils/hybrid-search.test.d.ts.map +1 -0
- package/dist/utils/hybrid-search.test.js +172 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/language-detector.d.ts +27 -0
- package/dist/utils/language-detector.d.ts.map +1 -0
- package/dist/utils/language-detector.js +94 -0
- package/dist/utils/log-parser.d.ts +46 -0
- package/dist/utils/log-parser.d.ts.map +1 -0
- package/dist/utils/log-parser.js +287 -0
- package/dist/utils/output-estimator.d.ts +54 -0
- package/dist/utils/output-estimator.d.ts.map +1 -0
- package/dist/utils/output-estimator.js +119 -0
- package/dist/utils/output-estimator.test.d.ts +5 -0
- package/dist/utils/output-estimator.test.d.ts.map +1 -0
- package/dist/utils/output-estimator.test.js +115 -0
- package/dist/utils/output-similarity.d.ts +48 -0
- package/dist/utils/output-similarity.d.ts.map +1 -0
- package/dist/utils/output-similarity.js +140 -0
- package/dist/utils/project-detector.d.ts +16 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +119 -0
- package/dist/utils/segment-scorer.d.ts +99 -0
- package/dist/utils/segment-scorer.d.ts.map +1 -0
- package/dist/utils/segment-scorer.js +148 -0
- package/dist/utils/signature-grouper.d.ts +58 -0
- package/dist/utils/signature-grouper.d.ts.map +1 -0
- package/dist/utils/signature-grouper.js +185 -0
- package/dist/utils/tfidf.d.ts +45 -0
- package/dist/utils/tfidf.d.ts.map +1 -0
- package/dist/utils/tfidf.js +204 -0
- package/dist/utils/tfidf.test.d.ts +5 -0
- package/dist/utils/tfidf.test.d.ts.map +1 -0
- package/dist/utils/tfidf.test.js +115 -0
- package/dist/utils/token-counter.d.ts +35 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +83 -0
- package/dist/utils/toon-serializer.d.ts +120 -0
- package/dist/utils/toon-serializer.d.ts.map +1 -0
- package/dist/utils/toon-serializer.js +472 -0
- package/dist/utils/toon-serializer.test.d.ts +7 -0
- package/dist/utils/toon-serializer.test.d.ts.map +1 -0
- package/dist/utils/toon-serializer.test.js +290 -0
- package/package.json +63 -0
- package/scripts/install.ps1 +133 -0
- package/scripts/install.sh +183 -0
- package/scripts/pre-commit-hook.sh +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-build-output.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-build-output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;CAQpC,CAAC;AAUF,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAgB7D;AAED,eAAO,MAAM,sBAAsB,EAAE,cAKpC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze Build Output Tool
|
|
3
|
+
*
|
|
4
|
+
* Analyzes and compresses build tool outputs (tsc, webpack, eslint, etc.)
|
|
5
|
+
* to dramatically reduce tokens while preserving critical information.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { analyzeBuildOutput } from "../parsers/index.js";
|
|
9
|
+
// Minimal schema
|
|
10
|
+
export const analyzeBuildOutputSchema = {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties: {
|
|
13
|
+
output: { type: "string" },
|
|
14
|
+
buildTool: { enum: ["tsc", "eslint", "webpack", "vite", "esbuild", "rust", "go", "generic"] },
|
|
15
|
+
verbosity: { enum: ["minimal", "normal", "detailed"] },
|
|
16
|
+
},
|
|
17
|
+
required: ["output"],
|
|
18
|
+
};
|
|
19
|
+
const inputSchema = z.object({
|
|
20
|
+
output: z.string(),
|
|
21
|
+
buildTool: z
|
|
22
|
+
.enum(["tsc", "eslint", "webpack", "vite", "esbuild", "rust", "go", "generic"])
|
|
23
|
+
.optional(),
|
|
24
|
+
verbosity: z.enum(["minimal", "normal", "detailed"]).optional().default("normal"),
|
|
25
|
+
});
|
|
26
|
+
export async function executeAnalyzeBuildOutput(args) {
|
|
27
|
+
const { output, buildTool, verbosity } = inputSchema.parse(args);
|
|
28
|
+
// Analyze the build output
|
|
29
|
+
const result = analyzeBuildOutput(output, {
|
|
30
|
+
buildTool: buildTool,
|
|
31
|
+
verbosity,
|
|
32
|
+
});
|
|
33
|
+
// Format with minimal header
|
|
34
|
+
const header = `[build] ${result.stats.tokensOriginal}→${result.stats.tokensCompressed} tokens (-${result.stats.reductionPercent}%)`;
|
|
35
|
+
const formatted = `${header}\n${result.summary}`;
|
|
36
|
+
return {
|
|
37
|
+
content: [{ type: "text", text: formatted }],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export const analyzeBuildOutputTool = {
|
|
41
|
+
name: "analyze_build_output",
|
|
42
|
+
description: "Parse and group build errors (tsc, eslint, webpack). 90%+ token reduction.",
|
|
43
|
+
inputSchema: analyzeBuildOutputSchema,
|
|
44
|
+
execute: executeAnalyzeBuildOutput,
|
|
45
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ServerConfig } from "../server";
|
|
2
|
+
export declare const analyzeContextSchema: {
|
|
3
|
+
type: "object";
|
|
4
|
+
properties: {
|
|
5
|
+
content: {
|
|
6
|
+
type: string;
|
|
7
|
+
description: string;
|
|
8
|
+
};
|
|
9
|
+
model: {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
enum: string[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
required: string[];
|
|
16
|
+
};
|
|
17
|
+
export declare function analyzeContext(args: unknown, _config: ServerConfig): Promise<{
|
|
18
|
+
content: Array<{
|
|
19
|
+
type: "text";
|
|
20
|
+
text: string;
|
|
21
|
+
}>;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=analyze-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-context.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-context.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAchC,CAAC;AAOF,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8E7D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { encodingForModel } from "js-tiktoken";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ANTHROPIC_MODELS, calculateCost, formatCost, calculateContextUsage, } from "@ctxopt/shared";
|
|
4
|
+
export const analyzeContextSchema = {
|
|
5
|
+
type: "object",
|
|
6
|
+
properties: {
|
|
7
|
+
content: {
|
|
8
|
+
type: "string",
|
|
9
|
+
description: "The prompt or context content to analyze",
|
|
10
|
+
},
|
|
11
|
+
model: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "The target model (default: claude-sonnet-4-20250514)",
|
|
14
|
+
enum: Object.keys(ANTHROPIC_MODELS),
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
required: ["content"],
|
|
18
|
+
};
|
|
19
|
+
const inputSchema = z.object({
|
|
20
|
+
content: z.string(),
|
|
21
|
+
model: z.string().optional().default("claude-sonnet-4-20250514"),
|
|
22
|
+
});
|
|
23
|
+
export async function analyzeContext(args, _config) {
|
|
24
|
+
const { content, model } = inputSchema.parse(args);
|
|
25
|
+
// Count tokens using tiktoken (cl100k_base is compatible with Claude)
|
|
26
|
+
const encoding = encodingForModel("gpt-4");
|
|
27
|
+
const tokens = encoding.encode(content);
|
|
28
|
+
const tokenCount = tokens.length;
|
|
29
|
+
// Calculate costs (assuming this is input)
|
|
30
|
+
const costs = calculateCost(model, tokenCount, 0);
|
|
31
|
+
const contextUsage = calculateContextUsage(tokenCount, model);
|
|
32
|
+
// Analyze content for optimization opportunities
|
|
33
|
+
const suggestions = [];
|
|
34
|
+
// Check context size
|
|
35
|
+
if (contextUsage > 80) {
|
|
36
|
+
suggestions.push(`- **Critical**: Context uses ${contextUsage}% of the window. Consider summarizing older messages.`);
|
|
37
|
+
}
|
|
38
|
+
else if (contextUsage > 50) {
|
|
39
|
+
suggestions.push(`- **Warning**: Context uses ${contextUsage}% of the window. Monitor growth.`);
|
|
40
|
+
}
|
|
41
|
+
// Check for potential redundancy (simple heuristic)
|
|
42
|
+
const lines = content.split("\n").filter((l) => l.trim().length > 0);
|
|
43
|
+
const uniqueLines = new Set(lines);
|
|
44
|
+
if (uniqueLines.size < lines.length * 0.9) {
|
|
45
|
+
const duplicatePercent = Math.round(((lines.length - uniqueLines.size) / lines.length) * 100);
|
|
46
|
+
suggestions.push(`- **Redundancy detected**: ~${duplicatePercent}% duplicate lines found. Consider deduplication.`);
|
|
47
|
+
}
|
|
48
|
+
// Check for long system prompts
|
|
49
|
+
const systemPromptMatch = content.match(/system[:\s]/i);
|
|
50
|
+
if (systemPromptMatch && tokenCount > 2000) {
|
|
51
|
+
suggestions.push(`- **Tip**: Long system prompt detected. Consider extracting reusable parts to reduce per-request tokens.`);
|
|
52
|
+
}
|
|
53
|
+
// Check for verbose formatting
|
|
54
|
+
if (content.includes("```") && tokenCount > 5000) {
|
|
55
|
+
const codeBlockCount = (content.match(/```/g) || []).length / 2;
|
|
56
|
+
if (codeBlockCount > 3) {
|
|
57
|
+
suggestions.push(`- **Tip**: ${Math.floor(codeBlockCount)} code blocks detected. Consider including only relevant snippets.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const modelInfo = ANTHROPIC_MODELS[model];
|
|
61
|
+
const modelName = modelInfo?.name || model;
|
|
62
|
+
const result = `## Context Analysis
|
|
63
|
+
|
|
64
|
+
**Token Count:** ${tokenCount.toLocaleString()} tokens
|
|
65
|
+
**Model:** ${modelName}
|
|
66
|
+
**Estimated Input Cost:** ${formatCost(costs.inputCostMicros)}
|
|
67
|
+
**Context Window Usage:** ${contextUsage}%
|
|
68
|
+
|
|
69
|
+
${suggestions.length > 0
|
|
70
|
+
? `### Optimization Suggestions\n\n${suggestions.join("\n")}`
|
|
71
|
+
: "### Status\n\n Context looks well-optimized!"}
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
*Analyzed by CtxOpt*`;
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: "text", text: result }],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Optimize Tool
|
|
3
|
+
*
|
|
4
|
+
* Unified tool that auto-detects content type and applies
|
|
5
|
+
* the appropriate optimization automatically.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolDefinition } from "./registry.js";
|
|
8
|
+
export declare const autoOptimizeTool: ToolDefinition;
|
|
9
|
+
//# sourceMappingURL=auto-optimize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-optimize.d.ts","sourceRoot":"","sources":["../../src/tools/auto-optimize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA8NpD,eAAO,MAAM,gBAAgB,EAAE,cAK9B,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Optimize Tool
|
|
3
|
+
*
|
|
4
|
+
* Unified tool that auto-detects content type and applies
|
|
5
|
+
* the appropriate optimization automatically.
|
|
6
|
+
*/
|
|
7
|
+
import { detectContentType } from "../utils/content-detector.js";
|
|
8
|
+
import { compressContent } from "../compressors/index.js";
|
|
9
|
+
import { getSummarizer } from "../summarizers/index.js";
|
|
10
|
+
import { analyzeBuildOutput } from "../parsers/index.js";
|
|
11
|
+
import { groupBySignature, formatGroups, calculateStats } from "../utils/signature-grouper.js";
|
|
12
|
+
import { countTokens } from "../utils/token-counter.js";
|
|
13
|
+
// Minimal schema - format rarely used, keep only essential properties
|
|
14
|
+
const autoOptimizeSchema = {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
content: { type: "string" },
|
|
18
|
+
hint: { enum: ["build", "logs", "errors", "code", "auto"] },
|
|
19
|
+
aggressive: { type: "boolean" },
|
|
20
|
+
format: { enum: ["plain", "markdown"] },
|
|
21
|
+
},
|
|
22
|
+
required: ["content"],
|
|
23
|
+
};
|
|
24
|
+
function isBuildOutput(content) {
|
|
25
|
+
// Detect if content is build output
|
|
26
|
+
return (content.includes("error TS") ||
|
|
27
|
+
content.includes("warning TS") ||
|
|
28
|
+
content.includes("error[E") ||
|
|
29
|
+
content.includes("error:") ||
|
|
30
|
+
/\d+:\d+.*error/i.test(content) ||
|
|
31
|
+
content.includes("npm ERR") ||
|
|
32
|
+
content.includes("ERROR in"));
|
|
33
|
+
}
|
|
34
|
+
function optimizeBuildOutput(content) {
|
|
35
|
+
const originalTokens = countTokens(content);
|
|
36
|
+
const result = analyzeBuildOutput(content);
|
|
37
|
+
return {
|
|
38
|
+
optimizedContent: result.summary,
|
|
39
|
+
detectedType: `build-${result.buildTool}`,
|
|
40
|
+
originalTokens,
|
|
41
|
+
optimizedTokens: result.stats.tokensCompressed,
|
|
42
|
+
savingsPercent: result.stats.reductionPercent,
|
|
43
|
+
method: "error-grouping",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function optimizeLogs(content, format = "plain") {
|
|
47
|
+
const originalTokens = countTokens(content);
|
|
48
|
+
const summarizer = getSummarizer(content);
|
|
49
|
+
const summaryResult = summarizer.summarize(content, { detail: "normal" });
|
|
50
|
+
// Format summary as text
|
|
51
|
+
const summaryText = formatLogSummary(summaryResult, format);
|
|
52
|
+
const optimizedTokens = countTokens(summaryText);
|
|
53
|
+
return {
|
|
54
|
+
optimizedContent: summaryText,
|
|
55
|
+
detectedType: `logs-${summarizer.logType}`,
|
|
56
|
+
originalTokens,
|
|
57
|
+
optimizedTokens,
|
|
58
|
+
savingsPercent: Math.round((1 - optimizedTokens / originalTokens) * 100),
|
|
59
|
+
method: "log-summarization",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function formatLogSummary(summary, format = "plain") {
|
|
63
|
+
const parts = [];
|
|
64
|
+
const md = format === "markdown";
|
|
65
|
+
parts.push(md ? `## ${summary.overview}` : summary.overview);
|
|
66
|
+
if (md)
|
|
67
|
+
parts.push("");
|
|
68
|
+
if (summary.errors.length > 0) {
|
|
69
|
+
if (md)
|
|
70
|
+
parts.push("### Errors");
|
|
71
|
+
else
|
|
72
|
+
parts.push("ERRORS:");
|
|
73
|
+
for (const error of summary.errors.slice(0, 10)) {
|
|
74
|
+
const count = error.count > 1 ? ` (×${error.count})` : "";
|
|
75
|
+
const ts = error.timestamp ? `${error.timestamp} ` : "";
|
|
76
|
+
parts.push(md ? `- ${ts}${error.message}${count}` : ` ${ts}${error.message}${count}`);
|
|
77
|
+
}
|
|
78
|
+
if (md)
|
|
79
|
+
parts.push("");
|
|
80
|
+
}
|
|
81
|
+
if (summary.warnings.length > 0) {
|
|
82
|
+
if (md)
|
|
83
|
+
parts.push("### Warnings");
|
|
84
|
+
else
|
|
85
|
+
parts.push("WARNINGS:");
|
|
86
|
+
for (const warning of summary.warnings.slice(0, 5)) {
|
|
87
|
+
const count = warning.count > 1 ? ` (×${warning.count})` : "";
|
|
88
|
+
const ts = warning.timestamp ? `${warning.timestamp} ` : "";
|
|
89
|
+
parts.push(md ? `- ${ts}${warning.message}${count}` : ` ${ts}${warning.message}${count}`);
|
|
90
|
+
}
|
|
91
|
+
if (md)
|
|
92
|
+
parts.push("");
|
|
93
|
+
}
|
|
94
|
+
if (summary.keyEvents.length > 0) {
|
|
95
|
+
if (md)
|
|
96
|
+
parts.push("### Key Events");
|
|
97
|
+
else
|
|
98
|
+
parts.push("KEY EVENTS:");
|
|
99
|
+
for (const event of summary.keyEvents.slice(0, 5)) {
|
|
100
|
+
const ts = event.timestamp ? `${event.timestamp} ` : "";
|
|
101
|
+
parts.push(md ? `- ${ts}${event.message}` : ` ${ts}${event.message}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return parts.join("\n");
|
|
105
|
+
}
|
|
106
|
+
function optimizeErrors(content, format = "plain") {
|
|
107
|
+
const originalTokens = countTokens(content);
|
|
108
|
+
const lines = content.split("\n").filter((l) => l.trim());
|
|
109
|
+
const md = format === "markdown";
|
|
110
|
+
// Group errors by signature
|
|
111
|
+
const result = groupBySignature(lines);
|
|
112
|
+
const stats = calculateStats(result);
|
|
113
|
+
const formatted = formatGroups(result, format);
|
|
114
|
+
const header = md
|
|
115
|
+
? `**${stats.originalLines} lines → ${stats.uniqueErrors} unique patterns** (${stats.totalDuplicates} duplicates removed)\n\n`
|
|
116
|
+
: `${stats.originalLines} lines -> ${stats.uniqueErrors} unique patterns (${stats.totalDuplicates} duplicates removed)\n\n`;
|
|
117
|
+
const optimizedContent = header + formatted;
|
|
118
|
+
const optimizedTokens = countTokens(optimizedContent);
|
|
119
|
+
return {
|
|
120
|
+
optimizedContent,
|
|
121
|
+
detectedType: "errors",
|
|
122
|
+
originalTokens,
|
|
123
|
+
optimizedTokens,
|
|
124
|
+
savingsPercent: stats.reductionPercent,
|
|
125
|
+
method: "error-deduplication",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function optimizeGeneric(content, aggressive) {
|
|
129
|
+
const originalTokens = countTokens(content);
|
|
130
|
+
const result = compressContent(content, {
|
|
131
|
+
detail: aggressive ? "minimal" : "normal",
|
|
132
|
+
});
|
|
133
|
+
return {
|
|
134
|
+
optimizedContent: result.compressed,
|
|
135
|
+
detectedType: "generic",
|
|
136
|
+
originalTokens,
|
|
137
|
+
optimizedTokens: result.stats.compressedTokens,
|
|
138
|
+
savingsPercent: result.stats.reductionPercent,
|
|
139
|
+
method: result.stats.technique,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
async function autoOptimize(args) {
|
|
143
|
+
const { content, hint = "auto", aggressive = false, format = "plain" } = args;
|
|
144
|
+
const md = format === "markdown";
|
|
145
|
+
// Minimum threshold for optimization (500 chars ~ 125 tokens)
|
|
146
|
+
if (content.length < 500) {
|
|
147
|
+
const msg = md
|
|
148
|
+
? `## Already Optimal\n\nContent is too short (${content.length} chars) to benefit from optimization.\n\n${content}`
|
|
149
|
+
: `Already Optimal: Content too short (${content.length} chars)\n\n${content}`;
|
|
150
|
+
return {
|
|
151
|
+
content: [{ type: "text", text: msg }],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
let result;
|
|
155
|
+
// Determine content type
|
|
156
|
+
if (hint === "build" || (hint === "auto" && isBuildOutput(content))) {
|
|
157
|
+
result = optimizeBuildOutput(content);
|
|
158
|
+
}
|
|
159
|
+
else if (hint === "logs" || (hint === "auto" && detectContentType(content) === "logs")) {
|
|
160
|
+
result = optimizeLogs(content, format);
|
|
161
|
+
}
|
|
162
|
+
else if (hint === "errors") {
|
|
163
|
+
result = optimizeErrors(content, format);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Use automatic type detection
|
|
167
|
+
const detectedType = detectContentType(content);
|
|
168
|
+
switch (detectedType) {
|
|
169
|
+
case "logs":
|
|
170
|
+
result = optimizeLogs(content, format);
|
|
171
|
+
break;
|
|
172
|
+
case "stacktrace":
|
|
173
|
+
result = optimizeErrors(content, format);
|
|
174
|
+
break;
|
|
175
|
+
default:
|
|
176
|
+
result = optimizeGeneric(content, aggressive);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Format output - minimal header to save tokens
|
|
180
|
+
const stats = `[${result.detectedType}] ${result.originalTokens}→${result.optimizedTokens} tokens (-${result.savingsPercent}%)`;
|
|
181
|
+
const output = `${stats}\n${result.optimizedContent}`;
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: "text", text: output }],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
export const autoOptimizeTool = {
|
|
187
|
+
name: "auto_optimize",
|
|
188
|
+
description: "Auto-compress verbose output (build errors, logs). 80-95% token reduction.",
|
|
189
|
+
inputSchema: autoOptimizeSchema,
|
|
190
|
+
execute: async (args) => autoOptimize(args),
|
|
191
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Execute Tool
|
|
3
|
+
*
|
|
4
|
+
* Executes TypeScript code with ctxopt SDK in a sandboxed environment.
|
|
5
|
+
* Reduces MCP token overhead by ~98% compared to individual tool calls.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolDefinition } from "./registry.js";
|
|
8
|
+
export declare const codeExecuteTool: ToolDefinition;
|
|
9
|
+
//# sourceMappingURL=code-execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-execute.d.ts","sourceRoot":"","sources":["../../src/tools/code-execute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAyFpD,eAAO,MAAM,eAAe,EAAE,cAK7B,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Execute Tool
|
|
3
|
+
*
|
|
4
|
+
* Executes TypeScript code with ctxopt SDK in a sandboxed environment.
|
|
5
|
+
* Reduces MCP token overhead by ~98% compared to individual tool calls.
|
|
6
|
+
*/
|
|
7
|
+
import { executeSandbox, DEFAULT_LIMITS } from "../sandbox/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Minimal schema for token efficiency
|
|
10
|
+
*/
|
|
11
|
+
const codeExecuteSchema = {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
code: { type: "string" },
|
|
15
|
+
timeout: { type: "number" },
|
|
16
|
+
},
|
|
17
|
+
required: ["code"],
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Execute code in sandbox
|
|
21
|
+
*/
|
|
22
|
+
async function executeCodeExecute(args) {
|
|
23
|
+
const { code, timeout = DEFAULT_LIMITS.timeout } = args;
|
|
24
|
+
// Validate timeout
|
|
25
|
+
const safeTimeout = Math.min(Math.max(timeout, 1000), // Min 1 second
|
|
26
|
+
DEFAULT_LIMITS.maxTimeout // Max 30 seconds
|
|
27
|
+
);
|
|
28
|
+
// Execute in sandbox
|
|
29
|
+
const result = await executeSandbox(code, {
|
|
30
|
+
workingDir: process.cwd(),
|
|
31
|
+
timeout: safeTimeout,
|
|
32
|
+
memoryLimit: DEFAULT_LIMITS.memoryLimit,
|
|
33
|
+
maxOutputTokens: DEFAULT_LIMITS.maxOutputTokens,
|
|
34
|
+
});
|
|
35
|
+
if (!result.success) {
|
|
36
|
+
return {
|
|
37
|
+
content: [
|
|
38
|
+
{
|
|
39
|
+
type: "text",
|
|
40
|
+
text: `[ERR] ${result.error}\n\nExecution time: ${result.stats.executionTimeMs}ms`,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
isError: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Format output
|
|
47
|
+
let output;
|
|
48
|
+
if (typeof result.output === "string") {
|
|
49
|
+
output = result.output;
|
|
50
|
+
}
|
|
51
|
+
else if (result.output === null || result.output === undefined) {
|
|
52
|
+
output = "(no output)";
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
output = JSON.stringify(result.output, null, 2);
|
|
56
|
+
}
|
|
57
|
+
const header = `[OK] ${result.stats.executionTimeMs}ms, ${result.stats.tokensUsed} tokens`;
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: "text",
|
|
62
|
+
text: `${header}\n\n${output}`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Tool description with SDK reference
|
|
69
|
+
*/
|
|
70
|
+
const DESCRIPTION = `Execute TypeScript with ctxopt SDK. 98% fewer tokens than tool calls.
|
|
71
|
+
|
|
72
|
+
SDK (ctx):
|
|
73
|
+
compress: auto(content,hint?) logs(logs) diff(diff) semantic(content,ratio?)
|
|
74
|
+
code: parse(content,lang) extract(content,lang,{type,name}) skeleton(content,lang)
|
|
75
|
+
files: read(path) exists(path) glob(pattern)
|
|
76
|
+
utils: countTokens(text) detectType(content) detectLanguage(path)
|
|
77
|
+
|
|
78
|
+
Example: return ctx.compress.auto(ctx.files.read("logs.txt"))`;
|
|
79
|
+
export const codeExecuteTool = {
|
|
80
|
+
name: "code_execute",
|
|
81
|
+
description: DESCRIPTION,
|
|
82
|
+
inputSchema: codeExecuteSchema,
|
|
83
|
+
execute: executeCodeExecute,
|
|
84
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Skeleton Tool
|
|
3
|
+
*
|
|
4
|
+
* Extracts code skeleton (signatures only) from source files.
|
|
5
|
+
* Provides configurable depth levels and token statistics.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolDefinition } from "./registry.js";
|
|
8
|
+
export declare const codeSkeletonSchema: {
|
|
9
|
+
type: "object";
|
|
10
|
+
properties: {
|
|
11
|
+
filePath: {
|
|
12
|
+
type: string;
|
|
13
|
+
};
|
|
14
|
+
depth: {
|
|
15
|
+
enum: number[];
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
required: string[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Execute code-skeleton tool
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeCodeSkeleton(args: unknown): Promise<{
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Code Skeleton Tool Definition
|
|
31
|
+
*/
|
|
32
|
+
export declare const codeSkeletonTool: ToolDefinition;
|
|
33
|
+
//# sourceMappingURL=code-skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-skeleton.d.ts","sourceRoot":"","sources":["../../src/tools/code-skeleton.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD,eAAO,MAAM,kBAAkB;;;;;;;;;;;CAO9B,CAAC;AAsIF;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoE7D;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAK9B,CAAC"}
|