From 97998459e5f10e8c9684dead30fcd15e695d3b6e Mon Sep 17 00:00:00 2001 From: Lukas May Date: Tue, 10 Feb 2026 09:51:23 +0100 Subject: [PATCH] feat(cli): Add --token option to register-account command Allow manual account registration using a setup token from `claude setup-token`. The --token option requires --email and creates/updates account credentials with the provided token. Co-Authored-By: Claude Sonnet 4.5 --- src/cli/index.ts | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/cli/index.ts b/src/cli/index.ts index 445a1a1..bca12a1 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -1091,11 +1091,48 @@ export function createCli(serverHandler?: (port?: number) => Promise): Com .description('Extract current Claude login and register as an account') .option('--provider ', 'Provider name', 'claude') .option('--email ', 'Email (for manual registration without auto-extract)') - .action(async (options: { provider: string; email?: string }) => { + .option('--token ', 'Setup token from `claude setup-token` (requires --email)') + .action(async (options: { provider: string; email?: string; token?: string }) => { try { const client = createDefaultTrpcClient(); - if (options.email) { + if (options.token) { + // Token-based registration + if (!options.email) { + console.error('Error: --email is required when using --token'); + process.exit(1); + } + + const credentials = JSON.stringify({ + claudeAiOauth: { accessToken: options.token }, + }); + const configJson = JSON.stringify({ hasCompletedOnboarding: true }); + + const existing = await client.listAccounts.query(); + const alreadyRegistered = existing.find((a: any) => a.email === options.email); + if (alreadyRegistered) { + await client.updateAccountAuth.mutate({ + id: alreadyRegistered.id, + configJson, + credentials, + }); + console.log(`Updated credentials for account: ${alreadyRegistered.id}`); + console.log(` Email: ${options.email}`); + console.log(` Token updated (setup token)`); + return; + } + + const account = await client.addAccount.mutate({ + email: options.email, + provider: options.provider, + configJson, + credentials, + }); + console.log(`Registered account: ${account.id}`); + console.log(` Email: ${account.email}`); + console.log(` Provider: ${account.provider}`); + console.log(` Auth: setup token`); + } else if (options.email) { // Manual registration — guard against duplicates const existing = await client.listAccounts.query(); const alreadyRegistered = existing.find((a: any) => a.email === options.email);