zcode-acp-server 0.40.1 → 0.41.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.
Files changed (51) hide show
  1. package/README.md +3 -3
  2. package/README.zh-CN.md +1 -1
  3. package/dist/bin/quota.d.ts +1 -1
  4. package/dist/bin/quota.d.ts.map +1 -1
  5. package/dist/bin/quota.js +28 -17
  6. package/dist/bin/quota.js.map +1 -1
  7. package/dist/code-fingerprint.json +2 -2
  8. package/dist/config/user-config.d.ts +10 -0
  9. package/dist/config/user-config.d.ts.map +1 -1
  10. package/dist/config/user-config.js +31 -4
  11. package/dist/config/user-config.js.map +1 -1
  12. package/dist/handlers/account.d.ts +21 -6
  13. package/dist/handlers/account.d.ts.map +1 -1
  14. package/dist/handlers/account.js +25 -8
  15. package/dist/handlers/account.js.map +1 -1
  16. package/dist/quota/combined.d.ts +13 -9
  17. package/dist/quota/combined.d.ts.map +1 -1
  18. package/dist/quota/combined.js +54 -29
  19. package/dist/quota/combined.js.map +1 -1
  20. package/dist/quota/ollama-cloud/cache.d.ts +16 -0
  21. package/dist/quota/ollama-cloud/cache.d.ts.map +1 -0
  22. package/dist/quota/ollama-cloud/cache.js +30 -0
  23. package/dist/quota/ollama-cloud/cache.js.map +1 -0
  24. package/dist/quota/ollama-cloud/client.d.ts +23 -0
  25. package/dist/quota/ollama-cloud/client.d.ts.map +1 -0
  26. package/dist/quota/ollama-cloud/client.js +33 -0
  27. package/dist/quota/ollama-cloud/client.js.map +1 -0
  28. package/dist/quota/ollama-cloud/config.d.ts +25 -0
  29. package/dist/quota/ollama-cloud/config.d.ts.map +1 -0
  30. package/dist/quota/ollama-cloud/config.js +31 -0
  31. package/dist/quota/ollama-cloud/config.js.map +1 -0
  32. package/dist/quota/ollama-cloud/format.d.ts +28 -0
  33. package/dist/quota/ollama-cloud/format.d.ts.map +1 -0
  34. package/dist/quota/ollama-cloud/format.js +53 -0
  35. package/dist/quota/ollama-cloud/format.js.map +1 -0
  36. package/dist/quota/ollama-cloud/index.d.ts +27 -0
  37. package/dist/quota/ollama-cloud/index.d.ts.map +1 -0
  38. package/dist/quota/ollama-cloud/index.js +91 -0
  39. package/dist/quota/ollama-cloud/index.js.map +1 -0
  40. package/dist/quota/ollama-cloud/types.d.ts +44 -0
  41. package/dist/quota/ollama-cloud/types.d.ts.map +1 -0
  42. package/dist/quota/ollama-cloud/types.js +15 -0
  43. package/dist/quota/ollama-cloud/types.js.map +1 -0
  44. package/dist/quota/opencode-go/config.d.ts +11 -11
  45. package/dist/quota/opencode-go/config.js +11 -11
  46. package/dist/quota/opencode-go/index.d.ts.map +1 -1
  47. package/dist/quota/opencode-go/index.js +16 -7
  48. package/dist/quota/opencode-go/index.js.map +1 -1
  49. package/docs/CLI.md +45 -13
  50. package/docs/REMOTE-CLIENTS.md +16 -2
  51. package/package.json +1 -1
package/README.md CHANGED
@@ -166,7 +166,7 @@ the primary client. Discovery API, tunnels, auth, and semantics:
166
166
  ## Unified CLI (`zcode-acp`)
167
167
 
168
168
  One command for every surface: an interactive terminal chat TUI (`zcode-acp`,
169
- powered by Martty), plan quota cards (`zcode-acp quota`, GLM + Opencode Go),
169
+ powered by Martty), plan quota cards (`zcode-acp quota`, GLM + Opencode Go + Ollama Cloud),
170
170
  the remote hub daemon (`zcode-acp hub`), and the stdio server editors invoke
171
171
  (`zcode-acp server`). TUI keys and quota setup: [docs/CLI.md](docs/CLI.md).
172
172
 
@@ -205,7 +205,7 @@ The server is organised in layers that mirror the ACP protocol:
205
205
  - `handlers/` — ACP method handlers (`session/new`, `session/prompt`, ...) and the turn engine
206
206
  - `config/` — model / mode / thought-level configOptions and runtime model switching
207
207
  - `remote/` — opt-in remote access: loopback ACP endpoint, multi-client broadcast, hub registration
208
- - `quota/` — GLM Coding Plan / Opencode Go usage API client (`/quota` command, `zcode-acp quota` subcommand)
208
+ - `quota/` — GLM Coding Plan / Opencode Go / Ollama Cloud usage API client (`/quota` command, `zcode-acp quota` subcommand)
209
209
  - `server.ts` — shared state and handler registration
210
210
  - `index.ts` — stdio wiring via the ACP SDK
211
211
 
@@ -244,7 +244,7 @@ Thanks to everyone who has contributed (updated automatically from the
244
244
  <a href="https://github.com/william0wang/zcode-acp/graphs/contributors">
245
245
  <!-- release-please re-stamps &v= on every release: the new URL busts the
246
246
  contrib.rocks and GitHub camo image caches. -->
247
- <img src="https://contrib.rocks/image?repo=william0wang/zcode-acp&v=0.40.1" alt="Contributors" /> <!-- x-release-please-version -->
247
+ <img src="https://contrib.rocks/image?repo=william0wang/zcode-acp&v=0.41.0" alt="Contributors" /> <!-- x-release-please-version -->
248
248
  </a>
249
249
 
250
250
  ## Related Projects
package/README.zh-CN.md CHANGED
@@ -136,7 +136,7 @@ ZCode CLI 内置于桌面应用中,默认不会加到 `PATH`。用 `ZCODE_BIN`
136
136
  ## 统一 CLI(zcode-acp)
137
137
 
138
138
  本包所有能力收敛在一条命令下:交互式终端聊天 REPL(原生滚动回溯)、套餐
139
- 用量卡片(`zcode-acp quota`,GLM + Opencode Go)、远程 hub 守护进程
139
+ 用量卡片(`zcode-acp quota`,GLM + Opencode Go + Ollama Cloud)、远程 hub 守护进程
140
140
  (`zcode-acp hub`)以及编辑器调用的 stdio server(`zcode-acp server`)。
141
141
  REPL 按键、补全、历史与配额配置详见 [docs/CLI.md](docs/CLI.md)。
142
142
 
@@ -27,7 +27,7 @@ export interface CliOptions {
27
27
  /** True when the user wants per-model MCP detail sub-lines shown. */
28
28
  detail: boolean;
29
29
  help: boolean;
30
- /** Which provider(s) to query — first positional arg (`glm`/`go`), else `all`. */
30
+ /** Which provider(s) to query — first positional arg (`glm`/`go`/`oc`), else `all`. */
31
31
  provider: Provider;
32
32
  /** True when the user explicitly asked for the plain monochrome layout. */
33
33
  plain: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/bin/quota.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAsB9B,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,kFAAkF;IAClF,QAAQ,EAAE,QAAQ,CAAC;IACnB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAqCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAM/F;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAiE7D;AAqKD;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzF"}
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/bin/quota.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAwB9B,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,uFAAuF;IACvF,QAAQ,EAAE,QAAQ,CAAC;IACnB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AA6CD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAM/F;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAiE7D;AAqKD;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzF"}
package/dist/bin/quota.js CHANGED
@@ -20,11 +20,13 @@
20
20
  import process from "node:process";
21
21
  import { clearCache as clearGlmCache } from "../quota/cache.js";
22
22
  import { defaultGoWindows, formatCombinedCardPlain, queryCombined, } from "../quota/combined.js";
23
+ import { clearOcCache } from "../quota/ollama-cloud/index.js";
23
24
  import { clearGoCache } from "../quota/opencode-go/index.js";
24
- /** Clear both provider caches — used by watch mode per tick for live values. */
25
+ /** Clear all provider caches — used by watch mode per tick for live values. */
25
26
  function clearAllCaches() {
26
27
  clearGlmCache();
27
28
  clearGoCache();
29
+ clearOcCache();
28
30
  }
29
31
  /** Minimum watch interval (ms). Equals the quota cache TTL. */
30
32
  const MIN_INTERVAL_MS = 10_000;
@@ -40,20 +42,27 @@ const ANSI = {
40
42
  /** Human-readable usage text. */
41
43
  const HELP_TEXT = `Usage: zcode-acp quota [provider] [options]
42
44
 
43
- Query usage from the terminal. By default shows both GLM Coding Plan and
44
- Opencode Go in one card; pass a provider to focus on one.
45
+ Query usage from the terminal. By default shows GLM Coding Plan, Opencode Go,
46
+ and Ollama Cloud (when configured) in one card; pass a provider to focus on one.
45
47
 
46
48
  Providers:
47
- (none) Both GLM + Opencode Go (rolling + weekly + monthly).
49
+ (none) All configured providers (GLM + Opencode Go + Ollama Cloud).
48
50
  glm GLM Coding Plan only.
49
51
  go Opencode Go only (rolling + weekly + monthly).
52
+ oc Ollama Cloud only (5h + weekly).
50
53
 
51
54
  GLM credentials: read from ~/.zcode/v2/config.json (created by the ZCode app).
52
- Opencode Go credentials (env vars override the config file, field by field):
53
- Config file ~/.pi/agent/opencode-go.json {"workspaceId":"wrk_…","authCookie":"Fe26.2**…"}
55
+ Non-GLM credentials resolve per field, highest precedence first:
56
+ 1. ~/.config/zcode-acp/config.json "quota" section, e.g.
57
+ {"quota":{"ollamaApiKey":"…","opencodeGoWorkspaceId":"wrk_…","opencodeGoAuthCookie":"Fe26.2**…"}}
58
+ 2. Environment variables (one-off overrides)
59
+ 3. ~/.pi/agent/opencode-go.json (legacy Pi-extension reuse, Opencode Go only)
60
+ Opencode Go:
54
61
  OPENCODE_GO_WORKSPACE_ID e.g. wrk_abc123 (from the opencode.ai workspace URL)
55
62
  OPENCODE_GO_AUTH_COOKIE the "auth" cookie value (starts with Fe26.2**)
56
63
  Get the cookie via browser DevTools → Application → Cookies → opencode.ai.
64
+ Ollama Cloud:
65
+ OLLAMA_API_KEY an Ollama Cloud API key (cloud.ollama.ai → API keys)
57
66
 
58
67
  Options:
59
68
  -w, --watch Watch mode: clear the screen and refresh periodically.
@@ -65,12 +74,13 @@ Options:
65
74
  -h, --help Show this help and exit.
66
75
 
67
76
  Examples:
68
- zcode-acp quota # both providers, print once and exit (color bars)
77
+ zcode-acp quota # all providers, print once and exit (color bars)
69
78
  zcode-acp quota go # Opencode Go only (3 windows)
79
+ zcode-acp quota oc # Ollama Cloud only (5h + weekly)
70
80
  zcode-acp quota glm -w # GLM only, live monitor every 30s
71
- zcode-acp quota -w -i 60 # both, refresh every 60s
72
- zcode-acp quota -d # both, include per-model MCP breakdown
73
- zcode-acp quota --plain # both, classic monochrome bars`;
81
+ zcode-acp quota -w -i 60 # all, refresh every 60s
82
+ zcode-acp quota -d # all, include per-model MCP breakdown
83
+ zcode-acp quota --plain # all, classic monochrome bars`;
74
84
  /**
75
85
  * Clamp a raw interval (seconds, optional) to a valid ms value. Returns the
76
86
  * clamped value plus whether a user-supplied value was raised to the floor.
@@ -141,7 +151,7 @@ export function parseArgs(argv) {
141
151
  if (Number.isFinite(n))
142
152
  interval = n;
143
153
  }
144
- else if (arg === "glm" || arg === "go") {
154
+ else if (arg === "glm" || arg === "go" || arg === "oc") {
145
155
  // First positional provider token. Only honor the first; a second
146
156
  // (e.g. `zcode-acp quota glm go`) is ignored to keep parsing simple.
147
157
  if (provider === "all")
@@ -283,12 +293,13 @@ async function runOnce(provider, detail, color) {
283
293
  const out = renderCard(combined, provider, detail, color).text;
284
294
  // Failure = every selected provider ended up unavailable (not merely
285
295
  // not_configured, which is a deliberate "skip me" state).
286
- const glmFailed = combined.glm.kind === "unavailable";
287
- const goFailed = combined.go.kind === "unavailable";
288
- const glmSelected = provider === "all" || provider === "glm";
289
- const goSelected = provider === "all" || provider === "go";
290
- const selectedFailed = (glmSelected && glmFailed && (!goSelected || goFailed)) ||
291
- (goSelected && goFailed && (!glmSelected || glmFailed));
296
+ const selected = [
297
+ [provider === "all" || provider === "glm", combined.glm.kind === "unavailable"],
298
+ [provider === "all" || provider === "go", combined.go.kind === "unavailable"],
299
+ [provider === "all" || provider === "oc", combined.oc.kind === "unavailable"],
300
+ ];
301
+ const anySelected = selected.some(([sel]) => sel);
302
+ const selectedFailed = anySelected && selected.every(([sel, failed]) => !sel || failed);
292
303
  if (selectedFailed) {
293
304
  process.stderr.write(out + "\n");
294
305
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/bin/quota.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,GAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,gFAAgF;AAChF,SAAS,cAAc;IACrB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;AACjB,CAAC;AAED,+DAA+D;AAC/D,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,mCAAmC;AACnC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,4EAA4E;AAC5E,MAAM,IAAI,GAAG;IACX,WAAW,EAAE,eAAe,EAAE,sBAAsB;IACpD,SAAS,EAAE,SAAS,EAAE,gCAAgC;IACtD,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;CACf,CAAC;AAiBX,iCAAiC;AACjC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEAgCgD,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACjE,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAA4B,CAAC;IACjC,IAAI,QAAQ,GAAa,KAAK,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACZ,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,UAAU;gBACb,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACZ,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,QAAQ,GAAG,CAAC,CAAC;oBACrC,CAAC,EAAE,CAAC,CAAC,oBAAoB;gBAC3B,CAAC;gBACD,MAAM;YACR,CAAC;YACD;gBACE,6DAA6D;gBAC7D,IAAI,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;oBAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,QAAQ,GAAG,CAAC,CAAC;gBACvC,CAAC;qBAAM,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,QAAQ,GAAG,CAAC,CAAC;gBACvC,CAAC;qBAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACzC,kEAAkE;oBAClE,qEAAqE;oBACrE,IAAI,QAAQ,KAAK,KAAK;wBAAE,QAAQ,GAAG,GAAG,CAAC;gBACzC,CAAC;gBACD,8DAA8D;gBAC9D,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,eAAe,EAAE,QAAQ,CAAC,OAAO;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,gBAAgB,CACtB,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/B,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,SAAS,aAAa,CAAC,YAAoB;IACzC,OAAO,cAAc,YAAY,GAAG,CAAC;AACvC,CAAC;AASD;;;;;;;;;GASG;AACH,SAAS,UAAU,CACjB,QAAuD,EACvD,QAAkB,EAClB,MAAe,EACf,KAAc,EACd,OAAgB;IAEhB,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,EAAE;QAC7C,QAAQ;QACR,GAAG,EAAE,EAAE,MAAM,EAAE;QACf,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACrC,KAAK;QACL,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;IACH,6EAA6E;IAC7E,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,UAAU,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,QAAQ,CACrB,UAAkB,EAClB,QAAkB,EAClB,MAAe,EACf,KAAc;IAEd,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,2DAA2D;IAC3D,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,cAAc,EAAE,CAAC,CAAC,0CAA0C;YAC5D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/C,+DAA+D;YAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,yEAAyE;YACzE,wEAAwE;YACxE,wEAAwE;YACxE,yEAAyE;YACzE,8DAA8D;YAC9D,KAAK,IAAI,SAAS,GAAG,WAAW,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM;gBACrC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrF,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;oBAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,wBAAwB;oBAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBAC1D,uEAAuE;oBACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,OAAO,CAAC,QAAkB,EAAE,MAAe,EAAE,KAAc;IACxE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;IAE/D,qEAAqE;IACrE,0DAA0D;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC;IACpD,MAAM,WAAW,GAAG,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAC;IAC7D,MAAM,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,CAAC;IAC3D,MAAM,cAAc,GAClB,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;QACvD,CAAC,UAAU,IAAI,QAAQ,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC;IAE1D,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAA0B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACjG,CAAC;IAED,qEAAqE;IACrE,kEAAkE;IAClE,uEAAuE;IACvE,yEAAyE;IACzE,gCAAgC;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAE3D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;IAC5B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC1E,CAAC,CAAC,EAAE,CAAC;AAEL,IAAI,eAAe,EAAE,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/bin/quota.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  {
2
- "fingerprint": "ad244a6584a069e07be528fb6e92182100b28728653461c14cc37bc1fd3d7e61",
3
- "fileCount": 76
2
+ "fingerprint": "2f6c927f8dab497812556244d3d758dc0098ac1662285bbf25f436bff0b5b630",
3
+ "fileCount": 82
4
4
  }
@@ -40,8 +40,18 @@ export interface RemoteUserConfig {
40
40
  bridgePort?: number;
41
41
  terminal?: TerminalPrefs;
42
42
  }
43
+ /** The `quota` section of the user config file. */
44
+ export interface QuotaUserConfig {
45
+ /** Ollama Cloud API key for the `zcode-acp quota` card (cloud.ollama.ai). */
46
+ ollamaApiKey?: string;
47
+ /** Opencode Go workspace id (`wrk_…`) — see the quota CLI docs. */
48
+ opencodeGoWorkspaceId?: string;
49
+ /** Opencode Go `auth` cookie value (`Fe26.2**…`). */
50
+ opencodeGoAuthCookie?: string;
51
+ }
43
52
  export interface UserConfig {
44
53
  remote?: RemoteUserConfig;
54
+ quota?: QuotaUserConfig;
45
55
  }
46
56
  /** Resolve the config file path: $XDG_CONFIG_HOME/zcode-acp or ~/.config/zcode-acp. */
47
57
  export declare function userConfigPath(env?: NodeJS.ProcessEnv): string;
@@ -1 +1 @@
1
- {"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAG3E;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,CAiE/E"}
1
+ {"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAG3E;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,CA+C/E"}
@@ -55,12 +55,39 @@ export function loadUserConfig(env = process.env) {
55
55
  return {};
56
56
  }
57
57
  const remote = parsed["remote"];
58
- if (remote === undefined)
58
+ if (remote === undefined && parsed["quota"] === undefined)
59
59
  return {};
60
- if (!isPlainObject(remote)) {
60
+ const result = {};
61
+ if (remote !== undefined && isPlainObject(remote)) {
62
+ result.remote = parseRemoteSection(remote, file);
63
+ }
64
+ else if (remote !== undefined) {
61
65
  warn(`config: "remote" in ${file} is not an object — ignoring the section`);
62
- return {};
63
66
  }
67
+ const quota = parsed["quota"];
68
+ if (quota !== undefined) {
69
+ if (!isPlainObject(quota)) {
70
+ warn(`config: "quota" in ${file} is not an object — ignoring the section`);
71
+ }
72
+ else {
73
+ const q = {};
74
+ for (const [jsonKey, prop] of [
75
+ ["ollamaApiKey", "ollamaApiKey"],
76
+ ["opencodeGoWorkspaceId", "opencodeGoWorkspaceId"],
77
+ ["opencodeGoAuthCookie", "opencodeGoAuthCookie"],
78
+ ]) {
79
+ const v = quota[jsonKey];
80
+ if (typeof v === "string" && v.trim())
81
+ q[prop] = v.trim();
82
+ }
83
+ if (Object.keys(q).length > 0)
84
+ result.quota = q;
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ /** Parse the validated `remote` section object into {@link RemoteUserConfig}. */
90
+ function parseRemoteSection(remote, file) {
64
91
  const out = {};
65
92
  if (typeof remote["enabled"] === "boolean")
66
93
  out.enabled = remote["enabled"];
@@ -106,6 +133,6 @@ export function loadUserConfig(env = process.env) {
106
133
  else if (terminal !== undefined) {
107
134
  warn(`config: remote.terminal in ${file} is not an object — ignoring`);
108
135
  }
109
- return { remote: out };
136
+ return out;
110
137
  }
111
138
  //# sourceMappingURL=user-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAgCnC,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,sDAAsD;IACnE,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CACF,WAAW,IAAI,kCAAkC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAC/F,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,IAAI,kCAAkC,CAAC,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,uBAAuB,IAAI,0CAA0C,CAAC,CAAC;QAC5E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5E,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QAC/D,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAU,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;YACxE,IAAI,CAAC,kBAAkB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACtE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAkB,EAAE,CAAC;QAC5B,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;iBAC/B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC/D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1C,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,wCAAwC,IAAI,sCAAsC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YAC/D,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1E,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,8BAA8B,IAAI,8BAA8B,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,15 @@
8
8
  *
9
9
  * The response mirrors the CLI card's data model so clients can reproduce it
10
10
  * exactly: one GLM section (plan level + per-window items with per-model
11
- * details) and one Opencode Go section (rolling/weekly/monthly windows, the
12
- * relative reset countdown converted to an absolute timestamp). Provider
13
- * failures are reported per-section as `kind` strings rather than throwing —
14
- * the client renders the same status line the CLI would (a `not_configured`
15
- * Go section is simply omitted, matching the CLI).
11
+ * details), one Opencode Go section (rolling/weekly/monthly windows, the
12
+ * relative reset countdown converted to an absolute timestamp), and one
13
+ * Ollama Cloud section (session/weekly fractions as percents — the API
14
+ * exposes no reset timestamps). Provider failures are reported per-section as
15
+ * `kind` strings rather than throwing — the client renders the same status
16
+ * line the CLI would (a `not_configured` section is simply omitted, matching
17
+ * the CLI).
16
18
  */
19
+ import type { OcQueryResult } from "../quota/ollama-cloud/types.js";
17
20
  import type { GoQueryResult, GoWindowKey } from "../quota/opencode-go/types.js";
18
21
  import type { QuotaItem, QuotaResult } from "../quota/types.js";
19
22
  /** GLM section — `items` present only on success. */
@@ -34,10 +37,22 @@ export interface GoUsageStats {
34
37
  kind: GoQueryResult["kind"];
35
38
  windows?: GoWindowEntry[];
36
39
  }
40
+ /** One Ollama Cloud window — percent only, no reset (the API has none). */
41
+ export interface OcWindowEntry {
42
+ key: "session" | "weekly" | "monthly";
43
+ label: string;
44
+ usagePercent: number;
45
+ }
46
+ /** Ollama Cloud section — `windows` present only on success. */
47
+ export interface OcUsageStats {
48
+ kind: OcQueryResult["kind"];
49
+ windows?: OcWindowEntry[];
50
+ }
37
51
  export interface UsageStatsResult {
38
52
  glm: GlmUsageStats;
39
53
  opencode: GoUsageStats;
54
+ ollama: OcUsageStats;
40
55
  }
41
- /** `account/usage_stats` handler — both providers, queried in parallel. */
56
+ /** `account/usage_stats` handler — all providers, queried in parallel. */
42
57
  export declare function accountUsageStats(): Promise<UsageStatsResult>;
43
58
  //# sourceMappingURL=account.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/handlers/account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAsCD,2EAA2E;AAC3E,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAGnE"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/handlers/account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAuDD,0EAA0E;AAC1E,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAGnE"}
@@ -8,11 +8,13 @@
8
8
  *
9
9
  * The response mirrors the CLI card's data model so clients can reproduce it
10
10
  * exactly: one GLM section (plan level + per-window items with per-model
11
- * details) and one Opencode Go section (rolling/weekly/monthly windows, the
12
- * relative reset countdown converted to an absolute timestamp). Provider
13
- * failures are reported per-section as `kind` strings rather than throwing —
14
- * the client renders the same status line the CLI would (a `not_configured`
15
- * Go section is simply omitted, matching the CLI).
11
+ * details), one Opencode Go section (rolling/weekly/monthly windows, the
12
+ * relative reset countdown converted to an absolute timestamp), and one
13
+ * Ollama Cloud section (session/weekly fractions as percents — the API
14
+ * exposes no reset timestamps). Provider failures are reported per-section as
15
+ * `kind` strings rather than throwing — the client renders the same status
16
+ * line the CLI would (a `not_configured` section is simply omitted, matching
17
+ * the CLI).
16
18
  */
17
19
  import { queryCombined } from "../quota/combined.js";
18
20
  /** Window labels matching the CLI's card (`5h` / `Week` / `Month`). */
@@ -51,9 +53,24 @@ function toGoStats(result, now = Date.now()) {
51
53
  });
52
54
  return { kind: "success", windows };
53
55
  }
54
- /** `account/usage_stats` handler — both providers, queried in parallel. */
56
+ /**
57
+ * Ollama windows as percents — the API's 0..1 fractions converted once here
58
+ * so remote clients can render the same bar the CLI does. Which windows exist
59
+ * depends on the plan (legacy: session+weekly; credit: monthly). No reset
60
+ * field: ollama.com returns no reset timestamps.
61
+ */
62
+ function toOcStats(result) {
63
+ if (result.kind !== "success")
64
+ return { kind: result.kind };
65
+ const LABELS = { session: "5h", weekly: "Week", monthly: "Month" };
66
+ const windows = ["session", "weekly", "monthly"].flatMap((key) => result[key] !== undefined
67
+ ? [{ key, label: LABELS[key], usagePercent: result[key] * 100 }]
68
+ : []);
69
+ return { kind: "success", windows };
70
+ }
71
+ /** `account/usage_stats` handler — all providers, queried in parallel. */
55
72
  export async function accountUsageStats() {
56
- const { glm, go } = await queryCombined("all");
57
- return { glm: toGlmStats(glm), opencode: toGoStats(go) };
73
+ const { glm, go, oc } = await queryCombined("all");
74
+ return { glm: toGlmStats(glm), opencode: toGoStats(go), ollama: toOcStats(oc) };
58
75
  }
59
76
  //# sourceMappingURL=account.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/handlers/account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA8BrD,uEAAuE;AACvE,MAAM,gBAAgB,GAAgC;IACpD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,2EAA2E;AAC3E,SAAS,UAAU,CAAC,MAAmB;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAqB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACxD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE,MAAM,OAAO,GAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1E,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;QAC5D,OAAO;YACL;gBACE,GAAG;gBACH,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC;gBAC5B,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,QAAQ,EAAE,MAAM,CAAC,SAAS,GAAG,YAAY,GAAG,IAAI;aACjD;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/handlers/account.ts"],"names":[],"mappings":"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"}
@@ -2,27 +2,31 @@
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 and Opencode Go in parallel and renders a single
6
- * merged card with one section per provider. The `/quota` slash command does
7
- * NOT use this — it stays on the single-provider GLM {@link formatQuota}.
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 Opencode Go scrape doesn't delay the GLM card.
11
- * - A `not_configured` Opencode Go result is silently dropped (no header,
12
- * no error line) in `all` mode, so GLM-only users see no noise. In `go`
13
- * mode it surfaces as a help line because the user explicitly asked.
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 type { FormatOptions } from "./format.js";
20
+ import type { OcQueryResult } from "./ollama-cloud/types.js";
18
21
  import type { GoQueryResult, GoWindowKey } from "./opencode-go/types.js";
19
22
  import type { QuotaResult } from "./types.js";
20
23
  /** Which provider(s) to query. */
21
- export type Provider = "all" | "glm" | "go";
22
- /** The combined result of both providers. */
24
+ export type Provider = "all" | "glm" | "go" | "oc";
25
+ /** The combined result of all providers. */
23
26
  export interface CombinedResult {
24
27
  glm: QuotaResult;
25
28
  go: GoQueryResult;
29
+ oc: OcQueryResult;
26
30
  }
27
31
  /**
28
32
  * Which Opencode Go windows to render. All three (rolling + weekly + monthly)
@@ -1 +1 @@
1
- {"version":3,"file":"combined.d.ts","sourceRoot":"","sources":["../../src/quota/combined.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAE5C,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,WAAW,CAAC;IACjB,EAAE,EAAE,aAAa,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,CAOlE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAa/E;AAeD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE;IACJ,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;gFAC4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACF,GACtB,MAAM,CAWR;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE;IACJ,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACF,GACtB,MAAM,CASR"}
1
+ {"version":3,"file":"combined.d.ts","sourceRoot":"","sources":["../../src/quota/combined.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,WAAW,CAAC;IACjB,EAAE,EAAE,aAAa,CAAC;IAClB,EAAE,EAAE,aAAa,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,CAOlE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAoB/E;AAqBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE;IACJ,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;gFAC4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACF,GACtB,MAAM,CAWR;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE;IACJ,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACF,GACtB,MAAM,CASR"}
@@ -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 and Opencode Go in parallel and renders a single
6
- * merged card with one section per provider. The `/quota` slash command does
7
- * NOT use this — it stays on the single-provider GLM {@link formatQuota}.
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 Opencode Go scrape doesn't delay the GLM card.
11
- * - A `not_configured` Opencode Go result is silently dropped (no header,
12
- * no error line) in `all` mode, so GLM-only users see no noise. In `go`
13
- * mode it surfaces as a help line because the user explicitly asked.
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
- // For `glm`-only we skip the Go fetch entirely; for `go`-only we skip GLM.
42
- // Skipping is cheaper and avoids touching Go credentials the user may not
43
- // have set. We still return both fields so the formatter's shape is uniform.
44
- const tasks = provider === "glm"
45
- ? [queryQuota(), Promise.resolve({ kind: "not_configured" })]
46
- : provider === "go"
47
- ? [Promise.resolve({ kind: "unavailable" }), queryGoUsage()]
48
- : [queryQuota(), queryGoUsage()];
49
- const [glm, go] = await Promise.all(tasks);
50
- return { glm, go };
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 the Go section should appear at all in `all` mode.
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 Go). All other kinds — including `unavailable`
57
- * and `auth_error` — render so the user sees that something is wrong.
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 shouldShowGo(provider, go) {
60
- if (provider === "glm")
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 (go.kind === "not_configured" && provider === "all")
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 = shouldShowGo("all", go);
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 whether or not a second section appears.
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 between sections (or after
153
- // the only section), right-aligned.
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 > 0)
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