From 2fb3ed8512f4d911df51398af8a0f2063b39afc3 Mon Sep 17 00:00:00 2001 From: 134 Date: Tue, 20 Oct 2026 18:18:44 +0800 Subject: [PATCH] feat(agent): complete non-video business grants with verified contracts --- components/canvas/CanvasChatPanel.tsx | 6 + .../zcode-canvas/authorization-audit.html | 2 +- .../zcode-canvas/authorization-audit.json | 280 +++++++++++++++++- .../project-operation-catalog.ts | 22 +- .../project-operation-contracts.json | 279 +++++++++++++++++ ...roject-operation-production-contracts.json | 52 ++++ lib/ai/canvas-agent-runtime/project-tools.ts | 20 +- scripts/zcode-agent/audit-project-tools.mjs | 11 +- .../routes/canvas-agent-project-tools.test.ts | 10 +- 9 files changed, 668 insertions(+), 14 deletions(-) create mode 100644 lib/ai/canvas-agent-runtime/project-operation-production-contracts.json diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index fa55ddd80..d49dbbca9 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -7983,6 +7983,12 @@ export function CanvasChatPanel({ const eventChatId = inFlightChatIdRef.current || activeChatId; const isEventForActiveChat = eventChatId === activeChatIdRef.current; + if (dataPart.type === "data-canvasProjectMetadata") { + const payload = dataPart.data as { projectId?: string; title?: string }; + const state = useCanvasStore.getState(); + if (payload.projectId === state.projectId && typeof payload.title === "string") state.setProjectTitle(payload.title); + return; + } if (dataPart.type === "data-canvasAgentRun") { window.dispatchEvent(new CustomEvent("canvas-agent-run:update", { detail: dataPart.data })); return; diff --git a/docs/specs/zcode-canvas/authorization-audit.html b/docs/specs/zcode-canvas/authorization-audit.html index 1c39bf6e8..667466712 100644 --- a/docs/specs/zcode-canvas/authorization-audit.html +++ b/docs/specs/zcode-canvas/authorization-audit.html @@ -1 +1 @@ -ZCode Agent 工具授权清单

ZCode Agent 工具授权清单

图片画布及非视频项目业务已授权;视频画布与分镜暂不授权;底层用户权限与服务开关仍生效。管理、密钥、支付、身份认证、系统任务和Claw不属于创作Agent工具。

共 312 项能力;每一项均保留实际执行方式与限制。接口鉴权不等于业务结果已完成。

范围能力授权工具 / 操作编号执行限制
canvas添加到对话已授权image_add_to_chat
canvas识物已授权image_pick_object
canvas高清增强已授权enhanceImage
canvas抠图去背已授权removeBackground
canvasAI洗图已授权image_ai_wash参数齐全时执行,否则打开真实交互面板
canvas图片改字已授权image_text_edit参数齐全时执行,否则打开真实交互面板
canvas框选抠图已授权boxCutout参数齐全时执行,否则打开真实交互面板
canvas局部编辑已授权localEditImage参数齐全时执行,否则打开真实交互面板
canvas排版替换已授权image_layout_replace
canvas比例调整已授权image_scale_adjust参数齐全时执行,否则打开真实交互面板
canvas去水印已授权removeWatermark
canvas尺寸调整已授权resizeImage参数齐全时执行,否则打开真实交互面板
canvas多视角已授权angleEditImage参数齐全时执行,否则打开真实交互面板
canvas生成3D模型已授权image_generate_3d_model参数齐全时执行,否则打开真实交互面板
canvas生成3D世界已授权image_generate_3d_world参数齐全时执行,否则打开真实交互面板
canvas图层拆分已授权image_layer_split
canvas扩图已授权extendImage
canvas裁剪已授权image_crop参数齐全时执行,否则打开真实交互面板
canvas画面调整已授权image_adjust
canvas翻转与旋转已授权image_flip_rotate参数齐全时执行,否则打开真实交互面板
canvas提示词重绘已授权editTargetImage参数齐全时执行,否则打开真实交互面板
canvas添加批注已授权image_note参数齐全时执行,否则打开真实交互面板
canvas重命名已授权image_rename参数齐全时执行,否则打开真实交互面板
canvas下载图片已授权image_download
canvas删除图片已授权image_delete需要用户明确要求及明确目标;模型不能自行确认
canvas画布主工具栏 · 选择已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 平移已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 保存到云端已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 云文件列表已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 标记暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 工作流连线暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 风格化模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 风格化 PRO已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 批量处理已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 添加图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 图片槽位已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加图片输入暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 添加文本已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加脚本节点暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加视频输入暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 视频工作流节点库暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 实时画布模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 图像增强模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 3D生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 导出视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 导入视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 新建画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 新建视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 撤销已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 重做已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 缩小已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 重置缩放已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 放大已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 下载文件夹已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加对话已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 识物已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 高清已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 框选抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 局部编辑已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 排版替换已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 去水印已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 尺寸已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 文字已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 多视角已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 3D模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 3D世界已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 图层拆分已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 扩图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 裁剪已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 调整已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 翻转与旋转已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 重绘已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加批注已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 改名已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 开启对比已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 确认抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 取消抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除文本模块已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 检查并修复 UI已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除 UI Screen已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 保存已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 上传视频暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 播放暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 暂停暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 静音暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 取消静音暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 更多操作暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 下载暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 删除暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除模块已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 3D已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 World已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 Mesh已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开图像已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 复制链接已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · World 视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 图像视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · Mesh 视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 进入漫游已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加热点已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 Mesh已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开图像已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 复制链接已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 返回画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 实时画布模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图像增强模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图层已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图层拆分导入已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 添加图片图层已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 下载图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 鼠标已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 画笔已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 橡皮已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 形状已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 保存项目已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 项目列表已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 新建空白已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 发送到画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · Auto Agent已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 预设Agent已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · Agent对话已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · AI详情已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · AI详情生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 生图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 图像生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video对话框工具栏 · 视频暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video对话框工具栏 · 视频生成暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 上传图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 深度思考已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 选择模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 积分已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 发送已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 开始生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布操作 · 创建输出槽位已授权editCanvasNodes
canvas画布操作 · 创建文本节点已授权editCanvasNodes
canvas画布操作 · 填充输出槽位已授权editCanvasNodes
canvas画布操作 · 在素材旁添加结果已授权editCanvasNodes
canvas画布操作 · 追加素材版本已授权editCanvasNodes
canvas画布操作 · 替换节点媒体已授权editCanvasNodes
canvas画布操作 · 添加标注已授权editCanvasNodes
canvas画布操作 · 节点连线已授权editCanvasNodes
canvas画布操作 · 移动节点已授权editCanvasNodes
canvas画布操作 · 删除节点已授权editCanvasNodes
canvas画布操作 · 重命名节点已授权editCanvasNodes
canvas画布操作 · 更新批注已授权editCanvasNodes
canvas画布操作 · 更新文本已授权editCanvasNodes
video剧情推演四宫格暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video角色三视图生成暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video多机位九宫格暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video25宫格连贯分镜暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video电影级光影校正暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video画面推演 - 3秒后暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video画面推演 - 5秒前暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video宫格切分暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video打光暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video高清暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video720 全景暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video扩图暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video重绘暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video擦除暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video抠图暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video裁剪暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video多角度编辑器暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video故事脚本生成暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video视频解析暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video图片反推提示词暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video视频元素标记暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video文生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video首帧图生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video首尾帧生成视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video音频生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力;当前页面未接真实音频驱动视频后端,已授权入口但不能伪称完成音频驱动
video节点重命名暂未授权editVideoCanvas用户暂未授权视频画布能力
video节点移动暂未授权editVideoCanvas用户暂未授权视频画布能力
video复制节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video删除节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video工作流连线暂未授权editVideoCanvas用户暂未授权视频画布能力
video移除连线暂未授权editVideoCanvas用户暂未授权视频画布能力
video节点批注暂未授权editVideoCanvas用户暂未授权视频画布能力
video编辑文本暂未授权editVideoCanvas用户暂未授权视频画布能力
video添加文本节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video排列节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video画布缩放与定位暂未授权editVideoCanvas用户暂未授权视频画布能力
video真实视频截帧暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video真实视频剪辑导出暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video真实视频裁剪暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video提取完整音轨暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video生成无声视频暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video上传图片暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video上传视频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video上传音频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video下载素材暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video预览素材暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video局部编辑暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video标注暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频高清暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video选择视频剪辑范围暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频裁剪面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video去字幕面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video音视频分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video人声分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video背景音分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video导演台暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video分镜工作台暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video批量生成分镜暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video批量生成视频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video素材库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video角色库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video风格库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video特效库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video生成历史暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video工作流模板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video保存画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video导出画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video导入画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video分享设置暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video发布设置暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频技能暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video帮助与快捷键暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video提取首帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video提取尾帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video提取指定时间帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
技能可访问技能列表已授权skills.getquery: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。
技能技能分类已授权skill-categories.get无需参数
素材商品 SKU/SPU 素材检索已授权materials.getquery: keyword必填,source=primary/secondary、queryType=sku/spu、requiredCount可选
素材参考图检索已授权references.getquery: keyword、source、queryType;以接口返回的实际素材为准
素材素材外观识别已授权appearance.postbody: imageUrls等图片参数,接口验证服务配置与格式
素材第三方图片素材检索已授权third-party-materials.getquery: keyword、page、pageSize;沿用站点数据权限
素材图库素材已授权gallery.getquery: page、pageSize、category、keyword可选
素材精选素材已授权featured.getquery: category、page可选
素材素材排行榜已授权ranking.getquery: type、limit可选
PSDPSD 模板列表已授权psd-templates.getquery: category、keyword可选
PSDPSD 模板图层信息已授权psd-template.getpathParams: id=模板编号
PSDPSD 真正渲染与任务状态已授权psd-render.getPOST body: templateId必填,imageAssignments/textAssignments/hiddenLayerIds/layerOrderIds/imagePlacements等;GET query: taskId。pending/running只代表已受理,必须轮询到succeeded且有result.url才可交付。
PSDPSD 真正渲染与任务状态已授权psd-render.postPOST body: templateId必填,imageAssignments/textAssignments/hiddenLayerIds/layerOrderIds/imagePlacements等;GET query: taskId。pending/running只代表已受理,必须轮询到succeeded且有result.url才可交付。
详情与设计详情页与 UI 设计规划已授权detail-plan.postbody: prompt、图片和设计上下文;遵循接口校验
详情与设计详情结果验收已授权detail-review.postbody: prompt、imageUrls等真实设计图信息
详情与设计详情主体分析已授权detail-subject.postbody: 图片与产品信息
详情与设计UI 页面验收已授权ui-review.postbody: 真实页面设计文档与审核要求
详情与设计图片文案建议已授权text-copy.postbody: imageUrl、prompt等文案上下文
详情与设计详情图片拼接已授权detail-stitch.postbody: images或imageUrls等拼接参数
详情与设计详情图片归一化已授权detail-normalize.postbody: 图片链接与尺寸参数
详情与设计风格化可用模型已授权style-models.get无需参数,不返回密钥
详情与设计风格化 PRO 生成已授权style-generate.postbody: 模型、提示词与参考图,遵守用户指定模型;不改站点配置
详情与设计AI 图像处理可用模型已授权wash-models.get无需参数
详情与设计AI 图像处理已授权wash-generate.postbody: 用户图像与参数;结果未确认不能重提收费任务
商品策划商品图片分析已授权planning-image.postbody: imageUrl与产品上下文;底层功能开关仍生效
商品策划商品 SKU 分析已授权planning-sku.postbody: sku与用户商品信息
商品策划评价与问大家分析已授权planning-analysis.postbody: kind=review/qa,rows为真实评价或问答数组
商品策划关键词洞察已授权planning-keywords.getquery: keyword等检索参数
商品策划taobao 商品详情已授权planning-taobao-item.getquery: itemId等商品编号
商品策划jd 商品详情已授权planning-jd-item.getquery: itemId等商品编号
商品策划淘宝真实评价已授权planning-reviews.getquery: itemId、page等
商品策划淘宝月销量已授权planning-sales.getquery: itemId
商品策划淘宝问大家已授权planning-qa.postbody: itemId等商品编号
商品策划平台商品检索已授权planning-market-items.postbody: platform、keyword等检索参数
商品策划策划模板列表与保存已授权planning-templates.getPOST body: title与策划内容;只保存当前用户自己的模板
商品策划策划模板列表与保存已授权planning-templates.postPOST body: title与策划内容;只保存当前用户自己的模板
商品策划策划模板读取与删除已授权planning-template.getpathParams: id;删除需要用户明确指定此编号
商品策划策划模板读取与删除已授权planning-template.deletepathParams: id;删除需要用户明确指定此编号
流程白板白板文件列表与创建已授权flow-files.getPOST body: title、snapshot;snapshot必须为真实白板快照
流程白板白板文件列表与创建已授权flow-files.postPOST body: title、snapshot;snapshot必须为真实白板快照
流程白板白板文件读取、修改、删除已授权flow-file.getpathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板文件读取、修改、删除已授权flow-file.putpathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板文件读取、修改、删除已授权flow-file.deletepathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板草稿读取与保存已授权flow-draft.getPUT body: title、snapshot;只操作当前用户草稿
流程白板白板草稿读取与保存已授权flow-draft.putPUT body: title、snapshot;只操作当前用户草稿
分镜任务视频模型能力与参数暂未授权video-capabilities.getquery: modelId等;沿用用户模型
分镜任务用户视频任务列表暂未授权video-tasks.getquery: page、limit等;仅当前用户任务
分镜任务分镜任务与阶段推进暂未授权storyboard-task.getpathParams: taskId;读取实际状态后再按接口动作推进,不重启已有收费任务
分镜任务确认用户分镜参数暂未授权storyboard-confirm.postpathParams: taskId;body: 用户实际确认的镜头与参数,不虚构用户确认
分镜任务停止指定分镜任务暂未授权storyboard-cancel.postpathParams: taskId;需用户明确要求停止此编号
分镜任务分镜镜头修订暂未授权storyboard-shot.patchpathParams: taskId、shotIndex;body: 用户要求的镜头修改
分镜任务指定镜头高清处理暂未授权storyboard-hd.postpathParams: taskId、shotIndex;会产生费用,只有用户要求高清才执行
项目Agent 创作项目列表与创建已授权agent-projects.getPOST body: title等项目数据;不写入其他用户项目
项目Agent 创作项目列表与创建已授权agent-projects.postPOST body: title等项目数据;不写入其他用户项目
项目Agent 创作项目读写已授权agent-project.getpathParams: id;修改先读当前内容,删除需用户明确指定编号
项目Agent 创作项目读写已授权agent-project.putpathParams: id;修改先读当前内容,删除需用户明确指定编号
项目Agent 创作项目读写已授权agent-project.deletepathParams: id;修改先读当前内容,删除需用户明确指定编号
项目用户画布列表与创建已授权canvas-list.getPOST body: title、workspaceType=canvas/video等
项目用户画布列表与创建已授权canvas-list.postPOST body: title、workspaceType=canvas/video等
项目读取用户画布已授权canvas-read.getpathParams: id;只读取当前用户有权限的画布,节点写入使用专用画布工具
项目画布详情归档已授权detail-archives.getpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.postpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.patchpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.deletepathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目3D 资产归档已授权model-assets.getpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.postpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.patchpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.deletepathParams: id=当前画布编号;只处理拥有权限的资产
3D3D 生成任务状态已授权3d-task.getpathParams: taskId;生成用已有3D专用能力,不重复提交
3D场景生成任务状态已授权world-task.getpathParams: taskId;生成用已有场景专用能力
智能编辑智能图层编辑能力已授权smart-edit.get无需参数;仅当该部署版本已有此功能时可用
文档读取与保存用户文档已授权documents.getquery: id=文档UUID;POST body: title、kind=text/code/sheet/image、content。更新前先读取原文档,不操作其他用户文档。
文档读取与保存用户文档已授权documents.postquery: id=文档UUID;POST body: title、kind=text/code/sheet/image、content。更新前先读取原文档,不操作其他用户文档。
图像处理专业高清处理任务与查询已授权enhance-pro.getPOST body按接口实际模型与尺寸要求,GET query: taskId。仅任务成功后才能交付,不能重复付费提交。
图像处理专业高清处理任务与查询已授权enhance-pro.postPOST body按接口实际模型与尺寸要求,GET query: taskId。仅任务成功后才能交付,不能重复付费提交。
文档、天气与技能getWeather已授权getWeather
文档、天气与技能createDocument已授权createDocument
文档、天气与技能updateDocument已授权updateDocument
文档、天气与技能requestSuggestions已授权requestSuggestions
文档、天气与技能loadProjectSkill已授权loadProjectSkill
\ No newline at end of file +ZCode Agent 工具授权清单

ZCode Agent 工具授权清单

图片画布及非视频项目业务已授权;视频画布与分镜暂不授权;底层用户权限与服务开关仍生效。管理、密钥、支付、身份认证、系统任务和Claw不属于创作Agent工具。

共 333 项授权检查(包含界面入口和接口映射);每一项均保留实际执行方式与限制。接口鉴权不等于业务结果已完成。

范围能力授权工具 / 操作编号执行限制
canvas添加到对话已授权image_add_to_chat
canvas识物已授权image_pick_object
canvas高清增强已授权enhanceImage
canvas抠图去背已授权removeBackground
canvasAI洗图已授权image_ai_wash参数齐全时执行,否则打开真实交互面板
canvas图片改字已授权image_text_edit参数齐全时执行,否则打开真实交互面板
canvas框选抠图已授权boxCutout参数齐全时执行,否则打开真实交互面板
canvas局部编辑已授权localEditImage参数齐全时执行,否则打开真实交互面板
canvas排版替换已授权image_layout_replace
canvas比例调整已授权image_scale_adjust参数齐全时执行,否则打开真实交互面板
canvas去水印已授权removeWatermark
canvas尺寸调整已授权resizeImage参数齐全时执行,否则打开真实交互面板
canvas多视角已授权angleEditImage参数齐全时执行,否则打开真实交互面板
canvas生成3D模型已授权image_generate_3d_model参数齐全时执行,否则打开真实交互面板
canvas生成3D世界已授权image_generate_3d_world参数齐全时执行,否则打开真实交互面板
canvas图层拆分已授权image_layer_split
canvas扩图已授权extendImage
canvas裁剪已授权image_crop参数齐全时执行,否则打开真实交互面板
canvas画面调整已授权image_adjust
canvas翻转与旋转已授权image_flip_rotate参数齐全时执行,否则打开真实交互面板
canvas提示词重绘已授权editTargetImage参数齐全时执行,否则打开真实交互面板
canvas添加批注已授权image_note参数齐全时执行,否则打开真实交互面板
canvas重命名已授权image_rename参数齐全时执行,否则打开真实交互面板
canvas下载图片已授权image_download
canvas删除图片已授权image_delete需要用户明确要求及明确目标;模型不能自行确认
canvas画布主工具栏 · 选择已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 平移已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 保存到云端已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 云文件列表已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 标记暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 工作流连线暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 风格化模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 风格化 PRO已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 批量处理已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 添加图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 图片槽位已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加图片输入暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 添加文本已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加脚本节点暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 添加视频输入暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 视频工作流节点库暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 实时画布模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 图像增强模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 3D生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 导出视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 导入视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布主工具栏 · 新建画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video画布主工具栏 · 新建视频画布暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 撤销已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 重做已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 缩小已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 重置缩放已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 放大已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布快捷工具条 · 下载文件夹已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加对话已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 识物已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 高清已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 框选抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 局部编辑已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 排版替换已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 去水印已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 尺寸已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 文字已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 多视角已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 3D模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 3D世界已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 图层拆分已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 扩图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 裁剪已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 调整已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 翻转与旋转已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 重绘已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加批注已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 改名已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 开启对比已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 确认抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 取消抠图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除文本模块已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 检查并修复 UI已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除 UI Screen已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 保存已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 上传视频暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 播放暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 暂停暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 静音暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 取消静音暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 更多操作暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 下载暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video节点工具栏 · 删除暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除模块已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 3D已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 World已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 Mesh已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开图像已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 复制链接已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · World 视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 图像视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · Mesh 视图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 进入漫游已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 添加热点已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 更多操作已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开 Mesh已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 打开图像已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 下载模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 复制链接已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas节点工具栏 · 删除已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 返回画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 实时画布模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图像增强模式已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图层已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 图层拆分导入已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 添加图片图层已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 下载图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 鼠标已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 画笔已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 橡皮已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 形状已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 保存项目已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 项目列表已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 新建空白已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas实时画布工具栏 · 发送到画布已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · Auto Agent已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 预设Agent已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · Agent对话已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · AI详情已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · AI详情生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 生图已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 图像生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video对话框工具栏 · 视频暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
video对话框工具栏 · 视频生成暂未授权openCanvasFeature用户暂未授权视频画布能力;操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 上传图片已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 深度思考已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 选择模型已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 积分已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 发送已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas对话框工具栏 · 开始生成已授权openCanvasFeature操作当前可见的真实入口;隐藏入口保持隐藏,文件选择、支付、登录、发布和发送消息由用户完成
canvas画布操作 · 创建输出槽位已授权editCanvasNodes
canvas画布操作 · 创建文本节点已授权editCanvasNodes
canvas画布操作 · 填充输出槽位已授权editCanvasNodes
canvas画布操作 · 在素材旁添加结果已授权editCanvasNodes
canvas画布操作 · 追加素材版本已授权editCanvasNodes
canvas画布操作 · 替换节点媒体已授权editCanvasNodes
canvas画布操作 · 添加标注已授权editCanvasNodes
canvas画布操作 · 节点连线已授权editCanvasNodes
canvas画布操作 · 移动节点已授权editCanvasNodes
canvas画布操作 · 删除节点已授权editCanvasNodes
canvas画布操作 · 重命名节点已授权editCanvasNodes
canvas画布操作 · 更新批注已授权editCanvasNodes
canvas画布操作 · 更新文本已授权editCanvasNodes
video剧情推演四宫格暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video角色三视图生成暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video多机位九宫格暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video25宫格连贯分镜暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video电影级光影校正暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video画面推演 - 3秒后暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video画面推演 - 5秒前暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video宫格切分暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video打光暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video高清暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video720 全景暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video扩图暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video重绘暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video擦除暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video抠图暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video裁剪暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video多角度编辑器暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video故事脚本生成暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video视频解析暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video图片反推提示词暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video视频元素标记暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video文生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video首帧图生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video首尾帧生成视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力
video音频生视频暂未授权runVideoCanvasFunction用户暂未授权视频画布能力;当前页面未接真实音频驱动视频后端,已授权入口但不能伪称完成音频驱动
video节点重命名暂未授权editVideoCanvas用户暂未授权视频画布能力
video节点移动暂未授权editVideoCanvas用户暂未授权视频画布能力
video复制节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video删除节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video工作流连线暂未授权editVideoCanvas用户暂未授权视频画布能力
video移除连线暂未授权editVideoCanvas用户暂未授权视频画布能力
video节点批注暂未授权editVideoCanvas用户暂未授权视频画布能力
video编辑文本暂未授权editVideoCanvas用户暂未授权视频画布能力
video添加文本节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video排列节点暂未授权editVideoCanvas用户暂未授权视频画布能力
video画布缩放与定位暂未授权editVideoCanvas用户暂未授权视频画布能力
video真实视频截帧暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video真实视频剪辑导出暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video真实视频裁剪暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video提取完整音轨暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video生成无声视频暂未授权processVideoMedia用户暂未授权视频画布能力;使用真实媒体处理并上传现有存储,不复用页面的模拟产物;单次视频不超过120秒
video上传图片暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video上传视频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video上传音频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video下载素材暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video预览素材暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video局部编辑暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video标注暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频高清暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video选择视频剪辑范围暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频裁剪面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video去字幕面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video音视频分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video人声分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video背景音分离面板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video导演台暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video分镜工作台暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video批量生成分镜暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video批量生成视频暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video素材库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video角色库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video风格库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video特效库暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video生成历史暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video工作流模板暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video保存画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video导出画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video导入画布暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video分享设置暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video发布设置暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video视频技能暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video帮助与快捷键暂未授权openVideoCanvasFeature用户暂未授权视频画布能力
video提取首帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video提取尾帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
video提取指定时间帧暂未授权openVideoCanvasFeature用户暂未授权视频画布能力;页面当前为占位/模拟流程;只授权设置入口,不执行模拟产物或声称媒体已处理
技能可访问技能列表已授权skills.getquery: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。
技能可访问技能列表已授权skills.postquery: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。
技能技能分类已授权skill-categories.get无需参数
素材商品 SKU/SPU 素材检索已授权materials.getquery: keyword必填,source=primary/secondary、queryType=sku/spu、requiredCount可选
素材参考图检索已授权references.getquery: keyword、source、queryType;以接口返回的实际素材为准
素材素材外观识别已授权appearance.postbody: imageUrls等图片参数,接口验证服务配置与格式
素材第三方图片素材检索已授权third-party-materials.getquery: keyword、page、pageSize;沿用站点数据权限
素材图库素材已授权gallery.getquery: page、pageSize、category、keyword可选
素材精选素材已授权featured.getquery: category、page可选
素材素材排行榜已授权ranking.getquery: type、limit可选
PSDPSD 模板列表已授权psd-templates.getquery: category、keyword可选
PSDPSD 模板图层信息已授权psd-template.getpathParams: id=模板编号
PSDPSD 真正渲染与任务状态已授权psd-render.getPOST body: templateId必填,imageAssignments/textAssignments/hiddenLayerIds/layerOrderIds/imagePlacements等;GET query: taskId。pending/running只代表已受理,必须轮询到succeeded且有result.url才可交付。
PSDPSD 真正渲染与任务状态已授权psd-render.postPOST body: templateId必填,imageAssignments/textAssignments/hiddenLayerIds/layerOrderIds/imagePlacements等;GET query: taskId。pending/running只代表已受理,必须轮询到succeeded且有result.url才可交付。
详情与设计详情页与 UI 设计规划已授权detail-plan.postbody: prompt、图片和设计上下文;遵循接口校验
详情与设计详情结果验收已授权detail-review.postbody: prompt、imageUrls等真实设计图信息
详情与设计详情主体分析已授权detail-subject.postbody: 图片与产品信息
详情与设计UI 页面验收已授权ui-review.postbody: 真实页面设计文档与审核要求
详情与设计图片文案建议已授权text-copy.postbody: imageUrl、prompt等文案上下文
详情与设计详情图片拼接已授权detail-stitch.postbody: images或imageUrls等拼接参数
详情与设计详情图片归一化已授权detail-normalize.postbody: 图片链接与尺寸参数
详情与设计风格化可用模型已授权style-models.get无需参数,不返回密钥
详情与设计风格化 PRO 生成已授权style-generate.postbody: 模型、提示词与参考图,遵守用户指定模型;不改站点配置
详情与设计AI 图像处理可用模型已授权wash-models.get无需参数
详情与设计AI 图像处理已授权wash-generate.postbody: 用户图像与参数;结果未确认不能重提收费任务
商品策划商品图片分析已授权planning-image.postbody: imageUrl与产品上下文;底层功能开关仍生效
商品策划商品 SKU 分析已授权planning-sku.postbody: sku与用户商品信息
商品策划评价与问大家分析已授权planning-analysis.postbody: kind=review/qa,rows为真实评价或问答数组
商品策划关键词洞察已授权planning-keywords.getquery: keyword等检索参数
商品策划taobao 商品详情已授权planning-taobao-item.getquery: itemId等商品编号
商品策划jd 商品详情已授权planning-jd-item.getquery: itemId等商品编号
商品策划淘宝真实评价已授权planning-reviews.getquery: itemId、page等
商品策划淘宝月销量已授权planning-sales.getquery: itemId
商品策划淘宝问大家已授权planning-qa.postbody: itemId等商品编号
商品策划平台商品检索已授权planning-market-items.postbody: platform、keyword等检索参数
商品策划策划模板列表与保存已授权planning-templates.getPOST body: title与策划内容;只保存当前用户自己的模板
商品策划策划模板列表与保存已授权planning-templates.postPOST body: title与策划内容;只保存当前用户自己的模板
商品策划策划模板读取与删除已授权planning-template.getpathParams: id;删除需要用户明确指定此编号
商品策划策划模板读取与删除已授权planning-template.deletepathParams: id;删除需要用户明确指定此编号
流程白板白板文件列表与创建已授权flow-files.getPOST body: title、snapshot;snapshot必须为真实白板快照
流程白板白板文件列表与创建已授权flow-files.postPOST body: title、snapshot;snapshot必须为真实白板快照
流程白板白板文件读取、修改、删除已授权flow-file.getpathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板文件读取、修改、删除已授权flow-file.putpathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板文件读取、修改、删除已授权flow-file.deletepathParams: id;PUT body: title、snapshot;先读取原文件,保留无关节点和工作表;删除需明确指定编号
流程白板白板草稿读取与保存已授权flow-draft.getPUT body: title、snapshot;只操作当前用户草稿
流程白板白板草稿读取与保存已授权flow-draft.putPUT body: title、snapshot;只操作当前用户草稿
分镜任务视频模型能力与参数暂未授权video-capabilities.getquery: modelId等;沿用用户模型
分镜任务用户视频任务列表暂未授权video-tasks.getquery: page、limit等;仅当前用户任务
分镜任务分镜任务与阶段推进暂未授权storyboard-task.getpathParams: taskId;读取实际状态后再按接口动作推进,不重启已有收费任务
分镜任务确认用户分镜参数暂未授权storyboard-confirm.postpathParams: taskId;body: 用户实际确认的镜头与参数,不虚构用户确认
分镜任务停止指定分镜任务暂未授权storyboard-cancel.postpathParams: taskId;需用户明确要求停止此编号
分镜任务分镜镜头修订暂未授权storyboard-shot.patchpathParams: taskId、shotIndex;body: 用户要求的镜头修改
分镜任务指定镜头高清处理暂未授权storyboard-hd.postpathParams: taskId、shotIndex;会产生费用,只有用户要求高清才执行
项目Agent 创作项目列表与创建已授权agent-projects.getPOST body: title等项目数据;不写入其他用户项目
项目Agent 创作项目列表与创建已授权agent-projects.postPOST body: title等项目数据;不写入其他用户项目
项目Agent 创作项目读写已授权agent-project.getpathParams: id;修改先读当前内容,删除需用户明确指定编号
项目Agent 创作项目读写已授权agent-project.putpathParams: id;修改先读当前内容,删除需用户明确指定编号
项目Agent 创作项目读写已授权agent-project.deletepathParams: id;修改先读当前内容,删除需用户明确指定编号
项目用户画布列表与创建已授权canvas-list.getPOST body: title、workspaceType=canvas/video等
项目用户画布列表与创建已授权canvas-list.postPOST body: title、workspaceType=canvas/video等
项目读取用户画布已授权canvas-read.getpathParams: id;只读取当前用户有权限的画布,节点写入使用专用画布工具
项目画布详情归档已授权detail-archives.getpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.postpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.patchpathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目画布详情归档已授权detail-archives.deletepathParams: id=当前画布编号;body/query按详情归档接口,删除需明确授权
项目3D 资产归档已授权model-assets.getpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.postpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.patchpathParams: id=当前画布编号;只处理拥有权限的资产
项目3D 资产归档已授权model-assets.deletepathParams: id=当前画布编号;只处理拥有权限的资产
3D3D 生成任务状态已授权3d-task.getpathParams: taskId;生成用已有3D专用能力,不重复提交
3D场景生成任务状态已授权world-task.getpathParams: taskId;生成用已有场景专用能力
智能编辑智能图层编辑能力已授权smart-edit.get无需参数;仅当该部署版本已有此功能时可用
文档读取与保存用户文档已授权documents.getquery: id=文档UUID;POST body: title、kind=text/code/sheet/image、content。更新前先读取原文档,不操作其他用户文档。
文档读取与保存用户文档已授权documents.postquery: id=文档UUID;POST body: title、kind=text/code/sheet/image、content。更新前先读取原文档,不操作其他用户文档。
图像处理专业高清处理任务与查询已授权enhance-pro.getPOST body按接口实际模型与尺寸要求,GET query: taskId。仅任务成功后才能交付,不能重复付费提交。
图像处理专业高清处理任务与查询已授权enhance-pro.postPOST body按接口实际模型与尺寸要求,GET query: taskId。仅任务成功后才能交付,不能重复付费提交。
技能自有技能读取、编辑、删除已授权skill-item.getpathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。
技能自有技能读取、编辑、删除已授权skill-item.putpathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。
技能自有技能读取、编辑、删除已授权skill-item.deletepathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。
技能复制可访问的技能已授权skill-fork.postpathParams: id;复制到当前用户名下,不修改原技能
技能快捷技能标签与个人顺序已授权skill-tags.getPATCH body: tagIds=用户希望的标签编号顺序,仅调整个人顺序;不修改全站标签配置
技能快捷技能标签与个人顺序已授权skill-tags.patchPATCH body: tagIds=用户希望的标签编号顺序,仅调整个人顺序;不修改全站标签配置
项目修改当前图片画布名称与描述已授权canvas-metadata.putpathParams: id=当前画布编号;body仅允许title、description、thumbnail,不允许覆盖canvasData或修改工作区类型
项目建议画布标题(不保存)已授权canvas-title-suggestion.postbody: prompt等上下文。此工具仅建议标题;需要改名时再调用canvas-metadata.put实际保存。
详情与设计提示词润色、翻译与分析已授权prompt-tools.postbody: text或prompt及action等;使用实际接口契约,不执行视频任务
详情与设计图片模板替换批次列表与创建已授权layout-batches.getquery/body: 当前projectId、真实模板与商品图;异步状态必须查询,不重复创建收费批次
详情与设计图片模板替换批次列表与创建已授权layout-batches.postquery/body: 当前projectId、真实模板与商品图;异步状态必须查询,不重复创建收费批次
详情与设计图片模板替换批次状态与修改已授权layout-batch.getpathParams: batchId;只处理当前用户批次,先读取状态后修改
详情与设计图片模板替换批次状态与修改已授权layout-batch.patchpathParams: batchId;只处理当前用户批次,先读取状态后修改
详情与设计详情替换工作流批次已授权agent-detail-batches.getquery/body按真实详情替换批次接口契约;仅当前用户创作项目,异步任务必须查询实际结果
详情与设计详情替换工作流批次已授权agent-detail-batches.postquery/body按真实详情替换批次接口契约;仅当前用户创作项目,异步任务必须查询实际结果
项目本人创作执行快照已授权execution-snapshot.getpathParams: id;只读取当前用户有权限的执行记录
项目当前用户图片额度已授权image-quota.get无需参数,不读取其他用户账户
项目当前用户生图统计已授权image-stats.get无需参数
帮助使用教程已授权tutorials.get只读取教程,不新增或修改全站教程
帮助业务导航与帮助入口已授权navigation.get只读取导航,不修改全站配置
文档、天气与技能getWeather已授权getWeather
文档、天气与技能createDocument已授权createDocument
文档、天气与技能updateDocument已授权updateDocument
文档、天气与技能requestSuggestions已授权requestSuggestions
文档、天气与技能loadProjectSkill已授权loadProjectSkill
\ No newline at end of file diff --git a/docs/specs/zcode-canvas/authorization-audit.json b/docs/specs/zcode-canvas/authorization-audit.json index 48bc86b0a..f9b562fd7 100644 --- a/docs/specs/zcode-canvas/authorization-audit.json +++ b/docs/specs/zcode-canvas/authorization-audit.json @@ -2340,6 +2340,19 @@ "previouslyExposed": false, "execution": "server" }, + { + "id": "skills.post", + "title": "可访问技能列表", + "group": "技能", + "path": "/api/agents", + "method": "POST", + "hint": "query: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, { "id": "skill-categories.get", "title": "技能分类", @@ -3302,6 +3315,266 @@ "previouslyExposed": false, "execution": "server" }, + { + "id": "skill-item.get", + "title": "自有技能读取、编辑、删除", + "group": "技能", + "path": "/api/agents/[id]", + "method": "GET", + "hint": "pathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "skill-item.put", + "title": "自有技能读取、编辑、删除", + "group": "技能", + "path": "/api/agents/[id]", + "method": "PUT", + "hint": "pathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "skill-item.delete", + "title": "自有技能读取、编辑、删除", + "group": "技能", + "path": "/api/agents/[id]", + "method": "DELETE", + "hint": "pathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "skill-fork.post", + "title": "复制可访问的技能", + "group": "技能", + "path": "/api/agents/[id]/fork", + "method": "POST", + "hint": "pathParams: id;复制到当前用户名下,不修改原技能", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "skill-tags.get", + "title": "快捷技能标签与个人顺序", + "group": "技能", + "path": "/api/canvas-skill-tags", + "method": "GET", + "hint": "PATCH body: tagIds=用户希望的标签编号顺序,仅调整个人顺序;不修改全站标签配置", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "skill-tags.patch", + "title": "快捷技能标签与个人顺序", + "group": "技能", + "path": "/api/canvas-skill-tags", + "method": "PATCH", + "hint": "PATCH body: tagIds=用户希望的标签编号顺序,仅调整个人顺序;不修改全站标签配置", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "canvas-metadata.put", + "title": "修改当前图片画布名称与描述", + "group": "项目", + "path": "/api/canvas/[id]", + "method": "PUT", + "hint": "pathParams: id=当前画布编号;body仅允许title、description、thumbnail,不允许覆盖canvasData或修改工作区类型", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "canvas-title-suggestion.post", + "title": "建议画布标题(不保存)", + "group": "项目", + "path": "/api/canvas/auto-title", + "method": "POST", + "hint": "body: prompt等上下文。此工具仅建议标题;需要改名时再调用canvas-metadata.put实际保存。", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "prompt-tools.post", + "title": "提示词润色、翻译与分析", + "group": "详情与设计", + "path": "/api/canvas/prompt-tools", + "method": "POST", + "hint": "body: text或prompt及action等;使用实际接口契约,不执行视频任务", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "layout-batches.get", + "title": "图片模板替换批次列表与创建", + "group": "详情与设计", + "path": "/api/canvas/layout-replace/batches", + "method": "GET", + "hint": "query/body: 当前projectId、真实模板与商品图;异步状态必须查询,不重复创建收费批次", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "layout-batches.post", + "title": "图片模板替换批次列表与创建", + "group": "详情与设计", + "path": "/api/canvas/layout-replace/batches", + "method": "POST", + "hint": "query/body: 当前projectId、真实模板与商品图;异步状态必须查询,不重复创建收费批次", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "layout-batch.get", + "title": "图片模板替换批次状态与修改", + "group": "详情与设计", + "path": "/api/canvas/layout-replace/batches/[batchId]", + "method": "GET", + "hint": "pathParams: batchId;只处理当前用户批次,先读取状态后修改", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "layout-batch.patch", + "title": "图片模板替换批次状态与修改", + "group": "详情与设计", + "path": "/api/canvas/layout-replace/batches/[batchId]", + "method": "PATCH", + "hint": "pathParams: batchId;只处理当前用户批次,先读取状态后修改", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "agent-detail-batches.get", + "title": "详情替换工作流批次", + "group": "详情与设计", + "path": "/api/agents/detail-replacement/batches", + "method": "GET", + "hint": "query/body按真实详情替换批次接口契约;仅当前用户创作项目,异步任务必须查询实际结果", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "agent-detail-batches.post", + "title": "详情替换工作流批次", + "group": "详情与设计", + "path": "/api/agents/detail-replacement/batches", + "method": "POST", + "hint": "query/body按真实详情替换批次接口契约;仅当前用户创作项目,异步任务必须查询实际结果", + "readOnly": false, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "execution-snapshot.get", + "title": "本人创作执行快照", + "group": "项目", + "path": "/api/agent-execution-snapshots/[id]", + "method": "GET", + "hint": "pathParams: id;只读取当前用户有权限的执行记录", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "image-quota.get", + "title": "当前用户图片额度", + "group": "项目", + "path": "/api/user/image-quota", + "method": "GET", + "hint": "无需参数,不读取其他用户账户", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "image-stats.get", + "title": "当前用户生图统计", + "group": "项目", + "path": "/api/user/image-stats", + "method": "GET", + "hint": "无需参数", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "tutorials.get", + "title": "使用教程", + "group": "帮助", + "path": "/api/tutorial-videos", + "method": "GET", + "hint": "只读取教程,不新增或修改全站教程", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, + { + "id": "navigation.get", + "title": "业务导航与帮助入口", + "group": "帮助", + "path": "/api/nav-links", + "method": "GET", + "hint": "只读取导航,不修改全站配置", + "readOnly": true, + "result": "json", + "authorized": true, + "previouslyExposed": false, + "execution": "server" + }, { "id": "getWeather", "title": "getWeather", @@ -3348,8 +3621,11 @@ "execution": "server" } ], - "verifiedRoutes": 74, + "verifiedRoutes": 96, "deploymentOnly": [ - "smart-edit.get" + "smart-edit.get", + "prompt-tools.post", + "agent-detail-batches.get", + "agent-detail-batches.post" ] } diff --git a/lib/ai/canvas-agent-runtime/project-operation-catalog.ts b/lib/ai/canvas-agent-runtime/project-operation-catalog.ts index 79704918f..9ea86b07c 100644 --- a/lib/ai/canvas-agent-runtime/project-operation-catalog.ts +++ b/lib/ai/canvas-agent-runtime/project-operation-catalog.ts @@ -9,7 +9,7 @@ function add(group: string, id: string, title: string, path: string, methods: st id: `${id}.${method.toLowerCase()}`, title, group, path, method, hint, readOnly: method === "GET", result: "json", authorized: true, }); } -add("技能", "skills", "可访问技能列表", "/api/agents", "GET", "query: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。"); +add("技能", "skills", "可访问技能列表", "/api/agents", "GET,POST", "query: categoryId、search(可选)。执行技能前用 loadProjectSkill 读取真实提示词和参数,再由当前原生核心编排已有工具。"); add("技能", "skill-categories", "技能分类", "/api/agent-categories", "GET", "无需参数"); add("素材", "materials", "商品 SKU/SPU 素材检索", "/api/agent-workflow/material-search", "GET", "query: keyword必填,source=primary/secondary、queryType=sku/spu、requiredCount可选"); add("素材", "references", "参考图检索", "/api/agent-workflow/reference-search", "GET", "query: keyword、source、queryType;以接口返回的实际素材为准"); @@ -64,6 +64,20 @@ add("3D", "world-task", "场景生成任务状态", "/api/canvas/world/tasks/[ta add("智能编辑", "smart-edit", "智能图层编辑能力", "/api/canvas/smart-edit/capabilities", "GET", "无需参数;仅当该部署版本已有此功能时可用"); add("文档", "documents", "读取与保存用户文档", "/api/document", "GET,POST", "query: id=文档UUID;POST body: title、kind=text/code/sheet/image、content。更新前先读取原文档,不操作其他用户文档。"); add("图像处理", "enhance-pro", "专业高清处理任务与查询", "/api/enhance/pro", "GET,POST", "POST body按接口实际模型与尺寸要求,GET query: taskId。仅任务成功后才能交付,不能重复付费提交。"); +add("技能", "skill-item", "自有技能读取、编辑、删除", "/api/agents/[id]", "GET,PUT,DELETE", "pathParams: id;修改仅限本人技能,不能借管理员身份修改别人的公共技能。发布需用户明确要求。"); +add("技能", "skill-fork", "复制可访问的技能", "/api/agents/[id]/fork", "POST", "pathParams: id;复制到当前用户名下,不修改原技能"); +add("技能", "skill-tags", "快捷技能标签与个人顺序", "/api/canvas-skill-tags", "GET,PATCH", "PATCH body: tagIds=用户希望的标签编号顺序,仅调整个人顺序;不修改全站标签配置"); +add("项目", "canvas-metadata", "修改当前图片画布名称与描述", "/api/canvas/[id]", "PUT", "pathParams: id=当前画布编号;body仅允许title、description、thumbnail,不允许覆盖canvasData或修改工作区类型"); +add("项目", "canvas-title-suggestion", "建议画布标题(不保存)", "/api/canvas/auto-title", "POST", "body: prompt等上下文。此工具仅建议标题;需要改名时再调用canvas-metadata.put实际保存。"); +add("详情与设计", "prompt-tools", "提示词润色、翻译与分析", "/api/canvas/prompt-tools", "POST", "body: text或prompt及action等;使用实际接口契约,不执行视频任务"); +add("详情与设计", "layout-batches", "图片模板替换批次列表与创建", "/api/canvas/layout-replace/batches", "GET,POST", "query/body: 当前projectId、真实模板与商品图;异步状态必须查询,不重复创建收费批次"); +add("详情与设计", "layout-batch", "图片模板替换批次状态与修改", "/api/canvas/layout-replace/batches/[batchId]", "GET,PATCH", "pathParams: batchId;只处理当前用户批次,先读取状态后修改"); +add("详情与设计", "agent-detail-batches", "详情替换工作流批次", "/api/agents/detail-replacement/batches", "GET,POST", "query/body按真实详情替换批次接口契约;仅当前用户创作项目,异步任务必须查询实际结果"); +add("项目", "execution-snapshot", "本人创作执行快照", "/api/agent-execution-snapshots/[id]", "GET", "pathParams: id;只读取当前用户有权限的执行记录"); +add("项目", "image-quota", "当前用户图片额度", "/api/user/image-quota", "GET", "无需参数,不读取其他用户账户"); +add("项目", "image-stats", "当前用户生图统计", "/api/user/image-stats", "GET", "无需参数"); +add("帮助", "tutorials", "使用教程", "/api/tutorial-videos", "GET", "只读取教程,不新增或修改全站教程"); +add("帮助", "navigation", "业务导航与帮助入口", "/api/nav-links", "GET", "只读取导航,不修改全站配置"); export function projectOperationAuthorized(operation: ProjectAgentOperation) { return operation.group !== "分镜任务"; } @@ -87,3 +101,9 @@ export function sanitizeProjectToolOutput(value: unknown): unknown { .map(([key, entry]) => [key, sanitizeProjectToolOutput(entry)])); return value; } +export function validateCanvasMetadataInput(body: Record) { + if (!Object.keys(body).length || Object.keys(body).some(key=>!["title","description","thumbnail"].includes(key))) throw new Error("仅允许修改画布名称、描述和封面"); + if (body.title !== undefined && (typeof body.title !== "string" || !body.title.trim() || body.title.length>256)) throw new Error("画布名称必须为1到256字的文本"); + if (body.description !== undefined && body.description !== null && (typeof body.description !== "string" || body.description.length>4096)) throw new Error("画布描述格式无效"); + if (body.thumbnail !== undefined && body.thumbnail !== null && (typeof body.thumbnail !== "string" || body.thumbnail.length>4000 || (body.thumbnail && !/^https?:\/\//.test(body.thumbnail)))) throw new Error("封面必须为有效图片链接"); +} diff --git a/lib/ai/canvas-agent-runtime/project-operation-contracts.json b/lib/ai/canvas-agent-runtime/project-operation-contracts.json index 3c395777f..69825fc4c 100644 --- a/lib/ai/canvas-agent-runtime/project-operation-contracts.json +++ b/lib/ai/canvas-agent-runtime/project-operation-contracts.json @@ -25,6 +25,32 @@ "sort" ] }, + "skills.post": { + "source": "app/api/agents/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": { + "listQuerySchema": "z.object({\n scope: z.enum([\"all\", \"public\", \"private\"]).default(\"all\"),\n type: z.enum([\"image\", \"video\", \"text\"]).optional(),\n sectionId: z.string().trim().max(64).optional(),\n level1Id: z.string().trim().max(64).optional(),\n level2Id: z.string().trim().max(64).optional(),\n level3Id: z.string().trim().max(64).optional(),\n productCategory: z.string().trim().max(64).optional(),\n audienceTag: z.string().trim().max(64).optional(),\n usageScenario: z.string().trim().max(64).optional(),\n brand: z.string().trim().max(64).optional(),\n keyword: z.string().trim().max(128).optional(),\n sort: z.enum([\"latest\", \"hottest\", \"most_used\"]).default(\"latest\"),\n})", + "slotSchema": "z.object({\n title: z.string().trim().max(128).optional(),\n promptTemplate: z.string().trim().min(1).max(8000),\n defaultParams: z.record(z.string(), z.any()).optional(),\n requireUpload: z.boolean().optional(),\n uploadLabel: z.string().trim().max(128).optional(),\n referenceAssetIds: z.array(z.string().uuid()).max(12).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [ + "scope", + "type", + "sectionId", + "level1Id", + "level2Id", + "level3Id", + "productCategory", + "audienceTag", + "usageScenario", + "brand", + "keyword", + "sort" + ] + }, "skill-categories.get": { "source": "app/api/agent-categories/route.ts", "methods": [ @@ -818,6 +844,16 @@ "providerId" ] }, + "smart-edit.get": { + "source": "app/api/canvas/smart-edit/capabilities/route.ts", + "methods": [ + "GET" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [], + "verifiedOnDeployment": true + }, "documents.get": { "source": "app/(chat)/api/document/route.ts", "methods": [ @@ -869,5 +905,248 @@ "queryKeys": [ "taskId" ] + }, + "skill-item.get": { + "source": "app/api/agents/[id]/route.ts", + "methods": [ + "GET", + "PUT", + "DELETE" + ], + "schemas": { + "slotSchema": "z.object({\n title: z.string().trim().max(128).optional(),\n promptTemplate: z.string().trim().min(1).max(8000),\n defaultParams: z.record(z.string(), z.any()).nullable().optional(),\n requireUpload: z.boolean().optional(),\n uploadLabel: z.string().trim().max(128).optional(),\n referenceAssetIds: z.array(z.string().uuid()).max(12).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [] + }, + "skill-item.put": { + "source": "app/api/agents/[id]/route.ts", + "methods": [ + "GET", + "PUT", + "DELETE" + ], + "schemas": { + "slotSchema": "z.object({\n title: z.string().trim().max(128).optional(),\n promptTemplate: z.string().trim().min(1).max(8000),\n defaultParams: z.record(z.string(), z.any()).nullable().optional(),\n requireUpload: z.boolean().optional(),\n uploadLabel: z.string().trim().max(128).optional(),\n referenceAssetIds: z.array(z.string().uuid()).max(12).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [] + }, + "skill-item.delete": { + "source": "app/api/agents/[id]/route.ts", + "methods": [ + "GET", + "PUT", + "DELETE" + ], + "schemas": { + "slotSchema": "z.object({\n title: z.string().trim().max(128).optional(),\n promptTemplate: z.string().trim().min(1).max(8000),\n defaultParams: z.record(z.string(), z.any()).nullable().optional(),\n requireUpload: z.boolean().optional(),\n uploadLabel: z.string().trim().max(128).optional(),\n referenceAssetIds: z.array(z.string().uuid()).max(12).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [] + }, + "skill-fork.post": { + "source": "app/api/agents/[id]/fork/route.ts", + "methods": [ + "POST" + ], + "schemas": { + "forkSchema": "z.object({\n name: z.string().trim().min(1).max(128).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [] + }, + "skill-tags.get": { + "source": "app/api/canvas-skill-tags/route.ts", + "methods": [ + "GET", + "PATCH", + "PUT" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "skill-tags.patch": { + "source": "app/api/canvas-skill-tags/route.ts", + "methods": [ + "GET", + "PATCH", + "PUT" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "canvas-metadata.put": { + "source": "app/api/canvas/[id]/route.ts", + "methods": [ + "GET", + "PUT", + "DELETE" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "canvas-title-suggestion.post": { + "source": "app/api/canvas/auto-title/route.ts", + "methods": [ + "POST" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "prompt-tools.post": { + "source": "app/api/canvas/prompt-tools/route.ts", + "methods": [ + "POST" + ], + "schemas": { + "promptToolSchema": "z.object({\n mode: z.enum([\"optimize\", \"translate\"]),\n prompt: z.string().trim().min(1, \"请先输入提示词\").max(12000, \"提示词不能超过 12000 字\"),\n model: z.string().trim().max(200).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [], + "verifiedOnDeployment": true + }, + "layout-batches.get": { + "source": "app/api/canvas/layout-replace/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [ + "projectId", + "sourceNodeId" + ] + }, + "layout-batches.post": { + "source": "app/api/canvas/layout-replace/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [ + "projectId", + "sourceNodeId" + ] + }, + "layout-batch.get": { + "source": "app/api/canvas/layout-replace/batches/[batchId]/route.ts", + "methods": [ + "GET", + "PATCH" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "layout-batch.patch": { + "source": "app/api/canvas/layout-replace/batches/[batchId]/route.ts", + "methods": [ + "GET", + "PATCH" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "agent-detail-batches.get": { + "source": "app/api/agents/detail-replacement/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": { + "DetailReplacementBatchRequest": "export type DetailReplacementBatchRequest = {\n taskKind: \"agent-detail-replacement-batch\";\n projectId: string;\n chatId: string;\n submissionKey?: string;\n model: string;\n prompt: string;\n userPrompt: string;\n imageSize: string;\n replacementStrategy: \"product_only\" | \"scene_replace\";\n productImageUrls: string[];\n modelImageUrl: string | null;\n references: DetailReplacementBatchReference[];\n};" + }, + "queryKeys": [ + "projectId", + "taskId" + ], + "verifiedOnDeployment": true + }, + "agent-detail-batches.post": { + "source": "app/api/agents/detail-replacement/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": { + "DetailReplacementBatchRequest": "export type DetailReplacementBatchRequest = {\n taskKind: \"agent-detail-replacement-batch\";\n projectId: string;\n chatId: string;\n submissionKey?: string;\n model: string;\n prompt: string;\n userPrompt: string;\n imageSize: string;\n replacementStrategy: \"product_only\" | \"scene_replace\";\n productImageUrls: string[];\n modelImageUrl: string | null;\n references: DetailReplacementBatchReference[];\n};" + }, + "queryKeys": [ + "projectId", + "taskId" + ], + "verifiedOnDeployment": true + }, + "execution-snapshot.get": { + "source": "app/api/agent-execution-snapshots/[id]/route.ts", + "methods": [ + "GET" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "image-quota.get": { + "source": "app/api/user/image-quota/route.ts", + "methods": [ + "GET" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "image-stats.get": { + "source": "app/api/user/image-stats/route.ts", + "methods": [ + "GET" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "tutorials.get": { + "source": "app/api/tutorial-videos/route.ts", + "methods": [ + "GET", + "POST", + "PUT", + "DELETE" + ], + "schemas": { + "createSchema": "z.object({\n title: z.string().min(1).max(128),\n videoUrl: z.string().url(),\n coverUrl: z.string().url().optional().or(z.literal(\"\")).transform(v => v || null),\n description: z.string().nullable().optional(),\n order: z.number().int().default(0),\n isEnabled: z.boolean().default(true),\n})", + "updateSchema": "z.object({\n id: z.string().uuid(),\n title: z.string().min(1).max(128).optional(),\n videoUrl: z.string().url().optional(),\n coverUrl: z.string().url().optional().or(z.literal(\"\")).transform(v => v || null),\n description: z.string().nullable().optional(),\n order: z.number().int().optional(),\n isEnabled: z.boolean().optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [ + "id" + ] + }, + "navigation.get": { + "source": "app/api/nav-links/route.ts", + "methods": [ + "GET", + "POST", + "PUT", + "DELETE" + ], + "schemas": { + "createSchema": "z.object({\n name: z.string().min(1).max(64),\n url: z.string().url(),\n order: z.number().int().default(0),\n isEnabled: z.boolean().default(true),\n toolboxGroup: z.number().int().min(1).max(2).default(1), // 属于哪个工具箱\n})", + "updateSchema": "z.object({\n id: z.string().uuid(),\n name: z.string().min(1).max(64).optional(),\n url: z.string().url().optional(),\n order: z.number().int().optional(),\n isEnabled: z.boolean().optional(),\n toolboxGroup: z.number().int().min(1).max(2).optional(), // 属于哪个工具箱\n})" + }, + "interfaces": {}, + "queryKeys": [ + "id" + ] } } diff --git a/lib/ai/canvas-agent-runtime/project-operation-production-contracts.json b/lib/ai/canvas-agent-runtime/project-operation-production-contracts.json new file mode 100644 index 000000000..d6e8add34 --- /dev/null +++ b/lib/ai/canvas-agent-runtime/project-operation-production-contracts.json @@ -0,0 +1,52 @@ +{ + "smart-edit.get": { + "source": "app/api/canvas/smart-edit/capabilities/route.ts", + "methods": [ + "GET" + ], + "schemas": {}, + "interfaces": {}, + "queryKeys": [] + }, + "prompt-tools.post": { + "source": "app/api/canvas/prompt-tools/route.ts", + "methods": [ + "POST" + ], + "schemas": { + "promptToolSchema": "z.object({\n mode: z.enum([\"optimize\", \"translate\"]),\n prompt: z.string().trim().min(1, \"请先输入提示词\").max(12000, \"提示词不能超过 12000 字\"),\n model: z.string().trim().max(200).optional(),\n})" + }, + "interfaces": {}, + "queryKeys": [] + }, + "agent-detail-batches.get": { + "source": "app/api/agents/detail-replacement/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": { + "DetailReplacementBatchRequest": "export type DetailReplacementBatchRequest = {\n taskKind: \"agent-detail-replacement-batch\";\n projectId: string;\n chatId: string;\n submissionKey?: string;\n model: string;\n prompt: string;\n userPrompt: string;\n imageSize: string;\n replacementStrategy: \"product_only\" | \"scene_replace\";\n productImageUrls: string[];\n modelImageUrl: string | null;\n references: DetailReplacementBatchReference[];\n};" + }, + "queryKeys": [ + "projectId", + "taskId" + ] + }, + "agent-detail-batches.post": { + "source": "app/api/agents/detail-replacement/batches/route.ts", + "methods": [ + "GET", + "POST" + ], + "schemas": {}, + "interfaces": { + "DetailReplacementBatchRequest": "export type DetailReplacementBatchRequest = {\n taskKind: \"agent-detail-replacement-batch\";\n projectId: string;\n chatId: string;\n submissionKey?: string;\n model: string;\n prompt: string;\n userPrompt: string;\n imageSize: string;\n replacementStrategy: \"product_only\" | \"scene_replace\";\n productImageUrls: string[];\n modelImageUrl: string | null;\n references: DetailReplacementBatchReference[];\n};" + }, + "queryKeys": [ + "projectId", + "taskId" + ] + } +} diff --git a/lib/ai/canvas-agent-runtime/project-tools.ts b/lib/ai/canvas-agent-runtime/project-tools.ts index dac978264..eb2bfd3a9 100644 --- a/lib/ai/canvas-agent-runtime/project-tools.ts +++ b/lib/ai/canvas-agent-runtime/project-tools.ts @@ -11,7 +11,7 @@ import { getWeather } from "@/lib/ai/tools/get-weather"; import { createDocument } from "@/lib/ai/tools/create-document"; import { updateDocument } from "@/lib/ai/tools/update-document"; import { requestSuggestions } from "@/lib/ai/tools/request-suggestions"; -import { PROJECT_AGENT_OPERATIONS, projectOperationAuthorized, projectOperationUrl, sanitizeProjectToolOutput } from "./project-operation-catalog"; +import { PROJECT_AGENT_OPERATIONS, projectOperationAuthorized, projectOperationUrl, sanitizeProjectToolOutput, validateCanvasMetadataInput } from "./project-operation-catalog"; import { isExplicitDestructiveIntent } from "./capability-access"; import type { CanvasAgentTool } from "./loop"; @@ -41,6 +41,16 @@ export async function registerProjectAgentTools(params: { if (operation.path.startsWith("/api/canvas/[id]")) { if (args.pathParams.id !== params.projectId) throw new Error("画布业务接口仅授权当前画布,不能跨画布读取或写入"); } + if (operation.id === "canvas-metadata.put") { + try { validateCanvasMetadataInput(args.body || {}); } + catch { throw new AgentToolRejectedError("画布元数据格式无效,未提交操作;只允许名称、描述与封面,不能覆盖节点或更改工作区类型"); } + } + if (operation.id.startsWith("skill-item.") && !operation.readOnly) { + const preset = await getAccessibleAgentPresetById({ id: args.pathParams.id, userId }); + if (!preset || preset.ownerUserId !== userId) throw new Error("仅授权修改本人技能,公共技能管理请使用管理员界面"); + } + if ((args.body?.visibility === "public" || args.body?.isPublic === true) && !/发布|公开/.test(params.objective)) + throw new Error("公开发布需要用户明确要求,不能把创建草稿当作发布授权"); if (operation.method === "DELETE" && (!isExplicitDestructiveIntent(params.objective) || !Object.values(args.pathParams).some(id => params.objective.includes(id)))) throw new Error("删除项目文件需要用户明确提出删除,并在要求中指定文件编号;模型不能自行授权"); if (operation.id === "canvas-list.post" && !/新建|创建|新增/.test(params.objective)) throw new Error("请先确认需要新建画布"); @@ -62,8 +72,12 @@ export async function registerProjectAgentTools(params: { if ([400,401,403,404,405,422].includes(response.status)) throw new AgentToolRejectedError(`业务工具参数或权限未通过(${response.status}),未提交操作。${typeof payload?.error === "string" ? payload.error.slice(0,200) : "请先读取该操作的真实请求契约"}`); if (!response.ok || payload?.success === false || payload?.error) throw new Error(`业务工具 ${operation.title} 未成功(${response.status}):${typeof payload?.error === "string" ? payload.error.slice(0, 200) : "请核对输入参数或底层服务权限"}`); if (operation.id === "canvas-list.get" && Array.isArray(payload?.data)) payload.data = payload.data.filter((row: { workspaceType?: string }) => row.workspaceType !== "video"); - const status = payload?.processing || ["pending", "running", "queued"].includes(payload?.status) ? "pending" : payload?.status === "failed" ? "failed" : "succeeded"; - return { projectService: true, operationId: operation.id, status, taskId: payload?.taskId, + const envelope = payload?.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : payload?.batch || payload; + const state = payload?.status || envelope?.status; + const status = payload?.processing || envelope?.processing || ["pending", "running", "queued", "processing"].includes(state) ? "pending" : state === "failed" ? "failed" : "succeeded"; + if (operation.id === "canvas-metadata.put" && typeof payload?.data?.title === "string") + params.emit("data-canvasProjectMetadata", { projectId: params.projectId, title: payload.data.title }); + return { projectService: true, operationId: operation.id, status, taskId: payload?.taskId || envelope?.taskId || (payload?.batch ? envelope.id : undefined), result: sanitizeProjectToolOutput(payload), message: status === "pending" ? "仅已受理,必须轮询状态确认实际结果;禁止重复创建任务。" : "已获得真实业务接口结果" }; } register("readProjectService", "读取项目业务数据。先 listProjectServices 查看 operationId、pathParams和query要求;仅执行已授权GET接口。", invokeSchema, (input, id) => invoke(input, id, true)); diff --git a/scripts/zcode-agent/audit-project-tools.mjs b/scripts/zcode-agent/audit-project-tools.mjs index 28abc4ea4..27df6a466 100644 --- a/scripts/zcode-agent/audit-project-tools.mjs +++ b/scripts/zcode-agent/audit-project-tools.mjs @@ -2,14 +2,15 @@ import ts from 'typescript'; import { readFile, writeFile, access } from 'node:fs/promises'; import { execFileSync } from 'node:child_process'; const catalog = JSON.parse(execFileSync(process.execPath, ['node_modules/tsx/dist/cli.mjs','-e', "import {PROJECT_AGENT_OPERATIONS} from './lib/ai/canvas-agent-runtime/project-operation-catalog';console.log(JSON.stringify(PROJECT_AGENT_OPERATIONS))"], { encoding: 'utf8' })); -const contracts = {}; const mismatch = []; +const productionContracts = JSON.parse(await readFile('lib/ai/canvas-agent-runtime/project-operation-production-contracts.json','utf8')); +const contracts = {}; const mismatch = []; const deploymentOnly = []; for (const operation of catalog) { let file; for (const root of ['app/api','app/(chat)/api']) { const path = `${root}/${operation.path.slice('/api/'.length)}/route.ts`; try { await access(path); file = path; break; } catch {} } - if (!file) { if (operation.id !== 'smart-edit.get') mismatch.push(`${operation.id}: missing route`); continue; } + if (!file) { deploymentOnly.push(operation.id); const contract = productionContracts[operation.id]; if (!contract || !contract.methods.includes(operation.method)) mismatch.push(`${operation.id}: missing verified deployment route`); else contracts[operation.id] = { ...contract, verifiedOnDeployment: true }; continue; } const source = await readFile(file,'utf8'); const methods = [...source.matchAll(/export\s+(?:async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/g)].map(match => match[1]); if (!methods.includes(operation.method)) mismatch.push(`${operation.id}: method not implemented`); @@ -26,7 +27,7 @@ for (const operation of catalog) { } if (mismatch.length) throw new Error(mismatch.join('\n')); await writeFile('lib/ai/canvas-agent-runtime/project-operation-contracts.json',JSON.stringify(contracts,null,2)+'\n'); -console.log(JSON.stringify({ operations: catalog.length, routeContracts: Object.keys(contracts).length, deploymentOnly: 'smart-edit.get', unsupportedMethods: mismatch.length })); +console.log(JSON.stringify({ operations: catalog.length, routeContracts: Object.keys(contracts).length, deploymentOnly, unsupportedMethods: mismatch.length })); const canvas = JSON.parse(execFileSync(process.execPath, ['node_modules/tsx/dist/cli.mjs','-e', "import {getCanvasAgentAccessManifest} from './lib/ai/canvas-agent-runtime/capability-access';console.log(JSON.stringify(getCanvasAgentAccessManifest()))"], { encoding: 'utf8' })); const project = catalog.map(item=>({...item, authorized:item.group !== '分镜任务', previouslyExposed:false, execution:'server'})); @@ -36,9 +37,9 @@ const legacyNames = [...(await readFile('lib/ai/tools-registry.ts','utf8')).matc if (legacyNames.some(name=>!legacyAliases[name])) throw new Error('Legacy tool missing from authorization audit'); const report = { legacyAliases, policy:'图片画布及非视频项目业务已授权;视频画布与分镜暂不授权;底层用户权限与服务开关仍生效。管理、密钥、支付、身份认证、系统任务和Claw不属于创作Agent工具。', upstreamCommit:'0a1fc56d279fd1001f78387bd81aec1c26767411', rows:[...canvas,...project,...utilities], - verifiedRoutes:Object.keys(contracts).length, deploymentOnly:['smart-edit.get'] }; + verifiedRoutes:Object.keys(contracts).length, deploymentOnly }; await writeFile('docs/specs/zcode-canvas/authorization-audit.json',JSON.stringify(report,null,2)+'\n'); const esc=value=>String(value??'').replace(/[&<>"']/g,char=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[char])); const rows=report.rows.map(row=>`${esc(row.workspace||row.group||'项目')}${esc(row.title)}${row.authorized?'已授权':'暂未授权'}${esc(row.entry||row.id)}${esc(row.note||row.hint||'')}`).join(''); -await writeFile('docs/specs/zcode-canvas/authorization-audit.html',`ZCode Agent 工具授权清单

ZCode Agent 工具授权清单

${esc(report.policy)}

共 ${report.rows.length} 项能力;每一项均保留实际执行方式与限制。接口鉴权不等于业务结果已完成。

${rows}
范围能力授权工具 / 操作编号执行限制
`); +await writeFile('docs/specs/zcode-canvas/authorization-audit.html',`ZCode Agent 工具授权清单

ZCode Agent 工具授权清单

${esc(report.policy)}

共 ${report.rows.length} 项授权检查(包含界面入口和接口映射);每一项均保留实际执行方式与限制。接口鉴权不等于业务结果已完成。

${rows}
范围能力授权工具 / 操作编号执行限制
`); console.log(JSON.stringify({auditRows:report.rows.length, authorized:report.rows.filter(row=>row.authorized).length, paused:report.rows.filter(row=>!row.authorized).length, addedProjectOperations:project.filter(row=>row.authorized).length})); diff --git a/tests/routes/canvas-agent-project-tools.test.ts b/tests/routes/canvas-agent-project-tools.test.ts index ac8adcdb9..ce7113c98 100644 --- a/tests/routes/canvas-agent-project-tools.test.ts +++ b/tests/routes/canvas-agent-project-tools.test.ts @@ -1,7 +1,7 @@ import { LEGACY_AGENT_TOOL_MAP } from "@/lib/ai/canvas-agent-runtime/legacy-tool-map"; import { expect, test } from "@playwright/test"; import { readFileSync, existsSync } from "node:fs"; -import { PROJECT_AGENT_OPERATIONS, projectOperationAuthorized, projectOperationUrl, sanitizeProjectToolOutput } from "@/lib/ai/canvas-agent-runtime/project-operation-catalog"; +import { PROJECT_AGENT_OPERATIONS, projectOperationAuthorized, projectOperationUrl, sanitizeProjectToolOutput, validateCanvasMetadataInput } from "@/lib/ai/canvas-agent-runtime/project-operation-catalog"; import { shouldUseCanvasAgentRuntime } from "@/lib/ai/canvas-agent-runtime/routing"; import { getCanvasAgentAccessManifest } from "@/lib/ai/canvas-agent-runtime/capability-access"; @@ -11,7 +11,7 @@ test("business grant uses only fixed implemented route/method pairs and no manag expect(op.path).not.toMatch(/\/admin\/|\/internal\/|\/jobs\/|\/auth\/|\/payment\/|access-keys|clawd-chat|agent-chat/); const relative=op.path.slice('/api/'.length)+'/route.ts'; const path=['app/api/','app/(chat)/api/'].map(base=>base+relative).find(existsSync); - if (!path) { expect(op.id).toBe('smart-edit.get'); continue; } + if (!path) { expect(['smart-edit.get','prompt-tools.post','agent-detail-batches.get','agent-detail-batches.post']).toContain(op.id); continue; } expect(readFileSync(path,'utf8')).toMatch(new RegExp(`export\\s+(?:async\\s+)?function\\s+${op.method}\\b`)); } }); @@ -45,3 +45,9 @@ test("image workspace mode menus cannot bypass the paused video authorization", expect(manifest.find(item=>item.id===`canvas.ui.${key}`)).toMatchObject({workspace:'video',authorized:false}); expect(manifest.find(item=>item.id==='canvas.ui.saveCanvas')).toMatchObject({workspace:'canvas',authorized:true}); }); + +test("project title updates cannot overwrite nodes, change workspace, or insert malformed metadata", () => { + expect(()=>validateCanvasMetadataInput({title:'正常标题'})).not.toThrow(); + for (const body of [{title:{}},{title:''},{canvasData:{nodes:[]}},{workspaceType:'video'},{thumbnail:'file:///root/secret'}]) + expect(()=>validateCanvasMetadataInput(body)).toThrow(); +});