diff --git a/src/components/chat/AgentPermissionRequests.tsx b/src/components/chat/AgentPermissionRequests.tsx index 4409935..7c94387 100644 --- a/src/components/chat/AgentPermissionRequests.tsx +++ b/src/components/chat/AgentPermissionRequests.tsx @@ -27,32 +27,6 @@ import VerifiedUserRounded from "@mui/icons-material/VerifiedUserRounded"; import type { PermissionReply } from "@/lib/chatStream"; import type { Message } from "./GlobalChatbox.types"; -const formatMetadataValue = (value: unknown) => { - if (typeof value === "string") { - return value; - } - try { - return JSON.stringify(value); - } catch { - return "[unserializable]"; - } -}; - -const truncateText = (value: string, maxLength: number) => - value.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value; - -const formatMetadata = (metadata: Record) => { - const entries = Object.entries(metadata) - .filter(([key]) => !["command", "path", "file", "directory"].includes(key)) - .slice(0, 3); - if (!entries.length) { - return ""; - } - return entries - .map(([key, value]) => `${key}: ${truncateText(formatMetadataValue(value), 64)}`) - .join(";"); -}; - const getPermissionTitle = (permission: NonNullable[number]) => { if (permission.permission === "external_directory") return "访问工作区外目录"; if (permission.permission === "bash") return "执行终端命令"; @@ -63,15 +37,8 @@ const getPermissionTitle = (permission: NonNullable[numb const getPermissionPrimaryValue = ( permission: NonNullable[number], ) => { - const command = permission.metadata.command; - if (typeof command === "string" && command.trim()) { - return command.trim(); - } - for (const key of ["path", "file", "directory"]) { - const value = permission.metadata[key]; - if (typeof value === "string" && value.trim()) { - return value.trim(); - } + if (typeof permission.target === "string" && permission.target.trim()) { + return permission.target.trim(); } return permission.patterns[0] ?? permission.permission; }; @@ -139,7 +106,6 @@ const PermissionRequestCard = ({ isRunning && (permission.status === "pending" || permission.status === "error"); const isSubmitting = isRunning && permission.status === "submitting"; const primaryValue = getPermissionPrimaryValue(permission); - const metadataText = formatMetadata(permission.metadata); const accentColor = getPermissionStatusColor(permission.status, theme); const statusTextColor = getPermissionStatusTextColor(permission.status, theme); const statusLabel = getPermissionStatusLabel(permission.status); @@ -237,12 +203,6 @@ const PermissionRequestCard = ({ {primaryValue} - - {metadataText ? ( - - {metadataText} - - ) : null} {permission.error ? ( diff --git a/src/components/chat/GlobalChatbox.types.ts b/src/components/chat/GlobalChatbox.types.ts index 8877e6b..95df637 100644 --- a/src/components/chat/GlobalChatbox.types.ts +++ b/src/components/chat/GlobalChatbox.types.ts @@ -41,7 +41,7 @@ export type AgentPermissionRequest = { sessionId: string; permission: string; patterns: string[]; - metadata: Record; + target?: string; always: string[]; tool?: { messageID: string; diff --git a/src/components/chat/GlobalChatbox.utils.ts b/src/components/chat/GlobalChatbox.utils.ts index 44ad9b6..f343664 100644 --- a/src/components/chat/GlobalChatbox.utils.ts +++ b/src/components/chat/GlobalChatbox.utils.ts @@ -88,7 +88,6 @@ export const cloneMessage = (message: Message): Message => ({ ? [...permission.patterns] : [], always: Array.isArray(permission.always) ? [...permission.always] : [], - metadata: permission.metadata ?? {}, })) : undefined, questions: normalizeQuestionRequests(message.questions), diff --git a/src/components/chat/hooks/agentChatSessionState.ts b/src/components/chat/hooks/agentChatSessionState.ts index 203bb62..2961f9e 100644 --- a/src/components/chat/hooks/agentChatSessionState.ts +++ b/src/components/chat/hooks/agentChatSessionState.ts @@ -115,7 +115,7 @@ export const upsertPermission = ( sessionId: event.sessionId, permission: event.permission, patterns: event.patterns, - metadata: event.metadata, + target: event.target, always: event.always, tool: event.tool, createdAt: event.createdAt, diff --git a/src/components/chat/hooks/useAgentChatSession.actions.test.tsx b/src/components/chat/hooks/useAgentChatSession.actions.test.tsx index 8149ea2..5b7e868 100644 --- a/src/components/chat/hooks/useAgentChatSession.actions.test.tsx +++ b/src/components/chat/hooks/useAgentChatSession.actions.test.tsx @@ -99,7 +99,7 @@ describe("useAgentChatSession actions", () => { requestId: "perm-1", permission: "bash", patterns: ["rm *"], - metadata: { command: "rm tmp.txt" }, + target: "rm tmp.txt", always: ["rm *"], createdAt: 123, }); @@ -163,7 +163,7 @@ describe("useAgentChatSession actions", () => { requestId: "perm-abort", permission: "bash", patterns: ["npm test"], - metadata: { command: "npm test" }, + target: "npm test", always: ["npm test"], createdAt: 1002, } satisfies StreamEvent); diff --git a/src/lib/chatStream.test.ts b/src/lib/chatStream.test.ts index 77c4593..339eaa9 100644 --- a/src/lib/chatStream.test.ts +++ b/src/lib/chatStream.test.ts @@ -186,7 +186,7 @@ describe("streamAgentChat", () => { apiFetch.mockResolvedValue({ ok: true, body: makeStream([ - 'event: permission_request\ndata: {"session_id":"s1","request_id":"perm-1","permission":"bash","patterns":["rm *"],"metadata":{"command":"rm tmp.txt"},"always":["rm *"],"created_at":123}\n\n', + 'event: permission_request\ndata: {"session_id":"s1","request_id":"perm-1","permission":"bash","patterns":["rm *"],"target":"rm tmp.txt","always":["rm *"],"created_at":123}\n\n', 'event: permission_response\ndata: {"session_id":"s1","request_id":"perm-1","reply":"reject"}\n\n', ]), }); @@ -205,7 +205,7 @@ describe("streamAgentChat", () => { requestId: "perm-1", permission: "bash", patterns: ["rm *"], - metadata: { command: "rm tmp.txt" }, + target: "rm tmp.txt", always: ["rm *"], tool: undefined, createdAt: 123, diff --git a/src/lib/chatStream.ts b/src/lib/chatStream.ts index 84886a7..f1fc494 100644 --- a/src/lib/chatStream.ts +++ b/src/lib/chatStream.ts @@ -98,7 +98,7 @@ export type StreamEvent = requestId: string; permission: string; patterns: string[]; - metadata: Record; + target?: string; always: string[]; tool?: { messageID: string; @@ -296,7 +296,7 @@ const emitParsedStreamEvent = ( request_id?: string; permission?: string; patterns?: unknown; - metadata?: unknown; + target?: string; always?: unknown; created_at?: number; reply?: PermissionReply; @@ -370,7 +370,7 @@ const emitParsedStreamEvent = ( patterns: Array.isArray(parsed.patterns) ? parsed.patterns.filter((item): item is string => typeof item === "string") : [], - metadata: isObjectRecord(parsed.metadata) ? parsed.metadata : {}, + target: typeof parsed.target === "string" ? parsed.target : undefined, always: Array.isArray(parsed.always) ? parsed.always.filter((item): item is string => typeof item === "string") : [],