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
This commit is contained in:
yiliang114
2025-12-09 15:53:06 +08:00
parent 09cefbcf67
commit 21651410c8
2 changed files with 16 additions and 13 deletions

View File

@@ -147,6 +147,18 @@ export {
getApprovalModeInfoFromString, getApprovalModeInfoFromString,
} from './approvalModeTypes.js'; } 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) // Current mode update (sent by agent when mode changes)
export interface CurrentModeUpdate extends BaseSessionUpdate { export interface CurrentModeUpdate extends BaseSessionUpdate {
update: { update: {

View File

@@ -42,7 +42,7 @@ import {
import { InputForm } from './components/layout/InputForm.js'; import { InputForm } from './components/layout/InputForm.js';
import { SessionSelector } from './components/layout/SessionSelector.js'; import { SessionSelector } from './components/layout/SessionSelector.js';
import { FileIcon, UserIcon } from './components/icons/index.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 { ApprovalModeValue } from '../types/acpTypes.js';
import type { PlanEntry } from '../types/chatTypes.js'; import type { PlanEntry } from '../types/chatTypes.js';
@@ -464,17 +464,11 @@ export const App: React.FC = () => {
}); });
}, [vscode]); }, [vscode]);
// Handle toggle edit mode (Default -> Auto-edit -> Plan -> YOLO -> Default) // Handle toggle edit mode (Default -> Auto-edit -> YOLO -> Default)
const handleToggleEditMode = useCallback(() => { const handleToggleEditMode = useCallback(() => {
setEditMode((prev) => { setEditMode((prev) => {
const next: ApprovalModeValue = const next: ApprovalModeValue = NEXT_APPROVAL_MODE[prev];
prev === ApprovalMode.DEFAULT
? ApprovalMode.AUTO_EDIT
: prev === ApprovalMode.AUTO_EDIT
? ApprovalMode.PLAN
: prev === ApprovalMode.PLAN
? ApprovalMode.YOLO
: ApprovalMode.DEFAULT;
// Notify extension to set approval mode via ACP // Notify extension to set approval mode via ACP
try { try {
vscode.postMessage({ vscode.postMessage({
@@ -661,9 +655,6 @@ export const App: React.FC = () => {
<> <>
{/* Render all messages and tool calls */} {/* Render all messages and tool calls */}
{renderMessages()} {renderMessages()}
{/* Changed to push each plan as a historical toolcall in useWebViewMessages to avoid duplicate display of the latest block */}
{messageHandling.isWaitingForResponse && {messageHandling.isWaitingForResponse &&
messageHandling.loadingMessage && ( messageHandling.loadingMessage && (
<WaitingMessage <WaitingMessage