Canvas 跨产品交接
在 Canvas 中打开、Agent Handoff、上下文固定与候选结果写回契约
Canvas 跨产品交接
本文是跨产品链路在 Canvas 侧的详细适配规范。通用 Handoff 字段、Run、钱包、MCP 和领域事件仍以对应主规范为准;本文重点定义用户在“进入 Canvas、继续创作、返回来源产品”时看到什么,以及 Canvas 可以写什么。
已确认原则
- AI 漫剧与电商工作台目标上是独立产品,不是 Canvas 的子页面。
- 产品之间传递 Handoff 与 Context Package,不复制完整聊天记录或共享私有数据库。
- “在 Canvas 中打开”固定来源资源版本,Canvas 编辑只产生派生版本。
- 目标 Agent 创建新的 Run,权限和预算在目标上下文重新计算。
returnBinding描述允许返回的位置和数据契约,不代表自动写回授权。- 结果默认是候选;只有用户明确接收后,来源产品才能更新自己的业务槽位。
- Console 提供全局导航、资源和任务治理;普通页面跳转本身不等于 Handoff。
当前态
当前 oceanway-vozeb 中,Canvas 与漫剧同仓库运行,已有部分 Canvas / Drama 跳转、项目摘要和媒体引用能力。现有链路仍带有页面路由、可变快照或媒体 URL 绑定的实现痕迹,尚未完整具备:
- 通用 Organization / Workspace / Project Context;
- 固定 CanvasRevision 与来源资源 Revision;
- 独立、幂等的 Handoff 身份;
- 结构化 Context Package;
- 目标 Run 与来源 Run 的明确区分;
- 可验证的 returnBinding 和冲突处理;
- 漫剧、电商独立部署后的服务边界。
因此,同仓库内部跳转是迁移基线,不是最终互通契约。
目标态
每个产品保留自己的 Host、专业 Agent、领域聚合和审核流程,通过共享 Handoff Service、Resource Registry、Asset Service 与 Run Service 协作。Canvas 只接收已授权的固定版本和最小上下文,只返回新的候选资源;来源产品继续拥有最终写回决定。
来源产品领域对象 + 固定 Revision
→ Handoff + Context Package
→ CanvasDocument / CanvasRevision + ResourceBinding
→ 目标 Agent Run
→ 候选 AssetVersion / CanvasRevision
→ 用户确认 returnBinding
→ 来源产品校验并写回自己的聚合页面跳转、运行执行和领域写回由三个独立契约完成,因此将漫剧或电商迁移到独立部署时,不需要改变用户看到的交接语义。
三种不同动作
用户界面必须区分以下行为:
| 动作 | 是否创建 Handoff | 说明 |
|---|---|---|
| 打开页面 | 否 | 应用切换器、Console 深链接或回到原页面,只携带可信导航上下文 |
| 引用资源 | 视情况 | 同一产品内可直接创建 ResourceBinding;跨产品且需要继续处理时创建 Handoff |
| 交给另一产品处理 | 是 | 固定输入、目标能力、预算和返回位置,由目标产品创建新 Run |
“在 Canvas 中打开”“交给漫剧”“用于商品内容”等文案表示交接;“查看资产”“打开任务”“进入 Console”只是导航。不得把一次普通跳转包装成后台自动生成或扣费。
Canvas 侧 Handoff 解释
通用契约由跨产品主规范定义,Canvas 至少使用下列语义:
| 字段 | Canvas 侧含义 |
|---|---|
handoffId | 稳定交接身份;重复点击不能重复创建资源或扣费 |
sourceProduct / targetProduct | 明确来源和目标,目标不能从当前路由猜测 |
organizationId / workspaceId / projectId | 数据、权限、产物和付款上下文 |
objective | 用户可理解的本次目标,不包含平台私有提示 |
inputResourceVersions | CanvasRevision、AssetVersion 或产品资源的固定版本 |
constraints | 尺寸、品牌、渠道、版权、数据分类和产品规则 |
requestedOutputSchema | 目标产品需要返回的候选类型和字段 |
budgetPolicy | 付款主体、预算范围、报价或审批阈值 |
returnBinding | 来源产品允许接收结果的资源与槽位 |
traceId | 串联 Handoff、Run、Asset、账本和审计 |
Handoff 只授予完成这次目标所需的最小范围。目标产品不能因为用户能访问同一 Workspace,就自动读取该 Workspace 的全部 Canvas、资产或 Connection。
Context Package
Context Package 是目标 Agent 可消费的最小业务上下文,建议按以下类别组织:
用户可见目标
当前 Organization / Workspace / Project
固定输入资源版本
Canvas 当前选区或来源产品业务槽位
明确的创作与合规约束
请求的输出 Schema
允许的模型、工具和外发范围摘要
预算与审批策略引用
returnBinding它不能包含:
- 完整聊天历史和无关会话消息;
- 平台基础提示词、模型选择理由或内部路由策略;
- API Key、MCP Token、Provider Credential 或长期签名 URL;
- 未被用户选择或未获授权的 Workspace 资源;
- 用于绕过目标产品审核状态的隐藏指令。
目标 Run 根据当前用户权限、Agent Revision、Workspace / Project 授权、Tool Grant、数据外发策略和预算重新计算有效权限。Context Package 不能提升权限。
“在 Canvas 中打开”
来源产品进入 Canvas 的目标流程:
进入前确认
确认界面至少展示:
- 将进入的产品和目标动作;
- 来源 Organization、Workspace、Project 与资源名称;
- 将带入的资源数量和固定版本;
- 产物归属与付款主体;
- 预估费用或需要审批的预算条件;
- 完成后可以返回的来源槽位。
同 Organization 且用户已经显式发起的低风险打开可以使用紧凑确认;跨 Organization、复制所有权、外发数据或产生高费用时必须使用完整确认。
Canvas 中的来源提示
无限画布编辑器应持续显示可收起的来源信息:来源产品、来源业务对象、固定版本、目标和返回入口。用户升级 Binding、改变输出规格或扩大工具范围时,需要重新确认并形成新 Revision;不能悄悄改变既有 Handoff。
完成与返回
Canvas 生成的输出先成为候选 AssetVersion 或 CanvasRevision。用户选择“发送回漫剧”“用于商品主图”等动作后:
- Canvas 校验输出符合 requestedOutputSchema。
- Handoff Service 校验 returnBinding、当前权限和来源版本。
- 来源产品展示候选与版本差异。
- 用户在来源产品执行接收、替换、提交审核或发布等领域动作。
- 来源产品写入自己的聚合,并记录新的 Binding 与审计事件。
Canvas 永远不直接更新 Shot.storyboardAssetId、SKU 主图、Campaign 发布状态或其他产品正式字段。
从 Canvas 交给专业工作台
从 Canvas 发起的交接使用相同契约:
- CanvasRevision 和用户选中的节点固定为输入;
- 目标产品必须由用户选择,不能根据节点类型静默推断并执行;
- 目标产品创建或选择自己的领域对象,例如 DramaProject / Shot 或 CommerceCampaign;
- 目标产品 Agent 创建新的 Run,不沿用 Canvas Run 的临时权限;
- 结果进入目标产品候选区;需要返回 Canvas 时创建新的输出 Binding 和 Revision。
即使迁移期两个产品位于同一进程,也必须通过领域服务接口执行,禁止直接写对方数据库表。
漫剧端到端场景
场景:镜头分镜进入 Canvas 精修,再返回 Shot。
- 用户在漫剧工作台选择一个 Shot 和当前已审核的剧本、角色、场景版本。
- 漫剧创建 Handoff,
inputResourceVersions固定这些版本,returnBinding指向该 Shot 的分镜候选槽位。 - Canvas 新建或打开当前共享 Project 下的 CanvasDocument,并用 Binding 引用输入版本。
- 用户在 Canvas 调用 Agent 生成多份分镜;每份成功结果都登记为 AssetVersion。
- 用户选择一个或多个候选发送回漫剧。
- 漫剧检测 Shot、剧本或角色基线是否已变化;未冲突时接收为候选,有冲突时要求比较、重新绑定或重新生成。
- 用户在漫剧审核流程中选定正式版本。Canvas 无权直接把 Shot 标记为已审核或已完成。
验收重点:刷新或切换 Host 后仍能恢复 Handoff;多结果不丢失;返回不覆盖已审核版本;费用能通过同一 traceId 还原。
电商端到端场景
场景:SKU 资料进入 Canvas 生成主图与短视频,再返回 Campaign。
- 用户在电商工作台选择 SKU、商品图、卖点和品牌规范,并选择目标 Campaign。
- 电商创建 Handoff,固定商品资料版本、渠道尺寸与版权约束,returnBinding 指向 Campaign 的内容候选区。
- Canvas 展示来源和约束,图片、视频作为统一 Agent 的创作模式完成生成。
- 输出登记为带
derived_from血缘的 AssetVersion;Canvas 不保存外部渠道凭据。 - 用户发送候选回电商,电商校验 SKU 状态、渠道规格和当前 Campaign Revision。
- 用户在电商工作台选择主版本并发起渠道审核或 MCP 发布;外部发布不会由 Canvas 自动触发。
验收重点:商品正式图不被自动替换;品牌与渠道约束可追溯;MCP Credential 不进入 Context Package;取消 Canvas Run 不改变 SKU 或 Campaign。
状态、重试与幂等
Canvas 体验至少区分:待接收、已接收、处理中、候选就绪、待来源接收、已返回、失败、已取消和已过期。具体持久化状态枚举由通用 Handoff 契约统一,产品不得各自定义互不兼容的同义状态。
规则:
- 创建 Handoff 和写回都使用幂等键;双击、刷新或回跳不能重复创建 Document、Run 或产品 Binding。
- 目标 Run 失败后重试产生新 Attempt,仍归属原 Handoff。
- 用户关闭浏览器不取消 Run;可从 Canvas 当前任务或 Console 全局任务中心恢复。
- Handoff 取消后停止尚未开始的步骤并释放预占,已登记的候选资产按保留策略处理。
- 外部发布或其他不可逆动作状态未知时进入对账,禁止自动重复执行。
- Handoff 过期只撤销继续处理权限,不删除已经形成的审计、账本和合法资产记录。
版本冲突
返回前必须比较创建 Handoff 时固定的来源 Revision 与来源产品当前 Revision:
| 情况 | 处理 |
|---|---|
| 来源未变化 | 允许按 returnBinding 提交候选 |
| 来源仅有非冲突元数据变化 | 展示差异后由来源产品决定是否接收 |
| 输入、目标槽位或审核状态变化 | 阻止自动写回,要求重新绑定或创建新 Handoff |
| 用户失去来源权限 | 禁止写回,保留可审计结果并提供有权限负责人处理路径 |
| 资源跨 Workspace 或所有权变化 | 重新执行授权、复制或转让流程 |
任何冲突处理都不能通过“最后写入获胜”覆盖产品正式状态。
Console 与 Canvas 的协作
Console 负责:
- 查看跨产品 Handoff、Run、费用和审批摘要;
- 切换 Organization / Workspace / Project;
- 管理钱包、预算、成员、资产授权和 Connection;
- 深链接回 Canvas 的 Document、Revision、Run 或来源节点。
Canvas 负责:
- 展示当前画布相关的交接和运行;
- 组织选区与 Context Package;
- 执行创作、呈现候选和触发明确返回;
- 在原位置恢复用户的创作上下文。
Console 的任务中心是读模型,不接管 Handoff、Run 或 Canvas 状态;Canvas 也不复制 Console 的全局管理页面。
安全与审计
- 每次打开 Handoff、读取 Binding 和写回都重新验证 Membership 与资源权限。
- Handoff 记录发起人、确认人、来源与目标版本、预算策略、审批和
traceId。 - Agent 只得到短期 Run Principal;Model Gateway 和 MCP Gateway 不接收用户 Session。
- Context Package、事件和浏览器状态中禁止出现 Secret 与长期签名 URL。
- 分享 Canvas 不自动分享来源产品权限;接收者无权读取的节点只显示受限状态。
- 跨组织交接必须采用授权引用、复制或转让,不得仅修改 organizationId。
目标态验收
- 漫剧和电商可以独立部署,仍通过同一 Handoff 契约与 Canvas 双向协作。
- “在 Canvas 中打开”固定来源 Revision,并在 Canvas 中建立可追溯 ResourceBinding。
- 用户在确认前能看见目标产品、输入版本、产物归属、付款主体和返回位置。
- Context Package 只包含最小业务上下文,不携带完整聊天、内部提示、Credential 或无关资产。
- 每个目标 Agent 执行创建独立 Run,并重新计算权限、Tool Grant、预算与数据外发策略。
- 目标结果先成为候选,Canvas 不能直接修改 Shot、SKU、Campaign 或外部发布状态。
- 返回遇到来源版本变化时能阻止覆盖并提供差异、重新绑定或新建 Handoff 路径。
- 刷新、重复点击、失败重试和跨站回跳不会重复生成、写回或扣款。
- Console 能聚合任务和治理信息,但所有状态变更仍由 Handoff、Run 和产品领域服务完成。
- 从任一结果可以用稳定 ID 和
traceId还原来源、输入版本、Run、Asset、写回、费用与审计链。