@slkiser/opencode-quota 4.1.0 → 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 +84 -28
- 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 +102 -15
- package/dist/lib/api-key-resolver.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/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +82 -31
- 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/entries.d.ts +7 -4
- package/dist/lib/entries.d.ts.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 +7 -25
- 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 +2 -20
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +23 -45
- package/dist/lib/google.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/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/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/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-metadata.d.ts +11 -0
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +11 -0
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +3 -10
- package/dist/lib/quota-dialog-commands.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.map +1 -1
- package/dist/lib/quota-render-data.js +17 -6
- package/dist/lib/quota-render-data.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 +116 -1036
- package/dist/lib/quota-status.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/types.d.ts +11 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js.map +1 -1
- 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 -97
- 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 -89
- package/dist/lib/zhipu.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 +79 -29
- 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 +9 -0
- package/dist/providers/glm-coding-plan-provider.d.ts.map +1 -1
- package/dist/providers/glm-coding-plan-provider.js +24 -2
- package/dist/providers/glm-coding-plan-provider.js.map +1 -1
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +23 -6
- 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.map +1 -1
- package/dist/providers/mimo.js +12 -5
- package/dist/providers/mimo.js.map +1 -1
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +37 -6
- 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.map +1 -1
- package/dist/providers/opencode-zen.js +27 -22
- package/dist/providers/opencode-zen.js.map +1 -1
- 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.js +2 -1
- 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 +2 -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/zai.d.ts.map +1 -1
- package/dist/providers/zai.js +2 -1
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zhipu.d.ts.map +1 -1
- package/dist/providers/zhipu.js +2 -1
- package/dist/providers/zhipu.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/zai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAYA,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,2CAExE"}
|
package/dist/lib/zai.js
CHANGED
|
@@ -1,100 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
* Z.ai quota fetcher
|
|
3
|
-
*
|
|
4
|
-
* Uses OpenCode's auth.json (zai-coding-plan) and queries:
|
|
5
|
-
* https://api.z.ai/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 { resolveZaiAuthCached } from "./zai-auth.js";
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Authorization: auth.apiKey,
|
|
22
|
-
"User-Agent": "OpenCode-Quota-Toast/1.0",
|
|
23
|
-
"Content-Type": "application/json",
|
|
24
|
-
};
|
|
25
|
-
return await fetchWithTimeout(ZAI_QUOTA_URL, {
|
|
26
|
-
request: { headers },
|
|
27
|
-
timeoutMs: options.requestTimeoutMs,
|
|
28
|
-
consume: async (resp) => {
|
|
29
|
-
if (!resp.ok) {
|
|
30
|
-
const text = await resp.text();
|
|
31
|
-
return {
|
|
32
|
-
success: false,
|
|
33
|
-
error: `Z.ai API error ${resp.status}: ${sanitizeDisplaySnippet(text, 120)}`,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const data = (await resp.json());
|
|
37
|
-
if (data.success === false || (typeof data.code === "number" && data.code >= 400)) {
|
|
38
|
-
const msg = typeof data.msg === "string" ? sanitizeDisplayText(data.msg) : "";
|
|
39
|
-
return {
|
|
40
|
-
success: false,
|
|
41
|
-
error: msg ||
|
|
42
|
-
(typeof data.code === "number" ? `Z.ai API error ${data.code}` : "Z.ai API error"),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const limits = data.data?.limits ?? data.limits;
|
|
46
|
-
if (!limits || !Array.isArray(limits)) {
|
|
47
|
-
return { success: false, error: "Invalid quota data" };
|
|
48
|
-
}
|
|
49
|
-
let fiveHourWindow;
|
|
50
|
-
let weeklyWindow;
|
|
51
|
-
let mcpWindow;
|
|
52
|
-
for (const limit of limits) {
|
|
53
|
-
const percentRemaining = clampPercent(100 - limit.percentage);
|
|
54
|
-
let resetTimeIso;
|
|
55
|
-
if (limit.nextResetTime) {
|
|
56
|
-
const ms = Math.round(limit.nextResetTime);
|
|
57
|
-
if (Number.isFinite(ms) && ms > 0) {
|
|
58
|
-
resetTimeIso = new Date(ms).toISOString();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
const window = { percentRemaining, resetTimeIso };
|
|
62
|
-
if (limit.type === "TOKENS_LIMIT") {
|
|
63
|
-
if (limit.unit === 3) {
|
|
64
|
-
// unit 3 is the 5-hour token window (Standard Lite/Pro/Max).
|
|
65
|
-
fiveHourWindow = window;
|
|
66
|
-
}
|
|
67
|
-
else if (limit.unit === 6) {
|
|
68
|
-
// unit 6 is the weekly token window.
|
|
69
|
-
weeklyWindow = window;
|
|
70
|
-
}
|
|
71
|
-
else if (limit.unit === 4) {
|
|
72
|
-
// unit 4 is daily. Do not surface it as weekly in the current UI/report shape.
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else if (limit.type === "TIME_LIMIT") {
|
|
77
|
-
// TIME_LIMIT (unit 5) is typically the Monthly MCP limit
|
|
78
|
-
mcpWindow = window;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
success: true,
|
|
83
|
-
label: "Z.ai",
|
|
84
|
-
windows: {
|
|
85
|
-
fiveHour: fiveHourWindow,
|
|
86
|
-
weekly: weeklyWindow,
|
|
87
|
-
mcp: mcpWindow,
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
return {
|
|
95
|
-
success: false,
|
|
96
|
-
error: sanitizeDisplayText(err instanceof Error ? err.message : String(err)),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
3
|
+
const ZAI_QUOTA = {
|
|
4
|
+
label: "Z.ai",
|
|
5
|
+
endpoint: "https://api.z.ai/api/monitor/usage/quota/limit",
|
|
6
|
+
httpErrorPrefix: "Z.ai API error",
|
|
7
|
+
apiErrorPrefix: "Z.ai API error",
|
|
8
|
+
envelope: "zai",
|
|
9
|
+
resolveAuth: resolveZaiAuthCached,
|
|
10
|
+
};
|
|
11
|
+
export function queryZaiQuota(options = {}) {
|
|
12
|
+
return queryGlmCodingPlanQuota(ZAI_QUOTA, options);
|
|
99
13
|
}
|
|
100
14
|
//# sourceMappingURL=zai.js.map
|
package/dist/lib/zai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,gDAAgD;IAC1D,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,oBAAoB;CACzB,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,UAAyC,EAAE;IACvE,OAAO,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/lib/zhipu-auth.d.ts
CHANGED
|
@@ -1,32 +1,9 @@
|
|
|
1
|
+
import type { InvalidAwareAuthDiagnostics, InvalidAwareAuthResult } from "./api-key-resolver.js";
|
|
1
2
|
import type { AuthData } from "./types.js";
|
|
2
3
|
export declare const DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS = 5000;
|
|
3
4
|
export type ZhipuKeySource = "env:ZHIPU_API_KEY" | "env:ZHIPU_CODING_PLAN_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
|
|
4
|
-
export type ResolvedZhipuAuth =
|
|
5
|
-
|
|
6
|
-
} | {
|
|
7
|
-
state: "configured";
|
|
8
|
-
apiKey: string;
|
|
9
|
-
} | {
|
|
10
|
-
state: "invalid";
|
|
11
|
-
error: string;
|
|
12
|
-
};
|
|
13
|
-
export type ZhipuAuthDiagnostics = {
|
|
14
|
-
state: "none";
|
|
15
|
-
source: null;
|
|
16
|
-
checkedPaths: string[];
|
|
17
|
-
authPaths: string[];
|
|
18
|
-
} | {
|
|
19
|
-
state: "configured";
|
|
20
|
-
source: ZhipuKeySource;
|
|
21
|
-
checkedPaths: string[];
|
|
22
|
-
authPaths: string[];
|
|
23
|
-
} | {
|
|
24
|
-
state: "invalid";
|
|
25
|
-
source: "auth.json";
|
|
26
|
-
checkedPaths: string[];
|
|
27
|
-
authPaths: string[];
|
|
28
|
-
error: string;
|
|
29
|
-
};
|
|
5
|
+
export type ResolvedZhipuAuth = InvalidAwareAuthResult;
|
|
6
|
+
export type ZhipuAuthDiagnostics = InvalidAwareAuthDiagnostics<ZhipuKeySource, "auth.json">;
|
|
30
7
|
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
31
8
|
export declare function resolveZhipuAuth(auth: AuthData | null | undefined): ResolvedZhipuAuth;
|
|
32
9
|
export declare function resolveZhipuAuthCached(params?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zhipu-auth.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zhipu-auth.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAUzD,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,+BAA+B,GAC/B,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE5F,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAuBjH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAErF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAE7B;AAED,wBAAsB,uBAAuB,CAAC,MAAM,CAAC,EAAE;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEhC"}
|
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,92 +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
|
-
return await fetchWithTimeout(ZHIPU_QUOTA_URL, {
|
|
26
|
-
request: { headers },
|
|
27
|
-
timeoutMs: options.requestTimeoutMs,
|
|
28
|
-
consume: async (resp) => {
|
|
29
|
-
if (!resp.ok) {
|
|
30
|
-
const text = await resp.text();
|
|
31
|
-
return {
|
|
32
|
-
success: false,
|
|
33
|
-
error: `Zhipu API error ${resp.status}: ${sanitizeDisplaySnippet(text, 120)}`,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const data = (await resp.json());
|
|
37
|
-
const limits = data.data.limits;
|
|
38
|
-
if (!limits || !Array.isArray(limits)) {
|
|
39
|
-
return { success: false, error: "Invalid quota data" };
|
|
40
|
-
}
|
|
41
|
-
let fiveHourWindow;
|
|
42
|
-
let weeklyWindow;
|
|
43
|
-
let mcpWindow;
|
|
44
|
-
for (const limit of limits) {
|
|
45
|
-
const percentRemaining = clampPercent(100 - limit.percentage);
|
|
46
|
-
let resetTimeIso;
|
|
47
|
-
if (limit.nextResetTime) {
|
|
48
|
-
const ms = Math.round(limit.nextResetTime);
|
|
49
|
-
if (Number.isFinite(ms) && ms > 0) {
|
|
50
|
-
resetTimeIso = new Date(ms).toISOString();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const window = { percentRemaining, resetTimeIso };
|
|
54
|
-
if (limit.type === "TOKENS_LIMIT") {
|
|
55
|
-
if (limit.unit === 3) {
|
|
56
|
-
// unit 3 is the 5-hour token window (Standard Lite/Pro/Max).
|
|
57
|
-
fiveHourWindow = window;
|
|
58
|
-
}
|
|
59
|
-
else if (limit.unit === 6) {
|
|
60
|
-
// unit 6 is the weekly token window.
|
|
61
|
-
weeklyWindow = window;
|
|
62
|
-
}
|
|
63
|
-
else if (limit.unit === 4) {
|
|
64
|
-
// unit 4 is daily. Do not surface it as weekly in the current UI/report shape.
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else if (limit.type === "TIME_LIMIT") {
|
|
69
|
-
// TIME_LIMIT (unit 5) is typically the Monthly MCP limit
|
|
70
|
-
mcpWindow = window;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
success: true,
|
|
75
|
-
label: "Zhipu",
|
|
76
|
-
windows: {
|
|
77
|
-
fiveHour: fiveHourWindow,
|
|
78
|
-
weekly: weeklyWindow,
|
|
79
|
-
mcp: mcpWindow,
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
return {
|
|
87
|
-
success: false,
|
|
88
|
-
error: sanitizeDisplayText(err instanceof Error ? err.message : String(err)),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
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);
|
|
91
12
|
}
|
|
92
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-coding-plan.d.ts","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"alibaba-coding-plan.d.ts","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AA2B3B,eAAO,MAAM,yBAAyB,EAAE,aAiIvC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { computeAlibabaCodingPlanQuota, readAlibabaCodingPlanQuotaState, } from "../lib/qwen-local-quota.js";
|
|
2
|
-
import { DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS, isAlibabaModelId, resolveAlibabaCodingPlanAuthCached, } from "../lib/alibaba-auth.js";
|
|
3
|
-
import { attemptedErrorResult, attemptedResult, notAttemptedResult } from "./result-helpers.js";
|
|
1
|
+
import { ALIBABA_CODING_PLAN_STATE_VERSION, computeAlibabaCodingPlanQuota, getAlibabaCodingPlanQuotaPath, readAlibabaCodingPlanQuotaState, } from "../lib/qwen-local-quota.js";
|
|
2
|
+
import { DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS, getAlibabaCodingPlanAuthDiagnostics, isAlibabaModelId, resolveAlibabaCodingPlanAuthCached, } from "../lib/alibaba-auth.js";
|
|
3
|
+
import { attemptedErrorResult, attemptedResult, inspectGeneratedCounterFile, notAttemptedResult, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
|
|
4
4
|
import { findQuotaProviderDefinition } from "../lib/quota-providers.js";
|
|
5
5
|
function tierLabel(tier) {
|
|
6
6
|
return tier === "pro" ? "Pro" : "Lite";
|
|
@@ -21,15 +21,42 @@ export const alibabaCodingPlanProvider = {
|
|
|
21
21
|
: isAlibabaModelId(model);
|
|
22
22
|
},
|
|
23
23
|
async fetch(ctx) {
|
|
24
|
+
const diagnostics = await getAlibabaCodingPlanAuthDiagnostics({
|
|
25
|
+
maxAgeMs: DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS,
|
|
26
|
+
fallbackTier: "lite",
|
|
27
|
+
});
|
|
24
28
|
const plan = await resolveAlibabaCodingPlanAuthCached({
|
|
25
29
|
maxAgeMs: DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS,
|
|
26
30
|
fallbackTier: "lite",
|
|
27
31
|
});
|
|
32
|
+
const statePath = getAlibabaCodingPlanQuotaPath();
|
|
33
|
+
const state = await inspectGeneratedCounterFile(statePath, ALIBABA_CODING_PLAN_STATE_VERSION);
|
|
34
|
+
const lastUpdate = state.lastUpdatedAt === null ? "(none)" : new Date(state.lastUpdatedAt).toISOString();
|
|
35
|
+
const authError = diagnostics.state === "invalid" ? diagnostics.error : undefined;
|
|
36
|
+
const statusDetails = statusDetailsFromRecord({
|
|
37
|
+
"alibaba auth configured": diagnostics.state === "none" ? "false" : "true",
|
|
38
|
+
alibaba_api_key_source: diagnostics.source ?? "(none)",
|
|
39
|
+
alibaba_api_key_checked_paths: diagnostics.checkedPaths.join(" | ") || "(none)",
|
|
40
|
+
alibaba_api_key_auth_paths: diagnostics.authPaths.join(" | ") || "(none)",
|
|
41
|
+
alibaba_coding_plan: diagnostics.state === "configured"
|
|
42
|
+
? diagnostics.tier
|
|
43
|
+
: diagnostics.state === "invalid"
|
|
44
|
+
? "invalid"
|
|
45
|
+
: "(none)",
|
|
46
|
+
alibaba_auth_error: authError,
|
|
47
|
+
"alibaba coding plan error": authError,
|
|
48
|
+
"alibaba coding plan local quota": `path=${statePath} exists=${state.exists ? "true" : "false"} health=${state.health} version=${state.version ?? "(none)"} last_update=${lastUpdate}`,
|
|
49
|
+
local_state_path: statePath,
|
|
50
|
+
local_state_exists: state.exists ? "true" : "false",
|
|
51
|
+
local_state_health: state.health,
|
|
52
|
+
local_state_version: String(state.version ?? "(none)"),
|
|
53
|
+
local_state_last_update: lastUpdate,
|
|
54
|
+
});
|
|
28
55
|
if (plan.state === "none") {
|
|
29
|
-
return notAttemptedResult();
|
|
56
|
+
return withStatusDetails(notAttemptedResult(), statusDetails);
|
|
30
57
|
}
|
|
31
58
|
if (plan.state === "invalid") {
|
|
32
|
-
return attemptedErrorResult("Alibaba Coding Plan", plan.error);
|
|
59
|
+
return withStatusDetails(attemptedErrorResult("Alibaba Coding Plan", plan.error), statusDetails);
|
|
33
60
|
}
|
|
34
61
|
const tuning = findQuotaProviderDefinition(ctx.config.quotaProviders ?? [], "alibaba-coding-plan");
|
|
35
62
|
const limits = tuning?.mode === "local-estimate"
|
|
@@ -89,7 +116,7 @@ export const alibabaCodingPlanProvider = {
|
|
|
89
116
|
resetTimeIso: quota.monthly.resetTimeIso,
|
|
90
117
|
},
|
|
91
118
|
];
|
|
92
|
-
return attemptedResult(entries);
|
|
119
|
+
return withStatusDetails(attemptedResult(entries), statusDetails);
|
|
93
120
|
},
|
|
94
121
|
};
|
|
95
122
|
//# sourceMappingURL=alibaba-coding-plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-coding-plan.js","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qCAAqC,EACrC,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"alibaba-coding-plan.js","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qCAAqC,EACrC,mCAAmC,EACnC,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,SAAS,SAAS,CAAC,IAAoB;IACrC,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAkB;IACtD,EAAE,EAAE,qBAAqB;IAEzB,KAAK,CAAC,WAAW,CAAC,IAA0B;QAC1C,MAAM,IAAI,GAAG,MAAM,kCAAkC,CAAC;YACpD,QAAQ,EAAE,qCAAqC;YAC/C,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IACjE,CAAC;IAED,mBAAmB,CAAC,KAAa,EAAE,OAAO;QACxC,OAAO,OAAO,EAAE,iBAAiB;YAC/B,CAAC,CAAC,OAAO,CAAC,iBAAiB,KAAK,qBAAqB;gBACjD,OAAO,CAAC,iBAAiB,KAAK,SAAS;YAC3C,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAyB;QACnC,MAAM,WAAW,GAAG,MAAM,mCAAmC,CAAC;YAC5D,QAAQ,EAAE,qCAAqC;YAC/C,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kCAAkC,CAAC;YACpD,QAAQ,EAAE,qCAAqC;YAC/C,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,6BAA6B,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAC9F,MAAM,UAAU,GACd,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACxF,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,MAAM,aAAa,GAAG,uBAAuB,CAAC;YAC5C,yBAAyB,EAAE,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC1E,sBAAsB,EAAE,WAAW,CAAC,MAAM,IAAI,QAAQ;YACtD,6BAA6B,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ;YAC/E,0BAA0B,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ;YACzE,mBAAmB,EACjB,WAAW,CAAC,KAAK,KAAK,YAAY;gBAChC,CAAC,CAAC,WAAW,CAAC,IAAI;gBAClB,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS;oBAC/B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;YAChB,kBAAkB,EAAE,SAAS;YAC7B,2BAA2B,EAAE,SAAS;YACtC,iCAAiC,EAAE,QAAQ,SAAS,WAAW,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,OAAO,IAAI,QAAQ,gBAAgB,UAAU,EAAE;YACtL,gBAAgB,EAAE,SAAS;YAC3B,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACnD,kBAAkB,EAAE,KAAK,CAAC,MAAM;YAChC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC;YACtD,uBAAuB,EAAE,UAAU;SACpC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,iBAAiB,CACtB,oBAAoB,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,EACvD,aAAa,CACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,2BAA2B,CACxC,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,EAC/B,qBAAqB,CACtB,CAAC;QACF,MAAM,MAAM,GACV,MAAM,EAAE,IAAI,KAAK,gBAAgB;YAC/B,CAAC,CAAC;gBACE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,WAAW,CAAE,CAAC,YAAY;gBAClF,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAE,CAAC,YAAY;gBAC7E,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAE,CAAC,YAAY;aAChF;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG,6BAA6B,CAAC;YAC1C,KAAK,EAAE,MAAM,+BAA+B,EAAE;YAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,wBAAwB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAE9D,MAAM,OAAO,GAAsB;YACjC;gBACE,UAAU,EAAE;oBACV,UAAU,EAAE,OAAO;oBACnB,iBAAiB,EAAE,kBAAkB;oBACrC,SAAS,EAAE,YAAY;oBACvB,SAAS,EAAE,iBAAiB;iBAC7B;gBACD,IAAI,EAAE,GAAG,KAAK,KAAK;gBACnB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACvD,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB;gBACjD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY;aAC1C;YACD;gBACE,UAAU,EAAE;oBACV,UAAU,EAAE,OAAO;oBACnB,iBAAiB,EAAE,kBAAkB;oBACrC,SAAS,EAAE,YAAY;oBACvB,SAAS,EAAE,iBAAiB;iBAC7B;gBACD,IAAI,EAAE,GAAG,KAAK,SAAS;gBACvB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;gBACnD,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,gBAAgB;gBAC/C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;aACxC;YACD;gBACE,UAAU,EAAE;oBACV,UAAU,EAAE,OAAO;oBACnB,iBAAiB,EAAE,kBAAkB;oBACrC,SAAS,EAAE,YAAY;oBACvB,SAAS,EAAE,iBAAiB;iBAC7B;gBACD,IAAI,EAAE,GAAG,KAAK,UAAU;gBACxB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;gBACrD,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB;gBAChD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;aACzC;SACF,CAAC;QAEF,OAAO,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAgB3B,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,eAAO,MAAM,iBAAiB,EAAE,aA6F/B,CAAC"}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Normalizes Claude CLI-exposed quota windows into generic toast entries.
|
|
5
5
|
*/
|
|
6
|
-
import { hasAnthropicCredentialsConfigured, queryAnthropicQuota } from "../lib/anthropic.js";
|
|
6
|
+
import { getAnthropicDiagnostics, hasAnthropicCredentialsConfigured, queryAnthropicQuota, } from "../lib/anthropic.js";
|
|
7
|
+
import { sanitizeDisplayText } from "../lib/display-sanitize.js";
|
|
7
8
|
import { isCanonicalProviderAvailable } from "../lib/provider-availability.js";
|
|
8
|
-
import { attemptedErrorResult, attemptedResult, notAttemptedResult } from "./result-helpers.js";
|
|
9
|
+
import { attemptedErrorResult, attemptedResult, notAttemptedResult, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
|
|
9
10
|
export function getAnthropicNoDataMessage() {
|
|
10
11
|
return "Quota unavailable via local Claude CLI or Claude OAuth fallback";
|
|
11
12
|
}
|
|
@@ -28,15 +29,42 @@ export const anthropicProvider = {
|
|
|
28
29
|
return model.toLowerCase().startsWith("anthropic/");
|
|
29
30
|
},
|
|
30
31
|
async fetch(ctx) {
|
|
31
|
-
const
|
|
32
|
+
const options = {
|
|
32
33
|
binaryPath: ctx.config?.anthropicBinaryPath,
|
|
33
34
|
requestTimeoutMs: ctx.config?.requestTimeoutMs,
|
|
34
|
-
}
|
|
35
|
+
};
|
|
36
|
+
let statusDetails;
|
|
37
|
+
try {
|
|
38
|
+
const diagnostics = await getAnthropicDiagnostics(options);
|
|
39
|
+
const quota = diagnostics.quotaSupported ? diagnostics.quota : undefined;
|
|
40
|
+
statusDetails = statusDetailsFromRecord({
|
|
41
|
+
cli_installed: diagnostics.installed ? "true" : "false",
|
|
42
|
+
cli_version: diagnostics.version ?? "(none)",
|
|
43
|
+
auth_status: diagnostics.authStatus,
|
|
44
|
+
quota_supported: diagnostics.quotaSupported ? "true" : "false",
|
|
45
|
+
quota_source: diagnostics.quotaSource === "none" ? "(none)" : diagnostics.quotaSource,
|
|
46
|
+
checked_commands: diagnostics.checkedCommands.join(" | ") || "(none)",
|
|
47
|
+
message: diagnostics.message,
|
|
48
|
+
five_hour_remaining: quota
|
|
49
|
+
? `${quota.five_hour.percentRemaining}% reset_at=${quota.five_hour.resetTimeIso ?? "(none)"}`
|
|
50
|
+
: undefined,
|
|
51
|
+
seven_day_remaining: quota
|
|
52
|
+
? `${quota.seven_day.percentRemaining}% reset_at=${quota.seven_day.resetTimeIso ?? "(none)"}`
|
|
53
|
+
: undefined,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
statusDetails = statusDetailsFromRecord({
|
|
58
|
+
cli_installed: "false",
|
|
59
|
+
message: `failed to probe Claude CLI: ${sanitizeDisplayText(error instanceof Error ? error.message : String(error))}`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const result = await queryAnthropicQuota(options);
|
|
35
63
|
if (!result) {
|
|
36
|
-
return notAttemptedResult();
|
|
64
|
+
return withStatusDetails(notAttemptedResult(), statusDetails);
|
|
37
65
|
}
|
|
38
66
|
if (!result.success) {
|
|
39
|
-
return attemptedErrorResult("Claude", result.error);
|
|
67
|
+
return withStatusDetails(attemptedErrorResult("Claude", result.error), statusDetails);
|
|
40
68
|
}
|
|
41
69
|
const entries = [
|
|
42
70
|
{
|
|
@@ -66,7 +94,7 @@ export const anthropicProvider = {
|
|
|
66
94
|
resetTimeIso: result.seven_day.resetTimeIso,
|
|
67
95
|
},
|
|
68
96
|
];
|
|
69
|
-
return attemptedResult(entries);
|
|
97
|
+
return withStatusDetails(attemptedResult(entries), statusDetails);
|
|
70
98
|
},
|
|
71
99
|
};
|
|
72
100
|
//# sourceMappingURL=anthropic.js.map
|