From 21651410c889d67c93f4a85b9b34edff71fe9344 Mon Sep 17 00:00:00 2001 From: yiliang114 <1204183885@qq.com> Date: Tue, 9 Dec 2025 15:53:06 +0800 Subject: [PATCH] feat(vscode-ide-companion): update approval mode cycling behavior - Add NEXT_APPROVAL_MODE constant for cyclic mode mapping - Remove 'plan' mode from public toggle sequence - Simplify handleToggleEditMode implementation using NEXT_APPROVAL_MODE mapping - Update import statements to include NEXT_APPROVAL_MODE - Remove unused comment about plan mode in toggle sequence --- .../vscode-ide-companion/src/types/acpTypes.ts | 12 ++++++++++++ .../vscode-ide-companion/src/webview/App.tsx | 17 ++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/vscode-ide-companion/src/types/acpTypes.ts b/packages/vscode-ide-companion/src/types/acpTypes.ts index 43c74cd3..1fb4de17 100644 --- a/packages/vscode-ide-companion/src/types/acpTypes.ts +++ b/packages/vscode-ide-companion/src/types/acpTypes.ts @@ -147,6 +147,18 @@ export { getApprovalModeInfoFromString, } from './approvalModeTypes.js'; +// Cyclic next-mode mapping used by UI toggles and other consumers +export const NEXT_APPROVAL_MODE: { + [k in ApprovalModeValue]: ApprovalModeValue; +} = { + // Hide "plan" from the public toggle sequence for now + // Cycle: default -> auto-edit -> yolo -> default + default: 'auto-edit', + 'auto-edit': 'yolo', + plan: 'yolo', + yolo: 'default', +}; + // Current mode update (sent by agent when mode changes) export interface CurrentModeUpdate extends BaseSessionUpdate { update: { diff --git a/packages/vscode-ide-companion/src/webview/App.tsx b/packages/vscode-ide-companion/src/webview/App.tsx index 42b62876..23860c47 100644 --- a/packages/vscode-ide-companion/src/webview/App.tsx +++ b/packages/vscode-ide-companion/src/webview/App.tsx @@ -42,7 +42,7 @@ import { import { InputForm } from './components/layout/InputForm.js'; import { SessionSelector } from './components/layout/SessionSelector.js'; import { FileIcon, UserIcon } from './components/icons/index.js'; -import { ApprovalMode } from '../types/acpTypes.js'; +import { ApprovalMode, NEXT_APPROVAL_MODE } from '../types/acpTypes.js'; import type { ApprovalModeValue } from '../types/acpTypes.js'; import type { PlanEntry } from '../types/chatTypes.js'; @@ -464,17 +464,11 @@ export const App: React.FC = () => { }); }, [vscode]); - // Handle toggle edit mode (Default -> Auto-edit -> Plan -> YOLO -> Default) + // Handle toggle edit mode (Default -> Auto-edit -> YOLO -> Default) const handleToggleEditMode = useCallback(() => { setEditMode((prev) => { - const next: ApprovalModeValue = - prev === ApprovalMode.DEFAULT - ? ApprovalMode.AUTO_EDIT - : prev === ApprovalMode.AUTO_EDIT - ? ApprovalMode.PLAN - : prev === ApprovalMode.PLAN - ? ApprovalMode.YOLO - : ApprovalMode.DEFAULT; + const next: ApprovalModeValue = NEXT_APPROVAL_MODE[prev]; + // Notify extension to set approval mode via ACP try { vscode.postMessage({ @@ -661,9 +655,6 @@ export const App: React.FC = () => { <> {/* Render all messages and tool calls */} {renderMessages()} - - {/* Changed to push each plan as a historical toolcall in useWebViewMessages to avoid duplicate display of the latest block */} - {messageHandling.isWaitingForResponse && messageHandling.loadingMessage && (