@slkiser/opencode-quota 1.4.2 → 1.4.4
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 +47 -37
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +8 -4
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/chutes.d.ts.map +1 -1
- package/dist/lib/chutes.js +1 -5
- package/dist/lib/chutes.js.map +1 -1
- package/dist/lib/command-handled.d.ts +13 -0
- package/dist/lib/command-handled.d.ts.map +1 -0
- package/dist/lib/command-handled.js +15 -0
- package/dist/lib/command-handled.js.map +1 -0
- package/dist/lib/command-parsing.d.ts +53 -0
- package/dist/lib/command-parsing.d.ts.map +1 -0
- package/dist/lib/command-parsing.js +121 -0
- package/dist/lib/command-parsing.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +28 -32
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/firmware.d.ts.map +1 -1
- package/dist/lib/firmware.js +1 -5
- package/dist/lib/firmware.js.map +1 -1
- package/dist/lib/format-utils.d.ts +5 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +9 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +5 -10
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +4 -6
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +6 -15
- package/dist/lib/google.js.map +1 -1
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +1 -5
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-auth.d.ts +1 -1
- package/dist/lib/opencode-auth.d.ts.map +1 -1
- package/dist/lib/opencode-auth.js +8 -17
- package/dist/lib/opencode-auth.js.map +1 -1
- package/dist/lib/opencode-runtime-paths.d.ts +23 -0
- package/dist/lib/opencode-runtime-paths.d.ts.map +1 -0
- package/dist/lib/opencode-runtime-paths.js +87 -0
- package/dist/lib/opencode-runtime-paths.js.map +1 -0
- package/dist/lib/opencode-storage.d.ts +4 -0
- package/dist/lib/opencode-storage.d.ts.map +1 -1
- package/dist/lib/opencode-storage.js +20 -9
- package/dist/lib/opencode-storage.js.map +1 -1
- package/dist/lib/path-pick.d.ts +2 -0
- package/dist/lib/path-pick.d.ts.map +1 -0
- package/dist/lib/path-pick.js +15 -0
- package/dist/lib/path-pick.js.map +1 -0
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +5 -9
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +27 -5
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/session-tokens-format.d.ts +15 -0
- package/dist/lib/session-tokens-format.d.ts.map +1 -0
- package/dist/lib/session-tokens-format.js +27 -0
- package/dist/lib/session-tokens-format.js.map +1 -0
- package/dist/lib/session-tokens.d.ts +25 -0
- package/dist/lib/session-tokens.d.ts.map +1 -0
- package/dist/lib/session-tokens.js +51 -0
- package/dist/lib/session-tokens.js.map +1 -0
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +5 -10
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +30 -188
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Opencode Quota
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Monitor quota and tokens for OpenCode providers via Toasts and Commands. Zero LLM calls, zero context pollution.
|
|
4
4
|
|
|
5
5
|
## What It Does
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ Quota and token tracking for OpenCode providers via Toasts and Commands with no
|
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
17
|
-
Add to your `opencode.json
|
|
17
|
+
Add to your `opencode.json` (strict JSON) or `opencode.jsonc` (JSONC with comments/trailing commas):
|
|
18
18
|
|
|
19
19
|
```json
|
|
20
20
|
{
|
|
@@ -26,13 +26,13 @@ That's it. Providers are auto-detected based on your OpenCode configuration. Toa
|
|
|
26
26
|
|
|
27
27
|
**Optional:** To restrict which providers are queried, set `enabledProviders` explicitly:
|
|
28
28
|
|
|
29
|
-
```
|
|
29
|
+
```json
|
|
30
30
|
{
|
|
31
31
|
"experimental": {
|
|
32
32
|
"quotaToast": {
|
|
33
|
-
"enabledProviders": ["copilot", "openai", "google-antigravity"]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
33
|
+
"enabledProviders": ["copilot", "openai", "google-antigravity"]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -75,7 +75,7 @@ Copilot works automatically if OpenCode has Copilot configured and logged in.
|
|
|
75
75
|
**Optional:** For more reliable quota reporting, provide a fine-grained PAT:
|
|
76
76
|
|
|
77
77
|
1. Create a fine-grained PAT at GitHub with **Account permissions > Plan > Read**
|
|
78
|
-
2. Create
|
|
78
|
+
2. Create `copilot-quota-token.json` under OpenCode's runtime config directory (see `opencode debug paths`):
|
|
79
79
|
|
|
80
80
|
```json
|
|
81
81
|
{
|
|
@@ -101,20 +101,20 @@ OpenAI works automatically if OpenCode has OpenAI/ChatGPT configured.
|
|
|
101
101
|
|
|
102
102
|
Works automatically if OpenCode has Firmware configured. Alternatively, provide an API key:
|
|
103
103
|
|
|
104
|
-
```
|
|
104
|
+
```json
|
|
105
105
|
{
|
|
106
106
|
"provider": {
|
|
107
107
|
"firmware": {
|
|
108
108
|
"options": {
|
|
109
|
-
"apiKey": "{env:FIRMWARE_API_KEY}"
|
|
110
|
-
}
|
|
111
|
-
}
|
|
109
|
+
"apiKey": "{env:FIRMWARE_API_KEY}"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
112
|
},
|
|
113
113
|
"experimental": {
|
|
114
114
|
"quotaToast": {
|
|
115
|
-
"enabledProviders": ["firmware"]
|
|
116
|
-
}
|
|
117
|
-
}
|
|
115
|
+
"enabledProviders": ["firmware"]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
118
|
}
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -129,20 +129,20 @@ The `apiKey` field supports `{env:VAR_NAME}` syntax or a direct key.
|
|
|
129
129
|
|
|
130
130
|
Works automatically if OpenCode has Chutes configured. Alternatively, provide an API key:
|
|
131
131
|
|
|
132
|
-
```
|
|
132
|
+
```json
|
|
133
133
|
{
|
|
134
134
|
"provider": {
|
|
135
135
|
"chutes": {
|
|
136
136
|
"options": {
|
|
137
|
-
"apiKey": "{env:CHUTES_API_KEY}"
|
|
138
|
-
}
|
|
139
|
-
}
|
|
137
|
+
"apiKey": "{env:CHUTES_API_KEY}"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
140
|
},
|
|
141
141
|
"experimental": {
|
|
142
142
|
"quotaToast": {
|
|
143
|
-
"enabledProviders": ["chutes"]
|
|
144
|
-
}
|
|
145
|
-
}
|
|
143
|
+
"enabledProviders": ["chutes"]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
@@ -159,25 +159,35 @@ Requires the `opencode-antigravity-auth` plugin for multi-account support:
|
|
|
159
159
|
}
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
Account credentials are stored
|
|
162
|
+
Account credentials are stored under OpenCode's runtime config directory (see `opencode debug paths`).
|
|
163
|
+
|
|
164
|
+
If you are troubleshooting, `/quota_status` prints the candidate paths checked for `antigravity-accounts.json`.
|
|
163
165
|
|
|
164
166
|
</details>
|
|
165
167
|
|
|
166
168
|
## Configuration Reference
|
|
167
169
|
|
|
168
|
-
All options go under `experimental.quotaToast` in `opencode.json`:
|
|
169
|
-
|
|
170
|
-
| Option | Default | Description
|
|
171
|
-
| ------------------- | ------------ |
|
|
172
|
-
| `enabled` | `true` | Enable/disable plugin
|
|
173
|
-
| `enableToast` | `true` | Show popup toasts
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
180
|
-
| `
|
|
170
|
+
All options go under `experimental.quotaToast` in `opencode.json` or `opencode.jsonc`:
|
|
171
|
+
|
|
172
|
+
| Option | Default | Description |
|
|
173
|
+
| ------------------- | ------------ | ---------------------------------------------------------------------------- |
|
|
174
|
+
| `enabled` | `true` | Enable/disable plugin |
|
|
175
|
+
| `enableToast` | `true` | Show popup toasts |
|
|
176
|
+
| `toastStyle` | `classic` | Toast layout style: `classic` or `grouped` |
|
|
177
|
+
| `enabledProviders` | `"auto"` | Provider IDs to query, or `"auto"` to detect |
|
|
178
|
+
| `minIntervalMs` | `300000` | Minimum ms between API fetches (default: 5 min) |
|
|
179
|
+
| `toastDurationMs` | `9000` | How long toasts display (ms) |
|
|
180
|
+
| `showOnIdle` | `true` | Show toast on idle trigger |
|
|
181
|
+
| `showOnQuestion` | `true` | Show toast after a question/assistant response |
|
|
182
|
+
| `showOnCompact` | `true` | Show toast after session compaction |
|
|
183
|
+
| `showOnBothFail` | `true` | If providers attempt and fail, show a fallback toast |
|
|
184
|
+
| `onlyCurrentModel` | `false` | Only show quota for the current model (best-effort) |
|
|
185
|
+
| `showSessionTokens` | `true` | Show per-model input/output tokens in toast |
|
|
186
|
+
| `layout.maxWidth` | `50` | Formatting target width |
|
|
187
|
+
| `layout.narrowAt` | `42` | Compact layout breakpoint |
|
|
188
|
+
| `layout.tinyAt` | `32` | Ultra-compact layout breakpoint |
|
|
189
|
+
| `googleModels` | `["CLAUDE"]` | Google models: `CLAUDE`, `G3PRO`, `G3FLASH`, `G3IMAGE` |
|
|
190
|
+
| `debug` | `false` | Show debug info in toasts (and a debug-only toast when otherwise suppressed) |
|
|
181
191
|
|
|
182
192
|
## Troubleshooting
|
|
183
193
|
|
|
@@ -196,13 +206,13 @@ This section provides instructions for LLM agents to install and configure `open
|
|
|
196
206
|
|
|
197
207
|
First, determine what providers the user has connected. You can:
|
|
198
208
|
|
|
199
|
-
1. Read the user's `opencode.json` (typically at `~/.config/opencode
|
|
209
|
+
1. Read the user's `opencode.json` or `opencode.jsonc` (typically at `~/.config/opencode/`)
|
|
200
210
|
2. Run `/connected` in OpenCode to see active providers
|
|
201
211
|
3. Ask the user which providers they use
|
|
202
212
|
|
|
203
213
|
#### Step 2: Install the Plugin
|
|
204
214
|
|
|
205
|
-
Add the plugin to the user's `opencode.json
|
|
215
|
+
Add the plugin to the user's `opencode.json` (or `opencode.jsonc`):
|
|
206
216
|
|
|
207
217
|
```json
|
|
208
218
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"api-key-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,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;;;;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;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB,CAAC,MAAM,SAAS,MAAM;IACxD,gDAAgD;IAChD,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAE7B,4EAA4E;IAC5E,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAEtD,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sCAAsC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAE1B,sEAAsE;IACtE,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAElD,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,MAAM,EACvD,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GACtC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAgCtC;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB,CAAC,MAAM,SAAS,MAAM;IACtD,0CAA0C;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,sDAAsD;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;CACrD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,SAAS,MAAM,EAC9D,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAyBD"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { existsSync } from "fs";
|
|
8
8
|
import { readFile } from "fs/promises";
|
|
9
|
-
import { homedir } from "os";
|
|
10
9
|
import { join } from "path";
|
|
10
|
+
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
11
11
|
import { parseJsonOrJsonc } from "./jsonc.js";
|
|
12
12
|
/**
|
|
13
13
|
* Get candidate paths for opencode.json/opencode.jsonc files.
|
|
@@ -17,12 +17,16 @@ import { parseJsonOrJsonc } from "./jsonc.js";
|
|
|
17
17
|
*/
|
|
18
18
|
export function getOpencodeConfigCandidatePaths() {
|
|
19
19
|
const cwd = process.cwd();
|
|
20
|
-
const
|
|
20
|
+
const { configDirs } = getOpencodeRuntimeDirCandidates();
|
|
21
|
+
const global = [];
|
|
22
|
+
for (const dir of configDirs) {
|
|
23
|
+
global.push({ path: join(dir, "opencode.jsonc"), isJsonc: true });
|
|
24
|
+
global.push({ path: join(dir, "opencode.json"), isJsonc: false });
|
|
25
|
+
}
|
|
21
26
|
return [
|
|
22
27
|
{ path: join(cwd, "opencode.jsonc"), isJsonc: true },
|
|
23
28
|
{ path: join(cwd, "opencode.json"), isJsonc: false },
|
|
24
|
-
|
|
25
|
-
{ path: join(configBaseDir, "opencode", "opencode.json"), isJsonc: false },
|
|
29
|
+
...global,
|
|
26
30
|
];
|
|
27
31
|
}
|
|
28
32
|
/**
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"api-key-resolver.js","sourceRoot":"","sources":["../../src/lib/api-key-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/chutes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chutes.d.ts","sourceRoot":"","sources":["../../src/lib/chutes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"chutes.d.ts","sourceRoot":"","sources":["../../src/lib/chutes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqC/C,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAElE;AAED,OAAO,EAAE,uBAAuB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAwC9D"}
|
package/dist/lib/chutes.js
CHANGED
|
@@ -5,12 +5,8 @@
|
|
|
5
5
|
* https://api.chutes.ai/users/me/quota_usage/me
|
|
6
6
|
*/
|
|
7
7
|
import { fetchWithTimeout } from "./http.js";
|
|
8
|
+
import { clampPercent } from "./format-utils.js";
|
|
8
9
|
import { resolveChutesApiKey, hasChutesApiKey, } from "./chutes-config.js";
|
|
9
|
-
function clampPercent(n) {
|
|
10
|
-
if (!Number.isFinite(n))
|
|
11
|
-
return 0;
|
|
12
|
-
return Math.max(0, Math.min(100, Math.round(n)));
|
|
13
|
-
}
|
|
14
10
|
function getNextDailyResetUtc() {
|
|
15
11
|
const now = new Date();
|
|
16
12
|
const reset = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1, 0, 0, 0, 0));
|
package/dist/lib/chutes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chutes.js","sourceRoot":"","sources":["../../src/lib/chutes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"chutes.js","sourceRoot":"","sources":["../../src/lib/chutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command-handled sentinel.
|
|
3
|
+
*
|
|
4
|
+
* Thrown by slash-command handlers to signal that the command output
|
|
5
|
+
* has already been injected and no further processing is needed.
|
|
6
|
+
*/
|
|
7
|
+
export declare const COMMAND_HANDLED_SENTINEL: "__QUOTA_COMMAND_HANDLED__";
|
|
8
|
+
/**
|
|
9
|
+
* Throw the command-handled sentinel.
|
|
10
|
+
* Use this instead of `throw new Error("__QUOTA_COMMAND_HANDLED__")`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function handled(): never;
|
|
13
|
+
//# sourceMappingURL=command-handled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-handled.d.ts","sourceRoot":"","sources":["../../src/lib/command-handled.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,wBAAwB,EAAG,2BAAoC,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,OAAO,IAAI,KAAK,CAE/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command-handled sentinel.
|
|
3
|
+
*
|
|
4
|
+
* Thrown by slash-command handlers to signal that the command output
|
|
5
|
+
* has already been injected and no further processing is needed.
|
|
6
|
+
*/
|
|
7
|
+
export const COMMAND_HANDLED_SENTINEL = "__QUOTA_COMMAND_HANDLED__";
|
|
8
|
+
/**
|
|
9
|
+
* Throw the command-handled sentinel.
|
|
10
|
+
* Use this instead of `throw new Error("__QUOTA_COMMAND_HANDLED__")`.
|
|
11
|
+
*/
|
|
12
|
+
export function handled() {
|
|
13
|
+
throw new Error(COMMAND_HANDLED_SENTINEL);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=command-handled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-handled.js","sourceRoot":"","sources":["../../src/lib/command-handled.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAAoC,CAAC;AAE7E;;;GAGG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command parsing helpers extracted from plugin.ts.
|
|
3
|
+
*
|
|
4
|
+
* These utilities handle argument parsing for `/tokens_between`,
|
|
5
|
+
* `/quota_status`, and other slash commands.
|
|
6
|
+
*/
|
|
7
|
+
/** Parsed YYYY-MM-DD date components. */
|
|
8
|
+
export type Ymd = {
|
|
9
|
+
y: number;
|
|
10
|
+
m: number;
|
|
11
|
+
d: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Parse optional JSON arguments from a command input string.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseOptionalJsonArgs(input: string | undefined): {
|
|
17
|
+
ok: true;
|
|
18
|
+
value: Record<string, unknown>;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Parse a YYYY-MM-DD string. Returns null if invalid format or invalid date.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseYyyyMmDd(input: string): Ymd | null;
|
|
27
|
+
/**
|
|
28
|
+
* Get the start of a local day (midnight) in milliseconds.
|
|
29
|
+
*/
|
|
30
|
+
export declare function startOfLocalDayMs(ymd: Ymd): number;
|
|
31
|
+
/**
|
|
32
|
+
* Get the start of the next local day (midnight of the following day) in milliseconds.
|
|
33
|
+
* Used for inclusive end date: untilMs = startOfNextLocalDayMs(end) (exclusive upper bound).
|
|
34
|
+
*/
|
|
35
|
+
export declare function startOfNextLocalDayMs(ymd: Ymd): number;
|
|
36
|
+
/**
|
|
37
|
+
* Parse /tokens_between arguments. Supports:
|
|
38
|
+
* - Positional: "2026-01-01 2026-01-15"
|
|
39
|
+
* - JSON: {"starting_date":"2026-01-01","ending_date":"2026-01-15"}
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseQuotaBetweenArgs(input: string | undefined): {
|
|
42
|
+
ok: true;
|
|
43
|
+
startYmd: Ymd;
|
|
44
|
+
endYmd: Ymd;
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
error: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Format a Ymd as YYYY-MM-DD string.
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatYmd(ymd: Ymd): string;
|
|
53
|
+
//# sourceMappingURL=command-parsing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parsing.d.ts","sourceRoot":"","sources":["../../src/lib/command-parsing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yCAAyC;AACzC,MAAM,MAAM,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAC3D;IACE,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAYJ;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAavD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAqDzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAK1C"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command parsing helpers extracted from plugin.ts.
|
|
3
|
+
*
|
|
4
|
+
* These utilities handle argument parsing for `/tokens_between`,
|
|
5
|
+
* `/quota_status`, and other slash commands.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse optional JSON arguments from a command input string.
|
|
9
|
+
*/
|
|
10
|
+
export function parseOptionalJsonArgs(input) {
|
|
11
|
+
const raw = input?.trim() || "";
|
|
12
|
+
if (!raw)
|
|
13
|
+
return { ok: true, value: {} };
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(raw);
|
|
16
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
17
|
+
return { ok: false, error: 'Arguments must be a JSON object (e.g. {"force":true}).' };
|
|
18
|
+
}
|
|
19
|
+
return { ok: true, value: parsed };
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return { ok: false, error: "Failed to parse JSON arguments." };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parse a YYYY-MM-DD string. Returns null if invalid format or invalid date.
|
|
27
|
+
*/
|
|
28
|
+
export function parseYyyyMmDd(input) {
|
|
29
|
+
const pattern = /^\d{4}-\d{2}-\d{2}$/;
|
|
30
|
+
if (!pattern.test(input))
|
|
31
|
+
return null;
|
|
32
|
+
const [yStr, mStr, dStr] = input.split("-");
|
|
33
|
+
const y = parseInt(yStr, 10);
|
|
34
|
+
const m = parseInt(mStr, 10);
|
|
35
|
+
const d = parseInt(dStr, 10);
|
|
36
|
+
// Validate by round-trip: construct a Date and check components match
|
|
37
|
+
const date = new Date(y, m - 1, d);
|
|
38
|
+
if (date.getFullYear() !== y || date.getMonth() !== m - 1 || date.getDate() !== d) {
|
|
39
|
+
return null; // Invalid date (e.g., 2026-02-31)
|
|
40
|
+
}
|
|
41
|
+
return { y, m, d };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the start of a local day (midnight) in milliseconds.
|
|
45
|
+
*/
|
|
46
|
+
export function startOfLocalDayMs(ymd) {
|
|
47
|
+
return new Date(ymd.y, ymd.m - 1, ymd.d).getTime();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the start of the next local day (midnight of the following day) in milliseconds.
|
|
51
|
+
* Used for inclusive end date: untilMs = startOfNextLocalDayMs(end) (exclusive upper bound).
|
|
52
|
+
*/
|
|
53
|
+
export function startOfNextLocalDayMs(ymd) {
|
|
54
|
+
return new Date(ymd.y, ymd.m - 1, ymd.d + 1).getTime();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Parse /tokens_between arguments. Supports:
|
|
58
|
+
* - Positional: "2026-01-01 2026-01-15"
|
|
59
|
+
* - JSON: {"starting_date":"2026-01-01","ending_date":"2026-01-15"}
|
|
60
|
+
*/
|
|
61
|
+
export function parseQuotaBetweenArgs(input) {
|
|
62
|
+
const raw = input?.trim() || "";
|
|
63
|
+
if (!raw) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
error: "Missing arguments. Expected two dates in YYYY-MM-DD format.",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
let startStr;
|
|
70
|
+
let endStr;
|
|
71
|
+
if (raw.startsWith("{")) {
|
|
72
|
+
// JSON format
|
|
73
|
+
try {
|
|
74
|
+
const parsed = JSON.parse(raw);
|
|
75
|
+
startStr = String(parsed["starting_date"] ?? parsed["startingDate"] ?? "");
|
|
76
|
+
endStr = String(parsed["ending_date"] ?? parsed["endingDate"] ?? "");
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return { ok: false, error: "Failed to parse JSON arguments." };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Positional format: split on whitespace
|
|
84
|
+
const parts = raw.split(/\s+/);
|
|
85
|
+
if (parts.length !== 2) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
error: "Expected exactly two dates in YYYY-MM-DD format.",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
[startStr, endStr] = parts;
|
|
92
|
+
}
|
|
93
|
+
const startYmd = parseYyyyMmDd(startStr);
|
|
94
|
+
if (!startYmd) {
|
|
95
|
+
return { ok: false, error: `Invalid starting date: "${startStr}". Expected YYYY-MM-DD.` };
|
|
96
|
+
}
|
|
97
|
+
const endYmd = parseYyyyMmDd(endStr);
|
|
98
|
+
if (!endYmd) {
|
|
99
|
+
return { ok: false, error: `Invalid ending date: "${endStr}". Expected YYYY-MM-DD.` };
|
|
100
|
+
}
|
|
101
|
+
// Check end >= start
|
|
102
|
+
const startMs = startOfLocalDayMs(startYmd);
|
|
103
|
+
const endMs = startOfLocalDayMs(endYmd);
|
|
104
|
+
if (endMs < startMs) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
error: `Ending date (${endStr}) is before starting date (${startStr}).`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return { ok: true, startYmd, endYmd };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format a Ymd as YYYY-MM-DD string.
|
|
114
|
+
*/
|
|
115
|
+
export function formatYmd(ymd) {
|
|
116
|
+
const y = String(ymd.y).padStart(4, "0");
|
|
117
|
+
const m = String(ymd.m).padStart(2, "0");
|
|
118
|
+
const d = String(ymd.d).padStart(2, "0");
|
|
119
|
+
return `${y}-${m}-${d}`;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=command-parsing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parsing.js","sourceRoot":"","sources":["../../src/lib/command-parsing.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAUlE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAiCD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC;CACH,EACD,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA+K3B"}
|
package/dist/lib/config.js
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* Fallback: reads local config files directly.
|
|
6
6
|
*/
|
|
7
7
|
import { DEFAULT_CONFIG } from "./types.js";
|
|
8
|
-
import {
|
|
8
|
+
import { parseJsonOrJsonc } from "./jsonc.js";
|
|
9
9
|
import { existsSync } from "fs";
|
|
10
10
|
import { readFile } from "fs/promises";
|
|
11
|
-
import { homedir } from "os";
|
|
12
11
|
import { join } from "path";
|
|
12
|
+
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
13
13
|
export function createLoadConfigMeta() {
|
|
14
14
|
return { source: "defaults", paths: [] };
|
|
15
15
|
}
|
|
@@ -121,10 +121,7 @@ export async function loadConfig(client, meta) {
|
|
|
121
121
|
async function readJson(path) {
|
|
122
122
|
try {
|
|
123
123
|
const content = await readFile(path, "utf-8");
|
|
124
|
-
|
|
125
|
-
const isJsonc = path.endsWith(".jsonc");
|
|
126
|
-
const toParse = isJsonc ? stripJsonComments(content) : content;
|
|
127
|
-
return JSON.parse(toParse);
|
|
124
|
+
return parseJsonOrJsonc(content, path.endsWith(".jsonc"));
|
|
128
125
|
}
|
|
129
126
|
catch {
|
|
130
127
|
return null;
|
|
@@ -132,36 +129,35 @@ export async function loadConfig(client, meta) {
|
|
|
132
129
|
}
|
|
133
130
|
async function loadFromFiles() {
|
|
134
131
|
const cwd = process.cwd();
|
|
135
|
-
const
|
|
132
|
+
const { configDirs } = getOpencodeRuntimeDirCandidates();
|
|
136
133
|
// Order: global first, then local overrides.
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
join(configBaseDir, "opencode", "opencode.json"),
|
|
141
|
-
join(cwd, "opencode.jsonc"),
|
|
142
|
-
join(cwd, "opencode.json"),
|
|
143
|
-
];
|
|
134
|
+
// Within each location, load .json first, then .jsonc so that
|
|
135
|
+
// .jsonc takes precedence on key collisions (matching the documented intent).
|
|
136
|
+
const locations = [...configDirs, cwd];
|
|
144
137
|
const quota = {};
|
|
145
138
|
const usedPaths = [];
|
|
146
|
-
for (const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (!parsed || typeof parsed !== "object")
|
|
151
|
-
continue;
|
|
152
|
-
const root = parsed;
|
|
153
|
-
const picks = [
|
|
154
|
-
{ key: "experimental.quotaToast", value: root?.experimental?.quotaToast },
|
|
155
|
-
];
|
|
156
|
-
const usedKeys = [];
|
|
157
|
-
for (const pick of picks) {
|
|
158
|
-
if (!pick.value || typeof pick.value !== "object")
|
|
139
|
+
for (const dir of locations) {
|
|
140
|
+
for (const filename of ["opencode.json", "opencode.jsonc"]) {
|
|
141
|
+
const p = join(dir, filename);
|
|
142
|
+
if (!existsSync(p))
|
|
159
143
|
continue;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
144
|
+
const parsed = await readJson(p);
|
|
145
|
+
if (!parsed || typeof parsed !== "object")
|
|
146
|
+
continue;
|
|
147
|
+
const root = parsed;
|
|
148
|
+
const picks = [
|
|
149
|
+
{ key: "experimental.quotaToast", value: root?.experimental?.quotaToast },
|
|
150
|
+
];
|
|
151
|
+
const usedKeys = [];
|
|
152
|
+
for (const pick of picks) {
|
|
153
|
+
if (!pick.value || typeof pick.value !== "object")
|
|
154
|
+
continue;
|
|
155
|
+
Object.assign(quota, pick.value);
|
|
156
|
+
usedKeys.push(pick.key);
|
|
157
|
+
}
|
|
158
|
+
if (usedKeys.length > 0) {
|
|
159
|
+
usedPaths.push(`${p} (${usedKeys.join(", ")})`);
|
|
160
|
+
}
|
|
165
161
|
}
|
|
166
162
|
}
|
|
167
163
|
if (meta) {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firmware.d.ts","sourceRoot":"","sources":["../../src/lib/firmware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"firmware.d.ts","sourceRoot":"","sources":["../../src/lib/firmware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmB7C,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD,MAAM,MAAM,cAAc,GACtB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,OAAO,EAAE;QACP,MAAM,EAAE,mBAAmB,CAAC;QAC5B,MAAM,EAAE,mBAAmB,CAAC;KAC7B,CAAC;IACF,8CAA8C;IAC9C,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GACD,UAAU,GACV,IAAI,CAAC;AAET,MAAM,MAAM,yBAAyB,GACjC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,UAAU,GACV,IAAI,CAAC;AAKT,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,OAAO,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CA2ElE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAsDnF"}
|
package/dist/lib/firmware.js
CHANGED
|
@@ -5,12 +5,8 @@
|
|
|
5
5
|
* and queries: https://app.firmware.ai/api/v1/quota
|
|
6
6
|
*/
|
|
7
7
|
import { fetchWithTimeout } from "./http.js";
|
|
8
|
+
import { clampPercent } from "./format-utils.js";
|
|
8
9
|
import { resolveFirmwareApiKey, hasFirmwareApiKey, } from "./firmware-config.js";
|
|
9
|
-
function clampPercent(n) {
|
|
10
|
-
if (!Number.isFinite(n))
|
|
11
|
-
return 0;
|
|
12
|
-
return Math.max(0, Math.min(100, Math.round(n)));
|
|
13
|
-
}
|
|
14
10
|
/**
|
|
15
11
|
* Strip control characters (ANSI escapes, etc.) from error text
|
|
16
12
|
* to prevent terminal injection when displayed in TUI output.
|