@slkiser/opencode-quota 2.15.0 → 2.16.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 +84 -44
- 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/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 +58 -6
- 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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- Automatic quota toasts after assistant responses
|
|
6
6
|
- Manual `/quota`, `/pricing_refresh`, and `/tokens_*` commands for deeper local reporting with zero context window pollution
|
|
7
7
|
|
|
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
|
|
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 Coding Plan, NanoGPT, and OpenCode Go.
|
|
9
9
|
|
|
10
10
|
**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
11
|
|
|
@@ -79,17 +79,18 @@ That is enough for most installs. Providers are auto-detected from your existing
|
|
|
79
79
|
| Provider | Auto setup | Authentication | Quota |
|
|
80
80
|
| --- | --- | --- | --- |
|
|
81
81
|
| **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
|
|
82
|
+
| **GitHub Copilot** | Usually | OpenCode auth or PAT | Remote API |
|
|
83
|
+
| **OpenAI** | Yes | OpenCode auth | Remote API |
|
|
84
|
+
| **Cursor** | Needs [quick setup](#cursor-quick-setup) | Companion auth | Local runtime accounting |
|
|
85
|
+
| **Qwen Code** | Needs [quick setup](#qwen-code-quick-setup) | Companion auth | Local estimation |
|
|
86
|
+
| **Alibaba Coding Plan** | Yes | OpenCode auth/global config/env | Local estimation |
|
|
87
|
+
| **Firmware AI** | Usually | OpenCode auth/global config/env | Remote API |
|
|
88
|
+
| **Chutes AI** | Usually | OpenCode auth/global config/env | Remote API |
|
|
89
|
+
| **Google Antigravity** | Needs [quick setup](#google-antigravity-quick-setup) | Companion auth | Remote API |
|
|
90
|
+
| **Z.ai** | Yes | OpenCode auth/global config/env | Remote API |
|
|
91
|
+
| **NanoGPT** | Usually | OpenCode auth/global config/env | Remote API |
|
|
92
|
+
| **MiniMax Coding Plan** | Yes | OpenCode auth/global config/env | Remote API |
|
|
93
|
+
| **OpenCode Go** | Needs [quick setup](#opencode-go-quick-setup) | Env/config auth | Dashboard scraping |
|
|
93
94
|
|
|
94
95
|
<a id="anthropic-quick-setup"></a>
|
|
95
96
|
<details>
|
|
@@ -178,6 +179,37 @@ For behavior details and troubleshooting, see [Qwen Code notes](#qwen-code-notes
|
|
|
178
179
|
|
|
179
180
|
</details>
|
|
180
181
|
|
|
182
|
+
<a id="opencode-go-quick-setup"></a>
|
|
183
|
+
<details>
|
|
184
|
+
<summary><strong>Quick setup: OpenCode Go</strong></summary>
|
|
185
|
+
|
|
186
|
+
OpenCode Go quota scrapes the OpenCode Go dashboard. It requires a workspace ID and an auth cookie.
|
|
187
|
+
|
|
188
|
+
**Option A — Environment variables:**
|
|
189
|
+
|
|
190
|
+
```sh
|
|
191
|
+
export OPENCODE_GO_WORKSPACE_ID="your-workspace-id"
|
|
192
|
+
export OPENCODE_GO_AUTH_COOKIE="your-auth-cookie"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Option B — Config file** (for example, `~/.config/opencode/opencode-quota/opencode-go.json` on Linux or legacy macOS installs):
|
|
196
|
+
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"workspaceId": "your-workspace-id",
|
|
200
|
+
"authCookie": "your-auth-cookie"
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
To find these values:
|
|
205
|
+
|
|
206
|
+
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`.
|
|
207
|
+
2. **authCookie** — Open your browser DevTools on `opencode.ai`, go to Application → Cookies, and copy the value of the `auth` cookie.
|
|
208
|
+
|
|
209
|
+
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).
|
|
210
|
+
|
|
211
|
+
</details>
|
|
212
|
+
|
|
181
213
|
## Commands
|
|
182
214
|
|
|
183
215
|
| Command | What it shows |
|
|
@@ -310,12 +342,14 @@ See [Qwen Code quick setup](#qwen-code-quick-setup) for auth. Usage is local-onl
|
|
|
310
342
|
<details>
|
|
311
343
|
<summary><strong>Alibaba Coding Plan</strong></summary>
|
|
312
344
|
|
|
313
|
-
|
|
345
|
+
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
346
|
|
|
315
347
|
- `lite`: `1200 / 5h`, `9000 / week`, `18000 / month`
|
|
316
348
|
- `pro`: `6000 / 5h`, `45000 / week`, `90000 / month`
|
|
317
|
-
-
|
|
318
|
-
-
|
|
349
|
+
- 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`.
|
|
350
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for Alibaba secrets.
|
|
351
|
+
- Allowed env templates are limited to `{env:ALIBABA_CODING_PLAN_API_KEY}` and `{env:ALIBABA_API_KEY}`.
|
|
352
|
+
- If auth fallback wins and omits `tier`, or if env/config wins, the plugin uses `experimental.quotaToast.alibabaCodingPlanTier`, which defaults to `lite`.
|
|
319
353
|
- Counters increment on successful question-tool completions while the current model is `alibaba/*` or `alibaba-cn/*`.
|
|
320
354
|
- State file: `.../opencode/opencode-quota/alibaba-coding-plan-local-quota.json`.
|
|
321
355
|
- `/quota_status` shows auth detection, resolved tier, state-file path, and current 5h/weekly/monthly usage.
|
|
@@ -339,22 +373,13 @@ Example fallback tier:
|
|
|
339
373
|
<details>
|
|
340
374
|
<summary><strong>MiniMax Coding Plan</strong></summary>
|
|
341
375
|
|
|
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
|
-
```
|
|
376
|
+
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
377
|
|
|
357
378
|
- `MiniMax-M*` models — rolling 5-hour interval + weekly
|
|
379
|
+
- 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`.
|
|
380
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for MiniMax secrets.
|
|
381
|
+
- Allowed env templates are limited to `{env:MINIMAX_CODING_PLAN_API_KEY}` and `{env:MINIMAX_API_KEY}`.
|
|
382
|
+
- When `auth.json` fallback wins, the plugin reads `key` first and falls back to `access`.
|
|
358
383
|
- `/quota_status` shows auth detection, API-key diagnostics, live quota state, and endpoint errors
|
|
359
384
|
|
|
360
385
|
</details>
|
|
@@ -363,23 +388,13 @@ Example `auth.json` entry:
|
|
|
363
388
|
<details>
|
|
364
389
|
<summary><strong>Z.ai</strong></summary>
|
|
365
390
|
|
|
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
|
-
```
|
|
391
|
+
Z.ai uses trusted env vars or trusted user/global OpenCode config first, then native OpenCode auth from `auth.json["zai-coding-plan"]`.
|
|
380
392
|
|
|
393
|
+
- 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`.
|
|
394
|
+
- Repo-local `opencode.json` / `opencode.jsonc` is ignored for Z.ai secrets.
|
|
395
|
+
- Allowed env templates are limited to `{env:ZAI_API_KEY}` and `{env:ZAI_CODING_PLAN_API_KEY}`.
|
|
381
396
|
- `/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.
|
|
397
|
+
- Malformed `zai-coding-plan` fallback auth is surfaced as an auth error instead of being silently treated as missing.
|
|
383
398
|
|
|
384
399
|
</details>
|
|
385
400
|
|
|
@@ -475,6 +490,31 @@ Example user/global config (`~/.config/opencode/opencode.jsonc` on Linux/macOS):
|
|
|
475
490
|
|
|
476
491
|
</details>
|
|
477
492
|
|
|
493
|
+
<a id="opencode-go-notes"></a>
|
|
494
|
+
<details>
|
|
495
|
+
<summary><strong>OpenCode Go</strong></summary>
|
|
496
|
+
|
|
497
|
+
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.
|
|
498
|
+
|
|
499
|
+
- **Config sources** (checked in order):
|
|
500
|
+
1. Environment variables: `OPENCODE_GO_WORKSPACE_ID` and `OPENCODE_GO_AUTH_COOKIE`
|
|
501
|
+
2. Config file: for example `~/.config/opencode/opencode-quota/opencode-go.json` on Linux or legacy macOS installs, with `{ "workspaceId": "...", "authCookie": "..." }`
|
|
502
|
+
- Environment variables take precedence. Both `workspaceId` and `authCookie` must come from the same source.
|
|
503
|
+
- Quota returns a usage percentage and a reset countdown. There is no absolute request count.
|
|
504
|
+
- `/quota_status` shows an `opencode_go` section with config state, config source, checked paths, and live scrape results or errors.
|
|
505
|
+
- 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.
|
|
506
|
+
|
|
507
|
+
**Troubleshooting:**
|
|
508
|
+
|
|
509
|
+
| Problem | Solution |
|
|
510
|
+
| --- | --- |
|
|
511
|
+
| 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 |
|
|
512
|
+
| Incomplete config | Both `workspaceId` and `authCookie` are required; check `/quota_status` for which field is missing |
|
|
513
|
+
| Scrape returns no data | The auth cookie may have expired; get a fresh one from your browser |
|
|
514
|
+
| Dashboard format changed | The SolidJS SSR pattern may have changed; file an issue or wait for the official API |
|
|
515
|
+
|
|
516
|
+
</details>
|
|
517
|
+
|
|
478
518
|
## Configuration Reference
|
|
479
519
|
|
|
480
520
|
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":"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
|
|
1
|
+
{"version":3,"file":"api-key-resolver.js","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MiniMax auth resolver
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Resolves MiniMax credentials from trusted env vars, trusted user/global
|
|
5
|
+
* OpenCode config, and auth.json fallback into the standardized shape used
|
|
6
|
+
* by the MiniMax Coding Plan provider.
|
|
6
7
|
*/
|
|
7
8
|
import type { AuthData } from "./types.js";
|
|
8
9
|
export declare const DEFAULT_MINIMAX_AUTH_CACHE_MAX_AGE_MS = 5000;
|
|
10
|
+
export type MiniMaxKeySource = "env:MINIMAX_CODING_PLAN_API_KEY" | "env:MINIMAX_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
|
|
9
11
|
export type ResolvedMiniMaxAuth = {
|
|
10
12
|
state: "none";
|
|
11
13
|
} | {
|
|
@@ -19,16 +21,20 @@ export type MiniMaxAuthDiagnostics = {
|
|
|
19
21
|
state: "none";
|
|
20
22
|
source: null;
|
|
21
23
|
checkedPaths: string[];
|
|
24
|
+
authPaths: string[];
|
|
22
25
|
} | {
|
|
23
26
|
state: "configured";
|
|
24
|
-
source:
|
|
27
|
+
source: MiniMaxKeySource;
|
|
25
28
|
checkedPaths: string[];
|
|
29
|
+
authPaths: string[];
|
|
26
30
|
} | {
|
|
27
31
|
state: "invalid";
|
|
28
32
|
source: "auth.json";
|
|
29
33
|
checkedPaths: string[];
|
|
34
|
+
authPaths: string[];
|
|
30
35
|
error: string;
|
|
31
36
|
};
|
|
37
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
32
38
|
/**
|
|
33
39
|
* Resolve MiniMax auth from the full auth data.
|
|
34
40
|
*
|