From f9d011164ad81b27c033f768db05003275339205 Mon Sep 17 00:00:00 2001 From: claude-code-best Date: Sun, 19 Apr 2026 10:32:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=BF=E6=8D=A2=20web=20=E7=AB=AF=20c?= =?UTF-8?q?rypto.randomUUID=20=E4=B8=BA=20uuid=20=E5=BA=93=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20HTTP=20=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- .../web/src/components/EventStream.tsx | 2 +- .../web/src/components/PermissionViews.tsx | 2 +- .../remote-control-server/web/src/lib/rcs-chat-adapter.ts | 3 ++- packages/remote-control-server/web/src/lib/rcs-transport.ts | 3 ++- packages/remote-control-server/web/src/lib/utils.ts | 6 ++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/remote-control-server/web/src/components/EventStream.tsx b/packages/remote-control-server/web/src/components/EventStream.tsx index bf6f4e559..8aca84884 100644 --- a/packages/remote-control-server/web/src/components/EventStream.tsx +++ b/packages/remote-control-server/web/src/components/EventStream.tsx @@ -444,7 +444,7 @@ function AskUserPanel({ const handleSubmit = () => { const mapped: Record = {}; for (const [qIdx, val] of Object.entries(answers)) { - const q = questions[parseInt(qIdx)]; + const q = questions[parseInt(qIdx, 10)]; if (!q) continue; if (typeof val === "number") { mapped[qIdx] = q.options?.[val]?.label || String(val); diff --git a/packages/remote-control-server/web/src/components/PermissionViews.tsx b/packages/remote-control-server/web/src/components/PermissionViews.tsx index df702c631..3a70a30bc 100644 --- a/packages/remote-control-server/web/src/components/PermissionViews.tsx +++ b/packages/remote-control-server/web/src/components/PermissionViews.tsx @@ -97,7 +97,7 @@ export function AskUserPanelView({ const handleSubmit = () => { const mapped: Record = {}; for (const [qIdx, val] of Object.entries(answers)) { - const q = questions[parseInt(qIdx)]; + const q = questions[parseInt(qIdx, 10)]; if (!q) continue; if (typeof val === "number") mapped[qIdx] = q.options?.[val]?.label || String(val); else if (Array.isArray(val)) mapped[qIdx] = val.map((i) => q.options?.[i]?.label || String(i)); diff --git a/packages/remote-control-server/web/src/lib/rcs-chat-adapter.ts b/packages/remote-control-server/web/src/lib/rcs-chat-adapter.ts index b4a36cb99..335374828 100644 --- a/packages/remote-control-server/web/src/lib/rcs-chat-adapter.ts +++ b/packages/remote-control-server/web/src/lib/rcs-chat-adapter.ts @@ -1,4 +1,5 @@ import type { SetStateAction } from "react"; +import { v4 as uuidv4 } from "uuid"; import { apiFetchSession, apiFetchSessionHistory, @@ -421,7 +422,7 @@ export class RCSChatAdapter { // Send to backend await apiSendEvent(this.sessionId, { type: "user", - uuid: crypto.randomUUID(), + uuid: uuidv4(), content: text, message: { content: text }, }); diff --git a/packages/remote-control-server/web/src/lib/rcs-transport.ts b/packages/remote-control-server/web/src/lib/rcs-transport.ts index 777662257..fc40c37ab 100644 --- a/packages/remote-control-server/web/src/lib/rcs-transport.ts +++ b/packages/remote-control-server/web/src/lib/rcs-transport.ts @@ -1,4 +1,5 @@ import type { ChatTransport, UIMessage, UIMessageChunk } from "ai"; +import { v4 as uuidv4 } from "uuid"; import { getUuid } from "../api/client"; import type { SessionEvent, EventPayload } from "../types"; @@ -112,7 +113,7 @@ export class RCSTransport implements ChatTransport { headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: "user", - uuid: crypto.randomUUID(), + uuid: uuidv4(), content: text, message: { content: text }, }), diff --git a/packages/remote-control-server/web/src/lib/utils.ts b/packages/remote-control-server/web/src/lib/utils.ts index 13b2d9fdb..834093ec9 100644 --- a/packages/remote-control-server/web/src/lib/utils.ts +++ b/packages/remote-control-server/web/src/lib/utils.ts @@ -1,5 +1,6 @@ import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; +import { v4 as uuidv4 } from "uuid"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); @@ -42,10 +43,7 @@ export function truncate(str: string | null | undefined, max: number): string { } export function generateMessageUuid(): string { - if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") { - return crypto.randomUUID(); - } - return `msg_${Date.now()}_${Math.random().toString(16).slice(2)}`; + return uuidv4(); } export function extractEventText(payload: Record | null | undefined): string {