@slkiser/opencode-quota 5.0.3 → 6.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -44
- package/dist/agent-tools.d.ts +24 -0
- package/dist/agent-tools.d.ts.map +1 -0
- package/dist/agent-tools.js +578 -0
- package/dist/agent-tools.js.map +1 -0
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +1 -32
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/core/errors.d.ts +12 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +141 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/pace.d.ts +13 -0
- package/dist/core/pace.d.ts.map +1 -0
- package/dist/core/pace.js +52 -0
- package/dist/core/pace.js.map +1 -0
- package/dist/core/persist.d.ts +44 -0
- package/dist/core/persist.d.ts.map +1 -0
- package/dist/core/persist.js +210 -0
- package/dist/core/persist.js.map +1 -0
- package/dist/core/provider-source.d.ts +40 -0
- package/dist/core/provider-source.d.ts.map +1 -0
- package/dist/core/provider-source.js +210 -0
- package/dist/core/provider-source.js.map +1 -0
- package/dist/core/redact.d.ts +17 -0
- package/dist/core/redact.d.ts.map +1 -0
- package/dist/core/redact.js +217 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/rows.d.ts +20 -0
- package/dist/core/rows.d.ts.map +1 -0
- package/dist/core/rows.js +142 -0
- package/dist/core/rows.js.map +1 -0
- package/dist/core/selection.d.ts +15 -0
- package/dist/core/selection.d.ts.map +1 -0
- package/dist/core/selection.js +43 -0
- package/dist/core/selection.js.map +1 -0
- package/dist/core/snapshot-publisher.d.ts +15 -0
- package/dist/core/snapshot-publisher.d.ts.map +1 -0
- package/dist/core/snapshot-publisher.js +57 -0
- package/dist/core/snapshot-publisher.js.map +1 -0
- package/dist/core/store.d.ts +93 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +563 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/types.d.ts +186 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/usage-ranges.d.ts +46 -0
- package/dist/core/usage-ranges.d.ts.map +1 -0
- package/dist/core/usage-ranges.js +72 -0
- package/dist/core/usage-ranges.js.map +1 -0
- package/dist/core/usage.d.ts +100 -0
- package/dist/core/usage.d.ts.map +1 -0
- package/dist/core/usage.js +373 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/validate.d.ts +8 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +167 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/core/windows.d.ts +24 -0
- package/dist/core/windows.d.ts.map +1 -0
- package/dist/core/windows.js +43 -0
- package/dist/core/windows.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/accounting-format.d.ts +2 -52
- package/dist/lib/accounting-format.d.ts.map +1 -1
- package/dist/lib/accounting-format.js +6 -255
- package/dist/lib/accounting-format.js.map +1 -1
- package/dist/lib/alibaba-auth.d.ts +14 -21
- package/dist/lib/alibaba-auth.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.js +36 -149
- package/dist/lib/alibaba-auth.js.map +1 -1
- package/dist/lib/alibaba-coding-plan-local-quota.d.ts +1 -6
- package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -1
- package/dist/lib/alibaba-coding-plan-local-quota.js +1 -1
- package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -1
- package/dist/lib/alibaba-token-plan.d.ts +18 -27
- package/dist/lib/alibaba-token-plan.d.ts.map +1 -1
- package/dist/lib/alibaba-token-plan.js +121 -285
- package/dist/lib/alibaba-token-plan.js.map +1 -1
- package/dist/lib/anthropic-auth.d.ts +3 -5
- package/dist/lib/anthropic-auth.d.ts.map +1 -1
- package/dist/lib/anthropic-auth.js +6 -9
- package/dist/lib/anthropic-auth.js.map +1 -1
- package/dist/lib/anthropic.d.ts +12 -37
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +348 -698
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/api-key-resolver.d.ts +165 -192
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +208 -234
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/atomic-json.d.ts +4 -1
- package/dist/lib/atomic-json.d.ts.map +1 -1
- package/dist/lib/atomic-json.js +2 -3
- package/dist/lib/atomic-json.js.map +1 -1
- package/dist/lib/calendar-date.d.ts +15 -0
- package/dist/lib/calendar-date.d.ts.map +1 -0
- package/dist/lib/calendar-date.js +21 -0
- package/dist/lib/calendar-date.js.map +1 -0
- package/dist/lib/chutes.d.ts +0 -1
- package/dist/lib/chutes.d.ts.map +1 -1
- package/dist/lib/chutes.js +2 -4
- package/dist/lib/chutes.js.map +1 -1
- package/dist/lib/cli-reports.d.ts +15 -11
- package/dist/lib/cli-reports.d.ts.map +1 -1
- package/dist/lib/cli-reports.js +34 -107
- package/dist/lib/cli-reports.js.map +1 -1
- package/dist/lib/cli-show.d.ts +9 -22
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +104 -75
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/config-file-utils.d.ts +3 -15
- package/dist/lib/config-file-utils.d.ts.map +1 -1
- package/dist/lib/config-file-utils.js +4 -63
- package/dist/lib/config-file-utils.js.map +1 -1
- package/dist/lib/config-write-target.d.ts +4 -7
- package/dist/lib/config-write-target.d.ts.map +1 -1
- package/dist/lib/config-write-target.js +4 -18
- package/dist/lib/config-write-target.js.map +1 -1
- package/dist/lib/copilot.d.ts +29 -20
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +392 -649
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/cursor-detection.d.ts +3 -3
- package/dist/lib/cursor-detection.d.ts.map +1 -1
- package/dist/lib/cursor-detection.js +44 -88
- package/dist/lib/cursor-detection.js.map +1 -1
- package/dist/lib/cursor-pricing.d.ts +71 -8
- package/dist/lib/cursor-pricing.d.ts.map +1 -1
- package/dist/lib/cursor-pricing.js +33 -125
- package/dist/lib/cursor-pricing.js.map +1 -1
- package/dist/lib/cursor-usage.d.ts +6 -4
- package/dist/lib/cursor-usage.d.ts.map +1 -1
- package/dist/lib/cursor-usage.js +27 -40
- package/dist/lib/cursor-usage.js.map +1 -1
- package/dist/lib/deepseek.d.ts +9 -17
- package/dist/lib/deepseek.d.ts.map +1 -1
- package/dist/lib/deepseek.js +24 -54
- package/dist/lib/deepseek.js.map +1 -1
- package/dist/lib/display-sanitize.d.ts +0 -8
- package/dist/lib/display-sanitize.d.ts.map +1 -1
- package/dist/lib/display-sanitize.js +0 -139
- package/dist/lib/display-sanitize.js.map +1 -1
- package/dist/lib/entries.d.ts +13 -239
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js +1 -46
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/file-lock.d.ts +23 -0
- package/dist/lib/file-lock.d.ts.map +1 -0
- package/dist/lib/file-lock.js +122 -0
- package/dist/lib/file-lock.js.map +1 -0
- package/dist/lib/format-utils.d.ts +2 -82
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +2 -191
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/glm-coding-plan.d.ts +6 -5
- package/dist/lib/glm-coding-plan.d.ts.map +1 -1
- package/dist/lib/glm-coding-plan.js +19 -1
- package/dist/lib/glm-coding-plan.js.map +1 -1
- package/dist/lib/google-agy.d.ts +8 -40
- package/dist/lib/google-agy.d.ts.map +1 -1
- package/dist/lib/google-agy.js +88 -519
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/google-companion-credentials.d.ts +9 -40
- package/dist/lib/google-companion-credentials.d.ts.map +1 -1
- package/dist/lib/google-companion-credentials.js +167 -224
- package/dist/lib/google-companion-credentials.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts +5 -38
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +71 -442
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google-oauth-quota.d.ts +76 -0
- package/dist/lib/google-oauth-quota.d.ts.map +1 -0
- package/dist/lib/google-oauth-quota.js +297 -0
- package/dist/lib/google-oauth-quota.js.map +1 -0
- package/dist/lib/google-token-cache.d.ts +3 -5
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +2 -14
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/home-dir-display.d.ts.map +1 -1
- package/dist/lib/home-dir-display.js +21 -39
- package/dist/lib/home-dir-display.js.map +1 -1
- package/dist/lib/http.d.ts +4 -1
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +2 -1
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/json-guards.d.ts +11 -0
- package/dist/lib/json-guards.d.ts.map +1 -0
- package/dist/lib/json-guards.js +25 -0
- package/dist/lib/json-guards.js.map +1 -0
- package/dist/lib/kilo.d.ts +0 -2
- package/dist/lib/kilo.d.ts.map +1 -1
- package/dist/lib/kilo.js +33 -116
- package/dist/lib/kilo.js.map +1 -1
- package/dist/lib/kimi-endpoints.d.ts +2 -2
- package/dist/lib/kimi-endpoints.d.ts.map +1 -1
- package/dist/lib/kimi-endpoints.js +1 -1
- package/dist/lib/kimi-endpoints.js.map +1 -1
- package/dist/lib/kimi.d.ts.map +1 -1
- package/dist/lib/kimi.js +40 -86
- package/dist/lib/kimi.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts +4 -17
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +7 -44
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/maintainer-home-notice.d.ts +19 -0
- package/dist/lib/maintainer-home-notice.d.ts.map +1 -0
- package/dist/lib/maintainer-home-notice.js +92 -0
- package/dist/lib/maintainer-home-notice.js.map +1 -0
- package/dist/lib/mimo-config.d.ts +6 -9
- package/dist/lib/mimo-config.d.ts.map +1 -1
- package/dist/lib/mimo-config.js +43 -74
- package/dist/lib/mimo-config.js.map +1 -1
- package/dist/lib/mimo.d.ts +2 -5
- package/dist/lib/mimo.d.ts.map +1 -1
- package/dist/lib/mimo.js +57 -109
- package/dist/lib/mimo.js.map +1 -1
- package/dist/lib/minimax-endpoints.d.ts +2 -2
- package/dist/lib/minimax-endpoints.d.ts.map +1 -1
- package/dist/lib/minimax-endpoints.js +1 -1
- package/dist/lib/minimax-endpoints.js.map +1 -1
- package/dist/lib/modelsdev-pricing.d.ts +22 -16
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +279 -560
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/nanogpt.d.ts +6 -6
- package/dist/lib/nanogpt.d.ts.map +1 -1
- package/dist/lib/nanogpt.js +19 -72
- package/dist/lib/nanogpt.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +3 -6
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +26 -37
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/openai.d.ts +18 -29
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +108 -182
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-auth-sqlite.d.ts.map +1 -1
- package/dist/lib/opencode-auth-sqlite.js +22 -23
- package/dist/lib/opencode-auth-sqlite.js.map +1 -1
- package/dist/lib/opencode-auth.d.ts +17 -11
- package/dist/lib/opencode-auth.d.ts.map +1 -1
- package/dist/lib/opencode-auth.js +39 -46
- package/dist/lib/opencode-auth.js.map +1 -1
- package/dist/lib/opencode-config-editor.d.ts +3 -34
- package/dist/lib/opencode-config-editor.d.ts.map +1 -1
- package/dist/lib/opencode-config-editor.js +23 -142
- package/dist/lib/opencode-config-editor.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts +4 -3
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +7 -11
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-config-read.d.ts +2 -1
- package/dist/lib/opencode-config-read.d.ts.map +1 -1
- package/dist/lib/opencode-config-read.js +3 -2
- package/dist/lib/opencode-config-read.js.map +1 -1
- package/dist/lib/opencode-console-auth.d.ts +2 -3
- package/dist/lib/opencode-console-auth.d.ts.map +1 -1
- package/dist/lib/opencode-console-auth.js +2 -2
- package/dist/lib/opencode-console-auth.js.map +1 -1
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +51 -79
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/opencode-storage.d.ts +18 -3
- package/dist/lib/opencode-storage.d.ts.map +1 -1
- package/dist/lib/opencode-storage.js +134 -2
- package/dist/lib/opencode-storage.js.map +1 -1
- package/dist/lib/opencode-zen.d.ts +15 -12
- package/dist/lib/opencode-zen.d.ts.map +1 -1
- package/dist/lib/opencode-zen.js +139 -147
- package/dist/lib/opencode-zen.js.map +1 -1
- package/dist/lib/openrouter.d.ts.map +1 -1
- package/dist/lib/openrouter.js +1 -13
- package/dist/lib/openrouter.js.map +1 -1
- package/dist/lib/pricing-key.d.ts +48 -0
- package/dist/lib/pricing-key.d.ts.map +1 -0
- package/dist/lib/pricing-key.js +371 -0
- package/dist/lib/pricing-key.js.map +1 -0
- package/dist/lib/provider-metadata.d.ts +16 -20
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +69 -69
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/provider-model-matching.d.ts +2 -1
- package/dist/lib/provider-model-matching.d.ts.map +1 -1
- package/dist/lib/provider-registration.d.ts +1 -177
- package/dist/lib/provider-registration.d.ts.map +1 -1
- package/dist/lib/provider-registration.js +1 -163
- package/dist/lib/provider-registration.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +87 -53
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +259 -519
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-export-types.d.ts +29 -23
- package/dist/lib/quota-export-types.d.ts.map +1 -1
- package/dist/lib/quota-export.d.ts +16 -26
- package/dist/lib/quota-export.d.ts.map +1 -1
- package/dist/lib/quota-export.js +105 -147
- package/dist/lib/quota-export.js.map +1 -1
- package/dist/lib/quota-providers-local.d.ts +12 -8
- package/dist/lib/quota-providers-local.d.ts.map +1 -1
- package/dist/lib/quota-providers-local.js +150 -223
- package/dist/lib/quota-providers-local.js.map +1 -1
- package/dist/lib/quota-providers-remote.d.ts +3 -8
- package/dist/lib/quota-providers-remote.d.ts.map +1 -1
- package/dist/lib/quota-providers-remote.js +309 -449
- package/dist/lib/quota-providers-remote.js.map +1 -1
- package/dist/lib/quota-providers.d.ts +57 -15
- package/dist/lib/quota-providers.d.ts.map +1 -1
- package/dist/lib/quota-providers.js +157 -64
- package/dist/lib/quota-providers.js.map +1 -1
- package/dist/lib/quota-report-message.d.ts +23 -10
- package/dist/lib/quota-report-message.d.ts.map +1 -1
- package/dist/lib/quota-report-message.js +37 -13
- package/dist/lib/quota-report-message.js.map +1 -1
- package/dist/lib/quota-retry-wait.d.ts +14 -6
- package/dist/lib/quota-retry-wait.d.ts.map +1 -1
- package/dist/lib/quota-retry-wait.js +37 -39
- package/dist/lib/quota-retry-wait.js.map +1 -1
- package/dist/lib/quota-status.d.ts +50 -33
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +1113 -773
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/quota-telemetry.d.ts +7 -14
- package/dist/lib/quota-telemetry.d.ts.map +1 -1
- package/dist/lib/quota-telemetry.js +46 -97
- package/dist/lib/quota-telemetry.js.map +1 -1
- package/dist/lib/report-document.d.ts +5 -65
- package/dist/lib/report-document.d.ts.map +1 -1
- package/dist/lib/report-document.js +14 -167
- package/dist/lib/report-document.js.map +1 -1
- package/dist/lib/resolved-auth-identity.d.ts +1 -2
- package/dist/lib/resolved-auth-identity.d.ts.map +1 -1
- package/dist/lib/resolved-auth-identity.js +0 -4
- package/dist/lib/resolved-auth-identity.js.map +1 -1
- package/dist/lib/session-tokens.d.ts +19 -19
- package/dist/lib/session-tokens.d.ts.map +1 -1
- package/dist/lib/session-tokens.js +58 -44
- package/dist/lib/session-tokens.js.map +1 -1
- package/dist/lib/synthetic.d.ts +0 -1
- package/dist/lib/synthetic.d.ts.map +1 -1
- package/dist/lib/synthetic.js +43 -94
- package/dist/lib/synthetic.js.map +1 -1
- package/dist/lib/token-buckets.d.ts +0 -1
- package/dist/lib/token-buckets.d.ts.map +1 -1
- package/dist/lib/token-buckets.js +0 -3
- package/dist/lib/token-buckets.js.map +1 -1
- package/dist/lib/token-cost.d.ts +2 -1
- package/dist/lib/token-cost.d.ts.map +1 -1
- package/dist/lib/types.d.ts +25 -333
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +2 -70
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/xai.d.ts +6 -6
- package/dist/lib/xai.d.ts.map +1 -1
- package/dist/lib/xai.js +51 -90
- package/dist/lib/xai.js.map +1 -1
- package/dist/plugin.d.ts +6 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +315 -90
- package/dist/plugin.js.map +1 -1
- package/dist/providers/alibaba-coding-plan.d.ts +4 -0
- package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-coding-plan.js +47 -77
- package/dist/providers/alibaba-coding-plan.js.map +1 -1
- package/dist/providers/alibaba-token-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-token-plan.js +34 -46
- package/dist/providers/alibaba-token-plan.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -4
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +80 -162
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/cache-policies.d.ts +0 -2
- package/dist/providers/cache-policies.d.ts.map +1 -1
- package/dist/providers/cache-policies.js +38 -88
- package/dist/providers/cache-policies.js.map +1 -1
- package/dist/providers/chutes.d.ts +0 -3
- package/dist/providers/chutes.d.ts.map +1 -1
- package/dist/providers/chutes.js +16 -28
- package/dist/providers/chutes.js.map +1 -1
- package/dist/providers/contract.d.ts +128 -0
- package/dist/providers/contract.d.ts.map +1 -0
- package/dist/providers/contract.js +101 -0
- package/dist/providers/contract.js.map +1 -0
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +171 -175
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/cursor.d.ts.map +1 -1
- package/dist/providers/cursor.js +56 -109
- package/dist/providers/cursor.js.map +1 -1
- package/dist/providers/deepseek.d.ts +1 -6
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js +46 -81
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/glm-coding-plan.d.ts +8 -0
- package/dist/providers/glm-coding-plan.d.ts.map +1 -0
- package/dist/providers/glm-coding-plan.js +106 -0
- package/dist/providers/glm-coding-plan.js.map +1 -0
- package/dist/providers/google-agy.d.ts +0 -1
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +41 -192
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/dist/providers/google-gemini-cli.js +51 -151
- package/dist/providers/google-gemini-cli.js.map +1 -1
- package/dist/providers/google-oauth-provider.d.ts +39 -0
- package/dist/providers/google-oauth-provider.d.ts.map +1 -0
- package/dist/providers/google-oauth-provider.js +161 -0
- package/dist/providers/google-oauth-provider.js.map +1 -0
- package/dist/providers/kilo.d.ts +0 -3
- package/dist/providers/kilo.d.ts.map +1 -1
- package/dist/providers/kilo.js +69 -123
- package/dist/providers/kilo.js.map +1 -1
- package/dist/providers/kimi-code.d.ts +5 -0
- package/dist/providers/kimi-code.d.ts.map +1 -1
- package/dist/providers/kimi-code.js +91 -136
- package/dist/providers/kimi-code.js.map +1 -1
- package/dist/providers/mimo.d.ts.map +1 -1
- package/dist/providers/mimo.js +55 -94
- package/dist/providers/mimo.js.map +1 -1
- package/dist/providers/minimax-coding-plan.d.ts +2 -23
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +161 -277
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/nanogpt.d.ts +0 -3
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +61 -95
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/ollama-cloud.d.ts +0 -6
- package/dist/providers/ollama-cloud.d.ts.map +1 -1
- package/dist/providers/ollama-cloud.js +86 -112
- package/dist/providers/ollama-cloud.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +144 -166
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +157 -199
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts.map +1 -1
- package/dist/providers/opencode-zen.js +100 -150
- package/dist/providers/opencode-zen.js.map +1 -1
- package/dist/providers/openrouter.d.ts +0 -3
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +26 -13
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/quota-providers.d.ts +7 -3
- package/dist/providers/quota-providers.d.ts.map +1 -1
- package/dist/providers/quota-providers.js +111 -217
- package/dist/providers/quota-providers.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +1 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/result-helpers.d.ts +10 -37
- package/dist/providers/result-helpers.d.ts.map +1 -1
- package/dist/providers/result-helpers.js +23 -56
- package/dist/providers/result-helpers.js.map +1 -1
- package/dist/providers/synthetic.d.ts +0 -3
- package/dist/providers/synthetic.d.ts.map +1 -1
- package/dist/providers/synthetic.js +16 -58
- package/dist/providers/synthetic.js.map +1 -1
- package/dist/providers/xai.d.ts +2 -1
- package/dist/providers/xai.d.ts.map +1 -1
- package/dist/providers/xai.js +49 -71
- package/dist/providers/xai.js.map +1 -1
- package/dist/rpc.d.ts +110 -38
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +125 -37
- package/dist/rpc.js.map +1 -1
- package/dist/settings/convert.d.ts +60 -0
- package/dist/settings/convert.d.ts.map +1 -0
- package/dist/settings/convert.js +473 -0
- package/dist/settings/convert.js.map +1 -0
- package/dist/settings/file.d.ts +89 -0
- package/dist/settings/file.d.ts.map +1 -0
- package/dist/settings/file.js +452 -0
- package/dist/settings/file.js.map +1 -0
- package/dist/settings/index.d.ts +10 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +3 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/schema.d.ts +607 -0
- package/dist/settings/schema.d.ts.map +1 -0
- package/dist/settings/schema.js +479 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/tui/client.d.ts +86 -0
- package/dist/tui/client.d.ts.map +1 -0
- package/dist/tui/client.js +229 -0
- package/dist/tui/client.js.map +1 -0
- package/dist/tui/display.d.ts +127 -0
- package/dist/tui/display.d.ts.map +1 -0
- package/dist/tui/display.js +474 -0
- package/dist/tui/display.js.map +1 -0
- package/dist/tui/index.d.ts +21 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +305 -0
- package/dist/tui/server-settings.d.ts +43 -0
- package/dist/tui/server-settings.d.ts.map +1 -0
- package/dist/tui/server-settings.js +233 -0
- package/dist/tui/server-settings.js.map +1 -0
- package/dist/tui/sidebar.d.ts +41 -0
- package/dist/tui/sidebar.d.ts.map +1 -0
- package/dist/tui/sidebar.js +148 -0
- package/dist/tui/status-line.d.ts +14 -0
- package/dist/tui/status-line.d.ts.map +1 -0
- package/dist/tui/status-line.js +225 -0
- package/dist/tui/theme.d.ts +41 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +52 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/toast-colors.d.ts +37 -0
- package/dist/tui/toast-colors.d.ts.map +1 -0
- package/dist/tui/toast-colors.js +77 -0
- package/dist/tui/toasts.d.ts +59 -0
- package/dist/tui/toasts.d.ts.map +1 -0
- package/dist/tui/toasts.js +148 -0
- package/dist/tui/toasts.js.map +1 -0
- package/dist/tui/window/drag.d.ts +26 -0
- package/dist/tui/window/drag.d.ts.map +1 -0
- package/dist/tui/window/drag.js +80 -0
- package/dist/tui/window/drag.js.map +1 -0
- package/dist/tui/window/limits.d.ts +15 -0
- package/dist/tui/window/limits.d.ts.map +1 -0
- package/dist/tui/window/limits.js +227 -0
- package/dist/tui/window/limits.js.map +1 -0
- package/dist/tui/window/rail.d.ts +21 -0
- package/dist/tui/window/rail.d.ts.map +1 -0
- package/dist/tui/window/rail.js +81 -0
- package/dist/tui/window/settings.d.ts +164 -0
- package/dist/tui/window/settings.d.ts.map +1 -0
- package/dist/tui/window/settings.js +1679 -0
- package/dist/tui/window/shell.d.ts +108 -0
- package/dist/tui/window/shell.d.ts.map +1 -0
- package/dist/tui/window/shell.js +1003 -0
- package/dist/tui/window/usage.d.ts +75 -0
- package/dist/tui/window/usage.d.ts.map +1 -0
- package/dist/tui/window/usage.js +928 -0
- package/dist/tui/window/views.d.ts +61 -0
- package/dist/tui/window/views.d.ts.map +1 -0
- package/dist/tui/window/views.js +242 -0
- package/dist/tui.d.ts +1 -5
- package/dist/tui.js +1 -894
- package/dist/view/columns.d.ts +15 -0
- package/dist/view/columns.d.ts.map +1 -0
- package/dist/view/columns.js +48 -0
- package/dist/view/columns.js.map +1 -0
- package/dist/view/format.d.ts +82 -0
- package/dist/view/format.d.ts.map +1 -0
- package/dist/view/format.js +201 -0
- package/dist/view/format.js.map +1 -0
- package/dist/view/quick-look.d.ts +28 -0
- package/dist/view/quick-look.d.ts.map +1 -0
- package/dist/view/quick-look.js +150 -0
- package/dist/view/quick-look.js.map +1 -0
- package/dist/view/select.d.ts +67 -0
- package/dist/view/select.d.ts.map +1 -0
- package/dist/view/select.js +87 -0
- package/dist/view/select.js.map +1 -0
- package/dist/view/text.d.ts +153 -0
- package/dist/view/text.d.ts.map +1 -0
- package/dist/view/text.js +642 -0
- package/dist/view/text.js.map +1 -0
- package/dist/view/usage.d.ts +86 -0
- package/dist/view/usage.d.ts.map +1 -0
- package/dist/view/usage.js +724 -0
- package/dist/view/usage.js.map +1 -0
- package/package.json +4 -6
- package/dist/lib/chutes-config.d.ts +0 -15
- package/dist/lib/chutes-config.d.ts.map +0 -1
- package/dist/lib/chutes-config.js +0 -28
- package/dist/lib/chutes-config.js.map +0 -1
- package/dist/lib/cli-status.d.ts +0 -8
- package/dist/lib/cli-status.d.ts.map +0 -1
- package/dist/lib/cli-status.js +0 -98
- package/dist/lib/cli-status.js.map +0 -1
- package/dist/lib/command-parsing.d.ts +0 -43
- package/dist/lib/command-parsing.d.ts.map +0 -1
- package/dist/lib/command-parsing.js +0 -103
- package/dist/lib/command-parsing.js.map +0 -1
- package/dist/lib/config.d.ts +0 -63
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -1092
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/deepseek-auth.d.ts +0 -15
- package/dist/lib/deepseek-auth.d.ts.map +0 -1
- package/dist/lib/deepseek-auth.js +0 -28
- package/dist/lib/deepseek-auth.js.map +0 -1
- package/dist/lib/format.d.ts +0 -25
- package/dist/lib/format.d.ts.map +0 -1
- package/dist/lib/format.js +0 -300
- package/dist/lib/format.js.map +0 -1
- package/dist/lib/google-agy-companion.d.ts +0 -8
- package/dist/lib/google-agy-companion.d.ts.map +0 -1
- package/dist/lib/google-agy-companion.js +0 -64
- package/dist/lib/google-agy-companion.js.map +0 -1
- package/dist/lib/google-gemini-cli-companion.d.ts +0 -8
- package/dist/lib/google-gemini-cli-companion.d.ts.map +0 -1
- package/dist/lib/google-gemini-cli-companion.js +0 -64
- package/dist/lib/google-gemini-cli-companion.js.map +0 -1
- package/dist/lib/grouped-entry-normalization.d.ts +0 -12
- package/dist/lib/grouped-entry-normalization.d.ts.map +0 -1
- package/dist/lib/grouped-entry-normalization.js +0 -124
- package/dist/lib/grouped-entry-normalization.js.map +0 -1
- package/dist/lib/grouped-header-format.d.ts +0 -5
- package/dist/lib/grouped-header-format.d.ts.map +0 -1
- package/dist/lib/grouped-header-format.js +0 -16
- package/dist/lib/grouped-header-format.js.map +0 -1
- package/dist/lib/init-installer.d.ts +0 -123
- package/dist/lib/init-installer.d.ts.map +0 -1
- package/dist/lib/init-installer.js +0 -1111
- package/dist/lib/init-installer.js.map +0 -1
- package/dist/lib/jsonc.d.ts +0 -17
- package/dist/lib/jsonc.d.ts.map +0 -1
- package/dist/lib/jsonc.js +0 -23
- package/dist/lib/jsonc.js.map +0 -1
- package/dist/lib/kilo-config.d.ts +0 -15
- package/dist/lib/kilo-config.d.ts.map +0 -1
- package/dist/lib/kilo-config.js +0 -27
- package/dist/lib/kilo-config.js.map +0 -1
- package/dist/lib/kimi-auth.d.ts +0 -49
- package/dist/lib/kimi-auth.d.ts.map +0 -1
- package/dist/lib/kimi-auth.js +0 -82
- package/dist/lib/kimi-auth.js.map +0 -1
- package/dist/lib/markdown-table.d.ts +0 -51
- package/dist/lib/markdown-table.d.ts.map +0 -1
- package/dist/lib/markdown-table.js +0 -179
- package/dist/lib/markdown-table.js.map +0 -1
- package/dist/lib/minimax-auth.d.ts +0 -62
- package/dist/lib/minimax-auth.d.ts.map +0 -1
- package/dist/lib/minimax-auth.js +0 -206
- package/dist/lib/minimax-auth.js.map +0 -1
- package/dist/lib/nanogpt-config.d.ts +0 -15
- package/dist/lib/nanogpt-config.d.ts.map +0 -1
- package/dist/lib/nanogpt-config.js +0 -31
- package/dist/lib/nanogpt-config.js.map +0 -1
- package/dist/lib/ollama-cloud-config.d.ts +0 -15
- package/dist/lib/ollama-cloud-config.d.ts.map +0 -1
- package/dist/lib/ollama-cloud-config.js +0 -27
- package/dist/lib/ollama-cloud-config.js.map +0 -1
- package/dist/lib/opencode-go-auth.d.ts +0 -16
- package/dist/lib/opencode-go-auth.d.ts.map +0 -1
- package/dist/lib/opencode-go-auth.js +0 -42
- package/dist/lib/opencode-go-auth.js.map +0 -1
- package/dist/lib/opencode-version.d.ts +0 -6
- package/dist/lib/opencode-version.d.ts.map +0 -1
- package/dist/lib/opencode-version.js +0 -26
- package/dist/lib/opencode-version.js.map +0 -1
- package/dist/lib/provider-add-command.d.ts +0 -35
- package/dist/lib/provider-add-command.d.ts.map +0 -1
- package/dist/lib/provider-add-command.js +0 -204
- package/dist/lib/provider-add-command.js.map +0 -1
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts +0 -32
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +0 -1
- package/dist/lib/provider-add-json-v1-questionnaire.js +0 -336
- package/dist/lib/provider-add-json-v1-questionnaire.js.map +0 -1
- package/dist/lib/provider-add.d.ts +0 -21
- package/dist/lib/provider-add.d.ts.map +0 -1
- package/dist/lib/provider-add.js +0 -219
- package/dist/lib/provider-add.js.map +0 -1
- package/dist/lib/quota-accounting-projection.d.ts +0 -9
- package/dist/lib/quota-accounting-projection.d.ts.map +0 -1
- package/dist/lib/quota-accounting-projection.js +0 -254
- package/dist/lib/quota-accounting-projection.js.map +0 -1
- package/dist/lib/quota-columns.d.ts +0 -38
- package/dist/lib/quota-columns.d.ts.map +0 -1
- package/dist/lib/quota-columns.js +0 -129
- package/dist/lib/quota-columns.js.map +0 -1
- package/dist/lib/quota-command-format.d.ts +0 -34
- package/dist/lib/quota-command-format.d.ts.map +0 -1
- package/dist/lib/quota-command-format.js +0 -240
- package/dist/lib/quota-command-format.js.map +0 -1
- package/dist/lib/quota-dialog-command-specs.d.ts +0 -63
- package/dist/lib/quota-dialog-command-specs.d.ts.map +0 -1
- package/dist/lib/quota-dialog-command-specs.js +0 -145
- package/dist/lib/quota-dialog-command-specs.js.map +0 -1
- package/dist/lib/quota-entry-display.d.ts +0 -7
- package/dist/lib/quota-entry-display.d.ts.map +0 -1
- package/dist/lib/quota-entry-display.js +0 -59
- package/dist/lib/quota-entry-display.js.map +0 -1
- package/dist/lib/quota-exhaustion-projection.d.ts +0 -11
- package/dist/lib/quota-exhaustion-projection.d.ts.map +0 -1
- package/dist/lib/quota-exhaustion-projection.js +0 -105
- package/dist/lib/quota-exhaustion-projection.js.map +0 -1
- package/dist/lib/quota-format-style.d.ts +0 -21
- package/dist/lib/quota-format-style.d.ts.map +0 -1
- package/dist/lib/quota-format-style.js +0 -38
- package/dist/lib/quota-format-style.js.map +0 -1
- package/dist/lib/quota-render-data.d.ts +0 -102
- package/dist/lib/quota-render-data.d.ts.map +0 -1
- package/dist/lib/quota-render-data.js +0 -419
- package/dist/lib/quota-render-data.js.map +0 -1
- package/dist/lib/quota-reset-notifications.d.ts +0 -20
- package/dist/lib/quota-reset-notifications.d.ts.map +0 -1
- package/dist/lib/quota-reset-notifications.js +0 -331
- package/dist/lib/quota-reset-notifications.js.map +0 -1
- package/dist/lib/quota-runtime-context.d.ts +0 -54
- package/dist/lib/quota-runtime-context.d.ts.map +0 -1
- package/dist/lib/quota-runtime-context.js +0 -110
- package/dist/lib/quota-runtime-context.js.map +0 -1
- package/dist/lib/quota-state-codec.d.ts +0 -16
- package/dist/lib/quota-state-codec.d.ts.map +0 -1
- package/dist/lib/quota-state-codec.js +0 -412
- package/dist/lib/quota-state-codec.js.map +0 -1
- package/dist/lib/quota-state.d.ts +0 -28
- package/dist/lib/quota-state.d.ts.map +0 -1
- package/dist/lib/quota-state.js +0 -473
- package/dist/lib/quota-state.js.map +0 -1
- package/dist/lib/quota-stats-format.d.ts +0 -29
- package/dist/lib/quota-stats-format.d.ts.map +0 -1
- package/dist/lib/quota-stats-format.js +0 -459
- package/dist/lib/quota-stats-format.js.map +0 -1
- package/dist/lib/quota-stats.d.ts +0 -126
- package/dist/lib/quota-stats.d.ts.map +0 -1
- package/dist/lib/quota-stats.js +0 -695
- package/dist/lib/quota-stats.js.map +0 -1
- package/dist/lib/quota-surface-data.d.ts +0 -21
- package/dist/lib/quota-surface-data.d.ts.map +0 -1
- package/dist/lib/quota-surface-data.js +0 -362
- package/dist/lib/quota-surface-data.js.map +0 -1
- package/dist/lib/scoped-update-migration.d.ts +0 -103
- package/dist/lib/scoped-update-migration.d.ts.map +0 -1
- package/dist/lib/scoped-update-migration.js +0 -344
- package/dist/lib/scoped-update-migration.js.map +0 -1
- package/dist/lib/scoped-update.d.ts +0 -77
- package/dist/lib/scoped-update.d.ts.map +0 -1
- package/dist/lib/scoped-update.js +0 -590
- package/dist/lib/scoped-update.js.map +0 -1
- package/dist/lib/session-tokens-format.d.ts +0 -36
- package/dist/lib/session-tokens-format.d.ts.map +0 -1
- package/dist/lib/session-tokens-format.js +0 -111
- package/dist/lib/session-tokens-format.js.map +0 -1
- package/dist/lib/synthetic-config.d.ts +0 -15
- package/dist/lib/synthetic-config.d.ts.map +0 -1
- package/dist/lib/synthetic-config.js +0 -28
- package/dist/lib/synthetic-config.js.map +0 -1
- package/dist/lib/toast-format-grouped.d.ts +0 -25
- package/dist/lib/toast-format-grouped.d.ts.map +0 -1
- package/dist/lib/toast-format-grouped.js +0 -296
- package/dist/lib/toast-format-grouped.js.map +0 -1
- package/dist/lib/tui-compact-format.d.ts +0 -10
- package/dist/lib/tui-compact-format.d.ts.map +0 -1
- package/dist/lib/tui-compact-format.js +0 -460
- package/dist/lib/tui-compact-format.js.map +0 -1
- package/dist/lib/tui-panel-state.d.ts +0 -15
- package/dist/lib/tui-panel-state.d.ts.map +0 -1
- package/dist/lib/tui-panel-state.js +0 -2
- package/dist/lib/tui-panel-state.js.map +0 -1
- package/dist/lib/tui-prompt-bar-format.d.ts +0 -25
- package/dist/lib/tui-prompt-bar-format.d.ts.map +0 -1
- package/dist/lib/tui-prompt-bar-format.js +0 -206
- package/dist/lib/tui-prompt-bar-format.js.map +0 -1
- package/dist/lib/tui-sidebar-format.d.ts +0 -13
- package/dist/lib/tui-sidebar-format.d.ts.map +0 -1
- package/dist/lib/tui-sidebar-format.js +0 -34
- package/dist/lib/tui-sidebar-format.js.map +0 -1
- package/dist/lib/zai-auth.d.ts +0 -15
- package/dist/lib/zai-auth.d.ts.map +0 -1
- package/dist/lib/zai-auth.js +0 -37
- package/dist/lib/zai-auth.js.map +0 -1
- package/dist/lib/zai.d.ts +0 -5
- package/dist/lib/zai.d.ts.map +0 -1
- package/dist/lib/zai.js +0 -14
- package/dist/lib/zai.js.map +0 -1
- package/dist/lib/zhipu-auth.d.ts +0 -15
- package/dist/lib/zhipu-auth.d.ts.map +0 -1
- package/dist/lib/zhipu-auth.js +0 -42
- package/dist/lib/zhipu-auth.js.map +0 -1
- package/dist/lib/zhipu.d.ts +0 -5
- package/dist/lib/zhipu.d.ts.map +0 -1
- package/dist/lib/zhipu.js +0 -13
- package/dist/lib/zhipu.js.map +0 -1
- package/dist/providers/glm-coding-plan-provider.d.ts +0 -56
- package/dist/providers/glm-coding-plan-provider.d.ts.map +0 -1
- package/dist/providers/glm-coding-plan-provider.js +0 -115
- package/dist/providers/glm-coding-plan-provider.js.map +0 -1
- package/dist/providers/google-account-format.d.ts +0 -7
- package/dist/providers/google-account-format.d.ts.map +0 -1
- package/dist/providers/google-account-format.js +0 -52
- package/dist/providers/google-account-format.js.map +0 -1
- package/dist/providers/zai.d.ts +0 -2
- package/dist/providers/zai.d.ts.map +0 -1
- package/dist/providers/zai.js +0 -24
- package/dist/providers/zai.js.map +0 -1
- package/dist/providers/zhipu.d.ts +0 -2
- package/dist/providers/zhipu.d.ts.map +0 -1
- package/dist/providers/zhipu.js +0 -21
- package/dist/providers/zhipu.js.map +0 -1
- package/dist/tui-v2.d.ts +0 -5
- package/dist/tui-v2.d.ts.map +0 -1
- package/dist/tui-v2.jsx +0 -624
- package/dist/tui-v2.jsx.map +0 -1
- package/dist/tui.d.ts.map +0 -1
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { isIP } from "node:net";
|
|
2
|
+
import { classifyWindow } from "../core/windows.js";
|
|
3
|
+
import { daysInMonth } from "./calendar-date.js";
|
|
4
|
+
import { isRecord } from "./json-guards.js";
|
|
2
5
|
import { lookupCost } from "./modelsdev-pricing.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
6
|
+
import { resolvePricingKey } from "./pricing-key.js";
|
|
7
|
+
import { getCanonicalQuotaProviderId } from "./provider-metadata.js";
|
|
5
8
|
export const QUOTA_PROVIDER_REMOTE_FORMATS = ["quota-v1", "openrouter-key-v1", "json-v1"];
|
|
6
9
|
export const QUOTA_PROVIDER_MODES = ["remote-api", "local-estimate"];
|
|
7
10
|
export const QUOTA_PROVIDER_WINDOW_TYPES = ["utc-day", "rolling"];
|
|
@@ -10,8 +13,31 @@ export const MAINTAINED_LOCAL_ESTIMATE_IDS = ["alibaba-coding-plan"];
|
|
|
10
13
|
export function isMaintainedQuotaProviderTuning(definition) {
|
|
11
14
|
return MAINTAINED_LOCAL_ESTIMATE_IDS.includes(definition.id);
|
|
12
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* The custom definitions that run: not maintained tunings, and not switched off. A switched-off
|
|
18
|
+
* definition is never fetched and its key is never sent.
|
|
19
|
+
*/
|
|
13
20
|
export function customQuotaProviderDefinitions(definitions) {
|
|
14
|
-
return definitions.filter((definition) => !isMaintainedQuotaProviderTuning(definition));
|
|
21
|
+
return definitions.filter((definition) => !isMaintainedQuotaProviderTuning(definition) && definition.enabled !== false);
|
|
22
|
+
}
|
|
23
|
+
/** Hosts a plain-HTTP address may use without a warning: this computer only. */
|
|
24
|
+
const LOCAL_HOSTNAMES = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
25
|
+
/**
|
|
26
|
+
* Where a remote custom provider sends its key, for the user to check before switching it on:
|
|
27
|
+
* the URL's origin and path (the scheme shows http or https), and where the key comes from.
|
|
28
|
+
* Never the key itself. `insecure` is true for plain HTTP to any host but localhost, 127.0.0.1
|
|
29
|
+
* or ::1. Null for a local estimate, which sends nothing.
|
|
30
|
+
*/
|
|
31
|
+
export function describeQuotaProviderRequest(definition) {
|
|
32
|
+
if (definition.mode !== "remote-api")
|
|
33
|
+
return null;
|
|
34
|
+
const url = new URL(definition.url);
|
|
35
|
+
const saved = `OpenCode's ${definition.providerId} key`;
|
|
36
|
+
return {
|
|
37
|
+
url: `${url.origin}${url.pathname}`,
|
|
38
|
+
key: definition.apiKeyEnv ? `${definition.apiKeyEnv}, else ${saved}` : saved,
|
|
39
|
+
insecure: url.protocol === "http:" && !LOCAL_HOSTNAMES.has(url.hostname),
|
|
40
|
+
};
|
|
15
41
|
}
|
|
16
42
|
export function resolveQuotaProviderSessionModelIdentity(params) {
|
|
17
43
|
if (params.currentProviderID) {
|
|
@@ -27,6 +53,58 @@ export function resolveQuotaProviderSessionModelIdentity(params) {
|
|
|
27
53
|
modelId: params.currentModel.slice(slashIndex + 1),
|
|
28
54
|
};
|
|
29
55
|
}
|
|
56
|
+
/** A short stable hash (32-bit FNV-1a, hex) that tells names apart in row keys. */
|
|
57
|
+
function shortNameHash(text) {
|
|
58
|
+
let hash = 0x811c9dc5;
|
|
59
|
+
for (const char of text) {
|
|
60
|
+
hash ^= char.codePointAt(0) ?? 0;
|
|
61
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
62
|
+
}
|
|
63
|
+
return hash.toString(16).padStart(8, "0");
|
|
64
|
+
}
|
|
65
|
+
const CUSTOM_ROW_KEY_MAX_LENGTH = 48;
|
|
66
|
+
/**
|
|
67
|
+
* The row key a custom source's mapping or entry name gets: spaces become "_", and the name
|
|
68
|
+
* stays as it is when that leaves only letters, digits, "_" and "-" ("Daily limit" →
|
|
69
|
+
* "Daily_limit", "Daily-limit" → "Daily-limit"). Other characters are dropped and a short hash
|
|
70
|
+
* of the exact name is added, so names stay apart ("日次" → 8 hex digits).
|
|
71
|
+
*/
|
|
72
|
+
export function customRowKey(name) {
|
|
73
|
+
const spaced = name.trim().replace(/\s+/gu, "_");
|
|
74
|
+
const kept = spaced.replace(/[^A-Za-z0-9_-]/gu, "").slice(0, CUSTOM_ROW_KEY_MAX_LENGTH);
|
|
75
|
+
if (kept === spaced && /[A-Za-z0-9]/u.test(kept))
|
|
76
|
+
return kept;
|
|
77
|
+
const hash = shortNameHash(name.trim());
|
|
78
|
+
return /[A-Za-z0-9]/u.test(kept) ? `${kept}_${hash}` : hash;
|
|
79
|
+
}
|
|
80
|
+
/** ADR 0001: a custom `rate_limit` is a quota and `spend` is usage. */
|
|
81
|
+
function customRowType(resultType) {
|
|
82
|
+
if (resultType === "rate_limit")
|
|
83
|
+
return "quota";
|
|
84
|
+
if (resultType === "spend")
|
|
85
|
+
return "usage";
|
|
86
|
+
return resultType;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* One custom row. `key` is the part of its id after `custom.<definition id>.`; its label is the
|
|
90
|
+
* configured label without a trailing colon, or else its name; its window is the one its name
|
|
91
|
+
* or label names ("Daily" → day).
|
|
92
|
+
*/
|
|
93
|
+
export function customRow(params) {
|
|
94
|
+
const label = (params.label ?? "").replace(/:+$/u, "").trim();
|
|
95
|
+
const window = classifyWindow(params.name) ?? classifyWindow(label);
|
|
96
|
+
return {
|
|
97
|
+
key: params.key,
|
|
98
|
+
label: label || params.name,
|
|
99
|
+
type: customRowType(params.resultType),
|
|
100
|
+
method: params.method,
|
|
101
|
+
authority: params.method === "remote_api" ? "provider_reported" : "locally_derived",
|
|
102
|
+
prominence: "primary",
|
|
103
|
+
...(window ? { window } : {}),
|
|
104
|
+
...params.value,
|
|
105
|
+
...(params.resetsAt ? { resetsAt: params.resetsAt } : {}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
30
108
|
export function selectEligibleQuotaProviderDefinitions(params) {
|
|
31
109
|
const runtimeEligible = customQuotaProviderDefinitions(params.definitions).filter((definition) => params.availableProviderIds.has(definition.providerId));
|
|
32
110
|
if (!params.onlyCurrentModel)
|
|
@@ -45,9 +123,13 @@ export function selectEligibleQuotaProviderDefinitions(params) {
|
|
|
45
123
|
return runtimeEligible.filter((definition) => definition.providerId === identity.providerId &&
|
|
46
124
|
(definition.modelIds === undefined || definition.modelIds.includes(identity.modelId)));
|
|
47
125
|
}
|
|
48
|
-
const BASE_FIELDS = ["id", "providerId", "label", "mode", "modelIds"];
|
|
126
|
+
const BASE_FIELDS = ["id", "providerId", "label", "mode", "modelIds", "enabled"];
|
|
49
127
|
const REMOTE_FIELDS = [...BASE_FIELDS, "url", "format", "apiKeyEnv", "adapter"];
|
|
50
128
|
const LOCAL_FIELDS = [...BASE_FIELDS, "windows", "pricingModelMap"];
|
|
129
|
+
/** Every top-level field a definition can have, in either mode. */
|
|
130
|
+
export const QUOTA_PROVIDER_FIELDS = [
|
|
131
|
+
...new Set([...REMOTE_FIELDS, ...LOCAL_FIELDS]),
|
|
132
|
+
];
|
|
51
133
|
const WINDOW_FIELDS = [
|
|
52
134
|
"id",
|
|
53
135
|
"label",
|
|
@@ -71,15 +153,15 @@ const MAX_WINDOWS = 16;
|
|
|
71
153
|
const MAX_ROLLING_MINUTES = 366 * 24 * 60;
|
|
72
154
|
const MAX_SAFE_REQUEST_LIMIT = 1_000_000_000;
|
|
73
155
|
const MAX_USD_BUDGET = 1_000_000_000;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
156
|
+
const JSON_V1_MAX_MAPPINGS = 16;
|
|
157
|
+
const JSON_V1_MAX_ADAPTER_DEPTH = 8;
|
|
158
|
+
const JSON_V1_MAX_ADAPTER_OBJECTS = 128;
|
|
159
|
+
const JSON_V1_MAX_ADAPTER_PROPERTIES = 384;
|
|
160
|
+
const JSON_V1_MAX_ADAPTER_ARRAY_ELEMENTS = 640;
|
|
161
|
+
const JSON_V1_MAX_PATH_SEGMENTS = 8;
|
|
162
|
+
const JSON_V1_MAX_PATH_SEGMENT_CODE_POINTS = 64;
|
|
163
|
+
const JSON_V1_MAX_STATIC_NAME_CODE_POINTS = 80;
|
|
164
|
+
const JSON_V1_MAX_STATIC_UNIT_CODE_POINTS = 32;
|
|
83
165
|
export const JSON_V1_MAX_DISPLAY_CODE_POINTS = 160;
|
|
84
166
|
export const JSON_V1_MAX_NUMBER_MAGNITUDE = 1e15;
|
|
85
167
|
const JSON_V1_FORBIDDEN_PATH_SEGMENTS = new Set(["__proto__", "prototype", "constructor"]);
|
|
@@ -89,7 +171,7 @@ const JSON_V1_TIMESTAMP_ENCODINGS = new Set([
|
|
|
89
171
|
"unix-seconds",
|
|
90
172
|
"unix-milliseconds",
|
|
91
173
|
]);
|
|
92
|
-
const
|
|
174
|
+
export const CUSTOM_RESULT_TYPES = new Set([
|
|
93
175
|
"quota",
|
|
94
176
|
"rate_limit",
|
|
95
177
|
"usage",
|
|
@@ -100,9 +182,6 @@ const JSON_V1_RESULT_TYPES = new Set([
|
|
|
100
182
|
]);
|
|
101
183
|
const JSON_V1_MIN_TIMESTAMP_MS = 0;
|
|
102
184
|
const JSON_V1_MAX_TIMESTAMP_MS = 253_402_300_799_999;
|
|
103
|
-
function isPlainObject(value) {
|
|
104
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
105
|
-
}
|
|
106
185
|
function hasOwnKey(value, key) {
|
|
107
186
|
return Object.hasOwn(value, key);
|
|
108
187
|
}
|
|
@@ -180,21 +259,15 @@ function normalizeRemoteUrl(value) {
|
|
|
180
259
|
return { value: parsed.toString() };
|
|
181
260
|
}
|
|
182
261
|
function cloneDefinition(definition) {
|
|
262
|
+
const modelIds = definition.modelIds ? { modelIds: [...definition.modelIds] } : {};
|
|
183
263
|
if (definition.mode === "remote-api") {
|
|
184
264
|
return definition.format === "json-v1"
|
|
185
|
-
? {
|
|
186
|
-
|
|
187
|
-
...(definition.modelIds ? { modelIds: [...definition.modelIds] } : {}),
|
|
188
|
-
adapter: structuredClone(definition.adapter),
|
|
189
|
-
}
|
|
190
|
-
: {
|
|
191
|
-
...definition,
|
|
192
|
-
...(definition.modelIds ? { modelIds: [...definition.modelIds] } : {}),
|
|
193
|
-
};
|
|
265
|
+
? { ...definition, ...modelIds, adapter: structuredClone(definition.adapter) }
|
|
266
|
+
: { ...definition, ...modelIds };
|
|
194
267
|
}
|
|
195
268
|
return {
|
|
196
269
|
...definition,
|
|
197
|
-
...
|
|
270
|
+
...modelIds,
|
|
198
271
|
windows: definition.windows.map((window) => ({ ...window })),
|
|
199
272
|
...(definition.pricingModelMap ? { pricingModelMap: { ...definition.pricingModelMap } } : {}),
|
|
200
273
|
};
|
|
@@ -283,12 +356,6 @@ function validateJsonV1Path(value, key, issues) {
|
|
|
283
356
|
return path.length === value.length ? path : undefined;
|
|
284
357
|
}
|
|
285
358
|
const JSON_V1_ISO_RE = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|([+-])(\d{2}):(\d{2}))$/;
|
|
286
|
-
function daysInMonth(year, month) {
|
|
287
|
-
if (month === 2) {
|
|
288
|
-
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28;
|
|
289
|
-
}
|
|
290
|
-
return [4, 6, 9, 11].includes(month) ? 30 : 31;
|
|
291
|
-
}
|
|
292
359
|
export function normalizeJsonV1Timestamp(value, encoding) {
|
|
293
360
|
let milliseconds;
|
|
294
361
|
if (encoding === "iso-8601") {
|
|
@@ -338,7 +405,7 @@ export function normalizeJsonV1Timestamp(value, encoding) {
|
|
|
338
405
|
return new Date(milliseconds).toISOString();
|
|
339
406
|
}
|
|
340
407
|
function validateJsonV1NumberSource(value, key, issues) {
|
|
341
|
-
if (!
|
|
408
|
+
if (!isRecord(value)) {
|
|
342
409
|
adapterIssue(issues, key, "expected a path or literal number source object");
|
|
343
410
|
return undefined;
|
|
344
411
|
}
|
|
@@ -377,7 +444,7 @@ function validateJsonV1NumberSource(value, key, issues) {
|
|
|
377
444
|
return { literal: value.literal };
|
|
378
445
|
}
|
|
379
446
|
function validateJsonV1TextSource(value, key, issues) {
|
|
380
|
-
if (!
|
|
447
|
+
if (!isRecord(value)) {
|
|
381
448
|
adapterIssue(issues, key, "expected a path or literal text source object");
|
|
382
449
|
return undefined;
|
|
383
450
|
}
|
|
@@ -400,7 +467,7 @@ function validateJsonV1TextSource(value, key, issues) {
|
|
|
400
467
|
return { literal };
|
|
401
468
|
}
|
|
402
469
|
function validateJsonV1TimestampSource(value, key, issues) {
|
|
403
|
-
if (!
|
|
470
|
+
if (!isRecord(value)) {
|
|
404
471
|
adapterIssue(issues, key, "expected a timestamp source object");
|
|
405
472
|
return undefined;
|
|
406
473
|
}
|
|
@@ -442,7 +509,7 @@ function requireLiteralNumber(source, key, issues, rule) {
|
|
|
442
509
|
}
|
|
443
510
|
}
|
|
444
511
|
function validateJsonV1Metric(value, resultType, key, issues) {
|
|
445
|
-
if (!
|
|
512
|
+
if (!isRecord(value)) {
|
|
446
513
|
adapterIssue(issues, key, "expected a tagged metric object");
|
|
447
514
|
return undefined;
|
|
448
515
|
}
|
|
@@ -581,7 +648,7 @@ function validateJsonV1Metric(value, resultType, key, issues) {
|
|
|
581
648
|
}
|
|
582
649
|
}
|
|
583
650
|
function validateJsonV1Mapping(value, key, providerLabel, issues) {
|
|
584
|
-
if (!
|
|
651
|
+
if (!isRecord(value)) {
|
|
585
652
|
adapterIssue(issues, key, "expected an object");
|
|
586
653
|
return undefined;
|
|
587
654
|
}
|
|
@@ -592,7 +659,7 @@ function validateJsonV1Mapping(value, key, providerLabel, issues) {
|
|
|
592
659
|
adapterIssue(issues, `${key}.${field}`, "field is required");
|
|
593
660
|
}
|
|
594
661
|
const resultType = typeof value.resultType === "string" &&
|
|
595
|
-
|
|
662
|
+
CUSTOM_RESULT_TYPES.has(value.resultType)
|
|
596
663
|
? value.resultType
|
|
597
664
|
: undefined;
|
|
598
665
|
if (hasOwnKey(value, "resultType") && !resultType) {
|
|
@@ -650,7 +717,7 @@ function validateJsonV1Mapping(value, key, providerLabel, issues) {
|
|
|
650
717
|
};
|
|
651
718
|
}
|
|
652
719
|
function validateJsonV1Adapter(value, key, providerLabel, issues) {
|
|
653
|
-
if (!
|
|
720
|
+
if (!isRecord(value)) {
|
|
654
721
|
adapterIssue(issues, key, "expected an object");
|
|
655
722
|
return undefined;
|
|
656
723
|
}
|
|
@@ -671,10 +738,21 @@ function validateJsonV1Adapter(value, key, providerLabel, issues) {
|
|
|
671
738
|
return undefined;
|
|
672
739
|
}
|
|
673
740
|
const mappings = [];
|
|
741
|
+
// Each mapping's rows are keyed by its name, so two names must not give one key.
|
|
742
|
+
const rowKeys = new Map();
|
|
674
743
|
for (let index = 0; index < value.mappings.length; index += 1) {
|
|
675
744
|
const mapping = validateJsonV1Mapping(value.mappings[index], `${key}.mappings[${index}]`, providerLabel, issues);
|
|
676
|
-
if (mapping)
|
|
677
|
-
|
|
745
|
+
if (!mapping)
|
|
746
|
+
continue;
|
|
747
|
+
mappings.push(mapping);
|
|
748
|
+
const rowKey = customRowKey(mapping.name);
|
|
749
|
+
const first = rowKeys.get(rowKey);
|
|
750
|
+
if (first === undefined) {
|
|
751
|
+
rowKeys.set(rowKey, index);
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
adapterIssue(issues, `${key}.mappings[${index}].name`, `gives the same row id as ${key}.mappings[${first}].name`);
|
|
755
|
+
}
|
|
678
756
|
}
|
|
679
757
|
return issueStart === issues.length && mappings.length === value.mappings.length
|
|
680
758
|
? { ...(rowsPath ? { rowsPath } : {}), mappings }
|
|
@@ -731,16 +809,19 @@ function validateWindows(raw, providerKey, issues) {
|
|
|
731
809
|
for (let index = 0; index < raw.length; index += 1) {
|
|
732
810
|
const item = raw[index];
|
|
733
811
|
const windowKey = `${providerKey}.windows[${index}]`;
|
|
734
|
-
if (!
|
|
812
|
+
if (!isRecord(item)) {
|
|
735
813
|
issues.push({ key: windowKey, message: "expected an object" });
|
|
736
814
|
continue;
|
|
737
815
|
}
|
|
738
|
-
|
|
816
|
+
// An unknown field is named by its position: its name is the caller's, never repeated.
|
|
817
|
+
Object.keys(item).forEach((field, position) => {
|
|
818
|
+
if (WINDOW_FIELDS.includes(field))
|
|
819
|
+
return;
|
|
739
820
|
issues.push({
|
|
740
|
-
key:
|
|
741
|
-
message:
|
|
821
|
+
key: windowKey,
|
|
822
|
+
message: `field ${position + 1} is unknown; allowed fields are ${WINDOW_FIELDS.join(", ")}`,
|
|
742
823
|
});
|
|
743
|
-
}
|
|
824
|
+
});
|
|
744
825
|
for (const field of ["id", "type", "requestLimit"]) {
|
|
745
826
|
if (!hasOwnKey(item, field)) {
|
|
746
827
|
issues.push({ key: `${windowKey}.${field}`, message: "field is required" });
|
|
@@ -855,33 +936,36 @@ function validateMaintainedWindows(id, windows, providerKey, issues) {
|
|
|
855
936
|
function validatePricingModelMap(raw, providerKey, providerId, issues) {
|
|
856
937
|
if (raw === undefined)
|
|
857
938
|
return undefined;
|
|
858
|
-
if (!
|
|
939
|
+
if (!isRecord(raw) || Object.keys(raw).length === 0) {
|
|
859
940
|
issues.push({
|
|
860
941
|
key: `${providerKey}.pricingModelMap`,
|
|
861
942
|
message: "expected a non-empty object of exact source model ids to models.dev provider/model ids",
|
|
862
943
|
});
|
|
863
944
|
return undefined;
|
|
864
945
|
}
|
|
946
|
+
const key = `${providerKey}.pricingModelMap`;
|
|
947
|
+
const sourceModelIds = Object.keys(raw);
|
|
865
948
|
const result = {};
|
|
866
|
-
for (const sourceModelId of
|
|
867
|
-
|
|
949
|
+
for (const sourceModelId of [...sourceModelIds].sort()) {
|
|
950
|
+
// An entry is named by its position: its source key is the caller's, never repeated.
|
|
951
|
+
const entry = `entry ${sourceModelIds.indexOf(sourceModelId) + 1}`;
|
|
868
952
|
const target = raw[sourceModelId];
|
|
869
953
|
if (sourceModelId.length === 0 || MODEL_FORBIDDEN_PATTERN.test(sourceModelId)) {
|
|
870
954
|
issues.push({
|
|
871
955
|
key,
|
|
872
|
-
message:
|
|
956
|
+
message: `${entry}: source key must be an exact model id without whitespace or control characters`,
|
|
873
957
|
});
|
|
874
958
|
continue;
|
|
875
959
|
}
|
|
876
960
|
if (typeof target !== "string") {
|
|
877
|
-
issues.push({ key, message:
|
|
961
|
+
issues.push({ key, message: `${entry}: expected a models.dev provider/model string` });
|
|
878
962
|
continue;
|
|
879
963
|
}
|
|
880
964
|
const automatic = resolvePricingKey({ providerID: providerId, modelID: sourceModelId });
|
|
881
965
|
if (automatic.ok) {
|
|
882
966
|
issues.push({
|
|
883
967
|
key,
|
|
884
|
-
message:
|
|
968
|
+
message: `${entry}: automatic models.dev matching already resolves to ${automatic.key.provider}/${automatic.key.model}`,
|
|
885
969
|
});
|
|
886
970
|
continue;
|
|
887
971
|
}
|
|
@@ -891,7 +975,7 @@ function validatePricingModelMap(raw, providerKey, providerId, issues) {
|
|
|
891
975
|
if (!targetProvider || !targetModel || !lookupCost(targetProvider, targetModel)) {
|
|
892
976
|
issues.push({
|
|
893
977
|
key,
|
|
894
|
-
message:
|
|
978
|
+
message: `${entry}: target must be an exact priced models.dev provider/model id`,
|
|
895
979
|
});
|
|
896
980
|
continue;
|
|
897
981
|
}
|
|
@@ -912,7 +996,7 @@ export function validateQuotaProviders(value) {
|
|
|
912
996
|
for (let index = 0; index < value.length; index += 1) {
|
|
913
997
|
const raw = value[index];
|
|
914
998
|
const providerKey = `quotaProviders[${index}]`;
|
|
915
|
-
if (!
|
|
999
|
+
if (!isRecord(raw)) {
|
|
916
1000
|
issues.push({ key: providerKey, message: "expected an object" });
|
|
917
1001
|
continue;
|
|
918
1002
|
}
|
|
@@ -922,15 +1006,17 @@ export function validateQuotaProviders(value) {
|
|
|
922
1006
|
? LOCAL_FIELDS
|
|
923
1007
|
: mode === "remote-api"
|
|
924
1008
|
? REMOTE_FIELDS
|
|
925
|
-
:
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
1009
|
+
: QUOTA_PROVIDER_FIELDS;
|
|
1010
|
+
// An unknown field is named by its position: its name is the caller's, never repeated.
|
|
1011
|
+
const modeName = QUOTA_PROVIDER_MODES.find((known) => known === mode) ?? "quota provider";
|
|
1012
|
+
Object.keys(raw).forEach((field, position) => {
|
|
1013
|
+
if (allowedFields.includes(field))
|
|
1014
|
+
return;
|
|
929
1015
|
issues.push({
|
|
930
|
-
key:
|
|
931
|
-
message: `unknown
|
|
1016
|
+
key: providerKey,
|
|
1017
|
+
message: `field ${position + 1} is unknown for ${modeName} mode; allowed fields are ${allowedFields.join(", ")}`,
|
|
932
1018
|
});
|
|
933
|
-
}
|
|
1019
|
+
});
|
|
934
1020
|
for (const field of ["id", "mode"]) {
|
|
935
1021
|
if (!hasOwnKey(raw, field)) {
|
|
936
1022
|
issues.push({ key: `${providerKey}.${field}`, message: "field is required" });
|
|
@@ -951,7 +1037,7 @@ export function validateQuotaProviders(value) {
|
|
|
951
1037
|
message: `"${QUOTA_PROVIDERS_AGGREGATE_ID}" is reserved for the aggregate provider`,
|
|
952
1038
|
});
|
|
953
1039
|
}
|
|
954
|
-
const builtIn =
|
|
1040
|
+
const builtIn = getCanonicalQuotaProviderId(id);
|
|
955
1041
|
if (builtIn && !MAINTAINED_LOCAL_ESTIMATE_IDS.includes(id)) {
|
|
956
1042
|
issues.push({
|
|
957
1043
|
key: `${providerKey}.id`,
|
|
@@ -1002,7 +1088,12 @@ export function validateQuotaProviders(value) {
|
|
|
1002
1088
|
message: 'expected "remote-api" or "local-estimate"',
|
|
1003
1089
|
});
|
|
1004
1090
|
}
|
|
1005
|
-
const modelIds = validateModelIds({ raw, providerKey,
|
|
1091
|
+
const modelIds = validateModelIds({ raw, providerKey, issues });
|
|
1092
|
+
const enabled = raw.enabled;
|
|
1093
|
+
if (hasOwnKey(raw, "enabled") && typeof enabled !== "boolean") {
|
|
1094
|
+
issues.push({ key: `${providerKey}.enabled`, message: "expected true or false" });
|
|
1095
|
+
}
|
|
1096
|
+
const switchField = typeof enabled === "boolean" ? { enabled } : {};
|
|
1006
1097
|
const modelIdsValid = !hasOwnKey(raw, "modelIds") ||
|
|
1007
1098
|
(Array.isArray(raw.modelIds) && modelIds?.length === raw.modelIds.length);
|
|
1008
1099
|
if (idValid &&
|
|
@@ -1087,6 +1178,7 @@ export function validateQuotaProviders(value) {
|
|
|
1087
1178
|
url: normalizedUrl.value,
|
|
1088
1179
|
...(apiKeyEnv !== undefined ? { apiKeyEnv: apiKeyEnv } : {}),
|
|
1089
1180
|
...(modelIds ? { modelIds } : {}),
|
|
1181
|
+
...switchField,
|
|
1090
1182
|
};
|
|
1091
1183
|
definitions.push({
|
|
1092
1184
|
index,
|
|
@@ -1120,6 +1212,7 @@ export function validateQuotaProviders(value) {
|
|
|
1120
1212
|
windows,
|
|
1121
1213
|
...(modelIds ? { modelIds } : {}),
|
|
1122
1214
|
...(pricingModelMap ? { pricingModelMap } : {}),
|
|
1215
|
+
...switchField,
|
|
1123
1216
|
},
|
|
1124
1217
|
});
|
|
1125
1218
|
}
|