feat(ui): 支持 Auto Edit 运行时切换立即生效
- 添加 config_update WebSocket 消息类型 - setAutoApprove 切换时立即发送配置更新到服务端 - 服务端实时更新会话的 auto-approve 配置
This commit is contained in:
@@ -92,7 +92,7 @@ export type AgentModeType = 'build' | 'plan';
|
|||||||
|
|
||||||
// 客户端发送的消息
|
// 客户端发送的消息
|
||||||
export interface ClientMessage {
|
export interface ClientMessage {
|
||||||
type: 'message' | 'cancel' | 'tool_response' | 'permission_response';
|
type: 'message' | 'cancel' | 'tool_response' | 'permission_response' | 'config_update';
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
payload?: {
|
payload?: {
|
||||||
content?: string;
|
content?: string;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
import type { WSContext } from 'hono/ws';
|
import type { WSContext } from 'hono/ws';
|
||||||
import { getSessionManager } from './session/manager.js';
|
import { getSessionManager } from './session/manager.js';
|
||||||
import { processMessage, cancelProcessing } from './agent/index.js';
|
import { processMessage, cancelProcessing } from './agent/index.js';
|
||||||
import { handlePermissionResponse } from './permission/handler.js';
|
import { handlePermissionResponse, setSessionAutoApprove } from './permission/handler.js';
|
||||||
import type { ClientMessage, ServerMessage } from './types.js';
|
import type { ClientMessage, ServerMessage } from './types.js';
|
||||||
|
|
||||||
// 存储活跃的 WebSocket 连接
|
// 存储活跃的 WebSocket 连接
|
||||||
@@ -156,6 +156,22 @@ export async function handleWebSocketMessage(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'config_update': {
|
||||||
|
// 实时配置更新(如 Auto Edit 开关)
|
||||||
|
const autoApprove = message.payload?.autoApprove;
|
||||||
|
if (typeof autoApprove === 'boolean') {
|
||||||
|
if (autoApprove) {
|
||||||
|
setSessionAutoApprove(sessionId, {
|
||||||
|
file: { write: 'allow', edit: 'allow' },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setSessionAutoApprove(sessionId, null);
|
||||||
|
}
|
||||||
|
console.log(`[WS] Config updated for session ${sessionId}: autoApprove=${autoApprove}`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ws.send(
|
ws.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
|
|||||||
@@ -417,10 +417,24 @@ export function useChat({ sessionId, onError, onSessionNotFound, onSessionUpdate
|
|||||||
setState((prev) => ({ ...prev, agentMode: mode }));
|
setState((prev) => ({ ...prev, agentMode: mode }));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// 设置自动授权 (会话级别)
|
// 设置自动授权 (会话级别,立即生效)
|
||||||
const setAutoApprove = useCallback((enabled: boolean) => {
|
const setAutoApprove = useCallback(
|
||||||
|
(enabled: boolean) => {
|
||||||
setState((prev) => ({ ...prev, autoApprove: enabled }));
|
setState((prev) => ({ ...prev, autoApprove: enabled }));
|
||||||
}, []);
|
|
||||||
|
// 立即通过 WebSocket 发送配置更新,使其对当前执行生效
|
||||||
|
if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {
|
||||||
|
wsRef.current.send(
|
||||||
|
JSON.stringify({
|
||||||
|
type: 'config_update',
|
||||||
|
sessionId,
|
||||||
|
payload: { autoApprove: enabled },
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[sessionId]
|
||||||
|
);
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user