@slkiser/opencode-quota 4.8.2 → 4.10.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 +18 -18
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +5 -3
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/lib/accounting-format.d.ts +54 -0
- package/dist/lib/accounting-format.d.ts.map +1 -0
- package/dist/lib/accounting-format.js +271 -0
- package/dist/lib/accounting-format.js.map +1 -0
- package/dist/lib/anthropic.d.ts +21 -2
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +141 -22
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +7 -1
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/config.d.ts +10 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +69 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts +2 -0
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +38 -0
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/cursor-usage.d.ts +1 -0
- package/dist/lib/cursor-usage.d.ts.map +1 -1
- package/dist/lib/cursor-usage.js +1 -0
- package/dist/lib/cursor-usage.js.map +1 -1
- package/dist/lib/deepseek.d.ts +12 -12
- package/dist/lib/deepseek.d.ts.map +1 -1
- package/dist/lib/deepseek.js +33 -29
- package/dist/lib/deepseek.js.map +1 -1
- package/dist/lib/display-sanitize.d.ts.map +1 -1
- package/dist/lib/display-sanitize.js +75 -22
- package/dist/lib/display-sanitize.js.map +1 -1
- package/dist/lib/entries.d.ts +122 -23
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js +41 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/format-utils.d.ts +11 -8
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +47 -6
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts +4 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +144 -42
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/glm-coding-plan.d.ts.map +1 -1
- package/dist/lib/glm-coding-plan.js +12 -3
- package/dist/lib/glm-coding-plan.js.map +1 -1
- package/dist/lib/google-agy.d.ts +2 -0
- package/dist/lib/google-agy.d.ts.map +1 -1
- package/dist/lib/google-agy.js +29 -14
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts +2 -0
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +29 -3
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google-token-cache.d.ts +5 -8
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +30 -118
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/google.d.ts +2 -0
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +31 -6
- 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 +53 -20
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/minimax-auth.d.ts +1 -1
- package/dist/lib/minimax-auth.js +1 -1
- package/dist/lib/nanogpt.d.ts +5 -5
- package/dist/lib/nanogpt.d.ts.map +1 -1
- package/dist/lib/nanogpt.js +59 -23
- package/dist/lib/nanogpt.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +2 -2
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +3 -45
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/openai.d.ts +6 -0
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +51 -16
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-go-auth.js +1 -1
- package/dist/lib/opencode-go-auth.js.map +1 -1
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +28 -3
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +0 -1
- package/dist/lib/opencode-zen-config.d.ts.map +1 -1
- package/dist/lib/opencode-zen-config.js +0 -22
- package/dist/lib/opencode-zen-config.js.map +1 -1
- package/dist/lib/opencode-zen.d.ts +3 -0
- package/dist/lib/opencode-zen.d.ts.map +1 -1
- package/dist/lib/opencode-zen.js +18 -1
- package/dist/lib/opencode-zen.js.map +1 -1
- package/dist/lib/openrouter.d.ts +2 -0
- package/dist/lib/openrouter.d.ts.map +1 -1
- package/dist/lib/openrouter.js +10 -0
- package/dist/lib/openrouter.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +2 -307
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +14 -316
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/provider-registration.d.ts +325 -0
- package/dist/lib/provider-registration.d.ts.map +1 -0
- package/dist/lib/provider-registration.js +338 -0
- package/dist/lib/provider-registration.js.map +1 -0
- package/dist/lib/quota-accounting-projection.d.ts +9 -0
- package/dist/lib/quota-accounting-projection.d.ts.map +1 -0
- package/dist/lib/quota-accounting-projection.js +254 -0
- package/dist/lib/quota-accounting-projection.js.map +1 -0
- package/dist/lib/quota-command-format.d.ts +5 -2
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +66 -44
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +3 -0
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-exhaustion-projection.d.ts +11 -0
- package/dist/lib/quota-exhaustion-projection.d.ts.map +1 -0
- package/dist/lib/quota-exhaustion-projection.js +105 -0
- package/dist/lib/quota-exhaustion-projection.js.map +1 -0
- package/dist/lib/quota-export.d.ts +2 -1
- package/dist/lib/quota-export.d.ts.map +1 -1
- package/dist/lib/quota-export.js +36 -10
- package/dist/lib/quota-export.js.map +1 -1
- package/dist/lib/quota-providers-local.d.ts.map +1 -1
- package/dist/lib/quota-providers-local.js +14 -0
- package/dist/lib/quota-providers-local.js.map +1 -1
- package/dist/lib/quota-providers-remote.d.ts.map +1 -1
- package/dist/lib/quota-providers-remote.js +6 -2
- package/dist/lib/quota-providers-remote.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +0 -1
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +13 -138
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-reset-notifications.d.ts.map +1 -1
- package/dist/lib/quota-reset-notifications.js +3 -0
- package/dist/lib/quota-reset-notifications.js.map +1 -1
- package/dist/lib/quota-state-codec.d.ts +16 -0
- package/dist/lib/quota-state-codec.d.ts.map +1 -0
- package/dist/lib/quota-state-codec.js +412 -0
- package/dist/lib/quota-state-codec.js.map +1 -0
- package/dist/lib/quota-state.d.ts +2 -11
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +165 -305
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +15 -7
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/quota-telemetry.d.ts.map +1 -1
- package/dist/lib/quota-telemetry.js +7 -3
- package/dist/lib/quota-telemetry.js.map +1 -1
- package/dist/lib/quota-toast-runtime.d.ts +60 -0
- package/dist/lib/quota-toast-runtime.d.ts.map +1 -0
- package/dist/lib/quota-toast-runtime.js +774 -0
- package/dist/lib/quota-toast-runtime.js.map +1 -0
- package/dist/lib/qwen-local-quota.d.ts +2 -0
- package/dist/lib/qwen-local-quota.d.ts.map +1 -1
- package/dist/lib/qwen-local-quota.js +17 -1
- package/dist/lib/qwen-local-quota.js.map +1 -1
- package/dist/lib/resolved-auth-identity.d.ts +36 -0
- package/dist/lib/resolved-auth-identity.d.ts.map +1 -0
- package/dist/lib/resolved-auth-identity.js +193 -0
- package/dist/lib/resolved-auth-identity.js.map +1 -0
- package/dist/lib/scoped-update-migration.d.ts +101 -0
- package/dist/lib/scoped-update-migration.d.ts.map +1 -0
- package/dist/lib/scoped-update-migration.js +348 -0
- package/dist/lib/scoped-update-migration.js.map +1 -0
- package/dist/lib/scoped-update.d.ts +8 -0
- package/dist/lib/scoped-update.d.ts.map +1 -1
- package/dist/lib/scoped-update.js +263 -50
- package/dist/lib/scoped-update.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts +4 -0
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +140 -39
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-compact-format.d.ts +2 -0
- package/dist/lib/tui-compact-format.d.ts.map +1 -1
- package/dist/lib/tui-compact-format.js +224 -31
- package/dist/lib/tui-compact-format.js.map +1 -1
- package/dist/lib/tui-panel-state.d.ts +6 -0
- package/dist/lib/tui-panel-state.d.ts.map +1 -1
- package/dist/lib/tui-panel-state.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +109 -10
- 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 +4 -0
- package/dist/lib/tui-sidebar-format.js.map +1 -1
- package/dist/lib/types.d.ts +21 -13
- 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 +4 -0
- package/dist/lib/xai.d.ts.map +1 -1
- package/dist/lib/xai.js +29 -3
- package/dist/lib/xai.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +27 -720
- package/dist/plugin.js.map +1 -1
- package/dist/providers/accounting-decimal.d.ts +2 -0
- package/dist/providers/accounting-decimal.d.ts.map +1 -0
- package/dist/providers/accounting-decimal.js +23 -0
- package/dist/providers/accounting-decimal.js.map +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +36 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/cache-policies.d.ts +64 -0
- package/dist/providers/cache-policies.d.ts.map +1 -0
- package/dist/providers/cache-policies.js +197 -0
- package/dist/providers/cache-policies.js.map +1 -0
- package/dist/providers/cursor.d.ts.map +1 -1
- package/dist/providers/cursor.js +85 -58
- package/dist/providers/cursor.js.map +1 -1
- package/dist/providers/deepseek.d.ts +2 -2
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js +64 -33
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/google-agy.js +2 -2
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/kilo.d.ts.map +1 -1
- package/dist/providers/kilo.js +56 -29
- package/dist/providers/kilo.js.map +1 -1
- package/dist/providers/mimo.d.ts.map +1 -1
- package/dist/providers/mimo.js +37 -15
- package/dist/providers/mimo.js.map +1 -1
- package/dist/providers/minimax-coding-plan.d.ts +8 -7
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +97 -83
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +72 -51
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/ollama-cloud.d.ts +1 -2
- package/dist/providers/ollama-cloud.d.ts.map +1 -1
- package/dist/providers/ollama-cloud.js +1 -20
- package/dist/providers/ollama-cloud.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +0 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +1 -0
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +32 -5
- 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 +78 -17
- package/dist/providers/opencode-zen.js.map +1 -1
- package/dist/providers/quota-providers.d.ts.map +1 -1
- package/dist/providers/quota-providers.js +31 -23
- 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 +1 -0
- package/dist/providers/qwen-code.js.map +1 -1
- package/dist/providers/registry.d.ts +3 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +41 -31
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/result-helpers.d.ts +12 -6
- package/dist/providers/result-helpers.d.ts.map +1 -1
- package/dist/providers/result-helpers.js +4 -3
- package/dist/providers/result-helpers.js.map +1 -1
- package/dist/providers/xai.d.ts.map +1 -1
- package/dist/providers/xai.js +3 -0
- package/dist/providers/xai.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +24 -11
- package/dist/tui.tsx +39 -10
- package/package.json +1 -1
|
@@ -1,19 +1,65 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* NanoGPT provider wrapper.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { formatNanoGptBalanceValue, getNanoGptKeyDiagnostics, hasNanoGptApiKeyConfigured, queryNanoGptQuota, } from "../lib/nanogpt.js";
|
|
4
|
+
import { getNanoGptKeyDiagnostics, hasNanoGptApiKeyConfigured, queryNanoGptQuota, } from "../lib/nanogpt.js";
|
|
6
5
|
import { modelProviderMatchesRuntimeId } from "../lib/provider-model-matching.js";
|
|
7
6
|
import { attemptedResult, mapNullableProviderResult, simpleApiKeyStatusDetails, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
|
|
8
|
-
|
|
7
|
+
const REQUEST_UNIT = { kind: "count", unit: "request" };
|
|
8
|
+
const USD_UNIT = { kind: "currency", code: "USD" };
|
|
9
|
+
const NANO_UNIT = { kind: "custom", symbol: "NANO" };
|
|
10
|
+
function canonicalNumberDecimal(value) {
|
|
9
11
|
if (!Number.isFinite(value))
|
|
12
|
+
throw new TypeError("NanoGPT usage value must be finite");
|
|
13
|
+
if (Object.is(value, -0))
|
|
10
14
|
return "0";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
const raw = String(value);
|
|
16
|
+
if (!/[eE]/u.test(raw))
|
|
17
|
+
return raw;
|
|
18
|
+
const match = /^(-?)(\d+)(?:\.(\d+))?[eE]([+-]?\d+)$/u.exec(raw);
|
|
19
|
+
if (!match)
|
|
20
|
+
throw new TypeError("NanoGPT usage value must be decimal-compatible");
|
|
21
|
+
const [, sign, integer, fraction = "", exponentRaw] = match;
|
|
22
|
+
const digits = `${integer}${fraction}`;
|
|
23
|
+
const decimalIndex = integer.length + Number(exponentRaw);
|
|
24
|
+
if (decimalIndex <= 0)
|
|
25
|
+
return `${sign}0.${"0".repeat(-decimalIndex)}${digits}`;
|
|
26
|
+
if (decimalIndex >= digits.length) {
|
|
27
|
+
return `${sign}${digits}${"0".repeat(decimalIndex - digits.length)}`;
|
|
28
|
+
}
|
|
29
|
+
return `${sign}${digits.slice(0, decimalIndex)}.${digits.slice(decimalIndex)}`;
|
|
30
|
+
}
|
|
31
|
+
function quotaBasis(window) {
|
|
32
|
+
const basis = {};
|
|
33
|
+
for (const key of ["used", "limit", "remaining"]) {
|
|
34
|
+
const value = window.reportedBasis[key];
|
|
35
|
+
if (value === undefined)
|
|
36
|
+
continue;
|
|
37
|
+
basis[key] = {
|
|
38
|
+
quantity: { decimal: canonicalNumberDecimal(value), unit: REQUEST_UNIT },
|
|
39
|
+
authority: "provider_reported",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return basis.used || basis.limit || basis.remaining ? basis : undefined;
|
|
14
43
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
44
|
+
function pushQuotaEntry(entries, window, accountingWindow) {
|
|
45
|
+
const basis = quotaBasis(window);
|
|
46
|
+
entries.push({
|
|
47
|
+
accounting: {
|
|
48
|
+
resultType: "quota",
|
|
49
|
+
acquisitionMethod: "remote_api",
|
|
50
|
+
ownership: "maintained",
|
|
51
|
+
authority: "provider_reported",
|
|
52
|
+
},
|
|
53
|
+
name: `nanogpt-${accountingWindow}-quota`,
|
|
54
|
+
group: "NanoGPT",
|
|
55
|
+
percentRemaining: window.percentRemaining,
|
|
56
|
+
resetTimeIso: window.resetTimeIso,
|
|
57
|
+
semantic: {
|
|
58
|
+
metric: { kind: "window", window: accountingWindow },
|
|
59
|
+
prominence: "primary",
|
|
60
|
+
},
|
|
61
|
+
...(basis ? { basis } : {}),
|
|
62
|
+
});
|
|
17
63
|
}
|
|
18
64
|
function mapNanoGptSuccess(result) {
|
|
19
65
|
const entries = [];
|
|
@@ -22,52 +68,29 @@ function mapNanoGptSuccess(result) {
|
|
|
22
68
|
message: entry.message,
|
|
23
69
|
})) ?? [];
|
|
24
70
|
const subscription = result.subscription;
|
|
25
|
-
if (subscription?.daily)
|
|
26
|
-
entries.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
authority: "provider_reported",
|
|
32
|
-
},
|
|
33
|
-
name: "NanoGPT Daily",
|
|
34
|
-
group: "NanoGPT",
|
|
35
|
-
label: "Daily:",
|
|
36
|
-
right: formatUsageRight(subscription.daily),
|
|
37
|
-
percentRemaining: subscription.daily.percentRemaining,
|
|
38
|
-
resetTimeIso: subscription.daily.resetTimeIso,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
if (subscription?.monthly) {
|
|
71
|
+
if (subscription?.daily)
|
|
72
|
+
pushQuotaEntry(entries, subscription.daily, "day");
|
|
73
|
+
if (subscription?.monthly)
|
|
74
|
+
pushQuotaEntry(entries, subscription.monthly, "month");
|
|
75
|
+
const balance = result.balance;
|
|
76
|
+
if (balance?.usdBalanceRaw || balance?.nanoBalanceRaw) {
|
|
42
77
|
entries.push({
|
|
43
|
-
|
|
44
|
-
resultType: "quota",
|
|
45
|
-
acquisitionMethod: "remote_api",
|
|
46
|
-
ownership: "maintained",
|
|
47
|
-
authority: "provider_reported",
|
|
48
|
-
},
|
|
49
|
-
name: "NanoGPT Monthly",
|
|
50
|
-
group: "NanoGPT",
|
|
51
|
-
label: "Monthly:",
|
|
52
|
-
right: formatUsageRight(subscription.monthly),
|
|
53
|
-
percentRemaining: subscription.monthly.percentRemaining,
|
|
54
|
-
resetTimeIso: subscription.monthly.resetTimeIso,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
const balanceValue = result.balance ? formatNanoGptBalanceValue(result.balance) : null;
|
|
58
|
-
if (balanceValue) {
|
|
59
|
-
entries.push({
|
|
60
|
-
kind: "value",
|
|
78
|
+
kind: "quantity",
|
|
61
79
|
accounting: {
|
|
62
80
|
resultType: "balance",
|
|
63
81
|
acquisitionMethod: "remote_api",
|
|
64
82
|
ownership: "maintained",
|
|
65
83
|
authority: "provider_reported",
|
|
66
84
|
},
|
|
67
|
-
name: "
|
|
85
|
+
name: "nanogpt-current-balance",
|
|
68
86
|
group: "NanoGPT",
|
|
69
|
-
|
|
70
|
-
|
|
87
|
+
semantic: {
|
|
88
|
+
metric: { kind: "component", component: "current_balance" },
|
|
89
|
+
prominence: "primary",
|
|
90
|
+
},
|
|
91
|
+
quantity: balance.usdBalanceRaw
|
|
92
|
+
? { decimal: balance.usdBalanceRaw, unit: USD_UNIT }
|
|
93
|
+
: { decimal: balance.nanoBalanceRaw, unit: NANO_UNIT },
|
|
71
94
|
});
|
|
72
95
|
}
|
|
73
96
|
if (subscription?.state && subscription.state.toLowerCase() !== "active") {
|
|
@@ -83,7 +106,7 @@ function mapNanoGptSuccess(result) {
|
|
|
83
106
|
});
|
|
84
107
|
}
|
|
85
108
|
const formatSubscriptionUsage = (usage) => usage
|
|
86
|
-
? `${
|
|
109
|
+
? `${canonicalNumberDecimal(usage.used)}/${canonicalNumberDecimal(usage.limit)} remaining=${canonicalNumberDecimal(usage.remaining)} percent_remaining=${usage.percentRemaining} reset_at=${usage.resetTimeIso ?? "(none)"}`
|
|
87
110
|
: undefined;
|
|
88
111
|
const statusDetails = [
|
|
89
112
|
...statusDetailsFromRecord({
|
|
@@ -98,10 +121,8 @@ function mapNanoGptSuccess(result) {
|
|
|
98
121
|
monthly_usage: formatSubscriptionUsage(subscription?.monthly),
|
|
99
122
|
billing_period_end: subscription ? (subscription.currentPeriodEndIso ?? "(none)") : undefined,
|
|
100
123
|
grace_until: subscription?.graceUntilIso,
|
|
101
|
-
balance_usd:
|
|
102
|
-
|
|
103
|
-
: "(none)",
|
|
104
|
-
balance_nano: result.balance?.nanoBalanceRaw ?? "(none)",
|
|
124
|
+
balance_usd: balance?.usdBalanceRaw ?? "(none)",
|
|
125
|
+
balance_nano: balance?.nanoBalanceRaw ?? "(none)",
|
|
105
126
|
}),
|
|
106
127
|
...(result.endpointErrors ?? []).map((endpointError) => ({
|
|
107
128
|
key: `live_error_${endpointError.endpoint}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nanogpt.js","sourceRoot":"","sources":["../../src/providers/nanogpt.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"nanogpt.js","sourceRoot":"","sources":["../../src/providers/nanogpt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ollama Cloud provider wrapper.
|
|
3
3
|
*
|
|
4
|
-
* Queries the Ollama Cloud usage API and reports session/weekly quota
|
|
5
|
-
* provider-reported per-model request counts.
|
|
4
|
+
* Queries the Ollama Cloud usage API and reports session/weekly quota.
|
|
6
5
|
*/
|
|
7
6
|
import type { QuotaProvider } from "../lib/entries.js";
|
|
8
7
|
export declare const ollamaCloudProvider: QuotaProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama-cloud.d.ts","sourceRoot":"","sources":["../../src/providers/ollama-cloud.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ollama-cloud.d.ts","sourceRoot":"","sources":["../../src/providers/ollama-cloud.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AA0E3B,eAAO,MAAM,mBAAmB,EAAE,aA+BjC,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ollama Cloud provider wrapper.
|
|
3
3
|
*
|
|
4
|
-
* Queries the Ollama Cloud usage API and reports session/weekly quota
|
|
5
|
-
* provider-reported per-model request counts.
|
|
4
|
+
* Queries the Ollama Cloud usage API and reports session/weekly quota.
|
|
6
5
|
*/
|
|
7
6
|
import { queryOllamaCloudQuota } from "../lib/ollama-cloud.js";
|
|
8
7
|
import { getOllamaCloudKeyDiagnostics, hasOllamaCloudApiKey } from "../lib/ollama-cloud-config.js";
|
|
@@ -14,9 +13,6 @@ const REMOTE_API_ACCOUNTING = {
|
|
|
14
13
|
ownership: "maintained",
|
|
15
14
|
authority: "provider_reported",
|
|
16
15
|
};
|
|
17
|
-
function formatRequestCount(requests) {
|
|
18
|
-
return `${requests} ${requests === 1 ? "request" : "requests"}`;
|
|
19
|
-
}
|
|
20
16
|
function mapOllamaCloudSuccess(result) {
|
|
21
17
|
const entries = [];
|
|
22
18
|
if (result.session) {
|
|
@@ -43,20 +39,6 @@ function mapOllamaCloudSuccess(result) {
|
|
|
43
39
|
percentRemaining: result.weekly.percentRemaining,
|
|
44
40
|
});
|
|
45
41
|
}
|
|
46
|
-
for (const model of result.models) {
|
|
47
|
-
entries.push({
|
|
48
|
-
kind: "value",
|
|
49
|
-
accounting: {
|
|
50
|
-
resultType: "usage",
|
|
51
|
-
...REMOTE_API_ACCOUNTING,
|
|
52
|
-
},
|
|
53
|
-
name: `${OLLAMA_CLOUD_PROVIDER_LABEL} ${model.model}`,
|
|
54
|
-
group: OLLAMA_CLOUD_PROVIDER_LABEL,
|
|
55
|
-
label: `${model.model}:`,
|
|
56
|
-
metricLabel: model.model,
|
|
57
|
-
value: formatRequestCount(model.requests),
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
42
|
const errors = (result.rowErrors ?? []).map((message) => ({
|
|
61
43
|
label: OLLAMA_CLOUD_PROVIDER_LABEL,
|
|
62
44
|
message,
|
|
@@ -71,7 +53,6 @@ function mapOllamaCloudSuccess(result) {
|
|
|
71
53
|
...statusDetailsFromRecord({
|
|
72
54
|
session_usage_fraction: result.session?.usageFraction.toString(),
|
|
73
55
|
weekly_usage_fraction: result.weekly?.usageFraction.toString(),
|
|
74
|
-
model_rows: result.models.length.toString(),
|
|
75
56
|
}),
|
|
76
57
|
...(result.rowErrors ?? []).map((message, index) => ({
|
|
77
58
|
key: `live_error_${index + 1}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama-cloud.js","sourceRoot":"","sources":["../../src/providers/ollama-cloud.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ollama-cloud.js","sourceRoot":"","sources":["../../src/providers/ollama-cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,mBAAmB,CAAC;AAkBlG,eAAO,MAAM,cAAc,EAAE,aAkE5B,CAAC"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenAI (Plus/Pro) provider wrapper.
|
|
3
3
|
*/
|
|
4
|
-
import { sanitizeDisplayText } from "../lib/display-sanitize.js";
|
|
5
4
|
import { DEFAULT_OPENAI_AUTH_CACHE_MAX_AGE_MS, hasOpenAIOAuthCached, queryOpenAIQuota, resolveOpenAIOAuth, } from "../lib/openai.js";
|
|
6
5
|
import { readAuthFileCached } from "../lib/opencode-auth.js";
|
|
7
6
|
import { isCanonicalProviderAvailable } from "../lib/provider-availability.js";
|
|
@@ -58,8 +57,6 @@ export const openaiProvider = {
|
|
|
58
57
|
? "expired"
|
|
59
58
|
: "valid",
|
|
60
59
|
token_expires_at: expiresAt ? new Date(expiresAt).toISOString() : "(none)",
|
|
61
|
-
account_email: configured && auth.email ? sanitizeDisplayText(auth.email) : "(none)",
|
|
62
|
-
account_id: configured && auth.accountId ? sanitizeDisplayText(auth.accountId) : "(none)",
|
|
63
60
|
}));
|
|
64
61
|
},
|
|
65
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,oCAAoC,EACpC,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,EAAE,EAAE,QAAQ;IAEZ,KAAK,CAAC,WAAW,CAAC,GAAyB;QACzC,gFAAgF;QAChF,MAAM,qBAAqB,GAAG,MAAM,4BAA4B,CAAC;YAC/D,GAAG;YACH,UAAU,EAAE,QAAQ;YACpB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,IAAI,qBAAqB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,oBAAoB,CAAC,EAAE,QAAQ,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,OAAO,wBAAwB,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAyB;QACnC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,yBAAyB,CAAC,MAAM,EAAE;YACvD,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CACpB,eAAe,CACb,2BAA2B,CAAC;gBAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE;oBACV,UAAU,EAAE,YAAY;oBACxB,iBAAiB,EAAE,YAAY;oBAC/B,SAAS,EAAE,YAAY;oBACvB,SAAS,EAAE,mBAAmB;iBAC/B;gBACD,OAAO,EAAE;oBACP,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;oBAC7D,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;oBACrE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;oBACxE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;iBACpF;aACF,CAAC,EACF,EAAE,EACF;gBACE,uBAAuB,EAAE,MAAM,CAAC,KAAK;aACtC,CACF;SACJ,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC;QAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,OAAO,iBAAiB,CACtB,cAAc,EACd,uBAAuB,CAAC;YACtB,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC9C,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACnD,YAAY,EAAE,CAAC,UAAU;gBACvB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;oBACnC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,OAAO;YACb,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ;SAC3E,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-go.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-go.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,mBAAmB,CAAC;AA4B3B,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D;AA0CD,eAAO,MAAM,kBAAkB,EAAE,aA0FhC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { queryOpenCodeGoQuota } from "../lib/opencode-go.js";
|
|
2
3
|
import { DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS, getOpenCodeGoAuthDiagnostics, resolveOpenCodeGoAuthCached, } from "../lib/opencode-go-auth.js";
|
|
3
4
|
import { normalizeQuotaProviderId } from "../lib/provider-metadata.js";
|
|
@@ -9,6 +10,10 @@ const OPENCODE_GO_WINDOW_LABELS = {
|
|
|
9
10
|
weekly: { name: `${OPENCODE_GO_PROVIDER_LABEL} Weekly`, label: "Weekly:" },
|
|
10
11
|
monthly: { name: `${OPENCODE_GO_PROVIDER_LABEL} Monthly`, label: "Monthly:" },
|
|
11
12
|
};
|
|
13
|
+
let notSubscribedCredentialFingerprint = null;
|
|
14
|
+
export function __resetOpenCodeGoNotSubscribedForTests() {
|
|
15
|
+
notSubscribedCredentialFingerprint = null;
|
|
16
|
+
}
|
|
12
17
|
function authStatusDetails(diagnostics) {
|
|
13
18
|
return statusDetailsFromRecord({
|
|
14
19
|
auth_state: diagnostics.state,
|
|
@@ -48,7 +53,11 @@ export const opencodeGoProvider = {
|
|
|
48
53
|
const auth = await resolveOpenCodeGoAuthCached({
|
|
49
54
|
maxAgeMs: DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS,
|
|
50
55
|
});
|
|
51
|
-
|
|
56
|
+
if (auth.state !== "configured") {
|
|
57
|
+
notSubscribedCredentialFingerprint = null;
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
52
61
|
},
|
|
53
62
|
matchesCurrentModel(model) {
|
|
54
63
|
const [provider] = model.toLowerCase().split("/", 2);
|
|
@@ -67,19 +76,37 @@ export const opencodeGoProvider = {
|
|
|
67
76
|
maxAgeMs: DEFAULT_OPENCODE_GO_AUTH_CACHE_MAX_AGE_MS,
|
|
68
77
|
});
|
|
69
78
|
if (auth.state === "none") {
|
|
79
|
+
notSubscribedCredentialFingerprint = null;
|
|
70
80
|
return withStatusDetails(notAttemptedResult(), statusDetails);
|
|
71
81
|
}
|
|
72
82
|
if (auth.state === "invalid") {
|
|
83
|
+
notSubscribedCredentialFingerprint = null;
|
|
73
84
|
return withStatusDetails(attemptedErrorResult(OPENCODE_GO_PROVIDER_LABEL, auth.error), statusDetails);
|
|
74
85
|
}
|
|
86
|
+
const credentialFingerprint = createHash("sha256").update(auth.apiKey).digest("hex");
|
|
87
|
+
if (notSubscribedCredentialFingerprint !== credentialFingerprint) {
|
|
88
|
+
notSubscribedCredentialFingerprint = null;
|
|
89
|
+
}
|
|
90
|
+
if (notSubscribedCredentialFingerprint !== null) {
|
|
91
|
+
return withStatusDetails(attemptedResult([]), [
|
|
92
|
+
...statusDetails,
|
|
93
|
+
{ key: "opencode_go_state", value: "not_subscribed" },
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
75
96
|
const result = await queryOpenCodeGoQuota(auth.apiKey, {
|
|
76
97
|
requestTimeoutMs: ctx.config.requestTimeoutMs,
|
|
77
98
|
});
|
|
78
99
|
if (!result.success) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
if (result.notSubscribed === true) {
|
|
101
|
+
notSubscribedCredentialFingerprint = credentialFingerprint;
|
|
102
|
+
return withStatusDetails(attemptedResult([]), [
|
|
103
|
+
...statusDetails,
|
|
104
|
+
{ key: "opencode_go_state", value: "not_subscribed" },
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
return withStatusDetails(attemptedErrorResult(OPENCODE_GO_PROVIDER_LABEL, result.error, {
|
|
108
|
+
retryable: result.retryable,
|
|
109
|
+
}), [...statusDetails, { key: "live_fetch_error", value: result.error }]);
|
|
83
110
|
}
|
|
84
111
|
const liveDetails = OPENCODE_GO_WINDOW_ORDER.map((window) => {
|
|
85
112
|
const usage = result[window];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-zen.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-zen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-zen.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-zen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,mBAAmB,CAAC;AA8C3B,eAAO,MAAM,mBAAmB,EAAE,aAiKjC,CAAC"}
|
|
@@ -17,6 +17,17 @@ const OPENCODE_ZEN_BUDGET_ACCOUNTING = {
|
|
|
17
17
|
ownership: "maintained",
|
|
18
18
|
authority: "locally_derived",
|
|
19
19
|
};
|
|
20
|
+
const OPENCODE_ZEN_STATUS_ACCOUNTING = {
|
|
21
|
+
resultType: "status",
|
|
22
|
+
acquisitionMethod: "dashboard_scrape",
|
|
23
|
+
ownership: "maintained",
|
|
24
|
+
authority: "provider_reported",
|
|
25
|
+
};
|
|
26
|
+
const USD_UNIT = { kind: "currency", code: "USD" };
|
|
27
|
+
function zenUsdDecimal(value) {
|
|
28
|
+
const fixed = value.toFixed(8);
|
|
29
|
+
return fixed.replace(/0+$/u, "").replace(/\.$/u, "");
|
|
30
|
+
}
|
|
20
31
|
export const opencodeZenProvider = {
|
|
21
32
|
id: "opencode",
|
|
22
33
|
async isAvailable(_ctx) {
|
|
@@ -63,35 +74,85 @@ export const opencodeZenProvider = {
|
|
|
63
74
|
const monthlyUsageUsd = result.data.monthlyUsage === null
|
|
64
75
|
? null
|
|
65
76
|
: result.data.monthlyUsage / OPENCODE_ZEN_BILLING_UNITS_PER_DOLLAR;
|
|
66
|
-
const
|
|
77
|
+
const hasMonthlyBudget = effectiveMonthlyLimit !== null &&
|
|
67
78
|
Number.isFinite(effectiveMonthlyLimit) &&
|
|
68
79
|
effectiveMonthlyLimit > 0 &&
|
|
69
80
|
monthlyUsageUsd !== null &&
|
|
70
81
|
Number.isFinite(monthlyUsageUsd) &&
|
|
71
|
-
monthlyUsageUsd >= 0
|
|
72
|
-
|
|
82
|
+
monthlyUsageUsd >= 0;
|
|
83
|
+
const entries = [];
|
|
84
|
+
if (hasMonthlyBudget) {
|
|
85
|
+
const monthlyRemainingUsd = Math.max(0, effectiveMonthlyLimit - monthlyUsageUsd);
|
|
86
|
+
entries.push({
|
|
73
87
|
accounting: OPENCODE_ZEN_BUDGET_ACCOUNTING,
|
|
74
|
-
name: "",
|
|
88
|
+
name: "zen-monthly-budget",
|
|
75
89
|
group: OPENCODE_ZEN_GROUP,
|
|
76
|
-
percentRemaining: Math.min(100,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
percentRemaining: Math.min(100, (monthlyRemainingUsd / effectiveMonthlyLimit) * 100),
|
|
91
|
+
semantic: {
|
|
92
|
+
metric: { kind: "window", window: "month" },
|
|
93
|
+
prominence: "primary",
|
|
94
|
+
},
|
|
95
|
+
basis: {
|
|
96
|
+
used: {
|
|
97
|
+
quantity: { decimal: zenUsdDecimal(monthlyUsageUsd), unit: USD_UNIT },
|
|
98
|
+
authority: "provider_reported",
|
|
99
|
+
},
|
|
100
|
+
limit: {
|
|
101
|
+
quantity: { decimal: zenUsdDecimal(effectiveMonthlyLimit), unit: USD_UNIT },
|
|
102
|
+
authority: configuredMonthlyLimit === undefined ? "provider_reported" : "user_configured",
|
|
103
|
+
},
|
|
104
|
+
remaining: {
|
|
105
|
+
quantity: { decimal: zenUsdDecimal(monthlyRemainingUsd), unit: USD_UNIT },
|
|
106
|
+
authority: "locally_derived",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
entries.push({
|
|
112
|
+
accounting: OPENCODE_ZEN_BALANCE_ACCOUNTING,
|
|
113
|
+
kind: "quantity",
|
|
114
|
+
name: "zen-current-balance",
|
|
115
|
+
group: OPENCODE_ZEN_GROUP,
|
|
116
|
+
semantic: {
|
|
117
|
+
metric: { kind: "component", component: "current_balance" },
|
|
118
|
+
prominence: hasMonthlyBudget ? "supplementary" : "primary",
|
|
119
|
+
},
|
|
120
|
+
quantity: { decimal: zenUsdDecimal(balanceUsd), unit: USD_UNIT },
|
|
121
|
+
});
|
|
122
|
+
entries.push({
|
|
123
|
+
accounting: OPENCODE_ZEN_STATUS_ACCOUNTING,
|
|
124
|
+
kind: "boolean",
|
|
125
|
+
name: "zen-auto-reload",
|
|
126
|
+
group: OPENCODE_ZEN_GROUP,
|
|
127
|
+
semantic: {
|
|
128
|
+
metric: { kind: "component", component: "auto_reload" },
|
|
129
|
+
prominence: "supplementary",
|
|
130
|
+
},
|
|
131
|
+
value: result.data.reload,
|
|
132
|
+
});
|
|
133
|
+
return withStatusDetails(attemptedResult(entries), [
|
|
86
134
|
...statusDetails,
|
|
87
|
-
{ key: "balance_usd", value:
|
|
135
|
+
{ key: "balance_usd", value: `USD ${zenUsdDecimal(balanceUsd)}` },
|
|
88
136
|
{
|
|
89
137
|
key: "monthly_limit_usd",
|
|
90
|
-
value: result.data.monthlyLimit === null
|
|
138
|
+
value: result.data.monthlyLimit === null
|
|
139
|
+
? "(none)"
|
|
140
|
+
: `USD ${zenUsdDecimal(result.data.monthlyLimit)}`,
|
|
91
141
|
},
|
|
92
142
|
{
|
|
93
143
|
key: "last_payment_usd",
|
|
94
|
-
value: result.data.lastPayment === null
|
|
144
|
+
value: result.data.lastPayment === null
|
|
145
|
+
? "(none)"
|
|
146
|
+
: `USD ${zenUsdDecimal(result.data.lastPayment)}`,
|
|
147
|
+
},
|
|
148
|
+
{ key: "auto_reload", value: result.data.reload ? "true" : "false" },
|
|
149
|
+
{
|
|
150
|
+
key: "auto_reload_amount_raw",
|
|
151
|
+
value: result.data.reloadAmount === null ? "(none)" : String(result.data.reloadAmount),
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
key: "auto_reload_trigger_raw",
|
|
155
|
+
value: result.data.reloadTrigger === null ? "(none)" : String(result.data.reloadTrigger),
|
|
95
156
|
},
|
|
96
157
|
]);
|
|
97
158
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-zen.js","sourceRoot":"","sources":["../../src/providers/opencode-zen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAQjE,OAAO,EACL,qCAAqC,EACrC,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4CAA4C,EAC5C,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAC1C,MAAM,+BAA+B,GAAuB;IAC1D,UAAU,EAAE,SAAS;IACrB,iBAAiB,EAAE,kBAAkB;IACrC,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,mBAAmB;CAC/B,CAAC;AACF,MAAM,8BAA8B,GAAuB;IACzD,UAAU,EAAE,QAAQ;IACpB,iBAAiB,EAAE,kBAAkB;IACrC,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,iBAAiB;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-zen.js","sourceRoot":"","sources":["../../src/providers/opencode-zen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-providers.d.ts","sourceRoot":"","sources":["../../src/providers/quota-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAIL,sCAAsC,EACvC,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"quota-providers.d.ts","sourceRoot":"","sources":["../../src/providers/quota-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAIL,sCAAsC,EACvC,MAAM,2BAA2B,CAAC;AAanC,eAAO,MAAM,2BAA2B,oBAA+B,CAAC;AACxE,eAAO,MAAM,4BAA4B,+CAAyC,CAAC;AA0OnF,eAAO,MAAM,sBAAsB,EAAE,aAyFpC,CAAC"}
|