style(vscode-ide-companion): adjust chat session initialization logic and optimize tool invocation component style

This commit is contained in:
yiliang114
2025-12-06 22:44:31 +08:00
15 changed files with 373 additions and 387 deletions

View File

@@ -13,7 +13,9 @@ import { BaseMessageHandler } from './BaseMessageHandler.js';
*/
export class SettingsMessageHandler extends BaseMessageHandler {
canHandle(messageType: string): boolean {
return ['openSettings', 'recheckCli'].includes(messageType);
return ['openSettings', 'recheckCli', 'setApprovalMode'].includes(
messageType,
);
}
async handle(message: { type: string; data?: unknown }): Promise<void> {
@@ -26,6 +28,14 @@ export class SettingsMessageHandler extends BaseMessageHandler {
await this.handleRecheckCli();
break;
case 'setApprovalMode':
await this.handleSetApprovalMode(
message.data as {
modeId?: 'plan' | 'default' | 'auto-edit' | 'yolo';
},
);
break;
default:
console.warn(
'[SettingsMessageHandler] Unknown message type:',
@@ -68,4 +78,29 @@ export class SettingsMessageHandler extends BaseMessageHandler {
});
}
}
/**
* Set approval mode via agent (ACP session/set_mode)
*/
private async handleSetApprovalMode(data?: {
modeId?: 'plan' | 'default' | 'auto-edit' | 'yolo';
}): Promise<void> {
try {
const modeId = (data?.modeId || 'default') as
| 'plan'
| 'default'
| 'auto-edit'
| 'yolo';
await this.agentManager.setApprovalModeFromUi(
modeId === 'plan' ? 'plan' : modeId === 'auto-edit' ? 'auto' : 'ask',
);
// No explicit response needed; WebView listens for modeChanged
} catch (error) {
console.error('[SettingsMessageHandler] Failed to set mode:', error);
this.sendToWebView({
type: 'error',
data: { message: `Failed to set mode: ${error}` },
});
}
}
}