From 7673edb04e2ca9d6628ee20f8ea26e6052982ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Fri, 2 Oct 2026 11:09:41 +0800 Subject: [PATCH] =?UTF-8?q?AGC=E8=AE=A4=E8=AF=81=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E8=BD=BD=E4=BD=93=E6=8A=8A=E8=BD=BD=E8=8D=B7=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E8=BF=9Bmessage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ClientAuthErrorWrapper 构造时 super(JSON.stringify(error)):结构化拒绝在上报事件里是变体名与载荷,不再落成未知客户端错误 - errorReporting 注释同步:载体 message 已带载荷,Tauri 缺陷抛出的真 Error 仍优先用其自身 message/stack --- .../src/services/clientAuthErrorWrapper.ts | 10 +++++++--- .../src/services/errorReporting.ts | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/ai-game-creator-shell/src/services/clientAuthErrorWrapper.ts b/apps/ai-game-creator-shell/src/services/clientAuthErrorWrapper.ts index 0f9b0a4f2..a9432d3b6 100644 --- a/apps/ai-game-creator-shell/src/services/clientAuthErrorWrapper.ts +++ b/apps/ai-game-creator-shell/src/services/clientAuthErrorWrapper.ts @@ -15,15 +15,19 @@ export type ClientErrorReportContext = { * 认证命令失败的 JS 侧载体:`error` 就是 Rust 的结构化拒绝(ts-rs 生成的 `ClientAuthError` * 判别联合)。 * - * 本类只把原始拒绝值装成 JS `Error`,不读、不产任何派生值:不读变体字段,不注入 - * `source` / `action`,`Error.message` 留空。分流只看类型化的变体, + * 构造时把整份载荷 `JSON.stringify` 进 `Error.message`:结构化拒绝是普通对象,序列化后 + * 上报事件拿到的是机器事实(变体名与载荷),而不是 `[object Object]`;不读任何变体字段、 + * 不拼用户文案、不注入 `source` / `action`。分流只看类型化的变体, * **不要用文案判断**;上报上下文由调用 `captureClientError` 时的显式入参决定。 + * + * Tauri 缺陷抛出的真 `Error` 序列化只有 `{}`,但上报链路对真 `Error` 优先用其自身 + * message/stack,不受影响。 */ export class ClientAuthErrorWrapper extends Error { readonly error: ClientAuthError; constructor(error: ClientAuthError) { - super(); + super(JSON.stringify(error)); this.name = 'ClientAuthErrorWrapper'; this.error = error; } diff --git a/apps/ai-game-creator-shell/src/services/errorReporting.ts b/apps/ai-game-creator-shell/src/services/errorReporting.ts index 09c1fb0b1..c8c9b37ea 100644 --- a/apps/ai-game-creator-shell/src/services/errorReporting.ts +++ b/apps/ai-game-creator-shell/src/services/errorReporting.ts @@ -80,8 +80,8 @@ export async function captureClientError( error: unknown, context: Partial = {}, ) { - // ClientAuthErrorWrapper 只把原始拒绝值装成 JS Error:真的 message / stack 在 `error` 字段里, - // 载体自身是空文案。结构化 Rust 拒绝没有 JS Error 语义,落回默认文案。 + // ClientAuthErrorWrapper 构造时已把整份载荷序列化进 message:结构化拒绝在这里直接作为事件 + // 文案上报;真 Error 仍优先用它自己的 message / stack。 const actionError = error instanceof ClientAuthErrorWrapper ? error : null; // 类型上 `error` 是 ClientAuthError;Tauri 在映射外抛 Error 属于它的缺陷,这里按 unknown 兜底取文案/栈。 const carried: unknown = actionError?.error;