feat(vscode-ide-companion): improve authentication flow with cached auth state

优化认证流程,支持缓存认证状态避免重复认证:
- 在 qwenAgentManager 中创建会话前先进行认证
- 在 qwenConnectionHandler 中检查缓存的认证状态
- 只在没有有效缓存时触发新的认证流程
- 认证失败时清除无效缓存
- 添加详细的日志记录用于调试
This commit is contained in:
yiliang114
2025-11-24 20:32:08 +08:00
parent 4ad377b0d8
commit f11d054a47
2 changed files with 63 additions and 13 deletions

View File

@@ -132,25 +132,58 @@ export class QwenConnectionHandler {
// 如果无法恢复会话则创建新会话
if (!sessionRestored) {
console.log('[QwenAgentManager] Creating new session...');
console.log(
`[QwenAgentManager] ⚠️ WORKAROUND: Skipping explicit authenticate() call`,
);
console.log(
`[QwenAgentManager] ⚠️ Reason: newSession() internally calls refreshAuth(), which triggers device flow`,
);
console.log(
`[QwenAgentManager] ⚠️ Calling authenticate() first causes double authentication`,
);
// 检查是否有有效的缓存认证
let hasValidAuth = false;
if (authStateManager) {
hasValidAuth = await authStateManager.hasValidAuth(
workingDir,
authMethod,
);
}
// 只在没有有效缓存认证时进行认证
if (!hasValidAuth) {
console.log(
'[QwenAgentManager] Authenticating before creating session...',
);
try {
await connection.authenticate(authMethod);
console.log('[QwenAgentManager] Authentication successful');
// 保存认证状态
if (authStateManager) {
console.log(
'[QwenAgentManager] Saving auth state after successful authentication',
);
await authStateManager.saveAuthState(workingDir, authMethod);
}
} catch (authError) {
console.error('[QwenAgentManager] Authentication failed:', authError);
// 清除可能无效的缓存
if (authStateManager) {
console.log(
'[QwenAgentManager] Clearing auth cache due to authentication failure',
);
await authStateManager.clearAuthState();
}
throw authError;
}
} else {
console.log(
'[QwenAgentManager] Skipping authentication - using valid cached auth',
);
}
try {
console.log(
`\n🔐 [AUTO AUTH] newSession will handle authentication automatically\n`,
'[QwenAgentManager] Creating new session after authentication...',
);
await this.newSessionWithRetry(connection, workingDir, 3);
console.log('[QwenAgentManager] New session created successfully');
// 保认证状态
if (authStateManager) {
// 保认证状态已保存(防止重复认证)
if (authStateManager && !hasValidAuth) {
console.log(
'[QwenAgentManager] Saving auth state after successful session creation',
);