ai-chatbot/lib/canvas/agent-operation-errors.ts

46 lines
1.6 KiB
TypeScript

export type CanvasAgentOperationErrorCode =
| "STALE_CANVAS_REVISION"
| "CANVAS_AGENT_CONFIRMATION_REQUIRED"
| "CANVAS_AGENT_CONFLICT"
| "CANVAS_AGENT_WRITEBACK_DISABLED"
| "CANVAS_AGENT_WRITEBACK_FAILED";
const CANVAS_AGENT_OPERATION_ERROR_CODES = new Set<string>([
"STALE_CANVAS_REVISION",
"CANVAS_AGENT_CONFIRMATION_REQUIRED",
"CANVAS_AGENT_CONFLICT",
"CANVAS_AGENT_WRITEBACK_DISABLED",
"CANVAS_AGENT_WRITEBACK_FAILED",
]);
export function normalizeCanvasAgentOperationErrorCode(
value: unknown
): CanvasAgentOperationErrorCode {
const code = String(value || "").trim();
return CANVAS_AGENT_OPERATION_ERROR_CODES.has(code)
? (code as CanvasAgentOperationErrorCode)
: "CANVAS_AGENT_WRITEBACK_FAILED";
}
export function getCanvasAgentOperationErrorMessage(params: {
code?: unknown;
fallbackMessage?: string;
}) {
const code = normalizeCanvasAgentOperationErrorCode(params.code);
if (code === "STALE_CANVAS_REVISION") {
return "画布已更新,生成结果已保留在对话中。请刷新画布后重新确认写回。";
}
if (code === "CANVAS_AGENT_CONFIRMATION_REQUIRED") {
return "这个画布操作需要确认后再执行,生成结果已保留在对话中。";
}
if (code === "CANVAS_AGENT_CONFLICT") {
return "画布目标状态有冲突,生成结果已保留在对话中。请检查槽位或刷新后重试。";
}
if (code === "CANVAS_AGENT_WRITEBACK_DISABLED") {
return "当前画布 Agent 写回处于灰度保护,未修改画布。";
}
const fallback = String(params.fallbackMessage || "").trim();
return fallback || "画布写回失败,生成结果已保留在对话中。";
}