@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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal columns: how wide text shows in a terminal, and cutting or padding text to a width
|
|
3
|
+
* without splitting a character. East Asian wide characters and emoji take two columns;
|
|
4
|
+
* control, format and combining characters on their own take none.
|
|
5
|
+
*/
|
|
6
|
+
export declare function columnsOf(text: string): number;
|
|
7
|
+
/** The longest start of `text` that fits in `width` columns. */
|
|
8
|
+
export declare function sliceColumns(text: string, width: number): string;
|
|
9
|
+
/** `text` cut to `width` columns, ending in "…" when cut. */
|
|
10
|
+
export declare function truncateColumns(text: string, width: number): string;
|
|
11
|
+
/** `text` with spaces after it up to `width` columns (never cut). */
|
|
12
|
+
export declare function padEndColumns(text: string, width: number): string;
|
|
13
|
+
/** `text` with spaces before it up to `width` columns (never cut). */
|
|
14
|
+
export declare function padStartColumns(text: string, width: number): string;
|
|
15
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../src/view/columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAShE;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal columns: how wide text shows in a terminal, and cutting or padding text to a width
|
|
3
|
+
* without splitting a character. East Asian wide characters and emoji take two columns;
|
|
4
|
+
* control, format and combining characters on their own take none.
|
|
5
|
+
*/
|
|
6
|
+
const GRAPHEMES = new Intl.Segmenter("en", { granularity: "grapheme" });
|
|
7
|
+
/** East Asian Wide and Fullwidth blocks: Hangul Jamo, CJK, kana, Hangul, fullwidth forms. */
|
|
8
|
+
const WIDE = /^[\u1100-\u115F\u2E80-\u303E\u3041-\u33FF\u3400-\u4DBF\u4E00-\u9FFF\uA000-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6\u{20000}-\u{3FFFD}]/u;
|
|
9
|
+
const EMOJI = /\p{Emoji_Presentation}|\uFE0F/u;
|
|
10
|
+
const INVISIBLE = /^[\p{Cc}\p{Cf}\p{Mn}\p{Me}]+$/u;
|
|
11
|
+
function graphemeColumns(grapheme) {
|
|
12
|
+
if (INVISIBLE.test(grapheme))
|
|
13
|
+
return 0;
|
|
14
|
+
return WIDE.test(grapheme) || EMOJI.test(grapheme) ? 2 : 1;
|
|
15
|
+
}
|
|
16
|
+
export function columnsOf(text) {
|
|
17
|
+
let columns = 0;
|
|
18
|
+
for (const { segment } of GRAPHEMES.segment(text))
|
|
19
|
+
columns += graphemeColumns(segment);
|
|
20
|
+
return columns;
|
|
21
|
+
}
|
|
22
|
+
/** The longest start of `text` that fits in `width` columns. */
|
|
23
|
+
export function sliceColumns(text, width) {
|
|
24
|
+
let slice = "";
|
|
25
|
+
let columns = 0;
|
|
26
|
+
for (const { segment } of GRAPHEMES.segment(text)) {
|
|
27
|
+
columns += graphemeColumns(segment);
|
|
28
|
+
if (columns > width)
|
|
29
|
+
break;
|
|
30
|
+
slice += segment;
|
|
31
|
+
}
|
|
32
|
+
return slice;
|
|
33
|
+
}
|
|
34
|
+
/** `text` cut to `width` columns, ending in "…" when cut. */
|
|
35
|
+
export function truncateColumns(text, width) {
|
|
36
|
+
if (columnsOf(text) <= width)
|
|
37
|
+
return text;
|
|
38
|
+
return width <= 0 ? "" : `${sliceColumns(text, width - 1)}…`;
|
|
39
|
+
}
|
|
40
|
+
/** `text` with spaces after it up to `width` columns (never cut). */
|
|
41
|
+
export function padEndColumns(text, width) {
|
|
42
|
+
return text + " ".repeat(Math.max(0, width - columnsOf(text)));
|
|
43
|
+
}
|
|
44
|
+
/** `text` with spaces before it up to `width` columns (never cut). */
|
|
45
|
+
export function padStartColumns(text, width) {
|
|
46
|
+
return " ".repeat(Math.max(0, width - columnsOf(text))) + text;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../src/view/columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,6FAA6F;AAC7F,MAAM,IAAI,GACR,wKAAwK,CAAC;AAC3K,MAAM,KAAK,GAAG,gCAAgC,CAAC;AAC/C,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK;YAAE,MAAM;QAC3B,KAAK,IAAI,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACvD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words and numbers every quota and usage surface shows: percents, reset times, bars, amounts,
|
|
3
|
+
* money, token counts and shares. Pure functions, shared by the TUI, the Web text and the CLI.
|
|
4
|
+
* Money, token counts and shares are written the way T3 Code's usage page writes them, always
|
|
5
|
+
* in US English, so the text is the same on every machine.
|
|
6
|
+
*/
|
|
7
|
+
import type { Amount, QuotaRow, ResetStyle, SessionTokens, Words } from "../core/types.js";
|
|
8
|
+
/** "$1,234.56", "$0.00", and "<$0.01" for an amount above 0 that would show as $0.00. */
|
|
9
|
+
export declare function formatUsd(usd: number): string;
|
|
10
|
+
/** Whole below 1,000, then always three significant digits: "950", "12.3K", "8.00M", "13.4B". */
|
|
11
|
+
export declare function formatTokens(count: number): string;
|
|
12
|
+
/** A 0..1 share with one decimal: "92.5%", "5.0%", "100.0%"; "<0.1%" above 0; "0%" for 0. */
|
|
13
|
+
export declare function formatShare(share: number): string;
|
|
14
|
+
/** The words until the server sends its own (docs/v6-build.local.md §5). */
|
|
15
|
+
export declare const DEFAULT_WORDS: Words;
|
|
16
|
+
/** The word after a percent ("left", "used", or "" for the bare style). */
|
|
17
|
+
export declare function percentWord(words: Words): string;
|
|
18
|
+
/** "58% left", "42% used", or "58%" without the word. */
|
|
19
|
+
export declare function percentText(words: Words, percentRemaining: number, withWord: boolean): string;
|
|
20
|
+
/**
|
|
21
|
+
* docs/v6-plan.local.md §4.7. Zero units are dropped in every style; the past is "now".
|
|
22
|
+
* "smart" rounds to the nearest: a day or more in days with one decimal ("4.5d"), from 12 hours
|
|
23
|
+
* in whole hours ("23h"), below that like "exact" ("11h 35m"). A time that rounds to 24 hours
|
|
24
|
+
* is "1.0d".
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatDuration(ms: number, style: ResetStyle, decimals: number): string;
|
|
27
|
+
/** The time until a row resets, in the words' style; "" when the row has no reset time. */
|
|
28
|
+
export declare function resetText(row: QuotaRow, nowMs: number, words: Words): string;
|
|
29
|
+
export type BarShape = "blocks" | "shades" | "line" | "squares" | "dots" | "none";
|
|
30
|
+
/** A bar in two parts (left, used), so each can have its own color. */
|
|
31
|
+
export declare function barParts(shape: BarShape, percentRemaining: number, width: number): [string, string];
|
|
32
|
+
/**
|
|
33
|
+
* The cell of a bar `width` cells wide where even use would be (the │ mark): `evenLeft` is the
|
|
34
|
+
* percent even use leaves now (`core/pace.ts`).
|
|
35
|
+
*/
|
|
36
|
+
export declare function evenUseCell(evenLeft: number, width: number): number;
|
|
37
|
+
export type Level = "good" | "warning" | "low";
|
|
38
|
+
export type Thresholds = {
|
|
39
|
+
warningBelow: number;
|
|
40
|
+
lowBelow: number;
|
|
41
|
+
};
|
|
42
|
+
/** Plenty left, getting low, or almost out. */
|
|
43
|
+
export declare function levelOf(percentRemaining: number, thresholds: Thresholds): Level;
|
|
44
|
+
/**
|
|
45
|
+
* "$12.40", "12.40 EUR", "1 request", "1,200 requests", "30 nano". A count unit is one word
|
|
46
|
+
* ("request"); it is plural for every number but 1, and the plain "unit" is not shown.
|
|
47
|
+
*/
|
|
48
|
+
export declare function amountText(amount: Amount): string;
|
|
49
|
+
/** The value of a row without a percent: its text, amount, used/limit, or yes/no. */
|
|
50
|
+
export declare function rowValueText(row: QuotaRow): string;
|
|
51
|
+
/** "12.3K in · 2.10K out". */
|
|
52
|
+
export declare function sessionTokensText(tokens: SessionTokens): string;
|
|
53
|
+
/** Marks a low cache hit. */
|
|
54
|
+
export declare const LOW_CACHE_MARK = "\u26A0";
|
|
55
|
+
/** A model's input tokens by kind: new input, cache reads and cache writes. */
|
|
56
|
+
export type InputTokens = {
|
|
57
|
+
input: number;
|
|
58
|
+
cacheRead: number;
|
|
59
|
+
cacheWrite: number;
|
|
60
|
+
};
|
|
61
|
+
/** The share of a model's input tokens read from the cache. */
|
|
62
|
+
export type CacheHit = {
|
|
63
|
+
/** Cache reads ÷ all input tokens. */
|
|
64
|
+
share: number;
|
|
65
|
+
/** Whole percents, rounded down so a low cache hit never reads "50%": "35%". */
|
|
66
|
+
text: string;
|
|
67
|
+
/** At least 200K input tokens: enough to tell a good cache hit from a low one. */
|
|
68
|
+
judged: boolean;
|
|
69
|
+
/** Judged, and less than half of the input tokens read from the cache. */
|
|
70
|
+
low: boolean;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* The cache hit of `tokens`; undefined without input tokens, or without cache reads and cache
|
|
74
|
+
* writes (the provider reports no cache numbers).
|
|
75
|
+
*/
|
|
76
|
+
export declare function cacheHit(tokens: InputTokens): CacheHit | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* `text` cut to `width` terminal columns with "…" ("Copilot…", not "Copilot …"), else padded
|
|
79
|
+
* to it. Wide characters count two columns and are never split.
|
|
80
|
+
*/
|
|
81
|
+
export declare function fit(text: string, width: number): string;
|
|
82
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/view/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAU3F,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AASF,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEhD;AAOD,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAK7F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBtF;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAI5E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAUlF,uEAAuE;AACvE,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,EACf,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,MAAM,GACZ,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,+CAA+C;AAC/C,wBAAgB,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,KAAK,CAI/E;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAejD;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAYlD;AAED,8BAA8B;AAC9B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE/D;AAMD,6BAA6B;AAC7B,eAAO,MAAM,cAAc,WAAM,CAAC;AAElC,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,+DAA+D;AAC/D,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAWlE;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { columnsOf, padEndColumns, sliceColumns } from "./columns.js";
|
|
2
|
+
const USD = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" });
|
|
3
|
+
const COMPACT = new Intl.NumberFormat("en-US", {
|
|
4
|
+
notation: "compact",
|
|
5
|
+
minimumSignificantDigits: 3,
|
|
6
|
+
maximumSignificantDigits: 3,
|
|
7
|
+
});
|
|
8
|
+
/** "$1,234.56", "$0.00", and "<$0.01" for an amount above 0 that would show as $0.00. */
|
|
9
|
+
export function formatUsd(usd) {
|
|
10
|
+
const text = USD.format(usd);
|
|
11
|
+
return usd > 0 && text === "$0.00" ? "<$0.01" : text;
|
|
12
|
+
}
|
|
13
|
+
/** Whole below 1,000, then always three significant digits: "950", "12.3K", "8.00M", "13.4B". */
|
|
14
|
+
export function formatTokens(count) {
|
|
15
|
+
const whole = Math.round(count);
|
|
16
|
+
return whole < 1000 ? String(whole) : COMPACT.format(whole);
|
|
17
|
+
}
|
|
18
|
+
/** A 0..1 share with one decimal: "92.5%", "5.0%", "100.0%"; "<0.1%" above 0; "0%" for 0. */
|
|
19
|
+
export function formatShare(share) {
|
|
20
|
+
if (share === 0)
|
|
21
|
+
return "0%";
|
|
22
|
+
const text = (share * 100).toFixed(1);
|
|
23
|
+
return share > 0 && text === "0.0" ? "<0.1%" : `${text}%`;
|
|
24
|
+
}
|
|
25
|
+
/** The words until the server sends its own (docs/v6-build.local.md §5). */
|
|
26
|
+
export const DEFAULT_WORDS = {
|
|
27
|
+
percent: "left",
|
|
28
|
+
reset: "smart",
|
|
29
|
+
resetDecimals: 1,
|
|
30
|
+
rowNames: "short",
|
|
31
|
+
detail: "summary",
|
|
32
|
+
onlyCurrentModel: false,
|
|
33
|
+
sessionTokens: "current",
|
|
34
|
+
};
|
|
35
|
+
const PERCENT_WORDS = {
|
|
36
|
+
left: "left",
|
|
37
|
+
remaining: "remaining",
|
|
38
|
+
bare: "",
|
|
39
|
+
used: "used",
|
|
40
|
+
};
|
|
41
|
+
/** The word after a percent ("left", "used", or "" for the bare style). */
|
|
42
|
+
export function percentWord(words) {
|
|
43
|
+
return PERCENT_WORDS[words.percent];
|
|
44
|
+
}
|
|
45
|
+
/** A raw percent left as a whole number from 0 to 100. */
|
|
46
|
+
function clampPercent(percent) {
|
|
47
|
+
return Math.max(0, Math.min(100, Math.round(percent)));
|
|
48
|
+
}
|
|
49
|
+
/** "58% left", "42% used", or "58%" without the word. */
|
|
50
|
+
export function percentText(words, percentRemaining, withWord) {
|
|
51
|
+
const left = clampPercent(percentRemaining);
|
|
52
|
+
const value = words.percent === "used" ? 100 - left : left;
|
|
53
|
+
const word = withWord ? percentWord(words) : "";
|
|
54
|
+
return word ? `${value}% ${word}` : `${value}%`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* docs/v6-plan.local.md §4.7. Zero units are dropped in every style; the past is "now".
|
|
58
|
+
* "smart" rounds to the nearest: a day or more in days with one decimal ("4.5d"), from 12 hours
|
|
59
|
+
* in whole hours ("23h"), below that like "exact" ("11h 35m"). A time that rounds to 24 hours
|
|
60
|
+
* is "1.0d".
|
|
61
|
+
*/
|
|
62
|
+
export function formatDuration(ms, style, decimals) {
|
|
63
|
+
if (!(ms > 0))
|
|
64
|
+
return "now";
|
|
65
|
+
const minutes = Math.ceil(ms / 60_000);
|
|
66
|
+
if (style === "smart" && minutes >= 720) {
|
|
67
|
+
const hours = Math.round(minutes / 60);
|
|
68
|
+
return hours < 24 ? `${hours}h` : `${(Math.round(minutes / 144) / 10).toFixed(1)}d`;
|
|
69
|
+
}
|
|
70
|
+
if (style === "decimal") {
|
|
71
|
+
return minutes >= 1440
|
|
72
|
+
? `${(minutes / 1440).toFixed(decimals)}d`
|
|
73
|
+
: `${(minutes / 60).toFixed(decimals)}h`;
|
|
74
|
+
}
|
|
75
|
+
const days = Math.floor(minutes / 1440);
|
|
76
|
+
const hours = Math.floor((minutes % 1440) / 60);
|
|
77
|
+
const rest = minutes % 60;
|
|
78
|
+
let parts = [days && `${days}d`, hours && `${hours}h`, rest && `${rest}m`].filter((part) => Boolean(part));
|
|
79
|
+
if (style === "short")
|
|
80
|
+
parts = parts.slice(0, days ? 2 : 1);
|
|
81
|
+
return parts.join(style === "compact" ? "" : " ");
|
|
82
|
+
}
|
|
83
|
+
/** The time until a row resets, in the words' style; "" when the row has no reset time. */
|
|
84
|
+
export function resetText(row, nowMs, words) {
|
|
85
|
+
const resetMs = Date.parse(row.resetsAt ?? "");
|
|
86
|
+
if (!Number.isFinite(resetMs))
|
|
87
|
+
return "";
|
|
88
|
+
return formatDuration(resetMs - nowMs, words.reset, words.resetDecimals);
|
|
89
|
+
}
|
|
90
|
+
const BAR_CHARACTERS = {
|
|
91
|
+
blocks: ["█", "░"],
|
|
92
|
+
shades: ["▓", "░"],
|
|
93
|
+
line: ["━", "─"],
|
|
94
|
+
squares: ["■", "□"],
|
|
95
|
+
dots: ["●", "○"],
|
|
96
|
+
};
|
|
97
|
+
/** A bar in two parts (left, used), so each can have its own color. */
|
|
98
|
+
export function barParts(shape, percentRemaining, width) {
|
|
99
|
+
if (shape === "none" || width <= 0)
|
|
100
|
+
return ["", ""];
|
|
101
|
+
const [full, empty] = BAR_CHARACTERS[shape];
|
|
102
|
+
const filled = Math.round((clampPercent(percentRemaining) / 100) * width);
|
|
103
|
+
return [full.repeat(filled), empty.repeat(width - filled)];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The cell of a bar `width` cells wide where even use would be (the │ mark): `evenLeft` is the
|
|
107
|
+
* percent even use leaves now (`core/pace.ts`).
|
|
108
|
+
*/
|
|
109
|
+
export function evenUseCell(evenLeft, width) {
|
|
110
|
+
return Math.max(0, Math.min(width - 1, Math.round((evenLeft / 100) * width)));
|
|
111
|
+
}
|
|
112
|
+
/** Plenty left, getting low, or almost out. */
|
|
113
|
+
export function levelOf(percentRemaining, thresholds) {
|
|
114
|
+
const left = clampPercent(percentRemaining);
|
|
115
|
+
if (left < thresholds.lowBelow)
|
|
116
|
+
return "low";
|
|
117
|
+
return left < thresholds.warningBelow ? "warning" : "good";
|
|
118
|
+
}
|
|
119
|
+
function groupDigits(integer) {
|
|
120
|
+
return integer.replace(/\B(?=(\d{3})+(?!\d))/gu, ",");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* "$12.40", "12.40 EUR", "1 request", "1,200 requests", "30 nano". A count unit is one word
|
|
124
|
+
* ("request"); it is plural for every number but 1, and the plain "unit" is not shown.
|
|
125
|
+
*/
|
|
126
|
+
export function amountText(amount) {
|
|
127
|
+
const { unit } = amount;
|
|
128
|
+
if (unit.kind === "currency") {
|
|
129
|
+
const value = Number(amount.decimal);
|
|
130
|
+
const sign = value < 0 ? "-" : "";
|
|
131
|
+
const [integer = "0", cents = "00"] = Math.abs(value).toFixed(2).split(".");
|
|
132
|
+
const money = `${groupDigits(integer)}.${cents}`;
|
|
133
|
+
return unit.code === "USD" ? `${sign}$${money}` : `${sign}${money} ${unit.code}`;
|
|
134
|
+
}
|
|
135
|
+
const [integer = "0", fraction] = amount.decimal.replace(/^-/u, "").split(".");
|
|
136
|
+
const sign = amount.decimal.startsWith("-") ? "-" : "";
|
|
137
|
+
const number = `${sign}${groupDigits(integer)}${fraction ? `.${fraction}` : ""}`;
|
|
138
|
+
if (unit.kind === "custom")
|
|
139
|
+
return `${number} ${unit.symbol}`;
|
|
140
|
+
if (unit.unit === "unit")
|
|
141
|
+
return number;
|
|
142
|
+
return `${number} ${integer === "1" && !fraction ? unit.unit : `${unit.unit}s`}`;
|
|
143
|
+
}
|
|
144
|
+
/** The value of a row without a percent: its text, amount, used/limit, or yes/no. */
|
|
145
|
+
export function rowValueText(row) {
|
|
146
|
+
if (row.text !== undefined)
|
|
147
|
+
return row.text;
|
|
148
|
+
if (row.amount) {
|
|
149
|
+
const amount = amountText(row.amount);
|
|
150
|
+
if (row.type === "balance")
|
|
151
|
+
return `${amount} left`;
|
|
152
|
+
return row.type === "usage" ? `${amount} used` : amount;
|
|
153
|
+
}
|
|
154
|
+
if (row.remaining)
|
|
155
|
+
return `${amountText(row.remaining)} left`;
|
|
156
|
+
if (row.used && row.limit)
|
|
157
|
+
return `${amountText(row.used)}/${amountText(row.limit)}`;
|
|
158
|
+
if (row.used)
|
|
159
|
+
return `${amountText(row.used)} used`;
|
|
160
|
+
if (row.flag !== undefined)
|
|
161
|
+
return row.flag ? "Enabled" : "Disabled";
|
|
162
|
+
return "";
|
|
163
|
+
}
|
|
164
|
+
/** "12.3K in · 2.10K out". */
|
|
165
|
+
export function sessionTokensText(tokens) {
|
|
166
|
+
return `${formatTokens(tokens.input)} in · ${formatTokens(tokens.output)} out`;
|
|
167
|
+
}
|
|
168
|
+
/** A model's cache hit can be low once it read this many input tokens. */
|
|
169
|
+
const LOW_CACHE_MIN_INPUT_TOKENS = 200_000;
|
|
170
|
+
/** A cache hit below this share is low. */
|
|
171
|
+
const LOW_CACHE_HIT_BELOW = 0.5;
|
|
172
|
+
/** Marks a low cache hit. */
|
|
173
|
+
export const LOW_CACHE_MARK = "⚠";
|
|
174
|
+
/**
|
|
175
|
+
* The cache hit of `tokens`; undefined without input tokens, or without cache reads and cache
|
|
176
|
+
* writes (the provider reports no cache numbers).
|
|
177
|
+
*/
|
|
178
|
+
export function cacheHit(tokens) {
|
|
179
|
+
const allInput = tokens.input + tokens.cacheRead + tokens.cacheWrite;
|
|
180
|
+
if (allInput <= 0 || tokens.cacheRead + tokens.cacheWrite <= 0)
|
|
181
|
+
return undefined;
|
|
182
|
+
const share = tokens.cacheRead / allInput;
|
|
183
|
+
const judged = allInput >= LOW_CACHE_MIN_INPUT_TOKENS;
|
|
184
|
+
return {
|
|
185
|
+
share,
|
|
186
|
+
text: `${Math.floor((tokens.cacheRead * 100) / allInput)}%`,
|
|
187
|
+
judged,
|
|
188
|
+
low: judged && share < LOW_CACHE_HIT_BELOW,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* `text` cut to `width` terminal columns with "…" ("Copilot…", not "Copilot …"), else padded
|
|
193
|
+
* to it. Wide characters count two columns and are never split.
|
|
194
|
+
*/
|
|
195
|
+
export function fit(text, width) {
|
|
196
|
+
if (width <= 0)
|
|
197
|
+
return "";
|
|
198
|
+
const cut = columnsOf(text) > width ? `${sliceColumns(text, width - 1).trimEnd()}…` : text;
|
|
199
|
+
return padEndColumns(cut, width);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/view/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { QuotaSnapshot } from "../core/types.js";
|
|
2
|
+
import type { UsageReport } from "../core/usage.js";
|
|
3
|
+
import { type UsageRange } from "../core/usage-ranges.js";
|
|
4
|
+
import { type RowSettings } from "./select.js";
|
|
5
|
+
/** The range of the usage `/quota` shows. */
|
|
6
|
+
export declare const DEFAULT_QUICK_LOOK_RANGE: Exclude<UsageRange, "between">;
|
|
7
|
+
type QuickLookTextInput = {
|
|
8
|
+
snapshot: QuotaSnapshot | undefined;
|
|
9
|
+
usage: UsageReport | undefined;
|
|
10
|
+
settings: RowSettings;
|
|
11
|
+
nowMs: number;
|
|
12
|
+
/** The columns a line may take; without it lines are as long as they get. */
|
|
13
|
+
width?: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The matching table: the quota providers an OpenCode provider id (a model's `providerID`,
|
|
17
|
+
* like "github-copilot" or "zai-coding-plan") stands for. The id itself (a custom provider
|
|
18
|
+
* named after it), then every quota provider that lists it among its OpenCode ids.
|
|
19
|
+
*/
|
|
20
|
+
export declare function quotaProviderIdsOfUsage(usageProviderID: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* The short text: the range and totals, then one line per provider with its limits and its
|
|
23
|
+
* cost. Pace words show when the quota runs out before its reset. With `width`, a line that
|
|
24
|
+
* would be wider goes on under itself, never inside an amount or a limit.
|
|
25
|
+
*/
|
|
26
|
+
export declare function quickLookText(input: QuickLookTextInput): string;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=quick-look.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-look.d.ts","sourceRoot":"","sources":["../../src/view/quick-look.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAe3E,OAAO,EAAc,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAG1E,6CAA6C;AAC7C,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,CAAQ,CAAC;AAE7E,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAWF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzE;AA2GD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAuC/D"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/quota` text of Web and Desktop: the quotas next to what OpenCode's own history used.
|
|
3
|
+
* Pure. One block per provider: a provider OpenCode used gets its cost and, when quota checks it
|
|
4
|
+
* too, its limits; a quota provider OpenCode did not use gets only its limits.
|
|
5
|
+
* `quotaProviderIdsOfUsage` matches the two.
|
|
6
|
+
*/
|
|
7
|
+
import { describeError } from "../core/errors.js";
|
|
8
|
+
import { paceOf, paceText } from "../core/pace.js";
|
|
9
|
+
import { usageRangeLabel } from "../core/usage-ranges.js";
|
|
10
|
+
import { WINDOWS } from "../core/windows.js";
|
|
11
|
+
import { getQuotaProviderDisplayLabel, getQuotaProviderIdsForRuntimeId, } from "../lib/provider-metadata.js";
|
|
12
|
+
import { columnsOf } from "./columns.js";
|
|
13
|
+
import { DEFAULT_WORDS, fit, formatTokens, formatUsd, percentText, rowValueText, } from "./format.js";
|
|
14
|
+
import { visibleGroups } from "./select.js";
|
|
15
|
+
import { costText } from "./usage.js";
|
|
16
|
+
/** The range of the usage `/quota` shows. */
|
|
17
|
+
export const DEFAULT_QUICK_LOOK_RANGE = "7d";
|
|
18
|
+
/** A limit label is cut to this many columns. */
|
|
19
|
+
const LABEL_MAX_WIDTH = 16;
|
|
20
|
+
const TEXT_NAME_MAX = 20;
|
|
21
|
+
/** A short-text line that goes on under the one before starts this far in. */
|
|
22
|
+
const TEXT_CONTINUE = " ";
|
|
23
|
+
/**
|
|
24
|
+
* The matching table: the quota providers an OpenCode provider id (a model's `providerID`,
|
|
25
|
+
* like "github-copilot" or "zai-coding-plan") stands for. The id itself (a custom provider
|
|
26
|
+
* named after it), then every quota provider that lists it among its OpenCode ids.
|
|
27
|
+
*/
|
|
28
|
+
export function quotaProviderIdsOfUsage(usageProviderID) {
|
|
29
|
+
return [usageProviderID, ...getQuotaProviderIdsForRuntimeId(usageProviderID)];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The quota group serves what OpenCode used under `usageProviderID`: its quota provider is one
|
|
33
|
+
* that id stands for, or it shows a custom definition serving that id (`customRowProviders`).
|
|
34
|
+
*/
|
|
35
|
+
function groupServesUsage(group, usageProviderID, customRowProviders) {
|
|
36
|
+
if (quotaProviderIdsOfUsage(usageProviderID).includes(group.providerId))
|
|
37
|
+
return true;
|
|
38
|
+
const prefixes = Object.keys(customRowProviders).filter((prefix) => customRowProviders[prefix] === usageProviderID);
|
|
39
|
+
return group.rows.some(({ row }) => prefixes.some((prefix) => row.id.startsWith(prefix)));
|
|
40
|
+
}
|
|
41
|
+
/** There are providers, but `onlyCurrentModel` hides them all: none serves the session's model. */
|
|
42
|
+
function servesNoCurrentModel(snapshot) {
|
|
43
|
+
return snapshot.providers.length > 0 && (snapshot.words ?? DEFAULT_WORDS).onlyCurrentModel;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The providers and rows `/quota` shows: the sidebar's, and with `onlyCurrentModel` only
|
|
47
|
+
* those serving the session's current model.
|
|
48
|
+
*/
|
|
49
|
+
function quotaGroups(snapshot, settings) {
|
|
50
|
+
if (!snapshot)
|
|
51
|
+
return [];
|
|
52
|
+
return visibleGroups(snapshot, settings, "sidebar", snapshot.words ?? DEFAULT_WORDS);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* One block per provider OpenCode used (most cost, or most tokens, first) with the quota groups
|
|
56
|
+
* it matches, then one per quota group no used provider matched, in the sidebar's order.
|
|
57
|
+
*/
|
|
58
|
+
function blocksOf(groups, snapshot, report, mode) {
|
|
59
|
+
const customRowProviders = snapshot?.customRowProviders ?? {};
|
|
60
|
+
const used = (report?.providers ?? []).filter((row) => row.tokens > 0);
|
|
61
|
+
const ordered = mode === "cost" ? used : [...used].sort((a, b) => b.tokens - a.tokens);
|
|
62
|
+
const claimed = new Set();
|
|
63
|
+
const usedBlocks = ordered.map((row) => {
|
|
64
|
+
const own = groups.filter((group) => !claimed.has(group) && groupServesUsage(group, row.providerID, customRowProviders));
|
|
65
|
+
for (const group of own)
|
|
66
|
+
claimed.add(group);
|
|
67
|
+
const index = report?.providers.indexOf(row) ?? 0;
|
|
68
|
+
// One group: its title names the account ("Custom providers (Team)").
|
|
69
|
+
const name = own.length === 1 ? own[0].title : own[0]?.name;
|
|
70
|
+
return {
|
|
71
|
+
name: name ?? getQuotaProviderDisplayLabel(row.providerID),
|
|
72
|
+
dot: `provider:${index}`,
|
|
73
|
+
usage: row,
|
|
74
|
+
groups: own,
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
const unused = groups.filter((group) => !claimed.has(group));
|
|
78
|
+
const quotaBlocks = unused.map((group, index) => ({
|
|
79
|
+
name: group.title,
|
|
80
|
+
dot: `provider:${(report?.providers.length ?? 0) + index}`,
|
|
81
|
+
groups: [group],
|
|
82
|
+
}));
|
|
83
|
+
return [...usedBlocks, ...quotaBlocks];
|
|
84
|
+
}
|
|
85
|
+
/** A group's error and its limits in a few words: "5h 41% left · 7d 68% left". */
|
|
86
|
+
function shortLimits(group, words, nowMs) {
|
|
87
|
+
const error = group.error ? [describeError(group.error, group.name, nowMs)] : [];
|
|
88
|
+
const limits = group.rows.map(({ row, label }) => {
|
|
89
|
+
const name = row.window ? WINDOWS[row.window].short : fit(label, LABEL_MAX_WIDTH).trimEnd();
|
|
90
|
+
if (row.percentRemaining === undefined)
|
|
91
|
+
return `${name} ${rowValueText(row)}`;
|
|
92
|
+
const percent = `${name} ${percentText(words, row.percentRemaining, true)}`;
|
|
93
|
+
const pace = paceOf(row, nowMs);
|
|
94
|
+
return pace?.kind === "fast" ? `${percent} ${paceText(pace, words)}` : percent;
|
|
95
|
+
});
|
|
96
|
+
return [...error, ...limits];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The pieces on lines of at most `width` columns: a piece never splits (a wider one gets a line
|
|
100
|
+
* of its own), and a line that goes on starts with `TEXT_CONTINUE`. No width: one line.
|
|
101
|
+
*/
|
|
102
|
+
function flowPieces(pieces, width) {
|
|
103
|
+
const lines = [];
|
|
104
|
+
let line = "";
|
|
105
|
+
for (const piece of pieces) {
|
|
106
|
+
const joined = line ? `${line}${piece.before}${piece.text}` : piece.text;
|
|
107
|
+
if (!line || width === undefined || columnsOf(joined) <= width) {
|
|
108
|
+
line = joined;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
lines.push(line.trimEnd());
|
|
112
|
+
line = `${TEXT_CONTINUE}${piece.text}`;
|
|
113
|
+
}
|
|
114
|
+
return line ? [...lines, line.trimEnd()] : lines;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The short text: the range and totals, then one line per provider with its limits and its
|
|
118
|
+
* cost. Pace words show when the quota runs out before its reset. With `width`, a line that
|
|
119
|
+
* would be wider goes on under itself, never inside an amount or a limit.
|
|
120
|
+
*/
|
|
121
|
+
export function quickLookText(input) {
|
|
122
|
+
const { usage, nowMs, width } = input;
|
|
123
|
+
const words = input.snapshot?.words ?? DEFAULT_WORDS;
|
|
124
|
+
const blocks = blocksOf(quotaGroups(input.snapshot, input.settings), input.snapshot, usage, "cost");
|
|
125
|
+
const header = [{ text: "Quota", before: "" }];
|
|
126
|
+
if (usage) {
|
|
127
|
+
const totals = usage.totals.tokens.processed > 0
|
|
128
|
+
? [formatUsd(usage.totals.costUsd), `${formatTokens(usage.totals.tokens.processed)} tokens`]
|
|
129
|
+
: ["no usage"];
|
|
130
|
+
for (const text of [usageRangeLabel(usage.range), ...totals])
|
|
131
|
+
header.push({ text, before: " · " });
|
|
132
|
+
}
|
|
133
|
+
const nameWidth = Math.min(TEXT_NAME_MAX, Math.max(0, ...blocks.map((block) => columnsOf(block.name))));
|
|
134
|
+
const lines = blocks.flatMap((block) => {
|
|
135
|
+
const limits = block.groups.flatMap((group) => shortLimits(group, words, nowMs));
|
|
136
|
+
const pieces = [
|
|
137
|
+
{ text: `● ${fit(block.name, nameWidth)}`, before: "" },
|
|
138
|
+
...limits.map((text, index) => ({ text, before: index === 0 ? " " : " · " })),
|
|
139
|
+
...(block.usage ? [{ text: costText(block.usage), before: " " }] : []),
|
|
140
|
+
];
|
|
141
|
+
return flowPieces(pieces, width);
|
|
142
|
+
});
|
|
143
|
+
if (lines.length === 0 && input.snapshot) {
|
|
144
|
+
lines.push(servesNoCurrentModel(input.snapshot)
|
|
145
|
+
? "No quota provider serves the session's current model. Run /quota_status to see why."
|
|
146
|
+
: "No quota providers found. Run /quota_status to see why.");
|
|
147
|
+
}
|
|
148
|
+
return [...flowPieces(header, width), ...lines].join("\n");
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=quick-look.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-look.js","sourceRoot":"","sources":["../../src/view/quick-look.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which providers and rows a surface shows, in which order and under which names. Pure:
|
|
3
|
+
* every surface (TUI, Web text, CLI) picks its rows here from the snapshot and the display
|
|
4
|
+
* settings.
|
|
5
|
+
*/
|
|
6
|
+
import type { QuotaError, QuotaRow, QuotaSnapshot, QuotaWindow, Words } from "../core/types.js";
|
|
7
|
+
export type Surface = "sidebar" | "collapsed" | "statusLine" | "toast";
|
|
8
|
+
/** What one surface shows. Ids not named in an order follow in the snapshot's order. */
|
|
9
|
+
export type SurfaceRows = {
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** Names selected from this surface's tab. */
|
|
12
|
+
names?: Record<string, string>;
|
|
13
|
+
/** Provider ids and row ids this surface leaves out. */
|
|
14
|
+
hidden: string[];
|
|
15
|
+
providerOrder: string[];
|
|
16
|
+
/** Row ids per provider id. */
|
|
17
|
+
rowOrder: Record<string, string[]>;
|
|
18
|
+
};
|
|
19
|
+
/** The window a provider shows in the collapsed sidebar and the status line. */
|
|
20
|
+
export type WindowChoice = "lowest" | QuotaWindow;
|
|
21
|
+
/** The part of the display settings that picks rows. */
|
|
22
|
+
export type RowSettings = {
|
|
23
|
+
/** Your names for rows, by row id. */
|
|
24
|
+
labels: Record<string, string>;
|
|
25
|
+
surfaces: Record<Surface, SurfaceRows>;
|
|
26
|
+
/**
|
|
27
|
+
* Preferred window by provider id, and by `ALL_PROVIDERS` for every other provider; "lowest"
|
|
28
|
+
* (the default) shows the row with the least left.
|
|
29
|
+
*/
|
|
30
|
+
window: Record<string, WindowChoice>;
|
|
31
|
+
};
|
|
32
|
+
/** A row as a place shows it: `label` is your name for it, or its own; `named` says you named it. */
|
|
33
|
+
export type VisibleRow = {
|
|
34
|
+
row: QuotaRow;
|
|
35
|
+
label: string;
|
|
36
|
+
named: boolean;
|
|
37
|
+
};
|
|
38
|
+
/** One provider account on a surface: its title, its rows, and its last error. */
|
|
39
|
+
export type Group = {
|
|
40
|
+
/** Provider id, or `${providerId} (account)` when it has several accounts. */
|
|
41
|
+
id: string;
|
|
42
|
+
providerId: string;
|
|
43
|
+
/** "Claude" or "Claude (work)". */
|
|
44
|
+
title: string;
|
|
45
|
+
name: string;
|
|
46
|
+
account?: string;
|
|
47
|
+
rows: VisibleRow[];
|
|
48
|
+
error?: QuotaError;
|
|
49
|
+
/** True before the provider was ever checked. */
|
|
50
|
+
unchecked: boolean;
|
|
51
|
+
};
|
|
52
|
+
/** `ids` first in the given order, then the rest in their own order. */
|
|
53
|
+
export declare function ordered<T>(items: readonly T[], idOf: (item: T) => string, order: readonly string[]): T[];
|
|
54
|
+
/** The providers and rows `surface` shows, in order, with your row names. */
|
|
55
|
+
export declare function visibleGroups(snapshot: QuotaSnapshot, settings: RowSettings, surface: Surface, words: Words): Group[];
|
|
56
|
+
/**
|
|
57
|
+
* The window a provider shows in the collapsed sidebar or the status line: its own pick, else the
|
|
58
|
+
* pick for all providers, else "lowest".
|
|
59
|
+
*/
|
|
60
|
+
export declare function windowFor(windows: Readonly<Record<string, WindowChoice>>, providerId: string): WindowChoice;
|
|
61
|
+
/**
|
|
62
|
+
* The one row a group shows in the collapsed sidebar and the status line: the preferred
|
|
63
|
+
* window's row; with "lowest", or when the group has no row of that window, the row with the
|
|
64
|
+
* least left; else the first row.
|
|
65
|
+
*/
|
|
66
|
+
export declare function pickRow(group: Pick<Group, "rows">, choice?: WindowChoice): VisibleRow | undefined;
|
|
67
|
+
//# sourceMappingURL=select.d.ts.map
|