文档
Drama

Studio 技术接入

漫剧工作台需要接入方提供的能力

来源:oceanway-drama 仓库 docs/integration/studio.md,提交 45524ef。2026-10-01 补充新架构映射;下方固定提交的实现入口描述原型,不代表最终 Next.js 接口。已冻结的 Core/Contracts 不作为迁移依赖。

产品规则见标准 1.7.0, 模块职责见架构,运行命令见本地运行。 本说明面向产品迁移开发者。@manju/contracts 0.4.0 是原型仓内业务契约,不是已冻结的 oceanway-contracts,也不是新平台的集成契约。

新架构接入映射

原型依赖新归属迁移约束
Identity / IAM平台会话、用户和产品角色产品向平台确认身份;不自行注册用户或授予平台权限
Project、成员能力Drama 产品领域保存平台用户引用并校验项目访问;首期不引入组织多人协作服务
AssetVersion、File产品工程共用媒体模块维持来源、版本、引用保护与授权读取;不恢复 Core 文件授权
Provider 端口产品调用平台模型 API 的适配层保留输入快照与业务任务;凭据和供应路由不进入产品
reserve / settle / release平台唯一账务服务关联授权 operation_id,使用原价格快照;模型消费不在 Drama 再扣一次
Run / Task / Attempt、队列产品业务任务与共用 Worker;平台/网关分别持有客户/供应任务持久关联,未知结果先查询,禁止多层重复付费创建
Studio Host / Canvas同一产品工程的共用画布显式校验产品、用户、来源与素材引用,不因同仓放开访问

以上是目标映射,尚未完成迁移或联调。原型中 Provider、File 和独立 Node 服务仅用于原实现验收;新后端按 Next.js + PostgreSQL 重写,参考下方行为约束和原型证据,不照搬旧部署拓扑。公共能力见共用任务与媒体,平台凭据见身份与权限。

接入入口

入口内容
OpenAPI当前 HTTP 路径、请求与响应
路由清单服务实际注册的方法和路径
契约覆盖源码指纹、声明来源与覆盖边界
正式契约公开类型和传输语义
HTTP 客户端调用、下载、SSE 与精确重放
隔离客户端示例独立 File/HTTP 接手演练

接入步骤:配置可信身份和数据适配器,接入 Provider 与共享媒体, 接入预算/审计/队列,再验证可靠提交、候选登记、播放与下载。 Studio Canvas 与助手会话可分别绑定。各项联调结果在验收状态记录。

适配职责

能力工作台提供接入方提供
身份与项目项目访问、命令和结果登记校验平台提供身份/角色,产品工程提供项目,不新增平台组织成员服务
内容与资产文档、修订、范围、版本与血缘产品工程共用素材版本与资源访问
模型输入快照、业务任务、结果登记平台模型目录与受限调用,网关执行供应请求
预算与审计请求及 Run 关联、拒绝与恢复平台预留/结算/释放与资金审计,产品维护业务审计
媒体与任务完整性检查、候选、授权播放和导出产品工程对象存储、授权链接及 Worker,与平台任务持久关联
CanvasHandoff、输入版本、返回目标与候选校验共用画布、产品授权和真实往返

当前本地 Provider 生成有明确标识的测试媒体,沿用完整任务与候选链。 视频文件内嵌音频随媒体保留。用户选择视频后下载素材,在外部工具完成最终剪辑。

文档与版本

WorkbenchDocument = { schemaVersion: 1, content: { type: "doc", content: DocumentNode[] } }。 文档内核统一校验、序列化、范围替换与指纹。 适配器保留完整文档和派生文本;不支持的结构给出明确校验错误。

对象正式保存字段与指纹
剧本及生产准备episodes[].document 和 text,共用 saveScriptDraft;fingerprint 表示语义,contentFingerprint 覆盖完整内容
分镜content.document 为正文,prompt.document 为生成提示词;documentFingerprint 覆盖完整文档,contentFingerprint 覆盖文本
提示词库顶层 document 与 prompt 同存,修订、复制、默认项和恢复均保留格式
视频要求settings.promptDocument 与统一序列化的 settings.prompt
视频来源shots 或 documentRange 二选一;范围携带偏移、精确引用、文档指纹和可选有序子 ranges

文档来源快照 schema 2 固定正文、范围、文档修订、分镜修订与输入指纹, 使用稳定键序列化计算哈希。schema 1 记录按其原格式和哈希读取。 生成及迟到结果登记先验证原快照完整性,再校验当前实际输入与版本。 纯样式变化按实际模型输入判定影响。

change-source.promptMode 为 auto | sync-latest | keep-current。 服务产生 promptProvenance 和 promptState;自动描述可同步,手改描述由用户明确决定。 无可信基线的非空描述按手改内容保护,历史任务及候选保留原指纹。

PostgreSQL 提示词通过内部 PersistedPromptUsage 的 usage.document 保存富文档, 公共客户端仍发送顶层 document。存储映射负责规范化、校验和读回; 修订、复制、默认选择、归档与恢复均保留该载体。 File、SQL mock 与独立 PostgreSQL 分别验证往返。

可靠提交

宿主保存 requestId、幂等身份、预期修订及完整 payload 后再发送。 命令 requestId 与响应 X-Request-ID 的链路追踪身份不同; 原始来源 PUT 以请求 X-Request-ID 承载上传命令身份,响应追踪仍独立。

成功响应与领域回执匹配后才解除本地恢复记录。超时、断网、响应丢失和协议错误 保留原操作,查询或精确重放确认结果。若回执之后已有新修订,保留本地输入并呈现冲突。 错误传递错误码、请求 ID、可重试性及可用的冲突/字段信息,页面使用可执行中文提示。

SSE 提供事件游标与快照;断线后按游标恢复并查询权威 Run。 停止 HTTP 等待与取消持久任务是两个动作,任务取消通过独立命令完成。

助手

当前会话绑定为 assistantSurface.conversation = { available: true, send(request) }。 send 接收固定 requestId、项目、集数、页面、修订、sourceText、content 和 contexts, 返回 { content: string }。聊天仅呈现绑定返回的文字。 未配置时保留消息草稿和引用,发送不可用。

失败或刷新保留原请求身份;成功只清理仍与本次请求一致的草稿和引用。 批注使用稳定 ID 与 editorAnchor,事务映射状态为 current、changed 或 detached。 脱离位置的批注保留原引用,避免同名文字误绑定。 内容修改建议接入使用现有显式应用、权限、版本和修订命令,聊天回复与保存分别处理。

Canvas

能力可用时显示入口。Handoff 固定项目、集数、片段、输入版本与返回目标; 宿主按 Handoff ID 持久去重。返回时再次校验真实身份、权限、来源、共享资产和媒体, 登记视频候选,正式选择仍由用户完成。 工作台领域状态由现有服务持有,宿主绑定使用Canvas 服务。

视频导出

当前 GET 入口为:

/api/manju/projects/:id/episodes/:episodeId/videos/delivery
/api/manju/projects/:id/episodes/:episodeId/videos/delivery/manifest
/api/manju/projects/:id/episodes/:episodeId/videos/delivery/export

导出返回按视频段顺序排列的 JSON 素材清单。每项包含 segmentId、order、title、 revisionId、candidateId、mediaPath、storageKey、mimeType、bytes 和 registration。 通过修订及候选身份可继续查询生产来源。单段下载返回经授权的原媒体字节; 验收对下载字节计算哈希。媒体 GET 支持范围响应,HEAD 按传输协议返回元数据。

接手验证

先运行 npm run check、npm run test:browser:current 和 npm run test:clean-start。 数据库环境具备后运行 npm run test:postgres,再对真实适配器执行 权限撤销、预算拒绝、任务取消、未知回执、候选登记及下载哈希联调。 迁移前清点数据并备份,保持历史 schema 和指纹的兼容读取。 当前完成范围与外部待接入项统一见验收状态。

On this page