@slkiser/opencode-quota 3.2.0 → 3.4.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 +278 -557
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +6 -0
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/lib/anthropic.js +1 -1
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/cli-show.d.ts +8 -0
- package/dist/lib/cli-show.d.ts.map +1 -0
- package/dist/lib/cli-show.js +178 -0
- package/dist/lib/cli-show.js.map +1 -0
- package/dist/lib/config-file-utils.d.ts +13 -0
- package/dist/lib/config-file-utils.d.ts.map +1 -1
- package/dist/lib/config-file-utils.js +33 -0
- package/dist/lib/config-file-utils.js.map +1 -1
- package/dist/lib/config.d.ts +16 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +452 -216
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +3 -2
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/entries.d.ts +3 -2
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +3 -2
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +4 -2
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/google-gemini-cli-companion.d.ts +29 -0
- package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -0
- package/dist/lib/google-gemini-cli-companion.js +166 -0
- package/dist/lib/google-gemini-cli-companion.js.map +1 -0
- package/dist/lib/google-gemini-cli.d.ts +48 -0
- package/dist/lib/google-gemini-cli.d.ts.map +1 -0
- package/dist/lib/google-gemini-cli.js +447 -0
- package/dist/lib/google-gemini-cli.js.map +1 -0
- package/dist/lib/grouped-entry-normalization.js +1 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/init-installer.js +2 -2
- package/dist/lib/opencode-config-providers.d.ts +6 -0
- package/dist/lib/opencode-config-providers.d.ts.map +1 -0
- package/dist/lib/opencode-config-providers.js +79 -0
- package/dist/lib/opencode-config-providers.js.map +1 -0
- package/dist/lib/opencode-go.d.ts +5 -4
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +32 -18
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +1 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +19 -0
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/provider-model-matching.d.ts +12 -0
- package/dist/lib/provider-model-matching.d.ts.map +1 -0
- package/dist/lib/provider-model-matching.js +23 -0
- package/dist/lib/provider-model-matching.js.map +1 -0
- 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 +4 -1
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts +43 -0
- package/dist/lib/quota-runtime-context.d.ts.map +1 -0
- package/dist/lib/quota-runtime-context.js +62 -0
- package/dist/lib/quota-runtime-context.js.map +1 -0
- package/dist/lib/quota-state.d.ts +1 -0
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +18 -4
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-status.d.ts +18 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +106 -22
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +5 -3
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-config-diagnostics.d.ts +7 -2
- package/dist/lib/tui-config-diagnostics.d.ts.map +1 -1
- package/dist/lib/tui-config-diagnostics.js +27 -8
- package/dist/lib/tui-config-diagnostics.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +25 -16
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +55 -9
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +423 -159
- package/dist/plugin.js.map +1 -1
- package/dist/providers/chutes.d.ts.map +1 -1
- package/dist/providers/chutes.js +2 -4
- package/dist/providers/chutes.js.map +1 -1
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +5 -10
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/cursor.js +2 -2
- package/dist/providers/cursor.js.map +1 -1
- package/dist/providers/google-account-format.d.ts +6 -0
- package/dist/providers/google-account-format.d.ts.map +1 -0
- package/dist/providers/google-account-format.js +21 -0
- package/dist/providers/google-account-format.js.map +1 -0
- package/dist/providers/google-antigravity.d.ts.map +1 -1
- package/dist/providers/google-antigravity.js +7 -29
- package/dist/providers/google-antigravity.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts +3 -0
- package/dist/providers/google-gemini-cli.d.ts.map +1 -0
- package/dist/providers/google-gemini-cli.js +63 -0
- package/dist/providers/google-gemini-cli.js.map +1 -0
- package/dist/providers/minimax-coding-plan.js +2 -2
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +2 -2
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +2 -4
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +2 -2
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +60 -11
- package/dist/providers/opencode-go.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/synthetic.d.ts.map +1 -1
- package/dist/providers/synthetic.js +2 -4
- package/dist/providers/synthetic.js.map +1 -1
- package/package.json +2 -1
|
@@ -2,6 +2,7 @@ import type { QuotaProvider, QuotaProviderContext, QuotaProviderResult } from ".
|
|
|
2
2
|
declare const QUOTA_PROVIDER_CACHE_VERSION: 1;
|
|
3
3
|
export type PersistedQuotaProviderCacheEntry = {
|
|
4
4
|
version: typeof QUOTA_PROVIDER_CACHE_VERSION;
|
|
5
|
+
packageVersion: string;
|
|
5
6
|
key: string;
|
|
6
7
|
providerId: string;
|
|
7
8
|
timestamp: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-state.d.ts","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"quota-state.d.ts","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAO7F,QAAA,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAMhD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,OAAO,4BAA4B,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAMF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAOzF;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAaR;AAMD,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1F;AAkLD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyE/B;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
|
package/dist/lib/quota-state.js
CHANGED
|
@@ -4,7 +4,9 @@ import { join } from "path";
|
|
|
4
4
|
import { writeJsonAtomic } from "./atomic-json.js";
|
|
5
5
|
import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
|
|
6
6
|
import { isLiveLocalUsageProviderId } from "./provider-metadata.js";
|
|
7
|
+
import { getPackageVersion } from "./version.js";
|
|
7
8
|
const QUOTA_PROVIDER_CACHE_VERSION = 1;
|
|
9
|
+
const QUOTA_PROVIDER_CACHE_PACKAGE_VERSION_FALLBACK = "unknown";
|
|
8
10
|
const QUOTA_PROVIDER_CACHE_DIRNAME = "quota-provider-state";
|
|
9
11
|
const QUOTA_PROVIDER_CACHE_RETENTION_MS = 24 * 60 * 60 * 1000;
|
|
10
12
|
const QUOTA_PROVIDER_CACHE_PRUNE_INTERVAL_MS = 60 * 60 * 1000;
|
|
@@ -25,11 +27,12 @@ export function buildQuotaProviderStateCacheKey(providerId, ctx) {
|
|
|
25
27
|
const cursorPlan = ctx.config.cursorPlan;
|
|
26
28
|
const cursorIncludedApiUsd = ctx.config.cursorIncludedApiUsd ?? "";
|
|
27
29
|
const cursorBillingCycleStartDay = ctx.config.cursorBillingCycleStartDay ?? "";
|
|
30
|
+
const opencodeGoWindows = ctx.config.opencodeGoWindows?.join(",") ?? "";
|
|
28
31
|
const onlyCurrentModel = ctx.config.onlyCurrentModel ? "yes" : "no";
|
|
29
32
|
const currentModel = ctx.config.currentModel ?? "";
|
|
30
33
|
const currentProviderID = ctx.config.currentProviderID ?? "";
|
|
31
34
|
const anthropicBinaryPath = ctx.config.anthropicBinaryPath ?? "";
|
|
32
|
-
return `${providerId}|anthropicBinaryPath=${anthropicBinaryPath}|googleModels=${googleModels}|alibabaTier=${alibabaCodingPlanTier}|cursorPlan=${cursorPlan}|cursorIncludedApiUsd=${cursorIncludedApiUsd}|cursorBillingCycleStartDay=${cursorBillingCycleStartDay}|onlyCurrentModel=${onlyCurrentModel}|currentModel=${currentModel}|currentProviderID=${currentProviderID}`;
|
|
35
|
+
return `${providerId}|anthropicBinaryPath=${anthropicBinaryPath}|googleModels=${googleModels}|alibabaTier=${alibabaCodingPlanTier}|cursorPlan=${cursorPlan}|cursorIncludedApiUsd=${cursorIncludedApiUsd}|cursorBillingCycleStartDay=${cursorBillingCycleStartDay}|opencodeGoWindows=${opencodeGoWindows}|onlyCurrentModel=${onlyCurrentModel}|currentModel=${currentModel}|currentProviderID=${currentProviderID}`;
|
|
33
36
|
}
|
|
34
37
|
function getQuotaProviderCacheDir() {
|
|
35
38
|
return join(getOpencodeRuntimeDirs().cacheDir, QUOTA_PROVIDER_CACHE_DIRNAME);
|
|
@@ -80,12 +83,16 @@ function isQuotaProviderResult(value) {
|
|
|
80
83
|
}
|
|
81
84
|
return true;
|
|
82
85
|
}
|
|
83
|
-
function
|
|
86
|
+
async function getQuotaProviderCachePackageVersion() {
|
|
87
|
+
return (await getPackageVersion()) ?? QUOTA_PROVIDER_CACHE_PACKAGE_VERSION_FALLBACK;
|
|
88
|
+
}
|
|
89
|
+
function isPersistedQuotaProviderCacheEntry(value, key, providerId, packageVersion) {
|
|
84
90
|
if (!value || typeof value !== "object") {
|
|
85
91
|
return false;
|
|
86
92
|
}
|
|
87
93
|
const entry = value;
|
|
88
94
|
return (entry.version === QUOTA_PROVIDER_CACHE_VERSION &&
|
|
95
|
+
entry.packageVersion === packageVersion &&
|
|
89
96
|
entry.key === key &&
|
|
90
97
|
entry.providerId === providerId &&
|
|
91
98
|
typeof entry.timestamp === "number" &&
|
|
@@ -135,7 +142,7 @@ async function readPersistedQuotaProviderCacheEntry(params) {
|
|
|
135
142
|
try {
|
|
136
143
|
const raw = await readFile(path, "utf-8");
|
|
137
144
|
const parsed = JSON.parse(raw);
|
|
138
|
-
if (!isPersistedQuotaProviderCacheEntry(parsed, params.key, params.providerId)) {
|
|
145
|
+
if (!isPersistedQuotaProviderCacheEntry(parsed, params.key, params.providerId, params.packageVersion)) {
|
|
139
146
|
await safeRm(path);
|
|
140
147
|
return null;
|
|
141
148
|
}
|
|
@@ -144,6 +151,7 @@ async function readPersistedQuotaProviderCacheEntry(params) {
|
|
|
144
151
|
}
|
|
145
152
|
return {
|
|
146
153
|
version: parsed.version,
|
|
154
|
+
packageVersion: parsed.packageVersion,
|
|
147
155
|
key: parsed.key,
|
|
148
156
|
providerId: parsed.providerId,
|
|
149
157
|
timestamp: parsed.timestamp,
|
|
@@ -171,9 +179,13 @@ export async function fetchQuotaProviderResult(params) {
|
|
|
171
179
|
}
|
|
172
180
|
const key = buildQuotaProviderStateCacheKey(provider.id, ctx);
|
|
173
181
|
const now = Date.now();
|
|
182
|
+
const packageVersion = await getQuotaProviderCachePackageVersion();
|
|
174
183
|
await maybePrunePersistedQuotaProviderCache(now);
|
|
175
184
|
const inMemory = inMemoryCache.get(key);
|
|
176
|
-
if (inMemory &&
|
|
185
|
+
if (inMemory &&
|
|
186
|
+
inMemory.packageVersion === packageVersion &&
|
|
187
|
+
ttlMs > 0 &&
|
|
188
|
+
now - inMemory.timestamp < ttlMs) {
|
|
177
189
|
return cloneQuotaProviderResult(inMemory.result);
|
|
178
190
|
}
|
|
179
191
|
const inFlight = inFlightByKey.get(key);
|
|
@@ -183,6 +195,7 @@ export async function fetchQuotaProviderResult(params) {
|
|
|
183
195
|
const persisted = await readPersistedQuotaProviderCacheEntry({
|
|
184
196
|
key,
|
|
185
197
|
providerId: provider.id,
|
|
198
|
+
packageVersion,
|
|
186
199
|
ttlMs,
|
|
187
200
|
now,
|
|
188
201
|
});
|
|
@@ -203,6 +216,7 @@ export async function fetchQuotaProviderResult(params) {
|
|
|
203
216
|
}
|
|
204
217
|
const entry = {
|
|
205
218
|
version: QUOTA_PROVIDER_CACHE_VERSION,
|
|
219
|
+
packageVersion,
|
|
206
220
|
key,
|
|
207
221
|
providerId: provider.id,
|
|
208
222
|
timestamp: Date.now(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-state.js","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"quota-state.js","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
import { type LoadConfigIssue, type QuotaToastSettingSources } from "./config.js";
|
|
1
2
|
import type { QuotaProviderResult } from "./entries.js";
|
|
2
|
-
import type { CursorQuotaPlan, PricingSnapshotSource } from "./types.js";
|
|
3
|
+
import type { CursorQuotaPlan, OpenCodeGoWindowKey, PricingSnapshotSource } from "./types.js";
|
|
3
4
|
/** Session token fetch error info for status report */
|
|
4
5
|
export interface SessionTokenError {
|
|
5
6
|
sessionID: string;
|
|
6
7
|
error: string;
|
|
7
8
|
checkedPath?: string;
|
|
8
9
|
}
|
|
10
|
+
type ConfigClient = {
|
|
11
|
+
config?: {
|
|
12
|
+
get?: () => Promise<{
|
|
13
|
+
data?: unknown;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
9
17
|
type ProviderLiveProbe = {
|
|
10
18
|
providerId: string;
|
|
11
19
|
result: QuotaProviderResult;
|
|
@@ -13,8 +21,15 @@ type ProviderLiveProbe = {
|
|
|
13
21
|
export declare function buildQuotaStatusReport(params: {
|
|
14
22
|
configSource: string;
|
|
15
23
|
configPaths: string[];
|
|
24
|
+
globalConfigPaths?: string[];
|
|
25
|
+
workspaceConfigPaths?: string[];
|
|
26
|
+
settingSources?: QuotaToastSettingSources;
|
|
27
|
+
configIssues?: LoadConfigIssue[];
|
|
28
|
+
/** @deprecated compatibility only; not rendered */
|
|
16
29
|
networkSettingSources?: Record<string, string>;
|
|
17
30
|
tuiDiagnostics?: {
|
|
31
|
+
workspaceRoot: string;
|
|
32
|
+
configRoot: string;
|
|
18
33
|
configured: boolean;
|
|
19
34
|
inferredSelectedPath: string | null;
|
|
20
35
|
presentPaths: string[];
|
|
@@ -28,6 +43,7 @@ export declare function buildQuotaStatusReport(params: {
|
|
|
28
43
|
cursorPlan: CursorQuotaPlan;
|
|
29
44
|
cursorIncludedApiUsd?: number;
|
|
30
45
|
cursorBillingCycleStartDay?: number;
|
|
46
|
+
opencodeGoWindows?: OpenCodeGoWindowKey[];
|
|
31
47
|
pricingSnapshotSource: PricingSnapshotSource;
|
|
32
48
|
onlyCurrentModel: boolean;
|
|
33
49
|
currentModel?: string;
|
|
@@ -50,6 +66,7 @@ export declare function buildQuotaStatusReport(params: {
|
|
|
50
66
|
}>;
|
|
51
67
|
};
|
|
52
68
|
sessionTokenError?: SessionTokenError;
|
|
69
|
+
geminiCliClient?: ConfigClient;
|
|
53
70
|
generatedAtMs?: number;
|
|
54
71
|
}): Promise<string>;
|
|
55
72
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-status.d.ts","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"AA4EA,OAAO,KAAK,EAAE,mBAAmB,EAAoC,MAAM,cAAc,CAAC;AAE1F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"quota-status.d.ts","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/quota-status.js
CHANGED
|
@@ -3,6 +3,8 @@ import { getAuthPath, getAuthPaths, readAuthFileCached } from "./opencode-auth.j
|
|
|
3
3
|
import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
|
|
4
4
|
import { getGoogleTokenCachePath } from "./google-token-cache.js";
|
|
5
5
|
import { inspectAntigravityCompanionPresence } from "./google-antigravity-companion.js";
|
|
6
|
+
import { inspectGeminiCliCompanionPresence } from "./google-gemini-cli-companion.js";
|
|
7
|
+
import { inspectGeminiCliAuthPresence } from "./google-gemini-cli.js";
|
|
6
8
|
import { inspectAntigravityAccountsPresence } from "./google.js";
|
|
7
9
|
import { getAnthropicDiagnostics } from "./anthropic.js";
|
|
8
10
|
import { getChutesKeyDiagnostics } from "./chutes.js";
|
|
@@ -28,6 +30,7 @@ import { totalTokenBuckets } from "./token-buckets.js";
|
|
|
28
30
|
import { CURSOR_CANONICAL_PLUGIN_PACKAGE, inspectCursorAuthPresence, inspectCursorOpenCodeIntegration, } from "./cursor-detection.js";
|
|
29
31
|
import { getCurrentCursorUsageSummary } from "./cursor-usage.js";
|
|
30
32
|
import { sanitizeSingleLineDisplaySnippet, sanitizeSingleLineDisplayText, sanitizeDisplayText, sanitizeQuotaProviderResult, } from "./display-sanitize.js";
|
|
33
|
+
import { QUOTA_TOAST_SETTING_SOURCE_KEYS, } from "./config.js";
|
|
31
34
|
import { getCursorPlanDisplayName, getEffectiveCursorIncludedApiUsd } from "./cursor-pricing.js";
|
|
32
35
|
import { getQuotaProviderDisplayLabel } from "./provider-metadata.js";
|
|
33
36
|
import { isValueEntry } from "./entries.js";
|
|
@@ -51,28 +54,47 @@ const STATUS_SAMPLE_LIMIT = 5;
|
|
|
51
54
|
const STATUS_LIVE_ENTRY_LIMIT = 2;
|
|
52
55
|
const STATUS_LIVE_ERROR_LIMIT = 2;
|
|
53
56
|
const STATUS_LIVE_ROW_MAX_LENGTH = 120;
|
|
57
|
+
const OPENCODE_GO_STATUS_WINDOW_ORDER = ["rolling", "weekly", "monthly"];
|
|
58
|
+
const OPENCODE_GO_STATUS_WINDOW_FIELDS = {
|
|
59
|
+
rolling: "rollingUsage",
|
|
60
|
+
weekly: "weeklyUsage",
|
|
61
|
+
monthly: "monthlyUsage",
|
|
62
|
+
};
|
|
54
63
|
function joinOrNone(values) {
|
|
55
64
|
return values.length > 0 ? values.join(" | ") : "(none)";
|
|
56
65
|
}
|
|
57
|
-
function
|
|
66
|
+
function formatOpenCodeGoWindowSelection(windows) {
|
|
67
|
+
return windows.join(",");
|
|
68
|
+
}
|
|
69
|
+
function isDefaultOpenCodeGoStatusWindowSelection(windows) {
|
|
70
|
+
const selected = new Set(windows);
|
|
71
|
+
return (selected.size === OPENCODE_GO_STATUS_WINDOW_ORDER.length &&
|
|
72
|
+
OPENCODE_GO_STATUS_WINDOW_ORDER.every((window) => selected.has(window)));
|
|
73
|
+
}
|
|
74
|
+
function formatOpenCodeGoMissingWindows(windows) {
|
|
75
|
+
return windows.map((window) => `${window} (${OPENCODE_GO_STATUS_WINDOW_FIELDS[window]})`).join(", ");
|
|
76
|
+
}
|
|
77
|
+
function formatOpenCodeGoUsage(window) {
|
|
78
|
+
return `percent_used=${window.usagePercent} percent_remaining=${window.percentRemaining} reset_in_sec=${window.resetInSec} reset_at=${window.resetTimeIso}`;
|
|
79
|
+
}
|
|
80
|
+
function formatSettingSources(sources) {
|
|
58
81
|
if (!sources)
|
|
59
82
|
return "(none)";
|
|
60
|
-
const
|
|
61
|
-
"enabled",
|
|
62
|
-
"enabledProviders",
|
|
63
|
-
"minIntervalMs",
|
|
64
|
-
"pricingSnapshot.source",
|
|
65
|
-
"pricingSnapshot.autoRefresh",
|
|
66
|
-
"showOnIdle",
|
|
67
|
-
"showOnQuestion",
|
|
68
|
-
"showOnCompact",
|
|
69
|
-
"showOnBothFail",
|
|
70
|
-
];
|
|
71
|
-
const parts = keys
|
|
72
|
-
.filter((key) => typeof sources[key] === "string" && sources[key].length > 0)
|
|
73
|
-
.map((key) => `${key}<=${sources[key]}`);
|
|
83
|
+
const parts = QUOTA_TOAST_SETTING_SOURCE_KEYS.filter((key) => typeof sources[key] === "string" && sources[key].length > 0).map((key) => `${key}<=${sources[key]}`);
|
|
74
84
|
return parts.length > 0 ? parts.join(" | ") : "(none)";
|
|
75
85
|
}
|
|
86
|
+
function getConfigPrecedenceLabel(configSource) {
|
|
87
|
+
switch (configSource) {
|
|
88
|
+
case "files":
|
|
89
|
+
return "global defaults -> workspace overrides";
|
|
90
|
+
case "sdk":
|
|
91
|
+
return "sdk fallback (no file-backed config)";
|
|
92
|
+
case "defaults":
|
|
93
|
+
return "built-in defaults only";
|
|
94
|
+
default:
|
|
95
|
+
return configSource;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
76
98
|
function getDefaultBasicApiKeyDiagnostics() {
|
|
77
99
|
return {
|
|
78
100
|
configured: false,
|
|
@@ -313,7 +335,7 @@ function supportedProviderPricingRow(params) {
|
|
|
313
335
|
notes: "subscription percentage quota via dashboard scraping (not token-priced)",
|
|
314
336
|
};
|
|
315
337
|
}
|
|
316
|
-
if (id === "kimi-code") {
|
|
338
|
+
if (id === "kimi-for-coding" || id === "kimi-code") {
|
|
317
339
|
return {
|
|
318
340
|
id,
|
|
319
341
|
pricing: "no",
|
|
@@ -337,6 +359,11 @@ function supportedProviderPricingRow(params) {
|
|
|
337
359
|
? { id, pricing: "yes", notes: "connector (priced via models.dev google/anthropic)" }
|
|
338
360
|
: { id, pricing: "partial", notes: "connector (pricing snapshot missing google/anthropic)" };
|
|
339
361
|
}
|
|
362
|
+
if (id === "google-gemini-cli") {
|
|
363
|
+
return snapshotHasProvider("google")
|
|
364
|
+
? { id, pricing: "yes", notes: "connector (priced via models.dev google)" }
|
|
365
|
+
: { id, pricing: "partial", notes: "connector (pricing snapshot missing google)" };
|
|
366
|
+
}
|
|
340
367
|
// Connector providers: pricing exists when model IDs can be mapped into snapshot pricing keys.
|
|
341
368
|
// Use local history as the source of truth.
|
|
342
369
|
const hasAnyUsage = params.agg.bySourceProvider.some((p) => p.providerID === id);
|
|
@@ -373,15 +400,27 @@ export async function buildQuotaStatusReport(params) {
|
|
|
373
400
|
const sections = [];
|
|
374
401
|
// === toast diagnostics ===
|
|
375
402
|
const toastLines = [
|
|
376
|
-
`- configSource: ${params.configSource}
|
|
377
|
-
`-
|
|
403
|
+
`- configSource: ${params.configSource}`,
|
|
404
|
+
`- configPaths: ${joinOrNone(params.configPaths)}`,
|
|
405
|
+
`- precedence: ${getConfigPrecedenceLabel(params.configSource)}`,
|
|
406
|
+
`- global_config_paths: ${joinOrNone(params.globalConfigPaths ?? [])}`,
|
|
407
|
+
`- workspace_config_paths: ${joinOrNone(params.workspaceConfigPaths ?? [])}`,
|
|
408
|
+
`- setting_sources: ${formatSettingSources(params.settingSources)}`,
|
|
378
409
|
`- enabledProviders: ${params.enabledProviders === "auto" ? "(auto)" : params.enabledProviders.length ? params.enabledProviders.join(",") : "(none)"}`,
|
|
379
410
|
`- onlyCurrentModel: ${params.onlyCurrentModel ? "true" : "false"}`,
|
|
380
411
|
`- currentModel: ${modelDisplay}`,
|
|
381
412
|
];
|
|
413
|
+
if (params.configIssues?.length) {
|
|
414
|
+
toastLines.push("- config_errors:");
|
|
415
|
+
for (const issue of params.configIssues) {
|
|
416
|
+
toastLines.push(` - ${sanitizeSingleLineDisplayText(issue.path)} ${sanitizeSingleLineDisplayText(issue.key)}: ${sanitizeSingleLineDisplayText(issue.message)}`);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
382
419
|
if (params.tuiDiagnostics) {
|
|
383
420
|
toastLines.push("");
|
|
384
421
|
toastLines.push("tui:");
|
|
422
|
+
toastLines.push(`- workspace_root: ${params.tuiDiagnostics.workspaceRoot}`);
|
|
423
|
+
toastLines.push(`- config_root: ${params.tuiDiagnostics.configRoot}`);
|
|
385
424
|
toastLines.push(`- config_configured: ${params.tuiDiagnostics.configured ? "true" : "false"}`);
|
|
386
425
|
toastLines.push(`- inferred_selected_config_path: ${params.tuiDiagnostics.inferredSelectedPath ?? "(none)"}`);
|
|
387
426
|
toastLines.push(`- present_config_paths: ${joinOrNone(params.tuiDiagnostics.presentPaths)}`);
|
|
@@ -791,6 +830,11 @@ export async function buildQuotaStatusReport(params) {
|
|
|
791
830
|
openCodeGoRows.push({ key: "config_error", value: sanitizeDisplayText(openCodeGoDiag.error) });
|
|
792
831
|
}
|
|
793
832
|
openCodeGoRows.push({ key: "config_checked_paths", value: joinOrNone(openCodeGoDiag.checkedPaths) });
|
|
833
|
+
const openCodeGoSelectedWindows = params.opencodeGoWindows ?? OPENCODE_GO_STATUS_WINDOW_ORDER;
|
|
834
|
+
openCodeGoRows.push({
|
|
835
|
+
key: "selected_windows",
|
|
836
|
+
value: formatOpenCodeGoWindowSelection(openCodeGoSelectedWindows),
|
|
837
|
+
});
|
|
794
838
|
if (openCodeGoDiag.state === "configured") {
|
|
795
839
|
const openCodeGoConfig = await resolveOpenCodeGoConfigCached({
|
|
796
840
|
maxAgeMs: DEFAULT_OPENCODE_GO_CONFIG_CACHE_MAX_AGE_MS,
|
|
@@ -810,10 +854,23 @@ export async function buildQuotaStatusReport(params) {
|
|
|
810
854
|
openCodeGoRows.push({ key: "live_fetch_error", value: openCodeGoQuota.error });
|
|
811
855
|
}
|
|
812
856
|
else {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
857
|
+
for (const window of OPENCODE_GO_STATUS_WINDOW_ORDER) {
|
|
858
|
+
const usage = openCodeGoQuota[window];
|
|
859
|
+
if (!usage)
|
|
860
|
+
continue;
|
|
861
|
+
openCodeGoRows.push({
|
|
862
|
+
key: `${window}_usage`,
|
|
863
|
+
value: formatOpenCodeGoUsage(usage),
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
const missingSelectedWindows = openCodeGoSelectedWindows.filter((window) => !openCodeGoQuota[window]);
|
|
867
|
+
if (missingSelectedWindows.length > 0 &&
|
|
868
|
+
!isDefaultOpenCodeGoStatusWindowSelection(openCodeGoSelectedWindows)) {
|
|
869
|
+
openCodeGoRows.push({
|
|
870
|
+
key: "live_fetch_error",
|
|
871
|
+
value: `Selected OpenCode Go dashboard window(s) missing: ${formatOpenCodeGoMissingWindows(missingSelectedWindows)}`,
|
|
872
|
+
});
|
|
873
|
+
}
|
|
817
874
|
}
|
|
818
875
|
}
|
|
819
876
|
}
|
|
@@ -1081,6 +1138,33 @@ export async function buildQuotaStatusReport(params) {
|
|
|
1081
1138
|
});
|
|
1082
1139
|
appendProviderCompactLiveProbeRows(googleRows, "google-antigravity", params.providerLiveProbes);
|
|
1083
1140
|
sections.push(createKvSection("google_antigravity", "google_antigravity:", googleRows));
|
|
1141
|
+
// === google gemini cli ===
|
|
1142
|
+
const geminiCliAuthPresence = await inspectGeminiCliAuthPresence(params.geminiCliClient);
|
|
1143
|
+
const geminiCliCompanionPresence = await inspectGeminiCliCompanionPresence();
|
|
1144
|
+
const geminiCliRows = [
|
|
1145
|
+
{ key: "auth_state", value: geminiCliAuthPresence.state },
|
|
1146
|
+
{ key: "auth_source", value: geminiCliAuthPresence.sourceKey ?? "(none)" },
|
|
1147
|
+
{ key: "account_count", value: String(geminiCliAuthPresence.accountCount) },
|
|
1148
|
+
{ key: "valid_account_count", value: String(geminiCliAuthPresence.validAccountCount) },
|
|
1149
|
+
{ key: "companion_package_state", value: geminiCliCompanionPresence.state },
|
|
1150
|
+
{
|
|
1151
|
+
key: "companion_package_path",
|
|
1152
|
+
value: geminiCliCompanionPresence.state === "present" || geminiCliCompanionPresence.state === "invalid"
|
|
1153
|
+
? geminiCliCompanionPresence.resolvedPath ?? "(none)"
|
|
1154
|
+
: "(none)",
|
|
1155
|
+
},
|
|
1156
|
+
];
|
|
1157
|
+
if (geminiCliAuthPresence.state === "invalid") {
|
|
1158
|
+
geminiCliRows.push({ key: "auth_error", value: sanitizeDisplayText(geminiCliAuthPresence.error) });
|
|
1159
|
+
}
|
|
1160
|
+
if (geminiCliCompanionPresence.state !== "present") {
|
|
1161
|
+
geminiCliRows.push({
|
|
1162
|
+
key: "companion_error",
|
|
1163
|
+
value: sanitizeDisplayText(geminiCliCompanionPresence.error),
|
|
1164
|
+
});
|
|
1165
|
+
}
|
|
1166
|
+
appendProviderCompactLiveProbeRows(geminiCliRows, "google-gemini-cli", params.providerLiveProbes);
|
|
1167
|
+
sections.push(createKvSection("google_gemini_cli", "google_gemini_cli:", geminiCliRows));
|
|
1084
1168
|
if (params.googleRefresh?.attempted) {
|
|
1085
1169
|
const googleRefreshRows = [];
|
|
1086
1170
|
if (typeof params.googleRefresh.total === "number" &&
|