@ironbee-ai/cli 0.14.0 → 0.14.1

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.
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readKeychainCredential = readKeychainCredential;
4
+ exports.parseClaudeOauthBlob = parseClaudeOauthBlob;
5
+ exports.resolveClaudeOauthToken = resolveClaudeOauthToken;
6
+ exports.readClaudeOauthToken = readClaudeOauthToken;
7
+ exports.mapOauthUsageToRateLimits = mapOauthUsageToRateLimits;
8
+ exports.oauthGet = oauthGet;
9
+ exports.fetchOauthUsage = fetchOauthUsage;
10
+ exports.summarizeOauthProfile = summarizeOauthProfile;
11
+ exports.fetchOauthProfile = fetchOauthProfile;
12
+ exports.fetchClaudeRateLimits = fetchClaudeRateLimits;
13
+ /**
14
+ * Claude OAuth access — read the Claude Code OAuth token and call OAuth-scoped
15
+ * Anthropic endpoints (`api.anthropic.com/api/oauth/*`).
16
+ *
17
+ * Why this exists: some signals are only reachable with the user's OAuth token.
18
+ * The first consumer is the statusline rate-limit fallback — the Claude Code
19
+ * statusline JSON only carries subscription `rate_limits` for Pro / Max plans
20
+ * (and only after the first API response); team / enterprise plans never get
21
+ * them. `/api/oauth/usage` returns the same utilization data regardless of
22
+ * plan. `/api/oauth/profile` (authoritative plan / org) is exposed for the
23
+ * `status` command and future consumers.
24
+ *
25
+ * This is the read side of the `claude.oauthAccess` capability (default-on,
26
+ * opt-out via `ironbee claude oauth-access disable`). We are a PASSIVE reader:
27
+ * we never refresh or write back the token (that's Claude Code's job — during
28
+ * an active session the keychain token is kept fresh, which is exactly when the
29
+ * statusline ticks). Every failure path returns null so callers never break.
30
+ *
31
+ * Credential-reading + keychain error mapping adapted from opencode-claude-auth.
32
+ */
33
+ const child_process_1 = require("child_process");
34
+ const fs_1 = require("fs");
35
+ const os_1 = require("os");
36
+ const path_1 = require("path");
37
+ const logger_1 = require("../../lib/logger");
38
+ const KEYCHAIN_SERVICE = "Claude Code-credentials";
39
+ const OAUTH_BASE = "https://api.anthropic.com/api/oauth";
40
+ /** The OAuth-scoped endpoints require this beta header (matches Claude Code). */
41
+ const OAUTH_BETA = "oauth-2025-04-20";
42
+ const DEFAULT_FETCH_TIMEOUT_MS = 2500;
43
+ /**
44
+ * Read the Claude Code credential blob from the macOS login Keychain via the
45
+ * `security` CLI. Exit-code mapping mirrors opencode-claude-auth's keychain.ts:
46
+ * 44 → item not found · 36 → keychain locked · 128 → access denied ·
47
+ * killed / ETIMEDOUT → timeout (seen on macOS Tahoe) · else → generic error.
48
+ *
49
+ * Using the `security` binary (not a node keychain lib) is deliberate: the
50
+ * Keychain ACL identifies the requesting app by code signature, and `security`
51
+ * is a stable Apple-signed binary — so once the user grants "Always Allow",
52
+ * the grant survives IronBee version updates (a node-lib request would re-key
53
+ * on the changing node/ironbee binary and re-prompt).
54
+ */
55
+ function readKeychainCredential() {
56
+ if (process.platform !== "darwin") {
57
+ return { ok: false, reason: "not_found", message: "Keychain is macOS-only." };
58
+ }
59
+ try {
60
+ const raw = (0, child_process_1.execFileSync)("/usr/bin/security", ["find-generic-password", "-s", KEYCHAIN_SERVICE, "-w"], { timeout: 2000, encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] }).trim();
61
+ return { ok: true, raw };
62
+ }
63
+ catch (err) {
64
+ const e = err;
65
+ if (e.killed === true || e.code === "ETIMEDOUT") {
66
+ return {
67
+ ok: false,
68
+ reason: "timeout",
69
+ message: "Keychain read timed out (seen on macOS Tahoe). Try restarting Keychain Access.",
70
+ };
71
+ }
72
+ if (e.status === 36) {
73
+ return {
74
+ ok: false,
75
+ reason: "locked",
76
+ message: "macOS Keychain is locked. Unlock it: security unlock-keychain ~/Library/Keychains/login.keychain-db",
77
+ };
78
+ }
79
+ if (e.status === 128) {
80
+ return {
81
+ ok: false,
82
+ reason: "denied",
83
+ message: "Keychain access was denied. Grant access when macOS prompts (choose \"Always Allow\").",
84
+ };
85
+ }
86
+ if (e.status === 44) {
87
+ return {
88
+ ok: false,
89
+ reason: "not_found",
90
+ message: "No \"Claude Code-credentials\" Keychain item. Sign in with Claude Code first.",
91
+ };
92
+ }
93
+ return {
94
+ ok: false,
95
+ reason: "error",
96
+ message: `Keychain read failed (exit ${e.status ?? "unknown"}). Try re-authenticating with Claude Code.`,
97
+ };
98
+ }
99
+ }
100
+ /**
101
+ * Parse a raw Claude Code OAuth credential blob. The blob is either
102
+ * `{ claudeAiOauth: {...} }` (the on-disk / keychain wrapper) or the inner
103
+ * object directly. Returns null when there's no usable `accessToken` (e.g. an
104
+ * `mcpOAuth`-only entry, which is an MCP server credential, not a user token).
105
+ */
106
+ function parseClaudeOauthBlob(raw) {
107
+ let parsed;
108
+ try {
109
+ parsed = JSON.parse(raw);
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ if (parsed === null || typeof parsed !== "object") {
115
+ return null;
116
+ }
117
+ const outer = parsed;
118
+ const inner = outer.claudeAiOauth;
119
+ const data = inner !== null && typeof inner === "object"
120
+ ? inner
121
+ : outer;
122
+ if (typeof data.accessToken !== "string" || data.accessToken.length === 0) {
123
+ return null;
124
+ }
125
+ return {
126
+ accessToken: data.accessToken,
127
+ expiresAt: typeof data.expiresAt === "number" ? data.expiresAt : undefined,
128
+ subscriptionType: typeof data.subscriptionType === "string" ? data.subscriptionType : undefined,
129
+ };
130
+ }
131
+ /** Read the credential blob from `~/.claude/.credentials.json` (Linux/Windows; macOS fallback). */
132
+ function readFileCredentialRaw(homeOverride) {
133
+ const credPath = (0, path_1.join)(homeOverride ?? (0, os_1.homedir)(), ".claude", ".credentials.json");
134
+ if (!(0, fs_1.existsSync)(credPath)) {
135
+ return null;
136
+ }
137
+ try {
138
+ return (0, fs_1.readFileSync)(credPath, "utf-8");
139
+ }
140
+ catch (e) {
141
+ logger_1.logger.debug(`oauth: credentials.json read failed: ${e instanceof Error ? e.message : e}`);
142
+ return null;
143
+ }
144
+ }
145
+ function resolveClaudeOauthToken(homeOverride) {
146
+ let diag;
147
+ if (process.platform === "darwin") {
148
+ const kc = readKeychainCredential();
149
+ if (kc.ok) {
150
+ const token = parseClaudeOauthBlob(kc.raw);
151
+ if (token) {
152
+ return { token, source: "keychain" };
153
+ }
154
+ diag = "Keychain item found but no usable accessToken in it.";
155
+ }
156
+ else {
157
+ diag = kc.message;
158
+ }
159
+ }
160
+ const fileRaw = readFileCredentialRaw(homeOverride);
161
+ if (fileRaw) {
162
+ const token = parseClaudeOauthBlob(fileRaw);
163
+ if (token) {
164
+ return { token, source: "file" };
165
+ }
166
+ }
167
+ return { token: null, source: "none", diag };
168
+ }
169
+ /**
170
+ * Quiet cross-platform token read for the hot path (statusline hook). Tries the
171
+ * Keychain (macOS) then the file, returning null on any failure without
172
+ * surfacing diagnostics.
173
+ */
174
+ function readClaudeOauthToken(homeOverride) {
175
+ return resolveClaudeOauthToken(homeOverride).token;
176
+ }
177
+ /** One rolling window: `{ utilization, resets_at }` → RateLimitWindow (epoch ms). */
178
+ function mapWindow(w) {
179
+ if (w === null || typeof w !== "object") {
180
+ return undefined;
181
+ }
182
+ const o = w;
183
+ const util = o.utilization;
184
+ if (typeof util !== "number" || !Number.isFinite(util)) {
185
+ return undefined;
186
+ }
187
+ // The endpoint reports `resets_at` as an ISO-8601 string (with tz); convert
188
+ // to epoch ms to match every IronBee timestamp. Null/absent → window unusable.
189
+ const resetsAt = o.resets_at;
190
+ if (typeof resetsAt !== "string") {
191
+ return undefined;
192
+ }
193
+ const ms = Date.parse(resetsAt);
194
+ if (!Number.isFinite(ms)) {
195
+ return undefined;
196
+ }
197
+ return { used_percentage: util, resets_at: ms };
198
+ }
199
+ /** Map the raw `/api/oauth/usage` body onto the windows we ship. Null when neither maps. */
200
+ function mapOauthUsageToRateLimits(usage) {
201
+ if (usage === null || typeof usage !== "object") {
202
+ return null;
203
+ }
204
+ const o = usage;
205
+ const five = mapWindow(o.five_hour);
206
+ const seven = mapWindow(o.seven_day);
207
+ if (!five && !seven) {
208
+ return null;
209
+ }
210
+ const out = {};
211
+ if (five) {
212
+ out.five_hour = five;
213
+ }
214
+ if (seven) {
215
+ out.seven_day = seven;
216
+ }
217
+ return out;
218
+ }
219
+ /**
220
+ * Generic GET against an OAuth-scoped endpoint (`/usage`, `/profile`, …) with
221
+ * the access token + required beta header. Bounded by `timeoutMs`
222
+ * (AbortController) so a caller on the statusline path never hangs. Returns the
223
+ * parsed JSON body, or null on any failure (non-2xx, timeout, malformed body).
224
+ */
225
+ async function oauthGet(path, accessToken, timeoutMs = DEFAULT_FETCH_TIMEOUT_MS) {
226
+ const controller = new AbortController();
227
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
228
+ try {
229
+ const res = await fetch(`${OAUTH_BASE}${path}`, {
230
+ headers: {
231
+ authorization: `Bearer ${accessToken}`,
232
+ "anthropic-beta": OAUTH_BETA,
233
+ },
234
+ signal: controller.signal,
235
+ });
236
+ if (!res.ok) {
237
+ logger_1.logger.debug(`oauth: GET ${path} → HTTP ${res.status}`);
238
+ return null;
239
+ }
240
+ return await res.json();
241
+ }
242
+ catch (e) {
243
+ logger_1.logger.debug(`oauth: GET ${path} failed: ${e instanceof Error ? e.message : e}`);
244
+ return null;
245
+ }
246
+ finally {
247
+ clearTimeout(timer);
248
+ }
249
+ }
250
+ /** Query `/api/oauth/usage` with a resolved token and map to rate-limit windows. */
251
+ async function fetchOauthUsage(accessToken, timeoutMs = DEFAULT_FETCH_TIMEOUT_MS) {
252
+ return mapOauthUsageToRateLimits(await oauthGet("/usage", accessToken, timeoutMs));
253
+ }
254
+ function summarizeOauthProfile(profile) {
255
+ if (profile === null || typeof profile !== "object") {
256
+ return null;
257
+ }
258
+ const o = profile;
259
+ const account = o.account !== null && typeof o.account === "object" ? o.account : {};
260
+ const org = o.organization !== null && typeof o.organization === "object" ? o.organization : {};
261
+ const str = (v) => typeof v === "string" && v.length > 0 ? v : undefined;
262
+ return {
263
+ email: str(account.email),
264
+ organizationType: str(org.organization_type),
265
+ rateLimitTier: str(org.rate_limit_tier),
266
+ subscriptionStatus: str(org.subscription_status),
267
+ };
268
+ }
269
+ /** Query `/api/oauth/profile` with a resolved token and summarize it. */
270
+ async function fetchOauthProfile(accessToken, timeoutMs = DEFAULT_FETCH_TIMEOUT_MS) {
271
+ return summarizeOauthProfile(await oauthGet("/profile", accessToken, timeoutMs));
272
+ }
273
+ /**
274
+ * Read the token + query `/api/oauth/usage`, returning the mapped rate limits.
275
+ * The convenience wrapper the statusline hook calls. Returns null when no token
276
+ * is available, the token is already expired (skip the doomed call — we don't
277
+ * refresh), or the fetch fails.
278
+ */
279
+ async function fetchClaudeRateLimits(opts) {
280
+ const token = readClaudeOauthToken(opts?.homeOverride);
281
+ if (!token) {
282
+ return null;
283
+ }
284
+ if (typeof token.expiresAt === "number" && token.expiresAt <= Date.now()) {
285
+ logger_1.logger.debug("oauth: token expired; skipping /usage (we never refresh).");
286
+ return null;
287
+ }
288
+ return fetchOauthUsage(token.accessToken, opts?.timeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS);
289
+ }
290
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/clients/claude/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `ironbee claude <subcommand>` — Claude-specific capabilities.
3
+ *
4
+ * `oauth-access <enable|disable|status>` — manage the `claude.oauthAccess`
5
+ * capability: whether IronBee may read the Claude Code OAuth token (macOS
6
+ * Keychain / `~/.claude/.credentials.json`) and call OAuth-scoped Anthropic
7
+ * endpoints. Default-on. The first consumer is the statusline rate-limit
8
+ * fallback (`/api/oauth/usage` fills `rate_limits` for team / enterprise plans
9
+ * the statusline JSON never carries them for).
10
+ *
11
+ * `enable` additionally PRIMES the macOS Keychain permission: it reads the
12
+ * token NOW, in this interactive terminal, so any "… wants to use the
13
+ * confidential information stored in 'Claude Code-credentials' …" prompt
14
+ * appears at a deliberate moment (choose "Always Allow"). Once granted, the
15
+ * statusline hook reads silently — and the grant survives IronBee version
16
+ * updates because the Keychain ACL keys on the stable `/usr/bin/security`
17
+ * binary, not on node/ironbee.
18
+ *
19
+ * Default target is the GLOBAL config (`~/.ironbee/config.json`) — the OAuth
20
+ * token is machine-global (one Keychain, all projects), so a machine-wide
21
+ * setting fits. `--local` / `--project` (with `-p`) narrow to one project's
22
+ * layer. `oauthAccess` is NOT artifact-affecting, so no client rerender runs.
23
+ */
24
+ import { Command } from "commander";
25
+ export declare const oauthAccessEnableCommand: Command;
26
+ export declare const oauthAccessDisableCommand: Command;
27
+ export declare const oauthAccessStatusCommand: Command;
28
+ export declare const oauthAccessCommand: Command;
29
+ export declare const claudeCommand: Command;
30
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/commands/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0GpC,eAAO,MAAM,wBAAwB,EAAE,OAYjC,CAAC;AAEP,eAAO,MAAM,yBAAyB,EAAE,OAYlC,CAAC;AAEP,eAAO,MAAM,wBAAwB,EAAE,OA+CjC,CAAC;AAEP,eAAO,MAAM,kBAAkB,EAAE,OAIQ,CAAC;AAE1C,eAAO,MAAM,aAAa,EAAE,OAEO,CAAC"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ /**
3
+ * `ironbee claude <subcommand>` — Claude-specific capabilities.
4
+ *
5
+ * `oauth-access <enable|disable|status>` — manage the `claude.oauthAccess`
6
+ * capability: whether IronBee may read the Claude Code OAuth token (macOS
7
+ * Keychain / `~/.claude/.credentials.json`) and call OAuth-scoped Anthropic
8
+ * endpoints. Default-on. The first consumer is the statusline rate-limit
9
+ * fallback (`/api/oauth/usage` fills `rate_limits` for team / enterprise plans
10
+ * the statusline JSON never carries them for).
11
+ *
12
+ * `enable` additionally PRIMES the macOS Keychain permission: it reads the
13
+ * token NOW, in this interactive terminal, so any "… wants to use the
14
+ * confidential information stored in 'Claude Code-credentials' …" prompt
15
+ * appears at a deliberate moment (choose "Always Allow"). Once granted, the
16
+ * statusline hook reads silently — and the grant survives IronBee version
17
+ * updates because the Keychain ACL keys on the stable `/usr/bin/security`
18
+ * binary, not on node/ironbee.
19
+ *
20
+ * Default target is the GLOBAL config (`~/.ironbee/config.json`) — the OAuth
21
+ * token is machine-global (one Keychain, all projects), so a machine-wide
22
+ * setting fits. `--local` / `--project` (with `-p`) narrow to one project's
23
+ * layer. `oauthAccess` is NOT artifact-affecting, so no client rerender runs.
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.claudeCommand = exports.oauthAccessCommand = exports.oauthAccessStatusCommand = exports.oauthAccessDisableCommand = exports.oauthAccessEnableCommand = void 0;
27
+ const commander_1 = require("commander");
28
+ const fs_1 = require("fs");
29
+ const path_1 = require("path");
30
+ const config_1 = require("../lib/config");
31
+ const logger_1 = require("../lib/logger");
32
+ const output_1 = require("../lib/output");
33
+ const oauth_1 = require("../clients/claude/oauth");
34
+ /** Interactive (non-hot-path) timeout for the probe calls. */
35
+ const PROBE_TIMEOUT_MS = 8000;
36
+ function attachTargetOptions(cmd) {
37
+ return cmd
38
+ .option("-p, --project-dir <dir>", "Project directory for --local / --project (default: cwd).")
39
+ .option("-g, --global", "Write to the global config (~/.ironbee/config.json). Default.")
40
+ .option("--project", "Write to the committed project config (<project>/.ironbee/config.json).")
41
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json).");
42
+ }
43
+ /** Resolve the write target. Default GLOBAL (machine-wide). At most one of -g/--project/--local. */
44
+ function resolveTarget(opts) {
45
+ const flags = [opts.global, opts.project, opts.local].filter((f) => f === true).length;
46
+ if (flags > 1) {
47
+ throw new Error("Pass at most one of -g / --global, --project, --local.");
48
+ }
49
+ if (opts.local === true) {
50
+ return { target: "local", projectDir: opts.projectDir ?? process.cwd() };
51
+ }
52
+ if (opts.project === true) {
53
+ return { target: "project", projectDir: opts.projectDir ?? process.cwd() };
54
+ }
55
+ return { target: "global" };
56
+ }
57
+ function readConfigFile(path) {
58
+ if (!(0, fs_1.existsSync)(path)) {
59
+ return {};
60
+ }
61
+ try {
62
+ return JSON.parse((0, fs_1.readFileSync)(path, "utf-8"));
63
+ }
64
+ catch (e) {
65
+ throw new Error(`Config at ${path} is not valid JSON: ${e instanceof Error ? e.message : e}`);
66
+ }
67
+ }
68
+ function writeConfigFile(path, config) {
69
+ (0, fs_1.mkdirSync)((0, path_1.join)(path, ".."), { recursive: true });
70
+ (0, fs_1.writeFileSync)(path, JSON.stringify(config, null, 2) + "\n");
71
+ }
72
+ /** Set `claude.oauthAccess.enable` in one layer file, preserving sibling keys (e.g. usageTtlSeconds). */
73
+ function writeOauthAccessEnable(target, projectDir, enable) {
74
+ const path = (0, config_1.getTargetConfigPath)(target, projectDir);
75
+ const onDisk = readConfigFile(path);
76
+ const claude = { ...(onDisk.claude ?? {}) };
77
+ claude.oauthAccess = { ...(claude.oauthAccess ?? {}), enable };
78
+ writeConfigFile(path, { ...onDisk, claude });
79
+ return path;
80
+ }
81
+ /** Read the token interactively (this is where the macOS Keychain prompt appears) + report. */
82
+ async function primeAndReport() {
83
+ const resolution = (0, oauth_1.resolveClaudeOauthToken)();
84
+ if (!resolution.token) {
85
+ console.log(` ${output_1.pc.yellow("⚠")} Could not read the Claude OAuth token${resolution.diag ? `: ${resolution.diag}` : "."}`);
86
+ console.log(` ${output_1.pc.dim("The flag is set, but the rate-limit fallback won't work until the token is readable.")}`);
87
+ return;
88
+ }
89
+ const expired = typeof resolution.token.expiresAt === "number" && resolution.token.expiresAt <= Date.now();
90
+ console.log(` ${output_1.pc.green("✓")} Token readable from ${output_1.pc.bold(resolution.source)}${expired ? output_1.pc.yellow(" (currently expired — Claude Code refreshes it during an active session)") : ""}.`);
91
+ if (expired) {
92
+ return;
93
+ }
94
+ // End-to-end probe so the user knows the whole path works (and sees their plan).
95
+ const profile = await (0, oauth_1.fetchOauthProfile)(resolution.token.accessToken, PROBE_TIMEOUT_MS);
96
+ if (profile) {
97
+ const plan = profile.organizationType ?? "unknown";
98
+ const tier = profile.rateLimitTier ? ` / ${profile.rateLimitTier}` : "";
99
+ console.log(` ${output_1.pc.green("✓")} /api/oauth endpoints reachable (plan: ${output_1.pc.bold(plan)}${output_1.pc.dim(tier)}).`);
100
+ }
101
+ else {
102
+ console.log(` ${output_1.pc.yellow("⚠")} Token read OK but the /api/oauth probe failed (network / endpoint). The hook degrades gracefully.`);
103
+ }
104
+ }
105
+ exports.oauthAccessEnableCommand = attachTargetOptions(new commander_1.Command("enable"))
106
+ .description("Enable OAuth access (default-on) and PRIME the macOS Keychain permission — reads the token now so any prompt appears in this terminal (choose \"Always Allow\"). Default target is the global config.")
107
+ .action(async (opts) => {
108
+ try {
109
+ const { target, projectDir } = resolveTarget(opts);
110
+ const path = writeOauthAccessEnable(target, projectDir, true);
111
+ console.log(`${output_1.pc.green("✓")} OAuth access enabled in ${target} config (${output_1.pc.dim(path)}).`);
112
+ await primeAndReport();
113
+ }
114
+ catch (e) {
115
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
116
+ process.exit(1);
117
+ }
118
+ });
119
+ exports.oauthAccessDisableCommand = attachTargetOptions(new commander_1.Command("disable"))
120
+ .description("Disable OAuth access — IronBee will not read the Claude OAuth token or call any /api/oauth endpoint. Writes claude.oauthAccess.enable: false. Default target is the global config.")
121
+ .action((opts) => {
122
+ try {
123
+ const { target, projectDir } = resolveTarget(opts);
124
+ const path = writeOauthAccessEnable(target, projectDir, false);
125
+ console.log(`${output_1.pc.green("✓")} OAuth access disabled in ${target} config (${output_1.pc.dim(path)}).`);
126
+ console.log(` ${output_1.pc.dim("The statusline rate-limit fallback (and any future OAuth consumer) is now off.")}`);
127
+ }
128
+ catch (e) {
129
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
130
+ process.exit(1);
131
+ }
132
+ });
133
+ exports.oauthAccessStatusCommand = new commander_1.Command("status")
134
+ .option("-p, --project-dir <dir>", "Project directory for the merged-config read (default: cwd).")
135
+ .description("Show OAuth-access status: capability flag, token readability + expiry, and a live /api/oauth probe (plan + current rate-limit utilization).")
136
+ .action(async (opts) => {
137
+ try {
138
+ const projectDir = opts.projectDir ?? process.cwd();
139
+ const cfg = (0, config_1.loadConfig)(projectDir);
140
+ const enabled = (0, config_1.getClaudeOauthAccessEnabled)(cfg);
141
+ console.log(`Capability: ${enabled ? output_1.pc.green("enabled") : output_1.pc.red("disabled")} ${output_1.pc.dim("(claude.oauthAccess.enable)")}`);
142
+ console.log(`Usage TTL: ${output_1.pc.bold(String((0, config_1.getClaudeOauthAccessUsageTtlSeconds)(cfg)))}s ${output_1.pc.dim("(statusline fetch cache)")}`);
143
+ const resolution = (0, oauth_1.resolveClaudeOauthToken)();
144
+ if (!resolution.token) {
145
+ console.log(`Token: ${output_1.pc.red("unavailable")}${resolution.diag ? ` ${output_1.pc.dim(`(${resolution.diag})`)}` : ""}`);
146
+ return;
147
+ }
148
+ const t = resolution.token;
149
+ const expired = typeof t.expiresAt === "number" && t.expiresAt <= Date.now();
150
+ const expiryNote = typeof t.expiresAt === "number"
151
+ ? ` ${output_1.pc.dim(`(${expired ? "expired" : "valid"} — ${new Date(t.expiresAt).toISOString()})`)}`
152
+ : "";
153
+ console.log(`Token: ${output_1.pc.green("readable")} ${output_1.pc.dim(`from ${resolution.source}`)}${expiryNote}`);
154
+ if (expired) {
155
+ console.log(`Probe: ${output_1.pc.dim("skipped (token expired; run an active Claude Code turn to refresh it)")}`);
156
+ return;
157
+ }
158
+ const [profile, usage] = await Promise.all([
159
+ (0, oauth_1.fetchOauthProfile)(t.accessToken, PROBE_TIMEOUT_MS),
160
+ (0, oauth_1.fetchOauthUsage)(t.accessToken, PROBE_TIMEOUT_MS),
161
+ ]);
162
+ if (profile) {
163
+ console.log(`Plan: ${output_1.pc.bold(profile.organizationType ?? "unknown")}${profile.rateLimitTier ? output_1.pc.dim(` / ${profile.rateLimitTier}`) : ""}${profile.email ? output_1.pc.dim(` · ${profile.email}`) : ""}`);
164
+ }
165
+ if (usage) {
166
+ const fmt = (w) => w ? `${w.used_percentage}% ${output_1.pc.dim(`(resets ${new Date(w.resets_at).toISOString()})`)}` : output_1.pc.dim("n/a");
167
+ console.log(`5h window: ${fmt(usage.five_hour)}`);
168
+ console.log(`7d window: ${fmt(usage.seven_day)}`);
169
+ }
170
+ else if (!profile) {
171
+ console.log(`Probe: ${output_1.pc.yellow("/api/oauth unreachable")} ${output_1.pc.dim("(network / endpoint)")}`);
172
+ }
173
+ }
174
+ catch (e) {
175
+ logger_1.logger.debug(`oauth-access status failed: ${e instanceof Error ? e.message : e}`);
176
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
177
+ process.exit(1);
178
+ }
179
+ });
180
+ exports.oauthAccessCommand = new commander_1.Command("oauth-access")
181
+ .description("Manage Claude OAuth access (enable / disable / status). Lets IronBee read the Claude Code OAuth token and fill statusline rate-limits for plans the statusline JSON omits them for (team / enterprise).")
182
+ .addCommand(exports.oauthAccessEnableCommand)
183
+ .addCommand(exports.oauthAccessDisableCommand)
184
+ .addCommand(exports.oauthAccessStatusCommand);
185
+ exports.claudeCommand = new commander_1.Command("claude")
186
+ .description("Claude-specific capabilities (Claude-only).")
187
+ .addCommand(exports.oauthAccessCommand);
188
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/commands/claude.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ const register_1 = require("./commands/register");
26
26
  const unregister_1 = require("./commands/unregister");
27
27
  const import_1 = require("./commands/import");
28
28
  const otel_1 = require("./commands/otel");
29
+ const claude_1 = require("./commands/claude");
29
30
  const login_1 = require("./commands/login");
30
31
  const queue_2 = require("./queue");
31
32
  const icon_1 = require("./lib/icon");
@@ -56,6 +57,7 @@ program.addCommand(verification_1.verificationCommand);
56
57
  program.addCommand(telemetry_1.telemetryCommand);
57
58
  program.addCommand(statusline_1.statuslineCommand);
58
59
  program.addCommand(otel_1.otelCommand);
60
+ program.addCommand(claude_1.claudeCommand);
59
61
  program.addCommand(config_1.configCommand);
60
62
  program.addCommand(tui_1.tuiCommand);
61
63
  program.addCommand(register_1.registerCommand);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -307,6 +307,32 @@ export interface IronBeeConfig {
307
307
  /** Coalesce `session_context` emits per session (seconds; 0 = every request). Default 0. */
308
308
  emitMinIntervalSeconds?: number;
309
309
  };
310
+ /**
311
+ * Claude-specific capabilities (Claude-only; Cursor's credential store is
312
+ * opaque to us). `oauthAccess` gates whether IronBee may read the Claude
313
+ * Code OAuth token (macOS Keychain / `~/.claude/.credentials.json`) and
314
+ * call OAuth-scoped Anthropic endpoints (`api.anthropic.com/api/oauth/*`).
315
+ * The first consumer is the statusline rate-limit fallback — when the
316
+ * statusline JSON carries no `rate_limits` (team / enterprise plans, or
317
+ * before the first API response) IronBee fetches them from
318
+ * `/api/oauth/usage`. Default-on; opt out with `enable: false` or
319
+ * `ironbee claude oauth-access disable`. Machine-global — the command
320
+ * writes the global layer by default (one Keychain / token across all
321
+ * projects); `--local` / `--project` narrow it to one project's layer.
322
+ */
323
+ claude?: {
324
+ oauthAccess?: {
325
+ /** Master switch (default true — opt out with false). */
326
+ enable?: boolean;
327
+ /**
328
+ * TTL (seconds) for the statusline rate-limit fetch cache. The
329
+ * `/api/oauth/usage` call + credential read fire at most once per
330
+ * this interval even when the statusline ticks far more often.
331
+ * Default 60.
332
+ */
333
+ usageTtlSeconds?: number;
334
+ };
335
+ };
310
336
  /** Allow additional config fields (e.g. `browserDevTools` / `nodeDevTools`). */
311
337
  [key: string]: unknown;
312
338
  }
@@ -591,6 +617,21 @@ export declare function getStatusLineRenderDefault(config: IronBeeConfig): boole
591
617
  * skip-if-unchanged). Default 10; `0` (or negative) disables the throttle.
592
618
  */
593
619
  export declare function getStatusLineEmitMinIntervalSeconds(config: IronBeeConfig): number;
620
+ /** Default TTL (seconds) for the statusline OAuth rate-limit fetch cache. */
621
+ export declare const DEFAULT_OAUTH_USAGE_TTL_SECONDS: number;
622
+ /**
623
+ * Whether IronBee may read the Claude Code OAuth token and call OAuth-scoped
624
+ * Anthropic endpoints. Default-on (inverse semantics — opt out with
625
+ * `claude.oauthAccess.enable: false`). Gates the statusline rate-limit fallback
626
+ * and any future OAuth consumer. Claude-only.
627
+ */
628
+ export declare function getClaudeOauthAccessEnabled(config: IronBeeConfig): boolean;
629
+ /**
630
+ * TTL (seconds) for the statusline rate-limit fetch cache — the `/api/oauth/usage`
631
+ * call + credential read fire at most once per this interval. Default 60;
632
+ * negative is clamped to the default (0 means "every tick", honored).
633
+ */
634
+ export declare function getClaudeOauthAccessUsageTtlSeconds(config: IronBeeConfig): number;
594
635
  /** Default loopback port the OTEL collector daemon binds to. */
595
636
  export declare const DEFAULT_OTEL_PORT: number;
596
637
  /** Default daemon idle-reap threshold (seconds). */