@slkiser/opencode-quota 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -49
- package/dist/lib/entries.d.ts +3 -1
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +1 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/jsonc.d.ts +8 -6
- package/dist/lib/jsonc.d.ts.map +1 -1
- package/dist/lib/jsonc.js +9 -52
- package/dist/lib/jsonc.js.map +1 -1
- package/dist/lib/kilo-config.d.ts +15 -0
- package/dist/lib/kilo-config.d.ts.map +1 -0
- package/dist/lib/kilo-config.js +26 -0
- package/dist/lib/kilo-config.js.map +1 -0
- package/dist/lib/kilo.d.ts +19 -0
- package/dist/lib/kilo.d.ts.map +1 -0
- package/dist/lib/kilo.js +75 -0
- package/dist/lib/kilo.js.map +1 -0
- package/dist/lib/ollama-cloud-config.d.ts +12 -34
- package/dist/lib/ollama-cloud-config.d.ts.map +1 -1
- package/dist/lib/ollama-cloud-config.js +24 -146
- package/dist/lib/ollama-cloud-config.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +6 -10
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +142 -116
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +16 -3
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +16 -3
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +11 -9
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-render-data.js +1 -1
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +2 -1
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-stats-format.d.ts.map +1 -1
- package/dist/lib/quota-stats-format.js +5 -3
- package/dist/lib/quota-stats-format.js.map +1 -1
- package/dist/lib/quota-status.js +2 -2
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/toast-format-grouped.js +3 -3
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-compact-format.d.ts.map +1 -1
- package/dist/lib/tui-compact-format.js +16 -7
- package/dist/lib/tui-compact-format.js.map +1 -1
- package/dist/lib/types.d.ts +13 -6
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/providers/copilot.js +1 -1
- package/dist/providers/google-account-format.d.ts +3 -2
- package/dist/providers/google-account-format.d.ts.map +1 -1
- package/dist/providers/google-account-format.js +41 -10
- package/dist/providers/google-account-format.js.map +1 -1
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +11 -6
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/google-antigravity.d.ts.map +1 -1
- package/dist/providers/google-antigravity.js +17 -5
- package/dist/providers/google-antigravity.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/dist/providers/google-gemini-cli.js +12 -4
- package/dist/providers/google-gemini-cli.js.map +1 -1
- package/dist/providers/kilo.d.ts +6 -0
- package/dist/providers/kilo.d.ts.map +1 -0
- package/dist/providers/kilo.js +52 -0
- package/dist/providers/kilo.js.map +1 -0
- package/dist/providers/mimo.js +1 -1
- package/dist/providers/mimo.js.map +1 -1
- package/dist/providers/minimax-coding-plan.js +1 -1
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/ollama-cloud.d.ts +2 -2
- package/dist/providers/ollama-cloud.d.ts.map +1 -1
- package/dist/providers/ollama-cloud.js +68 -47
- package/dist/providers/ollama-cloud.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/package.json +3 -9
package/README.md
CHANGED
|
@@ -131,52 +131,51 @@ Use the CLI for scripts, CI, or a quick terminal check outside OpenCode.
|
|
|
131
131
|
|
|
132
132
|
## Providers
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
Most providers work automatically. `Automatic` means OpenCode Quota reuses the credential saved through OpenCode's `/connect`. If a provider has a “Needs setup” link, open that setup note only if you use that provider. Providers can appear in both audience sections when the vendor supports both.
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
### American providers
|
|
136
|
+
### Pre-configured American providers
|
|
139
137
|
|
|
140
138
|
<details open>
|
|
141
139
|
<summary><strong>Personal</strong></summary>
|
|
142
140
|
|
|
143
|
-
| Provider | Auth/setup
|
|
144
|
-
| ------------------ |
|
|
145
|
-
| Anthropic (Claude) | [Needs setup](docs/readme/providers.md#anthropic-claude)
|
|
146
|
-
| Chutes AI |
|
|
147
|
-
| Cursor | [Needs setup](docs/readme/providers.md#cursor)
|
|
148
|
-
| GitHub Copilot | Automatic
|
|
149
|
-
| Google AGY | [Needs setup](docs/readme/providers.md#google-agy-quick-setup)
|
|
150
|
-
| Google Antigravity | [Needs setup](docs/readme/providers.md#google-antigravity)
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
| OpenCode
|
|
156
|
-
|
|
|
157
|
-
|
|
|
158
|
-
|
|
|
141
|
+
| Provider | Auth/setup | Data from | Reports |
|
|
142
|
+
| ------------------ | -------------------------------------------------------------- | ------------------ | ------------------ |
|
|
143
|
+
| Anthropic (Claude) | [Needs setup](docs/readme/providers.md#anthropic-claude) | Local CLI/OAuth | Quota |
|
|
144
|
+
| Chutes AI | Automatic | Remote API | Quota |
|
|
145
|
+
| Cursor | [Needs setup](docs/readme/providers.md#cursor) | Local estimate | Budget and spend |
|
|
146
|
+
| GitHub Copilot | Automatic | Remote API | Usage and budget |
|
|
147
|
+
| Google AGY | [Needs setup](docs/readme/providers.md#google-agy-quick-setup) | Remote API | Quota |
|
|
148
|
+
| Google Antigravity | [Needs setup](docs/readme/providers.md#google-antigravity) | Remote API | Quota |
|
|
149
|
+
| Kilo Gateway | Automatic | Remote API | Balance |
|
|
150
|
+
| NanoGPT | Automatic | Remote API | Quota and balance |
|
|
151
|
+
| Ollama Cloud | Automatic | Remote API | Quota and usage |
|
|
152
|
+
| OpenAI | Automatic | Remote API | Quota |
|
|
153
|
+
| OpenCode Go | [Needs setup](docs/readme/providers.md#opencode-go) | Dashboard scraping | Quota |
|
|
154
|
+
| OpenCode Zen | [Needs setup](docs/readme/providers.md#opencode-zen) | Dashboard scraping | Budget and balance |
|
|
155
|
+
| OpenRouter | Automatic | Remote API | Budget and spend |
|
|
156
|
+
| Synthetic | Automatic | Remote API | Quota |
|
|
157
|
+
| xAI SuperGrok | Automatic | Remote API | Quota |
|
|
159
158
|
|
|
160
159
|
</details>
|
|
161
160
|
|
|
162
161
|
<details>
|
|
163
162
|
<summary><strong>Business / Enterprise</strong></summary>
|
|
164
163
|
|
|
165
|
-
| Provider | Auth/setup
|
|
166
|
-
| ----------------------- |
|
|
167
|
-
| Anthropic (Claude) | [Needs setup](docs/readme/providers.md#anthropic-claude)
|
|
168
|
-
| Chutes AI |
|
|
169
|
-
| Cursor | [Needs setup](docs/readme/providers.md#cursor)
|
|
170
|
-
| Gemini CLI (deprecated) | [Existing setups only](docs/readme/providers.md#gemini-cli)
|
|
171
|
-
| GitHub Copilot |
|
|
172
|
-
| Google AGY | [Needs setup](docs/readme/providers.md#google-agy-quick-setup)
|
|
173
|
-
| Google Antigravity | [Needs setup](docs/readme/providers.md#google-antigravity)
|
|
174
|
-
| NanoGPT |
|
|
175
|
-
| OpenAI | Automatic
|
|
176
|
-
| OpenCode Zen | [Needs setup](docs/readme/providers.md#opencode-zen)
|
|
177
|
-
| OpenRouter | Automatic
|
|
178
|
-
| Synthetic | Automatic
|
|
179
|
-
| xAI SuperGrok |
|
|
164
|
+
| Provider | Auth/setup | Data from | Reports |
|
|
165
|
+
| ----------------------- | -------------------------------------------------------------- | ------------------ | ------------------ |
|
|
166
|
+
| Anthropic (Claude) | [Needs setup](docs/readme/providers.md#anthropic-claude) | Local CLI/OAuth | Quota |
|
|
167
|
+
| Chutes AI | Automatic | Remote API | Quota |
|
|
168
|
+
| Cursor | [Needs setup](docs/readme/providers.md#cursor) | Local estimate | Budget and spend |
|
|
169
|
+
| Gemini CLI (deprecated) | [Existing setups only](docs/readme/providers.md#gemini-cli) | Remote API | Quota |
|
|
170
|
+
| GitHub Copilot | [Needs setup](docs/readme/providers.md#github-copilot) | Remote API | Usage and budget |
|
|
171
|
+
| Google AGY | [Needs setup](docs/readme/providers.md#google-agy-quick-setup) | Remote API | Quota |
|
|
172
|
+
| Google Antigravity | [Needs setup](docs/readme/providers.md#google-antigravity) | Remote API | Quota |
|
|
173
|
+
| NanoGPT | Automatic | Remote API | Quota and balance |
|
|
174
|
+
| OpenAI | Automatic | Remote API | Quota |
|
|
175
|
+
| OpenCode Zen | [Needs setup](docs/readme/providers.md#opencode-zen) | Dashboard scraping | Budget and balance |
|
|
176
|
+
| OpenRouter | Automatic | Remote API | Budget and spend |
|
|
177
|
+
| Synthetic | Automatic | Remote API | Quota |
|
|
178
|
+
| xAI SuperGrok | Automatic | Remote API | Quota |
|
|
180
179
|
|
|
181
180
|
Business placement describes vendor plan availability. Except for configured Copilot organization/enterprise billing, current integrations generally report one signed-in account, seat, API key, or workspace.
|
|
182
181
|
|
|
@@ -184,34 +183,34 @@ Gemini CLI quota support is deprecated for new installs. Existing v4 configurati
|
|
|
184
183
|
|
|
185
184
|
</details>
|
|
186
185
|
|
|
187
|
-
### Chinese providers
|
|
186
|
+
### Pre-configured Chinese providers
|
|
188
187
|
|
|
189
188
|
<details open>
|
|
190
189
|
<summary><strong>Personal</strong></summary>
|
|
191
190
|
|
|
192
191
|
| Provider | Auth/setup | Data from | Reports |
|
|
193
192
|
| ------------------------ | --------------------------------------------------- | -------------- | ------------------ |
|
|
194
|
-
| Alibaba Coding Plan |
|
|
195
|
-
| DeepSeek |
|
|
196
|
-
| Kimi Code |
|
|
197
|
-
| MiniMax Coding Plan |
|
|
198
|
-
| MiniMax Coding Plan (CN) |
|
|
193
|
+
| Alibaba Coding Plan | Automatic | Local estimate | Quota |
|
|
194
|
+
| DeepSeek | Automatic | Remote API | Balance and status |
|
|
195
|
+
| Kimi Code | Automatic | Remote API | Quota |
|
|
196
|
+
| MiniMax Coding Plan | Automatic | Remote API | Quota |
|
|
197
|
+
| MiniMax Coding Plan (CN) | Automatic | Remote API | Quota |
|
|
199
198
|
| Qwen Code | [Needs setup](docs/readme/providers.md#qwen-code) | Local estimate | Quota |
|
|
200
199
|
| Xiaomi MiMo | [Needs setup](docs/readme/providers.md#xiaomi-mimo) | Dashboard API | Quota and balance |
|
|
201
|
-
| Z.ai Coding Plan |
|
|
202
|
-
| Zhipu Coding Plan |
|
|
200
|
+
| Z.ai Coding Plan | Automatic | Remote API | Quota |
|
|
201
|
+
| Zhipu Coding Plan | Automatic | Remote API | Quota |
|
|
203
202
|
|
|
204
203
|
</details>
|
|
205
204
|
|
|
206
205
|
<details>
|
|
207
206
|
<summary><strong>Business / Team</strong></summary>
|
|
208
207
|
|
|
209
|
-
| Provider | Auth/setup
|
|
210
|
-
| ------------------------ |
|
|
211
|
-
| Kimi Code |
|
|
212
|
-
| MiniMax Coding Plan |
|
|
213
|
-
| MiniMax Coding Plan (CN) |
|
|
214
|
-
| Zhipu Coding Plan |
|
|
208
|
+
| Provider | Auth/setup | Data from | Reports |
|
|
209
|
+
| ------------------------ | ---------- | ---------- | ------- |
|
|
210
|
+
| Kimi Code | Automatic | Remote API | Quota |
|
|
211
|
+
| MiniMax Coding Plan | Automatic | Remote API | Quota |
|
|
212
|
+
| MiniMax Coding Plan (CN) | Automatic | Remote API | Quota |
|
|
213
|
+
| Zhipu Coding Plan | Automatic | Remote API | Quota |
|
|
215
214
|
|
|
216
215
|
These vendors offer team or business plans, but the current integrations report only the configured member API key rather than organization-wide usage.
|
|
217
216
|
|
package/dist/lib/entries.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export interface GroupedQuotaEntryMeta {
|
|
|
33
33
|
group?: string;
|
|
34
34
|
/** Optional row label inside the group, e.g. "5h:" or "Usage:". */
|
|
35
35
|
label?: string;
|
|
36
|
+
/** Optional semantic label for verbose command output when it differs from resultType. */
|
|
37
|
+
metricLabel?: string;
|
|
36
38
|
/** Optional compact right-hand summary, e.g. "42/300". */
|
|
37
39
|
right?: string;
|
|
38
40
|
/** Optional stable row priority within a group; lower values render first. */
|
|
@@ -44,7 +46,7 @@ export type QuotaToastEntry = (GroupedQuotaEntryMeta & {
|
|
|
44
46
|
* The optional discriminant preserves the existing percent-entry shape.
|
|
45
47
|
*/
|
|
46
48
|
kind?: "percent";
|
|
47
|
-
/** Display label (already human-friendly), e.g. "Copilot" or "Claude (abc
|
|
49
|
+
/** Display label (already human-friendly), e.g. "Copilot" or "Claude (abc…)". */
|
|
48
50
|
name: string;
|
|
49
51
|
/** Remaining quota as a percentage (may be below 0 when over quota). */
|
|
50
52
|
percentRemaining: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;GAKG;AAEH,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,YAAY,GACZ,OAAO,GACP,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,MAAM,2BAA2B,GACnC,YAAY,GACZ,kBAAkB,GAClB,WAAW,GACX,0BAA0B,GAC1B,kBAAkB,CAAC;AAEvB,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAEnE,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,UAAU,EAAE,oBAAoB,CAAC;IACjC,6CAA6C;IAC7C,iBAAiB,EAAE,2BAA2B,CAAC;IAC/C,qEAAqE;IACrE,SAAS,EAAE,mBAAmB,CAAC;IAC/B,uEAAuE;IACvE,SAAS,EAAE,mBAAmB,CAAC;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,UAAU,EAAE,kBAAkB,CAAC;IAC/B,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GACvB,CAAC,qBAAqB,GAAG;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/entries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AA6FA,MAAM,UAAU,YAAY,CAAC,CAAkB;IAC7C,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,CAAkB;IAElB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped-entry-normalization.js","sourceRoot":"","sources":["../../src/lib/grouped-entry-normalization.ts"],"names":[],"mappings":"AAmBA,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,CACL,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,SAAS,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/D,OAAO;QACL,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"grouped-entry-normalization.js","sourceRoot":"","sources":["../../src/lib/grouped-entry-normalization.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/jsonc.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Strip trailing commas from JSON content.
|
|
3
|
-
* Removes commas that appear before closing brackets/braces,
|
|
4
|
-
* while preserving commas inside strings.
|
|
5
|
-
*/
|
|
6
|
-
export declare function stripTrailingCommas(content: string): string;
|
|
7
1
|
/**
|
|
8
2
|
* Parse JSON or JSONC content preserving comments via comment-json.
|
|
3
|
+
*
|
|
4
|
+
* `comment-json` accepts trailing commas natively, so the content is handed to
|
|
5
|
+
* it verbatim. An earlier hand-rolled pre-pass stripped trailing commas first;
|
|
6
|
+
* it tracked `"` and `'` as string delimiters without understanding comments, so
|
|
7
|
+
* a single unpaired quote inside a `//` or block comment inverted its
|
|
8
|
+
* in-string state for the rest of the file and it then edited real string
|
|
9
|
+
* values and comment text. Since `parse` never needed the help, the pre-pass
|
|
10
|
+
* could only ever do harm.
|
|
9
11
|
*/
|
|
10
12
|
export declare function parseJsonOrJsonc(content: string, isJsonc: boolean): unknown;
|
|
11
13
|
/**
|
package/dist/lib/jsonc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../../src/lib/jsonc.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../../src/lib/jsonc.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAG3D"}
|
package/dist/lib/jsonc.js
CHANGED
|
@@ -1,61 +1,18 @@
|
|
|
1
1
|
import commentJson from "comment-json";
|
|
2
2
|
const { parse, stringify } = commentJson;
|
|
3
|
-
/**
|
|
4
|
-
* Strip trailing commas from JSON content.
|
|
5
|
-
* Removes commas that appear before closing brackets/braces,
|
|
6
|
-
* while preserving commas inside strings.
|
|
7
|
-
*/
|
|
8
|
-
export function stripTrailingCommas(content) {
|
|
9
|
-
let result = "";
|
|
10
|
-
let i = 0;
|
|
11
|
-
let inString = false;
|
|
12
|
-
let stringChar = "";
|
|
13
|
-
while (i < content.length) {
|
|
14
|
-
const char = content[i];
|
|
15
|
-
// Handle string boundaries
|
|
16
|
-
if (char === '"' || char === "'") {
|
|
17
|
-
let backslashCount = 0;
|
|
18
|
-
let j = i - 1;
|
|
19
|
-
while (j >= 0 && content[j] === "\\") {
|
|
20
|
-
backslashCount++;
|
|
21
|
-
j--;
|
|
22
|
-
}
|
|
23
|
-
if (backslashCount % 2 === 0) {
|
|
24
|
-
if (!inString) {
|
|
25
|
-
inString = true;
|
|
26
|
-
stringChar = char;
|
|
27
|
-
}
|
|
28
|
-
else if (char === stringChar) {
|
|
29
|
-
inString = false;
|
|
30
|
-
}
|
|
31
|
-
result += char;
|
|
32
|
-
i++;
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// If not in a string, check for a trailing comma
|
|
37
|
-
if (!inString && char === ",") {
|
|
38
|
-
let j = i + 1;
|
|
39
|
-
while (j < content.length && /\s/.test(content[j])) {
|
|
40
|
-
j++;
|
|
41
|
-
}
|
|
42
|
-
// If the next non-whitespace character is a closing bracket/brace, skip this comma
|
|
43
|
-
if (j < content.length && (content[j] === "]" || content[j] === "}")) {
|
|
44
|
-
i++;
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
result += char;
|
|
49
|
-
i++;
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
3
|
/**
|
|
54
4
|
* Parse JSON or JSONC content preserving comments via comment-json.
|
|
5
|
+
*
|
|
6
|
+
* `comment-json` accepts trailing commas natively, so the content is handed to
|
|
7
|
+
* it verbatim. An earlier hand-rolled pre-pass stripped trailing commas first;
|
|
8
|
+
* it tracked `"` and `'` as string delimiters without understanding comments, so
|
|
9
|
+
* a single unpaired quote inside a `//` or block comment inverted its
|
|
10
|
+
* in-string state for the rest of the file and it then edited real string
|
|
11
|
+
* values and comment text. Since `parse` never needed the help, the pre-pass
|
|
12
|
+
* could only ever do harm.
|
|
55
13
|
*/
|
|
56
14
|
export function parseJsonOrJsonc(content, isJsonc) {
|
|
57
|
-
|
|
58
|
-
return parse(cleaned);
|
|
15
|
+
return parse(content);
|
|
59
16
|
}
|
|
60
17
|
/**
|
|
61
18
|
* Stringify data back to JSONC while preserving attached comments.
|
package/dist/lib/jsonc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/lib/jsonc.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/lib/jsonc.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAAgB;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,8EAA8E;IAC9E,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface KiloApiKeyResult {
|
|
2
|
+
key: string;
|
|
3
|
+
source: KiloKeySource;
|
|
4
|
+
}
|
|
5
|
+
export type KiloKeySource = "env:KILO_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
|
|
6
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
7
|
+
export declare function resolveKiloApiKey(): Promise<KiloApiKeyResult | null>;
|
|
8
|
+
export declare function hasKiloApiKey(): Promise<boolean>;
|
|
9
|
+
export declare function getKiloKeyDiagnostics(): Promise<{
|
|
10
|
+
configured: boolean;
|
|
11
|
+
source: KiloKeySource | null;
|
|
12
|
+
checkedPaths: string[];
|
|
13
|
+
authPaths: string[];
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=kilo-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo-config.d.ts","sourceRoot":"","sources":["../../src/lib/kilo-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAW,CAAC;AAElG,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAgBjH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAE1E;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtD;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC,CAED"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getAuthPaths, readAuthFile } from "./opencode-auth.js";
|
|
2
|
+
import { createProviderApiKeyResolver, getGlobalOpencodeConfigCandidatePaths, } from "./api-key-resolver.js";
|
|
3
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
4
|
+
const kiloApiKeyResolver = createProviderApiKeyResolver({
|
|
5
|
+
envVars: [{ name: "KILO_API_KEY", source: "env:KILO_API_KEY" }],
|
|
6
|
+
providerKeys: ["kilo"],
|
|
7
|
+
allowedEnvVars: ["KILO_API_KEY"],
|
|
8
|
+
configJsonSource: "opencode.json",
|
|
9
|
+
configJsoncSource: "opencode.jsonc",
|
|
10
|
+
getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
|
|
11
|
+
auth: {
|
|
12
|
+
readAuth: readAuthFile,
|
|
13
|
+
getAuthPaths,
|
|
14
|
+
authSource: "auth.json",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
export async function resolveKiloApiKey() {
|
|
18
|
+
return kiloApiKeyResolver.resolve();
|
|
19
|
+
}
|
|
20
|
+
export async function hasKiloApiKey() {
|
|
21
|
+
return kiloApiKeyResolver.has();
|
|
22
|
+
}
|
|
23
|
+
export async function getKiloKeyDiagnostics() {
|
|
24
|
+
return kiloApiKeyResolver.diagnostics();
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=kilo-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo-config.js","sourceRoot":"","sources":["../../src/lib/kilo-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAEjH,MAAM,kBAAkB,GAAG,4BAA4B,CAAgB;IACrE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC/D,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,gBAAgB,EAAE,eAAe;IACjC,iBAAiB,EAAE,gBAAgB;IACnC,mBAAmB,EAAE,qCAAqC;IAC1D,IAAI,EAAE;QACJ,QAAQ,EAAE,YAAY;QACtB,YAAY;QACZ,UAAU,EAAE,WAAW;KACxB;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,kBAAkB,CAAC,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,kBAAkB,CAAC,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAMzC,OAAO,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kilo Gateway balance API client.
|
|
3
|
+
*
|
|
4
|
+
* Kilo's public gateway API does not expose quota or usage-history totals.
|
|
5
|
+
* Its official gateway package documents the authenticated profile balance API,
|
|
6
|
+
* so this client intentionally reports only that provider-reported USD balance.
|
|
7
|
+
*/
|
|
8
|
+
import type { QuotaError } from "./types.js";
|
|
9
|
+
type KiloResult = {
|
|
10
|
+
success: true;
|
|
11
|
+
balanceUsd: number;
|
|
12
|
+
} | QuotaError | null;
|
|
13
|
+
declare function parseKiloBalance(payload: unknown): KiloResult;
|
|
14
|
+
export declare function queryKiloBalance(options?: {
|
|
15
|
+
requestTimeoutMs?: number;
|
|
16
|
+
}): Promise<KiloResult>;
|
|
17
|
+
export { parseKiloBalance as _parseKiloBalance };
|
|
18
|
+
export type { KiloResult };
|
|
19
|
+
//# sourceMappingURL=kilo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo.d.ts","sourceRoot":"","sources":["../../src/lib/kilo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,KAAK,UAAU,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAAC;AAa5E,iBAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAiBtD;AAED,wBAAsB,gBAAgB,CACpC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAED,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/lib/kilo.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kilo Gateway balance API client.
|
|
3
|
+
*
|
|
4
|
+
* Kilo's public gateway API does not expose quota or usage-history totals.
|
|
5
|
+
* Its official gateway package documents the authenticated profile balance API,
|
|
6
|
+
* so this client intentionally reports only that provider-reported USD balance.
|
|
7
|
+
*/
|
|
8
|
+
import { sanitizeSingleLineDisplayText } from "./display-sanitize.js";
|
|
9
|
+
import { fetchWithTimeout } from "./http.js";
|
|
10
|
+
import { resolveKiloApiKey } from "./kilo-config.js";
|
|
11
|
+
const KILO_BALANCE_URL = "https://api.kilo.ai/api/profile/balance";
|
|
12
|
+
const MAX_RESPONSE_BYTES = 64 * 1024;
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function sanitizeMessage(text, secret, maxLength = 200) {
|
|
17
|
+
const redacted = secret ? text.split(secret).join("[redacted]") : text;
|
|
18
|
+
return (sanitizeSingleLineDisplayText(redacted) || "unknown").slice(0, maxLength);
|
|
19
|
+
}
|
|
20
|
+
function parseKiloBalance(payload) {
|
|
21
|
+
if (!isRecord(payload)) {
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
error: "Kilo Gateway balance API returned an unexpected response shape",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const balanceUsd = payload.balance;
|
|
28
|
+
if (typeof balanceUsd !== "number" || !Number.isFinite(balanceUsd) || balanceUsd < 0) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: "Kilo Gateway balance API returned an invalid balance",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return { success: true, balanceUsd };
|
|
35
|
+
}
|
|
36
|
+
export async function queryKiloBalance(options = {}) {
|
|
37
|
+
const resolved = await resolveKiloApiKey();
|
|
38
|
+
if (!resolved)
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
return await fetchWithTimeout(KILO_BALANCE_URL, {
|
|
42
|
+
request: {
|
|
43
|
+
method: "GET",
|
|
44
|
+
headers: {
|
|
45
|
+
Accept: "application/json",
|
|
46
|
+
Authorization: `Bearer ${resolved.key}`,
|
|
47
|
+
"Content-Type": "application/json",
|
|
48
|
+
},
|
|
49
|
+
redirect: "manual",
|
|
50
|
+
},
|
|
51
|
+
timeoutMs: options.requestTimeoutMs,
|
|
52
|
+
consume: async (response) => {
|
|
53
|
+
const text = await response.text();
|
|
54
|
+
if (new TextEncoder().encode(text).byteLength > MAX_RESPONSE_BYTES) {
|
|
55
|
+
throw new Error(`Kilo Gateway balance API response exceeded ${MAX_RESPONSE_BYTES} bytes`);
|
|
56
|
+
}
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: `Kilo Gateway balance API error ${response.status}: ${sanitizeMessage(text, resolved.key)}`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return parseKiloBalance(JSON.parse(text));
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
error: sanitizeMessage(error instanceof Error ? error.message : String(error), resolved.key),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export { parseKiloBalance as _parseKiloBalance };
|
|
75
|
+
//# sourceMappingURL=kilo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo.js","sourceRoot":"","sources":["../../src/lib/kilo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,15 @@
|
|
|
1
|
-
export interface
|
|
2
|
-
|
|
1
|
+
export interface OllamaCloudApiKeyResult {
|
|
2
|
+
key: string;
|
|
3
|
+
source: OllamaCloudKeySource;
|
|
3
4
|
}
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
state: "incomplete";
|
|
12
|
-
source: string;
|
|
13
|
-
missing: string;
|
|
14
|
-
} | {
|
|
15
|
-
state: "invalid";
|
|
16
|
-
source: string;
|
|
17
|
-
error: string;
|
|
18
|
-
};
|
|
19
|
-
export interface OllamaCloudConfigDiagnostics {
|
|
20
|
-
state: ResolvedOllamaCloudConfig["state"];
|
|
21
|
-
source: string | null;
|
|
22
|
-
missing: string | null;
|
|
23
|
-
error: string | null;
|
|
5
|
+
export type OllamaCloudKeySource = "env:OLLAMA_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
|
|
6
|
+
export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
|
|
7
|
+
export declare function resolveOllamaCloudApiKey(): Promise<OllamaCloudApiKeyResult | null>;
|
|
8
|
+
export declare function hasOllamaCloudApiKey(): Promise<boolean>;
|
|
9
|
+
export declare function getOllamaCloudKeyDiagnostics(): Promise<{
|
|
10
|
+
configured: boolean;
|
|
11
|
+
source: OllamaCloudKeySource | null;
|
|
24
12
|
checkedPaths: string[];
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
declare function getOllamaUsageLegacyPath(): string;
|
|
28
|
-
export declare function resolveOllamaCloudConfigFromEnv(env?: NodeJS.ProcessEnv): ResolvedOllamaCloudConfig | null;
|
|
29
|
-
export declare function resolveOllamaCloudConfig(): Promise<ResolvedOllamaCloudConfig>;
|
|
30
|
-
declare const DEFAULT_CACHE_MAX_AGE_MS = 30000;
|
|
31
|
-
export { DEFAULT_CACHE_MAX_AGE_MS as DEFAULT_OLLAMA_CLOUD_CONFIG_CACHE_MAX_AGE_MS };
|
|
32
|
-
export declare function resolveOllamaCloudConfigCached(params?: {
|
|
33
|
-
maxAgeMs?: number;
|
|
34
|
-
}): Promise<ResolvedOllamaCloudConfig>;
|
|
35
|
-
export declare function getOllamaCloudConfigDiagnostics(): Promise<OllamaCloudConfigDiagnostics>;
|
|
36
|
-
export { getOllamaUsageConfigPath, getOllamaUsageLegacyPath };
|
|
13
|
+
authPaths: string[];
|
|
14
|
+
}>;
|
|
37
15
|
//# sourceMappingURL=ollama-cloud-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama-cloud-config.d.ts","sourceRoot":"","sources":["../../src/lib/ollama-cloud-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ollama-cloud-config.d.ts","sourceRoot":"","sources":["../../src/lib/ollama-cloud-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAgBjH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAExF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7D;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC,CAED"}
|