@bookedsolid/reagent 0.15.6 → 0.15.9
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/dist/cli/commands/account.d.ts.map +1 -1
- package/dist/cli/commands/account.js +313 -38
- package/dist/cli/commands/account.js.map +1 -1
- package/dist/platform/keychain.d.ts +62 -1
- package/dist/platform/keychain.d.ts.map +1 -1
- package/dist/platform/keychain.js +182 -31
- package/dist/platform/keychain.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"AA+BA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C/D"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { execFileSync, spawnSync } from 'node:child_process';
|
|
1
|
+
import { execFileSync, spawnSync, spawn } from 'node:child_process';
|
|
2
2
|
import { readFileSync, writeFileSync, mkdirSync, openSync, closeSync, unlinkSync, statSync, } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { parseFlag } from '../utils.js';
|
|
6
6
|
import { loadAccounts, upsertAccount, removeAccount as removeAccountConfig, } from '../../config/accounts.js';
|
|
7
|
-
import {
|
|
7
|
+
import { keychainSetRaw, keychainGetRaw, keychainDelete, keychainExists, readClaudeCodeCredentialRaw, parseCredentialForDisplay, rawCredentialHasToken, extractRefreshToken, mergeIntoClaudeCodeSlot, writeClaudeCodeCredential as writeClaudeCredential, } from '../../platform/keychain.js';
|
|
8
8
|
export function runAccount(args) {
|
|
9
9
|
const [subcommand, ...rest] = args;
|
|
10
10
|
if (!subcommand || subcommand === 'help' || subcommand === '--help') {
|
|
@@ -136,8 +136,8 @@ function accountAdd(args) {
|
|
|
136
136
|
process.exit(1);
|
|
137
137
|
}
|
|
138
138
|
console.log('\nStep 3: Reading new credential from keychain...');
|
|
139
|
-
const
|
|
140
|
-
if (!
|
|
139
|
+
const newCredentialRaw = readClaudeCodeCredentialRaw();
|
|
140
|
+
if (!newCredentialRaw || !rawCredentialHasToken(newCredentialRaw)) {
|
|
141
141
|
console.error('Failed to read new credential from Claude Code keychain entry.');
|
|
142
142
|
if (backupRaw) {
|
|
143
143
|
console.log('Restoring original credential...');
|
|
@@ -146,7 +146,9 @@ function accountAdd(args) {
|
|
|
146
146
|
process.exit(1);
|
|
147
147
|
}
|
|
148
148
|
console.log('Step 4: Storing under reagent keychain entry...');
|
|
149
|
-
|
|
149
|
+
// Store the complete raw blob (including wrapper) so all OAuth metadata
|
|
150
|
+
// needed for token refresh (tokenEndpoint, clientId, etc.) is preserved.
|
|
151
|
+
keychainSetRaw(keychainService, newCredentialRaw);
|
|
150
152
|
console.log('Step 5: Restoring original Claude Code credential...');
|
|
151
153
|
if (backupRaw) {
|
|
152
154
|
writeClaudeCredential(backupRaw);
|
|
@@ -200,18 +202,20 @@ function accountSwitch(args) {
|
|
|
200
202
|
}
|
|
201
203
|
try {
|
|
202
204
|
if (clearFlag) {
|
|
205
|
+
stopCredentialSyncDaemon();
|
|
203
206
|
const syncResult = syncBackActiveCredential();
|
|
204
207
|
if (syncResult === 'skipped') {
|
|
205
208
|
console.error('Warning: could not sync credential for previously active account.');
|
|
206
209
|
}
|
|
207
210
|
setActiveAccount(null);
|
|
208
|
-
const
|
|
209
|
-
if (!
|
|
211
|
+
const defaultCredRaw = keychainGetRaw('reagent-__default__');
|
|
212
|
+
if (!defaultCredRaw) {
|
|
210
213
|
console.error('No saved default credential found.');
|
|
211
214
|
console.error('Run: claude auth login to establish a default session.');
|
|
212
215
|
process.exit(1);
|
|
213
216
|
}
|
|
214
|
-
|
|
217
|
+
// Write back the raw blob exactly as stored — no parse/re-wrap
|
|
218
|
+
writeClaudeCredential(defaultCredRaw);
|
|
215
219
|
console.log('Restored default Claude Code credential.');
|
|
216
220
|
console.log('Restart any active Claude Code sessions to pick up the change.');
|
|
217
221
|
return;
|
|
@@ -234,38 +238,54 @@ function accountSwitch(args) {
|
|
|
234
238
|
if (syncResult === 'skipped') {
|
|
235
239
|
console.error('Warning: could not sync credential for previously active account.');
|
|
236
240
|
}
|
|
237
|
-
|
|
238
|
-
|
|
241
|
+
// Read the full raw blob for writing to Claude Code, and parse for expiry check.
|
|
242
|
+
const credentialRaw = keychainGetRaw(account.keychain_service);
|
|
243
|
+
if (!credentialRaw || !rawCredentialHasToken(credentialRaw)) {
|
|
239
244
|
console.error(`No credential found for "${name}". Run: npx @bookedsolid/reagent@latest account rotate ${name}`);
|
|
240
245
|
process.exit(1);
|
|
241
246
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
247
|
+
// Parse on-the-fly for expiry check only
|
|
248
|
+
const credentialForDisplay = parseCredentialForDisplay(credentialRaw);
|
|
249
|
+
if (credentialForDisplay?.expiresAt) {
|
|
250
|
+
const expiresAt = typeof credentialForDisplay.expiresAt === 'number'
|
|
251
|
+
? credentialForDisplay.expiresAt
|
|
252
|
+
: Date.parse(String(credentialForDisplay.expiresAt));
|
|
246
253
|
if (expiresAt < Date.now()) {
|
|
247
254
|
console.error(`\u26A0 Token for "${name}" is EXPIRED. Run: npx @bookedsolid/reagent@latest account rotate ${name}`);
|
|
248
255
|
process.exit(1);
|
|
249
256
|
}
|
|
250
257
|
}
|
|
251
|
-
// Save current Claude Code credential as default — but only when
|
|
252
|
-
//
|
|
253
|
-
//
|
|
254
|
-
|
|
258
|
+
// Save current Claude Code credential as default — but only when:
|
|
259
|
+
// 1. REAGENT_ACCOUNT is unset in the shell (not already switched), AND
|
|
260
|
+
// 2. active-account file is empty (no previous switch left CC in a switched state)
|
|
261
|
+
// This double-check prevents saving a switched account's credential as the default
|
|
262
|
+
// when a new terminal runs rswitch without having run --clear first.
|
|
263
|
+
if (!process.env.REAGENT_ACCOUNT && !getActiveAccount()) {
|
|
255
264
|
try {
|
|
256
|
-
const currentRaw =
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
265
|
+
const currentRaw = readClaudeCodeCredentialRaw();
|
|
266
|
+
if (currentRaw && rawCredentialHasToken(currentRaw)) {
|
|
267
|
+
// Store the complete raw blob so --clear restores it exactly
|
|
268
|
+
keychainSetRaw('reagent-__default__', currentRaw);
|
|
269
|
+
}
|
|
260
270
|
}
|
|
261
271
|
catch {
|
|
262
272
|
// No existing Claude Code credential — nothing to save
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
|
|
275
|
+
// Merge into Claude Code's keychain slot: overlay claudeAiOauth while
|
|
276
|
+
// preserving sibling keys (mcpOAuth, etc.) and injecting our marker.
|
|
277
|
+
mergeIntoClaudeCodeSlot(credentialRaw, name);
|
|
268
278
|
setActiveAccount(name);
|
|
279
|
+
// Record the refresh token we just wrote so the sync daemon can detect
|
|
280
|
+
// when Claude Code has refreshed it (rotating refresh tokens).
|
|
281
|
+
const writtenRefreshToken = extractRefreshToken(credentialRaw);
|
|
282
|
+
if (writtenRefreshToken) {
|
|
283
|
+
saveWrittenRefreshToken(writtenRefreshToken);
|
|
284
|
+
}
|
|
285
|
+
// Start the background credential sync daemon. It will periodically
|
|
286
|
+
// read Claude Code's keychain and write refreshed tokens back to the
|
|
287
|
+
// reagent account store, preventing stale refresh token buildup.
|
|
288
|
+
startCredentialSyncDaemon();
|
|
269
289
|
console.log(`Switched to account: ${name}`);
|
|
270
290
|
console.log('Restart any active Claude Code sessions to pick up the change.');
|
|
271
291
|
}
|
|
@@ -293,7 +313,8 @@ function accountEnv(args) {
|
|
|
293
313
|
console.error(`Account "${name}" not found. Run: npx @bookedsolid/reagent@latest account list`);
|
|
294
314
|
process.exit(1);
|
|
295
315
|
}
|
|
296
|
-
const
|
|
316
|
+
const credRaw = keychainGetRaw(account.keychain_service);
|
|
317
|
+
const credential = credRaw ? parseCredentialForDisplay(credRaw) : null;
|
|
297
318
|
if (!credential) {
|
|
298
319
|
console.error(`No credential found in keychain for "${name}" (service: ${account.keychain_service})`);
|
|
299
320
|
console.error(`Run: reagent account rotate ${name}`);
|
|
@@ -340,7 +361,8 @@ function accountCheck(args) {
|
|
|
340
361
|
console.log(` ! ${name}: not found in accounts.yaml`);
|
|
341
362
|
continue;
|
|
342
363
|
}
|
|
343
|
-
const
|
|
364
|
+
const credRaw = keychainGetRaw(account.keychain_service);
|
|
365
|
+
const credential = credRaw ? parseCredentialForDisplay(credRaw) : null;
|
|
344
366
|
if (!credential) {
|
|
345
367
|
console.log(` ! ${name}: keychain entry MISSING (${account.keychain_service})`);
|
|
346
368
|
continue;
|
|
@@ -428,15 +450,16 @@ function accountRotate(args) {
|
|
|
428
450
|
writeClaudeCredential(backupRaw);
|
|
429
451
|
process.exit(1);
|
|
430
452
|
}
|
|
431
|
-
const
|
|
432
|
-
if (!
|
|
453
|
+
const newCredentialRaw = readClaudeCodeCredentialRaw();
|
|
454
|
+
if (!newCredentialRaw || !rawCredentialHasToken(newCredentialRaw)) {
|
|
433
455
|
console.error('Failed to read new credential.');
|
|
434
456
|
if (backupRaw)
|
|
435
457
|
writeClaudeCredential(backupRaw);
|
|
436
458
|
process.exit(1);
|
|
437
459
|
}
|
|
438
460
|
console.log('Step 3: Updating keychain entry...');
|
|
439
|
-
|
|
461
|
+
// Store the complete raw blob so all OAuth metadata is preserved
|
|
462
|
+
keychainSetRaw(account.keychain_service, newCredentialRaw);
|
|
440
463
|
if (backupRaw) {
|
|
441
464
|
console.log('Step 4: Restoring original credential...');
|
|
442
465
|
writeClaudeCredential(backupRaw);
|
|
@@ -629,7 +652,8 @@ async function accountVerify(args) {
|
|
|
629
652
|
console.log(` ! ${name}: not found in accounts.yaml`);
|
|
630
653
|
continue;
|
|
631
654
|
}
|
|
632
|
-
const
|
|
655
|
+
const credRaw = keychainGetRaw(account.keychain_service);
|
|
656
|
+
const credential = credRaw ? parseCredentialForDisplay(credRaw) : null;
|
|
633
657
|
if (!credential) {
|
|
634
658
|
console.log(` ! ${name}: keychain entry MISSING`);
|
|
635
659
|
continue;
|
|
@@ -655,7 +679,12 @@ async function accountVerify(args) {
|
|
|
655
679
|
const REAGENT_DIR = join(homedir(), '.reagent');
|
|
656
680
|
const ACTIVE_ACCOUNT_PATH = join(REAGENT_DIR, 'active-account');
|
|
657
681
|
const SWITCH_LOCK_PATH = join(REAGENT_DIR, 'account-switch.lock');
|
|
682
|
+
const SYNC_PID_PATH = join(REAGENT_DIR, 'credential-sync.pid');
|
|
658
683
|
const LOCK_STALE_MS = 30_000;
|
|
684
|
+
/** How often the background sync daemon checks for refreshed tokens. */
|
|
685
|
+
const SYNC_INTERVAL_MS = 45_000;
|
|
686
|
+
/** How long the daemon runs before auto-exiting (8 hours). */
|
|
687
|
+
const SYNC_MAX_LIFETIME_MS = 8 * 60 * 60 * 1000;
|
|
659
688
|
/** Read which account was last activated via `account switch`. */
|
|
660
689
|
function getActiveAccount() {
|
|
661
690
|
try {
|
|
@@ -727,6 +756,11 @@ function acquireSwitchLock() {
|
|
|
727
756
|
* slot. Without this sync, reagent's stored copy goes stale and the next
|
|
728
757
|
* `account switch` writes a dead refresh token.
|
|
729
758
|
*
|
|
759
|
+
* Identity guard: To prevent cross-account corruption, this function
|
|
760
|
+
* verifies that the credential in CC's keychain actually descended from
|
|
761
|
+
* the one we wrote (by checking the recorded refresh token fingerprint).
|
|
762
|
+
* If CC was restarted with the default credential, sync is skipped.
|
|
763
|
+
*
|
|
730
764
|
* Returns 'synced' if the credential was updated, 'no-op' if no active
|
|
731
765
|
* account or no change detected, or 'skipped' if sync was expected but
|
|
732
766
|
* could not complete (caller should warn).
|
|
@@ -739,18 +773,259 @@ function syncBackActiveCredential() {
|
|
|
739
773
|
const prevAccount = config.accounts[prevName];
|
|
740
774
|
if (!prevAccount)
|
|
741
775
|
return 'skipped';
|
|
742
|
-
|
|
743
|
-
|
|
776
|
+
// Read the full raw credential from Claude Code's keychain — this contains
|
|
777
|
+
// refreshed tokens and all OAuth metadata that Claude Code may have updated.
|
|
778
|
+
const currentRaw = readClaudeCodeCredentialRaw();
|
|
779
|
+
if (!currentRaw)
|
|
780
|
+
return 'skipped';
|
|
781
|
+
// Identity guard: verify the credential in CC's keychain belongs to the
|
|
782
|
+
// previously active account, not the default or another account.
|
|
783
|
+
try {
|
|
784
|
+
const currentParsed = JSON.parse(currentRaw);
|
|
785
|
+
// Primary check: if we injected a _reagentAccount marker, verify it matches
|
|
786
|
+
if (currentParsed._reagentAccount && currentParsed._reagentAccount !== prevName) {
|
|
787
|
+
return 'no-op';
|
|
788
|
+
}
|
|
789
|
+
// Fallback check: if CC has the default credential's refresh token, skip
|
|
790
|
+
if (!currentParsed._reagentAccount) {
|
|
791
|
+
const defaultRaw = keychainGetRaw('reagent-__default__');
|
|
792
|
+
if (defaultRaw) {
|
|
793
|
+
const defaultRT = extractRefreshToken(defaultRaw);
|
|
794
|
+
const currentRT = extractRefreshToken(currentRaw);
|
|
795
|
+
if (defaultRT && currentRT && defaultRT === currentRT) {
|
|
796
|
+
return 'no-op';
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
catch {
|
|
744
802
|
return 'skipped';
|
|
745
|
-
|
|
746
|
-
//
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
803
|
+
}
|
|
804
|
+
// Strip our marker before storing — reagent's copy shouldn't have it
|
|
805
|
+
let cleanRaw = currentRaw;
|
|
806
|
+
try {
|
|
807
|
+
const parsed = JSON.parse(currentRaw);
|
|
808
|
+
if (parsed._reagentAccount) {
|
|
809
|
+
delete parsed._reagentAccount;
|
|
810
|
+
cleanRaw = JSON.stringify(parsed);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
catch {
|
|
814
|
+
// Use as-is
|
|
815
|
+
}
|
|
816
|
+
// Compare — if Claude Code refreshed the token, the blob will differ.
|
|
817
|
+
const storedRaw = keychainGetRaw(prevAccount.keychain_service);
|
|
818
|
+
if (cleanRaw !== storedRaw) {
|
|
819
|
+
keychainSetRaw(prevAccount.keychain_service, cleanRaw);
|
|
750
820
|
return 'synced';
|
|
751
821
|
}
|
|
752
822
|
return 'no-op';
|
|
753
823
|
}
|
|
824
|
+
// --- credential sync daemon ---
|
|
825
|
+
const WRITTEN_RT_PATH = join(REAGENT_DIR, 'written-refresh-token');
|
|
826
|
+
/**
|
|
827
|
+
* Record which refresh token we wrote to CC's keychain at switch time.
|
|
828
|
+
* The sync daemon uses this to detect when CC has refreshed (the RT changes).
|
|
829
|
+
*/
|
|
830
|
+
function saveWrittenRefreshToken(rt) {
|
|
831
|
+
try {
|
|
832
|
+
mkdirSync(REAGENT_DIR, { recursive: true });
|
|
833
|
+
writeFileSync(WRITTEN_RT_PATH, rt, 'utf8');
|
|
834
|
+
}
|
|
835
|
+
catch {
|
|
836
|
+
// Best-effort
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
/**
|
|
840
|
+
* Start a background daemon that periodically syncs Claude Code's
|
|
841
|
+
* keychain credential back to the active reagent account.
|
|
842
|
+
*
|
|
843
|
+
* This is critical because Claude Code uses rotating refresh tokens —
|
|
844
|
+
* each refresh consumes the old token and issues a new one. Without
|
|
845
|
+
* periodic sync-back, reagent's stored copy becomes permanently stale
|
|
846
|
+
* after the first CC refresh (~1 hour after switch).
|
|
847
|
+
*
|
|
848
|
+
* The daemon is a detached Node process that auto-exits when:
|
|
849
|
+
* - The active-account file is cleared (switch --clear)
|
|
850
|
+
* - The max lifetime is reached (8 hours)
|
|
851
|
+
* - The PID file is removed
|
|
852
|
+
*/
|
|
853
|
+
function startCredentialSyncDaemon() {
|
|
854
|
+
// Kill any existing daemon first
|
|
855
|
+
stopCredentialSyncDaemon();
|
|
856
|
+
try {
|
|
857
|
+
mkdirSync(REAGENT_DIR, { recursive: true });
|
|
858
|
+
// The daemon is a simple inline Node script. We embed it as a string
|
|
859
|
+
// to avoid needing a separate file that might not exist at the expected path.
|
|
860
|
+
const daemonScript = buildDaemonScript();
|
|
861
|
+
const child = spawn(process.execPath, ['--eval', daemonScript], {
|
|
862
|
+
detached: true,
|
|
863
|
+
stdio: 'ignore',
|
|
864
|
+
env: {
|
|
865
|
+
...process.env,
|
|
866
|
+
// Pass paths so the daemon doesn't depend on import resolution
|
|
867
|
+
REAGENT_DIR,
|
|
868
|
+
ACTIVE_ACCOUNT_PATH,
|
|
869
|
+
SYNC_PID_PATH,
|
|
870
|
+
SYNC_INTERVAL_MS: String(SYNC_INTERVAL_MS),
|
|
871
|
+
SYNC_MAX_LIFETIME_MS: String(SYNC_MAX_LIFETIME_MS),
|
|
872
|
+
},
|
|
873
|
+
});
|
|
874
|
+
child.unref();
|
|
875
|
+
if (child.pid) {
|
|
876
|
+
writeFileSync(SYNC_PID_PATH, String(child.pid), 'utf8');
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
catch {
|
|
880
|
+
// Non-fatal — sync just won't happen in the background
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
/** Stop the background credential sync daemon if running. */
|
|
884
|
+
function stopCredentialSyncDaemon() {
|
|
885
|
+
try {
|
|
886
|
+
const pid = parseInt(readFileSync(SYNC_PID_PATH, 'utf8').trim(), 10);
|
|
887
|
+
if (!isNaN(pid) && pid > 0) {
|
|
888
|
+
try {
|
|
889
|
+
process.kill(pid, 'SIGTERM');
|
|
890
|
+
}
|
|
891
|
+
catch {
|
|
892
|
+
// Process already exited
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
unlinkSync(SYNC_PID_PATH);
|
|
896
|
+
}
|
|
897
|
+
catch {
|
|
898
|
+
// No PID file or already cleaned up
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* Build the inline Node script for the credential sync daemon.
|
|
903
|
+
*
|
|
904
|
+
* This runs as a detached process with no dependencies beyond Node builtins
|
|
905
|
+
* and the macOS `security` command. It periodically reads CC's keychain
|
|
906
|
+
* credential and writes it back to the active reagent account's keychain entry.
|
|
907
|
+
*/
|
|
908
|
+
function buildDaemonScript() {
|
|
909
|
+
// The script is a self-contained Node program that uses only builtins.
|
|
910
|
+
// It exits cleanly when active-account is cleared or max lifetime is reached.
|
|
911
|
+
return `
|
|
912
|
+
'use strict';
|
|
913
|
+
const { execFileSync } = require('node:child_process');
|
|
914
|
+
const { readFileSync, unlinkSync, existsSync } = require('node:fs');
|
|
915
|
+
const { userInfo } = require('node:os');
|
|
916
|
+
|
|
917
|
+
const REAGENT_DIR = process.env.REAGENT_DIR;
|
|
918
|
+
const ACTIVE_ACCOUNT_PATH = process.env.ACTIVE_ACCOUNT_PATH;
|
|
919
|
+
const SYNC_PID_PATH = process.env.SYNC_PID_PATH;
|
|
920
|
+
const SYNC_INTERVAL = parseInt(process.env.SYNC_INTERVAL_MS || '45000', 10);
|
|
921
|
+
const MAX_LIFETIME = parseInt(process.env.SYNC_MAX_LIFETIME_MS || '28800000', 10);
|
|
922
|
+
const startTime = Date.now();
|
|
923
|
+
|
|
924
|
+
function readCC() {
|
|
925
|
+
try {
|
|
926
|
+
const raw = execFileSync(
|
|
927
|
+
'security',
|
|
928
|
+
['find-generic-password', '-s', 'Claude Code-credentials', '-a', userInfo().username, '-w'],
|
|
929
|
+
{ stdio: ['pipe', 'pipe', 'pipe'], encoding: 'utf8' }
|
|
930
|
+
);
|
|
931
|
+
return raw.trim();
|
|
932
|
+
} catch { return null; }
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
function readReagent(service) {
|
|
936
|
+
try {
|
|
937
|
+
const raw = execFileSync(
|
|
938
|
+
'security',
|
|
939
|
+
['find-generic-password', '-s', service, '-a', 'reagent', '-w'],
|
|
940
|
+
{ stdio: ['pipe', 'pipe', 'pipe'], encoding: 'utf8' }
|
|
941
|
+
);
|
|
942
|
+
return raw.trim();
|
|
943
|
+
} catch { return null; }
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
function writeReagent(service, data) {
|
|
947
|
+
execFileSync(
|
|
948
|
+
'security',
|
|
949
|
+
['add-generic-password', '-s', service, '-a', 'reagent', '-w', data, '-U'],
|
|
950
|
+
{ stdio: 'pipe' }
|
|
951
|
+
);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
function getActiveAccount() {
|
|
955
|
+
try {
|
|
956
|
+
const name = readFileSync(ACTIVE_ACCOUNT_PATH, 'utf8').trim();
|
|
957
|
+
if (!name || !/^[a-z0-9][a-z0-9-]*$/.test(name)) return null;
|
|
958
|
+
return name;
|
|
959
|
+
} catch { return null; }
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
function getKeychainService(accountName) {
|
|
963
|
+
// The keychain service is always 'reagent-' + accountName by convention.
|
|
964
|
+
// This avoids fragile YAML parsing in the daemon.
|
|
965
|
+
return 'reagent-' + accountName;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
function extractRT(raw) {
|
|
969
|
+
try {
|
|
970
|
+
const parsed = JSON.parse(raw);
|
|
971
|
+
const inner = parsed.claudeAiOauth || parsed;
|
|
972
|
+
return inner?.refreshToken || null;
|
|
973
|
+
} catch { return null; }
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
function sync() {
|
|
977
|
+
const name = getActiveAccount();
|
|
978
|
+
if (!name) { cleanup(); return; }
|
|
979
|
+
if (Date.now() - startTime > MAX_LIFETIME) { cleanup(); return; }
|
|
980
|
+
if (!existsSync(SYNC_PID_PATH)) { process.exit(0); }
|
|
981
|
+
|
|
982
|
+
const service = getKeychainService(name);
|
|
983
|
+
const ccRaw = readCC();
|
|
984
|
+
if (!ccRaw) return;
|
|
985
|
+
|
|
986
|
+
const storedRaw = readReagent(service);
|
|
987
|
+
if (ccRaw === storedRaw) return;
|
|
988
|
+
|
|
989
|
+
// Verify CC's credential belongs to the active account
|
|
990
|
+
try {
|
|
991
|
+
const ccParsed = JSON.parse(ccRaw);
|
|
992
|
+
// If our marker is present and doesn't match, skip
|
|
993
|
+
if (ccParsed._reagentAccount && ccParsed._reagentAccount !== name) return;
|
|
994
|
+
// Fallback: check against default's refresh token
|
|
995
|
+
if (!ccParsed._reagentAccount) {
|
|
996
|
+
const defaultRaw = readReagent('reagent-__default__');
|
|
997
|
+
if (defaultRaw) {
|
|
998
|
+
const defaultRT = extractRT(defaultRaw);
|
|
999
|
+
const ccRT = extractRT(ccRaw);
|
|
1000
|
+
if (defaultRT && ccRT && defaultRT === ccRT) return;
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
// Strip our marker before storing — reagent's copy shouldn't have it
|
|
1004
|
+
delete ccParsed._reagentAccount;
|
|
1005
|
+
writeReagent(service, JSON.stringify(ccParsed));
|
|
1006
|
+
} catch { /* best-effort */ }
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
function cleanup() {
|
|
1010
|
+
try { unlinkSync(SYNC_PID_PATH); } catch {}
|
|
1011
|
+
process.exit(0);
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
// Run initial sync after a short delay (let CC pick up the new credential)
|
|
1015
|
+
setTimeout(() => {
|
|
1016
|
+
sync();
|
|
1017
|
+
// Then run periodically
|
|
1018
|
+
const interval = setInterval(() => {
|
|
1019
|
+
try { sync(); } catch { cleanup(); }
|
|
1020
|
+
}, SYNC_INTERVAL);
|
|
1021
|
+
interval.unref();
|
|
1022
|
+
}, 10000);
|
|
1023
|
+
|
|
1024
|
+
// Handle signals
|
|
1025
|
+
process.on('SIGTERM', cleanup);
|
|
1026
|
+
process.on('SIGINT', cleanup);
|
|
1027
|
+
`.trim();
|
|
1028
|
+
}
|
|
754
1029
|
function escapeShellSingleQuote(s) {
|
|
755
1030
|
return s.replace(/'/g, "'\\''");
|
|
756
1031
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,23 @@ import type { AccountCredential } from '../types/accounts.js';
|
|
|
3
3
|
* Store a credential blob in macOS Keychain under a reagent-namespaced service.
|
|
4
4
|
*/
|
|
5
5
|
export declare function keychainSet(service: string, credential: AccountCredential): void;
|
|
6
|
+
/**
|
|
7
|
+
* Store a raw JSON string in macOS Keychain under a reagent-namespaced service.
|
|
8
|
+
* Use this to preserve the full credential blob (including fields beyond AccountCredential)
|
|
9
|
+
* so that Claude Code's token refresh flow continues to work.
|
|
10
|
+
*/
|
|
11
|
+
export declare function keychainSetRaw(service: string, data: string): void;
|
|
6
12
|
/**
|
|
7
13
|
* Retrieve a credential blob from macOS Keychain.
|
|
14
|
+
* Returns the normalized AccountCredential (6 known fields only).
|
|
15
|
+
* For the full blob, use keychainGetRaw().
|
|
8
16
|
*/
|
|
9
17
|
export declare function keychainGet(service: string): AccountCredential | null;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieve the raw JSON string from macOS Keychain.
|
|
20
|
+
* Preserves all fields, including those needed for OAuth refresh.
|
|
21
|
+
*/
|
|
22
|
+
export declare function keychainGetRaw(service: string): string | null;
|
|
10
23
|
/**
|
|
11
24
|
* Delete a credential from macOS Keychain.
|
|
12
25
|
*/
|
|
@@ -16,9 +29,57 @@ export declare function keychainDelete(service: string): boolean;
|
|
|
16
29
|
*/
|
|
17
30
|
export declare function keychainExists(service: string): boolean;
|
|
18
31
|
/**
|
|
19
|
-
* Read Claude Code's own keychain credential.
|
|
32
|
+
* Read Claude Code's own keychain credential as a normalized AccountCredential.
|
|
33
|
+
* This extracts only the 6 known fields — suitable for display and health checks.
|
|
34
|
+
* For storing/switching, use readClaudeCodeCredentialRaw() to preserve all fields.
|
|
20
35
|
*/
|
|
21
36
|
export declare function readClaudeCodeCredential(): AccountCredential | null;
|
|
37
|
+
/**
|
|
38
|
+
* Read the raw JSON string from Claude Code's keychain entry.
|
|
39
|
+
* Returns the full blob (e.g., `{"claudeAiOauth": {...all fields...}}`)
|
|
40
|
+
* so that token refresh metadata (tokenEndpoint, clientId, etc.) is preserved.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readClaudeCodeCredentialRaw(): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* Extract the claudeAiOauth inner object from a raw Claude Code credential string.
|
|
45
|
+
* Returns the full inner object as a JSON string, preserving all fields.
|
|
46
|
+
*
|
|
47
|
+
* @deprecated Use the raw blob directly — extracting strips sibling fields.
|
|
48
|
+
*/
|
|
49
|
+
export declare function extractOAuthBlob(rawCredential: string): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Parse a raw credential string (which may be a full Claude Code blob
|
|
52
|
+
* like `{ claudeAiOauth: { ... } }` or a bare inner object) into an
|
|
53
|
+
* AccountCredential suitable for display, health checks, and env output.
|
|
54
|
+
*
|
|
55
|
+
* Returns null if the string cannot be parsed or lacks an access token.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseCredentialForDisplay(raw: string): AccountCredential | null;
|
|
58
|
+
/**
|
|
59
|
+
* Validate that a raw credential string contains an access token.
|
|
60
|
+
* Does not extract or transform — just confirms viability.
|
|
61
|
+
*/
|
|
62
|
+
export declare function rawCredentialHasToken(raw: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Ensure a raw credential string has the `claudeAiOauth` wrapper that
|
|
65
|
+
* Claude Code expects. Pre-fix keychain entries may store the bare inner
|
|
66
|
+
* object — this re-wraps them so token refresh works.
|
|
67
|
+
*/
|
|
68
|
+
export declare function ensureClaudeCodeWrapper(raw: string): string;
|
|
69
|
+
/**
|
|
70
|
+
* Extract the refresh token from a raw credential blob.
|
|
71
|
+
* Used to detect whether Claude Code has refreshed since the last sync.
|
|
72
|
+
*/
|
|
73
|
+
export declare function extractRefreshToken(raw: string): string | null;
|
|
74
|
+
/**
|
|
75
|
+
* Merge a reagent account credential into Claude Code's keychain slot,
|
|
76
|
+
* preserving sibling keys like `mcpOAuth` that Claude Code maintains.
|
|
77
|
+
*
|
|
78
|
+
* Claude Code's blob looks like `{claudeAiOauth: {...}, mcpOAuth: {...}}`.
|
|
79
|
+
* We overlay `claudeAiOauth` (and optionally inject `_reagentAccount`)
|
|
80
|
+
* while keeping everything else intact.
|
|
81
|
+
*/
|
|
82
|
+
export declare function mergeIntoClaudeCodeSlot(accountCred: string, accountName: string): void;
|
|
22
83
|
/**
|
|
23
84
|
* Write back a credential to Claude Code's own keychain entry.
|
|
24
85
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../src/platform/keychain.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../src/platform/keychain.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAQrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,GAAG,IAAI,CAUnE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,IAAI,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAW/E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW3D;AAiBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAsBtF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ5D"}
|
|
@@ -5,25 +5,41 @@ const KEYCHAIN_ACCOUNT = 'reagent';
|
|
|
5
5
|
* Store a credential blob in macOS Keychain under a reagent-namespaced service.
|
|
6
6
|
*/
|
|
7
7
|
export function keychainSet(service, credential) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
keychainSetRaw(service, JSON.stringify(credential));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Store a raw JSON string in macOS Keychain under a reagent-namespaced service.
|
|
12
|
+
* Use this to preserve the full credential blob (including fields beyond AccountCredential)
|
|
13
|
+
* so that Claude Code's token refresh flow continues to work.
|
|
14
|
+
*/
|
|
15
|
+
export function keychainSetRaw(service, data) {
|
|
16
|
+
// -U provides atomic upsert — no need to delete first (avoids race window)
|
|
17
|
+
execFileSync('security', ['add-generic-password', '-s', service, '-a', KEYCHAIN_ACCOUNT, '-w', data, '-U'], { stdio: 'pipe' });
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Retrieve a credential blob from macOS Keychain.
|
|
21
|
+
* Returns the normalized AccountCredential (6 known fields only).
|
|
22
|
+
* For the full blob, use keychainGetRaw().
|
|
23
|
+
*/
|
|
24
|
+
export function keychainGet(service) {
|
|
25
|
+
const raw = keychainGetRaw(service);
|
|
26
|
+
if (!raw)
|
|
27
|
+
return null;
|
|
10
28
|
try {
|
|
11
|
-
|
|
12
|
-
stdio: 'pipe',
|
|
13
|
-
});
|
|
29
|
+
return normalizeCredential(JSON.parse(raw));
|
|
14
30
|
}
|
|
15
31
|
catch {
|
|
16
|
-
|
|
32
|
+
return null;
|
|
17
33
|
}
|
|
18
|
-
execFileSync('security', ['add-generic-password', '-s', service, '-a', KEYCHAIN_ACCOUNT, '-w', data, '-U'], { stdio: 'pipe' });
|
|
19
34
|
}
|
|
20
35
|
/**
|
|
21
|
-
* Retrieve
|
|
36
|
+
* Retrieve the raw JSON string from macOS Keychain.
|
|
37
|
+
* Preserves all fields, including those needed for OAuth refresh.
|
|
22
38
|
*/
|
|
23
|
-
export function
|
|
39
|
+
export function keychainGetRaw(service) {
|
|
24
40
|
try {
|
|
25
41
|
const raw = execFileSync('security', ['find-generic-password', '-s', service, '-a', KEYCHAIN_ACCOUNT, '-w'], { stdio: ['pipe', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
26
|
-
return
|
|
42
|
+
return raw.trim();
|
|
27
43
|
}
|
|
28
44
|
catch {
|
|
29
45
|
return null;
|
|
@@ -58,28 +74,170 @@ export function keychainExists(service) {
|
|
|
58
74
|
}
|
|
59
75
|
}
|
|
60
76
|
/**
|
|
61
|
-
* Read Claude Code's own keychain credential.
|
|
77
|
+
* Read Claude Code's own keychain credential as a normalized AccountCredential.
|
|
78
|
+
* This extracts only the 6 known fields — suitable for display and health checks.
|
|
79
|
+
* For storing/switching, use readClaudeCodeCredentialRaw() to preserve all fields.
|
|
62
80
|
*/
|
|
63
81
|
export function readClaudeCodeCredential() {
|
|
64
82
|
try {
|
|
65
|
-
const raw =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
const raw = readClaudeCodeCredentialRaw();
|
|
84
|
+
if (!raw)
|
|
85
|
+
return null;
|
|
86
|
+
const parsed = JSON.parse(raw);
|
|
87
|
+
const inner = parsed.claudeAiOauth || parsed;
|
|
88
|
+
return normalizeCredential(inner);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read the raw JSON string from Claude Code's keychain entry.
|
|
96
|
+
* Returns the full blob (e.g., `{"claudeAiOauth": {...all fields...}}`)
|
|
97
|
+
* so that token refresh metadata (tokenEndpoint, clientId, etc.) is preserved.
|
|
98
|
+
*/
|
|
99
|
+
export function readClaudeCodeCredentialRaw() {
|
|
100
|
+
try {
|
|
101
|
+
const raw = execFileSync('security', ['find-generic-password', '-s', 'Claude Code-credentials', '-a', userInfo().username, '-w'], { stdio: ['pipe', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
102
|
+
return raw.trim();
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Extract the claudeAiOauth inner object from a raw Claude Code credential string.
|
|
110
|
+
* Returns the full inner object as a JSON string, preserving all fields.
|
|
111
|
+
*
|
|
112
|
+
* @deprecated Use the raw blob directly — extracting strips sibling fields.
|
|
113
|
+
*/
|
|
114
|
+
export function extractOAuthBlob(rawCredential) {
|
|
115
|
+
try {
|
|
116
|
+
const parsed = JSON.parse(rawCredential);
|
|
117
|
+
const inner = parsed.claudeAiOauth || parsed;
|
|
118
|
+
if (!inner || typeof inner !== 'object')
|
|
119
|
+
return null;
|
|
120
|
+
// Verify it has at least an access token
|
|
121
|
+
if (!inner.accessToken && !inner.oauth_token)
|
|
122
|
+
return null;
|
|
123
|
+
return JSON.stringify(inner);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Parse a raw credential string (which may be a full Claude Code blob
|
|
131
|
+
* like `{ claudeAiOauth: { ... } }` or a bare inner object) into an
|
|
132
|
+
* AccountCredential suitable for display, health checks, and env output.
|
|
133
|
+
*
|
|
134
|
+
* Returns null if the string cannot be parsed or lacks an access token.
|
|
135
|
+
*/
|
|
136
|
+
export function parseCredentialForDisplay(raw) {
|
|
137
|
+
try {
|
|
138
|
+
const parsed = JSON.parse(raw);
|
|
139
|
+
const inner = parsed.claudeAiOauth || parsed;
|
|
140
|
+
if (!inner || typeof inner !== 'object')
|
|
141
|
+
return null;
|
|
142
|
+
const cred = normalizeCredential(inner);
|
|
143
|
+
if (!cred.accessToken)
|
|
144
|
+
return null;
|
|
145
|
+
return cred;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate that a raw credential string contains an access token.
|
|
153
|
+
* Does not extract or transform — just confirms viability.
|
|
154
|
+
*/
|
|
155
|
+
export function rawCredentialHasToken(raw) {
|
|
156
|
+
try {
|
|
157
|
+
const parsed = JSON.parse(raw);
|
|
158
|
+
const inner = parsed.claudeAiOauth || parsed;
|
|
159
|
+
return !!(inner?.accessToken || inner?.oauth_token);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Ensure a raw credential string has the `claudeAiOauth` wrapper that
|
|
167
|
+
* Claude Code expects. Pre-fix keychain entries may store the bare inner
|
|
168
|
+
* object — this re-wraps them so token refresh works.
|
|
169
|
+
*/
|
|
170
|
+
export function ensureClaudeCodeWrapper(raw) {
|
|
171
|
+
try {
|
|
172
|
+
const parsed = JSON.parse(raw);
|
|
173
|
+
if (parsed.claudeAiOauth)
|
|
174
|
+
return raw;
|
|
175
|
+
if (parsed.accessToken || parsed.oauth_token) {
|
|
176
|
+
return JSON.stringify({ claudeAiOauth: parsed });
|
|
177
|
+
}
|
|
178
|
+
return raw;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return raw;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Normalize any credential-like object into the known AccountCredential fields.
|
|
186
|
+
* Used for display, health checks, and env output — NOT for storage.
|
|
187
|
+
*/
|
|
188
|
+
function normalizeCredential(inner) {
|
|
189
|
+
return {
|
|
190
|
+
accessToken: (inner.accessToken || inner.oauth_token),
|
|
191
|
+
refreshToken: (inner.refreshToken || inner.refresh_token),
|
|
192
|
+
expiresAt: (inner.expiresAt || inner.expiry),
|
|
193
|
+
scopes: inner.scopes,
|
|
194
|
+
subscriptionType: inner.subscriptionType,
|
|
195
|
+
rateLimitTier: inner.rateLimitTier,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Extract the refresh token from a raw credential blob.
|
|
200
|
+
* Used to detect whether Claude Code has refreshed since the last sync.
|
|
201
|
+
*/
|
|
202
|
+
export function extractRefreshToken(raw) {
|
|
203
|
+
try {
|
|
204
|
+
const parsed = JSON.parse(raw);
|
|
69
205
|
const inner = parsed.claudeAiOauth || parsed;
|
|
70
|
-
return
|
|
71
|
-
accessToken: inner.accessToken || inner.oauth_token,
|
|
72
|
-
refreshToken: inner.refreshToken || inner.refresh_token,
|
|
73
|
-
expiresAt: inner.expiresAt || inner.expiry,
|
|
74
|
-
scopes: inner.scopes,
|
|
75
|
-
subscriptionType: inner.subscriptionType,
|
|
76
|
-
rateLimitTier: inner.rateLimitTier,
|
|
77
|
-
};
|
|
206
|
+
return inner?.refreshToken || null;
|
|
78
207
|
}
|
|
79
208
|
catch {
|
|
80
209
|
return null;
|
|
81
210
|
}
|
|
82
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Merge a reagent account credential into Claude Code's keychain slot,
|
|
214
|
+
* preserving sibling keys like `mcpOAuth` that Claude Code maintains.
|
|
215
|
+
*
|
|
216
|
+
* Claude Code's blob looks like `{claudeAiOauth: {...}, mcpOAuth: {...}}`.
|
|
217
|
+
* We overlay `claudeAiOauth` (and optionally inject `_reagentAccount`)
|
|
218
|
+
* while keeping everything else intact.
|
|
219
|
+
*/
|
|
220
|
+
export function mergeIntoClaudeCodeSlot(accountCred, accountName) {
|
|
221
|
+
const incoming = JSON.parse(ensureClaudeCodeWrapper(accountCred));
|
|
222
|
+
// Read what's currently in CC's slot to preserve sibling keys
|
|
223
|
+
let existing = {};
|
|
224
|
+
const currentRaw = readClaudeCodeCredentialRaw();
|
|
225
|
+
if (currentRaw) {
|
|
226
|
+
try {
|
|
227
|
+
existing = JSON.parse(currentRaw);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
existing = {};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Merge: incoming claudeAiOauth wins, everything else preserved
|
|
234
|
+
const merged = {
|
|
235
|
+
...existing,
|
|
236
|
+
claudeAiOauth: incoming.claudeAiOauth,
|
|
237
|
+
_reagentAccount: accountName,
|
|
238
|
+
};
|
|
239
|
+
writeClaudeCodeCredential(JSON.stringify(merged));
|
|
240
|
+
}
|
|
83
241
|
/**
|
|
84
242
|
* Write back a credential to Claude Code's own keychain entry.
|
|
85
243
|
*
|
|
@@ -89,14 +247,7 @@ export function readClaudeCodeCredential() {
|
|
|
89
247
|
*/
|
|
90
248
|
export function writeClaudeCodeCredential(data) {
|
|
91
249
|
const account = userInfo().username;
|
|
92
|
-
|
|
93
|
-
execFileSync('security', ['delete-generic-password', '-s', 'Claude Code-credentials'], {
|
|
94
|
-
stdio: 'pipe',
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// Doesn't exist yet
|
|
99
|
-
}
|
|
250
|
+
// -U provides atomic upsert — no need to delete first (avoids race window)
|
|
100
251
|
execFileSync('security', ['add-generic-password', '-s', 'Claude Code-credentials', '-a', account, '-w', data, '-U'], { stdio: 'pipe' });
|
|
101
252
|
}
|
|
102
253
|
//# sourceMappingURL=keychain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/platform/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,UAA6B;IACxE,
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/platform/keychain.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bookedsolid/reagent",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.9",
|
|
4
4
|
"description": "Governance layer for Claude Code — policy enforcement, hook-based safety gates, and audit logging for AI-assisted projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Booked Solid Technology <oss@bookedsolid.tech> (https://bookedsolid.tech)",
|