Merge pull request #192 from kaitranntt/fix/qwen-login-stdin-forward

fix(qwen): inherit stdin for Device Code flows to enable interactive prompts
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2025-12-24 04:11:02 -05:00
commit 1f31d68dd2
1 file changed
+8 -4
+8 -4
View File
@@ -112,8 +112,8 @@ async function handleStdout(
log(`Parsed ${state.parsedProjects.length} projects`); log(`Parsed ${state.parsedProjects.length} projects`);
} }
// Handle project selection prompt // Handle project selection prompt (Authorization Code flows only - Device Code has no stdin pipe)
if (!state.projectPromptHandled && isProjectSelectionPrompt(output)) { if (!isDeviceCodeFlow && !state.projectPromptHandled && isProjectSelectionPrompt(output)) {
state.projectPromptHandled = true; state.projectPromptHandled = true;
await handleProjectSelection(output, state, options, authProcess, log); await handleProjectSelection(output, state, options, authProcess, log);
} }
@@ -258,8 +258,13 @@ export function executeOAuthProcess(options: OAuthProcessOptions): Promise<Accou
}; };
return new Promise<AccountInfo | null>((resolve) => { return new Promise<AccountInfo | null>((resolve) => {
// Device Code flows (Qwen, GHCP) may need interactive stdin for email/prompts
// Authorization Code flows need piped stdin for project selection
const isDeviceCodeFlow = callbackPort === null;
const stdinMode = isDeviceCodeFlow ? 'inherit' : 'pipe';
const authProcess = spawn(binaryPath, args, { const authProcess = spawn(binaryPath, args, {
stdio: ['pipe', 'pipe', 'pipe'], stdio: [stdinMode, 'pipe', 'pipe'],
env: { ...process.env, CLI_PROXY_AUTH_DIR: tokenDir }, env: { ...process.env, CLI_PROXY_AUTH_DIR: tokenDir },
}); });
@@ -291,7 +296,6 @@ export function executeOAuthProcess(options: OAuthProcessOptions): Promise<Accou
}); });
// Show waiting message after delay // Show waiting message after delay
const isDeviceCodeFlow = callbackPort === null;
setTimeout(() => { setTimeout(() => {
if (isDeviceCodeFlow) { if (isDeviceCodeFlow) {
// Device Code Flow: show polling message // Device Code Flow: show polling message