@slkiser/opencode-quota 3.3.0 → 3.5.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 +64 -48
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +15 -3
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/lib/cli-show.d.ts +8 -0
- package/dist/lib/cli-show.d.ts.map +1 -0
- package/dist/lib/cli-show.js +178 -0
- package/dist/lib/cli-show.js.map +1 -0
- package/dist/lib/config-file-utils.d.ts +1 -0
- package/dist/lib/config-file-utils.d.ts.map +1 -1
- package/dist/lib/config-file-utils.js +10 -0
- package/dist/lib/config-file-utils.js.map +1 -1
- package/dist/lib/config.d.ts +3 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +82 -17
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +42 -1
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/entries.d.ts +3 -2
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/format-utils.d.ts +7 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +7 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +49 -3
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +44 -1
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +1 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/init-installer.d.ts +4 -1
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +115 -26
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts +6 -0
- package/dist/lib/opencode-config-providers.d.ts.map +1 -0
- package/dist/lib/opencode-config-providers.js +79 -0
- package/dist/lib/opencode-config-providers.js.map +1 -0
- package/dist/lib/opencode-go.d.ts +5 -4
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +32 -18
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/provider-model-matching.d.ts +12 -0
- package/dist/lib/provider-model-matching.d.ts.map +1 -0
- package/dist/lib/provider-model-matching.js +23 -0
- package/dist/lib/provider-model-matching.js.map +1 -0
- package/dist/lib/quota-render-data.d.ts +3 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +64 -6
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +1 -0
- package/dist/lib/quota-runtime-context.js.map +1 -1
- package/dist/lib/quota-state.d.ts +1 -0
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +18 -4
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-status.d.ts +2 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +43 -5
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +45 -9
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +14 -2
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +21 -5
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +2 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -0
- package/dist/plugin.js.map +1 -1
- package/dist/providers/anthropic.js +3 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/chutes.d.ts.map +1 -1
- package/dist/providers/chutes.js +2 -4
- package/dist/providers/chutes.js.map +1 -1
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +17 -10
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/google-account-format.d.ts +6 -0
- package/dist/providers/google-account-format.d.ts.map +1 -0
- package/dist/providers/google-account-format.js +21 -0
- package/dist/providers/google-account-format.js.map +1 -0
- package/dist/providers/google-antigravity.d.ts.map +1 -1
- package/dist/providers/google-antigravity.js +7 -29
- package/dist/providers/google-antigravity.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/dist/providers/google-gemini-cli.js +12 -32
- package/dist/providers/google-gemini-cli.js.map +1 -1
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +2 -2
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -6
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +2 -2
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +60 -11
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/synthetic.d.ts.map +1 -1
- package/dist/providers/synthetic.js +2 -4
- package/dist/providers/synthetic.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,17 +19,16 @@
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
### Installation
|
|
22
|
+
### Installation (automatic setup)
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
# Automatic setup
|
|
26
25
|
npx @slkiser/opencode-quota init
|
|
27
26
|
```
|
|
28
27
|
|
|
29
28
|
> [!IMPORTANT]
|
|
30
29
|
> OpenCode `>= 1.4.3` and Node.js `>= 18` are required.
|
|
31
30
|
|
|
32
|
-
The installer is append-only and preserves existing config values. It asks where to install, which quota UI to enable, whether providers should be auto-detected, which quota display style to use, how percentages should be labeled, and whether session input/output tokens should appear in quota displays.
|
|
31
|
+
The installer is append-only and preserves existing config values. It asks where to install, which quota UI to enable, whether providers should be auto-detected, which quota display style to use, how percentages should be labeled, and whether session input/output tokens should appear in quota displays. By default it writes quota settings to `opencode-quota/quota-toast.json` only; if you also need the legacy OpenCode `experimental.quotaToast` block, run `npx @slkiser/opencode-quota init --sync-legacy-config`.
|
|
33
32
|
|
|
34
33
|
After install:
|
|
35
34
|
|
|
@@ -38,7 +37,17 @@ After install:
|
|
|
38
37
|
3. Run `/quota`.
|
|
39
38
|
4. If you enabled the sidebar, open the session sidebar and confirm the `Quota` panel appears.
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
For a terminal-only quota glance:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx @slkiser/opencode-quota show
|
|
44
|
+
# or, if installed/on PATH:
|
|
45
|
+
opencode-quota show --provider copilot
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`show` is quota-only: no token/cost reports or `models.dev` refresh. Installer `None (commands and terminal only)` disables toast/sidebar but keeps `/quota`, `/tokens_*`, and terminal `show`.
|
|
49
|
+
|
|
50
|
+
### Manual setup
|
|
42
51
|
|
|
43
52
|
Add the server plugin to `opencode.json` or `opencode.jsonc`:
|
|
44
53
|
|
|
@@ -58,15 +67,16 @@ If you also want the sidebar, add the same package to the `tui.json` or `tui.jso
|
|
|
58
67
|
}
|
|
59
68
|
```
|
|
60
69
|
|
|
61
|
-
|
|
70
|
+
Quota settings live in `opencode-quota/quota-toast.json` next to the OpenCode config file chosen by the installer (project or global). On load, OpenCode Quota reads that sidecar first and falls back to existing `experimental.quotaToast` settings in `opencode.json` / `opencode.jsonc` only when the sidecar is absent. Normal runtime/load does not create, re-add, or migrate `experimental.quotaToast`; use `init --sync-legacy-config` when you explicitly want the installer to also write/sync that legacy block. Quota settings do not live in `tui.json`.
|
|
62
71
|
|
|
63
|
-
### What
|
|
72
|
+
### What plugin adds
|
|
64
73
|
|
|
65
74
|
- TUI sidebar panel with quota rows
|
|
66
75
|
- Popup quota toasts after assistant responses
|
|
67
76
|
- Manual `/quota`, `/quota_status`, and `/tokens_*` commands
|
|
77
|
+
- Terminal `opencode-quota show` command for a quota-only quick glance
|
|
68
78
|
- Local token reports using bundled and runtime `models.dev` pricing
|
|
69
|
-
-
|
|
79
|
+
- Custom quota tracking for companion plugins
|
|
70
80
|
|
|
71
81
|
<table>
|
|
72
82
|
<tr>
|
|
@@ -108,50 +118,47 @@ For companion auth providers, put the companion plugin first and `@slkiser/openc
|
|
|
108
118
|
Providers are auto-detected by default. To choose providers explicitly:
|
|
109
119
|
|
|
110
120
|
```jsonc
|
|
121
|
+
// opencode-quota/quota-toast.json
|
|
111
122
|
{
|
|
112
|
-
"
|
|
113
|
-
"quotaToast": {
|
|
114
|
-
"enabledProviders": ["copilot", "openai", "google-gemini-cli"],
|
|
115
|
-
},
|
|
116
|
-
},
|
|
123
|
+
"enabledProviders": ["copilot", "openai", "google-gemini-cli"],
|
|
117
124
|
}
|
|
118
125
|
```
|
|
119
126
|
|
|
120
|
-
### Display
|
|
127
|
+
### Display options
|
|
121
128
|
|
|
122
129
|
Show every quota window instead of the default most-constrained window:
|
|
123
130
|
|
|
124
131
|
```jsonc
|
|
132
|
+
// opencode-quota/quota-toast.json
|
|
133
|
+
{
|
|
134
|
+
"formatStyle": "allWindows",
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Choose which OpenCode Go usage windows to display (default is all three; `rolling` displays as `5h`):
|
|
139
|
+
|
|
140
|
+
```jsonc
|
|
141
|
+
// opencode-quota/quota-toast.json
|
|
125
142
|
{
|
|
126
|
-
"
|
|
127
|
-
"quotaToast": {
|
|
128
|
-
"formatStyle": "allWindows",
|
|
129
|
-
},
|
|
130
|
-
},
|
|
143
|
+
"opencodeGoWindows": ["rolling", "weekly", "monthly"],
|
|
131
144
|
}
|
|
132
145
|
```
|
|
133
146
|
|
|
134
147
|
Show percentages as used instead of remaining in toasts and the sidebar:
|
|
135
148
|
|
|
136
149
|
```jsonc
|
|
150
|
+
// opencode-quota/quota-toast.json
|
|
137
151
|
{
|
|
138
|
-
"
|
|
139
|
-
"quotaToast": {
|
|
140
|
-
"percentDisplayMode": "used",
|
|
141
|
-
},
|
|
142
|
-
},
|
|
152
|
+
"percentDisplayMode": "used",
|
|
143
153
|
}
|
|
144
154
|
```
|
|
145
155
|
|
|
146
156
|
Turn off popup toasts while keeping `/quota` and the sidebar:
|
|
147
157
|
|
|
148
158
|
```jsonc
|
|
159
|
+
// opencode-quota/quota-toast.json
|
|
149
160
|
{
|
|
150
|
-
"
|
|
151
|
-
"quotaToast": {
|
|
152
|
-
"enableToast": false,
|
|
153
|
-
},
|
|
154
|
-
},
|
|
161
|
+
"enableToast": false,
|
|
155
162
|
}
|
|
156
163
|
```
|
|
157
164
|
|
|
@@ -159,6 +166,7 @@ Turn off popup toasts while keeping `/quota` and the sidebar:
|
|
|
159
166
|
|
|
160
167
|
| Command | What it shows |
|
|
161
168
|
| --------------------- | -------------------------------------------------- |
|
|
169
|
+
| `opencode-quota show` | Terminal quota-only quick glance |
|
|
162
170
|
| `/quota` | Detailed quota report |
|
|
163
171
|
| `/quota_status` | Config, provider, auth, pricing, and live probes |
|
|
164
172
|
| `/pricing_refresh` | Refresh local runtime pricing from `models.dev` |
|
|
@@ -173,7 +181,7 @@ Turn off popup toasts while keeping `/quota` and the sidebar:
|
|
|
173
181
|
|
|
174
182
|
<a id="anthropic-claude-quick-setup"></a>
|
|
175
183
|
|
|
176
|
-
### Anthropic
|
|
184
|
+
### Anthropic quick setup
|
|
177
185
|
|
|
178
186
|
Anthropic does not use a companion OpenCode plugin. Install Claude Code, authenticate it, and make sure `claude` is available on your `PATH`:
|
|
179
187
|
|
|
@@ -182,9 +190,9 @@ claude auth login
|
|
|
182
190
|
claude auth status
|
|
183
191
|
```
|
|
184
192
|
|
|
185
|
-
If Claude lives at a custom path, set `
|
|
193
|
+
If Claude lives at a custom path, set `anthropicBinaryPath` in `opencode-quota/quota-toast.json`.
|
|
186
194
|
|
|
187
|
-
### Companion
|
|
195
|
+
### Companion providers
|
|
188
196
|
|
|
189
197
|
Some providers need an auth companion plugin installed separately. Add the companion plugin first and `@slkiser/opencode-quota` second in `opencode.json` or `opencode.jsonc`.
|
|
190
198
|
|
|
@@ -192,7 +200,7 @@ Some providers need an auth companion plugin installed separately. Add the compa
|
|
|
192
200
|
|
|
193
201
|
#### Cursor
|
|
194
202
|
|
|
195
|
-
Companion plugin: `@playwo/opencode-cursor-oauth`
|
|
203
|
+
Companion plugin: [`@playwo/opencode-cursor-oauth`](https://github.com/PoolPirate/opencode-cursor#readme)
|
|
196
204
|
|
|
197
205
|
Add both plugins to `opencode.json`, with the Cursor auth plugin first:
|
|
198
206
|
|
|
@@ -218,7 +226,7 @@ opencode auth login --provider cursor
|
|
|
218
226
|
|
|
219
227
|
#### Qwen Code
|
|
220
228
|
|
|
221
|
-
Companion plugin: `opencode-qwencode-auth`
|
|
229
|
+
Companion plugin: [`opencode-qwencode-auth`](https://github.com/gustavodiasdev/opencode-qwencode-auth#readme)
|
|
222
230
|
|
|
223
231
|
Add both plugins to `opencode.json`, with the Qwen auth plugin first:
|
|
224
232
|
|
|
@@ -233,7 +241,7 @@ Add both plugins to `opencode.json`, with the Qwen auth plugin first:
|
|
|
233
241
|
|
|
234
242
|
#### Google Antigravity
|
|
235
243
|
|
|
236
|
-
Companion plugin: `opencode-antigravity-auth`
|
|
244
|
+
Companion plugin: [`opencode-antigravity-auth`](https://github.com/NoeFabris/opencode-antigravity-auth#readme)
|
|
237
245
|
|
|
238
246
|
Add both plugins to `opencode.json`, with the Antigravity auth plugin first:
|
|
239
247
|
|
|
@@ -248,19 +256,22 @@ Add both plugins to `opencode.json`, with the Antigravity auth plugin first:
|
|
|
248
256
|
|
|
249
257
|
#### Gemini CLI
|
|
250
258
|
|
|
251
|
-
Companion plugin: `opencode-gemini-auth`
|
|
259
|
+
Companion plugin: [`opencode-gemini-auth`](https://github.com/jenslys/opencode-gemini-auth#readme)
|
|
252
260
|
|
|
253
|
-
Add both plugins to `opencode.json`, with the Gemini auth plugin first. If you manually choose providers, include `google-gemini-cli`:
|
|
261
|
+
Add both plugins to `opencode.json`, with the Gemini auth plugin first. If you manually choose providers, include `google-gemini-cli` in `opencode-quota/quota-toast.json`:
|
|
254
262
|
|
|
255
263
|
```jsonc
|
|
264
|
+
// opencode.json
|
|
256
265
|
{
|
|
257
266
|
"$schema": "https://opencode.ai/config.json",
|
|
258
|
-
"plugin": ["opencode-gemini-auth", "@slkiser/opencode-quota"]
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
267
|
+
"plugin": ["opencode-gemini-auth", "@slkiser/opencode-quota"]
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```jsonc
|
|
272
|
+
// opencode-quota/quota-toast.json
|
|
273
|
+
{
|
|
274
|
+
"enabledProviders": ["google-gemini-cli"]
|
|
264
275
|
}
|
|
265
276
|
```
|
|
266
277
|
|
|
@@ -281,6 +292,8 @@ export OPENCODE_GO_WORKSPACE_ID="your-workspace-id"
|
|
|
281
292
|
export OPENCODE_GO_AUTH_COOKIE="your-auth-cookie"
|
|
282
293
|
```
|
|
283
294
|
|
|
295
|
+
The provider can report three usage windows — **5h** rolling, **Weekly**, and **Monthly** — and emits whichever dashboard windows are available in that order. Filter displayed windows with `opencodeGoWindows` in `opencode-quota/quota-toast.json` (`rolling`, `weekly`, `monthly`); non-default subsets report missing selected dashboard fields, while default/all-windows mode shows available windows and diagnostics indicate what was found.
|
|
296
|
+
|
|
284
297
|
Environment variables take precedence over the optional `opencode-go.json` config file. Run `/quota_status` to see the exact paths checked on your machine.
|
|
285
298
|
|
|
286
299
|
### Troubleshooting
|
|
@@ -303,7 +316,7 @@ Run `/quota_status` and check the Anthropic section.
|
|
|
303
316
|
| Symptom | Fix |
|
|
304
317
|
| --- | --- |
|
|
305
318
|
| `claude` not found | Install Claude Code and make sure `claude` is on your `PATH`. |
|
|
306
|
-
| Claude is installed at a custom path | Set `
|
|
319
|
+
| Claude is installed at a custom path | Set `anthropicBinaryPath` in `opencode-quota/quota-toast.json`. |
|
|
307
320
|
| Not authenticated | Run `claude auth login`, then confirm `claude auth status` works. |
|
|
308
321
|
| Auth works but no quota rows appear | Check `quota_source` and `message` in `/quota_status`; re-authenticate Claude if the OAuth credential fallback is missing or stale. |
|
|
309
322
|
| Provider not detected | Confirm OpenCode is configured to use the `anthropic` provider. |
|
|
@@ -315,6 +328,8 @@ Run `/quota_status` and check the Anthropic section.
|
|
|
315
328
|
|
|
316
329
|
Run `/quota_status` and check `copilot_quota_auth`, `billing_mode`, `billing_scope`, and `quota_api`.
|
|
317
330
|
|
|
331
|
+
For personal Copilot OAuth quota, the plugin uses GitHub's reported premium-interaction quota fields when available. If that specific quota payload marks premium interactions as unlimited, quota output renders `Unlimited` instead of a synthetic used/total ratio.
|
|
332
|
+
|
|
318
333
|
| Symptom | Fix |
|
|
319
334
|
| --- | --- |
|
|
320
335
|
| Personal quota missing | Confirm OpenCode Copilot auth works. The plugin can read OpenCode's Copilot OAuth token. |
|
|
@@ -346,8 +361,8 @@ Run `/quota_status` and check the Cursor section.
|
|
|
346
361
|
| --- | --- |
|
|
347
362
|
| Cursor not detected | Put `@playwo/opencode-cursor-oauth` before `@slkiser/opencode-quota` in `opencode.json`. |
|
|
348
363
|
| Cursor auth missing | Run `opencode auth login --provider cursor`. |
|
|
349
|
-
| Quota appears but no remaining percentage | Set `
|
|
350
|
-
| Billing cycle looks wrong | Set `
|
|
364
|
+
| Quota appears but no remaining percentage | Set `cursorPlan` or `cursorIncludedApiUsd` in `opencode-quota/quota-toast.json`. |
|
|
365
|
+
| Billing cycle looks wrong | Set `cursorBillingCycleStartDay` in `opencode-quota/quota-toast.json` to your local billing anchor day. |
|
|
351
366
|
| Unknown Cursor pricing | Run `/pricing_refresh`; if still unknown, check `/quota_status` for unknown model ids. |
|
|
352
367
|
|
|
353
368
|
</details>
|
|
@@ -374,7 +389,7 @@ Run `/quota_status` and check the Alibaba auth, resolved tier, state-file path,
|
|
|
374
389
|
| Symptom | Fix |
|
|
375
390
|
| --- | --- |
|
|
376
391
|
| API key not detected | Use `ALIBABA_CODING_PLAN_API_KEY`, `ALIBABA_API_KEY`, trusted user/global OpenCode config, or OpenCode auth. Repo-local provider secrets are ignored. |
|
|
377
|
-
| Wrong tier | Set `
|
|
392
|
+
| Wrong tier | Set `alibabaCodingPlanTier` to `lite` or `pro` in `opencode-quota/quota-toast.json`. |
|
|
378
393
|
| Counters do not move | Confirm the current model is `alibaba/*` or `alibaba-cn/*`. |
|
|
379
394
|
| Quota seems stale | Check the state-file path shown in `/quota_status`. |
|
|
380
395
|
|
|
@@ -420,7 +435,7 @@ Run `/quota_status` and check the Gemini CLI live probe rows.
|
|
|
420
435
|
| Symptom | Fix |
|
|
421
436
|
| --- | --- |
|
|
422
437
|
| Companion missing | Put `opencode-gemini-auth` before `@slkiser/opencode-quota` in `opencode.json`. |
|
|
423
|
-
| Provider not enabled in manual mode | Include `google-gemini-cli` in `
|
|
438
|
+
| Provider not enabled in manual mode | Include `google-gemini-cli` in `enabledProviders` in `opencode-quota/quota-toast.json`. |
|
|
424
439
|
| Auth missing | Run `opencode auth login --provider google`. |
|
|
425
440
|
| Project missing | Set `provider.google.options.projectId`, `OPENCODE_GEMINI_PROJECT_ID`, `GOOGLE_CLOUD_PROJECT`, or `GOOGLE_CLOUD_PROJECT_ID`. |
|
|
426
441
|
|
|
@@ -436,6 +451,7 @@ Run `/quota_status` and check the `opencode_go` section.
|
|
|
436
451
|
| Config not detected | Set both `OPENCODE_GO_WORKSPACE_ID` and `OPENCODE_GO_AUTH_COOKIE`, then rerun `/quota_status`. |
|
|
437
452
|
| Incomplete config | `workspaceId` and `authCookie` must come from the same source. |
|
|
438
453
|
| Scrape returns no data | Refresh the browser `auth` cookie from `opencode.ai`. |
|
|
454
|
+
| Selected window missing | Check `/quota_status` for `selected_windows` and `live_fetch_error`; remove unavailable windows from `opencodeGoWindows` in `opencode-quota/quota-toast.json` or refresh the dashboard cookie. |
|
|
439
455
|
| Dashboard format changed | This integration scrapes the dashboard, so it can break if the dashboard markup changes. |
|
|
440
456
|
|
|
441
457
|
</details>
|
|
@@ -449,7 +465,7 @@ Run `/quota_status` and check pricing snapshot health plus OpenCode database pat
|
|
|
449
465
|
| --- | --- |
|
|
450
466
|
| `/tokens_*` is empty | Start OpenCode once so it creates `opencode.db`, then run a session with model usage. |
|
|
451
467
|
| Pricing looks stale | Run `/pricing_refresh`. |
|
|
452
|
-
| Runtime pricing does not change output | Check `
|
|
468
|
+
| Runtime pricing does not change output | Check `pricingSnapshot.source` in `opencode-quota/quota-toast.json`; `bundled` keeps packaged pricing active. |
|
|
453
469
|
| Cursor model has unknown pricing | Run `/pricing_refresh`; Cursor `auto` and `composer*` use bundled deterministic pricing. |
|
|
454
470
|
|
|
455
471
|
</details>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-quota.d.ts","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"opencode-quota.d.ts","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AAgCA,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,MAAM,GAAG,SAA2B,EAC3C,UAAU,GAAE,MAAuC,EACnD,WAAW,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAuB,GACzD,OAAO,CAMT;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BxE"}
|
|
@@ -5,11 +5,14 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { runInitInstaller } from "../lib/init-installer.js";
|
|
6
6
|
const USAGE = [
|
|
7
7
|
"Usage:",
|
|
8
|
-
" npx @slkiser/opencode-quota init",
|
|
8
|
+
" npx @slkiser/opencode-quota init [--sync-legacy-config]",
|
|
9
|
+
" npx @slkiser/opencode-quota show [--provider <provider-id>]",
|
|
9
10
|
" npx @slkiser/opencode-quota --help",
|
|
10
11
|
"",
|
|
11
12
|
"Commands:",
|
|
12
13
|
" init Run the interactive quota installer",
|
|
14
|
+
" --sync-legacy-config also writes experimental.quotaToast",
|
|
15
|
+
" show Print a quick quota glance",
|
|
13
16
|
].join("\n");
|
|
14
17
|
function printUsage() {
|
|
15
18
|
console.log(USAGE);
|
|
@@ -38,8 +41,17 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
38
41
|
printUsage();
|
|
39
42
|
return 0;
|
|
40
43
|
}
|
|
41
|
-
if (command === "init"
|
|
42
|
-
|
|
44
|
+
if (command === "init") {
|
|
45
|
+
if (rest.length === 0) {
|
|
46
|
+
return await runInitInstaller();
|
|
47
|
+
}
|
|
48
|
+
if (rest.length === 1 && rest[0] === "--sync-legacy-config") {
|
|
49
|
+
return await runInitInstaller({ syncLegacyConfig: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (command === "show") {
|
|
53
|
+
const { runCliShowCommand } = await import("../lib/cli-show.js");
|
|
54
|
+
return await runCliShowCommand({ argv: rest });
|
|
43
55
|
}
|
|
44
56
|
printUsage();
|
|
45
57
|
return 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,KAAK,GAAG;IACZ,QAAQ;IACR,
|
|
1
|
+
{"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,KAAK,GAAG;IACZ,QAAQ;IACR,2DAA2D;IAC3D,+DAA+D;IAC/D,sCAAsC;IACtC,EAAE;IACF,WAAW;IACX,+CAA+C;IAC/C,oEAAoE;IACpE,sCAAsC;CACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA4B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3C,aAAqB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACnD,cAA4C,cAAc;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,MAAM,gBAAgB,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAsB,EAAE,CAAC;YAC5D,OAAO,MAAM,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACjE,OAAO,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;IACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface RunCliShowCommandOptions {
|
|
2
|
+
argv?: string[];
|
|
3
|
+
cwd?: string;
|
|
4
|
+
stdout?: Pick<NodeJS.WriteStream, "write">;
|
|
5
|
+
stderr?: Pick<NodeJS.WriteStream, "write">;
|
|
6
|
+
}
|
|
7
|
+
export declare function runCliShowCommand(options?: RunCliShowCommandOptions): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=cli-show.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-show.d.ts","sourceRoot":"","sources":["../../src/lib/cli-show.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC5C;AAwHD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CA+E/F"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { formatQuotaRows } from "./format.js";
|
|
3
|
+
import { getQuotaProviderShape } from "./provider-metadata.js";
|
|
4
|
+
import { findGitWorktreeRoot } from "./config-file-utils.js";
|
|
5
|
+
import { loadConfiguredOpenCodeConfig, loadConfiguredProviderIds, } from "./opencode-config-providers.js";
|
|
6
|
+
import { resolveQuotaFormatStyle } from "./quota-format-style.js";
|
|
7
|
+
import { getPackageVersion } from "./version.js";
|
|
8
|
+
import { collectQuotaRenderData } from "./quota-render-data.js";
|
|
9
|
+
import { sanitizeQuotaRenderData } from "./display-sanitize.js";
|
|
10
|
+
import { createQuotaRuntimeRequestContext, resolveQuotaRuntimeContext, } from "./quota-runtime-context.js";
|
|
11
|
+
const SHOW_USAGE = [
|
|
12
|
+
"Usage:",
|
|
13
|
+
" npx @slkiser/opencode-quota show [--provider <provider-id>]",
|
|
14
|
+
"",
|
|
15
|
+
"Options:",
|
|
16
|
+
" --provider <provider-id> Show quota for one provider",
|
|
17
|
+
" --help, -h Show help",
|
|
18
|
+
].join("\n");
|
|
19
|
+
function parseShowArgs(argv) {
|
|
20
|
+
let providerId;
|
|
21
|
+
for (let index = 0; index < argv.length; index++) {
|
|
22
|
+
const arg = argv[index];
|
|
23
|
+
if (arg === "--help" || arg === "-h") {
|
|
24
|
+
return { ok: true, help: true };
|
|
25
|
+
}
|
|
26
|
+
if (arg === "--provider") {
|
|
27
|
+
const value = argv[index + 1];
|
|
28
|
+
if (!value || value.startsWith("-")) {
|
|
29
|
+
return { ok: false, error: "Missing value for --provider." };
|
|
30
|
+
}
|
|
31
|
+
if (providerId) {
|
|
32
|
+
return { ok: false, error: "Specify --provider only once." };
|
|
33
|
+
}
|
|
34
|
+
providerId = value;
|
|
35
|
+
index += 1;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (arg.startsWith("--provider=")) {
|
|
39
|
+
const value = arg.slice("--provider=".length).trim();
|
|
40
|
+
if (!value) {
|
|
41
|
+
return { ok: false, error: "Missing value for --provider." };
|
|
42
|
+
}
|
|
43
|
+
if (providerId) {
|
|
44
|
+
return { ok: false, error: "Specify --provider only once." };
|
|
45
|
+
}
|
|
46
|
+
providerId = value;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (arg.startsWith("-")) {
|
|
50
|
+
return { ok: false, error: `Unknown option: ${arg}` };
|
|
51
|
+
}
|
|
52
|
+
return { ok: false, error: `Unexpected argument: ${arg}` };
|
|
53
|
+
}
|
|
54
|
+
return { ok: true, providerId, help: false };
|
|
55
|
+
}
|
|
56
|
+
function cloneCliConfig(config) {
|
|
57
|
+
return {
|
|
58
|
+
...config,
|
|
59
|
+
enabledProviders: Array.isArray(config.enabledProviders)
|
|
60
|
+
? [...config.enabledProviders]
|
|
61
|
+
: config.enabledProviders,
|
|
62
|
+
googleModels: [...config.googleModels],
|
|
63
|
+
opencodeGoWindows: [...config.opencodeGoWindows],
|
|
64
|
+
pricingSnapshot: { ...config.pricingSnapshot },
|
|
65
|
+
layout: { ...config.layout },
|
|
66
|
+
showSessionTokens: false,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function resolveCliRoots(cwd) {
|
|
70
|
+
const fallbackDirectory = resolve(cwd);
|
|
71
|
+
const worktreeRoot = findGitWorktreeRoot(fallbackDirectory) ?? fallbackDirectory;
|
|
72
|
+
return {
|
|
73
|
+
workspaceRoot: worktreeRoot,
|
|
74
|
+
configRoot: worktreeRoot,
|
|
75
|
+
fallbackDirectory,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function createCliQuotaClient(params) {
|
|
79
|
+
let configPromise;
|
|
80
|
+
let providerIdsPromise;
|
|
81
|
+
return {
|
|
82
|
+
config: {
|
|
83
|
+
get: async () => {
|
|
84
|
+
configPromise ??= loadConfiguredOpenCodeConfig({
|
|
85
|
+
configRootDir: params.configRootDir,
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
data: (await configPromise),
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
providers: async () => {
|
|
92
|
+
providerIdsPromise ??= loadConfiguredProviderIds({
|
|
93
|
+
configRootDir: params.configRootDir,
|
|
94
|
+
});
|
|
95
|
+
const ids = await providerIdsPromise;
|
|
96
|
+
return {
|
|
97
|
+
data: {
|
|
98
|
+
providers: ids.map((id) => ({ id })),
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function writeLine(stream, message) {
|
|
106
|
+
stream.write(message.endsWith("\n") ? message : `${message}\n`);
|
|
107
|
+
}
|
|
108
|
+
export async function runCliShowCommand(options = {}) {
|
|
109
|
+
const argv = options.argv ?? process.argv.slice(3);
|
|
110
|
+
const stdout = options.stdout ?? process.stdout;
|
|
111
|
+
const stderr = options.stderr ?? process.stderr;
|
|
112
|
+
const parsed = parseShowArgs(argv);
|
|
113
|
+
if (!parsed.ok) {
|
|
114
|
+
writeLine(stderr, parsed.error);
|
|
115
|
+
writeLine(stderr, SHOW_USAGE);
|
|
116
|
+
return 1;
|
|
117
|
+
}
|
|
118
|
+
if (parsed.help) {
|
|
119
|
+
writeLine(stdout, SHOW_USAGE);
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
const providerId = parsed.providerId ? getQuotaProviderShape(parsed.providerId)?.id : undefined;
|
|
123
|
+
if (parsed.providerId && !providerId) {
|
|
124
|
+
writeLine(stderr, `Unknown provider: ${parsed.providerId}`);
|
|
125
|
+
return 1;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const roots = resolveCliRoots(options.cwd ?? process.cwd());
|
|
129
|
+
const client = createCliQuotaClient({ configRootDir: roots.configRoot });
|
|
130
|
+
const runtime = await resolveQuotaRuntimeContext({
|
|
131
|
+
client,
|
|
132
|
+
roots,
|
|
133
|
+
includeSessionMeta: false,
|
|
134
|
+
});
|
|
135
|
+
if (!runtime.config.enabled) {
|
|
136
|
+
writeLine(stderr, "Quota disabled in config (enabled: false).");
|
|
137
|
+
return 1;
|
|
138
|
+
}
|
|
139
|
+
const config = cloneCliConfig(runtime.config);
|
|
140
|
+
if (providerId) {
|
|
141
|
+
config.enabledProviders = [providerId];
|
|
142
|
+
}
|
|
143
|
+
const result = await collectQuotaRenderData({
|
|
144
|
+
client: runtime.client,
|
|
145
|
+
config,
|
|
146
|
+
request: createQuotaRuntimeRequestContext(runtime),
|
|
147
|
+
surfaceExplicitProviderIssues: true,
|
|
148
|
+
formatStyle: resolveQuotaFormatStyle(config.formatStyle),
|
|
149
|
+
providers: runtime.providers,
|
|
150
|
+
});
|
|
151
|
+
if (!result.data) {
|
|
152
|
+
writeLine(stderr, "No quota data available.");
|
|
153
|
+
return 1;
|
|
154
|
+
}
|
|
155
|
+
const data = sanitizeQuotaRenderData(result.data);
|
|
156
|
+
const version = (await getPackageVersion()) ?? "";
|
|
157
|
+
const output = formatQuotaRows({
|
|
158
|
+
version,
|
|
159
|
+
layout: config.layout,
|
|
160
|
+
entries: data.entries,
|
|
161
|
+
errors: data.errors,
|
|
162
|
+
style: resolveQuotaFormatStyle(config.formatStyle),
|
|
163
|
+
percentDisplayMode: config.percentDisplayMode,
|
|
164
|
+
});
|
|
165
|
+
if (!output.trim()) {
|
|
166
|
+
writeLine(stderr, "No quota data available.");
|
|
167
|
+
return 1;
|
|
168
|
+
}
|
|
169
|
+
writeLine(stdout, output);
|
|
170
|
+
return data.entries.length > 0 ? 0 : 1;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
174
|
+
writeLine(stderr, `Failed to show quota: ${message}`);
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=cli-show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-show.js","sourceRoot":"","sources":["../../src/lib/cli-show.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,5 +26,6 @@ export declare function resolveEditableConfigPath(params: {
|
|
|
26
26
|
}): EditableConfigPath;
|
|
27
27
|
export declare function getPluginSpecFromEntry(entry: unknown): string | null;
|
|
28
28
|
export declare function extractPluginSpecsFromParsedConfig(parsed: unknown): string[];
|
|
29
|
+
export declare function extractProviderIdsFromParsedConfig(parsed: unknown): string[];
|
|
29
30
|
export declare function isQuotaPluginSpec(spec: string, kind: ConfigFileKind): boolean;
|
|
30
31
|
//# sourceMappingURL=config-file-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file-utils.d.ts","sourceRoot":"","sources":["../../src/lib/config-file-utils.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,KAAK,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D;AAiBD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,mBAAmB,CAa/F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcnE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;CACtB,GAAG,kBAAkB,CAwBrB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAcpE;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAwB5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAc7E"}
|
|
1
|
+
{"version":3,"file":"config-file-utils.d.ts","sourceRoot":"","sources":["../../src/lib/config-file-utils.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,KAAK,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D;AAiBD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,mBAAmB,CAa/F;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcnE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;CACtB,GAAG,kBAAkB,CAwBrB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAcpE;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAwB5E;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAW5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAc7E"}
|
|
@@ -96,6 +96,16 @@ export function extractPluginSpecsFromParsedConfig(parsed) {
|
|
|
96
96
|
.map((entry) => getPluginSpecFromEntry(entry))
|
|
97
97
|
.filter((entry) => typeof entry === "string"));
|
|
98
98
|
}
|
|
99
|
+
export function extractProviderIdsFromParsedConfig(parsed) {
|
|
100
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
const root = parsed;
|
|
104
|
+
if (!root.provider || typeof root.provider !== "object" || Array.isArray(root.provider)) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
return dedupeNonEmptyStrings(Object.keys(root.provider));
|
|
108
|
+
}
|
|
99
109
|
export function isQuotaPluginSpec(spec, kind) {
|
|
100
110
|
const normalized = spec.replace(/\\/g, "/").toLowerCase();
|
|
101
111
|
if (normalized.includes("@slkiser/opencode-quota")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file-utils.js","sourceRoot":"","sources":["../../src/lib/config-file-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-file-utils.js","sourceRoot":"","sources":["../../src/lib/config-file-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* - SDK config is used only as a fallback when no file-backed config exists.
|
|
8
8
|
*/
|
|
9
9
|
import type { QuotaToastConfig } from "./types.js";
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const QUOTA_TOAST_CONFIG_RELATIVE_PATH = "opencode-quota/quota-toast.json";
|
|
11
|
+
export declare const QUOTA_TOAST_SETTING_SOURCE_KEYS: readonly ["enabled", "enableToast", "formatStyle", "percentDisplayMode", "minIntervalMs", "debug", "enabledProviders", "anthropicBinaryPath", "googleModels", "alibabaCodingPlanTier", "cursorPlan", "cursorIncludedApiUsd", "cursorBillingCycleStartDay", "opencodeGoWindows", "pricingSnapshot.source", "pricingSnapshot.autoRefresh", "showOnIdle", "showOnQuestion", "showOnCompact", "showOnBothFail", "toastDurationMs", "onlyCurrentModel", "showSessionTokens", "layout.maxWidth", "layout.narrowAt", "layout.tinyAt"];
|
|
11
12
|
export type QuotaToastSettingSourceKey = (typeof QUOTA_TOAST_SETTING_SOURCE_KEYS)[number];
|
|
12
13
|
export type QuotaToastSettingSources = Partial<Record<QuotaToastSettingSourceKey, string>>;
|
|
13
14
|
export interface LoadConfigIssue {
|
|
@@ -30,6 +31,7 @@ export interface LoadConfigOptions {
|
|
|
30
31
|
configRootDir?: string;
|
|
31
32
|
}
|
|
32
33
|
export declare function createLoadConfigMeta(): LoadConfigMeta;
|
|
34
|
+
export declare function getQuotaToastConfigPath(configRootDir: string): string;
|
|
33
35
|
/**
|
|
34
36
|
* Load plugin configuration from OpenCode config
|
|
35
37
|
*
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAIjB,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,+BAA+B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAIjB,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF,eAAO,MAAM,+BAA+B,ggBA2BlC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1F,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,wBAAwB,CAAC;IACzC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAUrD;AAuDD,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAErE;AAukBD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EACF;IACE,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YACjB,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAC;SACtE,CAAC,CAAC;KACJ,CAAC;CACH,GACD,SAAS,EACb,IAAI,CAAC,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAyK3B"}
|