zcode-acp-server 0.40.1 → 0.42.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 +3 -3
- package/README.zh-CN.md +1 -1
- package/assets/martty-plugins/quota-dock/plugin.json +3 -3
- package/dist/bin/quota.d.ts +1 -1
- package/dist/bin/quota.d.ts.map +1 -1
- package/dist/bin/quota.js +28 -17
- package/dist/bin/quota.js.map +1 -1
- package/dist/code-fingerprint.json +2 -2
- package/dist/config/user-config.d.ts +10 -0
- package/dist/config/user-config.d.ts.map +1 -1
- package/dist/config/user-config.js +31 -4
- package/dist/config/user-config.js.map +1 -1
- package/dist/handlers/account.d.ts +27 -6
- package/dist/handlers/account.d.ts.map +1 -1
- package/dist/handlers/account.js +41 -8
- package/dist/handlers/account.js.map +1 -1
- package/dist/quota/combined.d.ts +13 -9
- package/dist/quota/combined.d.ts.map +1 -1
- package/dist/quota/combined.js +54 -29
- package/dist/quota/combined.js.map +1 -1
- package/dist/quota/format.d.ts +12 -2
- package/dist/quota/format.d.ts.map +1 -1
- package/dist/quota/format.js +29 -3
- package/dist/quota/format.js.map +1 -1
- package/dist/quota/live.d.ts.map +1 -1
- package/dist/quota/live.js +12 -6
- package/dist/quota/live.js.map +1 -1
- package/dist/quota/ollama-cloud/cache.d.ts +16 -0
- package/dist/quota/ollama-cloud/cache.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/cache.js +30 -0
- package/dist/quota/ollama-cloud/cache.js.map +1 -0
- package/dist/quota/ollama-cloud/client.d.ts +36 -0
- package/dist/quota/ollama-cloud/client.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/client.js +56 -0
- package/dist/quota/ollama-cloud/client.js.map +1 -0
- package/dist/quota/ollama-cloud/config.d.ts +25 -0
- package/dist/quota/ollama-cloud/config.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/config.js +31 -0
- package/dist/quota/ollama-cloud/config.js.map +1 -0
- package/dist/quota/ollama-cloud/format.d.ts +30 -0
- package/dist/quota/ollama-cloud/format.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/format.js +57 -0
- package/dist/quota/ollama-cloud/format.js.map +1 -0
- package/dist/quota/ollama-cloud/index.d.ts +47 -0
- package/dist/quota/ollama-cloud/index.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/index.js +183 -0
- package/dist/quota/ollama-cloud/index.js.map +1 -0
- package/dist/quota/ollama-cloud/types.d.ts +53 -0
- package/dist/quota/ollama-cloud/types.d.ts.map +1 -0
- package/dist/quota/ollama-cloud/types.js +16 -0
- package/dist/quota/ollama-cloud/types.js.map +1 -0
- package/dist/quota/opencode-go/config.d.ts +11 -11
- package/dist/quota/opencode-go/config.js +11 -11
- package/dist/quota/opencode-go/index.d.ts.map +1 -1
- package/dist/quota/opencode-go/index.js +16 -7
- package/dist/quota/opencode-go/index.js.map +1 -1
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +10 -4
- package/dist/remote/hub-server.js.map +1 -1
- package/docs/CLI.md +48 -13
- package/docs/REMOTE-CLIENTS.md +18 -2
- package/package.json +1 -1
package/dist/quota/combined.js
CHANGED
|
@@ -2,20 +2,23 @@
|
|
|
2
2
|
* Combined multi-provider quota — the orchestration layer used by the
|
|
3
3
|
* `zcode-acp quota` CLI when no provider subcommand is given (default mode).
|
|
4
4
|
*
|
|
5
|
-
* Queries GLM Coding Plan
|
|
6
|
-
* merged card with one section per provider. The `/quota`
|
|
7
|
-
* NOT use this — it stays on the single-provider GLM
|
|
5
|
+
* Queries GLM Coding Plan, Opencode Go, and Ollama Cloud in parallel and
|
|
6
|
+
* renders a single merged card with one section per provider. The `/quota`
|
|
7
|
+
* slash command does NOT use this — it stays on the single-provider GLM
|
|
8
|
+
* {@link formatQuota}.
|
|
8
9
|
*
|
|
9
10
|
* Design notes:
|
|
10
|
-
* - `Promise.all` so a slow
|
|
11
|
-
* - A `not_configured`
|
|
12
|
-
* no error line) in `all` mode, so GLM-only users see no noise. In
|
|
13
|
-
* mode it surfaces as a help line because the user
|
|
11
|
+
* - `Promise.all` so a slow provider scrape doesn't delay the others.
|
|
12
|
+
* - A `not_configured` non-GLM result is silently dropped (no header,
|
|
13
|
+
* no error line) in `all` mode, so GLM-only users see no noise. In that
|
|
14
|
+
* provider's own mode it surfaces as a help line because the user
|
|
15
|
+
* explicitly asked.
|
|
14
16
|
* - The divider width is computed from the widest body line so the frame
|
|
15
17
|
* stays balanced regardless of which windows/counts are present.
|
|
16
18
|
*/
|
|
17
19
|
import { renderGlmSection } from "./format.js";
|
|
18
20
|
import { queryQuota } from "./index.js";
|
|
21
|
+
import { formatOcSection, queryOcUsage } from "./ollama-cloud/index.js";
|
|
19
22
|
import { formatGoSection, queryGoUsage } from "./opencode-go/index.js";
|
|
20
23
|
/**
|
|
21
24
|
* Which Opencode Go windows to render. All three (rolling + weekly + monthly)
|
|
@@ -38,28 +41,37 @@ export function defaultGoWindows(provider) {
|
|
|
38
41
|
* always resolves.
|
|
39
42
|
*/
|
|
40
43
|
export async function queryCombined(provider) {
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
// Single-provider modes skip the other fetches entirely. Skipping is
|
|
45
|
+
// cheaper and avoids touching credentials the user may not have set. We
|
|
46
|
+
// still return all fields so the formatter's shape is uniform.
|
|
47
|
+
const NONE_GLM = { kind: "unavailable" };
|
|
48
|
+
const NONE = { kind: "not_configured" };
|
|
49
|
+
const tasks = {
|
|
50
|
+
glm: provider === "go" || provider === "oc" ? Promise.resolve(NONE_GLM) : queryQuota(),
|
|
51
|
+
go: provider === "glm" || provider === "oc"
|
|
52
|
+
? Promise.resolve(NONE)
|
|
53
|
+
: queryGoUsage(),
|
|
54
|
+
oc: provider === "glm" || provider === "go"
|
|
55
|
+
? Promise.resolve(NONE)
|
|
56
|
+
: queryOcUsage(),
|
|
57
|
+
};
|
|
58
|
+
const [glm, go, oc] = await Promise.all([tasks.glm, tasks.go, tasks.oc]);
|
|
59
|
+
return { glm, go, oc };
|
|
51
60
|
}
|
|
52
61
|
/**
|
|
53
|
-
* Decide whether
|
|
62
|
+
* Decide whether a non-GLM section should appear at all in `all` mode.
|
|
54
63
|
*
|
|
55
64
|
* `not_configured` is silently dropped (the user hasn't set credentials and
|
|
56
|
-
* didn't explicitly ask for
|
|
57
|
-
* and `auth_error` — render so the user sees that something is
|
|
65
|
+
* didn't explicitly ask for that provider). All other kinds — including
|
|
66
|
+
* `unavailable` and `auth_error` — render so the user sees that something is
|
|
67
|
+
* wrong.
|
|
58
68
|
*/
|
|
59
|
-
function
|
|
60
|
-
|
|
69
|
+
function shouldShowSection(result, provider,
|
|
70
|
+
/** The single-provider token that explicitly selects this section. */
|
|
71
|
+
own) {
|
|
72
|
+
if (provider !== "all" && provider !== own)
|
|
61
73
|
return false;
|
|
62
|
-
if (
|
|
74
|
+
if (result.kind === "not_configured" && provider === "all")
|
|
63
75
|
return false;
|
|
64
76
|
return true;
|
|
65
77
|
}
|
|
@@ -109,7 +121,7 @@ function renderCombinedLines(combined, provider, glmOpts, goWindows, color = fal
|
|
|
109
121
|
/** Optional refresh countdown rendered on the separator line after the
|
|
110
122
|
* first section (e.g. `refresh in 29s`). */
|
|
111
123
|
refreshSuffix) {
|
|
112
|
-
const { glm, go } = combined;
|
|
124
|
+
const { glm, go, oc } = combined;
|
|
113
125
|
const sep = separatorLine(refreshSuffix);
|
|
114
126
|
// Fold the color flag into the GLM FormatOptions so it reaches renderGlmSection
|
|
115
127
|
// alongside detail/compact without each caller having to set it.
|
|
@@ -128,33 +140,46 @@ refreshSuffix) {
|
|
|
128
140
|
const lines = [section.header, ...section.body];
|
|
129
141
|
return sep ? [...lines, sep] : lines;
|
|
130
142
|
}
|
|
143
|
+
// Single-provider Ollama Cloud: header + body, no banner/divider.
|
|
144
|
+
if (provider === "oc") {
|
|
145
|
+
const section = formatOcSection(oc, color);
|
|
146
|
+
const lines = [section.header, ...section.body];
|
|
147
|
+
return sep ? [...lines, sep] : lines;
|
|
148
|
+
}
|
|
131
149
|
// Combined `all` mode. GLM renders full (MCP on its own line) — the layout
|
|
132
150
|
// is short enough now that compact mode isn't worth the lost detail.
|
|
133
151
|
const glmSection = renderGlmSection(glm, glmOptsColor);
|
|
134
|
-
const showGo =
|
|
152
|
+
const showGo = shouldShowSection(go, provider, "go");
|
|
135
153
|
const goSection = showGo
|
|
136
154
|
? formatGoSection(go, goWindows ?? defaultGoWindows("all"), Date.now(), color)
|
|
137
155
|
: null;
|
|
156
|
+
const ocSection = shouldShowSection(oc, provider, "oc") ? formatOcSection(oc, color) : null;
|
|
138
157
|
const hasGlm = glmSection.body.length > 0;
|
|
139
158
|
const hasGo = !!goSection && goSection.body.length > 0;
|
|
159
|
+
const hasOc = !!ocSection && ocSection.body.length > 0;
|
|
140
160
|
// The separator line always follows the FIRST rendered section, so its row
|
|
141
|
-
// is fixed
|
|
161
|
+
// is fixed regardless of how many sections follow.
|
|
142
162
|
const sections = [];
|
|
143
163
|
if (hasGlm)
|
|
144
164
|
sections.push([` ${glmSection.header}`, ...glmSection.body]);
|
|
145
165
|
if (hasGo)
|
|
146
166
|
sections.push([` ${goSection.header}`, ...goSection.body]);
|
|
167
|
+
if (hasOc)
|
|
168
|
+
sections.push([` ${ocSection.header}`, ...ocSection.body]);
|
|
147
169
|
if (sections.length === 0) {
|
|
148
170
|
return [" ⚠ no usage data available"];
|
|
149
171
|
}
|
|
150
172
|
// No banner or top divider — the section headers themselves identify each
|
|
151
173
|
// provider, and an extra banner line adds noise without information. The
|
|
152
|
-
// refresh countdown sits on the separator row
|
|
153
|
-
// the
|
|
174
|
+
// refresh countdown sits on the separator row after the FIRST section
|
|
175
|
+
// (right-aligned); later separators stay blank so the countdown is not
|
|
176
|
+
// duplicated across rows.
|
|
154
177
|
const body = [];
|
|
155
178
|
sections.forEach((sec, i) => {
|
|
156
|
-
if (i
|
|
179
|
+
if (i === 1)
|
|
157
180
|
body.push(sep);
|
|
181
|
+
if (i > 1)
|
|
182
|
+
body.push("");
|
|
158
183
|
body.push(...sec);
|
|
159
184
|
});
|
|
160
185
|
// If there's only one section, the separator still trails it so the refresh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combined.js","sourceRoot":"","sources":["../../src/quota/combined.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"combined.js","sourceRoot":"","sources":["../../src/quota/combined.ts"],"names":[],"mappings":"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"}
|
package/dist/quota/format.d.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* Inside a monospace code block the full-block reads as a solid, high-impact
|
|
15
15
|
* fill for used quota, with the light shade marking the remainder.
|
|
16
16
|
*/
|
|
17
|
+
import type { OcQueryResult } from "./ollama-cloud/types.js";
|
|
17
18
|
import type { GoQueryResult } from "./opencode-go/types.js";
|
|
18
19
|
import type { QuotaResult } from "./types.js";
|
|
19
20
|
/**
|
|
@@ -123,6 +124,15 @@ export declare function formatQuotaDock(result: QuotaResult): string | null;
|
|
|
123
124
|
* auth error, unavailable, or no monthly window exposed by the dashboard).
|
|
124
125
|
*/
|
|
125
126
|
export declare function formatGoDockSegment(go: GoQueryResult): string | null;
|
|
126
|
-
/**
|
|
127
|
-
|
|
127
|
+
/**
|
|
128
|
+
* Compact Ollama Cloud segment for the dock, showing ONLY the largest window
|
|
129
|
+
* the plan exposes — monthly for credit plans (`oc mo 60%`), else weekly
|
|
130
|
+
* (`oc wk 42%`), else the 5h session (`oc 5h 42%`) — plus its derived reset
|
|
131
|
+
* stamp (clock time for 5h, date for weekly/monthly; omitted when the monthly
|
|
132
|
+
* /api/me lookup failed). `null` when Ollama is not usable (not configured,
|
|
133
|
+
* auth error, unavailable, or no windows).
|
|
134
|
+
*/
|
|
135
|
+
export declare function formatOcDockSegment(oc: OcQueryResult): string | null;
|
|
136
|
+
/** Join the dock segments; `null` when all are absent. */
|
|
137
|
+
export declare function composeQuotaDock(...segments: (string | null)[]): string | null;
|
|
128
138
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/quota/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAiBzD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrE;AAyCD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgDD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,kBAAkB,CA+B9F;AAeD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAU7E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAGlF;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAgBlE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/quota/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAiBzD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrE;AAyCD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgDD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,kBAAkB,CA+B9F;AAeD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAU7E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAGlF;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAgBlE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAgBpE;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,GAAG,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,CAG9E"}
|
package/dist/quota/format.js
CHANGED
|
@@ -262,9 +262,35 @@ export function formatGoDockSegment(go) {
|
|
|
262
262
|
const date = `${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
263
263
|
return `go ${go.monthly.usagePercent}% ${date}`;
|
|
264
264
|
}
|
|
265
|
-
/**
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
/**
|
|
266
|
+
* Compact Ollama Cloud segment for the dock, showing ONLY the largest window
|
|
267
|
+
* the plan exposes — monthly for credit plans (`oc mo 60%`), else weekly
|
|
268
|
+
* (`oc wk 42%`), else the 5h session (`oc 5h 42%`) — plus its derived reset
|
|
269
|
+
* stamp (clock time for 5h, date for weekly/monthly; omitted when the monthly
|
|
270
|
+
* /api/me lookup failed). `null` when Ollama is not usable (not configured,
|
|
271
|
+
* auth error, unavailable, or no windows).
|
|
272
|
+
*/
|
|
273
|
+
export function formatOcDockSegment(oc) {
|
|
274
|
+
if (oc.kind !== "success")
|
|
275
|
+
return null;
|
|
276
|
+
const pct = (f) => Math.max(0, Math.min(100, Math.round(f * 100)));
|
|
277
|
+
if (typeof oc.monthly === "number") {
|
|
278
|
+
const date = formatResetDate(oc.monthlyResetAt);
|
|
279
|
+
return `oc mo ${pct(oc.monthly)}%${date ? ` ${date}` : ""}`;
|
|
280
|
+
}
|
|
281
|
+
if (typeof oc.weekly === "number") {
|
|
282
|
+
const date = formatResetDate(oc.weeklyResetAt);
|
|
283
|
+
return `oc wk ${pct(oc.weekly)}%${date ? ` ${date}` : ""}`;
|
|
284
|
+
}
|
|
285
|
+
if (typeof oc.session === "number") {
|
|
286
|
+
const clock = formatResetClock(oc.sessionResetAt);
|
|
287
|
+
return `oc 5h ${pct(oc.session)}%${clock ? ` ${clock}` : ""}`;
|
|
288
|
+
}
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
/** Join the dock segments; `null` when all are absent. */
|
|
292
|
+
export function composeQuotaDock(...segments) {
|
|
293
|
+
const parts = segments.filter((s) => s !== null);
|
|
268
294
|
return parts.length > 0 ? parts.join(" · ") : null;
|
|
269
295
|
}
|
|
270
296
|
/**
|
package/dist/quota/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/quota/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/quota/format.ts"],"names":[],"mappings":"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"}
|
package/dist/quota/live.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/quota/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/quota/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAYnD,6CAA6C;AAC7C,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAahD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAUhE;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AA6BD,6DAA6D;AAC7D,wBAAsB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BhG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKtE"}
|
package/dist/quota/live.js
CHANGED
|
@@ -17,8 +17,9 @@ import { buildConfigOptions } from "../config/options.js";
|
|
|
17
17
|
import { parseRemoteConfig } from "../remote/config.js";
|
|
18
18
|
import { log, warn } from "../utils.js";
|
|
19
19
|
import { enqueueSessionSend } from "../handlers/io.js";
|
|
20
|
-
import { composeQuotaDock, formatGoDockSegment, formatQuotaDock } from "./format.js";
|
|
20
|
+
import { composeQuotaDock, formatGoDockSegment, formatOcDockSegment, formatQuotaDock, } from "./format.js";
|
|
21
21
|
import { queryQuota } from "./index.js";
|
|
22
|
+
import { queryOcUsage } from "./ollama-cloud/index.js";
|
|
22
23
|
import { queryGoUsage } from "./opencode-go/index.js";
|
|
23
24
|
/** Interval between background refreshes. */
|
|
24
25
|
export const QUOTA_REFRESH_INTERVAL_MS = 60_000;
|
|
@@ -102,13 +103,18 @@ export async function fetchDockText(env = process.env) {
|
|
|
102
103
|
// hub absent/restarting — silent fallback below
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
|
-
// Go
|
|
106
|
-
// no segment, never blocking the GLM line.
|
|
107
|
-
const [glm, go] = await Promise.all([
|
|
106
|
+
// Go and Ollama Cloud are best-effort: not_configured / auth_error / fetch
|
|
107
|
+
// failure renders as no segment, never blocking the GLM line.
|
|
108
|
+
const [glm, go, oc] = await Promise.all([
|
|
108
109
|
queryQuota().then(formatQuotaDock),
|
|
109
|
-
queryGoUsage()
|
|
110
|
+
queryGoUsage()
|
|
111
|
+
.then(formatGoDockSegment)
|
|
112
|
+
.catch(() => null),
|
|
113
|
+
queryOcUsage()
|
|
114
|
+
.then(formatOcDockSegment)
|
|
115
|
+
.catch(() => null),
|
|
110
116
|
]);
|
|
111
|
-
return composeQuotaDock(glm, go);
|
|
117
|
+
return composeQuotaDock(glm, go, oc);
|
|
112
118
|
}
|
|
113
119
|
/**
|
|
114
120
|
* Response-time backstop for the first-fetch race: the first refresh can
|
package/dist/quota/live.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/quota/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/quota/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory TTL cache for Ollama Cloud results.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors {@link ../../cache.ts} but typed for {@link OcQueryResult}. Same
|
|
5
|
+
* 10s TTL — matches the quota cache and the CLI's minimum watch interval.
|
|
6
|
+
*/
|
|
7
|
+
import type { OcQueryResult } from "./types.js";
|
|
8
|
+
/** Return the cached result if still fresh, else `null`. */
|
|
9
|
+
export declare function getCached(): OcQueryResult | null;
|
|
10
|
+
/** Store a fresh result, stamping it with the current time. */
|
|
11
|
+
export declare function setCached(result: OcQueryResult): void;
|
|
12
|
+
/** Clear the cache (test helper, and used by CLI watch mode per tick). */
|
|
13
|
+
export declare function clearCache(): void;
|
|
14
|
+
/** Override the clock (test-only). Pass `undefined` to restore real time. */
|
|
15
|
+
export declare function setClock(fn?: () => number): void;
|
|
16
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD,4DAA4D;AAC5D,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAGhD;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAEhD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory TTL cache for Ollama Cloud results.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors {@link ../../cache.ts} but typed for {@link OcQueryResult}. Same
|
|
5
|
+
* 10s TTL — matches the quota cache and the CLI's minimum watch interval.
|
|
6
|
+
*/
|
|
7
|
+
/** How long a cached result is served before re-querying. */
|
|
8
|
+
const TTL_MS = 10_000;
|
|
9
|
+
let slot = null;
|
|
10
|
+
/** Inject a fake clock — only tests should need this. */
|
|
11
|
+
let now = () => Date.now();
|
|
12
|
+
/** Return the cached result if still fresh, else `null`. */
|
|
13
|
+
export function getCached() {
|
|
14
|
+
if (slot && now() - slot.at < TTL_MS)
|
|
15
|
+
return slot.result;
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
/** Store a fresh result, stamping it with the current time. */
|
|
19
|
+
export function setCached(result) {
|
|
20
|
+
slot = { result, at: now() };
|
|
21
|
+
}
|
|
22
|
+
/** Clear the cache (test helper, and used by CLI watch mode per tick). */
|
|
23
|
+
export function clearCache() {
|
|
24
|
+
slot = null;
|
|
25
|
+
}
|
|
26
|
+
/** Override the clock (test-only). Pass `undefined` to restore real time. */
|
|
27
|
+
export function setClock(fn) {
|
|
28
|
+
now = fn ?? (() => Date.now());
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6DAA6D;AAC7D,MAAM,MAAM,GAAG,MAAM,CAAC;AAEtB,IAAI,IAAI,GAAiD,IAAI,CAAC;AAE9D,yDAAyD;AACzD,IAAI,GAAG,GAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAEzC,4DAA4D;AAC5D,MAAM,UAAU,SAAS;IACvB,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU;IACxB,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,EAAiB;IACxC,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Cloud usage HTTP client.
|
|
3
|
+
*
|
|
4
|
+
* Talks to `https://ollama.com/api/usage` — an undocumented but live endpoint
|
|
5
|
+
* that returns `{limits:{session:{usage},weekly:{usage}}}` with usage as a
|
|
6
|
+
* 0..1 fraction. Auth is a plain Bearer API key (docs.ollama.com). No
|
|
7
|
+
* rate-limit headers exist on any Ollama endpoint, so the body is the only
|
|
8
|
+
* data source.
|
|
9
|
+
*/
|
|
10
|
+
/** The undocumented usage endpoint (verified live 2026-09). */
|
|
11
|
+
export declare const USAGE_URL = "https://ollama.com/api/usage";
|
|
12
|
+
/**
|
|
13
|
+
* Fetch the usage JSON body.
|
|
14
|
+
*
|
|
15
|
+
* @throws on network errors or timeout. The caller maps these to
|
|
16
|
+
* `unavailable`. Auth failures are NOT thrown — the status is
|
|
17
|
+
* returned so the orchestrator can classify 401/403 as `auth_error`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchOcUsage(apiKey: string, fetchImpl?: typeof globalThis.fetch): Promise<{
|
|
20
|
+
status: number;
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
/** The undocumented account-status endpoint (verified live 2026-09). */
|
|
24
|
+
export declare const ME_URL = "https://ollama.com/api/me";
|
|
25
|
+
/**
|
|
26
|
+
* Fetch the account-status JSON body (plan tier, subscription period end,
|
|
27
|
+
* suspended flag) — the only source for the monthly billing-period reset.
|
|
28
|
+
*
|
|
29
|
+
* Same contract as {@link fetchOcUsage}: throws on network errors/timeout,
|
|
30
|
+
* returns the status so the caller classifies 401/403.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fetchOcMe(apiKey: string, fetchImpl?: typeof globalThis.fetch): Promise<{
|
|
33
|
+
status: number;
|
|
34
|
+
text: string;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,+DAA+D;AAC/D,eAAO,MAAM,SAAS,iCAAiC,CAAC;AAExD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,UAAU,CAAC,KAAwB,GACpD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAW3C;AAED,wEAAwE;AACxE,eAAO,MAAM,MAAM,8BAA8B,CAAC;AAElD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,UAAU,CAAC,KAAwB,GACpD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Cloud usage HTTP client.
|
|
3
|
+
*
|
|
4
|
+
* Talks to `https://ollama.com/api/usage` — an undocumented but live endpoint
|
|
5
|
+
* that returns `{limits:{session:{usage},weekly:{usage}}}` with usage as a
|
|
6
|
+
* 0..1 fraction. Auth is a plain Bearer API key (docs.ollama.com). No
|
|
7
|
+
* rate-limit headers exist on any Ollama endpoint, so the body is the only
|
|
8
|
+
* data source.
|
|
9
|
+
*/
|
|
10
|
+
/** Request timeout (ms). Small JSON response; 10s is plenty. */
|
|
11
|
+
const TIMEOUT_MS = 10_000;
|
|
12
|
+
/** The undocumented usage endpoint (verified live 2026-09). */
|
|
13
|
+
export const USAGE_URL = "https://ollama.com/api/usage";
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the usage JSON body.
|
|
16
|
+
*
|
|
17
|
+
* @throws on network errors or timeout. The caller maps these to
|
|
18
|
+
* `unavailable`. Auth failures are NOT thrown — the status is
|
|
19
|
+
* returned so the orchestrator can classify 401/403 as `auth_error`.
|
|
20
|
+
*/
|
|
21
|
+
export async function fetchOcUsage(apiKey, fetchImpl = globalThis.fetch) {
|
|
22
|
+
const resp = await fetchImpl(USAGE_URL, {
|
|
23
|
+
method: "GET",
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: `Bearer ${apiKey}`,
|
|
26
|
+
Accept: "application/json",
|
|
27
|
+
},
|
|
28
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
29
|
+
});
|
|
30
|
+
const text = await resp.text();
|
|
31
|
+
return { status: resp.status, text };
|
|
32
|
+
}
|
|
33
|
+
/** The undocumented account-status endpoint (verified live 2026-09). */
|
|
34
|
+
export const ME_URL = "https://ollama.com/api/me";
|
|
35
|
+
/**
|
|
36
|
+
* Fetch the account-status JSON body (plan tier, subscription period end,
|
|
37
|
+
* suspended flag) — the only source for the monthly billing-period reset.
|
|
38
|
+
*
|
|
39
|
+
* Same contract as {@link fetchOcUsage}: throws on network errors/timeout,
|
|
40
|
+
* returns the status so the caller classifies 401/403.
|
|
41
|
+
*/
|
|
42
|
+
export async function fetchOcMe(apiKey, fetchImpl = globalThis.fetch) {
|
|
43
|
+
const resp = await fetchImpl(ME_URL, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${apiKey}`,
|
|
47
|
+
Accept: "application/json",
|
|
48
|
+
"Content-Type": "application/json",
|
|
49
|
+
},
|
|
50
|
+
body: "{}",
|
|
51
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
52
|
+
});
|
|
53
|
+
const text = await resp.text();
|
|
54
|
+
return { status: resp.status, text };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gEAAgE;AAChE,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,8BAA8B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,YAAqC,UAAU,CAAC,KAAK;IAErD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE;QACtC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;SAC3B;QACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;KACxC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,YAAqC,UAAU,CAAC,KAAK;IAErD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;KACxC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Cloud credential discovery.
|
|
3
|
+
*
|
|
4
|
+
* The API key comes from two sources, with the **config file taking
|
|
5
|
+
* precedence** over the environment variable (the user-config convention —
|
|
6
|
+
* the file is the authoritative home for stable preferences):
|
|
7
|
+
* 1. `quota.ollamaApiKey` in `~/.config/zcode-acp/config.json`.
|
|
8
|
+
* 2. `OLLAMA_API_KEY` env var — the name Ollama's own docs use for cloud
|
|
9
|
+
* authentication (`Authorization: Bearer $OLLAMA_API_KEY`), kept as a
|
|
10
|
+
* full fallback for setups without a config file and one-off overrides.
|
|
11
|
+
*
|
|
12
|
+
* Unlike Opencode Go (which reuses `~/.pi/agent/` for historical reasons),
|
|
13
|
+
* the Ollama key is a plain static API key and belongs in our own config.
|
|
14
|
+
*
|
|
15
|
+
* A missing/blank key yields `not_configured` (the section is silently
|
|
16
|
+
* skipped in `all` mode).
|
|
17
|
+
*/
|
|
18
|
+
/** Env var name — documented in the CLI help and README. */
|
|
19
|
+
export declare const ENV_API_KEY = "OLLAMA_API_KEY";
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the API key: config file first, env var as fallback. Blank strings
|
|
22
|
+
* count as absent.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadApiKey(): string | null;
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,4DAA4D;AAC5D,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAI1C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Cloud credential discovery.
|
|
3
|
+
*
|
|
4
|
+
* The API key comes from two sources, with the **config file taking
|
|
5
|
+
* precedence** over the environment variable (the user-config convention —
|
|
6
|
+
* the file is the authoritative home for stable preferences):
|
|
7
|
+
* 1. `quota.ollamaApiKey` in `~/.config/zcode-acp/config.json`.
|
|
8
|
+
* 2. `OLLAMA_API_KEY` env var — the name Ollama's own docs use for cloud
|
|
9
|
+
* authentication (`Authorization: Bearer $OLLAMA_API_KEY`), kept as a
|
|
10
|
+
* full fallback for setups without a config file and one-off overrides.
|
|
11
|
+
*
|
|
12
|
+
* Unlike Opencode Go (which reuses `~/.pi/agent/` for historical reasons),
|
|
13
|
+
* the Ollama key is a plain static API key and belongs in our own config.
|
|
14
|
+
*
|
|
15
|
+
* A missing/blank key yields `not_configured` (the section is silently
|
|
16
|
+
* skipped in `all` mode).
|
|
17
|
+
*/
|
|
18
|
+
import process from "node:process";
|
|
19
|
+
import { loadUserConfig } from "../../config/user-config.js";
|
|
20
|
+
/** Env var name — documented in the CLI help and README. */
|
|
21
|
+
export const ENV_API_KEY = "OLLAMA_API_KEY";
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the API key: config file first, env var as fallback. Blank strings
|
|
24
|
+
* count as absent.
|
|
25
|
+
*/
|
|
26
|
+
export function loadApiKey() {
|
|
27
|
+
const file = loadUserConfig().quota?.ollamaApiKey;
|
|
28
|
+
const key = (file ?? process.env[ENV_API_KEY] ?? "").trim();
|
|
29
|
+
return key.length > 0 ? key : null;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/quota/ollama-cloud/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Cloud usage formatting.
|
|
3
|
+
*
|
|
4
|
+
* Renders the plan's usage windows as progress bars in the same style as the
|
|
5
|
+
* GLM and Opencode Go sections, so all sections read as one card in the
|
|
6
|
+
* combined view. Which windows exist depends on the account's plan: legacy
|
|
7
|
+
* plans expose session (5h) + weekly; current credit plans expose monthly.
|
|
8
|
+
* The API exposes no reset timestamps, so the reset moments are derived at
|
|
9
|
+
* query time (window anchoring, or /api/me's billing period for monthly) and
|
|
10
|
+
* rendered as the same `MM-DD HH:MM` trailing stamp the other providers use —
|
|
11
|
+
* absent when the monthly lookup fails.
|
|
12
|
+
*/
|
|
13
|
+
import type { OcQueryResult } from "./types.js";
|
|
14
|
+
/** A rendered section: a header line and zero or more body lines. */
|
|
15
|
+
export interface RenderedSection {
|
|
16
|
+
header: string;
|
|
17
|
+
body: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Render the Ollama Cloud section.
|
|
21
|
+
*
|
|
22
|
+
* Used by the combined formatter. The header is always `Ollama Cloud`; body
|
|
23
|
+
* has one bar line per window. Non-success kinds return a header + a single
|
|
24
|
+
* explanatory line.
|
|
25
|
+
*
|
|
26
|
+
* When `color` is true the bar is a heat-colored 24-bit ANSI bar with the
|
|
27
|
+
* percent overlaid inside, mirroring the other providers' color layout.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatOcSection(result: OcQueryResult, color?: boolean): RenderedSection;
|
|
30
|
+
//# sourceMappingURL=format.d.ts.map
|