From ac0456eb9727b0bf33944a57af96314303aa8c54 Mon Sep 17 00:00:00 2001 From: 134 Date: Tue, 23 Jun 2026 20:51:25 +0800 Subject: [PATCH] fix: bypass image billing for canvas view intents --- lib/canvas/agent-client-intent.ts | 4 ++-- tests/routes/canvas-chat-helpers.test.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/canvas/agent-client-intent.ts b/lib/canvas/agent-client-intent.ts index c0f330650..c2be2dc45 100644 --- a/lib/canvas/agent-client-intent.ts +++ b/lib/canvas/agent-client-intent.ts @@ -10,7 +10,7 @@ const CANVAS_AGENT_IMAGE_GENERATION_OR_EDIT_REGEX = /(生成|生图|出图|画一张|来一张|做一张|做图|做视频|生成视频|视频生成|换背景|背景换|白底|去背景|删除背景|抠图|高清|增强|超清|超分|修图|重绘|扩图|扩展画幅|局部重绘|风格化|海报|主图|logo)/i; const CANVAS_AGENT_VIEW_CONTROL_REGEX = - /(看全局|看全部|缩小看|适配全部|适配画布|聚焦选中|聚焦结果|聚焦刚生成|focus selection|focus latest|fit all|zoom in|zoom out|pan to)|(画布|视角|镜头|viewport|canvas).{0,12}(放大|缩小|缩放|聚焦|定位|居中|看全局|看全部|移动|平移|拖动|zoom|fit|focus|pan)|(放大|缩小|缩放|聚焦|定位|居中|zoom|fit|focus).{0,12}(画布|视角|镜头|全局|全部|选中|选择|刚生成|结果|节点|对象|图片|图)/i; + /(看全局|看全部|缩小看|适配全部|适配画布|聚焦选中|聚焦结果|聚焦刚生成|对比.{0,8}(原图|新图|结果|版本)|(原图|新图|结果|版本).{0,8}对比|focus selection|focus latest|fit all|zoom in|zoom out|pan to)|(画布|视角|镜头|viewport|canvas).{0,12}(放大|缩小|缩放|聚焦|定位|居中|看全局|看全部|移动|平移|拖动|zoom|fit|focus|pan)|(放大|缩小|缩放|聚焦|定位|居中|zoom|fit|focus).{0,12}(画布|视角|镜头|全局|全部|选中|选择|刚生成|结果|节点|对象|图片|图)/i; const CANVAS_AGENT_SLOT_MANAGEMENT_REGEX = /(新建|创建|添加|插入|放置|加一个|建一个).{0,10}(图片|视频|ui|画面|空)?(槽位|slot|空框|占位框|框)|(槽位|slot|空框|占位框).{0,10}(新建|创建|添加|插入|放置)/i; @@ -21,9 +21,9 @@ const CANVAS_AGENT_STRUCTURAL_OPERATION_REGEX = export function hasCanvasAgentNonGenerativeControlIntent(value: unknown) { const text = normalizeCanvasAgentClientIntentText(value); if (!text) return false; + if (CANVAS_AGENT_VIEW_CONTROL_REGEX.test(text)) return true; if (CANVAS_AGENT_IMAGE_GENERATION_OR_EDIT_REGEX.test(text)) return false; return ( - CANVAS_AGENT_VIEW_CONTROL_REGEX.test(text) || CANVAS_AGENT_SLOT_MANAGEMENT_REGEX.test(text) || CANVAS_AGENT_STRUCTURAL_OPERATION_REGEX.test(text) ); diff --git a/tests/routes/canvas-chat-helpers.test.ts b/tests/routes/canvas-chat-helpers.test.ts index dd79c3abc..ed1e358e8 100644 --- a/tests/routes/canvas-chat-helpers.test.ts +++ b/tests/routes/canvas-chat-helpers.test.ts @@ -234,6 +234,8 @@ test.describe("canvas chat pure helpers", () => { test("bypasses image point precheck only for non-generative canvas agent controls", () => { expect(hasCanvasAgentNonGenerativeControlIntent("把画布放大一点")).toBe(true); expect(hasCanvasAgentNonGenerativeControlIntent("缩小看全局")).toBe(true); + expect(hasCanvasAgentNonGenerativeControlIntent("聚焦刚生成结果")).toBe(true); + expect(hasCanvasAgentNonGenerativeControlIntent("对比原图和新图")).toBe(true); expect(hasCanvasAgentNonGenerativeControlIntent("新建一个图片槽位")).toBe(true); expect(hasCanvasAgentNonGenerativeControlIntent("创建一个图片槽位")).toBe(true); expect(hasCanvasAgentNonGenerativeControlIntent("删除选中的节点")).toBe(true); @@ -248,6 +250,20 @@ test.describe("canvas chat pure helpers", () => { agentEnabled: true, }) ).toBe(true); + expect( + shouldBypassCanvasImagePointsPrecheckForAgentControl({ + text: "聚焦刚生成结果", + activeComposerMode: "image", + agentEnabled: true, + }) + ).toBe(true); + expect( + shouldBypassCanvasImagePointsPrecheckForAgentControl({ + text: "对比原图和新图", + activeComposerMode: "image", + agentEnabled: true, + }) + ).toBe(true); expect( shouldBypassCanvasImagePointsPrecheckForAgentControl({ text: "把画布放大一点",