@slkiser/opencode-quota 2.15.0 → 2.17.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 +93 -47
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/alibaba-auth.d.ts +6 -1
- package/dist/lib/alibaba-auth.d.ts.map +1 -1
- package/dist/lib/alibaba-auth.js +51 -7
- package/dist/lib/alibaba-auth.js.map +1 -1
- package/dist/lib/api-key-resolver.d.ts +30 -4
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +37 -23
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/cursor-detection.d.ts +1 -0
- package/dist/lib/cursor-detection.d.ts.map +1 -1
- package/dist/lib/cursor-detection.js +16 -8
- package/dist/lib/cursor-detection.js.map +1 -1
- package/dist/lib/minimax-auth.d.ts +9 -3
- package/dist/lib/minimax-auth.d.ts.map +1 -1
- package/dist/lib/minimax-auth.js +49 -9
- package/dist/lib/minimax-auth.js.map +1 -1
- package/dist/lib/opencode-go-config.d.ts +35 -0
- package/dist/lib/opencode-go-config.d.ts.map +1 -0
- package/dist/lib/opencode-go-config.js +124 -0
- package/dist/lib/opencode-go-config.js.map +1 -0
- package/dist/lib/opencode-go.d.ts +15 -0
- package/dist/lib/opencode-go.d.ts.map +1 -0
- package/dist/lib/opencode-go.js +88 -0
- package/dist/lib/opencode-go.js.map +1 -0
- 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 +13 -0
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +60 -7
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/types.d.ts +12 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +10 -2
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/zai-auth.d.ts +6 -1
- package/dist/lib/zai-auth.d.ts.map +1 -1
- package/dist/lib/zai-auth.js +46 -7
- package/dist/lib/zai-auth.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +63 -40
- package/dist/plugin.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +9 -0
- package/dist/providers/opencode-go.d.ts.map +1 -0
- package/dist/providers/opencode-go.js +80 -0
- package/dist/providers/opencode-go.js.map +1 -0
- 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/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# OpenCode Quota
|
|
2
|
+
[](https://www.npmjs.com/package/@slkiser/opencode-quota)
|
|
3
|
+
[](https://www.npmjs.com/package/@slkiser/opencode-quota)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
[](https://github.com/slkiser/opencode-quota/actions/workflows/ci.yml)
|
|
6
|
+
[](./package.json)
|
|
7
|
+
|
|
2
8
|
|
|
3
9
|
`opencode-quota` gives you two things:
|
|
4
10
|
|
|
5
11
|
- Automatic quota toasts after assistant responses
|
|
6
12
|
- Manual `/quota`, `/pricing_refresh`, and `/tokens_*` commands for deeper local reporting with zero context window pollution
|
|
7
13
|
|
|
8
|
-
**Quota providers**: Anthropic (Claude), GitHub Copilot, OpenAI (Plus/Pro), Cursor, Qwen Code, Alibaba Coding Plan, MiniMax Coding Plan, Chutes AI, Firmware AI, Google Antigravity, Z.ai
|
|
14
|
+
**Quota providers**: Anthropic (Claude), GitHub Copilot, OpenAI (Plus/Pro), Cursor, Qwen Code, Alibaba Coding Plan, MiniMax Coding Plan, Chutes AI, Firmware AI, Google Antigravity, Z.ai Coding Plan, NanoGPT, and OpenCode Go.
|
|
9
15
|
|
|
10
16
|
**Token reports**: All models and providers in [models.dev](https://models.dev), plus deterministic local pricing for Cursor Auto/Composer and Cursor model aliases that are not on models.dev.
|
|
11
17
|
|
|
@@ -79,17 +85,18 @@ That is enough for most installs. Providers are auto-detected from your existing
|
|
|
79
85
|
| Provider | Auto setup | Authentication | Quota |
|
|
80
86
|
| --- | --- | --- | --- |
|
|
81
87
|
| **Anthropic (Claude)** | Needs [quick setup](#anthropic-quick-setup) | Local CLI auth | Local CLI report |
|
|
82
|
-
| **GitHub Copilot** | Usually |
|
|
83
|
-
| **OpenAI** | Yes | OpenCode auth
|
|
84
|
-
| **Cursor** | Needs [quick setup](#cursor-quick-setup) | Companion auth
|
|
85
|
-
| **Qwen Code** | Needs [quick setup](#qwen-code-quick-setup) | Companion auth
|
|
86
|
-
| **Alibaba Coding Plan** | Yes | OpenCode auth
|
|
87
|
-
| **Firmware AI** | Usually | OpenCode auth
|
|
88
|
-
| **Chutes AI** | Usually | OpenCode auth
|
|
89
|
-
| **Google Antigravity** | Needs [quick setup](#google-antigravity-quick-setup) | Companion auth
|
|
90
|
-
| **Z.ai** | Yes | OpenCode auth
|
|
91
|
-
| **NanoGPT** | Usually | OpenCode auth
|
|
92
|
-
| **MiniMax Coding Plan** | Yes | OpenCode auth
|
|
88
|
+
| **GitHub Copilot** | Usually | OpenCode auth or PAT | Remote API |
|
|
89
|
+
| **OpenAI** | Yes | OpenCode auth | Remote API |
|
|
90
|
+
| **Cursor** | Needs [quick setup](#cursor-quick-setup) | Companion auth | Local runtime accounting |
|
|
91
|
+
| **Qwen Code** | Needs [quick setup](#qwen-code-quick-setup) | Companion auth | Local estimation |
|
|
92
|
+
| **Alibaba Coding Plan** | Yes | OpenCode auth/global config/env | Local estimation |
|
|
93
|
+
| **Firmware AI** | Usually | OpenCode auth/global config/env | Remote API |
|
|
94
|
+
| **Chutes AI** | Usually | OpenCode auth/global config/env | Remote API |
|
|
95
|
+
| **Google Antigravity** | Needs [quick setup](#google-antigravity-quick-setup) | Companion auth | Remote API |
|
|
96
|
+
| **Z.ai** | Yes | OpenCode auth/global config/env | Remote API |
|
|
97
|
+
| **NanoGPT** | Usually | OpenCode auth/global config/env | Remote API |
|
|
98
|
+
| **MiniMax Coding Plan** | Yes | OpenCode auth/global config/env | Remote API |
|
|
99
|
+
| **OpenCode Go** | Needs [quick setup](#opencode-go-quick-setup) | Env/config auth | Dashboard scraping |
|
|
93
100
|
|
|
94
101
|
<a id="anthropic-quick-setup"></a>
|
|
95
102
|
<details>
|
|
@@ -116,12 +123,12 @@ For behavior details and troubleshooting, see [Anthropic notes](#anthropic-notes
|
|
|
116
123
|
<details>
|
|
117
124
|
<summary><strong>Quick setup: Cursor</strong></summary>
|
|
118
125
|
|
|
119
|
-
Cursor quota support requires the
|
|
126
|
+
Cursor quota support requires the `@playwo/opencode-cursor-oauth` [plugin](https://github.com/PoolPirate/opencode-cursor):
|
|
120
127
|
|
|
121
128
|
```jsonc
|
|
122
129
|
{
|
|
123
130
|
"$schema": "https://opencode.ai/config.json",
|
|
124
|
-
"plugin": ["opencode-cursor-oauth", "@slkiser/opencode-quota"],
|
|
131
|
+
"plugin": ["@playwo/opencode-cursor-oauth", "@slkiser/opencode-quota"],
|
|
125
132
|
"provider": {
|
|
126
133
|
"cursor": {
|
|
127
134
|
"name": "Cursor"
|
|
@@ -178,6 +185,37 @@ For behavior details and troubleshooting, see [Qwen Code notes](#qwen-code-notes
|
|
|
178
185
|
|
|
179
186
|
</details>
|
|
180
187
|
|
|
188
|
+
<a id="opencode-go-quick-setup"></a>
|
|
189
|
+
<details>
|
|
190
|
+
<summary><strong>Quick setup: OpenCode Go</strong></summary>
|
|
191
|
+
|
|
192
|
+
OpenCode Go quota scrapes the OpenCode Go dashboard. It requires a workspace ID and an auth cookie.
|
|
193
|
+
|
|
194
|
+
**Option A — Environment variables:**
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
export OPENCODE_GO_WORKSPACE_ID="your-workspace-id"
|
|
198
|
+
export OPENCODE_GO_AUTH_COOKIE="your-auth-cookie"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Option B — Config file** (for example, `~/.config/opencode/opencode-quota/opencode-go.json` on Linux or legacy macOS installs):
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"workspaceId": "your-workspace-id",
|
|
206
|
+
"authCookie": "your-auth-cookie"
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
To find these values:
|
|
211
|
+
|
|
212
|
+
1. **workspaceId** — Visit [opencode.ai](https://opencode.ai), open your workspace, and copy the workspace ID from the URL: `https://opencode.ai/workspace/<workspaceId>/go`.
|
|
213
|
+
2. **authCookie** — Open your browser DevTools on `opencode.ai`, go to Application → Cookies, and copy the value of the `auth` cookie.
|
|
214
|
+
|
|
215
|
+
Environment variables take precedence over the config file. Run `/quota_status` to see the exact config paths checked on your machine. For behavior details and troubleshooting, see [OpenCode Go notes](#opencode-go-notes).
|
|
216
|
+
|
|
217
|
+
</details>
|
|
218
|
+
|
|
181
219
|
## Commands
|
|
182
220
|
|
|
183
221
|
| Command | What it shows |
|
|
@@ -257,7 +295,7 @@ Example `copilot-quota-token.json`:
|
|
|
257
295
|
<details>
|
|
258
296
|
<summary><strong>Cursor</strong></summary>
|
|
259
297
|
|
|
260
|
-
See [Cursor quick setup](#cursor-quick-setup) for companion-plugin OAuth auth. Quota and token reporting stays local to OpenCode history and local pricing data.
|
|
298
|
+
See [Cursor quick setup](#cursor-quick-setup) for companion-plugin OAuth auth. The canonical companion package is `@playwo/opencode-cursor-oauth`; older plugin names such as `opencode-cursor-oauth`, `opencode-cursor`, and `cursor-acp` are still detected as compatibility aliases. Quota and token reporting stays local to OpenCode history and local pricing data.
|
|
261
299
|
|
|
262
300
|
- Detects Cursor usage when the provider is `cursor` or the stored/current model id is `cursor/*`.
|
|
263
301
|
- `/tokens_*` maps Cursor API-pool models to official pricing and uses bundled static pricing for `auto` and `composer*`.
|
|
@@ -310,12 +348,14 @@ See [Qwen Code quick setup](#qwen-code-quick-setup) for auth. Usage is local-onl
|
|
|
310
348
|
<details>
|
|
311
349
|
<summary><strong>Alibaba Coding Plan</strong></summary>
|
|
312
350
|
|
|
313
|
-
|
|
351
|
+
Alibaba Coding Plan uses trusted env vars or trusted user/global OpenCode config first, then native OpenCode auth from `alibaba-coding-plan` or `alibaba` in `auth.json`. Quota is local request-count estimation with rolling windows.
|
|
314
352
|
|
|
315
353
|
- `lite`: `1200 / 5h`, `9000 / week`, `18000 / month`
|
|
316
354
|
- `pro`: `6000 / 5h`, `45000 / week`, `90000 / month`
|
|
317
|
-
-
|
|
318
|
-
-
|
|
355
|
+
- API key sources are `ALIBABA_CODING_PLAN_API_KEY`, `ALIBABA_API_KEY`, trusted user/global `provider["alibaba-coding-plan"].options.apiKey` or `provider.alibaba.options.apiKey`, then `auth.json`.
|
|
356
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for Alibaba secrets.
|
|
357
|
+
- Allowed env templates are limited to `{env:ALIBABA_CODING_PLAN_API_KEY}` and `{env:ALIBABA_API_KEY}`.
|
|
358
|
+
- If auth fallback wins and omits `tier`, or if env/config wins, the plugin uses `experimental.quotaToast.alibabaCodingPlanTier`, which defaults to `lite`.
|
|
319
359
|
- Counters increment on successful question-tool completions while the current model is `alibaba/*` or `alibaba-cn/*`.
|
|
320
360
|
- State file: `.../opencode/opencode-quota/alibaba-coding-plan-local-quota.json`.
|
|
321
361
|
- `/quota_status` shows auth detection, resolved tier, state-file path, and current 5h/weekly/monthly usage.
|
|
@@ -339,22 +379,13 @@ Example fallback tier:
|
|
|
339
379
|
<details>
|
|
340
380
|
<summary><strong>MiniMax Coding Plan</strong></summary>
|
|
341
381
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
The plugin reads `key` first and falls back to `access` from that auth entry. Quota is fetched from the MiniMax API using those stored credentials. There is no env-var or user/global `opencode.json` fallback for MiniMax Coding Plan auth.
|
|
345
|
-
|
|
346
|
-
Example `auth.json` entry:
|
|
347
|
-
|
|
348
|
-
```json
|
|
349
|
-
{
|
|
350
|
-
"minimax-coding-plan": {
|
|
351
|
-
"type": "api",
|
|
352
|
-
"key": "YOUR_MINIMAX_API_KEY"
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
```
|
|
382
|
+
MiniMax Coding Plan uses trusted env vars or trusted user/global OpenCode config first, then native OpenCode auth from `auth.json["minimax-coding-plan"]`. No additional plugin is required.
|
|
356
383
|
|
|
357
384
|
- `MiniMax-M*` models — rolling 5-hour interval + weekly
|
|
385
|
+
- API key sources are `MINIMAX_CODING_PLAN_API_KEY`, `MINIMAX_API_KEY`, trusted user/global `provider["minimax-coding-plan"].options.apiKey` or `provider.minimax.options.apiKey`, then `auth.json`.
|
|
386
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for MiniMax secrets.
|
|
387
|
+
- Allowed env templates are limited to `{env:MINIMAX_CODING_PLAN_API_KEY}` and `{env:MINIMAX_API_KEY}`.
|
|
388
|
+
- When `auth.json` fallback wins, the plugin reads `key` first and falls back to `access`.
|
|
358
389
|
- `/quota_status` shows auth detection, API-key diagnostics, live quota state, and endpoint errors
|
|
359
390
|
|
|
360
391
|
</details>
|
|
@@ -363,23 +394,13 @@ Example `auth.json` entry:
|
|
|
363
394
|
<details>
|
|
364
395
|
<summary><strong>Z.ai</strong></summary>
|
|
365
396
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
The plugin reads `auth.json["zai-coding-plan"]` only. There is no env-var or user/global `opencode.json` fallback for Z.ai auth.
|
|
369
|
-
|
|
370
|
-
Example `auth.json` entry:
|
|
371
|
-
|
|
372
|
-
```json
|
|
373
|
-
{
|
|
374
|
-
"zai-coding-plan": {
|
|
375
|
-
"type": "api",
|
|
376
|
-
"key": "YOUR_ZAI_API_KEY"
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
```
|
|
397
|
+
Z.ai uses trusted env vars or trusted user/global OpenCode config first, then native OpenCode auth from `auth.json["zai-coding-plan"]`.
|
|
380
398
|
|
|
399
|
+
- API key sources are `ZAI_API_KEY`, `ZAI_CODING_PLAN_API_KEY`, trusted user/global `provider.zai.options.apiKey`, `provider["zai-coding-plan"].options.apiKey`, or `provider.glm.options.apiKey`, then `auth.json`.
|
|
400
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for Z.ai secrets.
|
|
401
|
+
- Allowed env templates are limited to `{env:ZAI_API_KEY}` and `{env:ZAI_CODING_PLAN_API_KEY}`.
|
|
381
402
|
- `/quota_status` shows auth diagnostics plus live 5-hour, weekly, and MCP quota windows when the Z.ai API reports them.
|
|
382
|
-
- Malformed `zai-coding-plan` auth is surfaced as an auth error instead of being silently treated as missing.
|
|
403
|
+
- Malformed `zai-coding-plan` fallback auth is surfaced as an auth error instead of being silently treated as missing.
|
|
383
404
|
|
|
384
405
|
</details>
|
|
385
406
|
|
|
@@ -475,6 +496,31 @@ Example user/global config (`~/.config/opencode/opencode.jsonc` on Linux/macOS):
|
|
|
475
496
|
|
|
476
497
|
</details>
|
|
477
498
|
|
|
499
|
+
<a id="opencode-go-notes"></a>
|
|
500
|
+
<details>
|
|
501
|
+
<summary><strong>OpenCode Go</strong></summary>
|
|
502
|
+
|
|
503
|
+
OpenCode Go quota scrapes the OpenCode Go dashboard at `https://opencode.ai/workspace/<workspaceId>/go` using an `auth` cookie. There is no official usage API yet; the plugin parses the SolidJS SSR hydration output for `monthlyUsage` data.
|
|
504
|
+
|
|
505
|
+
- **Config sources** (checked in order):
|
|
506
|
+
1. Environment variables: `OPENCODE_GO_WORKSPACE_ID` and `OPENCODE_GO_AUTH_COOKIE`
|
|
507
|
+
2. Config file: for example `~/.config/opencode/opencode-quota/opencode-go.json` on Linux or legacy macOS installs, with `{ "workspaceId": "...", "authCookie": "..." }`
|
|
508
|
+
- Environment variables take precedence. Both `workspaceId` and `authCookie` must come from the same source.
|
|
509
|
+
- Quota returns a usage percentage and a reset countdown. There is no absolute request count.
|
|
510
|
+
- `/quota_status` shows an `opencode_go` section with config state, config source, checked paths, and live scrape results or errors.
|
|
511
|
+
- Because this is a scraper, it may break if OpenCode changes their dashboard markup. An official API ([opencode#16513](https://github.com/anomalyco/opencode/pull/16513)) is pending.
|
|
512
|
+
|
|
513
|
+
**Troubleshooting:**
|
|
514
|
+
|
|
515
|
+
| Problem | Solution |
|
|
516
|
+
| --- | --- |
|
|
517
|
+
| Config not detected | Confirm `OPENCODE_GO_WORKSPACE_ID` and `OPENCODE_GO_AUTH_COOKIE` are set, then use `/quota_status` to inspect the exact config paths checked on your machine |
|
|
518
|
+
| Incomplete config | Both `workspaceId` and `authCookie` are required; check `/quota_status` for which field is missing |
|
|
519
|
+
| Scrape returns no data | The auth cookie may have expired; get a fresh one from your browser |
|
|
520
|
+
| Dashboard format changed | The SolidJS SSR pattern may have changed; file an issue or wait for the official API |
|
|
521
|
+
|
|
522
|
+
</details>
|
|
523
|
+
|
|
478
524
|
## Configuration Reference
|
|
479
525
|
|
|
480
526
|
All plugin settings live under `experimental.quotaToast`.
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
+
declare const pluginModule: {
|
|
9
|
+
id: string;
|
|
10
|
+
server: import("@opencode-ai/plugin").Plugin;
|
|
11
|
+
};
|
|
12
|
+
export default pluginModule;
|
|
8
13
|
export { QuotaToastPlugin } from "./plugin.js";
|
|
9
14
|
export type { QuotaToastConfig, GoogleModelId, PricingSnapshotSource, CopilotEnterpriseUsageResult, CopilotOrganizationUsageResult, CopilotQuotaResult, GoogleQuotaResult, GoogleModelQuota, MiniMaxResult, MiniMaxResultEntry, } from "./lib/types.js";
|
|
10
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;
|
|
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"}
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,17 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
//
|
|
8
|
+
import { QuotaToastPlugin } from "./plugin.js";
|
|
9
|
+
// V1 plugin format: default export with id + server.
|
|
10
|
+
// This avoids the legacy getLegacyPlugins fallback path in OpenCode's plugin
|
|
11
|
+
// loader, which iterates Object.values(mod) and can conflict with other
|
|
12
|
+
// plugins that also use the legacy path.
|
|
13
|
+
const pluginModule = {
|
|
14
|
+
id: "@slkiser/opencode-quota",
|
|
15
|
+
server: QuotaToastPlugin,
|
|
16
|
+
};
|
|
17
|
+
export default pluginModule;
|
|
18
|
+
// Keep the named export for backward compatibility with consumers that import
|
|
19
|
+
// { QuotaToastPlugin } directly.
|
|
10
20
|
export { QuotaToastPlugin } from "./plugin.js";
|
|
11
|
-
// NOTE: tool exports are part of the plugin runtime contract and are not
|
|
12
|
-
// exported from the package entrypoint.
|
|
13
|
-
// NOTE: DEFAULT_CONFIG is NOT exported here because OpenCode's plugin loader
|
|
14
|
-
// would try to call it as a function. Import from "./lib/types.js" directly if needed.
|
|
15
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAO/C,qDAAqD;AACrD,6EAA6E;AAC7E,wEAAwE;AACxE,yCAAyC;AACzC,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE,yBAAyB;IAC7B,MAAM,EAAE,gBAAgB;CACA,CAAC;AAE3B,eAAe,YAAY,CAAC;AAE5B,8EAA8E;AAC9E,iCAAiC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AlibabaCodingPlanTier, AuthData } from "./types.js";
|
|
2
2
|
export declare const DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS = 5000;
|
|
3
|
+
export type AlibabaCodingPlanKeySource = "env:ALIBABA_CODING_PLAN_API_KEY" | "env:ALIBABA_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
|
|
3
4
|
export type ResolvedAlibabaCodingPlanAuth = {
|
|
4
5
|
state: "none";
|
|
5
6
|
} | {
|
|
@@ -15,18 +16,22 @@ export type AlibabaCodingPlanAuthDiagnostics = {
|
|
|
15
16
|
state: "none";
|
|
16
17
|
source: null;
|
|
17
18
|
checkedPaths: string[];
|
|
19
|
+
authPaths: string[];
|
|
18
20
|
} | {
|
|
19
21
|
state: "configured";
|
|
20
|
-
source:
|
|
22
|
+
source: AlibabaCodingPlanKeySource;
|
|
21
23
|
checkedPaths: string[];
|
|
24
|
+
authPaths: string[];
|
|
22
25
|
tier: AlibabaCodingPlanTier;
|
|
23
26
|
} | {
|
|
24
27
|
state: "invalid";
|
|
25
28
|
source: "auth.json";
|
|
26
29
|
checkedPaths: string[];
|
|
30
|
+
authPaths: string[];
|
|
27
31
|
error: string;
|
|
28
32
|
rawTier?: string;
|
|
29
33
|
};
|
|
34
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
30
35
|
export declare function resolveAlibabaCodingPlanAuth(auth: AuthData | null | undefined, fallbackTier?: AlibabaCodingPlanTier): ResolvedAlibabaCodingPlanAuth;
|
|
31
36
|
export declare function resolveAlibabaCodingPlanAuthCached(params?: {
|
|
32
37
|
maxAgeMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-auth.d.ts","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"
|
|
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;AA+CjH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACjC,YAAY,GAAE,qBAAwD,GACrE,6BAA6B,CAkC/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,8 +1,11 @@
|
|
|
1
|
-
import { getFirstAuthEntryRecord } from "./api-key-resolver.js";
|
|
1
|
+
import { extractProviderOptionsApiKey, getApiKeyCheckedPaths, getFirstAuthEntryRecord, getGlobalOpencodeConfigCandidatePaths, resolveApiKeyFromEnvAndConfig, } from "./api-key-resolver.js";
|
|
2
2
|
import { getAuthPaths, readAuthFileCached } from "./opencode-auth.js";
|
|
3
3
|
export const DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS = 5_000;
|
|
4
4
|
const ALIBABA_AUTH_KEYS = ["alibaba-coding-plan", "alibaba"];
|
|
5
|
+
const ALIBABA_PROVIDER_KEYS = ["alibaba-coding-plan", "alibaba"];
|
|
6
|
+
const ALLOWED_ALIBABA_ENV_VARS = ["ALIBABA_CODING_PLAN_API_KEY", "ALIBABA_API_KEY"];
|
|
5
7
|
const DEFAULT_ALIBABA_CODING_PLAN_TIER = "lite";
|
|
8
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
6
9
|
function getFirstString(obj, keys) {
|
|
7
10
|
for (const key of keys) {
|
|
8
11
|
const value = obj[key];
|
|
@@ -77,21 +80,60 @@ export function resolveAlibabaCodingPlanAuth(auth, fallbackTier = DEFAULT_ALIBAB
|
|
|
77
80
|
tier,
|
|
78
81
|
};
|
|
79
82
|
}
|
|
80
|
-
|
|
83
|
+
async function resolveAlibabaCodingPlanAuthWithSource(params) {
|
|
84
|
+
const fallbackTier = params?.fallbackTier ?? DEFAULT_ALIBABA_CODING_PLAN_TIER;
|
|
85
|
+
const resolvedFromEnvOrConfig = await resolveApiKeyFromEnvAndConfig({
|
|
86
|
+
envVars: [
|
|
87
|
+
{
|
|
88
|
+
name: "ALIBABA_CODING_PLAN_API_KEY",
|
|
89
|
+
source: "env:ALIBABA_CODING_PLAN_API_KEY",
|
|
90
|
+
},
|
|
91
|
+
{ name: "ALIBABA_API_KEY", source: "env:ALIBABA_API_KEY" },
|
|
92
|
+
],
|
|
93
|
+
extractFromConfig: (config) => extractProviderOptionsApiKey(config, {
|
|
94
|
+
providerKeys: ALIBABA_PROVIDER_KEYS,
|
|
95
|
+
allowedEnvVars: ALLOWED_ALIBABA_ENV_VARS,
|
|
96
|
+
}),
|
|
97
|
+
configJsonSource: "opencode.json",
|
|
98
|
+
configJsoncSource: "opencode.jsonc",
|
|
99
|
+
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
100
|
+
});
|
|
101
|
+
if (resolvedFromEnvOrConfig) {
|
|
102
|
+
return {
|
|
103
|
+
auth: {
|
|
104
|
+
state: "configured",
|
|
105
|
+
apiKey: resolvedFromEnvOrConfig.key,
|
|
106
|
+
tier: fallbackTier,
|
|
107
|
+
},
|
|
108
|
+
source: resolvedFromEnvOrConfig.source,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
81
111
|
const maxAgeMs = Math.max(0, params?.maxAgeMs ?? DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS);
|
|
82
|
-
const
|
|
112
|
+
const authData = await readAuthFileCached({
|
|
83
113
|
maxAgeMs,
|
|
84
114
|
});
|
|
85
|
-
|
|
115
|
+
const auth = resolveAlibabaCodingPlanAuth(authData, fallbackTier);
|
|
116
|
+
return {
|
|
117
|
+
auth,
|
|
118
|
+
source: auth.state === "none" ? null : "auth.json",
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export async function resolveAlibabaCodingPlanAuthCached(params) {
|
|
122
|
+
return (await resolveAlibabaCodingPlanAuthWithSource(params)).auth;
|
|
86
123
|
}
|
|
87
124
|
export async function getAlibabaCodingPlanAuthDiagnostics(params) {
|
|
88
|
-
const auth = await
|
|
89
|
-
const checkedPaths =
|
|
125
|
+
const { auth, source } = await resolveAlibabaCodingPlanAuthWithSource(params);
|
|
126
|
+
const checkedPaths = getApiKeyCheckedPaths({
|
|
127
|
+
envVarNames: [...ALLOWED_ALIBABA_ENV_VARS],
|
|
128
|
+
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
129
|
+
});
|
|
130
|
+
const authPaths = getAuthPaths();
|
|
90
131
|
if (auth.state === "none") {
|
|
91
132
|
return {
|
|
92
133
|
state: "none",
|
|
93
134
|
source: null,
|
|
94
135
|
checkedPaths,
|
|
136
|
+
authPaths,
|
|
95
137
|
};
|
|
96
138
|
}
|
|
97
139
|
if (auth.state === "invalid") {
|
|
@@ -99,14 +141,16 @@ export async function getAlibabaCodingPlanAuthDiagnostics(params) {
|
|
|
99
141
|
state: "invalid",
|
|
100
142
|
source: "auth.json",
|
|
101
143
|
checkedPaths,
|
|
144
|
+
authPaths,
|
|
102
145
|
error: auth.error,
|
|
103
146
|
rawTier: auth.rawTier,
|
|
104
147
|
};
|
|
105
148
|
}
|
|
106
149
|
return {
|
|
107
150
|
state: "configured",
|
|
108
|
-
source: "auth.json",
|
|
151
|
+
source: source ?? "auth.json",
|
|
109
152
|
checkedPaths,
|
|
153
|
+
authPaths,
|
|
110
154
|
tier: auth.tier,
|
|
111
155
|
};
|
|
112
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alibaba-auth.js","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"alibaba-auth.js","sourceRoot":"","sources":["../../src/lib/alibaba-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,8 +50,8 @@ export declare function extractProviderOptionsApiKey(config: unknown, params: {
|
|
|
50
50
|
allowedEnvVars?: readonly string[];
|
|
51
51
|
}): string | null;
|
|
52
52
|
export declare function extractAuthApiKeyEntry(auth: unknown, authKeys: readonly string[]): string | null;
|
|
53
|
-
/** Configuration for resolving an API key from
|
|
54
|
-
export interface
|
|
53
|
+
/** Configuration for resolving an API key from trusted env/config sources */
|
|
54
|
+
export interface ResolveEnvAndConfigApiKeyConfig<Source extends string> {
|
|
55
55
|
/** Environment variables to check (in order) */
|
|
56
56
|
envVars: EnvVarDef<Source>[];
|
|
57
57
|
/** Extract API key from parsed config object. Returns null if not found. */
|
|
@@ -60,19 +60,45 @@ export interface ResolveApiKeyConfig<Source extends string> {
|
|
|
60
60
|
configJsonSource: Source;
|
|
61
61
|
/** Source label for opencode.jsonc */
|
|
62
62
|
configJsoncSource: Source;
|
|
63
|
+
/**
|
|
64
|
+
* Candidate config file paths to trust for provider-secret lookup.
|
|
65
|
+
*
|
|
66
|
+
* Defaults to trusted user/global OpenCode config paths only.
|
|
67
|
+
*/
|
|
68
|
+
getConfigCandidates?: () => ConfigCandidate[];
|
|
69
|
+
}
|
|
70
|
+
/** Configuration for resolving an API key from multiple sources */
|
|
71
|
+
export interface ResolveApiKeyConfig<Source extends string> extends ResolveEnvAndConfigApiKeyConfig<Source> {
|
|
63
72
|
/** Extract API key from auth.json data. Returns null if not found. */
|
|
64
73
|
extractFromAuth: (auth: unknown) => string | null;
|
|
65
74
|
/** Source label for auth.json */
|
|
66
75
|
authSource: Source;
|
|
67
|
-
|
|
76
|
+
}
|
|
77
|
+
export interface ApiKeyCheckedPathsConfig {
|
|
78
|
+
/** Environment variable names to check */
|
|
79
|
+
envVarNames: string[];
|
|
80
|
+
/**
|
|
81
|
+
* Candidate config file paths to report for provider-secret lookup.
|
|
82
|
+
*
|
|
83
|
+
* Defaults to trusted user/global OpenCode config paths only.
|
|
84
|
+
*/
|
|
68
85
|
getConfigCandidates?: () => ConfigCandidate[];
|
|
69
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Resolve an API key from trusted env vars and config files.
|
|
89
|
+
*
|
|
90
|
+
* Priority (first wins):
|
|
91
|
+
* 1. Environment variables (in order specified)
|
|
92
|
+
* 2. Trusted user/global opencode.json/opencode.jsonc candidates
|
|
93
|
+
*/
|
|
94
|
+
export declare function resolveApiKeyFromEnvAndConfig<Source extends string>(config: ResolveEnvAndConfigApiKeyConfig<Source>): Promise<ApiKeyResult<Source> | null>;
|
|
95
|
+
export declare function getApiKeyCheckedPaths(config: ApiKeyCheckedPathsConfig): string[];
|
|
70
96
|
/**
|
|
71
97
|
* Resolve an API key from multiple sources with consistent priority.
|
|
72
98
|
*
|
|
73
99
|
* Priority (first wins):
|
|
74
100
|
* 1. Environment variables (in order specified)
|
|
75
|
-
* 2. opencode.json/opencode.jsonc
|
|
101
|
+
* 2. Trusted user/global opencode.json/opencode.jsonc
|
|
76
102
|
* 3. auth.json
|
|
77
103
|
*
|
|
78
104
|
* @returns API key and source, or null if not found
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,eAAe,EAAE,CAenE;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,IAAI,eAAe,EAAE,CAUzE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,CASrE;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY,CAAC,MAAM,SAAS,MAAM;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,WAAW,SAAS,CAAC,MAAM,SAAS,MAAM;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,OAAO,CAWT;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEhC;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;IACN,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,GACA,MAAM,GAAG,IAAI,CAiBf;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,IAAI,CAUf;AAED,
|
|
1
|
+
{"version":3,"file":"api-key-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,25 +108,20 @@ export function extractAuthApiKeyEntry(auth, authKeys) {
|
|
|
108
108
|
return null;
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
* Resolve an API key from
|
|
111
|
+
* Resolve an API key from trusted env vars and config files.
|
|
112
112
|
*
|
|
113
113
|
* Priority (first wins):
|
|
114
114
|
* 1. Environment variables (in order specified)
|
|
115
|
-
* 2. opencode.json/opencode.jsonc
|
|
116
|
-
* 3. auth.json
|
|
117
|
-
*
|
|
118
|
-
* @returns API key and source, or null if not found
|
|
115
|
+
* 2. Trusted user/global opencode.json/opencode.jsonc candidates
|
|
119
116
|
*/
|
|
120
|
-
export async function
|
|
121
|
-
// 1. Check environment variables (highest priority)
|
|
117
|
+
export async function resolveApiKeyFromEnvAndConfig(config) {
|
|
122
118
|
for (const envVar of config.envVars) {
|
|
123
119
|
const value = process.env[envVar.name]?.trim();
|
|
124
120
|
if (value && value.length > 0) {
|
|
125
121
|
return { key: value, source: envVar.source };
|
|
126
122
|
}
|
|
127
123
|
}
|
|
128
|
-
|
|
129
|
-
const candidates = config.getConfigCandidates?.() ?? getOpencodeConfigCandidatePaths();
|
|
124
|
+
const candidates = config.getConfigCandidates?.() ?? getGlobalOpencodeConfigCandidatePaths();
|
|
130
125
|
for (const candidate of candidates) {
|
|
131
126
|
const result = await readOpencodeConfig(candidate.path, candidate.isJsonc);
|
|
132
127
|
if (!result)
|
|
@@ -139,6 +134,38 @@ export async function resolveApiKey(config, readAuth) {
|
|
|
139
134
|
};
|
|
140
135
|
}
|
|
141
136
|
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
export function getApiKeyCheckedPaths(config) {
|
|
140
|
+
const checkedPaths = [];
|
|
141
|
+
for (const envVarName of config.envVarNames) {
|
|
142
|
+
if (process.env[envVarName] !== undefined) {
|
|
143
|
+
checkedPaths.push(`env:${envVarName}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const candidates = config.getConfigCandidates?.() ?? getGlobalOpencodeConfigCandidatePaths();
|
|
147
|
+
for (const candidate of candidates) {
|
|
148
|
+
if (existsSync(candidate.path)) {
|
|
149
|
+
checkedPaths.push(candidate.path);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return checkedPaths;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Resolve an API key from multiple sources with consistent priority.
|
|
156
|
+
*
|
|
157
|
+
* Priority (first wins):
|
|
158
|
+
* 1. Environment variables (in order specified)
|
|
159
|
+
* 2. Trusted user/global opencode.json/opencode.jsonc
|
|
160
|
+
* 3. auth.json
|
|
161
|
+
*
|
|
162
|
+
* @returns API key and source, or null if not found
|
|
163
|
+
*/
|
|
164
|
+
export async function resolveApiKey(config, readAuth) {
|
|
165
|
+
const resolvedFromEnvOrConfig = await resolveApiKeyFromEnvAndConfig(config);
|
|
166
|
+
if (resolvedFromEnvOrConfig) {
|
|
167
|
+
return resolvedFromEnvOrConfig;
|
|
168
|
+
}
|
|
142
169
|
// 3. Fallback to auth.json
|
|
143
170
|
const auth = await readAuth();
|
|
144
171
|
const key = config.extractFromAuth(auth);
|
|
@@ -154,20 +181,7 @@ export async function resolveApiKey(config, readAuth) {
|
|
|
154
181
|
* and whether a key was found.
|
|
155
182
|
*/
|
|
156
183
|
export async function getApiKeyDiagnostics(config) {
|
|
157
|
-
const checkedPaths =
|
|
158
|
-
// Track env vars checked (only if they exist, even if empty)
|
|
159
|
-
for (const envVarName of config.envVarNames) {
|
|
160
|
-
if (process.env[envVarName] !== undefined) {
|
|
161
|
-
checkedPaths.push(`env:${envVarName}`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Track config files checked (only if they exist)
|
|
165
|
-
const candidates = config.getConfigCandidates?.() ?? getOpencodeConfigCandidatePaths();
|
|
166
|
-
for (const candidate of candidates) {
|
|
167
|
-
if (existsSync(candidate.path)) {
|
|
168
|
-
checkedPaths.push(candidate.path);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
184
|
+
const checkedPaths = getApiKeyCheckedPaths(config);
|
|
171
185
|
const result = await config.resolve();
|
|
172
186
|
return {
|
|
173
187
|
configured: result !== null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-resolver.js","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ9C;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAEzD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QACpD,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;QACpD,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAEzD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAAgB;IAEhB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAcD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,QAA2B;IAE3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAa,EACb,QAA2B;IAE3B,OAAO,QAAQ,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAAe,EACf,MAGC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,OAAO,CAAC;QAE3C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,QAA2B;IAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,CAAC;QACxB,IAAI,MAAM,EAAE,IAAI,KAAK,KAAK,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"api-key-resolver.js","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export interface CursorOpenCodeIntegration {
|
|
|
11
11
|
matchedPaths: string[];
|
|
12
12
|
checkedPaths: string[];
|
|
13
13
|
}
|
|
14
|
+
export declare const CURSOR_CANONICAL_PLUGIN_PACKAGE = "@playwo/opencode-cursor-oauth";
|
|
14
15
|
export declare function getCursorAuthCandidatePaths(): string[];
|
|
15
16
|
export declare function inspectCursorAuthPresence(): Promise<CursorAuthPresence>;
|
|
16
17
|
export declare function inspectCursorOpenCodeIntegration(): Promise<CursorOpenCodeIntegration>;
|