@planu/cli 0.30.1 → 0.32.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/dist/config/ide-registry.json +204 -0
- package/dist/config/injection-patterns.json +30 -0
- package/dist/config/known-cves.json +41 -0
- package/dist/config/license-plans.json +26 -2
- package/dist/config/llm-providers.json +198 -0
- package/dist/config/model-equivalences.json +41 -0
- package/dist/config/model-language-affinity.json +16 -0
- package/dist/config/orchestration-templates.json +76 -0
- package/dist/config/orchestration-topologies.json +36 -0
- package/dist/config/plugin-marketplace.json +59 -0
- package/dist/config/security-runtime-config.json +26 -0
- package/dist/config/workers-registry.json +100 -0
- package/dist/engine/deleter/audit-logger.d.ts +11 -0
- package/dist/engine/deleter/audit-logger.d.ts.map +1 -0
- package/dist/engine/deleter/audit-logger.js +30 -0
- package/dist/engine/deleter/audit-logger.js.map +1 -0
- package/dist/engine/deleter/core.d.ts +39 -0
- package/dist/engine/deleter/core.d.ts.map +1 -0
- package/dist/engine/deleter/core.js +267 -0
- package/dist/engine/deleter/core.js.map +1 -0
- package/dist/engine/deleter/trash-manager.d.ts +18 -0
- package/dist/engine/deleter/trash-manager.d.ts.map +1 -0
- package/dist/engine/deleter/trash-manager.js +92 -0
- package/dist/engine/deleter/trash-manager.js.map +1 -0
- package/dist/engine/github/adapters/bitbucket-adapter.d.ts +12 -0
- package/dist/engine/github/adapters/bitbucket-adapter.d.ts.map +1 -0
- package/dist/engine/github/adapters/bitbucket-adapter.js +32 -0
- package/dist/engine/github/adapters/bitbucket-adapter.js.map +1 -0
- package/dist/engine/github/adapters/github-adapter.d.ts +20 -0
- package/dist/engine/github/adapters/github-adapter.d.ts.map +1 -0
- package/dist/engine/github/adapters/github-adapter.js +221 -0
- package/dist/engine/github/adapters/github-adapter.js.map +1 -0
- package/dist/engine/github/adapters/gitlab-adapter.d.ts +12 -0
- package/dist/engine/github/adapters/gitlab-adapter.d.ts.map +1 -0
- package/dist/engine/github/adapters/gitlab-adapter.js +32 -0
- package/dist/engine/github/adapters/gitlab-adapter.js.map +1 -0
- package/dist/engine/github/adapters/index.d.ts +4 -0
- package/dist/engine/github/adapters/index.d.ts.map +1 -0
- package/dist/engine/github/adapters/index.js +5 -0
- package/dist/engine/github/adapters/index.js.map +1 -0
- package/dist/engine/github/auth.d.ts +13 -0
- package/dist/engine/github/auth.d.ts.map +1 -0
- package/dist/engine/github/auth.js +59 -0
- package/dist/engine/github/auth.js.map +1 -0
- package/dist/engine/github/changelog.d.ts +26 -0
- package/dist/engine/github/changelog.d.ts.map +1 -0
- package/dist/engine/github/changelog.js +117 -0
- package/dist/engine/github/changelog.js.map +1 -0
- package/dist/engine/github/ci-status.d.ts +13 -0
- package/dist/engine/github/ci-status.d.ts.map +1 -0
- package/dist/engine/github/ci-status.js +32 -0
- package/dist/engine/github/ci-status.js.map +1 -0
- package/dist/engine/github/client.d.ts +18 -0
- package/dist/engine/github/client.d.ts.map +1 -0
- package/dist/engine/github/client.js +55 -0
- package/dist/engine/github/client.js.map +1 -0
- package/dist/engine/github/gh-cli.d.ts +22 -0
- package/dist/engine/github/gh-cli.d.ts.map +1 -0
- package/dist/engine/github/gh-cli.js +53 -0
- package/dist/engine/github/gh-cli.js.map +1 -0
- package/dist/engine/github/index.d.ts +9 -0
- package/dist/engine/github/index.d.ts.map +1 -0
- package/dist/engine/github/index.js +10 -0
- package/dist/engine/github/index.js.map +1 -0
- package/dist/engine/github/pr-template.d.ts +17 -0
- package/dist/engine/github/pr-template.d.ts.map +1 -0
- package/dist/engine/github/pr-template.js +79 -0
- package/dist/engine/github/pr-template.js.map +1 -0
- package/dist/engine/github/review-analyzer.d.ts +19 -0
- package/dist/engine/github/review-analyzer.d.ts.map +1 -0
- package/dist/engine/github/review-analyzer.js +146 -0
- package/dist/engine/github/review-analyzer.js.map +1 -0
- package/dist/engine/github/spec-linker.d.ts +18 -0
- package/dist/engine/github/spec-linker.d.ts.map +1 -0
- package/dist/engine/github/spec-linker.js +54 -0
- package/dist/engine/github/spec-linker.js.map +1 -0
- package/dist/engine/ide-config/core.d.ts +14 -0
- package/dist/engine/ide-config/core.d.ts.map +1 -0
- package/dist/engine/ide-config/core.js +103 -0
- package/dist/engine/ide-config/core.js.map +1 -0
- package/dist/engine/ide-config/detector.d.ts +18 -0
- package/dist/engine/ide-config/detector.d.ts.map +1 -0
- package/dist/engine/ide-config/detector.js +97 -0
- package/dist/engine/ide-config/detector.js.map +1 -0
- package/dist/engine/ide-config/generators.d.ts +6 -0
- package/dist/engine/ide-config/generators.d.ts.map +1 -0
- package/dist/engine/ide-config/generators.js +146 -0
- package/dist/engine/ide-config/generators.js.map +1 -0
- package/dist/engine/ide-config/index.d.ts +6 -0
- package/dist/engine/ide-config/index.d.ts.map +1 -0
- package/dist/engine/ide-config/index.js +7 -0
- package/dist/engine/ide-config/index.js.map +1 -0
- package/dist/engine/ide-config/path-resolver.d.ts +23 -0
- package/dist/engine/ide-config/path-resolver.d.ts.map +1 -0
- package/dist/engine/ide-config/path-resolver.js +55 -0
- package/dist/engine/ide-config/path-resolver.js.map +1 -0
- package/dist/engine/ide-config/validator.d.ts +7 -0
- package/dist/engine/ide-config/validator.d.ts.map +1 -0
- package/dist/engine/ide-config/validator.js +55 -0
- package/dist/engine/ide-config/validator.js.map +1 -0
- package/dist/engine/license-validator/lemon-squeezy.d.ts.map +1 -1
- package/dist/engine/license-validator/lemon-squeezy.js +16 -12
- package/dist/engine/license-validator/lemon-squeezy.js.map +1 -1
- package/dist/engine/llm-providers/cost-optimizer.d.ts +26 -0
- package/dist/engine/llm-providers/cost-optimizer.d.ts.map +1 -0
- package/dist/engine/llm-providers/cost-optimizer.js +101 -0
- package/dist/engine/llm-providers/cost-optimizer.js.map +1 -0
- package/dist/engine/llm-providers/cost-tracker.d.ts +26 -0
- package/dist/engine/llm-providers/cost-tracker.d.ts.map +1 -0
- package/dist/engine/llm-providers/cost-tracker.js +75 -0
- package/dist/engine/llm-providers/cost-tracker.js.map +1 -0
- package/dist/engine/llm-providers/failover-chain.d.ts +23 -0
- package/dist/engine/llm-providers/failover-chain.d.ts.map +1 -0
- package/dist/engine/llm-providers/failover-chain.js +88 -0
- package/dist/engine/llm-providers/failover-chain.js.map +1 -0
- package/dist/engine/llm-providers/health-checker.d.ts +18 -0
- package/dist/engine/llm-providers/health-checker.d.ts.map +1 -0
- package/dist/engine/llm-providers/health-checker.js +45 -0
- package/dist/engine/llm-providers/health-checker.js.map +1 -0
- package/dist/engine/llm-providers/index.d.ts +10 -0
- package/dist/engine/llm-providers/index.d.ts.map +1 -0
- package/dist/engine/llm-providers/index.js +11 -0
- package/dist/engine/llm-providers/index.js.map +1 -0
- package/dist/engine/llm-providers/key-manager.d.ts +23 -0
- package/dist/engine/llm-providers/key-manager.d.ts.map +1 -0
- package/dist/engine/llm-providers/key-manager.js +47 -0
- package/dist/engine/llm-providers/key-manager.js.map +1 -0
- package/dist/engine/llm-providers/load-balancer.d.ts +13 -0
- package/dist/engine/llm-providers/load-balancer.d.ts.map +1 -0
- package/dist/engine/llm-providers/load-balancer.js +94 -0
- package/dist/engine/llm-providers/load-balancer.js.map +1 -0
- package/dist/engine/llm-providers/provider-adapter.d.ts +25 -0
- package/dist/engine/llm-providers/provider-adapter.d.ts.map +1 -0
- package/dist/engine/llm-providers/provider-adapter.js +86 -0
- package/dist/engine/llm-providers/provider-adapter.js.map +1 -0
- package/dist/engine/llm-providers/rate-limiter.d.ts +29 -0
- package/dist/engine/llm-providers/rate-limiter.d.ts.map +1 -0
- package/dist/engine/llm-providers/rate-limiter.js +70 -0
- package/dist/engine/llm-providers/rate-limiter.js.map +1 -0
- package/dist/engine/orchestrator/agent-spawner.d.ts +22 -0
- package/dist/engine/orchestrator/agent-spawner.d.ts.map +1 -0
- package/dist/engine/orchestrator/agent-spawner.js +117 -0
- package/dist/engine/orchestrator/agent-spawner.js.map +1 -0
- package/dist/engine/orchestrator/conflict-resolver.d.ts +11 -0
- package/dist/engine/orchestrator/conflict-resolver.d.ts.map +1 -0
- package/dist/engine/orchestrator/conflict-resolver.js +81 -0
- package/dist/engine/orchestrator/conflict-resolver.js.map +1 -0
- package/dist/engine/orchestrator/file-ownership.d.ts +25 -0
- package/dist/engine/orchestrator/file-ownership.d.ts.map +1 -0
- package/dist/engine/orchestrator/file-ownership.js +62 -0
- package/dist/engine/orchestrator/file-ownership.js.map +1 -0
- package/dist/engine/orchestrator/handoff-generator.d.ts +20 -0
- package/dist/engine/orchestrator/handoff-generator.d.ts.map +1 -0
- package/dist/engine/orchestrator/handoff-generator.js +95 -0
- package/dist/engine/orchestrator/handoff-generator.js.map +1 -0
- package/dist/engine/orchestrator/index.d.ts +10 -0
- package/dist/engine/orchestrator/index.d.ts.map +1 -0
- package/dist/engine/orchestrator/index.js +11 -0
- package/dist/engine/orchestrator/index.js.map +1 -0
- package/dist/engine/orchestrator/progress-tracker.d.ts +32 -0
- package/dist/engine/orchestrator/progress-tracker.d.ts.map +1 -0
- package/dist/engine/orchestrator/progress-tracker.js +102 -0
- package/dist/engine/orchestrator/progress-tracker.js.map +1 -0
- package/dist/engine/orchestrator/result-collector.d.ts +23 -0
- package/dist/engine/orchestrator/result-collector.d.ts.map +1 -0
- package/dist/engine/orchestrator/result-collector.js +124 -0
- package/dist/engine/orchestrator/result-collector.js.map +1 -0
- package/dist/engine/orchestrator/runtime.d.ts +21 -0
- package/dist/engine/orchestrator/runtime.d.ts.map +1 -0
- package/dist/engine/orchestrator/runtime.js +231 -0
- package/dist/engine/orchestrator/runtime.js.map +1 -0
- package/dist/engine/orchestrator/task-distributor.d.ts +8 -0
- package/dist/engine/orchestrator/task-distributor.d.ts.map +1 -0
- package/dist/engine/orchestrator/task-distributor.js +106 -0
- package/dist/engine/orchestrator/task-distributor.js.map +1 -0
- package/dist/engine/orchestrator/topologies.d.ts +30 -0
- package/dist/engine/orchestrator/topologies.d.ts.map +1 -0
- package/dist/engine/orchestrator/topologies.js +89 -0
- package/dist/engine/orchestrator/topologies.js.map +1 -0
- package/dist/engine/plugins/compatibility.d.ts +24 -0
- package/dist/engine/plugins/compatibility.d.ts.map +1 -0
- package/dist/engine/plugins/compatibility.js +140 -0
- package/dist/engine/plugins/compatibility.js.map +1 -0
- package/dist/engine/plugins/doc-generator.d.ts +6 -0
- package/dist/engine/plugins/doc-generator.d.ts.map +1 -0
- package/dist/engine/plugins/doc-generator.js +79 -0
- package/dist/engine/plugins/doc-generator.js.map +1 -0
- package/dist/engine/plugins/extensions/analyzer-extension.d.ts +26 -0
- package/dist/engine/plugins/extensions/analyzer-extension.d.ts.map +1 -0
- package/dist/engine/plugins/extensions/analyzer-extension.js +100 -0
- package/dist/engine/plugins/extensions/analyzer-extension.js.map +1 -0
- package/dist/engine/plugins/extensions/template-extension.d.ts +25 -0
- package/dist/engine/plugins/extensions/template-extension.d.ts.map +1 -0
- package/dist/engine/plugins/extensions/template-extension.js +65 -0
- package/dist/engine/plugins/extensions/template-extension.js.map +1 -0
- package/dist/engine/plugins/extensions/tool-extension.d.ts +34 -0
- package/dist/engine/plugins/extensions/tool-extension.d.ts.map +1 -0
- package/dist/engine/plugins/extensions/tool-extension.js +80 -0
- package/dist/engine/plugins/extensions/tool-extension.js.map +1 -0
- package/dist/engine/plugins/extensions/worker-extension.d.ts +24 -0
- package/dist/engine/plugins/extensions/worker-extension.d.ts.map +1 -0
- package/dist/engine/plugins/extensions/worker-extension.js +88 -0
- package/dist/engine/plugins/extensions/worker-extension.js.map +1 -0
- package/dist/engine/plugins/index.d.ts +11 -0
- package/dist/engine/plugins/index.d.ts.map +1 -0
- package/dist/engine/plugins/index.js +12 -0
- package/dist/engine/plugins/index.js.map +1 -0
- package/dist/engine/plugins/lifecycle.d.ts +26 -0
- package/dist/engine/plugins/lifecycle.d.ts.map +1 -0
- package/dist/engine/plugins/lifecycle.js +208 -0
- package/dist/engine/plugins/lifecycle.js.map +1 -0
- package/dist/engine/plugins/loader.d.ts +17 -0
- package/dist/engine/plugins/loader.d.ts.map +1 -0
- package/dist/engine/plugins/loader.js +113 -0
- package/dist/engine/plugins/loader.js.map +1 -0
- package/dist/engine/plugins/sandbox.d.ts +20 -0
- package/dist/engine/plugins/sandbox.d.ts.map +1 -0
- package/dist/engine/plugins/sandbox.js +111 -0
- package/dist/engine/plugins/sandbox.js.map +1 -0
- package/dist/engine/plugins/validator.d.ts +18 -0
- package/dist/engine/plugins/validator.d.ts.map +1 -0
- package/dist/engine/plugins/validator.js +125 -0
- package/dist/engine/plugins/validator.js.map +1 -0
- package/dist/engine/runtime-security/audit-logger.d.ts +7 -0
- package/dist/engine/runtime-security/audit-logger.d.ts.map +1 -0
- package/dist/engine/runtime-security/audit-logger.js +120 -0
- package/dist/engine/runtime-security/audit-logger.js.map +1 -0
- package/dist/engine/runtime-security/checkers/command-injection.d.ts +3 -0
- package/dist/engine/runtime-security/checkers/command-injection.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/command-injection.js +91 -0
- package/dist/engine/runtime-security/checkers/command-injection.js.map +1 -0
- package/dist/engine/runtime-security/checkers/content-security.d.ts +3 -0
- package/dist/engine/runtime-security/checkers/content-security.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/content-security.js +106 -0
- package/dist/engine/runtime-security/checkers/content-security.js.map +1 -0
- package/dist/engine/runtime-security/checkers/dependency-vuln.d.ts +4 -0
- package/dist/engine/runtime-security/checkers/dependency-vuln.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/dependency-vuln.js +93 -0
- package/dist/engine/runtime-security/checkers/dependency-vuln.js.map +1 -0
- package/dist/engine/runtime-security/checkers/file-permissions.d.ts +3 -0
- package/dist/engine/runtime-security/checkers/file-permissions.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/file-permissions.js +60 -0
- package/dist/engine/runtime-security/checkers/file-permissions.js.map +1 -0
- package/dist/engine/runtime-security/checkers/input-sanitizer.d.ts +4 -0
- package/dist/engine/runtime-security/checkers/input-sanitizer.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/input-sanitizer.js +101 -0
- package/dist/engine/runtime-security/checkers/input-sanitizer.js.map +1 -0
- package/dist/engine/runtime-security/checkers/path-traversal.d.ts +3 -0
- package/dist/engine/runtime-security/checkers/path-traversal.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/path-traversal.js +102 -0
- package/dist/engine/runtime-security/checkers/path-traversal.js.map +1 -0
- package/dist/engine/runtime-security/checkers/prompt-injection.d.ts +7 -0
- package/dist/engine/runtime-security/checkers/prompt-injection.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/prompt-injection.js +103 -0
- package/dist/engine/runtime-security/checkers/prompt-injection.js.map +1 -0
- package/dist/engine/runtime-security/checkers/sensitive-data.d.ts +3 -0
- package/dist/engine/runtime-security/checkers/sensitive-data.d.ts.map +1 -0
- package/dist/engine/runtime-security/checkers/sensitive-data.js +71 -0
- package/dist/engine/runtime-security/checkers/sensitive-data.js.map +1 -0
- package/dist/engine/runtime-security/index.d.ts +12 -0
- package/dist/engine/runtime-security/index.d.ts.map +1 -0
- package/dist/engine/runtime-security/index.js +13 -0
- package/dist/engine/runtime-security/index.js.map +1 -0
- package/dist/engine/runtime-security/rate-limiter.d.ts +5 -0
- package/dist/engine/runtime-security/rate-limiter.d.ts.map +1 -0
- package/dist/engine/runtime-security/rate-limiter.js +91 -0
- package/dist/engine/runtime-security/rate-limiter.js.map +1 -0
- package/dist/engine/runtime-security/validator.d.ts +9 -0
- package/dist/engine/runtime-security/validator.d.ts.map +1 -0
- package/dist/engine/runtime-security/validator.js +118 -0
- package/dist/engine/runtime-security/validator.js.map +1 -0
- package/dist/engine/session/auto-save.d.ts +18 -0
- package/dist/engine/session/auto-save.d.ts.map +1 -0
- package/dist/engine/session/auto-save.js +96 -0
- package/dist/engine/session/auto-save.js.map +1 -0
- package/dist/engine/session/context-snapshot.d.ts +8 -0
- package/dist/engine/session/context-snapshot.d.ts.map +1 -0
- package/dist/engine/session/context-snapshot.js +49 -0
- package/dist/engine/session/context-snapshot.js.map +1 -0
- package/dist/engine/session/index.d.ts +6 -0
- package/dist/engine/session/index.d.ts.map +1 -0
- package/dist/engine/session/index.js +7 -0
- package/dist/engine/session/index.js.map +1 -0
- package/dist/engine/session/memory-sync.d.ts +12 -0
- package/dist/engine/session/memory-sync.d.ts.map +1 -0
- package/dist/engine/session/memory-sync.js +34 -0
- package/dist/engine/session/memory-sync.js.map +1 -0
- package/dist/engine/session/session-diff.d.ts +11 -0
- package/dist/engine/session/session-diff.d.ts.map +1 -0
- package/dist/engine/session/session-diff.js +42 -0
- package/dist/engine/session/session-diff.js.map +1 -0
- package/dist/engine/session/session-merge.d.ts +12 -0
- package/dist/engine/session/session-merge.d.ts.map +1 -0
- package/dist/engine/session/session-merge.js +55 -0
- package/dist/engine/session/session-merge.js.map +1 -0
- package/dist/engine/spec-templates/fintech-compliance.d.ts +4 -0
- package/dist/engine/spec-templates/fintech-compliance.d.ts.map +1 -0
- package/dist/engine/spec-templates/fintech-compliance.js +111 -0
- package/dist/engine/spec-templates/fintech-compliance.js.map +1 -0
- package/dist/engine/spec-templates/fintech-kyc.d.ts +4 -0
- package/dist/engine/spec-templates/fintech-kyc.d.ts.map +1 -0
- package/dist/engine/spec-templates/fintech-kyc.js +125 -0
- package/dist/engine/spec-templates/fintech-kyc.js.map +1 -0
- package/dist/engine/spec-templates/fintech-transactions.d.ts +4 -0
- package/dist/engine/spec-templates/fintech-transactions.d.ts.map +1 -0
- package/dist/engine/spec-templates/fintech-transactions.js +120 -0
- package/dist/engine/spec-templates/fintech-transactions.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts +3 -7
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-industry-fintech.js +4 -348
- package/dist/engine/spec-templates/templates-industry-fintech.js.map +1 -1
- package/dist/engine/token-optimizer/batcher.d.ts +34 -0
- package/dist/engine/token-optimizer/batcher.d.ts.map +1 -0
- package/dist/engine/token-optimizer/batcher.js +89 -0
- package/dist/engine/token-optimizer/batcher.js.map +1 -0
- package/dist/engine/token-optimizer/budget.d.ts +54 -0
- package/dist/engine/token-optimizer/budget.d.ts.map +1 -0
- package/dist/engine/token-optimizer/budget.js +102 -0
- package/dist/engine/token-optimizer/budget.js.map +1 -0
- package/dist/engine/token-optimizer/context-compressor.d.ts +16 -0
- package/dist/engine/token-optimizer/context-compressor.d.ts.map +1 -0
- package/dist/engine/token-optimizer/context-compressor.js +148 -0
- package/dist/engine/token-optimizer/context-compressor.js.map +1 -0
- package/dist/engine/token-optimizer/counter.d.ts +16 -0
- package/dist/engine/token-optimizer/counter.d.ts.map +1 -0
- package/dist/engine/token-optimizer/counter.js +68 -0
- package/dist/engine/token-optimizer/counter.js.map +1 -0
- package/dist/engine/token-optimizer/deduplicator.d.ts +32 -0
- package/dist/engine/token-optimizer/deduplicator.d.ts.map +1 -0
- package/dist/engine/token-optimizer/deduplicator.js +102 -0
- package/dist/engine/token-optimizer/deduplicator.js.map +1 -0
- package/dist/engine/token-optimizer/incremental.d.ts +30 -0
- package/dist/engine/token-optimizer/incremental.d.ts.map +1 -0
- package/dist/engine/token-optimizer/incremental.js +88 -0
- package/dist/engine/token-optimizer/incremental.js.map +1 -0
- package/dist/engine/token-optimizer/index.d.ts +10 -0
- package/dist/engine/token-optimizer/index.d.ts.map +1 -0
- package/dist/engine/token-optimizer/index.js +11 -0
- package/dist/engine/token-optimizer/index.js.map +1 -0
- package/dist/engine/token-optimizer/optimizer.d.ts +47 -0
- package/dist/engine/token-optimizer/optimizer.d.ts.map +1 -0
- package/dist/engine/token-optimizer/optimizer.js +126 -0
- package/dist/engine/token-optimizer/optimizer.js.map +1 -0
- package/dist/engine/token-optimizer/reporter.d.ts +51 -0
- package/dist/engine/token-optimizer/reporter.d.ts.map +1 -0
- package/dist/engine/token-optimizer/reporter.js +143 -0
- package/dist/engine/token-optimizer/reporter.js.map +1 -0
- package/dist/engine/token-optimizer/response-cache.d.ts +49 -0
- package/dist/engine/token-optimizer/response-cache.d.ts.map +1 -0
- package/dist/engine/token-optimizer/response-cache.js +158 -0
- package/dist/engine/token-optimizer/response-cache.js.map +1 -0
- package/dist/engine/workers/handlers/code-map.d.ts +3 -0
- package/dist/engine/workers/handlers/code-map.d.ts.map +1 -0
- package/dist/engine/workers/handlers/code-map.js +227 -0
- package/dist/engine/workers/handlers/code-map.js.map +1 -0
- package/dist/engine/workers/handlers/dependency-health.d.ts +3 -0
- package/dist/engine/workers/handlers/dependency-health.d.ts.map +1 -0
- package/dist/engine/workers/handlers/dependency-health.js +254 -0
- package/dist/engine/workers/handlers/dependency-health.js.map +1 -0
- package/dist/engine/workers/handlers/documentation.d.ts +3 -0
- package/dist/engine/workers/handlers/documentation.d.ts.map +1 -0
- package/dist/engine/workers/handlers/documentation.js +207 -0
- package/dist/engine/workers/handlers/documentation.js.map +1 -0
- package/dist/engine/workers/handlers/optimization.d.ts +3 -0
- package/dist/engine/workers/handlers/optimization.d.ts.map +1 -0
- package/dist/engine/workers/handlers/optimization.js +161 -0
- package/dist/engine/workers/handlers/optimization.js.map +1 -0
- package/dist/engine/workers/handlers/security-audit.d.ts +3 -0
- package/dist/engine/workers/handlers/security-audit.d.ts.map +1 -0
- package/dist/engine/workers/handlers/security-audit.js +222 -0
- package/dist/engine/workers/handlers/security-audit.js.map +1 -0
- package/dist/engine/workers/handlers/test-gaps.d.ts +3 -0
- package/dist/engine/workers/handlers/test-gaps.d.ts.map +1 -0
- package/dist/engine/workers/handlers/test-gaps.js +186 -0
- package/dist/engine/workers/handlers/test-gaps.js.map +1 -0
- package/dist/engine/workers/index.d.ts +8 -0
- package/dist/engine/workers/index.d.ts.map +1 -0
- package/dist/engine/workers/index.js +9 -0
- package/dist/engine/workers/index.js.map +1 -0
- package/dist/engine/workers/worker-engine.d.ts +24 -0
- package/dist/engine/workers/worker-engine.d.ts.map +1 -0
- package/dist/engine/workers/worker-engine.js +233 -0
- package/dist/engine/workers/worker-engine.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/session-store.d.ts +20 -0
- package/dist/storage/session-store.d.ts.map +1 -0
- package/dist/storage/session-store.js +118 -0
- package/dist/storage/session-store.js.map +1 -0
- package/dist/storage/token-cache-store.d.ts +10 -0
- package/dist/storage/token-cache-store.d.ts.map +1 -0
- package/dist/storage/token-cache-store.js +67 -0
- package/dist/storage/token-cache-store.js.map +1 -0
- package/dist/storage/trash-store.d.ts +35 -0
- package/dist/storage/trash-store.d.ts.map +1 -0
- package/dist/storage/trash-store.js +163 -0
- package/dist/storage/trash-store.js.map +1 -0
- package/dist/storage/worker-store.d.ts +11 -0
- package/dist/storage/worker-store.d.ts.map +1 -0
- package/dist/storage/worker-store.js +120 -0
- package/dist/storage/worker-store.js.map +1 -0
- package/dist/tools/agent-swarm-status.d.ts +7 -0
- package/dist/tools/agent-swarm-status.d.ts.map +1 -0
- package/dist/tools/agent-swarm-status.js +94 -0
- package/dist/tools/agent-swarm-status.js.map +1 -0
- package/dist/tools/configure-llm-providers-handler.d.ts +18 -0
- package/dist/tools/configure-llm-providers-handler.d.ts.map +1 -0
- package/dist/tools/configure-llm-providers-handler.js +127 -0
- package/dist/tools/configure-llm-providers-handler.js.map +1 -0
- package/dist/tools/configure-workers-handler.d.ts +3 -0
- package/dist/tools/configure-workers-handler.d.ts.map +1 -0
- package/dist/tools/configure-workers-handler.js +116 -0
- package/dist/tools/configure-workers-handler.js.map +1 -0
- package/dist/tools/delete-decision.d.ts +7 -0
- package/dist/tools/delete-decision.d.ts.map +1 -0
- package/dist/tools/delete-decision.js +54 -0
- package/dist/tools/delete-decision.js.map +1 -0
- package/dist/tools/delete-pattern.d.ts +7 -0
- package/dist/tools/delete-pattern.d.ts.map +1 -0
- package/dist/tools/delete-pattern.js +54 -0
- package/dist/tools/delete-pattern.js.map +1 -0
- package/dist/tools/delete-project.d.ts +7 -0
- package/dist/tools/delete-project.d.ts.map +1 -0
- package/dist/tools/delete-project.js +53 -0
- package/dist/tools/delete-project.js.map +1 -0
- package/dist/tools/delete-spec.d.ts +7 -0
- package/dist/tools/delete-spec.d.ts.map +1 -0
- package/dist/tools/delete-spec.js +54 -0
- package/dist/tools/delete-spec.js.map +1 -0
- package/dist/tools/export-session.d.ts +3 -0
- package/dist/tools/export-session.d.ts.map +1 -0
- package/dist/tools/export-session.js +87 -0
- package/dist/tools/export-session.js.map +1 -0
- package/dist/tools/github-pr-handler.d.ts +13 -0
- package/dist/tools/github-pr-handler.d.ts.map +1 -0
- package/dist/tools/github-pr-handler.js +109 -0
- package/dist/tools/github-pr-handler.js.map +1 -0
- package/dist/tools/github-release-handler.d.ts +14 -0
- package/dist/tools/github-release-handler.d.ts.map +1 -0
- package/dist/tools/github-release-handler.js +55 -0
- package/dist/tools/github-release-handler.js.map +1 -0
- package/dist/tools/github-review-handler.d.ts +7 -0
- package/dist/tools/github-review-handler.d.ts.map +1 -0
- package/dist/tools/github-review-handler.js +61 -0
- package/dist/tools/github-review-handler.js.map +1 -0
- package/dist/tools/ide-config-handler.d.ts +11 -0
- package/dist/tools/ide-config-handler.d.ts.map +1 -0
- package/dist/tools/ide-config-handler.js +56 -0
- package/dist/tools/ide-config-handler.js.map +1 -0
- package/dist/tools/list-sessions.d.ts +3 -0
- package/dist/tools/list-sessions.d.ts.map +1 -0
- package/dist/tools/list-sessions.js +28 -0
- package/dist/tools/list-sessions.js.map +1 -0
- package/dist/tools/llm-provider-status-handler.d.ts +7 -0
- package/dist/tools/llm-provider-status-handler.d.ts.map +1 -0
- package/dist/tools/llm-provider-status-handler.js +63 -0
- package/dist/tools/llm-provider-status-handler.js.map +1 -0
- package/dist/tools/manage-plugins-handler.d.ts +6 -0
- package/dist/tools/manage-plugins-handler.d.ts.map +1 -0
- package/dist/tools/manage-plugins-handler.js +128 -0
- package/dist/tools/manage-plugins-handler.js.map +1 -0
- package/dist/tools/manage-trash.d.ts +7 -0
- package/dist/tools/manage-trash.d.ts.map +1 -0
- package/dist/tools/manage-trash.js +54 -0
- package/dist/tools/manage-trash.js.map +1 -0
- package/dist/tools/orchestrate-runtime.d.ts +7 -0
- package/dist/tools/orchestrate-runtime.d.ts.map +1 -0
- package/dist/tools/orchestrate-runtime.js +72 -0
- package/dist/tools/orchestrate-runtime.js.map +1 -0
- package/dist/tools/register-delete-tools.d.ts +6 -0
- package/dist/tools/register-delete-tools.d.ts.map +1 -0
- package/dist/tools/register-delete-tools.js +95 -0
- package/dist/tools/register-delete-tools.js.map +1 -0
- package/dist/tools/register-github-tools.d.ts +3 -0
- package/dist/tools/register-github-tools.d.ts.map +1 -0
- package/dist/tools/register-github-tools.js +47 -0
- package/dist/tools/register-github-tools.js.map +1 -0
- package/dist/tools/register-ide-tools.d.ts +3 -0
- package/dist/tools/register-ide-tools.d.ts.map +1 -0
- package/dist/tools/register-ide-tools.js +28 -0
- package/dist/tools/register-ide-tools.js.map +1 -0
- package/dist/tools/register-llm-provider-tools.d.ts +3 -0
- package/dist/tools/register-llm-provider-tools.d.ts.map +1 -0
- package/dist/tools/register-llm-provider-tools.js +73 -0
- package/dist/tools/register-llm-provider-tools.js.map +1 -0
- package/dist/tools/register-orchestrator-tools.d.ts +3 -0
- package/dist/tools/register-orchestrator-tools.d.ts.map +1 -0
- package/dist/tools/register-orchestrator-tools.js +68 -0
- package/dist/tools/register-orchestrator-tools.js.map +1 -0
- package/dist/tools/register-plugin-tools.d.ts +3 -0
- package/dist/tools/register-plugin-tools.d.ts.map +1 -0
- package/dist/tools/register-plugin-tools.js +27 -0
- package/dist/tools/register-plugin-tools.js.map +1 -0
- package/dist/tools/register-runtime-security-tools.d.ts +3 -0
- package/dist/tools/register-runtime-security-tools.d.ts.map +1 -0
- package/dist/tools/register-runtime-security-tools.js +19 -0
- package/dist/tools/register-runtime-security-tools.js.map +1 -0
- package/dist/tools/register-session-tools.d.ts +3 -0
- package/dist/tools/register-session-tools.d.ts.map +1 -0
- package/dist/tools/register-session-tools.js +34 -0
- package/dist/tools/register-session-tools.js.map +1 -0
- package/dist/tools/register-token-tools.d.ts +3 -0
- package/dist/tools/register-token-tools.d.ts.map +1 -0
- package/dist/tools/register-token-tools.js +17 -0
- package/dist/tools/register-token-tools.js.map +1 -0
- package/dist/tools/register-worker-tools.d.ts +3 -0
- package/dist/tools/register-worker-tools.d.ts.map +1 -0
- package/dist/tools/register-worker-tools.js +31 -0
- package/dist/tools/register-worker-tools.js.map +1 -0
- package/dist/tools/restore-session.d.ts +3 -0
- package/dist/tools/restore-session.d.ts.map +1 -0
- package/dist/tools/restore-session.js +60 -0
- package/dist/tools/restore-session.js.map +1 -0
- package/dist/tools/scaffold-plugin-handler.d.ts +6 -0
- package/dist/tools/scaffold-plugin-handler.d.ts.map +1 -0
- package/dist/tools/scaffold-plugin-handler.js +208 -0
- package/dist/tools/scaffold-plugin-handler.js.map +1 -0
- package/dist/tools/schemas/delete.d.ts +19 -0
- package/dist/tools/schemas/delete.d.ts.map +1 -0
- package/dist/tools/schemas/delete.js +12 -0
- package/dist/tools/schemas/delete.js.map +1 -0
- package/dist/tools/schemas/github.d.ts +51 -0
- package/dist/tools/schemas/github.d.ts.map +1 -0
- package/dist/tools/schemas/github.js +52 -0
- package/dist/tools/schemas/github.js.map +1 -0
- package/dist/tools/schemas/ide-config.d.ts +36 -0
- package/dist/tools/schemas/ide-config.d.ts.map +1 -0
- package/dist/tools/schemas/ide-config.js +27 -0
- package/dist/tools/schemas/ide-config.js.map +1 -0
- package/dist/tools/schemas/index.d.ts +9 -0
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +9 -0
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/llm-provider-schemas.d.ts +26 -0
- package/dist/tools/schemas/llm-provider-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/llm-provider-schemas.js +16 -0
- package/dist/tools/schemas/llm-provider-schemas.js.map +1 -0
- package/dist/tools/schemas/plugins-schemas.d.ts +40 -0
- package/dist/tools/schemas/plugins-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/plugins-schemas.js +29 -0
- package/dist/tools/schemas/plugins-schemas.js.map +1 -0
- package/dist/tools/schemas/runtime-security.d.ts +12 -0
- package/dist/tools/schemas/runtime-security.d.ts.map +1 -0
- package/dist/tools/schemas/runtime-security.js +9 -0
- package/dist/tools/schemas/runtime-security.js.map +1 -0
- package/dist/tools/schemas/session.d.ts +22 -0
- package/dist/tools/schemas/session.d.ts.map +1 -0
- package/dist/tools/schemas/session.js +25 -0
- package/dist/tools/schemas/session.js.map +1 -0
- package/dist/tools/schemas/token-optimization.d.ts +12 -0
- package/dist/tools/schemas/token-optimization.d.ts.map +1 -0
- package/dist/tools/schemas/token-optimization.js +9 -0
- package/dist/tools/schemas/token-optimization.js.map +1 -0
- package/dist/tools/schemas/workers-schema.d.ts +75 -0
- package/dist/tools/schemas/workers-schema.d.ts.map +1 -0
- package/dist/tools/schemas/workers-schema.js +63 -0
- package/dist/tools/schemas/workers-schema.js.map +1 -0
- package/dist/tools/security-report-handler.d.ts +3 -0
- package/dist/tools/security-report-handler.d.ts.map +1 -0
- package/dist/tools/security-report-handler.js +66 -0
- package/dist/tools/security-report-handler.js.map +1 -0
- package/dist/tools/token-usage-handler.d.ts +15 -0
- package/dist/tools/token-usage-handler.d.ts.map +1 -0
- package/dist/tools/token-usage-handler.js +53 -0
- package/dist/tools/token-usage-handler.js.map +1 -0
- package/dist/tools/worker-status-handler.d.ts +3 -0
- package/dist/tools/worker-status-handler.d.ts.map +1 -0
- package/dist/tools/worker-status-handler.js +93 -0
- package/dist/tools/worker-status-handler.js.map +1 -0
- package/dist/types/delete.d.ts +68 -0
- package/dist/types/delete.d.ts.map +1 -0
- package/dist/types/delete.js +3 -0
- package/dist/types/delete.js.map +1 -0
- package/dist/types/github.d.ts +156 -0
- package/dist/types/github.d.ts.map +1 -0
- package/dist/types/github.js +11 -0
- package/dist/types/github.js.map +1 -0
- package/dist/types/ide.d.ts +70 -0
- package/dist/types/ide.d.ts.map +1 -0
- package/dist/types/ide.js +3 -0
- package/dist/types/ide.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/llm-providers.d.ts +140 -0
- package/dist/types/llm-providers.d.ts.map +1 -0
- package/dist/types/llm-providers.js +3 -0
- package/dist/types/llm-providers.js.map +1 -0
- package/dist/types/orchestration-runtime.d.ts +198 -0
- package/dist/types/orchestration-runtime.d.ts.map +1 -0
- package/dist/types/orchestration-runtime.js +4 -0
- package/dist/types/orchestration-runtime.js.map +1 -0
- package/dist/types/plugins.d.ts +144 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +3 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/project/agent.d.ts +12 -0
- package/dist/types/project/agent.d.ts.map +1 -0
- package/dist/types/project/agent.js +3 -0
- package/dist/types/project/agent.js.map +1 -0
- package/dist/types/project/architecture-detection.d.ts +23 -0
- package/dist/types/project/architecture-detection.d.ts.map +1 -0
- package/dist/types/project/architecture-detection.js +2 -0
- package/dist/types/project/architecture-detection.js.map +1 -0
- package/dist/types/project/config-metrics.d.ts +29 -0
- package/dist/types/project/config-metrics.d.ts.map +1 -0
- package/dist/types/project/config-metrics.js +2 -0
- package/dist/types/project/config-metrics.js.map +1 -0
- package/dist/types/project/constitution.d.ts +31 -0
- package/dist/types/project/constitution.d.ts.map +1 -0
- package/dist/types/project/constitution.js +3 -0
- package/dist/types/project/constitution.js.map +1 -0
- package/dist/types/project/core.d.ts +18 -163
- package/dist/types/project/core.d.ts.map +1 -1
- package/dist/types/project/core.js +7 -1
- package/dist/types/project/core.js.map +1 -1
- package/dist/types/project/mfe-detection.d.ts +18 -0
- package/dist/types/project/mfe-detection.d.ts.map +1 -0
- package/dist/types/project/mfe-detection.js +3 -0
- package/dist/types/project/mfe-detection.js.map +1 -0
- package/dist/types/project/planu-config.d.ts +55 -0
- package/dist/types/project/planu-config.d.ts.map +1 -0
- package/dist/types/project/planu-config.js +2 -0
- package/dist/types/project/planu-config.js.map +1 -0
- package/dist/types/runtime-security.d.ts +110 -0
- package/dist/types/runtime-security.d.ts.map +1 -0
- package/dist/types/runtime-security.js +4 -0
- package/dist/types/runtime-security.js.map +1 -0
- package/dist/types/session.d.ts +82 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +3 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/token-optimization.d.ts +121 -0
- package/dist/types/token-optimization.d.ts.map +1 -0
- package/dist/types/token-optimization.js +3 -0
- package/dist/types/token-optimization.js.map +1 -0
- package/dist/types/workers.d.ts +132 -0
- package/dist/types/workers.d.ts.map +1 -0
- package/dist/types/workers.js +3 -0
- package/dist/types/workers.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ide-registry.json +204 -0
- package/src/config/injection-patterns.json +30 -0
- package/src/config/known-cves.json +41 -0
- package/src/config/license-plans.json +26 -2
- package/src/config/llm-providers.json +198 -0
- package/src/config/model-equivalences.json +41 -0
- package/src/config/model-language-affinity.json +16 -0
- package/src/config/orchestration-templates.json +76 -0
- package/src/config/orchestration-topologies.json +36 -0
- package/src/config/plugin-marketplace.json +59 -0
- package/src/config/security-runtime-config.json +26 -0
- package/src/config/workers-registry.json +100 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { handleGenerateIdeConfig, loadIdeRegistry, mergeJsonConfig } from './core.js';
|
|
2
|
+
export { generateIdeConfig } from './generators.js';
|
|
3
|
+
export { detectAllIdes, getDetectedIdes, detectIde, isBinaryInPath } from './detector.js';
|
|
4
|
+
export { validateConfig } from './validator.js';
|
|
5
|
+
export { detectPlatform, getNpxCommand, expandHome, resolveConfigPath, buildServerEntry, } from './path-resolver.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/ide-config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// engine/ide-config/index.ts — Barrel export for IDE config module (SPEC-080)
|
|
2
|
+
export { handleGenerateIdeConfig, loadIdeRegistry, mergeJsonConfig } from './core.js';
|
|
3
|
+
export { generateIdeConfig } from './generators.js';
|
|
4
|
+
export { detectAllIdes, getDetectedIdes, detectIde, isBinaryInPath } from './detector.js';
|
|
5
|
+
export { validateConfig } from './validator.js';
|
|
6
|
+
export { detectPlatform, getNpxCommand, expandHome, resolveConfigPath, buildServerEntry, } from './path-resolver.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/ide-config/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IdeDefinition, IdeConfigScope, IdePlatform } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detects the current platform.
|
|
4
|
+
* Extracted to allow test mocking.
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectPlatform(): IdePlatform;
|
|
7
|
+
/**
|
|
8
|
+
* Returns the npx command appropriate for the current platform.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getNpxCommand(platform: IdePlatform): string;
|
|
11
|
+
/**
|
|
12
|
+
* Resolves `~` in a path to the actual home directory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function expandHome(filePath: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the full config file path for an IDE given scope, platform, and project path.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveConfigPath(ide: IdeDefinition, scope: IdeConfigScope, platform: IdePlatform, projectPath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Builds the base MCP server entry for planu.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildServerEntry(platform: IdePlatform): Record<string, unknown>;
|
|
23
|
+
//# sourceMappingURL=path-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../../src/engine/ide-config/path-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAO5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,MAAM,GAClB,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM/E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// engine/ide-config/path-resolver.ts — Resolves config file paths per OS (SPEC-080 AC-12)
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Detects the current platform.
|
|
6
|
+
* Extracted to allow test mocking.
|
|
7
|
+
*/
|
|
8
|
+
export function detectPlatform() {
|
|
9
|
+
const p = process.platform;
|
|
10
|
+
if (p === 'darwin' || p === 'win32' || p === 'linux') {
|
|
11
|
+
return p;
|
|
12
|
+
}
|
|
13
|
+
/* v8 ignore next 1 */
|
|
14
|
+
return 'linux'; // fallback for unknown Unix-like
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns the npx command appropriate for the current platform.
|
|
18
|
+
*/
|
|
19
|
+
export function getNpxCommand(platform) {
|
|
20
|
+
return platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves `~` in a path to the actual home directory.
|
|
24
|
+
*/
|
|
25
|
+
export function expandHome(filePath) {
|
|
26
|
+
if (filePath.startsWith('~/') || filePath === '~') {
|
|
27
|
+
return join(homedir(), filePath.slice(2));
|
|
28
|
+
}
|
|
29
|
+
return filePath;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolves the full config file path for an IDE given scope, platform, and project path.
|
|
33
|
+
*/
|
|
34
|
+
export function resolveConfigPath(ide, scope, platform, projectPath) {
|
|
35
|
+
if (scope === 'global') {
|
|
36
|
+
return expandHome(ide.globalConfigPath[platform]);
|
|
37
|
+
}
|
|
38
|
+
const configRelative = ide.configPath[platform];
|
|
39
|
+
// Some IDEs always use global paths (e.g. windsurf, claude-desktop)
|
|
40
|
+
if (configRelative.startsWith('~/')) {
|
|
41
|
+
return expandHome(configRelative);
|
|
42
|
+
}
|
|
43
|
+
return join(projectPath, configRelative);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds the base MCP server entry for planu.
|
|
47
|
+
*/
|
|
48
|
+
export function buildServerEntry(platform) {
|
|
49
|
+
return {
|
|
50
|
+
type: 'stdio',
|
|
51
|
+
command: getNpxCommand(platform),
|
|
52
|
+
args: ['-y', '@anthropic/planu-mcp-server'],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=path-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-resolver.js","sourceRoot":"","sources":["../../../src/engine/ide-config/path-resolver.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,sBAAsB;IACtB,OAAO,OAAO,CAAC,CAAC,iCAAiC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAqB;IACjD,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAkB,EAClB,KAAqB,EACrB,QAAqB,EACrB,WAAmB;IAEnB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEhD,oEAAoE;IACpE,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAqB;IACpD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,EAAE,6BAA6B,CAAC;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IdeDefinition, IdeValidationError, GeneratedIdeConfig } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validate a generated IDE configuration.
|
|
4
|
+
* Returns an array of validation errors (empty = valid).
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateConfig(config: GeneratedIdeConfig, ide: IdeDefinition): IdeValidationError[];
|
|
7
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/engine/ide-config/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AA4ClG;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,aAAa,GACjB,kBAAkB,EAAE,CActB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// engine/ide-config/validator.ts — Validate generated IDE configs (SPEC-080 AC-11)
|
|
2
|
+
import { isBinaryInPath } from './detector.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validate JSON syntax of the generated content.
|
|
5
|
+
*/
|
|
6
|
+
function validateJsonSyntax(config, ide) {
|
|
7
|
+
if (ide.configFormat === 'lua') {
|
|
8
|
+
return null; // Lua is not JSON
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
JSON.parse(config.content);
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
/* v8 ignore next 1 */
|
|
16
|
+
const message = err instanceof Error ? err.message : 'Unknown parse error';
|
|
17
|
+
return {
|
|
18
|
+
field: 'content',
|
|
19
|
+
message: `Invalid JSON syntax: ${message}`,
|
|
20
|
+
suggestion: 'Check for trailing commas or missing quotes in the generated config.',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate that npx/npx.cmd is available.
|
|
26
|
+
*/
|
|
27
|
+
function validateCommandAvailable() {
|
|
28
|
+
/* v8 ignore next 1 */
|
|
29
|
+
const cmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
30
|
+
if (!isBinaryInPath(cmd)) {
|
|
31
|
+
return {
|
|
32
|
+
field: 'command',
|
|
33
|
+
message: `"${cmd}" not found in PATH`,
|
|
34
|
+
suggestion: 'Install Node.js (https://nodejs.org) to get npx.',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate a generated IDE configuration.
|
|
41
|
+
* Returns an array of validation errors (empty = valid).
|
|
42
|
+
*/
|
|
43
|
+
export function validateConfig(config, ide) {
|
|
44
|
+
const errors = [];
|
|
45
|
+
const jsonError = validateJsonSyntax(config, ide);
|
|
46
|
+
if (jsonError) {
|
|
47
|
+
errors.push(jsonError);
|
|
48
|
+
}
|
|
49
|
+
const cmdError = validateCommandAvailable();
|
|
50
|
+
if (cmdError) {
|
|
51
|
+
errors.push(cmdError);
|
|
52
|
+
}
|
|
53
|
+
return errors;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/engine/ide-config/validator.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAGnF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,SAAS,kBAAkB,CACzB,MAA0B,EAC1B,GAAkB;IAElB,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACjC,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,sBAAsB;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC3E,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,wBAAwB,OAAO,EAAE;YAC1C,UAAU,EAAE,sEAAsE;SACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,sBAAsB;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI,GAAG,qBAAqB;YACrC,UAAU,EAAE,kDAAkD;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA0B,EAC1B,GAAkB;IAElB,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemon-squeezy.d.ts","sourceRoot":"","sources":["../../../src/engine/license-validator/lemon-squeezy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lemon-squeezy.d.ts","sourceRoot":"","sources":["../../../src/engine/license-validator/lemon-squeezy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAwC9B,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAKvC;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,4BAA4B,CAAC,CAKvC;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,8BAA8B,CAAC,CAKzC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
// engine/license-validator/lemon-squeezy.ts — HTTP client for
|
|
1
|
+
// engine/license-validator/lemon-squeezy.ts — HTTP client for license API.
|
|
2
|
+
// Supports Planu self-hosted (Supabase Edge Function) and Lemon Squeezy as fallback.
|
|
2
3
|
// Uses native fetch() (Node 18+). No external dependencies.
|
|
3
|
-
const
|
|
4
|
+
const DEFAULT_LICENSE_API = 'https://canusqigtzldstnjddio.supabase.co/functions/v1/license-api';
|
|
4
5
|
const TIMEOUT_MS = 10_000;
|
|
6
|
+
function getBaseUrl() {
|
|
7
|
+
return process.env.SDD_LICENSE_API_URL ?? DEFAULT_LICENSE_API;
|
|
8
|
+
}
|
|
5
9
|
// ---------------------------------------------------------------------------
|
|
6
10
|
// Internal helpers
|
|
7
11
|
// ---------------------------------------------------------------------------
|
|
@@ -11,15 +15,15 @@ async function post(endpoint, body) {
|
|
|
11
15
|
controller.abort();
|
|
12
16
|
}, TIMEOUT_MS);
|
|
13
17
|
try {
|
|
14
|
-
const res = await fetch(`${
|
|
18
|
+
const res = await fetch(`${getBaseUrl()}/${endpoint}`, {
|
|
15
19
|
method: 'POST',
|
|
16
|
-
headers: { 'Content-Type': 'application/
|
|
17
|
-
body:
|
|
20
|
+
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
|
|
21
|
+
body: JSON.stringify(body),
|
|
18
22
|
signal: controller.signal,
|
|
19
23
|
});
|
|
20
24
|
if (!res.ok) {
|
|
21
25
|
const text = await res.text();
|
|
22
|
-
throw new Error(`
|
|
26
|
+
throw new Error(`License API ${endpoint} failed (${String(res.status)}): ${text}`);
|
|
23
27
|
}
|
|
24
28
|
return (await res.json());
|
|
25
29
|
}
|
|
@@ -32,20 +36,20 @@ async function post(endpoint, body) {
|
|
|
32
36
|
// ---------------------------------------------------------------------------
|
|
33
37
|
export async function activateLicense(licenseKey, instanceName) {
|
|
34
38
|
return post('activate', {
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
licenseKey,
|
|
40
|
+
instanceName,
|
|
37
41
|
});
|
|
38
42
|
}
|
|
39
43
|
export async function validateLicense(licenseKey, instanceId) {
|
|
40
44
|
return post('validate', {
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
licenseKey,
|
|
46
|
+
instanceId,
|
|
43
47
|
});
|
|
44
48
|
}
|
|
45
49
|
export async function deactivateLicense(licenseKey, instanceId) {
|
|
46
50
|
return post('deactivate', {
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
licenseKey,
|
|
52
|
+
instanceId,
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
55
|
//# sourceMappingURL=lemon-squeezy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemon-squeezy.js","sourceRoot":"","sources":["../../../src/engine/license-validator/lemon-squeezy.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"lemon-squeezy.js","sourceRoot":"","sources":["../../../src/engine/license-validator/lemon-squeezy.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qFAAqF;AACrF,4DAA4D;AAQ5D,MAAM,mBAAmB,GAAG,mEAAmE,CAAC;AAChG,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,mBAAmB,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,KAAK,UAAU,IAAI,CAAI,QAAgB,EAAE,IAA4B;IACnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,EAAE,IAAI,QAAQ,EAAE,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;YAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,YAAY,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,YAAoB;IAEpB,OAAO,IAAI,CAA+B,UAAU,EAAE;QACpD,UAAU;QACV,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,UAAkB;IAElB,OAAO,IAAI,CAA+B,UAAU,EAAE;QACpD,UAAU;QACV,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,UAAkB;IAElB,OAAO,IAAI,CAAiC,YAAY,EAAE;QACxD,UAAU;QACV,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LLMProviderDefinition, QualityTier, ProviderRecommendation, TaskComplexity } from '../../types/index.js';
|
|
2
|
+
export type { TaskComplexity } from '../../types/index.js';
|
|
3
|
+
/** Map task complexity to quality tier. */
|
|
4
|
+
export declare function complexityToTier(complexity: TaskComplexity): QualityTier;
|
|
5
|
+
/**
|
|
6
|
+
* Find the cheapest provider+model that meets the quality tier requirement.
|
|
7
|
+
* Returns ranked recommendations sorted by cost (cheapest first).
|
|
8
|
+
*/
|
|
9
|
+
export declare function optimizeCost(definitions: LLMProviderDefinition[], tier: QualityTier, language?: string): ProviderRecommendation[];
|
|
10
|
+
/**
|
|
11
|
+
* Calculate potential savings compared to the most expensive provider for a tier.
|
|
12
|
+
*/
|
|
13
|
+
export declare function calculateSavings(definitions: LLMProviderDefinition[], tier: QualityTier, tokensEstimated: number): {
|
|
14
|
+
cheapestProvider: string;
|
|
15
|
+
expensiveProvider: string;
|
|
16
|
+
savingsUsd: number;
|
|
17
|
+
savingsPercent: number;
|
|
18
|
+
} | null;
|
|
19
|
+
/**
|
|
20
|
+
* Get model equivalences for a given tier from config.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getEquivalences(tier: QualityTier): {
|
|
23
|
+
providerId: string;
|
|
24
|
+
modelId: string;
|
|
25
|
+
}[];
|
|
26
|
+
//# sourceMappingURL=cost-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-optimizer.d.ts","sourceRoot":"","sources":["../../../src/engine/llm-providers/cost-optimizer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,sBAAsB,EAEtB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAM9B,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,WAAW,CASxE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,qBAAqB,EAAE,EACpC,IAAI,EAAE,WAAW,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,sBAAsB,EAAE,CA6B1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,qBAAqB,EAAE,EACpC,IAAI,EAAE,WAAW,EACjB,eAAe,EAAE,MAAM,GACtB;IACD,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAuBP;AAmCD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAQ5F"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// engine/llm-providers/cost-optimizer.ts — Cost optimization engine.
|
|
2
|
+
// SPEC-083 AC-05, AC-14
|
|
3
|
+
import { checkProviderHealth } from './health-checker.js';
|
|
4
|
+
import equivalencesData from '../../config/model-equivalences.json' with { type: 'json' };
|
|
5
|
+
import affinityData from '../../config/model-language-affinity.json' with { type: 'json' };
|
|
6
|
+
/** Map task complexity to quality tier. */
|
|
7
|
+
export function complexityToTier(complexity) {
|
|
8
|
+
switch (complexity) {
|
|
9
|
+
case 'complex':
|
|
10
|
+
return 'high';
|
|
11
|
+
case 'standard':
|
|
12
|
+
return 'medium';
|
|
13
|
+
case 'simple':
|
|
14
|
+
return 'low';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Find the cheapest provider+model that meets the quality tier requirement.
|
|
19
|
+
* Returns ranked recommendations sorted by cost (cheapest first).
|
|
20
|
+
*/
|
|
21
|
+
export function optimizeCost(definitions, tier, language) {
|
|
22
|
+
const candidates = [];
|
|
23
|
+
for (const def of definitions) {
|
|
24
|
+
const health = checkProviderHealth(def);
|
|
25
|
+
if (health.status === 'unavailable') {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const matchingModels = def.models.filter((m) => m.tier === tier);
|
|
29
|
+
for (const model of matchingModels) {
|
|
30
|
+
const totalCostPer1M = model.pricingPerMToken.input + model.pricingPerMToken.output;
|
|
31
|
+
const affinityBonus = getLanguageAffinityBonus(def.id, language);
|
|
32
|
+
candidates.push({
|
|
33
|
+
providerId: def.id,
|
|
34
|
+
modelId: model.id,
|
|
35
|
+
tier: model.tier,
|
|
36
|
+
costEstimate: {
|
|
37
|
+
tokensEstimated: 1_000_000,
|
|
38
|
+
usdEstimated: totalCostPer1M,
|
|
39
|
+
},
|
|
40
|
+
reasoning: buildReasoning(def, model.id, totalCostPer1M, language),
|
|
41
|
+
score: 1.0 / (totalCostPer1M + 0.001) + affinityBonus,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return candidates.sort((a, b) => a.costEstimate.usdEstimated - b.costEstimate.usdEstimated);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Calculate potential savings compared to the most expensive provider for a tier.
|
|
49
|
+
*/
|
|
50
|
+
export function calculateSavings(definitions, tier, tokensEstimated) {
|
|
51
|
+
const ranked = optimizeCost(definitions, tier);
|
|
52
|
+
if (ranked.length < 2) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const cheapest = ranked[0];
|
|
56
|
+
const expensive = ranked[ranked.length - 1];
|
|
57
|
+
if (!cheapest || !expensive) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const cheapCost = (cheapest.costEstimate.usdEstimated / 1_000_000) * tokensEstimated;
|
|
61
|
+
const expCost = (expensive.costEstimate.usdEstimated / 1_000_000) * tokensEstimated;
|
|
62
|
+
const savings = expCost - cheapCost;
|
|
63
|
+
return {
|
|
64
|
+
cheapestProvider: `${cheapest.providerId}/${cheapest.modelId}`,
|
|
65
|
+
expensiveProvider: `${expensive.providerId}/${expensive.modelId}`,
|
|
66
|
+
savingsUsd: Math.round(savings * 10000) / 10000,
|
|
67
|
+
savingsPercent: expCost > 0 ? Math.round((savings / expCost) * 100) : 0,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function getLanguageAffinityBonus(providerId, language) {
|
|
71
|
+
if (!language) {
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
const entry = affinityData.affinities.find((a) => a.language === language.toLowerCase());
|
|
75
|
+
if (!entry) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
const rank = entry.preferredProviders.indexOf(providerId);
|
|
79
|
+
if (rank === -1) {
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
return entry.weight * (1 - rank * 0.3);
|
|
83
|
+
}
|
|
84
|
+
function buildReasoning(def, modelId, costPer1M, language) {
|
|
85
|
+
const reasons = [`${def.name} ${modelId}: $${costPer1M.toFixed(2)}/1M tokens (in+out)`];
|
|
86
|
+
if (language) {
|
|
87
|
+
const bonus = getLanguageAffinityBonus(def.id, language);
|
|
88
|
+
if (bonus > 0) {
|
|
89
|
+
reasons.push(`Language affinity bonus for ${language}: +${bonus.toFixed(2)}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return reasons;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get model equivalences for a given tier from config.
|
|
96
|
+
*/
|
|
97
|
+
export function getEquivalences(tier) {
|
|
98
|
+
const equiv = equivalencesData.equivalences.find((e) => e.tier === tier);
|
|
99
|
+
return equiv?.models ?? [];
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=cost-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-optimizer.js","sourceRoot":"","sources":["../../../src/engine/llm-providers/cost-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LLMProviderId, ProviderCostRecord, ProviderCostSummary } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Record a cost event for a provider recommendation.
|
|
4
|
+
*/
|
|
5
|
+
export declare function recordCost(providerId: LLMProviderId, modelId: string, tokensEstimated: number, costEstimated: number): ProviderCostRecord;
|
|
6
|
+
/**
|
|
7
|
+
* Get cost summary for a specific provider with daily/weekly/monthly aggregation.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getCostSummary(providerId: LLMProviderId): ProviderCostSummary;
|
|
10
|
+
/**
|
|
11
|
+
* Get cost summaries for all providers that have records.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAllCostSummaries(): ProviderCostSummary[];
|
|
14
|
+
/**
|
|
15
|
+
* Get all raw cost records (for persistence/export).
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCostRecords(): ProviderCostRecord[];
|
|
18
|
+
/**
|
|
19
|
+
* Load cost records from persisted data.
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadCostRecords(records: ProviderCostRecord[]): void;
|
|
22
|
+
/**
|
|
23
|
+
* Clear all cost records (for testing).
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearCostRecords(): void;
|
|
26
|
+
//# sourceMappingURL=cost-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../../src/engine/llm-providers/cost-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAKnG;;GAEG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,aAAa,EACzB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,GACpB,kBAAkB,CAUpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,aAAa,GAAG,mBAAmB,CA8B7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,EAAE,CAG3D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,EAAE,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// engine/llm-providers/cost-tracker.ts — Cost tracking per provider.
|
|
2
|
+
// SPEC-083 AC-13
|
|
3
|
+
/** In-memory cost records (would be persisted to llm-costs.json in production). */
|
|
4
|
+
const costRecords = [];
|
|
5
|
+
/**
|
|
6
|
+
* Record a cost event for a provider recommendation.
|
|
7
|
+
*/
|
|
8
|
+
export function recordCost(providerId, modelId, tokensEstimated, costEstimated) {
|
|
9
|
+
const record = {
|
|
10
|
+
providerId,
|
|
11
|
+
modelId,
|
|
12
|
+
tokensEstimated,
|
|
13
|
+
costEstimated,
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
};
|
|
16
|
+
costRecords.push(record);
|
|
17
|
+
return record;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get cost summary for a specific provider with daily/weekly/monthly aggregation.
|
|
21
|
+
*/
|
|
22
|
+
export function getCostSummary(providerId) {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
const dayMs = 24 * 60 * 60 * 1000;
|
|
25
|
+
const providerRecords = costRecords.filter((r) => r.providerId === providerId);
|
|
26
|
+
let daily = 0;
|
|
27
|
+
let weekly = 0;
|
|
28
|
+
let monthly = 0;
|
|
29
|
+
for (const record of providerRecords) {
|
|
30
|
+
const age = now - new Date(record.timestamp).getTime();
|
|
31
|
+
if (age <= dayMs) {
|
|
32
|
+
daily += record.costEstimated;
|
|
33
|
+
}
|
|
34
|
+
if (age <= 7 * dayMs) {
|
|
35
|
+
weekly += record.costEstimated;
|
|
36
|
+
}
|
|
37
|
+
if (age <= 30 * dayMs) {
|
|
38
|
+
monthly += record.costEstimated;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
providerId,
|
|
43
|
+
daily: Math.round(daily * 10000) / 10000,
|
|
44
|
+
weekly: Math.round(weekly * 10000) / 10000,
|
|
45
|
+
monthly: Math.round(monthly * 10000) / 10000,
|
|
46
|
+
requestCount: providerRecords.length,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get cost summaries for all providers that have records.
|
|
51
|
+
*/
|
|
52
|
+
export function getAllCostSummaries() {
|
|
53
|
+
const providerIds = [...new Set(costRecords.map((r) => r.providerId))];
|
|
54
|
+
return providerIds.map((id) => getCostSummary(id));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get all raw cost records (for persistence/export).
|
|
58
|
+
*/
|
|
59
|
+
export function getCostRecords() {
|
|
60
|
+
return [...costRecords];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load cost records from persisted data.
|
|
64
|
+
*/
|
|
65
|
+
export function loadCostRecords(records) {
|
|
66
|
+
costRecords.length = 0;
|
|
67
|
+
costRecords.push(...records);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clear all cost records (for testing).
|
|
71
|
+
*/
|
|
72
|
+
export function clearCostRecords() {
|
|
73
|
+
costRecords.length = 0;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=cost-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../../src/engine/llm-providers/cost-tracker.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iBAAiB;AAIjB,mFAAmF;AACnF,MAAM,WAAW,GAAyB,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,UAAyB,EACzB,OAAe,EACf,eAAuB,EACvB,aAAqB;IAErB,MAAM,MAAM,GAAuB;QACjC,UAAU;QACV,OAAO;QACP,eAAe;QACf,aAAa;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAyB;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAElC,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IAE/E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACjB,KAAK,IAAI,MAAM,CAAC,aAAa,CAAC;QAChC,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;YACtB,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK;QACxC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK;QAC1C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK;QAC5C,YAAY,EAAE,eAAe,CAAC,MAAM;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC3D,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LLMProviderDefinition, LLMProviderId, FailoverEvent, FailoverReason, ProviderRecommendation, QualityTier } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Walk the failover chain and return the first healthy provider that
|
|
4
|
+
* has a model matching the requested quality tier.
|
|
5
|
+
*
|
|
6
|
+
* Returns a recommendation or null if no provider is available after
|
|
7
|
+
* MAX_FAILOVER_ATTEMPTS attempts.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveFailover(chain: LLMProviderId[], definitions: LLMProviderDefinition[], tier: QualityTier, reason: FailoverReason): ProviderRecommendation | null;
|
|
10
|
+
/**
|
|
11
|
+
* Get all failover events logged in the current session.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getFailoverLog(): FailoverEvent[];
|
|
14
|
+
/**
|
|
15
|
+
* Clear failover log (for testing).
|
|
16
|
+
*/
|
|
17
|
+
export declare function clearFailoverLog(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Build the default failover chain from provider definitions.
|
|
20
|
+
* Orders by: number of models (descending), then alphabetically.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildDefaultChain(definitions: LLMProviderDefinition[]): LLMProviderId[];
|
|
23
|
+
//# sourceMappingURL=failover-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failover-chain.d.ts","sourceRoot":"","sources":["../../../src/engine/llm-providers/failover-chain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAS9B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,EAAE,qBAAqB,EAAE,EACpC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,cAAc,GACrB,sBAAsB,GAAG,IAAI,CA+C/B;AAcD;;GAEG;AACH,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,aAAa,EAAE,CAIvF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// engine/llm-providers/failover-chain.ts — Failover chain logic.
|
|
2
|
+
// SPEC-083 AC-03
|
|
3
|
+
import { checkProviderHealth } from './health-checker.js';
|
|
4
|
+
/** Maximum number of failover attempts before giving up. */
|
|
5
|
+
const MAX_FAILOVER_ATTEMPTS = 3;
|
|
6
|
+
/** In-memory log of failover events for the current session. */
|
|
7
|
+
const failoverLog = [];
|
|
8
|
+
/**
|
|
9
|
+
* Walk the failover chain and return the first healthy provider that
|
|
10
|
+
* has a model matching the requested quality tier.
|
|
11
|
+
*
|
|
12
|
+
* Returns a recommendation or null if no provider is available after
|
|
13
|
+
* MAX_FAILOVER_ATTEMPTS attempts.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveFailover(chain, definitions, tier, reason) {
|
|
16
|
+
const defMap = new Map(definitions.map((d) => [d.id, d]));
|
|
17
|
+
let previousProvider;
|
|
18
|
+
let attempts = 0;
|
|
19
|
+
for (const providerId of chain) {
|
|
20
|
+
if (attempts >= MAX_FAILOVER_ATTEMPTS) {
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const def = defMap.get(providerId);
|
|
24
|
+
if (!def) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const health = checkProviderHealth(def, 0); // Force fresh check
|
|
28
|
+
if (health.status === 'unavailable') {
|
|
29
|
+
previousProvider = providerId;
|
|
30
|
+
attempts++;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const model = def.models.find((m) => m.tier === tier) ?? def.models[0];
|
|
34
|
+
if (!model) {
|
|
35
|
+
previousProvider = providerId;
|
|
36
|
+
attempts++;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
// Log the failover event if we had to skip a previous provider
|
|
40
|
+
if (previousProvider) {
|
|
41
|
+
logFailoverEvent(previousProvider, providerId, reason);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
providerId,
|
|
45
|
+
modelId: model.id,
|
|
46
|
+
tier: model.tier,
|
|
47
|
+
costEstimate: { tokensEstimated: 0, usdEstimated: 0 },
|
|
48
|
+
reasoning: previousProvider
|
|
49
|
+
? [`Failover from ${previousProvider}: ${reason}`]
|
|
50
|
+
: ['Primary provider selected'],
|
|
51
|
+
score: health.status === 'healthy' ? 1.0 : 0.5,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Log a failover event.
|
|
58
|
+
*/
|
|
59
|
+
function logFailoverEvent(from, to, reason) {
|
|
60
|
+
failoverLog.push({
|
|
61
|
+
fromProvider: from,
|
|
62
|
+
toProvider: to,
|
|
63
|
+
reason,
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get all failover events logged in the current session.
|
|
69
|
+
*/
|
|
70
|
+
export function getFailoverLog() {
|
|
71
|
+
return [...failoverLog];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Clear failover log (for testing).
|
|
75
|
+
*/
|
|
76
|
+
export function clearFailoverLog() {
|
|
77
|
+
failoverLog.length = 0;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build the default failover chain from provider definitions.
|
|
81
|
+
* Orders by: number of models (descending), then alphabetically.
|
|
82
|
+
*/
|
|
83
|
+
export function buildDefaultChain(definitions) {
|
|
84
|
+
return [...definitions]
|
|
85
|
+
.sort((a, b) => b.models.length - a.models.length || a.id.localeCompare(b.id))
|
|
86
|
+
.map((d) => d.id);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=failover-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failover-chain.js","sourceRoot":"","sources":["../../../src/engine/llm-providers/failover-chain.ts"],"names":[],"mappings":"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"}
|