@botiverse/oar 0.0.3 → 0.0.5
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 +15 -4
- package/dist/contracts/account-usage.d.ts +1 -0
- package/dist/contracts/account-usage.d.ts.map +1 -1
- package/dist/contracts/model-catalog.d.ts +51 -0
- package/dist/contracts/model-catalog.d.ts.map +1 -0
- package/dist/contracts/model-catalog.js +9 -0
- package/dist/contracts/model-catalog.js.map +1 -0
- package/dist/contracts/provider-auth.d.ts +77 -0
- package/dist/contracts/provider-auth.d.ts.map +1 -0
- package/dist/contracts/provider-auth.js +9 -0
- package/dist/contracts/provider-auth.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/runtimes/claude/account-usage.d.ts +21 -19
- package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
- package/dist/runtimes/claude/account-usage.js +153 -131
- package/dist/runtimes/claude/account-usage.js.map +1 -1
- package/dist/runtimes/codex/account-usage.d.ts +21 -0
- package/dist/runtimes/codex/account-usage.d.ts.map +1 -1
- package/dist/runtimes/codex/account-usage.js +27 -10
- package/dist/runtimes/codex/account-usage.js.map +1 -1
- package/dist/runtimes/grok/account-usage.d.ts +6 -0
- package/dist/runtimes/grok/account-usage.d.ts.map +1 -0
- package/dist/runtimes/grok/account-usage.js +142 -0
- package/dist/runtimes/grok/account-usage.js.map +1 -0
- package/dist/runtimes/grok/index.d.ts +9 -0
- package/dist/runtimes/grok/index.d.ts.map +1 -0
- package/dist/runtimes/grok/index.js +13 -0
- package/dist/runtimes/grok/index.js.map +1 -0
- package/dist/runtimes/grok/installation.d.ts +4 -0
- package/dist/runtimes/grok/installation.d.ts.map +1 -0
- package/dist/runtimes/grok/installation.js +19 -0
- package/dist/runtimes/grok/installation.js.map +1 -0
- package/dist/runtimes/grok/session.d.ts +10 -0
- package/dist/runtimes/grok/session.d.ts.map +1 -0
- package/dist/runtimes/grok/session.js +66 -0
- package/dist/runtimes/grok/session.js.map +1 -0
- package/dist/runtimes/kimi/account-usage.d.ts +9 -0
- package/dist/runtimes/kimi/account-usage.d.ts.map +1 -0
- package/dist/runtimes/kimi/account-usage.js +241 -0
- package/dist/runtimes/kimi/account-usage.js.map +1 -0
- package/dist/runtimes/kimi/auth-config.d.ts +12 -0
- package/dist/runtimes/kimi/auth-config.d.ts.map +1 -0
- package/dist/runtimes/kimi/auth-config.js +90 -0
- package/dist/runtimes/kimi/auth-config.js.map +1 -0
- package/dist/runtimes/kimi/index.d.ts +9 -0
- package/dist/runtimes/kimi/index.d.ts.map +1 -0
- package/dist/runtimes/kimi/index.js +13 -0
- package/dist/runtimes/kimi/index.js.map +1 -0
- package/dist/runtimes/kimi/installation.d.ts +4 -0
- package/dist/runtimes/kimi/installation.d.ts.map +1 -0
- package/dist/runtimes/kimi/installation.js +18 -0
- package/dist/runtimes/kimi/installation.js.map +1 -0
- package/dist/runtimes/kimi/oauth-token.d.ts +12 -0
- package/dist/runtimes/kimi/oauth-token.d.ts.map +1 -0
- package/dist/runtimes/kimi/oauth-token.js +38 -0
- package/dist/runtimes/kimi/oauth-token.js.map +1 -0
- package/dist/runtimes/kimi/session.d.ts +7 -0
- package/dist/runtimes/kimi/session.d.ts.map +1 -0
- package/dist/runtimes/kimi/session.js +39 -0
- package/dist/runtimes/kimi/session.js.map +1 -0
- package/dist/runtimes/pi/auth.d.ts +16 -0
- package/dist/runtimes/pi/auth.d.ts.map +1 -0
- package/dist/runtimes/pi/auth.js +124 -0
- package/dist/runtimes/pi/auth.js.map +1 -0
- package/dist/runtimes/pi/catalog.d.ts +10 -0
- package/dist/runtimes/pi/catalog.d.ts.map +1 -0
- package/dist/runtimes/pi/catalog.js +66 -0
- package/dist/runtimes/pi/catalog.js.map +1 -0
- package/dist/shared/acp/errors.d.ts +16 -0
- package/dist/shared/acp/errors.d.ts.map +1 -0
- package/dist/shared/acp/errors.js +25 -0
- package/dist/shared/acp/errors.js.map +1 -0
- package/dist/shared/acp/process.d.ts +24 -0
- package/dist/shared/acp/process.d.ts.map +1 -0
- package/dist/shared/acp/process.js +88 -0
- package/dist/shared/acp/process.js.map +1 -0
- package/dist/shared/acp/profile.d.ts +36 -0
- package/dist/shared/acp/profile.d.ts.map +1 -0
- package/dist/shared/acp/profile.js +104 -0
- package/dist/shared/acp/profile.js.map +1 -0
- package/dist/shared/acp/projection.d.ts +21 -0
- package/dist/shared/acp/projection.d.ts.map +1 -0
- package/dist/shared/acp/projection.js +160 -0
- package/dist/shared/acp/projection.js.map +1 -0
- package/dist/shared/acp/session.d.ts +5 -0
- package/dist/shared/acp/session.d.ts.map +1 -0
- package/dist/shared/acp/session.js +254 -0
- package/dist/shared/acp/session.js.map +1 -0
- package/dist/shared/acp/terminal.d.ts +17 -0
- package/dist/shared/acp/terminal.d.ts.map +1 -0
- package/dist/shared/acp/terminal.js +193 -0
- package/dist/shared/acp/terminal.js.map +1 -0
- package/dist/shared/executable/index.d.ts +0 -1
- package/dist/shared/executable/index.d.ts.map +1 -1
- package/dist/shared/executable/index.js.map +1 -1
- package/dist/shared/executable/process.d.ts +16 -15
- package/dist/shared/executable/process.d.ts.map +1 -1
- package/dist/shared/executable/process.js +46 -32
- package/dist/shared/executable/process.js.map +1 -1
- package/dist/shared/executable/resolve.d.ts +2 -15
- package/dist/shared/executable/resolve.d.ts.map +1 -1
- package/dist/shared/executable/resolve.js +4 -61
- package/dist/shared/executable/resolve.js.map +1 -1
- package/dist/shared/executable/version.d.ts +1 -1
- package/dist/shared/executable/version.d.ts.map +1 -1
- package/dist/shared/executable/version.js +2 -2
- package/dist/shared/executable/version.js.map +1 -1
- package/dist/shared/installation.d.ts +6 -1
- package/dist/shared/installation.d.ts.map +1 -1
- package/dist/shared/installation.js +11 -9
- package/dist/shared/installation.js.map +1 -1
- package/package.json +6 -3
|
@@ -1,140 +1,166 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { homedir, platform } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
1
4
|
import { runExecutable } from "../../shared/executable/index.js";
|
|
2
5
|
import { utcInstantFromDate } from "../../shared/instant.js";
|
|
3
|
-
import { asRecord, parseJson } from "../../shared/json.js";
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import { asNumber, asRecord, parseJson } from "../../shared/json.js";
|
|
7
|
+
const USAGE_ENDPOINT = "https://api.anthropic.com/api/oauth/usage";
|
|
8
|
+
// The structured usage endpoint is gated behind the OAuth beta and requires a
|
|
9
|
+
// full `/login` token carrying the `user:profile` scope. Inference-only tokens
|
|
10
|
+
// (env CLAUDE_CODE_OAUTH_TOKEN / injected FDs) lack that scope, so this reader
|
|
11
|
+
// only consults the persisted login credential.
|
|
12
|
+
const OAUTH_BETA = "oauth-2025-04-20";
|
|
13
|
+
const PROFILE_SCOPE = "user:profile";
|
|
14
|
+
function parseStoredOAuth(raw) {
|
|
15
|
+
const oauth = asRecord(asRecord(parseJson(raw))?.claudeAiOauth);
|
|
16
|
+
const accessToken = oauth?.accessToken;
|
|
17
|
+
if (typeof accessToken !== "string" || accessToken.length === 0) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const scopes = oauth?.scopes;
|
|
21
|
+
const hasProfileScope = Array.isArray(scopes) && scopes.includes(PROFILE_SCOPE);
|
|
22
|
+
return { accessToken, hasProfileScope };
|
|
23
|
+
}
|
|
24
|
+
function credentialsFilePath() {
|
|
25
|
+
const base = process.env.CLAUDE_CONFIG_DIR ?? join(homedir(), ".claude");
|
|
26
|
+
return join(base, ".credentials.json");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read Claude Code's persisted `/login` OAuth credential, mirroring the
|
|
30
|
+
* `getClaudeAIOAuthTokens()` fallback: the plaintext credentials file (Linux,
|
|
31
|
+
* and the macOS/Windows fallback), then the macOS Keychain, which stores the
|
|
32
|
+
* same JSON blob. Any failure degrades to `null` — never throws.
|
|
33
|
+
*/
|
|
34
|
+
async function readStoredOAuth(timeoutMs) {
|
|
9
35
|
try {
|
|
10
|
-
|
|
11
|
-
timeZone,
|
|
12
|
-
calendar: "gregory",
|
|
13
|
-
numberingSystem: "latn",
|
|
14
|
-
year: "numeric",
|
|
15
|
-
month: "2-digit",
|
|
16
|
-
day: "2-digit",
|
|
17
|
-
hour: "2-digit",
|
|
18
|
-
minute: "2-digit",
|
|
19
|
-
hourCycle: "h23",
|
|
20
|
-
}).formatToParts(instant);
|
|
21
|
-
const values = Object.fromEntries(parts.map((part) => [part.type, part.value]));
|
|
22
|
-
const result = {
|
|
23
|
-
year: Number(values.year),
|
|
24
|
-
month: Number(values.month) - 1,
|
|
25
|
-
day: Number(values.day),
|
|
26
|
-
hour: Number(values.hour),
|
|
27
|
-
minute: Number(values.minute),
|
|
28
|
-
};
|
|
29
|
-
return Object.values(result).every((value) => Number.isFinite(value)) ? result : null;
|
|
36
|
+
return parseStoredOAuth(readFileSync(credentialsFilePath(), "utf8"));
|
|
30
37
|
}
|
|
31
38
|
catch {
|
|
32
|
-
|
|
39
|
+
// No file (or unreadable): fall through to the platform keystore.
|
|
33
40
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const correction = target
|
|
44
|
-
- Date.UTC(observed.year, observed.month, observed.day, observed.hour, observed.minute);
|
|
45
|
-
if (correction === 0) {
|
|
46
|
-
return instant;
|
|
41
|
+
if (platform() === "darwin") {
|
|
42
|
+
const keychain = await runExecutable("security", ["find-generic-password", "-w", "-s", "Claude Code-credentials"], { timeoutMs });
|
|
43
|
+
if (keychain.ok) {
|
|
44
|
+
try {
|
|
45
|
+
return parseStoredOAuth(keychain.stdout);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
47
50
|
}
|
|
48
|
-
instant += correction;
|
|
49
51
|
}
|
|
50
52
|
return null;
|
|
51
53
|
}
|
|
52
|
-
function
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return null;
|
|
54
|
+
function usageWindowLabel(kind, scope) {
|
|
55
|
+
const modelName = asRecord(scope?.model)?.display_name;
|
|
56
|
+
switch (kind) {
|
|
57
|
+
case "session":
|
|
58
|
+
return "Current session";
|
|
59
|
+
case "weekly_all":
|
|
60
|
+
return "Current week (all models)";
|
|
61
|
+
case "weekly_scoped":
|
|
62
|
+
return typeof modelName === "string" ? `Current week (${modelName})` : "Current week";
|
|
63
|
+
default:
|
|
64
|
+
return typeof kind === "string" && kind.length > 0 ? kind : "Usage limit";
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
}
|
|
67
|
+
async function fetchUsage(accessToken, version, timeoutMs) {
|
|
68
|
+
try {
|
|
69
|
+
return await fetch(USAGE_ENDPOINT, {
|
|
70
|
+
headers: {
|
|
71
|
+
"Authorization": `Bearer ${accessToken}`,
|
|
72
|
+
"anthropic-beta": OAUTH_BETA,
|
|
73
|
+
"Content-Type": "application/json",
|
|
74
|
+
"User-Agent": `claude-code/${version}`,
|
|
75
|
+
},
|
|
76
|
+
signal: AbortSignal.timeout(Math.min(timeoutMs, 5000)),
|
|
77
|
+
});
|
|
68
78
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
for (const year of [reference.year, reference.year + 1]) {
|
|
72
|
-
const instant = localInstant({ year, month, day, hour, minute }, timeZone);
|
|
73
|
-
if (instant !== null && instant >= cutoff) {
|
|
74
|
-
return utcInstantFromDate(new Date(instant));
|
|
75
|
-
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error("Failed to reach Claude usage endpoint", { cause: error });
|
|
76
81
|
}
|
|
77
|
-
return null;
|
|
78
82
|
}
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
function resetInstant(value) {
|
|
84
|
+
if (typeof value !== "string") {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const date = new Date(value);
|
|
88
|
+
return Number.isNaN(date.getTime()) ? null : utcInstantFromDate(date);
|
|
82
89
|
}
|
|
83
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Project the `/api/oauth/usage` payload. The authoritative shape is its
|
|
92
|
+
* `limits` array; a representative (subscription) response is:
|
|
93
|
+
*
|
|
94
|
+
* ```json
|
|
95
|
+
* {
|
|
96
|
+
* "limits": [
|
|
97
|
+
* { "kind": "session", "group": "session", "percent": 17, "severity": "normal",
|
|
98
|
+
* "resets_at": "2026-08-26T13:49:59.725522+00:00", "scope": null, "is_active": false },
|
|
99
|
+
* { "kind": "weekly_all", "group": "weekly", "percent": 72, "severity": "normal",
|
|
100
|
+
* "resets_at": "2026-08-28T06:59:59.725547+00:00", "scope": null, "is_active": false },
|
|
101
|
+
* { "kind": "weekly_scoped", "group": "weekly", "percent": 100, "severity": "critical",
|
|
102
|
+
* "resets_at": "2026-08-28T06:59:59.725963+00:00",
|
|
103
|
+
* "scope": { "model": { "display_name": "Fable" } }, "is_active": true }
|
|
104
|
+
* ]
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export function projectClaudeUsage(payload, email, plan) {
|
|
109
|
+
const limits = asRecord(payload)?.limits;
|
|
84
110
|
const windows = [];
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
let rateLimited = false;
|
|
112
|
+
if (Array.isArray(limits)) {
|
|
113
|
+
for (const entry of limits) {
|
|
114
|
+
const limit = asRecord(entry);
|
|
115
|
+
const percent = asNumber(limit?.percent);
|
|
116
|
+
if (limit === null || percent === null || percent < 0) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const resetsAt = resetInstant(limit.resets_at);
|
|
120
|
+
windows.push({
|
|
121
|
+
label: usageWindowLabel(limit.kind, asRecord(limit.scope)),
|
|
122
|
+
usedRatio: Number((percent / 100).toFixed(6)),
|
|
123
|
+
...(resetsAt === null ? {} : { resetsAt }),
|
|
124
|
+
});
|
|
125
|
+
rateLimited ||= limit.severity === "critical" || percent >= 100;
|
|
95
126
|
}
|
|
96
|
-
const resetText = match?.[3];
|
|
97
|
-
const resetsAt = resetText === undefined ? null : resetInstant(resetText, referenceInstant);
|
|
98
|
-
windows.push({
|
|
99
|
-
label,
|
|
100
|
-
usedRatio: Number((usedPercent / 100).toFixed(6)),
|
|
101
|
-
...(resetsAt === null ? {} : { resetsAt }),
|
|
102
|
-
});
|
|
103
127
|
}
|
|
104
128
|
if (windows.length === 0) {
|
|
105
|
-
throw new Error("Claude returned no usable
|
|
129
|
+
throw new Error("Claude usage endpoint returned no usable windows");
|
|
106
130
|
}
|
|
107
131
|
return {
|
|
108
132
|
kind: "available",
|
|
133
|
+
...(plan === undefined ? {} : { plan }),
|
|
109
134
|
...(email === undefined ? {} : { email }),
|
|
110
|
-
rateLimited
|
|
135
|
+
rateLimited,
|
|
111
136
|
windows,
|
|
112
137
|
};
|
|
113
138
|
}
|
|
139
|
+
/** Extract Claude Code's explicit subscription tier from a confirmed login. */
|
|
140
|
+
export function claudeAccountPlan(payload) {
|
|
141
|
+
const authStatus = asRecord(payload);
|
|
142
|
+
if (authStatus?.loggedIn !== true || typeof authStatus.subscriptionType !== "string") {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const plan = authStatus.subscriptionType.trim();
|
|
146
|
+
return plan.length > 0 ? plan : undefined;
|
|
147
|
+
}
|
|
148
|
+
function isConfirmedNonSubscriptionLogin(authStatus) {
|
|
149
|
+
if (typeof authStatus.apiKeySource === "string") {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
// Claude Code reports externally supplied auth tokens (including custom API
|
|
153
|
+
// endpoints) as `oauth_token`. They authenticate inference, not a claude.ai
|
|
154
|
+
// subscription, so the profile-scoped usage endpoint is inapplicable.
|
|
155
|
+
return typeof authStatus.authMethod === "string"
|
|
156
|
+
&& authStatus.authMethod !== "claude.ai";
|
|
157
|
+
}
|
|
114
158
|
/**
|
|
115
|
-
* `claude
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* "type": "result",
|
|
121
|
-
* "total_cost_usd": 0,
|
|
122
|
-
* "usage": { "input_tokens": 0, "output_tokens": 0 },
|
|
123
|
-
* "result": "Total cost: $0.0000\nUsage: 0 input, 0 output, 0 cache read, 0 cache write"
|
|
124
|
-
* }
|
|
125
|
-
* ```
|
|
126
|
-
*
|
|
127
|
-
* With a subscription login, `result` contains account usage windows:
|
|
128
|
-
*
|
|
129
|
-
* ```json
|
|
130
|
-
* {
|
|
131
|
-
* "type": "result",
|
|
132
|
-
* "result": "You are currently using your subscription to power your Claude Code usage\n\nCurrent session: 7% used · resets Aug 21 at 7:39pm (Asia/Shanghai)\nCurrent week (all models): 0% used · resets Aug 28 at 2:59pm (Asia/Shanghai)\nCurrent week (Fable): 0% used"
|
|
133
|
-
* }
|
|
134
|
-
* ```
|
|
135
|
-
*
|
|
136
|
-
* Reset text has no year, so it is interpreted as the next occurrence in its
|
|
137
|
-
* named IANA time zone relative to when the command result is projected.
|
|
159
|
+
* Reads Claude account usage in two steps: `claude auth status --json` for the
|
|
160
|
+
* login gate and account email, then a single read-only request to Anthropic's
|
|
161
|
+
* structured usage endpoint using the persisted `/login` OAuth token. This
|
|
162
|
+
* replaces the older `claude -p /usage` subprocess, which was slower and only
|
|
163
|
+
* returned pre-rendered text.
|
|
138
164
|
*/
|
|
139
165
|
export const claudeAccountUsage = async (installation, options = {}) => {
|
|
140
166
|
if (installation.via !== "executable") {
|
|
@@ -156,30 +182,26 @@ export const claudeAccountUsage = async (installation, options = {}) => {
|
|
|
156
182
|
const email = authStatus?.loggedIn === true && typeof authStatus.email === "string"
|
|
157
183
|
? authStatus.email
|
|
158
184
|
: undefined;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
//
|
|
162
|
-
//
|
|
185
|
+
const plan = claudeAccountPlan(authStatus);
|
|
186
|
+
if (authStatus?.loggedIn === true && isConfirmedNonSubscriptionLogin(authStatus)) {
|
|
187
|
+
// Inference credentials take precedence over any claude.ai login, and
|
|
188
|
+
// non-subscription billing has no profile usage windows.
|
|
163
189
|
return { kind: "unsupported" };
|
|
164
190
|
}
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
if (/auth(?:entication)?\s*(?:missing|required)|log(?:ged)?\s*in/iu.test(output)) {
|
|
175
|
-
return { kind: "reauth_required" };
|
|
176
|
-
}
|
|
177
|
-
throw new Error("Claude account usage command failed");
|
|
191
|
+
const stored = await readStoredOAuth(timeoutMs);
|
|
192
|
+
if (stored === null || !stored.hasProfileScope) {
|
|
193
|
+
// No persisted profile-scoped login token means the usage endpoint would
|
|
194
|
+
// reject the request; treat it as needing a fresh `/login`.
|
|
195
|
+
return { kind: "reauth_required" };
|
|
196
|
+
}
|
|
197
|
+
const response = await fetchUsage(stored.accessToken, installation.version ?? "0.0.0", timeoutMs);
|
|
198
|
+
if (response.status === 401 || response.status === 403) {
|
|
199
|
+
return { kind: "reauth_required" };
|
|
178
200
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
throw new Error("Claude returned no account usage result");
|
|
201
|
+
if (!response.ok) {
|
|
202
|
+
throw new Error(`Claude usage endpoint returned HTTP ${response.status}`);
|
|
182
203
|
}
|
|
183
|
-
|
|
204
|
+
const payload = parseJson(await response.text());
|
|
205
|
+
return projectClaudeUsage(payload, email, plan);
|
|
184
206
|
};
|
|
185
207
|
//# sourceMappingURL=account-usage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/claude/account-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import type { AccountUsageReader, AccountUsageSnapshot } from "../../contracts/account-usage.js";
|
|
2
|
+
import { type AppServerClient } from "./app-server-client.js";
|
|
3
|
+
type ReadOutcome = {
|
|
4
|
+
readonly kind: "ok";
|
|
5
|
+
readonly result: unknown;
|
|
6
|
+
readonly email: string | undefined;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "reauth_required";
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "unsupported";
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "error";
|
|
13
|
+
};
|
|
14
|
+
type StartAppServerClient = (command: string) => AppServerClient;
|
|
2
15
|
/**
|
|
3
16
|
* Native evidence comes from `codex app-server --listen stdio://`, followed by
|
|
4
17
|
* `initialize` and `account/rateLimits/read`. `rateLimits` is the
|
|
@@ -48,5 +61,13 @@ export declare function projectCodexUsage(result: unknown, email?: string): Acco
|
|
|
48
61
|
* API-key account is dropped per the owner's `type === "chatgpt"` requirement.
|
|
49
62
|
*/
|
|
50
63
|
export declare function accountEmail(result: unknown): string | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* Codex exposes ChatGPT rate-limit windows only for a ChatGPT account. API-key
|
|
66
|
+
* and provider-managed runtimes are valid, but have no subscription usage for
|
|
67
|
+
* this capability to report.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isNonSubscriptionAccount(result: unknown): boolean;
|
|
70
|
+
export declare function readFromAppServer(command: string, timeoutMs: number, startClient?: StartAppServerClient): Promise<ReadOutcome>;
|
|
51
71
|
export declare const codexAccountUsage: AccountUsageReader;
|
|
72
|
+
export {};
|
|
52
73
|
//# sourceMappingURL=account-usage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EAErB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EAErB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGpF,KAAK,WAAW,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/B,KAAK,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,eAAe,CAAC;AAmEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,CA6CvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAMjE;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,oBAA2C,GACvD,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAED,eAAO,MAAM,iBAAiB,EAAE,kBAgB/B,CAAC"}
|
|
@@ -155,8 +155,20 @@ export function accountEmail(result) {
|
|
|
155
155
|
}
|
|
156
156
|
return account.email;
|
|
157
157
|
}
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Codex exposes ChatGPT rate-limit windows only for a ChatGPT account. API-key
|
|
160
|
+
* and provider-managed runtimes are valid, but have no subscription usage for
|
|
161
|
+
* this capability to report.
|
|
162
|
+
*/
|
|
163
|
+
export function isNonSubscriptionAccount(result) {
|
|
164
|
+
const root = asRecord(result);
|
|
165
|
+
const account = asRecord(root?.account);
|
|
166
|
+
return account?.type === "apiKey"
|
|
167
|
+
|| account?.type === "amazonBedrock"
|
|
168
|
+
|| root?.requiresOpenaiAuth === false;
|
|
169
|
+
}
|
|
170
|
+
export async function readFromAppServer(command, timeoutMs, startClient = startAppServerClient) {
|
|
171
|
+
const client = startClient(command);
|
|
160
172
|
const deadline = setTimeout(() => {
|
|
161
173
|
client.kill();
|
|
162
174
|
}, timeoutMs);
|
|
@@ -166,18 +178,23 @@ async function readFromAppServer(command, timeoutMs) {
|
|
|
166
178
|
capabilities: { experimentalApi: true },
|
|
167
179
|
});
|
|
168
180
|
client.notify("initialized", {});
|
|
169
|
-
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
let
|
|
181
|
+
// Read auth mode before the ChatGPT-only rate-limit endpoint. In API-key
|
|
182
|
+
// mode that endpoint rejects with "ChatGPT authentication required" even
|
|
183
|
+
// though Codex itself is correctly authenticated; treating that as expired
|
|
184
|
+
// OAuth would tell the user to perform a login that cannot fix the state.
|
|
185
|
+
let account = undefined;
|
|
174
186
|
try {
|
|
175
|
-
|
|
187
|
+
account = await client.request("account/read", {});
|
|
176
188
|
}
|
|
177
189
|
catch {
|
|
178
|
-
|
|
190
|
+
// Older app-servers may not expose account/read. Preserve the existing
|
|
191
|
+
// rate-limit read in that case instead of making identity mandatory.
|
|
192
|
+
}
|
|
193
|
+
if (isNonSubscriptionAccount(account)) {
|
|
194
|
+
return { kind: "unsupported" };
|
|
179
195
|
}
|
|
180
|
-
|
|
196
|
+
const result = await client.request("account/rateLimits/read", {});
|
|
197
|
+
return { kind: "ok", result, email: accountEmail(account) };
|
|
181
198
|
}
|
|
182
199
|
catch (error) {
|
|
183
200
|
const message = error instanceof Error ? error.message : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/codex/account-usage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/codex/account-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AccountUsageReader, AccountUsageSnapshot } from "../../contracts/account-usage.js";
|
|
2
|
+
/** Extract identity only from Grok's authenticated `_x.ai/auth/info` result. */
|
|
3
|
+
export declare function grokAccountEmail(result: unknown): string | undefined;
|
|
4
|
+
export declare function projectGrokUsage(result: unknown, email?: string): AccountUsageSnapshot;
|
|
5
|
+
export declare const grokAccountUsage: AccountUsageReader;
|
|
6
|
+
//# sourceMappingURL=account-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/grok/account-usage.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EAErB,MAAM,kCAAkC,CAAC;AAyB1C,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOpE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAoDtF;AAgFD,eAAO,MAAM,gBAAgB,EAAE,kBAkB9B,CAAC"}
|