@slkiser/opencode-quota 3.8.6 → 3.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -16
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.js +43 -23
- package/dist/lib/alibaba-auth.js.map +1 -1
- package/dist/lib/chutes-config.d.ts +1 -0
- package/dist/lib/chutes-config.d.ts.map +1 -1
- package/dist/lib/chutes-config.js +5 -2
- package/dist/lib/chutes-config.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +32 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/crof-config.d.ts +2 -1
- package/dist/lib/crof-config.d.ts.map +1 -1
- package/dist/lib/crof-config.js +9 -1
- package/dist/lib/crof-config.js.map +1 -1
- package/dist/lib/deepseek-auth.d.ts +15 -0
- package/dist/lib/deepseek-auth.d.ts.map +1 -0
- package/dist/lib/deepseek-auth.js +32 -0
- package/dist/lib/deepseek-auth.js.map +1 -0
- package/dist/lib/deepseek.d.ts +40 -0
- package/dist/lib/deepseek.d.ts.map +1 -0
- package/dist/lib/deepseek.js +109 -0
- package/dist/lib/deepseek.js.map +1 -0
- package/dist/lib/init-installer.d.ts +1 -0
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +39 -0
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts +43 -0
- package/dist/lib/maintainer-announcements.d.ts.map +1 -0
- package/dist/lib/maintainer-announcements.js +131 -0
- package/dist/lib/maintainer-announcements.js.map +1 -0
- package/dist/lib/minimax-auth.d.ts.map +1 -1
- package/dist/lib/minimax-auth.js +2 -4
- package/dist/lib/minimax-auth.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +1 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +18 -7
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +7 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +17 -0
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-status.d.ts +6 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +34 -4
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/synthetic-config.d.ts +1 -0
- package/dist/lib/synthetic-config.d.ts.map +1 -1
- package/dist/lib/synthetic-config.js +5 -2
- package/dist/lib/synthetic-config.js.map +1 -1
- package/dist/lib/tui-panel-state.d.ts +18 -0
- package/dist/lib/tui-panel-state.d.ts.map +1 -1
- package/dist/lib/tui-panel-state.js +11 -0
- package/dist/lib/tui-panel-state.js.map +1 -1
- package/dist/lib/tui-runtime.d.ts +12 -1
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +91 -14
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/types.d.ts +11 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +4 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/zhipu-auth.d.ts.map +1 -1
- package/dist/lib/zhipu-auth.js +7 -2
- package/dist/lib/zhipu-auth.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +130 -12
- package/dist/plugin.js.map +1 -1
- package/dist/providers/deepseek.d.ts +9 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +61 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +30 -17
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.tsx +76 -34
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ npx @slkiser/opencode-quota init
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
> [!IMPORTANT]
|
|
29
|
-
> OpenCode `>= 1.4.3` and Node.js `>=
|
|
29
|
+
> OpenCode `>= 1.4.3` and Node.js `>= 20` are required.
|
|
30
30
|
|
|
31
31
|
The installer adds missing plugin/config entries and keeps your unrelated settings. Re-running it updates only installer-owned Quota UI choices.
|
|
32
32
|
|
|
@@ -40,14 +40,16 @@ The installer adds missing plugin/config entries and keeps your unrelated settin
|
|
|
40
40
|
| Quota reset periods | Show one reset period per provider, or all known reset periods. |
|
|
41
41
|
| Quota percentage meaning | Show quota remaining, or quota already used. |
|
|
42
42
|
| Session token details | Hide token counts for shorter output, or show them when available. |
|
|
43
|
+
| Maintainer announcements | Keep bundled maintainer announcements enabled, or opt out. Yes is the default; Sidebar or Compact status installs the TUI plugin, where home notices can appear. |
|
|
43
44
|
|
|
44
45
|
### After install
|
|
45
46
|
|
|
46
47
|
1. Restart OpenCode.
|
|
47
48
|
2. Run `/quota`.
|
|
48
49
|
3. If something looks wrong, run `/quota_status`.
|
|
49
|
-
4. If you enabled the
|
|
50
|
-
5. If you enabled
|
|
50
|
+
4. If you kept maintainer announcements enabled and installed the TUI plugin, the home screen can show `Notice: Maintainer announcement available. Run /quota_announcements.` or the plural count form. Without the TUI plugin, the same count-only notice can appear once after the first visible quota toast. Run `/quota_announcements` to read active notices.
|
|
51
|
+
5. If you enabled the Sidebar panel, open the session sidebar and look for `Quota`.
|
|
52
|
+
6. If you enabled Compact status line, look for the home-bottom quota line and the chat/session prompt quota line.
|
|
51
53
|
|
|
52
54
|
### Terminal-only check
|
|
53
55
|
|
|
@@ -68,9 +70,9 @@ opencode-quota show --provider copilot
|
|
|
68
70
|
- A `Quota` Sidebar panel in the TUI
|
|
69
71
|
- Popup quota toasts in OpenCode
|
|
70
72
|
- A Compact status line in the TUI
|
|
71
|
-
- `/quota
|
|
73
|
+
- `/quota`, `/quota_status`, and `/quota_announcements` slash commands
|
|
72
74
|
- Token reports such as `/tokens_today` and `/tokens_weekly`
|
|
73
|
-
- Provider diagnostics for auth, quota sources, and
|
|
75
|
+
- Provider diagnostics for auth, quota sources, pricing, and bundled maintainer announcements
|
|
74
76
|
|
|
75
77
|
<table>
|
|
76
78
|
<tr>
|
|
@@ -118,9 +120,9 @@ This enables providers, slash commands, terminal checks, and popup toasts. Add t
|
|
|
118
120
|
}
|
|
119
121
|
```
|
|
120
122
|
|
|
121
|
-
### 2. Add the TUI plugin (for Sidebar panel
|
|
123
|
+
### 2. Add the TUI plugin (for Sidebar panel, Compact status line, or announcement home notices)
|
|
122
124
|
|
|
123
|
-
If you want the Sidebar panel
|
|
125
|
+
If you want the Sidebar panel, Compact status line, or maintainer announcement home notices, also add this to `tui.json` or `tui.jsonc`:
|
|
124
126
|
|
|
125
127
|
```jsonc
|
|
126
128
|
{
|
|
@@ -149,6 +151,10 @@ Start with this, then adjust the UI choices in the next section:
|
|
|
149
151
|
"tuiCompactStatus": {
|
|
150
152
|
"enabled": false,
|
|
151
153
|
},
|
|
154
|
+
"maintainerAnnouncements": {
|
|
155
|
+
"enabled": true,
|
|
156
|
+
"home": true,
|
|
157
|
+
},
|
|
152
158
|
}
|
|
153
159
|
```
|
|
154
160
|
|
|
@@ -164,10 +170,13 @@ All UI surfaces use the same quota data. Put these settings in `opencode-quota/q
|
|
|
164
170
|
| Sidebar panel | `tuiSidebarPanel.enabled: true` | Full `Quota` panel in OpenCode's session sidebar. Requires the TUI plugin entry above. |
|
|
165
171
|
| Toast | `enableToast: true` | Popup toast after idle/question/compact events. Requires the server plugin entry above. |
|
|
166
172
|
| Compact status line | `tuiCompactStatus.enabled: true` | Short text-only quota line at the home bottom and chat/session prompt locations, for example `Copilot 94% | OpenAI Pro 5h 100%, 7d 100%`. Requires the TUI plugin entry above. |
|
|
167
|
-
|
|
|
173
|
+
| Maintainer announcement notice | `maintainerAnnouncements.enabled: true`, `maintainerAnnouncements.home: true` | Prefers the TUI home notice when the quota TUI plugin is configured. Without the TUI plugin, shows the same count-only notice once after the first visible quota toast. |
|
|
174
|
+
| Terminal/slash only | `enableToast: false`, `tuiSidebarPanel.enabled: false`, `tuiCompactStatus.enabled: false`, `maintainerAnnouncements.enabled: false` | Keeps `/quota`, `/quota_status`, `/quota_announcements`, and terminal checks. |
|
|
168
175
|
|
|
169
176
|
Selecting Compact status line in the installer enables both compact surfaces by default. To keep compact status home-only, set `tuiCompactStatus.sessionPrompt: false`.
|
|
170
177
|
|
|
178
|
+
In the sidebar panel, click the `Quota` header to switch between the compact summary (`▶ Quota`) and the detailed all-windows view (`▼ Quota`). OpenCode remembers the last sidebar state for the plugin.
|
|
179
|
+
|
|
171
180
|
For more examples, see [Common configuration](#common-configuration). For every option, see [Full configuration reference](#full-configuration-reference).
|
|
172
181
|
|
|
173
182
|
## Commands
|
|
@@ -176,7 +185,8 @@ For more examples, see [Common configuration](#common-configuration). For every
|
|
|
176
185
|
| --- | --- |
|
|
177
186
|
| `opencode-quota show` | Terminal quota-only quick glance |
|
|
178
187
|
| `/quota` | Detailed quota report |
|
|
179
|
-
| `/quota_status` | Config, provider, auth, pricing, and
|
|
188
|
+
| `/quota_status` | Config, provider, auth, pricing, `enabled`/`home` announcement config, `source=bundled_only`, `network=false`, and active/future/expired announcement counts |
|
|
189
|
+
| `/quota_announcements` | List active bundled maintainer notices |
|
|
180
190
|
| `/pricing_refresh` | Refresh local runtime pricing from `models.dev` |
|
|
181
191
|
| `/tokens_today` | Tokens used today |
|
|
182
192
|
| `/tokens_daily` | Tokens used in the last 24 hours |
|
|
@@ -203,13 +213,14 @@ Most providers work automatically. If a provider has a “Needs setup” link, o
|
|
|
203
213
|
| MiniMax Coding Plan (CN) | Automatic | Remote API |
|
|
204
214
|
| Kimi Code | Automatic | Remote API |
|
|
205
215
|
| Chutes AI | Usually automatic | Remote API |
|
|
206
|
-
| Crof.ai | Manual env/config | Remote API |
|
|
216
|
+
| Crof.ai | Manual env/config/auth | Remote API |
|
|
207
217
|
| Synthetic | Automatic | Remote API |
|
|
208
218
|
| Google Antigravity | [Needs setup](#google-antigravity) | Remote API |
|
|
209
219
|
| Gemini CLI | [Needs setup](#gemini-cli) | Remote API |
|
|
210
220
|
| Z.ai Coding Plan | Automatic | Remote API |
|
|
211
221
|
| Zhipu Coding Plan | Automatic | Remote API |
|
|
212
222
|
| NanoGPT | Usually automatic | Remote API |
|
|
223
|
+
| DeepSeek | Usually automatic | Remote API balance |
|
|
213
224
|
| OpenCode Go | [Needs setup](#opencode-go) | Dashboard scraping |
|
|
214
225
|
|
|
215
226
|
## Common configuration
|
|
@@ -224,6 +235,10 @@ Common locations:
|
|
|
224
235
|
|
|
225
236
|
If you are unsure, run `/quota_status`; it prints the config path it loaded.
|
|
226
237
|
|
|
238
|
+
### Maintainer announcements and privacy
|
|
239
|
+
|
|
240
|
+
Announcements are bundled only: no remote fetches, announcement telemetry, or persisted dismiss state. Use `/quota_announcements` to read active notices and `/quota_status` for counts/diagnostics. See **Configure maintainer announcements** below for options.
|
|
241
|
+
|
|
227
242
|
<details>
|
|
228
243
|
<summary><strong>Choose providers explicitly</strong></summary>
|
|
229
244
|
|
|
@@ -270,6 +285,22 @@ Keeps `/quota`, `/quota_status`, terminal checks, and any enabled UI surfaces.
|
|
|
270
285
|
|
|
271
286
|
</details>
|
|
272
287
|
|
|
288
|
+
<details>
|
|
289
|
+
<summary><strong>Configure maintainer announcements</strong></summary>
|
|
290
|
+
|
|
291
|
+
```jsonc
|
|
292
|
+
{
|
|
293
|
+
"maintainerAnnouncements": {
|
|
294
|
+
"enabled": true,
|
|
295
|
+
"home": true,
|
|
296
|
+
},
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Set `enabled: false` to disable automatic announcement surfaces. `/quota_announcements` lists active bundled notices when announcements are enabled.
|
|
301
|
+
|
|
302
|
+
</details>
|
|
303
|
+
|
|
273
304
|
<details>
|
|
274
305
|
<summary><strong>Turn off the Sidebar panel</strong></summary>
|
|
275
306
|
|
|
@@ -369,13 +400,20 @@ Existing `experimental.quotaToast` settings still work when no sidecar file exis
|
|
|
369
400
|
|
|
370
401
|
| Option | Default | Meaning |
|
|
371
402
|
| --- | --- | --- |
|
|
372
|
-
| `tuiSidebarPanel.enabled` | `true` | Show the Sidebar `Quota` panel when the TUI plugin is installed.
|
|
403
|
+
| `tuiSidebarPanel.enabled` | `true` | Show the Sidebar `Quota` panel when the TUI plugin is installed. Click the panel header to toggle between compact summary and detailed all-windows views; OpenCode remembers the last state. |
|
|
373
404
|
| `tuiCompactStatus.enabled` | `false` | Opt in to Compact status line UI surfaces. |
|
|
374
405
|
| `tuiCompactStatus.homeBottom` | `true` | Show the Compact status line at the home bottom location. |
|
|
375
406
|
| `tuiCompactStatus.sessionPrompt` | `true` | Show the Compact status line by wrapping the TUI session prompt. Disable this if you only want the home-bottom line. |
|
|
376
407
|
| `tuiCompactStatus.suppressWhenNativeProviderQuota` | `true` | Hide the Compact status line when OpenCode exposes native provider-quota support. |
|
|
377
408
|
| `tuiCompactStatus.maxWidth` | `96` | Maximum Compact status line text width. |
|
|
378
409
|
|
|
410
|
+
### Maintainer announcement settings
|
|
411
|
+
|
|
412
|
+
| Option | Default | Meaning |
|
|
413
|
+
| --- | --- | --- |
|
|
414
|
+
| `maintainerAnnouncements.enabled` | `true` | Enable bundled maintainer announcements. |
|
|
415
|
+
| `maintainerAnnouncements.home` | `true` | Show the count-only notice on TUI home when the quota TUI plugin is configured, or as a one-shot toast fallback after a visible quota toast when it is not. |
|
|
416
|
+
|
|
379
417
|
### Provider-specific settings
|
|
380
418
|
|
|
381
419
|
| Option | Default | Meaning |
|
|
@@ -449,6 +487,34 @@ If you use manual provider selection, include `google-gemini-cli` in `enabledPro
|
|
|
449
487
|
|
|
450
488
|
</details>
|
|
451
489
|
|
|
490
|
+
<a id="deepseek"></a>
|
|
491
|
+
<details>
|
|
492
|
+
<summary><strong>DeepSeek</strong></summary>
|
|
493
|
+
|
|
494
|
+
DeepSeek shows the current on-demand account balance from `GET https://api.deepseek.com/user/balance`.
|
|
495
|
+
|
|
496
|
+
Use one of these trusted API-key sources:
|
|
497
|
+
|
|
498
|
+
```bash
|
|
499
|
+
export DEEPSEEK_API_KEY="your-api-key"
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
Or put the key in trusted user/global OpenCode config, not repo-local config:
|
|
503
|
+
|
|
504
|
+
```jsonc
|
|
505
|
+
{
|
|
506
|
+
"provider": {
|
|
507
|
+
"deepseek": {
|
|
508
|
+
"options": { "apiKey": "{env:DEEPSEEK_API_KEY}" },
|
|
509
|
+
},
|
|
510
|
+
},
|
|
511
|
+
}
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
If you use manual provider selection, include `deepseek` in `enabledProviders`.
|
|
515
|
+
|
|
516
|
+
</details>
|
|
517
|
+
|
|
452
518
|
<a id="opencode-go"></a>
|
|
453
519
|
<details>
|
|
454
520
|
<summary><strong>OpenCode Go</strong></summary>
|
|
@@ -483,6 +549,7 @@ Start here when quota or token data looks wrong.
|
|
|
483
549
|
| Compact status line does not appear anywhere | Confirm `tui.json` includes `@slkiser/opencode-quota`, restart OpenCode, check `tuiCompactStatus.enabled`, and check whether `tuiCompactStatus.suppressWhenNativeProviderQuota` is hiding it because OpenCode exposes native provider-quota support. |
|
|
484
550
|
| Compact status appears on home but not in chat/session | Check `tuiCompactStatus.sessionPrompt`; set it to `true` to show the chat/session prompt line. |
|
|
485
551
|
| Popup toasts do not appear | Check `enableToast`, `showOnIdle`, `showOnQuestion`, and `showOnCompact`. |
|
|
552
|
+
| Announcement home notice does not appear | Confirm `tui.json` includes `@slkiser/opencode-quota`, restart OpenCode, then check `maintainerAnnouncements.enabled`, `maintainerAnnouncements.home`, and the active count in the `maintainer_announcements` section of `/quota_status`. |
|
|
486
553
|
| Token reports are empty | Start OpenCode once so `opencode.db` exists, then run a session with model usage. |
|
|
487
554
|
| Pricing looks stale | Run `/pricing_refresh`. |
|
|
488
555
|
|
|
@@ -574,23 +641,24 @@ Run `/quota_status` and check the Alibaba auth, resolved tier, state-file path,
|
|
|
574
641
|
</details>
|
|
575
642
|
|
|
576
643
|
<details>
|
|
577
|
-
<summary><strong>MiniMax, Kimi, Chutes AI, Crof.ai, Synthetic, Z.ai, Zhipu, and
|
|
644
|
+
<summary><strong>MiniMax, Kimi, Chutes AI, Crof.ai, Synthetic, Z.ai, Zhipu, NanoGPT, and DeepSeek</strong></summary>
|
|
578
645
|
|
|
579
|
-
These providers use trusted env vars, trusted user/global OpenCode config, or native OpenCode auth. Run `/quota_status` and check the provider-specific API-key diagnostics.
|
|
646
|
+
These providers use trusted env vars, trusted user/global OpenCode config, or native OpenCode auth. Run `/quota_status` and check the provider-specific API-key diagnostics.
|
|
580
647
|
|
|
581
648
|
| Provider | Useful checks |
|
|
582
649
|
| --- | --- |
|
|
583
650
|
| MiniMax Coding Plan | Use `MINIMAX_CODING_PLAN_API_KEY` or `MINIMAX_API_KEY` for the international endpoint. Runtime/config ids like `minimax` and `minimax-coding-plan` use this provider. Repo-local provider secrets are ignored. |
|
|
584
651
|
| MiniMax Coding Plan (CN) | Use `MINIMAX_CHINA_CODING_PLAN_API_KEY` or trusted user/global OpenCode config under `minimax-china-coding-plan`, `minimax-cn-coding-plan`, `minimax-cn`, or `minimax-china`. Runtime id `minimax-cn-coding-plan` uses this provider. |
|
|
585
652
|
| Kimi Code | Use `KIMI_API_KEY` or `KIMI_CODE_API_KEY`; repo-local provider secrets are ignored. |
|
|
586
|
-
| Chutes AI | Use `CHUTES_API_KEY
|
|
587
|
-
| Crof.ai | Use `CROF_API_KEY`, `CROFAI_API_KEY`,
|
|
653
|
+
| Chutes AI | Use `CHUTES_API_KEY`, trusted user/global config, or OpenCode auth. |
|
|
654
|
+
| Crof.ai | Use `CROF_API_KEY`, `CROFAI_API_KEY`, trusted user/global config, or OpenCode auth. |
|
|
588
655
|
| Synthetic | Use `SYNTHETIC_API_KEY`, trusted user/global config, or OpenCode auth. |
|
|
589
656
|
| Z.ai Coding Plan | Use `ZAI_API_KEY` or `ZAI_CODING_PLAN_API_KEY`; malformed fallback auth is surfaced as an auth error. |
|
|
590
657
|
| Zhipu Coding Plan | Use `ZHIPU_API_KEY` or `ZHIPU_CODING_PLAN_API_KEY`; malformed fallback auth is surfaced as an auth error. |
|
|
591
658
|
| NanoGPT | Use `NANOGPT_API_KEY`, `NANO_GPT_API_KEY`, trusted user/global config, or OpenCode auth. |
|
|
659
|
+
| DeepSeek | Use `DEEPSEEK_API_KEY`, trusted user/global config under `provider.deepseek.options.apiKey`, or OpenCode auth. This provider shows balance only because DeepSeek does not expose a quota reset window. |
|
|
592
660
|
|
|
593
|
-
For security, repo-local `opencode.json` / `opencode.jsonc` is ignored for provider secrets in these integrations. Put secrets in environment variables or trusted user/global config.
|
|
661
|
+
For security, repo-local `opencode.json` / `opencode.jsonc` is ignored for provider secrets in these integrations. Put secrets in environment variables or trusted user/global config. OpenCode auth fallbacks for API-key providers require `{ "type": "api", "key": "..." }` entries.
|
|
594
662
|
|
|
595
663
|
</details>
|
|
596
664
|
|
package/dist/index.d.ts
CHANGED
|
@@ -11,5 +11,5 @@ declare const pluginModule: {
|
|
|
11
11
|
};
|
|
12
12
|
export default pluginModule;
|
|
13
13
|
export { QuotaToastPlugin } from "./plugin.js";
|
|
14
|
-
export type { QuotaToastConfig, GoogleModelId, PricingSnapshotSource, CopilotEnterpriseUsageResult, CopilotOrganizationUsageResult, CopilotQuotaResult, GoogleQuotaResult, GoogleModelQuota, MiniMaxResult, MiniMaxResultEntry, } from "./lib/types.js";
|
|
14
|
+
export type { QuotaToastConfig, MaintainerAnnouncementsConfig, GoogleModelId, PricingSnapshotSource, CopilotEnterpriseUsageResult, CopilotOrganizationUsageResult, CopilotQuotaResult, GoogleQuotaResult, GoogleModelQuota, MiniMaxResult, MiniMaxResultEntry, } from "./lib/types.js";
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,QAAA,MAAM,YAAY;;;CAGQ,CAAC;AAE3B,eAAe,YAAY,CAAC;AAI5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,QAAA,MAAM,YAAY;;;CAGQ,CAAC;AAE3B,eAAe,YAAY,CAAC;AAI5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,YAAY,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,aAAa,EACb,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-auth.d.ts","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,qCAAqC,OAAQ,CAAC;AAM3D,MAAM,MAAM,0BAA0B,GAClC,iCAAiC,GACjC,qBAAqB,GACrB,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,MAAM,6BAA6B,GACrC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAE,GACpE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,gCAAgC,GACxC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IACE,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,0BAA0B,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,qBAAqB,CAAC;CAC7B,GACD;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"alibaba-auth.d.ts","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,qCAAqC,OAAQ,CAAC;AAM3D,MAAM,MAAM,0BAA0B,GAClC,iCAAiC,GACjC,qBAAqB,GACrB,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,MAAM,6BAA6B,GACrC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAE,GACpE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,gCAAgC,GACxC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IACE,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,0BAA0B,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,qBAAqB,CAAC;CAC7B,GACD;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AA8CjH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACjC,YAAY,GAAE,qBAAwD,GACrE,6BAA6B,CAyD/B;AAmDD,wBAAsB,kCAAkC,CAAC,MAAM,CAAC,EAAE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAEzC;AAED,wBAAsB,mCAAmC,CAAC,MAAM,CAAC,EAAE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAmC5C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAIxD"}
|
package/dist/lib/alibaba-auth.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { extractProviderOptionsApiKey, getApiKeyCheckedPaths,
|
|
1
|
+
import { extractProviderOptionsApiKey, getApiKeyCheckedPaths, getGlobalOpencodeConfigCandidatePaths, resolveApiKeyFromEnvAndConfig, } from "./api-key-resolver.js";
|
|
2
2
|
import { getAuthPaths, readAuthFileCached } from "./opencode-auth.js";
|
|
3
|
+
import { sanitizeDisplayText } from "./display-sanitize.js";
|
|
3
4
|
export const DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS = 5_000;
|
|
4
5
|
const ALIBABA_AUTH_KEYS = ["alibaba-coding-plan", "alibaba"];
|
|
5
6
|
const ALIBABA_PROVIDER_KEYS = ["alibaba-coding-plan", "alibaba"];
|
|
@@ -27,32 +28,51 @@ function normalizeAlibabaTier(value) {
|
|
|
27
28
|
return "pro";
|
|
28
29
|
return null;
|
|
29
30
|
}
|
|
30
|
-
function
|
|
31
|
+
function asRecord(value) {
|
|
32
|
+
return value !== null && typeof value === "object" ? value : null;
|
|
33
|
+
}
|
|
34
|
+
function getAlibabaAuthEntry(auth) {
|
|
35
|
+
const root = asRecord(auth);
|
|
36
|
+
if (!root)
|
|
37
|
+
return undefined;
|
|
31
38
|
for (const key of ALIBABA_AUTH_KEYS) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
continue;
|
|
35
|
-
const alibaba = entry;
|
|
36
|
-
const credential = typeof alibaba.key === "string" && alibaba.key.trim()
|
|
37
|
-
? alibaba.key.trim()
|
|
38
|
-
: typeof alibaba.access === "string" && alibaba.access.trim()
|
|
39
|
-
? alibaba.access.trim()
|
|
40
|
-
: "";
|
|
41
|
-
if (!credential) {
|
|
42
|
-
continue;
|
|
39
|
+
if (Object.prototype.hasOwnProperty.call(root, key)) {
|
|
40
|
+
return root[key];
|
|
43
41
|
}
|
|
44
|
-
return alibaba;
|
|
45
42
|
}
|
|
46
|
-
return
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
function isAlibabaAuthData(value) {
|
|
46
|
+
return value !== null && typeof value === "object";
|
|
47
47
|
}
|
|
48
|
-
function
|
|
49
|
-
|
|
48
|
+
function sanitizeAlibabaAuthValue(value) {
|
|
49
|
+
const sanitized = sanitizeDisplayText(value).replace(/\s+/g, " ").trim();
|
|
50
|
+
return (sanitized || "unknown").slice(0, 120);
|
|
50
51
|
}
|
|
51
52
|
export function resolveAlibabaCodingPlanAuth(auth, fallbackTier = DEFAULT_ALIBABA_CODING_PLAN_TIER) {
|
|
52
|
-
const alibaba =
|
|
53
|
-
if (
|
|
53
|
+
const alibaba = getAlibabaAuthEntry(auth);
|
|
54
|
+
if (alibaba === undefined) {
|
|
54
55
|
return { state: "none" };
|
|
55
56
|
}
|
|
57
|
+
if (!isAlibabaAuthData(alibaba)) {
|
|
58
|
+
return { state: "invalid", error: "Alibaba Coding Plan auth entry has invalid shape" };
|
|
59
|
+
}
|
|
60
|
+
if (typeof alibaba.type !== "string") {
|
|
61
|
+
return {
|
|
62
|
+
state: "invalid",
|
|
63
|
+
error: "Alibaba Coding Plan auth entry present but type is missing or invalid",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (alibaba.type !== "api") {
|
|
67
|
+
return {
|
|
68
|
+
state: "invalid",
|
|
69
|
+
error: `Unsupported Alibaba Coding Plan auth type: "${sanitizeAlibabaAuthValue(alibaba.type)}"`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const apiKey = typeof alibaba.key === "string" ? alibaba.key.trim() : "";
|
|
73
|
+
if (!apiKey) {
|
|
74
|
+
return { state: "invalid", error: "Alibaba Coding Plan auth entry present but key is empty" };
|
|
75
|
+
}
|
|
56
76
|
const rawTier = getFirstString(alibaba, [
|
|
57
77
|
"tier",
|
|
58
78
|
"planTier",
|
|
@@ -63,20 +83,20 @@ export function resolveAlibabaCodingPlanAuth(auth, fallbackTier = DEFAULT_ALIBAB
|
|
|
63
83
|
if (!rawTier) {
|
|
64
84
|
return {
|
|
65
85
|
state: "configured",
|
|
66
|
-
apiKey
|
|
86
|
+
apiKey,
|
|
67
87
|
tier: fallbackTier,
|
|
68
88
|
};
|
|
69
89
|
}
|
|
70
90
|
if (!tier) {
|
|
71
91
|
return {
|
|
72
92
|
state: "invalid",
|
|
73
|
-
error: `Unsupported Alibaba Coding Plan tier: ${rawTier}`,
|
|
93
|
+
error: `Unsupported Alibaba Coding Plan tier: ${sanitizeAlibabaAuthValue(rawTier)}`,
|
|
74
94
|
rawTier,
|
|
75
95
|
};
|
|
76
96
|
}
|
|
77
97
|
return {
|
|
78
98
|
state: "configured",
|
|
79
|
-
apiKey
|
|
99
|
+
apiKey,
|
|
80
100
|
tier,
|
|
81
101
|
};
|
|
82
102
|
}
|
|
@@ -155,7 +175,7 @@ export async function getAlibabaCodingPlanAuthDiagnostics(params) {
|
|
|
155
175
|
};
|
|
156
176
|
}
|
|
157
177
|
export function hasAlibabaAuth(auth) {
|
|
158
|
-
return
|
|
178
|
+
return resolveAlibabaCodingPlanAuth(auth).state === "configured";
|
|
159
179
|
}
|
|
160
180
|
export function isAlibabaModelId(model) {
|
|
161
181
|
if (typeof model !== "string")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-auth.js","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"alibaba-auth.js","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chutes-config.d.ts","sourceRoot":"","sources":["../../src/lib/chutes-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,eAAe,CAAC;CACzB;AAKD,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAejH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAE9E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAExD;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"chutes-config.d.ts","sourceRoot":"","sources":["../../src/lib/chutes-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,eAAe,CAAC;CACzB;AAKD,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAejH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAE9E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAExD;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC,CAKD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readAuthFile } from "./opencode-auth.js";
|
|
1
|
+
import { getAuthPaths, readAuthFile } from "./opencode-auth.js";
|
|
2
2
|
import { createProviderApiKeyResolver, getGlobalOpencodeConfigCandidatePaths, } from "./api-key-resolver.js";
|
|
3
3
|
const ALLOWED_CHUTES_ENV_VARS = ["CHUTES_API_KEY"];
|
|
4
4
|
const CHUTES_PROVIDER_KEYS = ["chutes"];
|
|
@@ -22,6 +22,9 @@ export async function hasChutesApiKey() {
|
|
|
22
22
|
return chutesApiKeyResolver.has();
|
|
23
23
|
}
|
|
24
24
|
export async function getChutesKeyDiagnostics() {
|
|
25
|
-
return
|
|
25
|
+
return {
|
|
26
|
+
...(await chutesApiKeyResolver.diagnostics()),
|
|
27
|
+
authPaths: getAuthPaths(),
|
|
28
|
+
};
|
|
26
29
|
}
|
|
27
30
|
//# sourceMappingURL=chutes-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chutes-config.js","sourceRoot":"","sources":["../../src/lib/chutes-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"chutes-config.js","sourceRoot":"","sources":["../../src/lib/chutes-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAO/B,MAAM,uBAAuB,GAAG,CAAC,gBAAgB,CAAU,CAAC;AAC5D,MAAM,oBAAoB,GAAG,CAAC,QAAQ,CAAU,CAAC;AAQjD,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAEjH,MAAM,oBAAoB,GAAG,4BAA4B,CAAkB;IACzE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACnE,YAAY,EAAE,oBAAoB;IAClC,cAAc,EAAE,uBAAuB;IACvC,gBAAgB,EAAE,eAAe;IACjC,iBAAiB,EAAE,gBAAgB;IACnC,mBAAmB,EAAE,qCAAqC;IAC1D,IAAI,EAAE;QACJ,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,WAAW;KACxB;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,oBAAoB,CAAC,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,oBAAoB,CAAC,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAM3C,OAAO;QACL,GAAG,CAAC,MAAM,oBAAoB,CAAC,WAAW,EAAE,CAAC;QAC7C,SAAS,EAAE,YAAY,EAAE;KAC1B,CAAC;AACJ,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { QuotaToastConfig } from "./types.js";
|
|
10
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", "requestTimeoutMs", "debug", "enabledProviders", "anthropicBinaryPath", "googleModels", "alibabaCodingPlanTier", "cursorPlan", "cursorIncludedApiUsd", "cursorBillingCycleStartDay", "opencodeGoWindows", "pricingSnapshot.source", "pricingSnapshot.autoRefresh", "showOnIdle", "showOnQuestion", "showOnCompact", "showOnBothFail", "toastDurationMs", "onlyCurrentModel", "showSessionTokens", "tuiSidebarPanel.enabled", "tuiCompactStatus.enabled", "tuiCompactStatus.homeBottom", "tuiCompactStatus.sessionPrompt", "tuiCompactStatus.suppressWhenNativeProviderQuota", "tuiCompactStatus.maxWidth", "layout.maxWidth", "layout.narrowAt", "layout.tinyAt"];
|
|
11
|
+
export declare const QUOTA_TOAST_SETTING_SOURCE_KEYS: readonly ["enabled", "enableToast", "formatStyle", "percentDisplayMode", "minIntervalMs", "requestTimeoutMs", "debug", "enabledProviders", "anthropicBinaryPath", "googleModels", "alibabaCodingPlanTier", "cursorPlan", "cursorIncludedApiUsd", "cursorBillingCycleStartDay", "opencodeGoWindows", "pricingSnapshot.source", "pricingSnapshot.autoRefresh", "showOnIdle", "showOnQuestion", "showOnCompact", "showOnBothFail", "toastDurationMs", "onlyCurrentModel", "showSessionTokens", "tuiSidebarPanel.enabled", "tuiCompactStatus.enabled", "tuiCompactStatus.homeBottom", "tuiCompactStatus.sessionPrompt", "tuiCompactStatus.suppressWhenNativeProviderQuota", "tuiCompactStatus.maxWidth", "maintainerAnnouncements.enabled", "maintainerAnnouncements.home", "layout.maxWidth", "layout.narrowAt", "layout.tinyAt"];
|
|
12
12
|
export type QuotaToastSettingSourceKey = (typeof QUOTA_TOAST_SETTING_SOURCE_KEYS)[number];
|
|
13
13
|
export type QuotaToastSettingSources = Partial<Record<QuotaToastSettingSourceKey, string>>;
|
|
14
14
|
export interface LoadConfigIssue {
|
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;AAapB,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF,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;AAapB,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF,eAAO,MAAM,+BAA+B,gyBAoClC,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;AA+DD,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAErE;AAmuBD;;;;;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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -47,6 +47,8 @@ export const QUOTA_TOAST_SETTING_SOURCE_KEYS = [
|
|
|
47
47
|
"tuiCompactStatus.sessionPrompt",
|
|
48
48
|
"tuiCompactStatus.suppressWhenNativeProviderQuota",
|
|
49
49
|
"tuiCompactStatus.maxWidth",
|
|
50
|
+
"maintainerAnnouncements.enabled",
|
|
51
|
+
"maintainerAnnouncements.home",
|
|
50
52
|
"layout.maxWidth",
|
|
51
53
|
"layout.narrowAt",
|
|
52
54
|
"layout.tinyAt",
|
|
@@ -159,6 +161,7 @@ function cloneConfig(config) {
|
|
|
159
161
|
pricingSnapshot: { ...config.pricingSnapshot },
|
|
160
162
|
tuiSidebarPanel: { ...config.tuiSidebarPanel },
|
|
161
163
|
tuiCompactStatus: { ...config.tuiCompactStatus },
|
|
164
|
+
maintainerAnnouncements: { ...config.maintainerAnnouncements },
|
|
162
165
|
layout: { ...config.layout },
|
|
163
166
|
};
|
|
164
167
|
}
|
|
@@ -257,6 +260,19 @@ function extractTuiCompactStatusPatch(value) {
|
|
|
257
260
|
}
|
|
258
261
|
return Object.keys(patch).length > 0 ? patch : undefined;
|
|
259
262
|
}
|
|
263
|
+
function extractMaintainerAnnouncementsPatch(value) {
|
|
264
|
+
if (!isPlainObject(value)) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const patch = {};
|
|
268
|
+
if (hasOwnKey(value, "enabled") && typeof value.enabled === "boolean") {
|
|
269
|
+
patch.enabled = value.enabled;
|
|
270
|
+
}
|
|
271
|
+
if (hasOwnKey(value, "home") && typeof value.home === "boolean") {
|
|
272
|
+
patch.home = value.home;
|
|
273
|
+
}
|
|
274
|
+
return Object.keys(patch).length > 0 ? patch : undefined;
|
|
275
|
+
}
|
|
260
276
|
function extractLayoutPatch(value) {
|
|
261
277
|
if (!isPlainObject(value)) {
|
|
262
278
|
return undefined;
|
|
@@ -388,6 +404,12 @@ function extractValidatedQuotaToastPatch(quotaToastConfig, reportIssue) {
|
|
|
388
404
|
patch.tuiCompactStatus = tuiCompactStatus;
|
|
389
405
|
}
|
|
390
406
|
}
|
|
407
|
+
if (hasOwnKey(quotaToastConfig, "maintainerAnnouncements")) {
|
|
408
|
+
const maintainerAnnouncements = extractMaintainerAnnouncementsPatch(quotaToastConfig.maintainerAnnouncements);
|
|
409
|
+
if (maintainerAnnouncements) {
|
|
410
|
+
patch.maintainerAnnouncements = maintainerAnnouncements;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
391
413
|
if (hasOwnKey(quotaToastConfig, "layout")) {
|
|
392
414
|
const layout = extractLayoutPatch(quotaToastConfig.layout);
|
|
393
415
|
if (layout) {
|
|
@@ -530,6 +552,16 @@ function applyValidatedQuotaToastPatch(config, patch, sourcePath, settingSources
|
|
|
530
552
|
applySettingSource(settingSources, "tuiCompactStatus.maxWidth", sourcePath);
|
|
531
553
|
}
|
|
532
554
|
}
|
|
555
|
+
if (patch.maintainerAnnouncements) {
|
|
556
|
+
if (hasOwnKey(patch.maintainerAnnouncements, "enabled")) {
|
|
557
|
+
config.maintainerAnnouncements.enabled = patch.maintainerAnnouncements.enabled;
|
|
558
|
+
applySettingSource(settingSources, "maintainerAnnouncements.enabled", sourcePath);
|
|
559
|
+
}
|
|
560
|
+
if (hasOwnKey(patch.maintainerAnnouncements, "home")) {
|
|
561
|
+
config.maintainerAnnouncements.home = patch.maintainerAnnouncements.home;
|
|
562
|
+
applySettingSource(settingSources, "maintainerAnnouncements.home", sourcePath);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
533
565
|
if (patch.layout) {
|
|
534
566
|
if (hasOwnKey(patch.layout, "maxWidth")) {
|
|
535
567
|
config.layout.maxWidth = patch.layout.maxWidth;
|