@slkiser/opencode-quota 3.8.6 → 3.8.8
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 -16
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.js +43 -23
- package/dist/lib/alibaba-auth.js.map +1 -1
- package/dist/lib/chutes-config.d.ts +1 -0
- package/dist/lib/chutes-config.d.ts.map +1 -1
- package/dist/lib/chutes-config.js +5 -2
- package/dist/lib/chutes-config.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +32 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/crof-config.d.ts +2 -1
- package/dist/lib/crof-config.d.ts.map +1 -1
- package/dist/lib/crof-config.js +9 -1
- package/dist/lib/crof-config.js.map +1 -1
- package/dist/lib/deepseek-auth.d.ts +15 -0
- package/dist/lib/deepseek-auth.d.ts.map +1 -0
- package/dist/lib/deepseek-auth.js +32 -0
- package/dist/lib/deepseek-auth.js.map +1 -0
- package/dist/lib/deepseek.d.ts +40 -0
- package/dist/lib/deepseek.d.ts.map +1 -0
- package/dist/lib/deepseek.js +109 -0
- package/dist/lib/deepseek.js.map +1 -0
- package/dist/lib/init-installer.d.ts +1 -0
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +39 -0
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts +43 -0
- package/dist/lib/maintainer-announcements.d.ts.map +1 -0
- package/dist/lib/maintainer-announcements.js +131 -0
- package/dist/lib/maintainer-announcements.js.map +1 -0
- package/dist/lib/minimax-auth.d.ts.map +1 -1
- package/dist/lib/minimax-auth.js +2 -4
- package/dist/lib/minimax-auth.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 +18 -7
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +7 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +17 -0
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-status.d.ts +6 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +34 -4
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/synthetic-config.d.ts +1 -0
- package/dist/lib/synthetic-config.d.ts.map +1 -1
- package/dist/lib/synthetic-config.js +5 -2
- package/dist/lib/synthetic-config.js.map +1 -1
- package/dist/lib/tui-panel-state.d.ts +18 -0
- package/dist/lib/tui-panel-state.d.ts.map +1 -1
- package/dist/lib/tui-panel-state.js +11 -0
- package/dist/lib/tui-panel-state.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts +12 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +91 -14
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +11 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +4 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/zhipu-auth.d.ts.map +1 -1
- package/dist/lib/zhipu-auth.js +7 -2
- package/dist/lib/zhipu-auth.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +130 -12
- package/dist/plugin.js.map +1 -1
- package/dist/providers/deepseek.d.ts +9 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +61 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +30 -17
- package/dist/providers/minimax-coding-plan.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/tui.d.ts.map +1 -1
- package/dist/tui.tsx +76 -34
- package/package.json +2 -2
|
@@ -13,13 +13,17 @@ import { attemptedErrorResult, attemptedResult, notAttemptedResult } from "./res
|
|
|
13
13
|
const MINIMAX_PROVIDER_LABEL = "MiniMax Coding Plan";
|
|
14
14
|
const MINIMAX_CHINA_PROVIDER_LABEL = "MiniMax Coding Plan (CN)";
|
|
15
15
|
const USER_AGENT = "OpenCode-Quota-Toast/1.0";
|
|
16
|
+
const MINIMAX_COUNT_SEMANTICS_BY_ENDPOINT = {
|
|
17
|
+
international: "remaining",
|
|
18
|
+
china: "used",
|
|
19
|
+
};
|
|
16
20
|
const MINIMAX_WINDOW_SPECS = [
|
|
17
21
|
{
|
|
18
22
|
window: "five_hour",
|
|
19
23
|
name: "MiniMax Coding Plan 5h",
|
|
20
24
|
label: "5h:",
|
|
21
25
|
getTotal: (model) => model.current_interval_total_count,
|
|
22
|
-
|
|
26
|
+
getCount: (model) => model.current_interval_usage_count,
|
|
23
27
|
getResetOffsetMs: (model) => model.remains_time,
|
|
24
28
|
},
|
|
25
29
|
{
|
|
@@ -27,7 +31,7 @@ const MINIMAX_WINDOW_SPECS = [
|
|
|
27
31
|
name: "MiniMax Coding Plan Weekly",
|
|
28
32
|
label: "Weekly:",
|
|
29
33
|
getTotal: (model) => model.current_weekly_total_count,
|
|
30
|
-
|
|
34
|
+
getCount: (model) => model.current_weekly_usage_count,
|
|
31
35
|
getResetOffsetMs: (model) => model.weekly_remains_time,
|
|
32
36
|
},
|
|
33
37
|
];
|
|
@@ -59,21 +63,28 @@ function sanitizeMiniMaxMessage(text, maxLength = 120) {
|
|
|
59
63
|
function clampRemaining(total, remaining) {
|
|
60
64
|
return Math.min(total, remaining);
|
|
61
65
|
}
|
|
66
|
+
function normalizeMiniMaxCounts(total, rawCount, countSemantics) {
|
|
67
|
+
if (countSemantics === "used") {
|
|
68
|
+
const used = Math.max(0, rawCount);
|
|
69
|
+
return { used, remaining: total - used };
|
|
70
|
+
}
|
|
71
|
+
const remaining = clampRemaining(total, rawCount);
|
|
72
|
+
return { used: total - remaining, remaining };
|
|
73
|
+
}
|
|
62
74
|
function isMiniMaxCodingModelName(modelName) {
|
|
63
75
|
const normalized = modelName.trim().toLowerCase();
|
|
64
76
|
return normalized === "minimax-m*" || normalized.startsWith("minimax-m");
|
|
65
77
|
}
|
|
66
|
-
function buildMiniMaxEntry(model, spec, providerLabel) {
|
|
78
|
+
function buildMiniMaxEntry(model, spec, providerLabel, countSemantics) {
|
|
67
79
|
const total = spec.getTotal(model);
|
|
68
|
-
const
|
|
80
|
+
const rawCount = spec.getCount(model);
|
|
69
81
|
const resetOffsetMs = spec.getResetOffsetMs(model);
|
|
70
|
-
if (!isFiniteNumber(total) || !isFiniteNumber(
|
|
82
|
+
if (!isFiniteNumber(total) || !isFiniteNumber(rawCount) || !isFiniteNumber(resetOffsetMs)) {
|
|
71
83
|
return null;
|
|
72
84
|
}
|
|
73
85
|
if (total <= 0)
|
|
74
86
|
return null;
|
|
75
|
-
const remaining =
|
|
76
|
-
const used = total - remaining;
|
|
87
|
+
const { used, remaining } = normalizeMiniMaxCounts(total, rawCount, countSemantics);
|
|
77
88
|
const percentRemaining = roundPercent((remaining / total) * 100);
|
|
78
89
|
return {
|
|
79
90
|
window: spec.window,
|
|
@@ -85,25 +96,25 @@ function buildMiniMaxEntry(model, spec, providerLabel) {
|
|
|
85
96
|
resetTimeIso: new Date(Date.now() + Math.max(0, resetOffsetMs)).toISOString(),
|
|
86
97
|
};
|
|
87
98
|
}
|
|
88
|
-
function buildMiniMaxEntries(model, providerLabel
|
|
99
|
+
function buildMiniMaxEntries(model, providerLabel, countSemantics) {
|
|
89
100
|
return MINIMAX_WINDOW_SPECS.flatMap((spec) => {
|
|
90
|
-
const entry = buildMiniMaxEntry(model, spec, providerLabel);
|
|
101
|
+
const entry = buildMiniMaxEntry(model, spec, providerLabel, countSemantics);
|
|
91
102
|
return entry ? [entry] : [];
|
|
92
103
|
});
|
|
93
104
|
}
|
|
94
|
-
function getWorstPercent(model) {
|
|
95
|
-
const percents = buildMiniMaxEntries(model).map((entry) => entry.percentRemaining);
|
|
105
|
+
function getWorstPercent(model, countSemantics) {
|
|
106
|
+
const percents = buildMiniMaxEntries(model, MINIMAX_PROVIDER_LABEL, countSemantics).map((entry) => entry.percentRemaining);
|
|
96
107
|
return percents.length > 0 ? Math.min(...percents) : Number.POSITIVE_INFINITY;
|
|
97
108
|
}
|
|
98
|
-
function selectCanonicalMiniMaxModel(models) {
|
|
109
|
+
function selectCanonicalMiniMaxModel(models, countSemantics) {
|
|
99
110
|
if (models.length === 0)
|
|
100
111
|
return null;
|
|
101
112
|
const wildcardModel = models.find((model) => model.model_name.trim().toLowerCase() === "minimax-m*") ?? null;
|
|
102
|
-
if (wildcardModel && Number.isFinite(getWorstPercent(wildcardModel))) {
|
|
113
|
+
if (wildcardModel && Number.isFinite(getWorstPercent(wildcardModel, countSemantics))) {
|
|
103
114
|
return wildcardModel;
|
|
104
115
|
}
|
|
105
116
|
return [...models].sort((left, right) => {
|
|
106
|
-
const percentDiff = getWorstPercent(left) - getWorstPercent(right);
|
|
117
|
+
const percentDiff = getWorstPercent(left, countSemantics) - getWorstPercent(right, countSemantics);
|
|
107
118
|
if (percentDiff !== 0)
|
|
108
119
|
return percentDiff;
|
|
109
120
|
return left.model_name.localeCompare(right.model_name);
|
|
@@ -119,7 +130,9 @@ function selectCanonicalMiniMaxModel(models) {
|
|
|
119
130
|
* the API returns successfully but no models have reportable quota.
|
|
120
131
|
*/
|
|
121
132
|
export async function queryMiniMaxQuota(apiKey, options = {}) {
|
|
122
|
-
const
|
|
133
|
+
const endpointId = options.endpoint ?? "international";
|
|
134
|
+
const endpoint = getMiniMaxQuotaEndpoint(endpointId);
|
|
135
|
+
const countSemantics = MINIMAX_COUNT_SEMANTICS_BY_ENDPOINT[endpointId];
|
|
123
136
|
try {
|
|
124
137
|
const response = await fetchWithTimeout(endpoint.quotaUrl, {
|
|
125
138
|
method: "GET",
|
|
@@ -143,9 +156,9 @@ export async function queryMiniMaxQuota(apiKey, options = {}) {
|
|
|
143
156
|
};
|
|
144
157
|
}
|
|
145
158
|
const matchingModels = (payload.model_remains ?? []).filter((model) => isMiniMaxModelRecord(model) && isMiniMaxCodingModelName(model.model_name));
|
|
146
|
-
const canonicalModel = selectCanonicalMiniMaxModel(matchingModels);
|
|
159
|
+
const canonicalModel = selectCanonicalMiniMaxModel(matchingModels, countSemantics);
|
|
147
160
|
const entries = canonicalModel
|
|
148
|
-
? buildMiniMaxEntries(canonicalModel, options.label ?? MINIMAX_PROVIDER_LABEL)
|
|
161
|
+
? buildMiniMaxEntries(canonicalModel, options.label ?? MINIMAX_PROVIDER_LABEL, countSemantics)
|
|
149
162
|
: [];
|
|
150
163
|
return { success: true, entries };
|
|
151
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimax-coding-plan.js","sourceRoot":"","sources":["../../src/providers/minimax-coding-plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EACL,qCAAqC,EACrC,wBAAwB,EACxB,6BAA6B,GAE9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,GAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEhG,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AACrD,MAAM,4BAA4B,GAAG,0BAA0B,CAAC;AAChE,MAAM,UAAU,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"minimax-coding-plan.js","sourceRoot":"","sources":["../../src/providers/minimax-coding-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAuBvD,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAuB9C"}
|
|
@@ -20,6 +20,7 @@ import { nanoGptProvider } from "./nanogpt.js";
|
|
|
20
20
|
import { minimaxChinaCodingPlanProvider, minimaxCodingPlanProvider, } from "./minimax-coding-plan.js";
|
|
21
21
|
import { opencodeGoProvider } from "./opencode-go.js";
|
|
22
22
|
import { kimiCodeProvider } from "./kimi-code.js";
|
|
23
|
+
import { deepseekProvider } from "./deepseek.js";
|
|
23
24
|
export function getProviders() {
|
|
24
25
|
// Order here defines display ordering in the toast.
|
|
25
26
|
return [
|
|
@@ -40,6 +41,7 @@ export function getProviders() {
|
|
|
40
41
|
minimaxCodingPlanProvider,
|
|
41
42
|
minimaxChinaCodingPlanProvider,
|
|
42
43
|
kimiCodeProvider,
|
|
44
|
+
deepseekProvider,
|
|
43
45
|
opencodeGoProvider,
|
|
44
46
|
];
|
|
45
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,YAAY;IAC1B,oDAAoD;IACpD,OAAO;QACL,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,cAAc;QACd,gBAAgB;QAChB,yBAAyB;QACzB,iBAAiB;QACjB,cAAc;QACd,YAAY;QACZ,yBAAyB;QACzB,uBAAuB;QACvB,WAAW;QACX,aAAa;QACb,eAAe;QACf,yBAAyB;QACzB,8BAA8B;QAC9B,gBAAgB;QAChB,gBAAgB;QAChB,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AA4fjC,QAAA,MAAM,YAAY,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAGjD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/tui.tsx
CHANGED
|
@@ -8,17 +8,20 @@ import type {
|
|
|
8
8
|
} from "@opencode-ai/plugin/tui";
|
|
9
9
|
import { Show, createEffect, createSignal, onCleanup } from "solid-js";
|
|
10
10
|
|
|
11
|
-
import type { CompactStatusState, SidebarPanelState } from "./lib/tui-panel-state.js";
|
|
11
|
+
import type { CompactStatusState, HomeBottomState, SidebarPanelState } from "./lib/tui-panel-state.js";
|
|
12
12
|
|
|
13
13
|
import {
|
|
14
14
|
getCompactStatusText,
|
|
15
|
+
getHomeBottomAnnouncementText,
|
|
15
16
|
getSidebarPanelLines,
|
|
17
|
+
getSidebarPanelLinesExpanded,
|
|
16
18
|
shouldRenderCompactStatus,
|
|
19
|
+
shouldRenderHomeBottom,
|
|
17
20
|
shouldRenderSidebarPanel,
|
|
18
21
|
} from "./lib/tui-panel-state.js";
|
|
19
22
|
import { getSidebarBodyLineColor } from "./lib/tui-line-style.js";
|
|
20
23
|
import {
|
|
21
|
-
|
|
24
|
+
loadTuiHomeBottomStatus,
|
|
22
25
|
loadTuiSessionQuotaSurfaces,
|
|
23
26
|
resolveTuiSurfaceRegistration,
|
|
24
27
|
} from "./lib/tui-runtime.js";
|
|
@@ -42,14 +45,14 @@ type SessionQuotaResource = {
|
|
|
42
45
|
release: () => void;
|
|
43
46
|
};
|
|
44
47
|
|
|
45
|
-
type
|
|
46
|
-
|
|
47
|
-
retain: () =>
|
|
48
|
+
type HomeBottomResource = {
|
|
49
|
+
bottom: () => HomeBottomState;
|
|
50
|
+
retain: () => HomeBottomResource;
|
|
48
51
|
release: () => void;
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
const sessionResources = new WeakMap<TuiPluginApi, Map<string, SessionQuotaResource>>();
|
|
52
|
-
const homeResources = new WeakMap<TuiPluginApi,
|
|
55
|
+
const homeResources = new WeakMap<TuiPluginApi, HomeBottomResource>();
|
|
53
56
|
|
|
54
57
|
function getSessionResourceMap(api: TuiPluginApi): Map<string, SessionQuotaResource> {
|
|
55
58
|
const existing = sessionResources.get(api);
|
|
@@ -190,8 +193,11 @@ function acquireSessionQuotaResource(api: TuiPluginApi, sessionID: string): Sess
|
|
|
190
193
|
return next;
|
|
191
194
|
}
|
|
192
195
|
|
|
193
|
-
function
|
|
194
|
-
const [
|
|
196
|
+
function createHomeBottomResource(api: TuiPluginApi): HomeBottomResource {
|
|
197
|
+
const [bottom, setBottom] = createSignal<HomeBottomState>({
|
|
198
|
+
status: "loading",
|
|
199
|
+
compact: { status: "loading" },
|
|
200
|
+
});
|
|
195
201
|
|
|
196
202
|
let refCount = 0;
|
|
197
203
|
let disposed = false;
|
|
@@ -212,10 +218,10 @@ function createHomeCompactResource(api: TuiPluginApi): HomeCompactResource {
|
|
|
212
218
|
inFlight = true;
|
|
213
219
|
const currentVersion = ++loadVersion;
|
|
214
220
|
|
|
215
|
-
void
|
|
221
|
+
void loadTuiHomeBottomStatus({ api })
|
|
216
222
|
.then((next) => {
|
|
217
223
|
if (disposed || currentVersion !== loadVersion) return;
|
|
218
|
-
|
|
224
|
+
setBottom(next);
|
|
219
225
|
})
|
|
220
226
|
.catch(() => {
|
|
221
227
|
if (disposed || currentVersion !== loadVersion) return;
|
|
@@ -263,8 +269,8 @@ function createHomeCompactResource(api: TuiPluginApi): HomeCompactResource {
|
|
|
263
269
|
homeResources.delete(api);
|
|
264
270
|
};
|
|
265
271
|
|
|
266
|
-
const resource:
|
|
267
|
-
|
|
272
|
+
const resource: HomeBottomResource = {
|
|
273
|
+
bottom,
|
|
268
274
|
retain: () => {
|
|
269
275
|
refCount += 1;
|
|
270
276
|
return resource;
|
|
@@ -280,16 +286,19 @@ function createHomeCompactResource(api: TuiPluginApi): HomeCompactResource {
|
|
|
280
286
|
return resource;
|
|
281
287
|
}
|
|
282
288
|
|
|
283
|
-
function
|
|
289
|
+
function acquireHomeBottomResource(api: TuiPluginApi): HomeBottomResource {
|
|
284
290
|
const existing = homeResources.get(api);
|
|
285
291
|
if (existing) return existing.retain();
|
|
286
292
|
|
|
287
|
-
const next =
|
|
293
|
+
const next = createHomeBottomResource(api).retain();
|
|
288
294
|
homeResources.set(api, next);
|
|
289
295
|
return next;
|
|
290
296
|
}
|
|
291
297
|
|
|
292
|
-
function useSessionQuotaResource(
|
|
298
|
+
function useSessionQuotaResource(
|
|
299
|
+
api: TuiPluginApi,
|
|
300
|
+
sessionID: () => string,
|
|
301
|
+
): () => SessionQuotaResource {
|
|
293
302
|
let current = acquireSessionQuotaResource(api, sessionID());
|
|
294
303
|
const [resource, setResource] = createSignal(current);
|
|
295
304
|
|
|
@@ -310,23 +319,46 @@ function useSessionQuotaResource(api: TuiPluginApi, sessionID: () => string): ()
|
|
|
310
319
|
return resource;
|
|
311
320
|
}
|
|
312
321
|
|
|
313
|
-
function SidebarContentView(props: {
|
|
314
|
-
api: TuiPluginApi;
|
|
315
|
-
sessionID: string;
|
|
316
|
-
}) {
|
|
322
|
+
function SidebarContentView(props: { api: TuiPluginApi; sessionID: string }) {
|
|
317
323
|
const resource = useSessionQuotaResource(props.api, () => props.sessionID);
|
|
318
324
|
const panel = () => resource().sidebar();
|
|
319
325
|
|
|
320
326
|
const lines = () => getSidebarPanelLines(panel());
|
|
327
|
+
const hasDetailLines = () => Boolean(panel().linesExpanded?.length);
|
|
328
|
+
|
|
329
|
+
const [collapsed, setCollapsed] = createSignal(
|
|
330
|
+
props.api.kv?.get("quota-sidebar-collapsed", true) ?? true,
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
const toggleCollapsed = () => {
|
|
334
|
+
if (!hasDetailLines()) return;
|
|
335
|
+
|
|
336
|
+
const next = !collapsed();
|
|
337
|
+
setCollapsed(next);
|
|
338
|
+
props.api.kv?.set("quota-sidebar-collapsed", next);
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
const displayLines = () => {
|
|
342
|
+
if (collapsed() || !hasDetailLines()) return lines();
|
|
343
|
+
return getSidebarPanelLinesExpanded(panel());
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
const toggleIcon = () => (collapsed() ? "▶" : "▼");
|
|
347
|
+
const providerCount = () => panel().providerCount ?? 0;
|
|
321
348
|
|
|
322
349
|
return (
|
|
323
350
|
<Show when={shouldRenderSidebarPanel(panel())}>
|
|
324
351
|
<box gap={0}>
|
|
325
|
-
<
|
|
326
|
-
<
|
|
327
|
-
|
|
352
|
+
<box flexDirection="row">
|
|
353
|
+
<text fg={props.api.theme.current.text} onMouseDown={toggleCollapsed}>
|
|
354
|
+
<b>{hasDetailLines() ? `${toggleIcon()} Quota` : "Quota"}</b>
|
|
355
|
+
</text>
|
|
356
|
+
<Show when={collapsed() && providerCount() > 0}>
|
|
357
|
+
<text fg={props.api.theme.current.textMuted}> ({providerCount()} providers)</text>
|
|
358
|
+
</Show>
|
|
359
|
+
</box>
|
|
328
360
|
<box gap={0}>
|
|
329
|
-
{
|
|
361
|
+
{displayLines().map((line) => (
|
|
330
362
|
<text fg={getSidebarBodyLineColor(line, props.api.theme.current)} wrapMode="none">
|
|
331
363
|
{line || " "}
|
|
332
364
|
</text>
|
|
@@ -394,17 +426,27 @@ function SessionPromptWithCompactStatus(props: {
|
|
|
394
426
|
);
|
|
395
427
|
}
|
|
396
428
|
|
|
397
|
-
function
|
|
398
|
-
const resource =
|
|
429
|
+
function HomeBottomView(props: { api: TuiPluginApi }) {
|
|
430
|
+
const resource = acquireHomeBottomResource(props.api);
|
|
399
431
|
onCleanup(() => resource.release());
|
|
400
432
|
|
|
433
|
+
const announcement = () => getHomeBottomAnnouncementText(resource.bottom());
|
|
434
|
+
const compact = () => resource.bottom().compact;
|
|
435
|
+
|
|
401
436
|
return (
|
|
402
|
-
<
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
437
|
+
<Show when={shouldRenderHomeBottom(resource.bottom())}>
|
|
438
|
+
<box gap={0}>
|
|
439
|
+
<text> </text>
|
|
440
|
+
<Show when={announcement()}>
|
|
441
|
+
<box flexDirection="row" justifyContent="center">
|
|
442
|
+
<text fg={props.api.theme.current.textMuted} wrapMode="none">
|
|
443
|
+
{announcement()}
|
|
444
|
+
</text>
|
|
445
|
+
</box>
|
|
446
|
+
</Show>
|
|
447
|
+
<CompactStatusLine api={props.api} panel={compact} justifyContent="center" />
|
|
448
|
+
</box>
|
|
449
|
+
</Show>
|
|
408
450
|
);
|
|
409
451
|
}
|
|
410
452
|
|
|
@@ -433,7 +475,7 @@ const tui: TuiPlugin = async (api) => {
|
|
|
433
475
|
}
|
|
434
476
|
|
|
435
477
|
const compactRegistration = surfaceRegistration.compact;
|
|
436
|
-
if (!compactRegistration.enabled) return;
|
|
478
|
+
if (!compactRegistration.enabled && !surfaceRegistration.homeBottom) return;
|
|
437
479
|
|
|
438
480
|
const compactSlots: Record<string, (ctx: any, props: any) => JSX.Element | null> = {};
|
|
439
481
|
|
|
@@ -459,8 +501,8 @@ const tui: TuiPlugin = async (api) => {
|
|
|
459
501
|
);
|
|
460
502
|
}
|
|
461
503
|
|
|
462
|
-
if (
|
|
463
|
-
compactSlots.home_bottom = () => <
|
|
504
|
+
if (surfaceRegistration.homeBottom) {
|
|
505
|
+
compactSlots.home_bottom = () => <HomeBottomView api={api} />;
|
|
464
506
|
}
|
|
465
507
|
|
|
466
508
|
if (Object.keys(compactSlots).length > 0) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slkiser/opencode-quota",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.8",
|
|
4
4
|
"packageManager": "pnpm@11.0.0",
|
|
5
5
|
"description": "OpenCode quota & tokens usage with zero context window pollution. Supports GitHub Copilot, OpenAI (Plus/Pro), Qwen Code, Chutes AI, Synthetic, Google Antigravity, Z.ai coding plan and more.",
|
|
6
6
|
"type": "module",
|
|
@@ -90,6 +90,6 @@
|
|
|
90
90
|
"@opencode-ai/plugin": "^1.4.3"
|
|
91
91
|
},
|
|
92
92
|
"engines": {
|
|
93
|
-
"node": ">=
|
|
93
|
+
"node": ">=20.0.0"
|
|
94
94
|
}
|
|
95
95
|
}
|