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);