@slkiser/opencode-quota 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +278 -557
  2. package/dist/bin/opencode-quota.d.ts.map +1 -1
  3. package/dist/bin/opencode-quota.js +6 -0
  4. package/dist/bin/opencode-quota.js.map +1 -1
  5. package/dist/lib/anthropic.js +1 -1
  6. package/dist/lib/anthropic.js.map +1 -1
  7. package/dist/lib/cli-show.d.ts +8 -0
  8. package/dist/lib/cli-show.d.ts.map +1 -0
  9. package/dist/lib/cli-show.js +178 -0
  10. package/dist/lib/cli-show.js.map +1 -0
  11. package/dist/lib/config-file-utils.d.ts +13 -0
  12. package/dist/lib/config-file-utils.d.ts.map +1 -1
  13. package/dist/lib/config-file-utils.js +33 -0
  14. package/dist/lib/config-file-utils.js.map +1 -1
  15. package/dist/lib/config.d.ts +16 -3
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +452 -216
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/copilot.d.ts.map +1 -1
  20. package/dist/lib/copilot.js +3 -2
  21. package/dist/lib/copilot.js.map +1 -1
  22. package/dist/lib/entries.d.ts +3 -2
  23. package/dist/lib/entries.d.ts.map +1 -1
  24. package/dist/lib/format-utils.d.ts.map +1 -1
  25. package/dist/lib/format-utils.js +3 -2
  26. package/dist/lib/format-utils.js.map +1 -1
  27. package/dist/lib/format.d.ts.map +1 -1
  28. package/dist/lib/format.js +4 -2
  29. package/dist/lib/format.js.map +1 -1
  30. package/dist/lib/google-gemini-cli-companion.d.ts +29 -0
  31. package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -0
  32. package/dist/lib/google-gemini-cli-companion.js +166 -0
  33. package/dist/lib/google-gemini-cli-companion.js.map +1 -0
  34. package/dist/lib/google-gemini-cli.d.ts +48 -0
  35. package/dist/lib/google-gemini-cli.d.ts.map +1 -0
  36. package/dist/lib/google-gemini-cli.js +447 -0
  37. package/dist/lib/google-gemini-cli.js.map +1 -0
  38. package/dist/lib/grouped-entry-normalization.js +1 -1
  39. package/dist/lib/grouped-entry-normalization.js.map +1 -1
  40. package/dist/lib/init-installer.js +2 -2
  41. package/dist/lib/opencode-config-providers.d.ts +6 -0
  42. package/dist/lib/opencode-config-providers.d.ts.map +1 -0
  43. package/dist/lib/opencode-config-providers.js +79 -0
  44. package/dist/lib/opencode-config-providers.js.map +1 -0
  45. package/dist/lib/opencode-go.d.ts +5 -4
  46. package/dist/lib/opencode-go.d.ts.map +1 -1
  47. package/dist/lib/opencode-go.js +32 -18
  48. package/dist/lib/opencode-go.js.map +1 -1
  49. package/dist/lib/provider-metadata.d.ts +1 -1
  50. package/dist/lib/provider-metadata.d.ts.map +1 -1
  51. package/dist/lib/provider-metadata.js +19 -0
  52. package/dist/lib/provider-metadata.js.map +1 -1
  53. package/dist/lib/provider-model-matching.d.ts +12 -0
  54. package/dist/lib/provider-model-matching.d.ts.map +1 -0
  55. package/dist/lib/provider-model-matching.js +23 -0
  56. package/dist/lib/provider-model-matching.js.map +1 -0
  57. package/dist/lib/quota-render-data.d.ts +4 -0
  58. package/dist/lib/quota-render-data.d.ts.map +1 -1
  59. package/dist/lib/quota-render-data.js +4 -1
  60. package/dist/lib/quota-render-data.js.map +1 -1
  61. package/dist/lib/quota-runtime-context.d.ts +43 -0
  62. package/dist/lib/quota-runtime-context.d.ts.map +1 -0
  63. package/dist/lib/quota-runtime-context.js +62 -0
  64. package/dist/lib/quota-runtime-context.js.map +1 -0
  65. package/dist/lib/quota-state.d.ts +1 -0
  66. package/dist/lib/quota-state.d.ts.map +1 -1
  67. package/dist/lib/quota-state.js +18 -4
  68. package/dist/lib/quota-state.js.map +1 -1
  69. package/dist/lib/quota-status.d.ts +18 -1
  70. package/dist/lib/quota-status.d.ts.map +1 -1
  71. package/dist/lib/quota-status.js +106 -22
  72. package/dist/lib/quota-status.js.map +1 -1
  73. package/dist/lib/toast-format-grouped.d.ts.map +1 -1
  74. package/dist/lib/toast-format-grouped.js +5 -3
  75. package/dist/lib/toast-format-grouped.js.map +1 -1
  76. package/dist/lib/tui-config-diagnostics.d.ts +7 -2
  77. package/dist/lib/tui-config-diagnostics.d.ts.map +1 -1
  78. package/dist/lib/tui-config-diagnostics.js +27 -8
  79. package/dist/lib/tui-config-diagnostics.js.map +1 -1
  80. package/dist/lib/tui-runtime.d.ts.map +1 -1
  81. package/dist/lib/tui-runtime.js +25 -16
  82. package/dist/lib/tui-runtime.js.map +1 -1
  83. package/dist/lib/types.d.ts +55 -9
  84. package/dist/lib/types.d.ts.map +1 -1
  85. package/dist/lib/types.js +1 -0
  86. package/dist/lib/types.js.map +1 -1
  87. package/dist/plugin.d.ts.map +1 -1
  88. package/dist/plugin.js +423 -159
  89. package/dist/plugin.js.map +1 -1
  90. package/dist/providers/chutes.d.ts.map +1 -1
  91. package/dist/providers/chutes.js +2 -4
  92. package/dist/providers/chutes.js.map +1 -1
  93. package/dist/providers/copilot.d.ts.map +1 -1
  94. package/dist/providers/copilot.js +5 -10
  95. package/dist/providers/copilot.js.map +1 -1
  96. package/dist/providers/cursor.js +2 -2
  97. package/dist/providers/cursor.js.map +1 -1
  98. package/dist/providers/google-account-format.d.ts +6 -0
  99. package/dist/providers/google-account-format.d.ts.map +1 -0
  100. package/dist/providers/google-account-format.js +21 -0
  101. package/dist/providers/google-account-format.js.map +1 -0
  102. package/dist/providers/google-antigravity.d.ts.map +1 -1
  103. package/dist/providers/google-antigravity.js +7 -29
  104. package/dist/providers/google-antigravity.js.map +1 -1
  105. package/dist/providers/google-gemini-cli.d.ts +3 -0
  106. package/dist/providers/google-gemini-cli.d.ts.map +1 -0
  107. package/dist/providers/google-gemini-cli.js +63 -0
  108. package/dist/providers/google-gemini-cli.js.map +1 -0
  109. package/dist/providers/minimax-coding-plan.js +2 -2
  110. package/dist/providers/minimax-coding-plan.js.map +1 -1
  111. package/dist/providers/nanogpt.d.ts.map +1 -1
  112. package/dist/providers/nanogpt.js +2 -2
  113. package/dist/providers/nanogpt.js.map +1 -1
  114. package/dist/providers/openai.d.ts.map +1 -1
  115. package/dist/providers/openai.js +2 -4
  116. package/dist/providers/openai.js.map +1 -1
  117. package/dist/providers/opencode-go.d.ts +2 -2
  118. package/dist/providers/opencode-go.d.ts.map +1 -1
  119. package/dist/providers/opencode-go.js +60 -11
  120. package/dist/providers/opencode-go.js.map +1 -1
  121. package/dist/providers/registry.d.ts.map +1 -1
  122. package/dist/providers/registry.js +2 -0
  123. package/dist/providers/registry.js.map +1 -1
  124. package/dist/providers/synthetic.d.ts.map +1 -1
  125. package/dist/providers/synthetic.js +2 -4
  126. package/dist/providers/synthetic.js.map +1 -1
  127. package/package.json +2 -1
@@ -2,6 +2,7 @@ import type { QuotaProvider, QuotaProviderContext, QuotaProviderResult } from ".
2
2
  declare const QUOTA_PROVIDER_CACHE_VERSION: 1;
3
3
  export type PersistedQuotaProviderCacheEntry = {
4
4
  version: typeof QUOTA_PROVIDER_CACHE_VERSION;
5
+ packageVersion: string;
5
6
  key: string;
6
7
  providerId: string;
7
8
  timestamp: number;
@@ -1 +1 @@
1
- {"version":3,"file":"quota-state.d.ts","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAM7F,QAAA,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAKhD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,OAAO,4BAA4B,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAMF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAOzF;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAYR;AAMD,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1F;AAmKD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiE/B;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
1
+ {"version":3,"file":"quota-state.d.ts","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAO7F,QAAA,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAMhD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,OAAO,4BAA4B,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAMF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAOzF;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAaR;AAMD,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1F;AAkLD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyE/B;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
@@ -4,7 +4,9 @@ import { join } from "path";
4
4
  import { writeJsonAtomic } from "./atomic-json.js";
5
5
  import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
6
6
  import { isLiveLocalUsageProviderId } from "./provider-metadata.js";
7
+ import { getPackageVersion } from "./version.js";
7
8
  const QUOTA_PROVIDER_CACHE_VERSION = 1;
9
+ const QUOTA_PROVIDER_CACHE_PACKAGE_VERSION_FALLBACK = "unknown";
8
10
  const QUOTA_PROVIDER_CACHE_DIRNAME = "quota-provider-state";
9
11
  const QUOTA_PROVIDER_CACHE_RETENTION_MS = 24 * 60 * 60 * 1000;
10
12
  const QUOTA_PROVIDER_CACHE_PRUNE_INTERVAL_MS = 60 * 60 * 1000;
@@ -25,11 +27,12 @@ export function buildQuotaProviderStateCacheKey(providerId, ctx) {
25
27
  const cursorPlan = ctx.config.cursorPlan;
26
28
  const cursorIncludedApiUsd = ctx.config.cursorIncludedApiUsd ?? "";
27
29
  const cursorBillingCycleStartDay = ctx.config.cursorBillingCycleStartDay ?? "";
30
+ const opencodeGoWindows = ctx.config.opencodeGoWindows?.join(",") ?? "";
28
31
  const onlyCurrentModel = ctx.config.onlyCurrentModel ? "yes" : "no";
29
32
  const currentModel = ctx.config.currentModel ?? "";
30
33
  const currentProviderID = ctx.config.currentProviderID ?? "";
31
34
  const anthropicBinaryPath = ctx.config.anthropicBinaryPath ?? "";
32
- return `${providerId}|anthropicBinaryPath=${anthropicBinaryPath}|googleModels=${googleModels}|alibabaTier=${alibabaCodingPlanTier}|cursorPlan=${cursorPlan}|cursorIncludedApiUsd=${cursorIncludedApiUsd}|cursorBillingCycleStartDay=${cursorBillingCycleStartDay}|onlyCurrentModel=${onlyCurrentModel}|currentModel=${currentModel}|currentProviderID=${currentProviderID}`;
35
+ return `${providerId}|anthropicBinaryPath=${anthropicBinaryPath}|googleModels=${googleModels}|alibabaTier=${alibabaCodingPlanTier}|cursorPlan=${cursorPlan}|cursorIncludedApiUsd=${cursorIncludedApiUsd}|cursorBillingCycleStartDay=${cursorBillingCycleStartDay}|opencodeGoWindows=${opencodeGoWindows}|onlyCurrentModel=${onlyCurrentModel}|currentModel=${currentModel}|currentProviderID=${currentProviderID}`;
33
36
  }
34
37
  function getQuotaProviderCacheDir() {
35
38
  return join(getOpencodeRuntimeDirs().cacheDir, QUOTA_PROVIDER_CACHE_DIRNAME);
@@ -80,12 +83,16 @@ function isQuotaProviderResult(value) {
80
83
  }
81
84
  return true;
82
85
  }
83
- function isPersistedQuotaProviderCacheEntry(value, key, providerId) {
86
+ async function getQuotaProviderCachePackageVersion() {
87
+ return (await getPackageVersion()) ?? QUOTA_PROVIDER_CACHE_PACKAGE_VERSION_FALLBACK;
88
+ }
89
+ function isPersistedQuotaProviderCacheEntry(value, key, providerId, packageVersion) {
84
90
  if (!value || typeof value !== "object") {
85
91
  return false;
86
92
  }
87
93
  const entry = value;
88
94
  return (entry.version === QUOTA_PROVIDER_CACHE_VERSION &&
95
+ entry.packageVersion === packageVersion &&
89
96
  entry.key === key &&
90
97
  entry.providerId === providerId &&
91
98
  typeof entry.timestamp === "number" &&
@@ -135,7 +142,7 @@ async function readPersistedQuotaProviderCacheEntry(params) {
135
142
  try {
136
143
  const raw = await readFile(path, "utf-8");
137
144
  const parsed = JSON.parse(raw);
138
- if (!isPersistedQuotaProviderCacheEntry(parsed, params.key, params.providerId)) {
145
+ if (!isPersistedQuotaProviderCacheEntry(parsed, params.key, params.providerId, params.packageVersion)) {
139
146
  await safeRm(path);
140
147
  return null;
141
148
  }
@@ -144,6 +151,7 @@ async function readPersistedQuotaProviderCacheEntry(params) {
144
151
  }
145
152
  return {
146
153
  version: parsed.version,
154
+ packageVersion: parsed.packageVersion,
147
155
  key: parsed.key,
148
156
  providerId: parsed.providerId,
149
157
  timestamp: parsed.timestamp,
@@ -171,9 +179,13 @@ export async function fetchQuotaProviderResult(params) {
171
179
  }
172
180
  const key = buildQuotaProviderStateCacheKey(provider.id, ctx);
173
181
  const now = Date.now();
182
+ const packageVersion = await getQuotaProviderCachePackageVersion();
174
183
  await maybePrunePersistedQuotaProviderCache(now);
175
184
  const inMemory = inMemoryCache.get(key);
176
- if (inMemory && ttlMs > 0 && now - inMemory.timestamp < ttlMs) {
185
+ if (inMemory &&
186
+ inMemory.packageVersion === packageVersion &&
187
+ ttlMs > 0 &&
188
+ now - inMemory.timestamp < ttlMs) {
177
189
  return cloneQuotaProviderResult(inMemory.result);
178
190
  }
179
191
  const inFlight = inFlightByKey.get(key);
@@ -183,6 +195,7 @@ export async function fetchQuotaProviderResult(params) {
183
195
  const persisted = await readPersistedQuotaProviderCacheEntry({
184
196
  key,
185
197
  providerId: provider.id,
198
+ packageVersion,
186
199
  ttlMs,
187
200
  now,
188
201
  });
@@ -203,6 +216,7 @@ export async function fetchQuotaProviderResult(params) {
203
216
  }
204
217
  const entry = {
205
218
  version: QUOTA_PROVIDER_CACHE_VERSION,
219
+ packageVersion,
206
220
  key,
207
221
  providerId: provider.id,
208
222
  timestamp: Date.now(),
@@ -1 +1 @@
1
- {"version":3,"file":"quota-state.js","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,4BAA4B,GAAG,CAAU,CAAC;AAChD,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAC5D,MAAM,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9D,MAAM,sCAAsC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAU9D,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4C,CAAC;AAC1E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwC,CAAC;AACtE,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,MAAM,UAAU,wBAAwB,CAAC,MAA2B;IAClE,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACtD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAAkB,EAClB,GAAyB;IAEzB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;IACnE,MAAM,0BAA0B,GAAG,GAAG,CAAC,MAAM,CAAC,0BAA0B,IAAI,EAAE,CAAC;IAC/E,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IACnD,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC7D,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAEjE,OAAO,GAAG,UAAU,wBAAwB,mBAAmB,iBAAiB,YAAY,gBAAgB,qBAAqB,eAAe,UAAU,yBAAyB,oBAAoB,+BAA+B,0BAA0B,qBAAqB,gBAAgB,iBAAiB,YAAY,sBAAsB,iBAAiB,EAAE,CAAC;AAC9W,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,UAAkB,EAAE,GAAW;IAChF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,UAAU,IAAI,MAAM,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,KAAgC,CAAC;IACtD,MAAM,aAAa,GACjB,yBAAyB,IAAI,YAAY;QACzC,uBAAuB,IAAI,YAAY;QACvC,oBAAoB,IAAI,YAAY;QACpC,kBAAkB,IAAI,YAAY;QAClC,iBAAiB,IAAI,YAAY,CAAC;IAEpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,CAAC,YAAY,CAAC,uBAAuB,KAAK,SAAS;QACjD,OAAO,YAAY,CAAC,uBAAuB,KAAK,QAAQ,CAAC;QAC3D,CAAC,YAAY,CAAC,qBAAqB,KAAK,SAAS;YAC/C,OAAO,YAAY,CAAC,qBAAqB,KAAK,SAAS,CAAC;QAC1D,CAAC,YAAY,CAAC,kBAAkB,KAAK,SAAS;YAC5C,OAAO,YAAY,CAAC,kBAAkB,KAAK,QAAQ,CAAC;QACtD,CAAC,YAAY,CAAC,gBAAgB,KAAK,SAAS;YAC1C,OAAO,YAAY,CAAC,gBAAgB,KAAK,SAAS,CAAC;QACrD,CAAC,YAAY,CAAC,eAAe,KAAK,SAAS;YACzC,YAAY,CAAC,eAAe,KAAK,UAAU;YAC3C,YAAY,CAAC,eAAe,KAAK,gBAAgB;YACjD,YAAY,CAAC,eAAe,KAAK,OAAO,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kCAAkC,CACzC,KAAc,EACd,GAAW,EACX,UAAkB;IAElB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,OAAO,CACL,KAAK,CAAC,OAAO,KAAK,4BAA4B;QAC9C,KAAK,CAAC,GAAG,KAAK,GAAG;QACjB,KAAK,CAAC,UAAU,KAAK,UAAU;QAC/B,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qCAAqC,CAAC,GAAW;IAC9D,IAAI,GAAG,GAAG,aAAa,GAAG,sCAAsC,EAAE,CAAC;QACjE,OAAO;IACT,CAAC;IAED,aAAa,GAAG,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,iCAAiC,EAAE,CAAC;oBAC3D,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qDAAqD;YACvD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oCAAoC,CAAC,MAKnD;IACC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,kCAAkC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/E,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC;SAChD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qCAAqC,CAClD,KAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,kCAAkC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;YAC5F,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAK9C;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAE7D,IAAI,WAAW,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3D,OAAO,wBAAwB,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,GAAG,GAAG,+BAA+B,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,qCAAqC,CAAC,GAAG,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;QAC9D,OAAO,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,wBAAwB,CAAC,MAAM,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,oCAAoC,CAAC;QAC3D,GAAG;QACH,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,KAAK;QACL,GAAG;KACJ,CAAC,CAAC;IACH,IAAI,SAAS,EAAE,CAAC;QACd,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE;YACrB,GAAG,SAAS;YACZ,MAAM,EAAE,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACxB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,MAAM,CAAC,kCAAkC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAqC;YAC9C,OAAO,EAAE,4BAA4B;YACrC,GAAG;YACH,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;SAC3C,CAAC;QAEF,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE;YACrB,GAAG,KAAK;YACR,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC;SAC/C,CAAC,CAAC;QACH,MAAM,qCAAqC,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QAChB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,wBAAwB,CAAC,MAAM,YAAY,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,aAAa,GAAG,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"quota-state.js","sourceRoot":"","sources":["../../src/lib/quota-state.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,19 @@
1
+ import { type LoadConfigIssue, type QuotaToastSettingSources } from "./config.js";
1
2
  import type { QuotaProviderResult } from "./entries.js";
2
- import type { CursorQuotaPlan, PricingSnapshotSource } from "./types.js";
3
+ import type { CursorQuotaPlan, OpenCodeGoWindowKey, PricingSnapshotSource } from "./types.js";
3
4
  /** Session token fetch error info for status report */
4
5
  export interface SessionTokenError {
5
6
  sessionID: string;
6
7
  error: string;
7
8
  checkedPath?: string;
8
9
  }
10
+ type ConfigClient = {
11
+ config?: {
12
+ get?: () => Promise<{
13
+ data?: unknown;
14
+ }>;
15
+ };
16
+ };
9
17
  type ProviderLiveProbe = {
10
18
  providerId: string;
11
19
  result: QuotaProviderResult;
@@ -13,8 +21,15 @@ type ProviderLiveProbe = {
13
21
  export declare function buildQuotaStatusReport(params: {
14
22
  configSource: string;
15
23
  configPaths: string[];
24
+ globalConfigPaths?: string[];
25
+ workspaceConfigPaths?: string[];
26
+ settingSources?: QuotaToastSettingSources;
27
+ configIssues?: LoadConfigIssue[];
28
+ /** @deprecated compatibility only; not rendered */
16
29
  networkSettingSources?: Record<string, string>;
17
30
  tuiDiagnostics?: {
31
+ workspaceRoot: string;
32
+ configRoot: string;
18
33
  configured: boolean;
19
34
  inferredSelectedPath: string | null;
20
35
  presentPaths: string[];
@@ -28,6 +43,7 @@ export declare function buildQuotaStatusReport(params: {
28
43
  cursorPlan: CursorQuotaPlan;
29
44
  cursorIncludedApiUsd?: number;
30
45
  cursorBillingCycleStartDay?: number;
46
+ opencodeGoWindows?: OpenCodeGoWindowKey[];
31
47
  pricingSnapshotSource: PricingSnapshotSource;
32
48
  onlyCurrentModel: boolean;
33
49
  currentModel?: string;
@@ -50,6 +66,7 @@ export declare function buildQuotaStatusReport(params: {
50
66
  }>;
51
67
  };
52
68
  sessionTokenError?: SessionTokenError;
69
+ geminiCliClient?: ConfigClient;
53
70
  generatedAtMs?: number;
54
71
  }): Promise<string>;
55
72
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"quota-status.d.ts","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"AA4EA,OAAO,KAAK,EAAE,mBAAmB,EAAoC,MAAM,cAAc,CAAC;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAUzE,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoCD,KAAK,iBAAiB,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAoYF,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE;QACf,UAAU,EAAE,OAAO,CAAC;QACpB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAC;KAClC,CAAC;IACF,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,GAAG,KAAK,CAAC;IACtC,UAAU,EAAE,eAAe,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC;IACvD,oBAAoB,EAAE,KAAK,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC,CAAC;IACH,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,aAAa,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC;IACF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CA66BlB"}
1
+ {"version":3,"file":"quota-status.d.ts","sourceRoot":"","sources":["../../src/lib/quota-status.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { getAuthPath, getAuthPaths, readAuthFileCached } from "./opencode-auth.j
3
3
  import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
4
4
  import { getGoogleTokenCachePath } from "./google-token-cache.js";
5
5
  import { inspectAntigravityCompanionPresence } from "./google-antigravity-companion.js";
6
+ import { inspectGeminiCliCompanionPresence } from "./google-gemini-cli-companion.js";
7
+ import { inspectGeminiCliAuthPresence } from "./google-gemini-cli.js";
6
8
  import { inspectAntigravityAccountsPresence } from "./google.js";
7
9
  import { getAnthropicDiagnostics } from "./anthropic.js";
8
10
  import { getChutesKeyDiagnostics } from "./chutes.js";
@@ -28,6 +30,7 @@ import { totalTokenBuckets } from "./token-buckets.js";
28
30
  import { CURSOR_CANONICAL_PLUGIN_PACKAGE, inspectCursorAuthPresence, inspectCursorOpenCodeIntegration, } from "./cursor-detection.js";
29
31
  import { getCurrentCursorUsageSummary } from "./cursor-usage.js";
30
32
  import { sanitizeSingleLineDisplaySnippet, sanitizeSingleLineDisplayText, sanitizeDisplayText, sanitizeQuotaProviderResult, } from "./display-sanitize.js";
33
+ import { QUOTA_TOAST_SETTING_SOURCE_KEYS, } from "./config.js";
31
34
  import { getCursorPlanDisplayName, getEffectiveCursorIncludedApiUsd } from "./cursor-pricing.js";
32
35
  import { getQuotaProviderDisplayLabel } from "./provider-metadata.js";
33
36
  import { isValueEntry } from "./entries.js";
@@ -51,28 +54,47 @@ const STATUS_SAMPLE_LIMIT = 5;
51
54
  const STATUS_LIVE_ENTRY_LIMIT = 2;
52
55
  const STATUS_LIVE_ERROR_LIMIT = 2;
53
56
  const STATUS_LIVE_ROW_MAX_LENGTH = 120;
57
+ const OPENCODE_GO_STATUS_WINDOW_ORDER = ["rolling", "weekly", "monthly"];
58
+ const OPENCODE_GO_STATUS_WINDOW_FIELDS = {
59
+ rolling: "rollingUsage",
60
+ weekly: "weeklyUsage",
61
+ monthly: "monthlyUsage",
62
+ };
54
63
  function joinOrNone(values) {
55
64
  return values.length > 0 ? values.join(" | ") : "(none)";
56
65
  }
57
- function formatNetworkSettingSources(sources) {
66
+ function formatOpenCodeGoWindowSelection(windows) {
67
+ return windows.join(",");
68
+ }
69
+ function isDefaultOpenCodeGoStatusWindowSelection(windows) {
70
+ const selected = new Set(windows);
71
+ return (selected.size === OPENCODE_GO_STATUS_WINDOW_ORDER.length &&
72
+ OPENCODE_GO_STATUS_WINDOW_ORDER.every((window) => selected.has(window)));
73
+ }
74
+ function formatOpenCodeGoMissingWindows(windows) {
75
+ return windows.map((window) => `${window} (${OPENCODE_GO_STATUS_WINDOW_FIELDS[window]})`).join(", ");
76
+ }
77
+ function formatOpenCodeGoUsage(window) {
78
+ return `percent_used=${window.usagePercent} percent_remaining=${window.percentRemaining} reset_in_sec=${window.resetInSec} reset_at=${window.resetTimeIso}`;
79
+ }
80
+ function formatSettingSources(sources) {
58
81
  if (!sources)
59
82
  return "(none)";
60
- const keys = [
61
- "enabled",
62
- "enabledProviders",
63
- "minIntervalMs",
64
- "pricingSnapshot.source",
65
- "pricingSnapshot.autoRefresh",
66
- "showOnIdle",
67
- "showOnQuestion",
68
- "showOnCompact",
69
- "showOnBothFail",
70
- ];
71
- const parts = keys
72
- .filter((key) => typeof sources[key] === "string" && sources[key].length > 0)
73
- .map((key) => `${key}<=${sources[key]}`);
83
+ const parts = QUOTA_TOAST_SETTING_SOURCE_KEYS.filter((key) => typeof sources[key] === "string" && sources[key].length > 0).map((key) => `${key}<=${sources[key]}`);
74
84
  return parts.length > 0 ? parts.join(" | ") : "(none)";
75
85
  }
86
+ function getConfigPrecedenceLabel(configSource) {
87
+ switch (configSource) {
88
+ case "files":
89
+ return "global defaults -> workspace overrides";
90
+ case "sdk":
91
+ return "sdk fallback (no file-backed config)";
92
+ case "defaults":
93
+ return "built-in defaults only";
94
+ default:
95
+ return configSource;
96
+ }
97
+ }
76
98
  function getDefaultBasicApiKeyDiagnostics() {
77
99
  return {
78
100
  configured: false,
@@ -313,7 +335,7 @@ function supportedProviderPricingRow(params) {
313
335
  notes: "subscription percentage quota via dashboard scraping (not token-priced)",
314
336
  };
315
337
  }
316
- if (id === "kimi-code") {
338
+ if (id === "kimi-for-coding" || id === "kimi-code") {
317
339
  return {
318
340
  id,
319
341
  pricing: "no",
@@ -337,6 +359,11 @@ function supportedProviderPricingRow(params) {
337
359
  ? { id, pricing: "yes", notes: "connector (priced via models.dev google/anthropic)" }
338
360
  : { id, pricing: "partial", notes: "connector (pricing snapshot missing google/anthropic)" };
339
361
  }
362
+ if (id === "google-gemini-cli") {
363
+ return snapshotHasProvider("google")
364
+ ? { id, pricing: "yes", notes: "connector (priced via models.dev google)" }
365
+ : { id, pricing: "partial", notes: "connector (pricing snapshot missing google)" };
366
+ }
340
367
  // Connector providers: pricing exists when model IDs can be mapped into snapshot pricing keys.
341
368
  // Use local history as the source of truth.
342
369
  const hasAnyUsage = params.agg.bySourceProvider.some((p) => p.providerID === id);
@@ -373,15 +400,27 @@ export async function buildQuotaStatusReport(params) {
373
400
  const sections = [];
374
401
  // === toast diagnostics ===
375
402
  const toastLines = [
376
- `- configSource: ${params.configSource}${params.configPaths.length ? ` (${params.configPaths.join(" | ")})` : ""}`,
377
- `- network_setting_sources: ${formatNetworkSettingSources(params.networkSettingSources)}`,
403
+ `- configSource: ${params.configSource}`,
404
+ `- configPaths: ${joinOrNone(params.configPaths)}`,
405
+ `- precedence: ${getConfigPrecedenceLabel(params.configSource)}`,
406
+ `- global_config_paths: ${joinOrNone(params.globalConfigPaths ?? [])}`,
407
+ `- workspace_config_paths: ${joinOrNone(params.workspaceConfigPaths ?? [])}`,
408
+ `- setting_sources: ${formatSettingSources(params.settingSources)}`,
378
409
  `- enabledProviders: ${params.enabledProviders === "auto" ? "(auto)" : params.enabledProviders.length ? params.enabledProviders.join(",") : "(none)"}`,
379
410
  `- onlyCurrentModel: ${params.onlyCurrentModel ? "true" : "false"}`,
380
411
  `- currentModel: ${modelDisplay}`,
381
412
  ];
413
+ if (params.configIssues?.length) {
414
+ toastLines.push("- config_errors:");
415
+ for (const issue of params.configIssues) {
416
+ toastLines.push(` - ${sanitizeSingleLineDisplayText(issue.path)} ${sanitizeSingleLineDisplayText(issue.key)}: ${sanitizeSingleLineDisplayText(issue.message)}`);
417
+ }
418
+ }
382
419
  if (params.tuiDiagnostics) {
383
420
  toastLines.push("");
384
421
  toastLines.push("tui:");
422
+ toastLines.push(`- workspace_root: ${params.tuiDiagnostics.workspaceRoot}`);
423
+ toastLines.push(`- config_root: ${params.tuiDiagnostics.configRoot}`);
385
424
  toastLines.push(`- config_configured: ${params.tuiDiagnostics.configured ? "true" : "false"}`);
386
425
  toastLines.push(`- inferred_selected_config_path: ${params.tuiDiagnostics.inferredSelectedPath ?? "(none)"}`);
387
426
  toastLines.push(`- present_config_paths: ${joinOrNone(params.tuiDiagnostics.presentPaths)}`);
@@ -791,6 +830,11 @@ export async function buildQuotaStatusReport(params) {
791
830
  openCodeGoRows.push({ key: "config_error", value: sanitizeDisplayText(openCodeGoDiag.error) });
792
831
  }
793
832
  openCodeGoRows.push({ key: "config_checked_paths", value: joinOrNone(openCodeGoDiag.checkedPaths) });
833
+ const openCodeGoSelectedWindows = params.opencodeGoWindows ?? OPENCODE_GO_STATUS_WINDOW_ORDER;
834
+ openCodeGoRows.push({
835
+ key: "selected_windows",
836
+ value: formatOpenCodeGoWindowSelection(openCodeGoSelectedWindows),
837
+ });
794
838
  if (openCodeGoDiag.state === "configured") {
795
839
  const openCodeGoConfig = await resolveOpenCodeGoConfigCached({
796
840
  maxAgeMs: DEFAULT_OPENCODE_GO_CONFIG_CACHE_MAX_AGE_MS,
@@ -810,10 +854,23 @@ export async function buildQuotaStatusReport(params) {
810
854
  openCodeGoRows.push({ key: "live_fetch_error", value: openCodeGoQuota.error });
811
855
  }
812
856
  else {
813
- openCodeGoRows.push({
814
- key: "monthly_usage",
815
- value: `percent_used=${openCodeGoQuota.usagePercent} percent_remaining=${openCodeGoQuota.percentRemaining} reset_in_sec=${openCodeGoQuota.resetInSec} reset_at=${openCodeGoQuota.resetTimeIso}`,
816
- });
857
+ for (const window of OPENCODE_GO_STATUS_WINDOW_ORDER) {
858
+ const usage = openCodeGoQuota[window];
859
+ if (!usage)
860
+ continue;
861
+ openCodeGoRows.push({
862
+ key: `${window}_usage`,
863
+ value: formatOpenCodeGoUsage(usage),
864
+ });
865
+ }
866
+ const missingSelectedWindows = openCodeGoSelectedWindows.filter((window) => !openCodeGoQuota[window]);
867
+ if (missingSelectedWindows.length > 0 &&
868
+ !isDefaultOpenCodeGoStatusWindowSelection(openCodeGoSelectedWindows)) {
869
+ openCodeGoRows.push({
870
+ key: "live_fetch_error",
871
+ value: `Selected OpenCode Go dashboard window(s) missing: ${formatOpenCodeGoMissingWindows(missingSelectedWindows)}`,
872
+ });
873
+ }
817
874
  }
818
875
  }
819
876
  }
@@ -1081,6 +1138,33 @@ export async function buildQuotaStatusReport(params) {
1081
1138
  });
1082
1139
  appendProviderCompactLiveProbeRows(googleRows, "google-antigravity", params.providerLiveProbes);
1083
1140
  sections.push(createKvSection("google_antigravity", "google_antigravity:", googleRows));
1141
+ // === google gemini cli ===
1142
+ const geminiCliAuthPresence = await inspectGeminiCliAuthPresence(params.geminiCliClient);
1143
+ const geminiCliCompanionPresence = await inspectGeminiCliCompanionPresence();
1144
+ const geminiCliRows = [
1145
+ { key: "auth_state", value: geminiCliAuthPresence.state },
1146
+ { key: "auth_source", value: geminiCliAuthPresence.sourceKey ?? "(none)" },
1147
+ { key: "account_count", value: String(geminiCliAuthPresence.accountCount) },
1148
+ { key: "valid_account_count", value: String(geminiCliAuthPresence.validAccountCount) },
1149
+ { key: "companion_package_state", value: geminiCliCompanionPresence.state },
1150
+ {
1151
+ key: "companion_package_path",
1152
+ value: geminiCliCompanionPresence.state === "present" || geminiCliCompanionPresence.state === "invalid"
1153
+ ? geminiCliCompanionPresence.resolvedPath ?? "(none)"
1154
+ : "(none)",
1155
+ },
1156
+ ];
1157
+ if (geminiCliAuthPresence.state === "invalid") {
1158
+ geminiCliRows.push({ key: "auth_error", value: sanitizeDisplayText(geminiCliAuthPresence.error) });
1159
+ }
1160
+ if (geminiCliCompanionPresence.state !== "present") {
1161
+ geminiCliRows.push({
1162
+ key: "companion_error",
1163
+ value: sanitizeDisplayText(geminiCliCompanionPresence.error),
1164
+ });
1165
+ }
1166
+ appendProviderCompactLiveProbeRows(geminiCliRows, "google-gemini-cli", params.providerLiveProbes);
1167
+ sections.push(createKvSection("google_gemini_cli", "google_gemini_cli:", geminiCliRows));
1084
1168
  if (params.googleRefresh?.attempted) {
1085
1169
  const googleRefreshRows = [];
1086
1170
  if (typeof params.googleRefresh.total === "number" &&