@slkiser/opencode-quota 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -28
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +8 -0
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +78 -72
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/api-key-resolver.d.ts +73 -22
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +116 -39
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/atomic-json.d.ts +3 -1
- package/dist/lib/atomic-json.d.ts.map +1 -1
- package/dist/lib/atomic-json.js +23 -9
- package/dist/lib/atomic-json.js.map +1 -1
- package/dist/lib/chutes-config.d.ts.map +1 -1
- package/dist/lib/chutes-config.js +2 -4
- package/dist/lib/chutes-config.js.map +1 -1
- package/dist/lib/chutes.d.ts.map +1 -1
- package/dist/lib/chutes.js +28 -23
- package/dist/lib/chutes.js.map +1 -1
- package/dist/lib/cli-show.d.ts +9 -0
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +34 -5
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/cli-status.d.ts +8 -0
- package/dist/lib/cli-status.d.ts.map +1 -0
- package/dist/lib/cli-status.js +125 -0
- package/dist/lib/cli-status.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +47 -12
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts +11 -5
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +378 -79
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/deepseek-auth.d.ts.map +1 -1
- package/dist/lib/deepseek-auth.js +3 -7
- package/dist/lib/deepseek-auth.js.map +1 -1
- package/dist/lib/deepseek.d.ts.map +1 -1
- package/dist/lib/deepseek.js +22 -17
- package/dist/lib/deepseek.js.map +1 -1
- package/dist/lib/display-sanitize.d.ts.map +1 -1
- package/dist/lib/display-sanitize.js +8 -0
- package/dist/lib/display-sanitize.js.map +1 -1
- package/dist/lib/entries.d.ts +14 -0
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/format-utils.d.ts +7 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +18 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +22 -7
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/glm-coding-plan.d.ts +18 -0
- package/dist/lib/glm-coding-plan.d.ts.map +1 -0
- package/dist/lib/glm-coding-plan.js +68 -0
- package/dist/lib/glm-coding-plan.js.map +1 -0
- package/dist/lib/google-agy-companion.d.ts +4 -25
- package/dist/lib/google-agy-companion.d.ts.map +1 -1
- package/dist/lib/google-agy-companion.js +47 -272
- package/dist/lib/google-agy-companion.js.map +1 -1
- package/dist/lib/google-agy.d.ts.map +1 -1
- package/dist/lib/google-agy.js +204 -111
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/google-antigravity-companion.d.ts +4 -25
- package/dist/lib/google-antigravity-companion.d.ts.map +1 -1
- package/dist/lib/google-antigravity-companion.js +44 -283
- package/dist/lib/google-antigravity-companion.js.map +1 -1
- package/dist/lib/google-companion-credentials.d.ts +70 -0
- package/dist/lib/google-companion-credentials.d.ts.map +1 -0
- package/dist/lib/google-companion-credentials.js +265 -0
- package/dist/lib/google-companion-credentials.js.map +1 -0
- package/dist/lib/google-gemini-cli-companion.d.ts +4 -25
- package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli-companion.js +47 -258
- package/dist/lib/google-gemini-cli-companion.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +55 -61
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +87 -34
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +80 -84
- package/dist/lib/google.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +7 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/http.d.ts +12 -7
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +28 -15
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/init-installer.d.ts +2 -1
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +29 -2
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/kimi-auth.d.ts +3 -26
- package/dist/lib/kimi-auth.d.ts.map +1 -1
- package/dist/lib/kimi-auth.js +24 -91
- package/dist/lib/kimi-auth.js.map +1 -1
- package/dist/lib/kimi.d.ts.map +1 -1
- package/dist/lib/kimi.js +20 -15
- package/dist/lib/kimi.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +5 -0
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/map-with-concurrency.d.ts +2 -0
- package/dist/lib/map-with-concurrency.d.ts.map +1 -0
- package/dist/lib/map-with-concurrency.js +17 -0
- package/dist/lib/map-with-concurrency.js.map +1 -0
- package/dist/lib/mimo-config.d.ts +29 -0
- package/dist/lib/mimo-config.d.ts.map +1 -0
- package/dist/lib/mimo-config.js +147 -0
- package/dist/lib/mimo-config.js.map +1 -0
- package/dist/lib/mimo.d.ts +35 -0
- package/dist/lib/mimo.d.ts.map +1 -0
- package/dist/lib/mimo.js +236 -0
- package/dist/lib/mimo.js.map +1 -0
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +39 -27
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/nanogpt-config.d.ts.map +1 -1
- package/dist/lib/nanogpt-config.js +2 -4
- package/dist/lib/nanogpt-config.js.map +1 -1
- package/dist/lib/nanogpt.d.ts.map +1 -1
- package/dist/lib/nanogpt.js +40 -30
- package/dist/lib/nanogpt.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +1 -1
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +73 -68
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +53 -48
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +13 -16
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-config-read.d.ts +23 -0
- package/dist/lib/opencode-config-read.d.ts.map +1 -0
- package/dist/lib/opencode-config-read.js +30 -0
- package/dist/lib/opencode-config-read.js.map +1 -0
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +44 -39
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +34 -0
- package/dist/lib/opencode-zen-config.d.ts.map +1 -0
- package/dist/lib/opencode-zen-config.js +103 -0
- package/dist/lib/opencode-zen-config.js.map +1 -0
- package/dist/lib/opencode-zen.d.ts +27 -0
- package/dist/lib/opencode-zen.d.ts.map +1 -0
- package/dist/lib/opencode-zen.js +143 -0
- package/dist/lib/opencode-zen.js.map +1 -0
- package/dist/lib/openrouter.d.ts +13 -0
- package/dist/lib/openrouter.d.ts.map +1 -0
- package/dist/lib/openrouter.js +41 -0
- package/dist/lib/openrouter.js.map +1 -0
- package/dist/lib/provider-add-command.d.ts.map +1 -1
- package/dist/lib/provider-add-command.js +4 -12
- package/dist/lib/provider-add-command.js.map +1 -1
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts +32 -0
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +1 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js +336 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js.map +1 -0
- package/dist/lib/provider-availability.d.ts +2 -2
- package/dist/lib/provider-availability.d.ts.map +1 -1
- package/dist/lib/provider-availability.js +2 -3
- package/dist/lib/provider-availability.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +300 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +332 -227
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +12 -16
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +59 -2
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +73 -39
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-entry-display.d.ts +2 -0
- package/dist/lib/quota-entry-display.d.ts.map +1 -1
- package/dist/lib/quota-entry-display.js +27 -13
- package/dist/lib/quota-entry-display.js.map +1 -1
- package/dist/lib/quota-providers-remote.d.ts +0 -1
- package/dist/lib/quota-providers-remote.d.ts.map +1 -1
- package/dist/lib/quota-providers-remote.js +3 -16
- package/dist/lib/quota-providers-remote.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +4 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +118 -127
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts +9 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +5 -0
- package/dist/lib/quota-runtime-context.js.map +1 -1
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +25 -1
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-stats.d.ts +1 -0
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +14 -4
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts +7 -17
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +123 -948
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/runtime-provider-ids.d.ts +4 -0
- package/dist/lib/runtime-provider-ids.d.ts.map +1 -0
- package/dist/lib/runtime-provider-ids.js +10 -0
- package/dist/lib/runtime-provider-ids.js.map +1 -0
- package/dist/lib/session-tokens.d.ts +2 -0
- package/dist/lib/session-tokens.d.ts.map +1 -1
- package/dist/lib/session-tokens.js +4 -2
- package/dist/lib/session-tokens.js.map +1 -1
- package/dist/lib/synthetic-config.d.ts.map +1 -1
- package/dist/lib/synthetic-config.js +2 -4
- package/dist/lib/synthetic-config.js.map +1 -1
- package/dist/lib/synthetic.d.ts.map +1 -1
- package/dist/lib/synthetic.js +37 -32
- package/dist/lib/synthetic.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts +1 -0
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +33 -29
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-refresh-lifecycle.d.ts +17 -0
- package/dist/lib/tui-refresh-lifecycle.d.ts.map +1 -0
- package/dist/lib/tui-refresh-lifecycle.js +83 -0
- package/dist/lib/tui-refresh-lifecycle.js.map +1 -0
- package/dist/lib/tui-runtime.d.ts +0 -5
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +1 -6
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/tui-sidebar-format.d.ts +1 -1
- package/dist/lib/tui-sidebar-format.d.ts.map +1 -1
- package/dist/lib/tui-sidebar-format.js +1 -0
- package/dist/lib/tui-sidebar-format.js.map +1 -1
- package/dist/lib/types.d.ts +72 -8
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/xai.d.ts +39 -0
- package/dist/lib/xai.d.ts.map +1 -0
- package/dist/lib/xai.js +153 -0
- package/dist/lib/xai.js.map +1 -0
- package/dist/lib/zai-auth.d.ts +3 -26
- package/dist/lib/zai-auth.d.ts.map +1 -1
- package/dist/lib/zai-auth.js +24 -94
- package/dist/lib/zai-auth.js.map +1 -1
- package/dist/lib/zai.d.ts +1 -8
- package/dist/lib/zai.d.ts.map +1 -1
- package/dist/lib/zai.js +11 -91
- package/dist/lib/zai.js.map +1 -1
- package/dist/lib/zhipu-auth.d.ts +3 -26
- package/dist/lib/zhipu-auth.d.ts.map +1 -1
- package/dist/lib/zhipu-auth.js +24 -94
- package/dist/lib/zhipu-auth.js.map +1 -1
- package/dist/lib/zhipu.d.ts +1 -8
- package/dist/lib/zhipu.d.ts.map +1 -1
- package/dist/lib/zhipu.js +10 -84
- package/dist/lib/zhipu.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +20 -145
- package/dist/plugin.js.map +1 -1
- package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-coding-plan.js +33 -6
- package/dist/providers/alibaba-coding-plan.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +35 -7
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/chutes.d.ts.map +1 -1
- package/dist/providers/chutes.js +10 -3
- package/dist/providers/chutes.js.map +1 -1
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +102 -31
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/cursor.d.ts.map +1 -1
- package/dist/providers/cursor.js +34 -6
- package/dist/providers/cursor.js.map +1 -1
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js +10 -3
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/glm-coding-plan-provider.d.ts +44 -0
- package/dist/providers/glm-coding-plan-provider.d.ts.map +1 -0
- package/dist/providers/glm-coding-plan-provider.js +62 -0
- package/dist/providers/glm-coding-plan-provider.js.map +1 -0
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +83 -42
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/google-antigravity.d.ts.map +1 -1
- package/dist/providers/google-antigravity.js +31 -6
- package/dist/providers/google-antigravity.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/dist/providers/google-gemini-cli.js +24 -6
- package/dist/providers/google-gemini-cli.js.map +1 -1
- package/dist/providers/kimi-code.d.ts.map +1 -1
- package/dist/providers/kimi-code.js +27 -8
- package/dist/providers/kimi-code.js.map +1 -1
- package/dist/providers/mimo.d.ts +3 -0
- package/dist/providers/mimo.d.ts.map +1 -0
- package/dist/providers/mimo.js +127 -0
- package/dist/providers/mimo.js.map +1 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +68 -32
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +41 -4
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +20 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +33 -15
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts +3 -0
- package/dist/providers/opencode-zen.d.ts.map +1 -0
- package/dist/providers/opencode-zen.js +99 -0
- package/dist/providers/opencode-zen.js.map +1 -0
- package/dist/providers/openrouter.d.ts +6 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +25 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/quota-providers.d.ts.map +1 -1
- package/dist/providers/quota-providers.js +3 -3
- package/dist/providers/quota-providers.js.map +1 -1
- package/dist/providers/qwen-code.d.ts.map +1 -1
- package/dist/providers/qwen-code.js +19 -5
- package/dist/providers/qwen-code.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +8 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/result-helpers.d.ts +29 -1
- package/dist/providers/result-helpers.d.ts.map +1 -1
- package/dist/providers/result-helpers.js +69 -0
- package/dist/providers/result-helpers.js.map +1 -1
- package/dist/providers/synthetic.d.ts.map +1 -1
- package/dist/providers/synthetic.js +10 -3
- package/dist/providers/synthetic.js.map +1 -1
- package/dist/providers/xai.d.ts +6 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +51 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/providers/zai.d.ts +1 -7
- package/dist/providers/zai.d.ts.map +1 -1
- package/dist/providers/zai.js +11 -46
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zhipu.d.ts +1 -7
- package/dist/providers/zhipu.d.ts.map +1 -1
- package/dist/providers/zhipu.js +11 -46
- package/dist/providers/zhipu.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +47 -136
- package/dist/tui.tsx +62 -179
- package/package.json +1 -1
package/dist/lib/zhipu-auth.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { sanitizeDisplayText } from "./display-sanitize.js";
|
|
1
|
+
import { createProviderApiKeyResolver, getGlobalOpencodeConfigCandidatePaths, } from "./api-key-resolver.js";
|
|
3
2
|
import { getAuthPaths, readAuthFileCached } from "./opencode-auth.js";
|
|
4
3
|
export const DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS = 5_000;
|
|
5
4
|
const ZHIPU_AUTH_KEYS = ["zhipu-coding-plan", "zhipuai-coding-plan"];
|
|
@@ -11,102 +10,33 @@ const ZHIPU_PROVIDER_KEYS = [
|
|
|
11
10
|
];
|
|
12
11
|
const ALLOWED_ZHIPU_ENV_VARS = ["ZHIPU_API_KEY", "ZHIPU_CODING_PLAN_API_KEY"];
|
|
13
12
|
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
const zhipuAuthResolver = createProviderApiKeyResolver({
|
|
14
|
+
envVars: [
|
|
15
|
+
{ name: "ZHIPU_API_KEY", source: "env:ZHIPU_API_KEY" },
|
|
16
|
+
{ name: "ZHIPU_CODING_PLAN_API_KEY", source: "env:ZHIPU_CODING_PLAN_API_KEY" },
|
|
17
|
+
],
|
|
18
|
+
providerKeys: ZHIPU_PROVIDER_KEYS,
|
|
19
|
+
allowedEnvVars: ALLOWED_ZHIPU_ENV_VARS,
|
|
20
|
+
configJsonSource: "opencode.json",
|
|
21
|
+
configJsoncSource: "opencode.jsonc",
|
|
22
|
+
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
23
|
+
auth: {
|
|
24
|
+
policy: "invalid-aware-api-key",
|
|
25
|
+
authKeys: ZHIPU_AUTH_KEYS,
|
|
26
|
+
authSource: "auth.json",
|
|
27
|
+
displayName: "Zhipu",
|
|
28
|
+
defaultMaxAgeMs: DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS,
|
|
29
|
+
readAuth: (maxAgeMs) => readAuthFileCached({ maxAgeMs }),
|
|
30
|
+
getAuthPaths,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
24
33
|
export function resolveZhipuAuth(auth) {
|
|
25
|
-
|
|
26
|
-
if (zhipu === null || zhipu === undefined) {
|
|
27
|
-
return { state: "none" };
|
|
28
|
-
}
|
|
29
|
-
if (!isZhipuAuthData(zhipu)) {
|
|
30
|
-
return { state: "invalid", error: "Zhipu auth entry has invalid shape" };
|
|
31
|
-
}
|
|
32
|
-
if (typeof zhipu.type !== "string") {
|
|
33
|
-
return { state: "invalid", error: "Zhipu auth entry present but type is missing or invalid" };
|
|
34
|
-
}
|
|
35
|
-
if (zhipu.type !== "api") {
|
|
36
|
-
return {
|
|
37
|
-
state: "invalid",
|
|
38
|
-
error: `Unsupported Zhipu auth type: "${sanitizeZhipuAuthValue(zhipu.type)}"`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
const key = typeof zhipu.key === "string" ? zhipu.key.trim() : "";
|
|
42
|
-
if (!key) {
|
|
43
|
-
return { state: "invalid", error: "Zhipu auth entry present but key is empty" };
|
|
44
|
-
}
|
|
45
|
-
return { state: "configured", apiKey: key };
|
|
46
|
-
}
|
|
47
|
-
async function resolveZhipuAuthWithSource(params) {
|
|
48
|
-
const resolvedFromEnvOrConfig = await resolveApiKeyFromEnvAndConfig({
|
|
49
|
-
envVars: [
|
|
50
|
-
{ name: "ZHIPU_API_KEY", source: "env:ZHIPU_API_KEY" },
|
|
51
|
-
{
|
|
52
|
-
name: "ZHIPU_CODING_PLAN_API_KEY",
|
|
53
|
-
source: "env:ZHIPU_CODING_PLAN_API_KEY",
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
extractFromConfig: (config) => extractProviderOptionsApiKey(config, {
|
|
57
|
-
providerKeys: ZHIPU_PROVIDER_KEYS,
|
|
58
|
-
allowedEnvVars: ALLOWED_ZHIPU_ENV_VARS,
|
|
59
|
-
}),
|
|
60
|
-
configJsonSource: "opencode.json",
|
|
61
|
-
configJsoncSource: "opencode.jsonc",
|
|
62
|
-
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
63
|
-
});
|
|
64
|
-
if (resolvedFromEnvOrConfig) {
|
|
65
|
-
return {
|
|
66
|
-
auth: { state: "configured", apiKey: resolvedFromEnvOrConfig.key },
|
|
67
|
-
source: resolvedFromEnvOrConfig.source,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
const maxAgeMs = Math.max(0, params?.maxAgeMs ?? DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS);
|
|
71
|
-
const authData = await readAuthFileCached({ maxAgeMs });
|
|
72
|
-
const auth = resolveZhipuAuth(authData);
|
|
73
|
-
return {
|
|
74
|
-
auth,
|
|
75
|
-
source: auth.state === "none" ? null : "auth.json",
|
|
76
|
-
};
|
|
34
|
+
return zhipuAuthResolver.parseAuth(auth);
|
|
77
35
|
}
|
|
78
36
|
export async function resolveZhipuAuthCached(params) {
|
|
79
|
-
return (
|
|
37
|
+
return zhipuAuthResolver.resolve(params);
|
|
80
38
|
}
|
|
81
39
|
export async function getZhipuAuthDiagnostics(params) {
|
|
82
|
-
|
|
83
|
-
const checkedPaths = getApiKeyCheckedPaths({
|
|
84
|
-
envVarNames: [...ALLOWED_ZHIPU_ENV_VARS],
|
|
85
|
-
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
86
|
-
});
|
|
87
|
-
const authPaths = getAuthPaths();
|
|
88
|
-
if (auth.state === "none") {
|
|
89
|
-
return {
|
|
90
|
-
state: "none",
|
|
91
|
-
source: null,
|
|
92
|
-
checkedPaths,
|
|
93
|
-
authPaths,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
if (auth.state === "invalid") {
|
|
97
|
-
return {
|
|
98
|
-
state: "invalid",
|
|
99
|
-
source: "auth.json",
|
|
100
|
-
checkedPaths,
|
|
101
|
-
authPaths,
|
|
102
|
-
error: auth.error,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
return {
|
|
106
|
-
state: "configured",
|
|
107
|
-
source: source ?? "auth.json",
|
|
108
|
-
checkedPaths,
|
|
109
|
-
authPaths,
|
|
110
|
-
};
|
|
40
|
+
return zhipuAuthResolver.diagnostics(params);
|
|
111
41
|
}
|
|
112
42
|
//# sourceMappingURL=zhipu-auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu-auth.js","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,
|
|
1
|
+
{"version":3,"file":"zhipu-auth.js","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKtE,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AACzD,MAAM,eAAe,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAU,CAAC;AAC9E,MAAM,mBAAmB,GAAG;IAC1B,OAAO;IACP,mBAAmB;IACnB,qBAAqB;IACrB,iBAAiB;CACT,CAAC;AACX,MAAM,sBAAsB,GAAG,CAAC,eAAe,EAAE,2BAA2B,CAAU,CAAC;AAYvF,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAEjH,MAAM,iBAAiB,GAAG,4BAA4B,CAA8B;IAClF,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE;QACtD,EAAE,IAAI,EAAE,2BAA2B,EAAE,MAAM,EAAE,+BAA+B,EAAE;KAC/E;IACD,YAAY,EAAE,mBAAmB;IACjC,cAAc,EAAE,sBAAsB;IACtC,gBAAgB,EAAE,eAAe;IACjC,iBAAiB,EAAE,gBAAgB;IACnC,mBAAmB,EAAE,qCAAqC;IAC1D,IAAI,EAAE;QACJ,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,WAAW;QACvB,WAAW,EAAE,OAAO;QACpB,eAAe,EAAE,mCAAmC;QACpD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC;QACxD,YAAY;KACb;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,IAAiC;IAChE,OAAO,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAE5C;IACC,OAAO,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAE7C;IACC,OAAO,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/lib/zhipu.d.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zhipu quota fetcher
|
|
3
|
-
*
|
|
4
|
-
* Uses OpenCode's auth.json (zhipu-coding-plan) and queries:
|
|
5
|
-
* https://bigmodel.cn/api/monitor/usage/quota/limit
|
|
6
|
-
*/
|
|
7
|
-
import type { ZaiResult } from "./types.js";
|
|
8
1
|
export declare function queryZhipuQuota(options?: {
|
|
9
2
|
requestTimeoutMs?: number;
|
|
10
|
-
}): Promise<ZaiResult>;
|
|
3
|
+
}): Promise<import("./types.js").ZaiResult>;
|
|
11
4
|
//# sourceMappingURL=zhipu.d.ts.map
|
package/dist/lib/zhipu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zhipu.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,CAAC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,2CAE1E"}
|
package/dist/lib/zhipu.js
CHANGED
|
@@ -1,87 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
* Zhipu quota fetcher
|
|
3
|
-
*
|
|
4
|
-
* Uses OpenCode's auth.json (zhipu-coding-plan) and queries:
|
|
5
|
-
* https://bigmodel.cn/api/monitor/usage/quota/limit
|
|
6
|
-
*/
|
|
7
|
-
import { clampPercent } from "./format-utils.js";
|
|
8
|
-
import { sanitizeDisplaySnippet, sanitizeDisplayText } from "./display-sanitize.js";
|
|
9
|
-
import { fetchWithTimeout } from "./http.js";
|
|
1
|
+
import { queryGlmCodingPlanQuota } from "./glm-coding-plan.js";
|
|
10
2
|
import { resolveZhipuAuthCached } from "./zhipu-auth.js";
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const headers = {
|
|
21
|
-
Authorization: auth.apiKey,
|
|
22
|
-
"User-Agent": "OpenCode-Quota-Toast/1.0",
|
|
23
|
-
"Content-Type": "application/json",
|
|
24
|
-
};
|
|
25
|
-
const resp = await fetchWithTimeout(ZHIPU_QUOTA_URL, { headers }, options.requestTimeoutMs);
|
|
26
|
-
if (!resp.ok) {
|
|
27
|
-
const text = await resp.text();
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: `Zhipu API error ${resp.status}: ${sanitizeDisplaySnippet(text, 120)}`,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const data = (await resp.json());
|
|
34
|
-
const limits = data.data.limits;
|
|
35
|
-
if (!limits || !Array.isArray(limits)) {
|
|
36
|
-
return { success: false, error: "Invalid quota data" };
|
|
37
|
-
}
|
|
38
|
-
let fiveHourWindow;
|
|
39
|
-
let weeklyWindow;
|
|
40
|
-
let mcpWindow;
|
|
41
|
-
for (const limit of limits) {
|
|
42
|
-
const percentRemaining = clampPercent(100 - limit.percentage);
|
|
43
|
-
let resetTimeIso;
|
|
44
|
-
if (limit.nextResetTime) {
|
|
45
|
-
const ms = Math.round(limit.nextResetTime);
|
|
46
|
-
if (Number.isFinite(ms) && ms > 0) {
|
|
47
|
-
resetTimeIso = new Date(ms).toISOString();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
const window = { percentRemaining, resetTimeIso };
|
|
51
|
-
if (limit.type === "TOKENS_LIMIT") {
|
|
52
|
-
if (limit.unit === 3) {
|
|
53
|
-
// unit 3 is the 5-hour token window (Standard Lite/Pro/Max).
|
|
54
|
-
fiveHourWindow = window;
|
|
55
|
-
}
|
|
56
|
-
else if (limit.unit === 6) {
|
|
57
|
-
// unit 6 is the weekly token window.
|
|
58
|
-
weeklyWindow = window;
|
|
59
|
-
}
|
|
60
|
-
else if (limit.unit === 4) {
|
|
61
|
-
// unit 4 is daily. Do not surface it as weekly in the current UI/report shape.
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else if (limit.type === "TIME_LIMIT") {
|
|
66
|
-
// TIME_LIMIT (unit 5) is typically the Monthly MCP limit
|
|
67
|
-
mcpWindow = window;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
success: true,
|
|
72
|
-
label: "Zhipu",
|
|
73
|
-
windows: {
|
|
74
|
-
fiveHour: fiveHourWindow,
|
|
75
|
-
weekly: weeklyWindow,
|
|
76
|
-
mcp: mcpWindow,
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
return {
|
|
82
|
-
success: false,
|
|
83
|
-
error: sanitizeDisplayText(err instanceof Error ? err.message : String(err)),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
3
|
+
const ZHIPU_QUOTA = {
|
|
4
|
+
label: "Zhipu",
|
|
5
|
+
endpoint: "https://bigmodel.cn/api/monitor/usage/quota/limit",
|
|
6
|
+
httpErrorPrefix: "Zhipu API error",
|
|
7
|
+
envelope: "zhipu",
|
|
8
|
+
resolveAuth: resolveZhipuAuthCached,
|
|
9
|
+
};
|
|
10
|
+
export function queryZhipuQuota(options = {}) {
|
|
11
|
+
return queryGlmCodingPlanQuota(ZHIPU_QUOTA, options);
|
|
86
12
|
}
|
|
87
13
|
//# sourceMappingURL=zhipu.js.map
|
package/dist/lib/zhipu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu.js","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"zhipu.js","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mDAAmD;IAC7D,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,sBAAsB;CAC3B,CAAC;AAEX,MAAM,UAAU,eAAe,CAAC,UAAyC,EAAE;IACzE,OAAO,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAkMlD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAoiC9B,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -12,17 +12,15 @@ import { getOrFetchWithCacheControl } from "./lib/cache.js";
|
|
|
12
12
|
import { formatQuotaRows } from "./lib/format.js";
|
|
13
13
|
import { getProviders } from "./providers/registry.js";
|
|
14
14
|
import { tool } from "@opencode-ai/plugin";
|
|
15
|
-
import { buildQuotaStatusReport } from "./lib/quota-status.js";
|
|
16
15
|
import { inspectTuiConfig } from "./lib/tui-config-diagnostics.js";
|
|
17
16
|
import { maybeRefreshPricingSnapshot, setPricingSnapshotAutoRefresh, setPricingSnapshotSelection, } from "./lib/modelsdev-pricing.js";
|
|
18
|
-
import { refreshGoogleTokensForAllAccounts } from "./lib/google.js";
|
|
19
17
|
import { DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS, isAlibabaModelId, resolveAlibabaCodingPlanAuthCached, } from "./lib/alibaba-auth.js";
|
|
20
18
|
import { isQwenCodeModelId, resolveQwenLocalPlanCached } from "./lib/qwen-auth.js";
|
|
21
19
|
import { isCursorModelId, isCursorProviderId } from "./lib/cursor-pricing.js";
|
|
22
20
|
import { sanitizeDisplayText } from "./lib/display-sanitize.js";
|
|
23
|
-
import {
|
|
24
|
-
import { collectQuotaRenderData
|
|
25
|
-
import {
|
|
21
|
+
import { resolveQuotaFormatStyle } from "./lib/quota-format-style.js";
|
|
22
|
+
import { collectQuotaRenderData } from "./lib/quota-render-data.js";
|
|
23
|
+
import { createQuotaRuntimeRequestContext, resolveQuotaRuntimeContext, } from "./lib/quota-runtime-context.js";
|
|
26
24
|
import { findGitWorktreeRoot, getEffectiveConfigRoot } from "./lib/config-file-utils.js";
|
|
27
25
|
import { reconcileDetectedProvidersInGlobalConfig } from "./lib/opencode-config-providers.js";
|
|
28
26
|
import { BUNDLED_MAINTAINER_ANNOUNCEMENTS, formatMaintainerAnnouncementHomeCountLine, getMaintainerAnnouncementsSummary, } from "./lib/maintainer-announcements.js";
|
|
@@ -579,6 +577,7 @@ export const QuotaToastPlugin = async ({ client, directory }) => {
|
|
|
579
577
|
const quotaRequestContext = createQuotaRuntimeRequestContext(runtime);
|
|
580
578
|
const quotaResult = await collectQuotaRenderData({
|
|
581
579
|
client: runtime.client,
|
|
580
|
+
resolveRuntimeProviderIds: runtime.resolveRuntimeProviderIds,
|
|
582
581
|
config: runtimeConfig,
|
|
583
582
|
configMeta: runtime.configMeta,
|
|
584
583
|
request: quotaRequestContext,
|
|
@@ -632,6 +631,7 @@ export const QuotaToastPlugin = async ({ client, directory }) => {
|
|
|
632
631
|
errors: data?.errors ?? [],
|
|
633
632
|
style: resolveQuotaFormatStyle(runtimeConfig.formatStyle),
|
|
634
633
|
percentDisplayMode: runtimeConfig.percentDisplayMode,
|
|
634
|
+
resetTimeDecimals: runtimeConfig.resetTimeDecimals,
|
|
635
635
|
sessionTokens: data?.sessionTokens,
|
|
636
636
|
});
|
|
637
637
|
const retryableMaskedProviderFailure = !hasProviderQuotaRows && providerFetchFailureOnly;
|
|
@@ -721,10 +721,6 @@ export const QuotaToastPlugin = async ({ client, directory }) => {
|
|
|
721
721
|
detectedProviderIds,
|
|
722
722
|
};
|
|
723
723
|
}
|
|
724
|
-
async function fetchQuotaMessage(params) {
|
|
725
|
-
const result = await fetchQuotaMessageResult(params);
|
|
726
|
-
return result.message;
|
|
727
|
-
}
|
|
728
724
|
async function reconcileDeferredQuotaRefresh(params) {
|
|
729
725
|
const existing = deferredQuotaRefreshes.get(params.sessionID);
|
|
730
726
|
if (!params.result.retryable) {
|
|
@@ -859,135 +855,6 @@ export const QuotaToastPlugin = async ({ client, directory }) => {
|
|
|
859
855
|
}
|
|
860
856
|
}
|
|
861
857
|
}
|
|
862
|
-
async function buildStatusReport(params) {
|
|
863
|
-
const runtime = await resolvePluginRuntimeContext({
|
|
864
|
-
sessionID: params.sessionID,
|
|
865
|
-
includeSessionMeta: true,
|
|
866
|
-
});
|
|
867
|
-
const runtimeConfig = runtime.config;
|
|
868
|
-
if (!runtimeConfig.enabled)
|
|
869
|
-
return null;
|
|
870
|
-
await kickPricingRefresh({ reason: "status", maxWaitMs: 750 });
|
|
871
|
-
const currentSession = runtime.session.sessionMeta ?? {};
|
|
872
|
-
const currentModel = currentSession.modelID;
|
|
873
|
-
const currentProviderID = currentSession.providerID;
|
|
874
|
-
const sessionModelLookup = !params.sessionID
|
|
875
|
-
? "no_session"
|
|
876
|
-
: currentModel
|
|
877
|
-
? "ok"
|
|
878
|
-
: "not_found";
|
|
879
|
-
const isAutoMode = runtimeConfig.enabledProviders === "auto";
|
|
880
|
-
const providers = runtime.providers;
|
|
881
|
-
const providerContext = createQuotaProviderRuntimeContext(runtime);
|
|
882
|
-
const availability = await Promise.all(providers.map(async (p) => {
|
|
883
|
-
let ok = false;
|
|
884
|
-
try {
|
|
885
|
-
ok = await p.isAvailable(providerContext);
|
|
886
|
-
}
|
|
887
|
-
catch {
|
|
888
|
-
ok = false;
|
|
889
|
-
}
|
|
890
|
-
return {
|
|
891
|
-
id: p.id,
|
|
892
|
-
// In auto mode, a provider is effectively "enabled" if it's available.
|
|
893
|
-
enabled: isAutoMode ? ok : runtimeConfig.enabledProviders.includes(p.id),
|
|
894
|
-
available: ok,
|
|
895
|
-
matchesCurrentModel: currentModel || isCursorProviderId(currentProviderID)
|
|
896
|
-
? matchesQuotaProviderCurrentSelection({
|
|
897
|
-
provider: p,
|
|
898
|
-
currentModel,
|
|
899
|
-
currentProviderID,
|
|
900
|
-
enabledProviders: runtimeConfig.enabledProviders,
|
|
901
|
-
quotaProviders: runtimeConfig.quotaProviders,
|
|
902
|
-
})
|
|
903
|
-
: undefined,
|
|
904
|
-
};
|
|
905
|
-
}));
|
|
906
|
-
if (isAutoMode) {
|
|
907
|
-
await reconcileDetectedProviderConfig(availability.filter((item) => item.available).map((item) => item.id));
|
|
908
|
-
}
|
|
909
|
-
const providersById = new Map(providers.map((provider) => [provider.id, provider]));
|
|
910
|
-
const liveProbeProviders = availability.flatMap((item) => {
|
|
911
|
-
if (!item.enabled || !item.available) {
|
|
912
|
-
return [];
|
|
913
|
-
}
|
|
914
|
-
const provider = providersById.get(item.id);
|
|
915
|
-
return provider ? [provider] : [];
|
|
916
|
-
});
|
|
917
|
-
let providerLiveProbes = [];
|
|
918
|
-
if (liveProbeProviders.length > 0) {
|
|
919
|
-
try {
|
|
920
|
-
providerLiveProbes = await collectQuotaStatusLiveProbes({
|
|
921
|
-
client: runtime.client,
|
|
922
|
-
config: runtimeConfig,
|
|
923
|
-
configMeta: runtime.configMeta,
|
|
924
|
-
request: createQuotaRuntimeRequestContext(runtime),
|
|
925
|
-
formatStyle: SINGLE_WINDOW_PER_PROVIDER_FORMAT_STYLE,
|
|
926
|
-
providers: liveProbeProviders,
|
|
927
|
-
});
|
|
928
|
-
}
|
|
929
|
-
catch (error) {
|
|
930
|
-
await typedClient.app.log({
|
|
931
|
-
body: {
|
|
932
|
-
service: "quota-toast",
|
|
933
|
-
level: "warn",
|
|
934
|
-
message: "Failed to collect /quota_status live probes",
|
|
935
|
-
extra: {
|
|
936
|
-
providers: liveProbeProviders.map((provider) => provider.id),
|
|
937
|
-
error: error instanceof Error ? error.message : String(error),
|
|
938
|
-
},
|
|
939
|
-
},
|
|
940
|
-
});
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
const refresh = params.refreshGoogleTokens
|
|
944
|
-
? await refreshGoogleTokensForAllAccounts({ skewMs: params.skewMs, force: params.force })
|
|
945
|
-
: null;
|
|
946
|
-
const tuiDiagnostics = await inspectTuiConfig({ roots: runtime.roots });
|
|
947
|
-
const announcementProviderIds = availability
|
|
948
|
-
.filter((item) => item.enabled && item.available)
|
|
949
|
-
.map((item) => item.id);
|
|
950
|
-
const maintainerAnnouncementsSummary = getMaintainerAnnouncementsSummary({
|
|
951
|
-
enabledProviders: announcementProviderIds,
|
|
952
|
-
});
|
|
953
|
-
return await buildQuotaStatusReport({
|
|
954
|
-
tuiDiagnostics,
|
|
955
|
-
configSource: runtime.configMeta.source,
|
|
956
|
-
configPaths: runtime.configMeta.paths,
|
|
957
|
-
globalConfigPaths: runtime.configMeta.globalConfigPaths,
|
|
958
|
-
workspaceConfigPaths: runtime.configMeta.workspaceConfigPaths,
|
|
959
|
-
settingSources: runtime.configMeta.settingSources,
|
|
960
|
-
configIssues: runtime.configMeta.configIssues,
|
|
961
|
-
enabledProviders: runtimeConfig.enabledProviders,
|
|
962
|
-
anthropicBinaryPath: runtimeConfig.anthropicBinaryPath,
|
|
963
|
-
cursorPlan: runtimeConfig.cursorPlan,
|
|
964
|
-
cursorIncludedApiUsd: runtimeConfig.cursorIncludedApiUsd,
|
|
965
|
-
cursorBillingCycleStartDay: runtimeConfig.cursorBillingCycleStartDay,
|
|
966
|
-
opencodeGoWindows: runtimeConfig.opencodeGoWindows,
|
|
967
|
-
pricingSnapshotSource: runtimeConfig.pricingSnapshot.source,
|
|
968
|
-
onlyCurrentModel: runtimeConfig.onlyCurrentModel,
|
|
969
|
-
currentModel,
|
|
970
|
-
sessionModelLookup,
|
|
971
|
-
providerAvailability: availability,
|
|
972
|
-
providerLiveProbes,
|
|
973
|
-
quotaProviders: runtimeConfig.quotaProviders,
|
|
974
|
-
googleRefresh: refresh
|
|
975
|
-
? {
|
|
976
|
-
attempted: true,
|
|
977
|
-
total: refresh.total,
|
|
978
|
-
successCount: refresh.successCount,
|
|
979
|
-
failures: refresh.failures,
|
|
980
|
-
}
|
|
981
|
-
: { attempted: false },
|
|
982
|
-
sessionTokenError: lastSessionTokenError,
|
|
983
|
-
maintainerAnnouncements: {
|
|
984
|
-
config: runtimeConfig.maintainerAnnouncements,
|
|
985
|
-
summary: maintainerAnnouncementsSummary,
|
|
986
|
-
},
|
|
987
|
-
geminiCliClient: typedClient,
|
|
988
|
-
generatedAtMs: params.generatedAtMs,
|
|
989
|
-
});
|
|
990
|
-
}
|
|
991
858
|
// Return hook implementations
|
|
992
859
|
return {
|
|
993
860
|
config: async (input) => {
|
|
@@ -1025,17 +892,25 @@ export const QuotaToastPlugin = async ({ client, directory }) => {
|
|
|
1025
892
|
.describe("If true, refresh even if cached token looks valid"),
|
|
1026
893
|
},
|
|
1027
894
|
async execute(args, context) {
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
895
|
+
const result = await buildQuotaDialogCommandOutput({
|
|
896
|
+
command: "quota_status",
|
|
897
|
+
arguments: JSON.stringify({
|
|
898
|
+
refreshGoogleTokens: args.refreshGoogleTokens,
|
|
899
|
+
skewMs: args.skewMs,
|
|
900
|
+
force: args.force,
|
|
901
|
+
}),
|
|
902
|
+
client: typedClient,
|
|
903
|
+
roots: getPluginRuntimeRootHints(),
|
|
1032
904
|
sessionID: context.sessionID,
|
|
1033
|
-
|
|
905
|
+
resolveSessionMeta: (sessionID) => getSessionModelMeta(sessionID),
|
|
906
|
+
lastSessionTokenError,
|
|
907
|
+
log,
|
|
908
|
+
onDetectedProviderIds: reconcileDetectedProviderConfig,
|
|
1034
909
|
});
|
|
1035
|
-
if (
|
|
910
|
+
if (result.state !== "output")
|
|
1036
911
|
return "";
|
|
1037
912
|
context.metadata({ title: "Quota Status" });
|
|
1038
|
-
await injectRawOutput(context.sessionID,
|
|
913
|
+
await injectRawOutput(context.sessionID, result.output);
|
|
1039
914
|
return ""; // Empty return - output already injected with noReply
|
|
1040
915
|
},
|
|
1041
916
|
}),
|