微昕·砚文档
Progress

待测试

短剧:段视频后处理失败可重新处理

  • 已实现:段视频已生成入库、但抽尾帧等后处理失败时,段卡片显示「视频后处理失败」,封面用视频开头画面,弹窗可直接播放该视频;新增「重新处理」按钮,调用 POST /dramas/:id/episodes/:episodeId/segments/:index/reprocess,只重放最近一次成功任务的结果,不重新生成、不扣费。「重新生成」按钮在已有视频时改为默认样式并提示会产生新费用。
  • 已修复:抽尾帧改用与渲染相同的 ffmpeg 路径解析(支持环境变量指定),失败时带上 ffmpeg 实际输出;未安装 ffmpeg 的提示改为「后端未安装 ffmpeg」。
  • 已验证:go test ./internal/app -run Drama、go test ./internal/repository ./internal/handler、tsc --noEmit、bun run lint 通过。未做浏览器验证。
  • 联调:在缺少 ffmpeg 的后端生成段视频,段显示后处理失败且视频可播放;装好 ffmpeg 后点「重新处理」,段变为就绪且积分不再扣减。
  • 回归:点「重新处理」的同时点「重新生成」,只有一个生效,不出现重复作业。

短剧:提示词过期、对白密度、模型选择、资产图与卡住的段视频

  • 已修复:只重做参考图(勾选“让引用它的剧情段视频重新生成”)不再让段提示词过期,只让已生成或生成中的段视频过期;提示词只引用“参考图N”编号,与图片内容无关。设定文字或镜头改动时,已写好的提示词仍标记过期;尚未写完(待撰写、撰写中)的退回待撰写并自动按新素材重写,不再出现“没写过却显示已过期”。后续段因版本递增作废的撰写中提示词也退回待撰写,不再卡在“撰写中”。
  • 已修复:对白密度与台词长度一致。一个镜头只放一句,密集 / 标准 / 克制分别限制单句 12 / 16 / 20 字;密集时台词后气口 0.3 秒(其他 0.5 秒),剧本提示词、镜头时长与段提示词用同一数值;语速统一按每秒 4.5 字。
  • 已修复:短剧模型选择列出创作端能选的全部模型,不能用于短剧的置灰并写明原因(个人渠道、未声明原声对白、不支持图生视频、未声明时长等),不再静默隐藏。图片模型按实际调用(文生图)筛选,不再要求支持参考图输入;视频模型未声明生成方式时视为不限制。
  • 已修复:资产参考图统一 16:9。场景与道具不再跟随作品画幅(此前竖屏作品生成 9:16),内置角色方案(含定妆照)都是 16:9;设定卡片、右侧大图、生成前占位与剧情段参考图缩略图都按 16:9 显示,图片完整显示不裁切,图片层不再盖住卡片下方名称。右侧大图可点击放大查看原图。缩略图加载失败自动重试两次,之后显示“图片加载失败”。
  • 已修复:段视频显示“生成视频中”却没有任何请求。原因一是引用的参考图失败、锁定或未生成时调度一直等待;现在只等仍在生成的参考图,其余改用文字设定提交。原因二是全集回到“段提示词”阶段时,已逐段点了生成的段也不提交;现在明确请求的段只要本段提示词就绪即可提交。段视频已请求但未提交时,页面显示真实等待原因(等待上一段、等待参考图、未放行、制作暂停等),不再冒充“生成中”。
  • 已验证:go test ./internal/production ./internal/repository、go test ./internal/app -run Drama 通过;tsc --noEmit 通过。临时用例验证了:重做参考图后提示词保持就绪、撰写中的段改镜头后退回待撰写、未声明原声的视频模型返回置灰原因、参考图失败且全集回到提示词阶段时已请求的段视频仍会提交。未做浏览器验证。
  • 浏览器验收:设定页角色 / 道具 / 场景卡片为 16:9、名称不被遮挡,右侧大图点击放大;已有的 9:16 场景图需重新生成后才是横版。
  • 浏览器验收:短剧视频模型下拉里,创作端可选但短剧不可用的模型置灰并显示原因。
  • 回归:段视频请求后状态与“请求明细”一致;等待中的段悬停可看到完整原因。

管理后台折叠侧栏显示两字名称

  • 已实现:管理后台侧栏折叠后,与用户端一致在图标下方显示两字名称(如「总览」「渠道」「用户」「外观」「三方」),底部返回入口显示「返回」;完整名称仍由悬停提示和 aria-label 提供。名称来自 admin-shell.tsx 导航项的 shortLabel。
  • 已验证:bun run typecheck 通过。未做浏览器验证。
  • 浏览器验收(亮色 + 暗色):折叠后 64px 侧栏内每项图标和两字名称居中不换行,选中与悬停时名称变为主文字色;展开 / 折叠切换后与用户端状态同步。

画布框选批量下载

  • 已实现:框选 2 个以上节点后,在节点或空白处右键出现「下载 N 个资源」,N 为选区内带内容的图片、视频、音频节点数;文本、背板等节点跳过并在说明里提示数量,选区没有媒体时菜单项置灰。每个资源单独下载为独立文件,文件名沿用单个下载的「画布名_节点名_日期」。先并发换取全部下载地址(资源访问请求合并为一次),再每隔 400ms 交给浏览器一个;拆层合成未完成的节点跳过。完成后汇总提示已开始数、失败数和第一条失败原因。
  • 已验证:tsc --noEmit、改动文件 eslint 通过;bun test 2832 项全部通过;服务端渲染检查菜单在 10/12、0/5、3/3 三种选区下的文案和置灰状态正确。未做浏览器验证。
  • 浏览器验收(Chrome / Safari):框选 10 张图片,右键「下载 10 个资源」,首次出现「下载多个文件」询问并允许后,下载目录得到 10 个独立文件;混选文本节点时提示跳过数量。
  • 回归:对象存储使用 CDN 公开模式的部署上,批量下载中任意一个地址若被浏览器当成打开页面,画布页会被替换、后续下载中断(单个下载已有的问题,见下载跳转打开的说明),需在修复下载地址后复测。

工作台切换创作、@ 缩略图、Live2D 预览与形象收起

  • 已实现:图片 / 视频工作台切换创作工具时,提示词为空或仍是当前预设原文就直接换成新工具的首个预设(新工具没有预设则清空);用户改过的提示词弹出「替换 / 追加 / 返回」确认。同一工具内点预设 chip 时,未改动的预设原文也直接替换。从外部链接带 ?tool= 进入时同样应用预设(优先 ?preset=)。
  • 已实现:提示词 @ 素材缩略图的解析缓存改为 60 秒合并,签名地址有效期交给资源访问缓存判断;解析失败不再缓存回退地址。缩略图加载失败时先显示类型图标,并强制换取新签名地址后自动换回图片(同一素材 30 秒内最多强刷一次)。
  • 已实现:同一页面同时有多个 Live2D 实例时只让一个渲染(后台外观预览优先于悬浮入口,同级时最后挂载的优先),其余实例释放 WebGL 上下文并显示回退形象,占用者卸载后自动重新加载。原因是 pixi-live2d-display 的 Cubism 着色器是进程级单例,后台外观预览会把悬浮形象的绘制"吸"进预览框。
  • 已实现:悬浮 Agent 形象(Live2D / 动画包)悬停时左上角出现「收起形象」按钮,收起后只保留 48px 小圆球入口且不加载模型,点击仍打开 Agent;状态保存在 localStorage 的 canvas:agent-launcher-collapsed:v1。触屏设备按钮常驻。
  • 已实现:上一轮被用户拒绝时,续轮交接帧 run_handoff 新增 rejectedAction(工具名、操作说明、用户拒绝理由与"不要原样再次申请"的说明),避免下一轮重复申请同一操作。
  • 已验证:tsc --noEmit、bun run lint、相关前端测试(Live2D、@ 引用、工作台)与 go test ./internal/app -run 'Continuation|Reject|Handoff|Interjection|Inheritable' 通过。未做浏览器验证。
  • 浏览器验收:工作台先选工具 A(自动填入预设),再换工具 B,提示词变为 B 的预设;手动改过提示词后换工具,出现确认弹窗,三个按钮行为正确;任务「再次编辑」恢复后提示词不被覆盖。
  • 浏览器验收:@ 引用素材后等待签名地址过期(或在对象存储侧让地址失效),重新打开提示词面板,缩略图先显示图标再自动恢复图片;工作台上传参考图的 @ 缩略图同样恢复。
  • 浏览器验收:后台外观设置导入 Live2D 后,预览框正常显示,悬浮入口临时显示默认球;离开后台或卸载预览后,悬浮 Live2D 重新加载且显示在原位置。点「重试」、调整形象高度时不出现形象被吸进预览框。
  • 浏览器验收:收起 / 展开形象在明暗主题、拖动位置、刷新页面、打开面板后关闭等场景下位置和状态正确;收起时待审批状态点仍可见。
  • 真实模型验收:拒绝一次 Agent 操作并填写理由,下一轮对话不再原样申请同一操作。

画布上传:本地预览、并发上传与上传动效

  • 已修复:上传完成后图片节点长时间空白。上传成功时本地文件已写入会话内存缓存(primeResourceBlobCache),但节点仍先请求访问地址、再把原图从服务器完整下载一遍;thumbnail 变体后端尚未生成,一律回退原图。现在 useNodeResourceUrl 和图片放大预览先读会话内存中的 Blob URL,命中即直接上屏;切换为正式节点前先把本地原图解码(最多等 1.5 秒)。刷新页面后内存缓存清空,仍走原有访问地址路径。
  • 已实现:上传过程中占位节点直接显示本地图片或视频首帧。上传开始时整张画面磨砂(模糊 24px、略降饱和度),随真实进度平滑变清晰;字节传完、等待服务端保存时保留 2px 轻微模糊,切换为正式节点后完全清晰。画面上不再叠加文字卡片,只在右下角显示小标签(准备中 / 百分比 / 处理中),屏幕阅读器仍能读到完整状态。音频、文本没有预览,沿用原来的光晕占位。本地预览地址只存在页面内存(services/canvas-upload-preview.ts),不写入节点 metadata,上传结束即释放。关闭动效或系统减少动态效果时,模糊仍随进度变化,但去掉过渡和标签呼吸动画。
  • 已实现:多文件上传改为 3 个并发,整体进度按已完成数量显示;批量时逐个文件不再弹错误和刷新项目,全部完成后刷新一次并汇总失败、暂存本机数量。图片上传复用占位阶段解码出的尺寸,不再解码第二次。节点进度更新合并为最多约每 120ms 一次。
  • 已实现:上传请求超时按文件大小计算(60 秒 + 按 256KB/s 估算的传输时间,上限 15 分钟),分片的单片和合并请求同样按大小计算;去掉分片循环里未使用的 FormData。
  • 已验证:bun run typecheck、bun run lint 通过;bun test 2832 项全部通过。未做浏览器验证。
  • 浏览器验收(亮色 + 暗色):拖入一张 5MB 以上的图片,节点出现时整张磨砂,随上传逐渐清晰,右下角百分比同步变化;完成后图片直接显示,无转圈空白;双击放大预览立即出图。
  • 浏览器验收:一次拖入 8 张图片,同时最多 3 张在上传,右上角显示「已完成 n/8」;全部完成后统一选中;限速网络(DevTools Slow 3G)下 20MB 文件不在 60 秒时超时退回本机。
  • 回归:替换已有图片节点时预览为新图,失败后恢复原图;视频上传占位显示首帧;上传失败节点显示错误与「重新选择文件」;刷新页面后图片仍能正常加载。

画布资产视图

  • 已实现:画布顶栏「画布 / 资产」切换(?view=assets),资产视图按文本、Markdown、图片、视频、音频分类,资产下列出 A/B 版本、批次子图和节点内 V1/V2 历史;支持搜索、预览、重命名、下载、设为主版本和在画布中定位。左侧目录为自绘树,支持方向键、Enter/空格操作。
  • 已验证:bun run typecheck、bun run lint 通过;bun test 2832 项全部通过(工作区「资产」页签改名为「素材库」后同步更新了侧栏测试)。未做浏览器验证。
  • 浏览器验收(亮色 + 暗色,1440 / 390px):切换视图后刷新仍停留在资产视图;左侧目录层级缩进清晰、空分类置灰;1440px 下顶栏中间的切换不与左右两组重叠,窄屏可从菜单切换。
  • 浏览器验收:有 A/B 版本、批量四张图、拆层结果和 V1/V2 历史的画布,目录归并正确、主版本星标与画布一致;「设为主版本」后画布节点同步变化;「在画布中定位」能展开折叠的背板和批次并聚焦节点。
  • 回归:资产视图下按 Delete、⌘V、⌘Z 不影响画布;左侧工作区「节点」列表点选会切回画布并定位;视频、音频预览可播放,文本和 Markdown 下载为当前正文。

闲置画布反复全量重拉已结束的 Agent 轮次(#900)

  • 已修复:恢复单轮时把本机已恢复的事件与列表尾部窗口合并,取从 seq=1 连续的前缀;追平 eventCount 就不再请求,否则从前缀末尾按 sinceSeq 增量读。此前列表视图只带尾部 40 条,前缀判断永远不成立,event_count > 40 的轮次每次都 sinceSeq=0&fromStart=true 重读。
  • 已修复:已选中但不在当前画布目录里的对话,先读新接口 GET /agent/conversations/:id(只读控制列)判断是否变化,未变化就复用本机快照,不再每 4 秒重读全部轮次。标签页隐藏时停止 4 秒轮询,回到前台立即补一次。
  • 已验证:bun test test/cloud-agent-history.test.ts test/cloud-agent-panel-sync.test.ts 15 项通过(新增长轮次复用前缀、目录外对话复用缓存 2 项);bun run build 通过;后端 go test ./internal/app -run 'TestCloudAgentConversation|TestCloudAgentRunDetailPagesJournalBySeq' 与 ./internal/handler 通过。未做浏览器和线上流量验证。
  • 线上验收:打开一个含 event_count > 40 已结束轮次的画布,再切到另一个画布但保持选中该对话,闲置 60 秒;grep -c 'sinceSeq=0&fromStart=true' 只出现首屏那一轮,之后为 0,每 4 秒只剩目录和单条摘要两个小请求。
  • 回归:另一设备在该对话追加新一轮后,本标签页 4 秒内显示新轮次;运行中的轮次刷新后消息完整、不重复;切到后台再回来会立即刷新。

点击节点时偶发左右抖动

  • 已修复:按下节点后,指针移动未超过 3px 拖动阈值前不再写入拖动预览位移。此前点击时的轻微手抖会触发对齐吸附(屏幕约 7px 范围),节点被临时拉向相邻节点的边缘或中线,松手判定为点击后又弹回,看起来像左右抖一下;只在节点与其他节点接近对齐时出现,所以是偶发的。超过阈值后的拖动、吸附和参考线行为不变。
  • 已验证:tsc --noEmit、改动文件 eslint 通过;拖动与选择相关 4 个测试文件 16 项通过。未做浏览器验证。
  • 浏览器验收:把两张图片摆成左边缘或中线相差几像素,反复单击其中一张(包括触控板轻点),图片不再横向跳动;正常拖动时仍能吸附并显示参考线。

画布多节点渲染性能

  • 已实现:屏外缓冲节点的分帧挂载从画布页面移到世界层(use-canvas-progressive-node-mount.ts)。平移或缩放停下后,补齐缓冲节点期间只重渲染世界层和新挂载的节点,不再每帧重渲染整个画布页面并重建引用映射。@ 引用、资源标签、配置输入和 LOD 改为按候选节点集合一次计算。
  • 已实现:节点 @ 引用列表、资源标签和批次封面在内容不变时沿用上一轮对象(canvas-reference-stability.ts),节点 memo 可以跳过渲染。CanvasNode 只对配置、分镜、批量表等自定义内容节点比较页面级 renderNodeContent,图片、视频、文本节点不再因为这个回调重建而重渲染。连线选择和右键回调改为稳定引用。
  • 行为不变:屏内节点仍立即挂载;缓冲区节点仍按离视口距离每帧最多补 12 个,单帧预算 4ms;渲染预算和 LOD 阈值没有调整。
  • 已验证:tsc --noEmit、改动文件 eslint、bun run build 通过;画布相关 9 个测试文件 74 项中 72 项通过,失败的 2 项在 canvas-workspace-sidebar,来自工作区里已有的左侧栏改动,与本次无关。临时脚本(2000 节点、1500 连线、720 个可见节点)确认:输入相同时 720 个节点的引用数组全部沿用;视口平移 20 个节点后,仍在视野内的 700 个节点全部沿用。未做浏览器性能录制。
  • 浏览器验收:在 300+ 节点的画布上用 React DevTools Profiler 录制平移停止后约 1 秒,确认只有新进入的节点在渲染;缩放、拖动节点、框选、悬停节点时没有明显掉帧。
  • 回归:配置节点的输入摘要、分镜脚本节点、批量表、预演节点在连线或上游内容变化后正确刷新;批次图片封面在展开/收起后正确;平移到新区域后屏外节点逐步出现,没有空白节点残留。

全站 UI 规范整理(尺度、动效、反馈、空态)

  • 已实现:按 docs/ui-design-system.md §0.5 收敛全站。antd 主题圆角改为 4/8/12/16 四档(用户工作台按钮、输入、选择器 9px→8px,弹窗 20→16,下拉、Popover、Toast 16/14→12),动效 150/200/250ms,表单项下边距预留一行报错(用户端 24px、后台 20px),浮层阴影改为两层;皮肤阴影 skinShadowVariables 同样两层。
  • 已实现:hover / 选中 / 展开不再改变字重(导航、标签页、分页、下拉选中项等 40 处);hover 不再上移、缩放、旋转(83 处 CSS 与 14 个组件),按下缩放只保留全局 button:active { scale: 0.97 },去掉组件自写的第二层缩放;transition: all 改为具体属性;58 处单层大投影补成两层;侧栏折叠去掉宽度动画;进度条改为 transform 过渡(progressFillStyle)。
  • 已实现:Tooltip 首次悬停 500ms(base Tooltip、后台 AdminTooltip、新增 AntTooltip 包装 16 个直接使用 antd Tooltip 的文件),Tooltip 层级提到弹窗内浮层之上;修复 base Tooltip 在 title 由空变非空时 Hook 数量变化导致报错的问题(useRef 移到提前返回之前)。Toast 统一由 AppFeedbackProvider 提供(用户端与后台共用,顶部 16px、3 秒、最多 3 条),同类型同文本的提示替换旧提示而不是堆叠。
  • 已实现:按钮加载时宽度不变(转圈覆盖在中央,文字透明保留无障碍名称);按钮焦点环与全局一致(主色、2px 偏移)。
  • 已实现:空态分为首次使用、搜索无结果(回显关键词 +「清除筛选」)、加载失败、没有权限四种;页面级空态落在内容区约 40% 高度;空态图标改为单色线条 + 主色点,去掉多色渐变与发光。画布库、作品库、素材库、技能库、灵感大厅已接入「无结果」样式;功能关闭页改为「没有权限」样式。
  • 已实现:时间显示统一 RelativeTime(7 天内相对时间,更早显示日期,悬停看完整时间),已接入作品库、任务列表/网格、画布卡片、首页最近画布。
  • 已实现:emoji 与文字符号图标改为 lucide(技能/工具引用芯片、引用预览占位、剧本节点模式菜单、预演冲突提示、剪辑倍速);全局 z-index 字面量改为 token;中性表面色带轻微冷色倾向;创作页「思考/流式」开关开启态改为主色浅底,不再固定蓝色发光;数量选择器选中态改为普通选中色,不再用主操作色。
  • 已验证:bun run typecheck、bun run lint、vite build 通过;bun test 2765 项中 4 项失败:canvas-workspace-sidebar 2 项、model-picker-style-source 中「ModelPicker 样式独立加载」1 项与本次改动前的基线一致,settings-preference-spacing 中钱包标签外边距 1 项来自工作区里进行中的钱包改动。5 个按旧数值写死源码字符串的测试已按新规范更新。未做浏览器验证。
  • 浏览器验收(亮色 + 暗色,1440 / 390px):画布库、素材库、技能库、作品库、任务、设置、后台的按钮与输入框圆角一致为 8px;弹窗 16px、下拉 12px;导航和标签切换时文字不左右挪动;卡片 hover 无位移。
  • 浏览器验收:点击「保存」「新建」等带加载状态的按钮,按钮宽度不变;连续触发同一错误只出现一条 Toast;在工具栏上快速扫过图标,首个 Tooltip 约半秒后出现,随后相邻图标立即切换;弹窗内的 Tooltip 不被遮住。
  • 浏览器验收:在画布库、素材库、技能库搜一个不存在的关键词,空态显示关键词并可「清除筛选」;空库首次进入时空态位于内容区偏上;关闭某个功能后访问其页面显示「没有权限」样式。
  • 浏览器验收:任务进度、存储容量、作品进度、预算条的填充动画平滑且圆角端点正常;侧栏折叠/展开无卡顿;prefers-reduced-motion 下按钮按压不缩放。
  • 浏览器验收:自定义皮肤(创作室青橙、暖调柿棕、品牌紫蓝)下阴影、焦点环、开关开启态与主按钮颜色正确。

画布媒体版本

  • 已实现:图片、视频、音频节点内版本历史(metadata.mediaVersions / currentMediaVersionId)。单张重新生成已有生成结果改为原位产出新版本,旧媒体在生成开始前登记;上传替换也保留旧媒体。入口为节点「V3/4」角标、浮动工具条「版本 N」和右键「版本历史」。版本面板支持缩略图悬停预览、方向键与 Enter、图片对比滑块、另存为新节点、删除非当前版本。
  • 行为变化:此前重新生成已有图片/音频会在右侧新建结果节点,已有视频会新建兄弟版本节点;现在单张输出改为原位生成。多张输出、上传素材、参数变体和生成副本的落点不变。
  • 已验证:tsc --noEmit 中本次改动的文件无错误;test/canvas-* 共 856 项通过(canvas-workspace-sidebar 的 3 项失败来自工作区里已有的左侧栏改动,与本功能无关),canvas-batch-regeneration 中「已有图片另建结果」的用例已按新行为改写;临时用例覆盖原位提交登记、重复提交幂等、切换、删除、另存、上传替换、30 个版本上限;后端临时用例确认 mediaVersions[].media.storageKey 和嵌套 videoPreview.storageKey 都被资源引用扫描识别。未做浏览器验证。
  • 浏览器验收:生成一张图后在提示词面板改提示词再生成,节点原位更新且出现「V2/2」角标;打开版本面板,悬停 V1 预览、开启「对比当前」拖动分隔线、切回 V1 后节点媒体与下游连线正常,撤销可恢复。
  • 让一次原位生成失败(例如触发审核拦截),确认节点显示失败且版本面板可切回旧图;生成中打开面板,末尾显示「生成中」卡片且切换按钮禁用。
  • 视频与音频节点各重新生成一次,确认版本面板可播放历史版本;替换音频文件后旧音频出现在历史中。
  • 删除一个历史版本后刷新页面,版本仍不存在;被删除版本的素材在没有其他引用时才会被清理。明暗主题下检查面板、角标与右键菜单。

存储空间套餐

  • 已实现:充值商品新增 storage 类型(容量、有效天数,0 为永久);支付成功按订单快照写 user_storage_grants;有效容量 = 全局 storedFileGB + 生效扩容,上传、分片、生成落库和媒体任务准入共用;超额后返回 storage_capacity_exceeded,首次观察超额起 7 天后 /api 非 GET 写入由只读守卫返回 storage_read_only(删除、支付、账号、管理接口放行);用户侧存储空间弹窗(购买、扩容记录、超额提示)、侧栏与素材页入口、全局容量不足提醒;管理端商品表单类型切换、用户详情「存储空间」页赠送与撤销;支付跳转返回按订单类型打开对应弹窗;钱包弹窗只展示积分商品,支付扫码流程抽为 usePaymentOrderFlow 共用。
  • 已验证:后端 go test ./...;临时用例覆盖存储订单发放一次且不写积分流水、过期/撤销扩容不计入、超额宽限期内可写但上传被拒、宽限期后只读、管理员赠送后立即解除只读并清空超额状态、商品类型校验、只读守卫在真实 Gin 路由下的放行判断;前端 tsc --noEmit、bun run lint、vite build。bun test 有 9 项失败,均来自工作区里其他未提交改动(画布侧栏、模型选择器、Agent 样式等),与本功能无关。未在浏览器、PostgreSQL 和真实支付渠道验证。
  • 后台新建“存储空间扩容”商品(如 10 GB / 30 天、100 GB / 永久),用户在存储空间弹窗扫码与跳转两种渠道各买一次:支付后容量立即增加,扩容记录显示到期时间;跳转渠道返回后打开的是存储弹窗而非积分中心。
  • 关闭积分功能:存储弹窗仍可购买;积分中心入口隐藏,积分商品无法下单。
  • 把基础容量调到低于已用量:侧栏与素材页显示“已超额”,上传和生成被拒并弹出“购买空间”提醒,画布编辑仍可保存;把 user_storage_states.over_limit_since 改到 8 天前并等待 15 秒:画布保存、素材编辑、任务创建返回只读,删除素材、购买、登出可用;删除素材或购买后刷新容量恢复编辑。
  • 管理员在用户详情赠送 / 撤销扩容,核对审计记录;撤销原因为空时不能提交。
  • 支付订单列表与详情中存储订单的“金额 / 权益”显示正确(订单 CSV 未新增列,存储订单的“积分”列为 0);对账补发存储订单只发放一次。
  • PostgreSQL 下执行 migrate-schema up / verify,确认版本 69 的新列与两张表;已在版本 70 的库能补跑版本 69。明暗主题下检查存储弹窗、侧栏与素材页入口。

作品交付:对象存储故障时本地兜底、补传与计费保护

  • 背景:平台 S3 返回 SlowDownWrite 503 时,作品保存失败且订单被冻结积分自动退回,用户既看不到作品也没有扣费。
  • 已实现:平台存储直传限时(1 分钟 + 每 MB 1 秒,最长 10 分钟);失败或熔断(5 分钟内 3 次失败后暂停直传 5 分钟)时作品存到服务器并照常成功、结算;resource_offload_jobs 后台补传,成功后切换资源存储、链接不变,15 分钟后清理本地文件;存储错误按 SDK 错误码判断可重试;请求日志附存储错误码;被未完成恢复记录引用的暂存文件保留 7 天;自动退回跳过上游已生成作品的订单;管理员在请求日志详情“作品保存恢复”中重新保存,已退款订单可选择补扣或免除;存储管理页提示待同步作品。
  • 已验证:后端 go test ./...;临时端到端用例覆盖 503 → 本地兜底 → 任务成功并结算 → 存储恢复后补传切换 → 本地清理、自动退回跳过带作品恢复记录的订单、S3 SlowDownWrite/503 判为可重试且上传受截止时间约束、管理员恢复已退款订单并补扣;前端 bun run build、bun run lint。未在 PostgreSQL 和真实对象存储上运行,未做浏览器验证。
  • 预发环境把平台存储 Endpoint 指向一个返回 503 的地址,生成图片和视频:任务成功、作品可播放(含 Range 拖动)、订单已结算,请求日志出现 upload 失败与 local_fallback 成功。
  • 恢复存储后 1–5 分钟内补传完成:资源仍为同一 ID,/api/resources/{id}/file 改为跳转对象存储;15 分钟后数据目录中的本地文件被删除;存储管理页提示消失。
  • 补传前删除该作品:补传任务取消,不残留对象存储对象和本地文件。
  • 用户自有对象存储失败:不兜底,任务显示“作品保存未完成”,订单待核对且不会被自动退回。
  • 管理员对已退款的失败任务执行“恢复并补扣”和“恢复,不扣费”,核对余额、订单状态和审计记录。
  • PostgreSQL 下执行 migrate-schema up / verify,确认版本 70 与 resource_offload_jobs 索引。

提示词素材库引用“没有对应的画布资源”

  • 已实现:登录走增量会话,素材 store 只有本机缓存;打开画布时原先只按 assetId 字段拉取素材,提示词里的 @[asset:ID] 不会被拉取,换设备、清缓存或换浏览器打开后生成必然报“没有对应的画布资源”。现在打开/对齐画布时同时收集提示词中的素材引用;生成与重试前再按提示词补拉缺失素材(覆盖从本地日志打开、未经远端加载的画布)。画布保存的依赖校验不变,提示词引用不阻塞保存。
  • 已实现:场景、道具设定(entity 且分类非角色)以前会出现在 @ 菜单里,但生成阶段只认角色卡,选中后必然报错;@ 菜单与生成解析改用同一判定 isCharacterEntityAsset,缺分类的旧记录按角色处理。
  • 已实现:素材引用确实已删除或无权访问时,提示改为“素材库素材已删除、无权访问或不能用于生成”,不再把内部素材 ID 展示给用户;画布槽位引用(如 @图片1)的原提示不变。
  • 已验证:bun run typecheck 通过;提及、资源引用、角色生成、批量快照、同步相关 11 个测试文件共 91 项通过。未做真实浏览器验证。
  • 浏览器验收:A 浏览器在提示词中 @ 素材库图片并保存;B 浏览器(或清空 IndexedDB 后)打开同一画布,提示词显示为素材芯片而非 @[asset:…],直接生成成功。
  • 浏览器验收:删除被引用的素材后生成,看到新的素材提示且不提交任务;场景/道具设定不再出现在 @ 菜单。

Agent 媒体规格误拒绝与工具回执恢复

  • 已实现:规格不一致返回具体字段和解析值,进入同一工具最多三次的纠正流程;合法的图片质量档位到分辨率转换不再误报不一致。修正后的媒体生成仍须审批,失败阶段不创建媒体任务或媒体账单。
  • 已实现:Pi 恢复时优先补回服务端保存的真实工具回执,避免把已提交媒体任务误报为未执行;保留运行时已有结果与恢复提示,沿用未执行调用补齐和严格历史校验。
  • 已实现(续):比例按预设换算成同一画幅的像素(如 16:9 → 1824x1024)不再报规格不一致;按本地 18 个图片/视频渠道模型的真实能力配置探测,GPT Image 2.5 的 7 组参数里有 5 组因画幅被误拒,修复后这 5 组都能进入审批;所有能进入审批的组合批准后都只提交 1 个任务。像素换回比例仍按不一致返回可纠正错误。
  • 已实现(续):批准后、提交前的报价过期、依赖或角色卡变化、规格或价格变化改为 approval_stale,不建任务和订单,整轮继续并要求再次审批,计入 3 次上限;恢复提示按最新历史生成,提交前失败不再说"已执行一次"。批准后解析哈希一致时跳过逐字段比较(本地真实配置下这一步未出现误报,属于防御)。
  • 已实现(续):工具调用配对修复覆盖重复结果(真实回执优先于占位)、孤立结果(转为 orphan_tool_results 数据消息)、无效调用 ID 和审批暂停占位;回执只接同调用声明之后、同工具名的结果;运行时历史不可用时退回服务端历史,不再让整轮失败。旧版 Go 执行路径同样修复。
  • 已实现(续):新一轮只沿用 completed 上一轮的 Pi 会话;失败、取消、拒绝的会话不再继承,避免同一对话之后每轮都报工具调用不匹配,新一轮依靠文本历史与 run_handoff 帧(含已提交任务)继续。本地库 164 份会话里,失败、取消、拒绝的 27 份都没有以正常回复结束,其中 16 份存在缺结果的调用。
  • 已验证:go build ./...、go vet ./internal/app、go test ./... 通过;新增 cloud_agent_tool_history_repair_test.go 覆盖迟到回执、重复与孤立结果、无效调用 ID、别名冲突不再判死、暂停占位换回执、跨工具回执不误用、会话继承规则、画幅等价与过期报价不扣费。未部署、未启动服务、未调用真实收费模型。
  • 更新后端后,用真实渠道验收:触发不支持的规格,确认 Agent 可纠正后重新申请审批;合法图片比例/档位可以批准;审批暂停后继续会话,已提交任务仍使用原任务 ID,不重复生成。此次未部署、未启动服务、未调用真实收费模型,也未修改历史失败任务。
  • 真实验收:审批卡停留超过 30 分钟再批准,Agent 应重新申请而不是整轮失败;取消一轮(含生成中)后在同一对话继续,确认不再出现工具调用不匹配,且不会重复提交上一轮已提交的生成。

我的画布与技能库页面重设计

  • 已实现(我的画布卡片二次重设计):网格每行最多 5 列(列宽下限取“容器五等分”与 232px 的较大者,1480px 内容区为 5 列、1440px 视口约 4 列,≤720px 固定 2 列),行距 28px、列距 20px。卡片带 8px 内边距与 1px 细描边,内嵌 4:3 圆角封面;封面为最多三张媒体的拼图(1 张铺满 / 2 张左宽右窄 / 3 张左侧主图跨两行),图片优先,视频取首帧并带播放角标,远程视频先换取授权播放地址。封面右下角为节点数角标;标题提升为 15px;页脚左侧为所属项目胶囊(强调色浅底),未归属显示“自由画布”中性胶囊,右侧为时钟 + 相对更新时间。hover 时封面轻微放大、顶部压暗、描边加深并出现柔和落影;空白画布改为点阵底 + 48px 图标 tile。未登录本地模式的预览节点改为只取图片/视频,与服务端摘要一致。
  • 已移除(我的画布):页头“…”菜单及其中“删除当前已加载画布”功能与对应样式;删除改为只通过单卡更多菜单或多选后的批量删除。
  • 已实现(我的画布,上一版):相对时间来自 web/src/lib/relative-time.ts,绝对更新/创建时间放在 title。重命名铅笔、更多菜单和多选框只在 hover / focus-within 出现,触屏(hover: none)常显;菜单展开时保持可见。去掉“已加载全部 N 个画布”,下一页加载中只显示小号 spinner,失败仍可重试;列表读取失败改用统一错误态。
  • 已验证(二次重设计):bun run build(tsc --noEmit + vite build)、bun run lint 通过;test/library-card-redesign.test.ts 已按新合同更新(5 列上限、4:3 拼图封面、页头无批量删除入口),与 create-canvas-handoff、workspace-route-loading 共 37 项通过;未做真实浏览器验证。
  • 浏览器验收(二次重设计,亮色 + 暗色,390 / 1440 / 2048px):每行不超过 5 张;1/2/3 张媒体拼图比例正确、无白缝溢出;视频首帧能显示,失败时回落为视频图标占位;节点数角标、项目胶囊与时间在 232px 卡宽下不重叠;铅笔与标题行垂直对齐;页头只剩“新建画布”“导入”。
  • 已实现(技能库):只保留一套导航。左侧窄栏依次为范围(技能广场 / 我的技能 / 我创建的 / 我的收藏,带计数)和当前范围的分类:广场与收藏显示平台分类(启用策展时为根分类 + 当前根的子分类 + 未细分),我的技能 / 我创建的显示“我的分类”(全部 / 未分类 / 自建分类,保留新建与删除)。删除了顶部范围分段和“平台分类”下拉。结果区标题为“范围 › 分类 + 计数”,右侧为搜索、排序、重置和主操作“安装技能”。窄屏(≤900px)导航折成结果区上方的横向滚动条。
  • 已实现(技能卡):分类色字形 tile(名称首字,--category-accent)、名称最多两行、作者行、两行简介;底部为可点击的“♥ 收藏数”(likeCount,aria-pressed)和“N 人加入”(addedCount)。分类标签只在“全部”视图显示,我的技能范围下改为分类选择器。右上角为常显的紧凑加入开关(未加入为细线“+ 加入”,已加入为安静的对勾“已加入”,作者本人不显示);作者的“在工作台编辑”(/skills/:id/edit)与更多菜单(详情 / 技能信息 / 删除 / 加入或移除)在 hover / focus-within 出现。整卡通过名称按钮的伸展点击区打开详情,键盘焦点画在卡片外壳上。
  • 已验证:tsc --noEmit、bun run lint、vite build 通过;bun test 中新增 test/library-card-redesign.test.ts 通过,全量剩余 3 个失败(canvas-workspace-sidebar.test.ts 2 个、model-picker-style-source.test.ts 1 个)来自其他进行中的画布侧栏 / 全局样式改动,与本页面无关。未做真实浏览器验证。
  • 浏览器验收(亮色 + 暗色,390 / 768 / 1440 / 2048px):画布卡预览顶角与卡片圆角一致、无横向溢出;hover 与 Tab 聚焦时出现多选框、铅笔与更多菜单,触屏设备常显;单击铅笔进入改名、Enter 保存、Esc 取消;打开中遮罩、预取、导出、删除、加入/移出项目、批量选择栏仍可用;长列表滚动到底时 spinner 出现、断网时“加载失败,重试”可恢复。
  • 浏览器验收:空白画布、仅视频画布、仅文本节点画布、图片画布四种预览的观感一致;项目标签过长时截断不挤掉时间与节点数。
  • 浏览器验收(技能库):切换四个范围时分类区随之变化且旧筛选被清空;策展开启/关闭两种平台分类;我的分类新建、删除(hover 出现删除按钮)、技能归类;搜索、排序、重置、分页与每页条数;加入/移除、收藏切换的即时状态与计数刷新;详情、技能信息抽屉、安装弹窗、工作台跳转;空态与加载骨架;窄屏横向导航可滚动且不撑破页面;prefers-reduced-motion 下无过渡与骨架脉冲。

画布提示词面板、节点工具条与左侧菜单视觉整理

  • 已实现:提示词面板头部命令(风格/预设/润色/放大/关闭)统一为 28px 高、14px 图标、11px 文字;放大/关闭前加分隔,与工具类命令分组;标题提升为 12px 半粗并带浅底图标;“参考图 · N”改为计数胶囊,去掉竖线。
  • 已实现:参考图芯片去掉内部竖线分隔与描边,改为 12px 圆角浅底,缩略图内缩 4px 带圆角,序号改为贴在缩略图左上角的半透明暗底角标;拖拽抓手常态弱化、悬停芯片时显形;芯片行左缘与提示词正文对齐。高度调整条常态更淡,悬停/拖动时变宽变亮。
  • 已实现:提示词面板底栏控件(模型、智能引用、摄像机、参数)统一 32px 胶囊,与圆形发送按钮同一几何;紧凑模式摄像机按钮改为 32px 正方形(批量生成设置弹窗同样受影响)。
  • 已实现:节点悬停工具条直接编辑类工具与生成/调整菜单之间加分隔;容器加 1px 低对比描边,内边距与按钮高度对齐;纯图标按钮为 32px 正方形;菜单展开不再反色,改为 hover 底色 + 箭头翻转;常态文字略降对比,悬停/展开恢复。
  • 已实现:画布左侧菜单标签从 7px 提升到 10px,按钮 48px 高;“主页”与“展开”前加短分隔;未展开工作区时菜单按内容收缩为浮动竖条,不再占满整列。
  • 已验证:bun run build(tsc --noEmit + vite build)通过;未做真实浏览器验证。
  • 浏览器验收(亮色 + 暗色):图片/视频/音频/文本四种模式的面板头部与底栏不换行、不截断;参考图拖拽排序、替换高亮、移除按钮、预览仍可用;有/无拖拽抓手两种芯片的序号位置正确。
  • 浏览器验收:节点工具条在宽、紧凑、窄三档布局下分隔不重复;九宫格/人像调整/视角/图片工具菜单展开时箭头翻转、键盘 ↓/Esc 正常;prefers-reduced-motion 下无过渡。
  • 浏览器验收:左侧菜单收起时为浮动竖条、展开(≥992px)时恢复整列;窄屏抽屉打开时竖条保持收缩;画布浮层避让与缩放控件位置不受影响。

用户工作台按钮系统与内容库页面外壳

  • 已实现:用户工作台(非后台、非画布编辑器)统一一套按钮尺度,由 getWorkspaceAntThemeConfig 的 Button token 提供:常规 34px / 紧凑 28px、9px 圆角、0 12px 内边距、13px/560、图标 15px(stroke 1.8)、图标文字间距 6px,纯图标按钮为同高正方形。主按钮沿用皮肤主色且去掉投影/内高光;次要按钮为透明底 + 1px --user-border,hover 换 --user-surface-muted 与 --user-border-strong;文字按钮透明底 + 弱化文字。移除此前把默认按钮刷成实心灰底(--user-surface-muted !important)和 border-color: transparent !important 的覆盖,以及只作用于页头的 34px 补丁(它在 @layer utilities 内且非 !important,实际被 antd 的 38px/12px 覆盖,因此没有生效)。
  • 已实现:内容库工具栏的搜索框、选择器与按钮同为 34px 透明细线外观;分段筛选(技能范围、创作历史状态/视图、灵感类型)共用 34px/28px 轨道,计数为弱化等宽数字;SegmentedControl 增加 app-segmented* 稳定类名供工作台统一几何。
  • 已实现:页头命令顺序统一为“主操作 → 次要操作 → …”(画布库“导入”移到“…”之前);计数徽章改为 20px 中性小标签;素材库容量改为命令组左侧的紧凑行内计量(数值 + 56px 进度条 + 百分比),去掉计数前的强调色圆点。
  • 已实现:内容卡(画布、素材、技能、插件、灵感、创作历史行、首页最近画布)hover 只换表面明度,不再上移/右移,内容库媒体 hover 不缩放;--library-hover-offset / --library-active-offset 归零;内嵌媒体统一 --user-radius-media(10px);插件卡去掉默认 1px 描边;最近画布条改为 72px 同高紧凑卡,“查看全部”与重试按钮跟随按钮系统。
  • 已实现:设计原则“组件左侧不能有竖杠”,已写入 docs/ui-design-system.md,并由 web/test/no-left-accent-stripe.test.ts 扫描 web/src(不含 pages/projects/)。已移除的左侧竖条:侧栏导航子项引导线、画布历史抽屉时间轴竖线与圆点、Markdown/公告/章节编辑器/技能包/插件/AI 消息/画布文本节点与文本编辑器的引用块左边线(改为浅色底块)、风格资产绑定弹窗的红/黄提示条左边线(改为整块色调)、后台公告预览 3px 强调边与其引用块左边线、后台技能分类树子级引导线。栏间/单元格分隔线保留。
  • 已验证:tsc --noEmit、bun run lint、bun test、vite build 通过;未做真实浏览器验证。
  • 浏览器验收(亮色 + 暗色):画布库、素材库、技能库、创作历史、插件中心与首页(最近画布、灵感大厅)页头与工具栏所有按钮、搜索框、选择器、分段筛选同为 34px;主按钮无投影;“上传图片”“导入”为细线透明底;“创作历史”“更多筛选”“…”为透明文字按钮,hover 只出现浅底。
  • 浏览器验收:禁用态(画布未恢复时的“新建画布”“导入”)不出现灰色实心底;危险按钮(清空回收站、批量删除)仍为危险色;弹窗、抽屉、下拉内的按钮同样为新尺度且文字不被截断。
  • 浏览器验收:分段筛选选中块与计数在明暗主题下的对比度;任务视图切换只有一层轨道;素材库容量计量在 1440px 与 390px 下不换行错位、满额时变为错误色。
  • 浏览器验收:卡片 hover 无位移、无描边;键盘 Tab 时 focus-visible 清晰;prefers-reduced-motion 下无过渡;首页最近画布条、灵感卡内嵌封面的圆角与内边距一致。
  • 浏览器验收:上述去掉左侧竖条的组件(侧栏子菜单、画布历史抽屉、各类 Markdown 引用块、风格资产绑定提示、后台公告预览)层级仍清晰。

技能工作台(VS Code 式技能包编辑)

  • 已实现:/skills/:skillId/edit 整页工作台。左侧可拖拽调宽(宽度按用户记忆)的资源管理器:由文件路径生成嵌套文件夹树,展开状态按用户与技能记忆,文件类型图标、筛选框,↑↓←→/Home/End/Enter 导航,F2 重命名、Delete 删除,右键或行内铅笔/更多菜单提供新建文件、新建文件夹、重命名、删除(确认)和撤销修改。
  • 已实现:右侧编辑区复用现有 CodeMirror(未新增依赖):标签页(单击为斜体预览标签,双击或编辑后固定;未保存显示圆点,悬停换关闭,中键关闭)、可点击的路径面包屑、行号、等宽字体、Tab 缩进、⌘/Ctrl+S 保存、⌘/Ctrl+P 快速打开、⌘/Ctrl+B 切换资源管理器;切换标签保留撤销历史、光标与滚动。Markdown 支持编辑/分栏/预览(复用技能详情的 Markdown 渲染),图片/视频/音频预览,二进制或超过 512KB 的文件只读提示并可打开原始文件。状态栏显示行列、文件大小、保存状态、版本号与语言。
  • 已实现:所有修改先进入本地工作副本,保存时折叠为一次 PUT /api/skills/:id/files 批量操作,原子生成一个新版本;baseVersionId 乐观锁,冲突时提示重新加载。空文件夹只在本地显示,需在其中新建文件后保存。离开页面或刷新时有未保存修改会拦截确认。
  • 已实现:非作者(含内置技能)与 GitHub 技能为只读模式并显示说明;非作者可直接“加入我的技能”,GitHub 技能可“同步”。仓库内没有复制/派生技能能力,未提供“复制到我的技能”。入口:技能卡片更多菜单“编辑”、技能详情“编辑”(非作者为“工作台”只读浏览);原编辑抽屉改名“技能信息”,工作台内同样可打开。
  • 已验证:后端 go test ./internal/skills/... ./internal/handler/... 覆盖作者权限、私有技能、GitHub 拒绝、路径越界/规范化/层级/保留名/文件夹冲突、512KB 文本上限、版本生成与 instruction 同步、无变化不生成版本、过期版本与事务内并发冲突;前端 skill-workbench-model.test.ts 覆盖文件树、筛选、路径校验、删除→改名→写入排序与互换文件名。未做真实浏览器验证。
  • 浏览器验收:明暗主题下资源管理器、标签栏、面包屑、状态栏与快速打开的观感;拖拽与键盘调整宽度;树键盘导航与屏幕阅读器播报;新建/重命名/删除文件与文件夹后保存,刷新确认版本号递增、文件内容与技能详情一致。
  • 浏览器验收:⌘/Ctrl+S 不触发浏览器“另存为”,⌘/Ctrl+P 不触发打印;两个标签页同时编辑同一技能,后保存的一方出现冲突提示;有未保存修改时点侧栏导航、返回按钮与刷新均被拦截。
  • 浏览器验收:大文件(接近 512KB)输入流畅度;图片预览、超过 512KB 文件提示;非作者、内置技能、GitHub 技能的只读提示与按钮;窄屏下资源管理器覆盖面板与分栏改为上下布局;prefers-reduced-motion 下无过渡动画。

短剧自动流水线(上传小说 → 成片)

  • 已实现:/projects/new 上传 TXT/MD(GBK/UTF-8)或粘贴正文,浏览器内拆章、清理平台插入语、标出异常;只确认画幅、单集时长、风格、配音语言、审阅方式,模型默认自动选择,按真实报价预估集数、镜头数和费用区间,可设预算上限。
  • 已实现:服务端调度循环(Schema 61)推进 作品圣经(角色/别名/场景)→ 分批分集 → 单集剧本与分镜 → 配音(镜头时长随配音)→ 首帧(带角色/场景参考图)→ 审阅点 → 图生视频 → ffmpeg 合成竖屏成片与 SRT。关闭浏览器不影响进度;失败自动重试一次后进入“待处理”。
  • 已实现:制作台三栏(虚拟化集列表/矩阵视图、剧本·分镜·成片三视图、镜头检查器)、底部队列与预算、角色与场景抽屉(影响范围预览后重做参考图)、待处理收件箱、制作设置;镜头编辑只让受影响槽位过期,所有版本保留可切回;锁定镜头不参与批量重做;键盘审片 J/K/A/R/V/L/E/X。
  • 已验证:go test ./... 全部通过,其中 internal/production 纯逻辑测试与 drama_orchestrator_test.go 端到端调度测试用模拟任务跑通样片门禁、全剧成片、编辑回退、失败重试与预算暂停;前端 tsc、ESLint、vite build 通过,novel-parse.test.ts 5 项通过。
  • 已实现:交互打磨。制作模型改用创作端通用带图标的 ModelPicker(新建页、设置页、剧情段与批量生成),只放行后端短剧目录中的平台模型;设置页改为 12 栏网格铺满宽度,并发改为分段选择,预算显示已花费进度;待处理按“类型 + 失败环节 + 原因”折叠成组(如“12 个角色参考图生成失败”),显示真实错误、头像/镜号芯片,可整组重试;集标题行内改名去掉白框;检查器表单重排(台词通栏,说话人/景别/运镜一行)。
  • 已实现:全局去回弹。删除工作台点击时给按钮和图标播放的按压回弹动画(useWorkspaceButtonFeedback),移除按钮与卡片 :active 缩放、悬浮上移;工作台下拉改为短淡入,不再从 scaleY(.8) 拉伸;antd motionEaseOutBack 改为不越界曲线(Checkbox 勾选不再弹)。反馈入口从右下角悬浮按钮改为顶栏积分左侧的固定胶囊。
  • 浏览器验收上述打磨:任意页面点击按钮、Select、Dropdown 无回弹;顶栏反馈胶囊明暗主题与窄屏(仅图标);短剧设置页、待处理分组与整组重试、剧情段模型选择(键盘上下不切换镜头)、集标题改名。
  • 已实现:修复参考图与首帧尺寸。期望画幅(如角色 3:4)先换算成所选图片模型真正支持的档位,没有精确档位时取比例最接近的已声明值;准入仍因尺寸拒绝时去掉尺寸再试一次(只看结构化字段,不解析文案)。
  • 已实现:参考图方案。新建与设置页可选定妆照、三视图设定板、四格资产板 · 声纹或自定义,角色与场景提示词全文可编辑、可插入变量,并实时预览实际发送内容;可从已添加技能的文本文件中选中段落导入;设置页可按新方案一键重做全部角色或场景参考图。
  • 已实现:生图节奏。新作品默认“先出剧本与分镜,手动生图”:只跑作品圣经、分集、剧本与分镜,剧本完成的集显示“待生成画面”,可逐集生成、全部生成,或在角色页先生成全部参考图;重做单个参考图或单个镜头时视为已放行。设置里可改为全自动。
  • 已实现:剧本视图改为剧本与小说原文左右对照,点选镜头自动高亮原文出处;成片视图改为播放器 + 胶片条 + 可跳转字幕;队列行不再溢出,点击查看历次请求(时间、模型、参数、状态、积分、错误、提示词与产出)。
  • 已实现:作品列表改用内容库壳层(搜索、按状态筛选、横版拼图封面、整页拖入上传),全站用户端分页改为胶囊页码 + 跳页 + 每页条数;内容库页头与工具栏按钮统一为 34px 紧凑样式。
  • 浏览器验收:手动生图模式下新建作品只扣文本费用、剧本就绪后停在“待生成画面”;逐集与全部放行;参考图方案切换、技能导入与预览;队列详情弹窗;作品列表筛选与分页;资产、任务、技能等页面的新分页在明暗主题下的效果。
  • 已实现:分镜规则。新建页与设置页可设单集时长(可直接输入“5分钟 / 300 / 2:30”或选常用值,30 秒–20 分钟)、镜头时长(智能按快/标准/舒缓节奏、固定 N 秒、或 N–M 秒范围,单镜最长 60 秒)与转场(智能 / 硬切 / 黑场过渡 / 闪白,可调转场时长)。规则写进剧本提示词作为硬约束,并决定镜头数量、时长计算与费用预估;台词比规则更长时以说完为准。成片渲染用首尾淡入淡出实现黑场/闪白,总时长不变。镜头长于视频模型单次上限时提示“超出部分以最后一帧定格”。
  • 已实现:剧情段制作(Schema 67)。去掉逐镜配音、首帧与单镜视频:每个剧情段一次调用视频模型,台词、音效与镜头切换都在这个视频里生成;剧情段按视频模型单次上限切分。流程为剧本 → 文本模型撰写各段完整视频提示词 →(逐集确认模式下确认)→ 按段顺序生成视频 → 合成成片。第 2 段起以上一段视频最后一帧为首帧(后端用 ffmpeg 抽取,已加入 backend/Dockerfile),上一段未生成时本段排队等待,提示词里“首帧即上一段最后一帧”与实际请求一致。作品圣经与剧本新增关键道具,参考图按角色 → 道具 → 场景编号随请求发送,提示词开头自动写明“参考图N:名称”。配音模型、角色音色 ID、镜头通过/锁定/重做与版本切换全部删除;旧数据迁移时历史产物归档为版本,未完成的集回到剧本阶段并暂停作品。
  • 已实现:分镜页改为剧情段卡片:段视频、状态(待撰写 / 撰写中 / 待生成 / 等待上一段 / 已生成 / 已过期 / 失败)、生成依据(首帧来源与参考图,未附图的标出原因)、段内镜头脚本、按段换模型与生成。点击镜头或段标题打开剧情段弹窗:左侧段视频、生成依据、镜头列表与镜头脚本编辑,右侧完整视频提示词(系统追加的参考图说明 + 可编辑正文,可复制发送全文、恢复模型版本、重新撰写)。设定页分角色 / 道具 / 场景三类,角色有声线描述(写进视频提示词)。
  • 已实现:分镜页剧情段卡片改为网格(1440 宽竖屏一行 4 张、一屏约 12 段),卡片只放状态、封面(段视频最后一帧)、首帧与参考图缩略图(悬停看说明)、前 3 个镜头和生成按钮,失败与提示收成标题行图标;完整内容和按段换模型在弹窗里。支持快捷键:⌘/Ctrl+A 全选,⌘/Ctrl 单击多选,Shift 单击或 Shift+方向键连选,X/空格选中当前段,J/K 与方向键切换,Enter 打开,Esc 取消选择,双击卡片打开;弹窗打开或在其他视图时快捷键暂停。多选后可批量生成视频(只提交提示词就绪且未在生成的段,其余跳过)或批量重新撰写提示词。
  • 已实现:剧本更紧凑。分镜规则改为剧情段时长(按模型上限 / 8 / 10 / 12 / 15 秒)、镜头节奏(快 2–4 秒、标准 2–5 秒、舒缓 4–8 秒)、对白密度(密集约每 3 秒一句、标准 4.5 秒、克制 7 秒)与转场;剧本提示词按这些写成硬约束:每个剧情段 3–6 个镜头、全集台词下限、连续无台词镜头不超过 2 个、对话用正反打拆短镜。删除旧的固定 / 范围单镜时长。设置页与新建页可选“视频提示词技能”(已添加技能里的一个文本文件),撰写段提示词时按技能写法输出,技能不可读时保存与撰写都会报错。界面:多选工具栏和弹窗内的视频模型选择框加宽;单镜头剧情段直接显示画面与台词,不再出现序号;制作台横幅统一放进容器,与内容和彼此之间留出间距。
  • 已改编的集需要“重新改编”才会按新的节奏与对白密度重写;用真实文本模型确认一个 15 秒剧情段有 3–6 个镜头和多句台词,以及选定技能后段提示词遵循技能结构。
  • 用真实文本与视频模型实测一集:段提示词的时间码与镜头时长一致、台词逐字;第 2 段首帧确实是第 1 段最后一帧;参考图编号与图片对应;成片保留视频原声。本机未装 ffmpeg,最后一帧抽取与合成未跑过真实文件。
  • 浏览器验收:剧情段卡片与弹窗在明暗主题、窄屏下的布局;镜头时长修改超过段上限时的报错;设定页道具分类;旧作品升级到 v67 后的暂停提示与重新改编。
  • 已修复:作品暂停时点“重新改编”只重置了剧本,调度循环跳过暂停的作品,不产生队列任务,页面却一直显示“正在编写剧本与分镜”。现在重新改编、生成段视频、撰写段提示词、重试、放行、确认和重做参考图在暂停或已完成时按“继续制作”同一套校验恢复制作;只改内容的操作不恢复。没有镜头时按真实状态显示(编写失败 + 重新改编、已暂停 + 继续制作、未开始、排队、正在编写),分镜页与剧本页一致;手动暂停(没有暂停原因)也显示暂停横幅和“继续制作”按钮。上游 HTTP 402 的提示改为“模型服务余额不足(HTTP 402),请到渠道供应商充值或更换渠道后重试”。
  • 已实现:剧情段切法恢复为三种模式(Schema 71)。智能:按场景切换与冲突转折切段,单段不超过视频模型单次上限;固定:输入每段秒数,跨场景也按时长装箱;范围:输入最短–最长秒数,达到下限后在场景切换处断开,不足下限的段在不超上限时并入前一段。秒数超过所选视频模型上限时界面提示并按上限执行。剧本提示词、剧情段切分、费用预估和剧本页规则摘要使用同一份规则。旧作品的剧情段目标秒数迁移为固定模式,按模型上限的迁移为智能。样式修复:“选择技能”按钮被说明文字的样式压窄、文字竖排;深色主题下“推荐”标签和风格 / 参考图选中勾是白底白字,改为页面底色文字。
  • 新建页与设置页切换智能 / 固定 / 范围,输入秒数后看底部“约 N 段 · 每段约 M 镜”;用真实文本模型改编一集,确认固定模式各段时长接近设定、范围模式各段落在范围内并在场景处断开。
  • 重启后端后,在已暂停的作品里点“重新改编”,确认作品切到制作中、底部队列出现“剧本与分镜”任务;文本渠道余额不足时本集显示编写失败与 402 提示,而不是一直转圈。
  • 浏览器验收:5 分钟一集 + 每镜固定 30 秒的作品,剧本约 10 镜;黑场/闪白转场在成片中的效果(需 ffmpeg);检查器提示词与实际任务提示词一致;改镜头时长后只重新合成。
  • 浏览器验收:新建页拖拽、粘贴与预估刷新;制作台明暗主题、200 集矩阵视图、批量选择与快捷键、整页视图与窄屏布局。
  • 旧版章节/分镜工作流页面已下线,旧项目不再出现在列表中;后端旧接口与表仍保留,待确认后清理。

用户反馈收件箱(PR #849)

  • 已实现:工作台意见反馈、图片/视频附件、个人收件箱、管理员筛选答复与归档;用户数据按账号隔离,管理操作由后端校验管理员权限。
  • 已验证:后端 go test ./...、前端 bun run test(2771 项)、类型检查、lint、Prettier 与生产构建通过。当前开发机未安装 Chrome/Chromium,未运行真实浏览器 E2E。
  • 登录普通账号,从反馈插件提交四种类型中的至少一种,上传图片与视频,刷新后确认附件、状态和本人收件箱一致。
  • 管理员查询、筛选、答复、改状态、归档/取消归档并删除反馈;普通账号访问管理 API 应被拒绝;窄屏与明暗主题复验。

Agent 多端对话接续与图片审批宽高比

  • 同账号同画布通过已有运行的 conversationId 发现和恢复云端对话;完整分页轮次与事件共用实时归约,另一端发起后续轮次后持续接续。草稿、未知提交的原幂等键与手选历史受保护;审批结果以服务端状态为准。
  • 会话目录和轮次读取按当前用户隔离;复用既有表和画布互斥,旧父轮不能创建分支,相同幂等键优先回放,避免重复生成。
  • 图片审批参数采用函数式累积更新,连续切换比例和分辨率不会回退;扩展 JSON 的旧尺寸、分辨率、质量不覆盖最终规格。真实 React 审批卡回归覆盖最终提交参数和提交期间禁用编辑。
  • 官方主干基线验证:后端 36 包、1960 项顶层测试通过;前端 2794 项测试、类型构建与 ESLint 通过。两个独立浏览器(其中一个为移动视口)完成三轮双向接续、刷新和草稿保留;真实 React 回归覆盖审批状态同步、并发与最终图片规格。
  • 物理手机、真实收费模型及 test:previs:e2e 未执行;后端 Linux 专属 errno、付费 DDCat 与未配置的生成资源浏览器 runner 共 3 项显式跳过。

Agent 多图补充观察与图像消费(#877)

  • 已实现:canvas_inspect_image 支持 nodeIds + purpose 批量观察,目的和图片一同进入当前模型请求;同版本图像允许按需重新观察,总图片数仍受每轮预算及模型图片数量、大小和资源归属校验限制。
  • 已实现:成功返回非空可见正文后移除已交付图片,保留工具回执与助手正文;只有工具调用或推理、失败及上下文摘要不消费图像。
  • 用真实多图任务验证目的随图片送达、历史观察不足时能补看、信息已足够时复用结论;工具续轮、纯推理和失败路径不提前消费图片。

Agent 审批与执行回执阶段(#876)

  • 已实现:分镜、批量创作表、预演和角色卡普通写入成功后,工具结果与画布变更事件使用“已写入”回执,并保留目标摘要;媒体草稿仍表达待审批,任务提交后明确表达已提交、生成结果未完成。
  • 已实现:拒绝普通操作说明本次未执行;拒绝媒体生成时说明草稿保留、任务未提交且未扣费。
  • 手工验收 auto 普通写入、request_approval 等待/批准/拒绝,以及媒体批准后的提交回执和任务最终回写。

放大编辑的资产引用菜单

  • 已修复:节点提示词放大编辑时,@ 引用菜单挂载到当前 Modal 内并显式启用指针事件,搜索与选择保持在弹窗的焦点边界内;普通编辑继续挂载到 body。
  • 已验证:DOM 回归覆盖弹窗与普通编辑的 Portal 归属、搜索输入、焦点和资产选择;未进行真实浏览器视觉验收。
  • 放大图片 / 视频节点的提示词编辑器,输入 @,搜索并选择素材库资产,确认引用插入、弹窗不关闭;明暗主题和弹窗调整尺寸后复验。

连线目标卡片动态倾斜

  • 已实现:有效连线目标卡片绕中心跟随指针双轴旋转,最大倾角按反馈收敛为 8°,叠加随指针移动的柔和反光;离开、完成或取消连线后平滑复位。普通悬停和选中不触发。
  • 已调整:平时 hover、选中或聚焦节点仍显示连接加号;仅在普通 / 批量连线过程中,取消节点正文 hover 与选中带来的显示,改为进入对应侧边连接热区时显示。保留连接点键盘聚焦可见。
  • 保留稳定的节点几何与连线锚点;指针帧只更新目标外壳 CSS 变量,不逐帧重渲染媒体内容。系统减少动态效果、应用关闭动效以及拖拽时禁用倾斜。
  • 已验证:连线倾斜与连接控制器专项测试、前端类型检查通过;覆盖指针帧合并、内容不重渲染、缩放坐标、动效设置、退出与卸载清理。尚未进行真实浏览器视觉验收。
  • 真实画布验收:普通 / 批量连线、反向连线、切换目标、完成与 Escape 取消,确认倾斜跟手、反光不遮挡内容、连线命中稳定;不同缩放比例、明暗主题及减少动态效果设置复验。
  • 连接加号:平时悬停、选中或聚焦节点可见;连线中悬停正文隐藏,进入左右连接热区只显示对应侧;结束或取消连线后恢复普通 hover / 聚焦行为;批量连线时其他节点不统一亮起。

上游 5xx 失败文案(#868)

  • 已修复:上游已返回 HTTP 500/502/503/504 时,画布节点、Agent 工具回执和请求日志显示“模型服务暂时不可用,请稍后再试。”,不再显示“网络异常。”;带上游原因的 5xx 文案不变,连接失败(dial、连接重置等)仍为“网络异常。”。
  • 已验证:前后端既有错误分类断言随行为更新;前端产物包含新文案。未新增回归测试,未构造上游 5xx 实测页面显示。
  • 上游返回 503 时,画布节点失败提示与 Agent 回执显示“模型服务暂时不可用,请稍后再试。”;断网时仍显示“网络异常。”。

Pi 运行待办催办与先说明再调用(#867)

  • 已修复:Pi 运行时的完成闸补上待办催办。模型只回正文、清单仍有未完成项、该清单尚未催办且本轮步数预算未用完时,以 pending_plan 恢复运行一次;与插话续跑共用恢复路径,崩溃恢复闸不把它当遗留提示词清空。催办状态仍在清单真实变化或新插话到达时重置。
  • 系统策略 v18:生成任务数与视频秒数是本轮累计上限,0 表示对应项不限;写入画布、申请审批、提交生成或向用户提问的调用前,同一条回复先用一两句话说明做什么及依据;正文预告的操作必须在同一条回复里发出调用;pending_plan 仍有效时直接调用或更新状态,生成仍先进入审批。
  • 已验证:在 v1.6.8.12 叠加本修复和 #866 的预发环境用 deepseek-v4.1-flash 实跑,模型列清单后只回正文停下,完成闸催办一次后先说明再读取、写入,最后把清单标记完成。未新增回归测试;强模型的说明行为未验证。
  • 让 Agent 规划多步生成后只回复“准备提交…”:确认它继续发出调用(生成先出审批卡)或说明阻塞原因,同一清单不会被反复催办。
  • 强模型连续写入或申请审批时,每次调用前有一两句说明;只读调用不强制说明。

Agent 审批恢复回传本次结果(#866)

  • 已修复:创建审批卡(含首次计划审批)时,在同一事务内清空已送达的 Pi 恢复提示词,批准后写入本次调用的执行结果。此前同一轮第二次及以后的审批沿用第一次的恢复提示词,模型收到过期结果和 snapshotHash,看不到后续修改已写入,继续写同一对象会被判快照过期。媒体任务失败、用户在节点直接提交等由调用方显式写入的提示词不受影响。
  • 已验证:在 v1.6.8.12 叠加本修复的预发环境(生产数据副本)用 deepseek-v4.1-flash 实跑,一轮内依次批准计划和两次节点写入,模型每次收到对应结果并如实汇报。未新增回归测试。
  • 一轮内连续批准多张画布修改卡(例如逐行修改分镜),确认 Agent 每次依据的都是本次写入结果,后续写入不再因快照过期被拒。
  • 媒体生成批准后分别出现成功与失败,Agent 回执与实际结果一致。

Agent 单参考图的像素尺寸继承(#862)

  • 已修复:单参考图继承画幅后,通过模型已声明的尺寸预设编码 size;像素预设在同一分辨率档内转换,省略尺寸时使用能力解析的默认档位。草稿配置与真实用户规格变更保持优先,审批一致性校验不放宽。
  • 已验证:隔离 SQLite 回归覆盖 1424×800 参考图、显式及省略尺寸、草稿继承、多参考图、非法尺寸拒绝、不同像素档位的报价与重复审批;渠道模型和逻辑模型的默认档位、4K 及草稿分辨率换算另有专项测试。测试不调用付费图片上游。
  • 在真实画布界面确认审批卡片中的尺寸、档位和报价,以及用户修改审批参数后的显示;离线回归不代表真实上游生成验收。

可移动父容器中的其他浮层

  • 已排查并接入:画布节点、视口与世界层、节点浮动面板和工具栏、助手窗口、独立拖动的提示词优化面板,以及工作流测试台的可拖动节点。共享观察覆盖锚点的所有相关祖先,解决外层平移 / 缩放或嵌套浮层移动时只观察最近父块的遗漏。
  • 已修复:风格 / 特效 / 运镜的搜索筛选卡片改用 Ant Design 原生 Popover,持续调用公开 forceAlign() 跟随并避让窗口边缘;提示词预设、图层控制、模型可用性明细也接入统一通知。没有新增坐标算法、全局 resize 事件或持续轮询。
  • 已统一:权限、九宫格预设、节点更多操作、文件夹、脚本和优化模式等原生 Dropdown,通过 CanvasAnchoredDropdown 在父块移动时收起;统一 Select 也在移动父块内采用相同规则,保留原生键盘交互、受控状态与 ref。复杂卡片保持展开跟随,一次性菜单收起,避免仅改变挂载点后跨过窗口边缘仍越界。
  • 已修复:原有自定义 @ 引用菜单、自动引用提示和视频首尾帧菜单补充父容器移动通知,复用现有定位与边界计算。提示词优化面板保持 body 挂载和独立视口定位,内部模型 / 模式浮层响应其拖动。
  • 已验证:57 项相关专项测试与前端类型检查通过。测试覆盖嵌套祖先移动、原生 DOM / Select ref、每次展开仅收起一次、子浮层样式不反馈,以及关闭 / 卸载清理。真实 Chrome 中风格卡片随画布上下移动,右移至边缘时保持内容全部可见,Escape 可关闭;助手窗口移动 80px 后权限菜单收起。
  • 深浅主题、窄屏、缩放期间的风格 / 特效 / 运镜、图层控制、预设、引用提示和视频首尾帧逐项复验。
  • 工作流测试台拖动节点时参数 Select 收起,重新展开后的选中值、搜索、方向键与外部 ref 行为保持正常;提示词优化面板独立拖动 / 调整大小时内部浮层复验。

画布参数浮层统一跟随与边缘避让

  • 已实现:图片 / 视频 / 音频参数、模型选择、智能引用、肖像质感与助手上下文卡片统一使用 usePopoverAnchorAlign。仅在浮层展开时观察所在移动面板的位置、尺寸样式变化,并通知 Ant Design 原生 forceAlign();关闭和卸载时解除观察。
  • 已修复:节点配置栏通过 transform 平移或尺寸动画更新时,参数卡片不再留在原位置;较高参数卡片启用 Ant Design 原生双轴 shift 避让,无箭头时使用零定位偏移,避免翻转后仍越出视口。
  • 已验证:43 项相关专项测试及前端类型检查通过,含对齐通知、批量样式更新、内容 / Portal 样式不反复触发,以及关闭 / 卸载清理。真实 Chrome 中保持图片参数展开,画布平移 120px 后配置栏、按钮和卡片同步移动 120px,卡片整体处于视口内;统一后的助手上下文卡片与窗口也同步移动 80px。
  • 视频 / 音频参数、模型选择、智能引用与肖像质感在不同窗口尺寸、画布缩放和明暗主题下复验。

画布助手上下文用量浮层边缘裁切

  • 已修复:上下文用量 Popover 挂载到 body,脱离助手窗口的 overflow-hidden 裁切;优先在按钮上方右对齐,并启用边缘自动避让。
  • 已实现:浮层显式接收画布主题变量,与助手窗口共用材质 token;覆盖规则改为 Ant Design 6 的 .ant-popover-container,限制高度并允许内容滚动。
  • 已修复:助手窗口的位置或宽高变化时,对已展开的上下文 Popover 主动调用 forceAlign();保持 body 挂载与边缘避让,同时跟随拖动、调整大小及恢复窗口布局。
  • 已验证:29 项 Agent 上下文 / 窗口 / 展示专项测试及前端类型检查通过;现有本地服务的真实 Chrome 画布中,右侧助手窗口的浮层完整显示,DOM 检查确认浮层不在裁切容器内,右边缘可见。
  • 已验证跟随:真实 Chrome 中保持卡片展开,助手窗口左移 320px、上移 60px,浮层位移完全一致;拖回原位后,浮层右边缘仍与按钮右边缘对齐、上下间距保持不变。
  • 窄屏、矮窗口及深色画布下复验自动避让、长明细滚动和主题配色。

画布节点比例切换动画

  • 已实现:图片、视频空节点切换比例时,宽高与位置使用同一段 Motion 弹簧过渡,保持节点中心;连续切换从当前显示尺寸接续。
  • 已实现:DOM 卡片、SVG 命中路径、Leafer 连线、表格引用连线及节点浮动面板共享临时显示几何。动画仅作用于已挂载节点,不逐帧重渲染媒体或写入画布状态、自动保存和撤销历史。
  • 已修复:拖拽或拉伸接管时立即结束过渡;系统「减少动态效果」与应用 .no-motion 设置实时生效。节点卸载、离开画布、媒体回填及锁定会清理动画。
  • 已验证:76 项画布专项测试与前端类型检查通过。新增测试覆盖几何插值、连续切换、取消与清理,并在 Happy DOM 中挂载真实 React 节点及 SVG 连线验证同步、动效偏好和节点内容不逐帧重渲染;未进行真实浏览器视觉验收。
  • 真实画布验收:图片 / 视频空节点在 1:1 → 16:9 → 9:16 连续切换时,节点中心、连线、工具栏和参数面板是否协调;不同缩放比例及明暗主题下是否流畅。
  • 交互验收:过渡途中拖拽、四角拉伸、滚轮缩放和撤销 / 重做保持即时响应;开启减少动态效果后尺寸直接生效;已有媒体保留原始比例与手动尺寸。

平台级 Agent(单一面板,画布可选绑定)

  • 已实现:CanvasCloudAgentPanel 挂在 UserLayout,所有登录页面共用一个实例(跨路由不卸载)。画布编辑器只通过 web/src/stores/use-global-agent-store.ts 发布当前画布上下文(画布 ID、节点、选区、引用、预填),离开画布时撤回。发送时有画布就带 canvasId 和画布上下文,没有就不带。
  • 后端:POST /api/agent/runs 与 /messages 的 canvasId 改为可选。无画布运行不查画布、不占画布锁(多段平台对话可并行)、不暴露画布/生成/预演工具、不构建画布上下文;contextScope、focusNodeIds 必须为空。续轮允许换绑画布(首页 → 画布 → 离开),换绑时不继承旧画布的创作锚点,并注入 scope_change 说明,告诉模型旧节点 ID 与快照哈希已失效。
  • 前端:对话历史与待确认提交改为按账号全局存储(不再按画布分)。写回同步、审批前保存跟随运行自身的 run.canvasId:离开画布后,进行中那一轮仍写回原画布。
  • 已验证:go test ./...(新增 cloud_agent_unbound_test.go:无画布运行、拒绝无画布时带画布上下文、续轮换绑)、bun run build、bun test(Agent 相关 144 项)、bun run lint。
  • 首页无画布直接对话:能收到回复,不出现画布工具调用;面板标题不显示节点数。
  • 首页对话后进入画布继续发消息:同一段对话延续,Agent 能读取当前画布;离开画布再发:不再读写该画布。
  • 画布内 Agent 运行或等待审批时离开画布:运行继续,审批后结果写回原画布。
  • 各页面只有一个悬浮入口,位置、开合状态跨页面保持;切换账号后对话历史隔离。
  • 明暗主题、窄屏(小于 640px)下面板布局与滚动正常。

积分运营:冻结积分自动退回开关

  • 已实现:/admin/credit-operations 右上角新增「自动退回」开关,默认关闭;开启前二次确认。配置存于 system_settings 键 billing_auto_refund({"enabled": bool}),不新增表结构;接口 GET/PATCH /api/admin/settings/billing-auto-refund,仅管理员可读写,修改写入管理员审计 billing_auto_refund.update。
  • 行为:开启后后台 worker 每分钟按「待核对队列」口径(费用待核对、运行超 40 分钟、任务已失败/取消但仍预授权)每轮最多 100 条调用既有退款路径,写退款流水并记录核对备注「系统自动退回」;开启时立即执行一轮,关闭后下一轮停止。
  • 已验证:go test ./internal/app/(默认关闭、非管理员不可修改)、bun run build。
  • 开启开关后,待核对订单在 1 分钟内变为已退款,用户可用积分恢复、冻结积分减少,积分流水出现退款记录。
  • 关闭开关后新的待核对订单保持冻结;刷新页面后开关状态保持;非管理员调用接口返回 403。

视频画质增强(火山 AI MediaKit 大模型版)

  • 已实现:官方插件 volcengine-mediakit(provider volcengine-mediakit-enhance-video,kind: processing,能力仍为 video),调用 POST /api/v1/tools/enhance-video-generative 与 GET /api/v1/tasks/{task_id},client_token 取宿主幂等键。manifest provider 新增 kind 字段(generation / processing),目录接口返回给前端。
  • 后台:渠道模型视频能力新增 processing(fpsPolicy = keep_source / user_select、fpsOptions、maxSourceSeconds ≤ 180);价格档新增 fpsBand(le30 / le60 / le120)与生成方式「画质增强」(enhance),可按次或按秒计费。
  • 准入:processing 任务不要求 prompt;源时长、尺寸由服务端按资源记录重算(短边 360–1080、长边 ≤1920、时长 ≤ 上限),videoSeconds = 源时长向上取整,帧率按后台策略收敛。轮询上限保持 1 小时。
  • 计费:按秒订单按源时长预扣,完成后按实际输出时长结算(优先 ffprobe 探测的资源时长,其次上游 result.duration),多退少补;都拿不到时进入待核对。保持原帧率按 ≤30fps 档预扣。
  • 画布:视频节点悬浮工具条「画质增强」,弹窗选模型、目标分辨率(低于源短边置灰)、帧率(仅 user_select)、码率档/精确码率,显示报价;提交后在右侧生成 loading 视频节点并连线;失败重试按节点 videoEnhance 参数重建请求。processing 模型不出现在普通视频生成下拉。
  • 已验证:go test ./...、tsc --noEmit、eslint、bun test(帧率档、分辨率换算、源视频校验、价格档表单)。
  • 后台安装插件、配置 MediaKit API Key 与渠道模型(分别验证 keep_source / user_select),配置 vquality × fpsBand 价格档。
  • 真实视频跑通增强:结果节点回填、按输出时长结算的流水备注与差额退回/补扣。
  • 超时与失败:上游失败退款、超 1 小时轮询失败的表现,源视频超限/规格不符时的前后端提示。

局域网 HTTP 访问报错 crypto.randomUUID is not a function

  • 已修复:crypto.randomUUID 只在安全上下文(HTTPS / localhost)可用,局域网 IP 走 HTTP 时页面启动即抛错。新增 createClientUUID()(web/src/lib/client-id.ts),优先用原生 randomUUID,否则用 getRandomValues 生成同格式 v4 UUID;前端所有直接调用已替换。
  • 已验证:tsc --noEmit 通过;模拟移除 randomUUID 后生成 1000 个 UUID 均唯一且符合 v4 格式。
  • 重新构建部署后,用局域网其他设备通过 http://<内网IP>:端口 登录、打开画布、编辑同步、Agent 对话与充值弹窗无报错。

画布自动整理:分层布局与防重叠

  • 已优化:layoutCanvasAuto / layoutCanvasFlow 改为按连通分量分别布局。有连线的分量做 DFS 断环、最长路径分层、重心法排序减少交叉,子节点纵向对齐父节点中心;孤立节点按文本/图片/视频/音频泳道按实际宽高逐行排布(每行最多 6 个)。各块按行装箱回原选区左上角。
  • 已修复重叠:同列节点行距 48px(留出节点上方标题高度);锁定节点、框架、选区外可见节点作为障碍,整理结果绕开它们(旧实现会把节点直接摆到这些节点上)。
  • 已验证:bun test test/canvas-layout-categories.test.ts(含扇出/汇合/环、200 节点随机图、障碍避让的无重叠断言)与 tsc --noEmit 通过。
  • 真实画布检查:大画布整理后的观感、连线交叉程度、框架附近与选区整理时是否仍有遮挡。

工作台账户 Popover 在减少动态效果下停留在屏幕外

  • 已修复:系统开启「减少动态效果」时,workspace-product.css 把产品工作台与浮层内所有元素设为 transition-duration: 1ms(transition-property 默认 all),导致 Ant Design 浮层根节点的 left/top 也参与过渡;rc-trigger 对齐时测到的仍是 -1000vw/-1000vh 预隐藏坐标,浮层被定位到屏幕外。现在对 popover / dropdown / select / tooltip / picker 等浮层根节点单独设为 transition-duration: 0s。
  • 已验证:headless Chrome 模拟 prefers-reduced-motion: reduce 复现左下角与顶部账户菜单分别落在 X≈-14400 / Y≈-8000;修复后两处均对齐到触发器旁(左下 12,396;顶部 1100,90),正常动效模式不受影响。
  • 真实浏览器(macOS/Windows 开启减少动态效果)检查账户菜单、下拉、选择器、Tooltip 均正常出现在触发器旁。

Agent 画布更新:节点不存在按可恢复参数错误返回

  • 已修复:canvas_apply_ops 的 update_node 指向画布中不存在的节点 ID 时,不再判整轮 Agent 失败,改为 ops[i].id / not_found 字段错误回给模型,提示重新读取画布并使用真实节点 ID;与缺少 patch、连线端点不存在的处理一致。
  • 已验证:后端 internal/app 包测试通过(含新增的字段错误断言)。
  • 真实 Agent 多步画布任务中给出错误节点 ID 时,模型能否重新读取画布并自行纠正,且不出现「Agent 执行失败」提示。

预演台交互第二轮:添加弹窗、两模式与引导式动画

  • 已实现:场景面板去掉常驻道具库和四个下拉菜单,改为「角色 / 道具 / 灯光 / 机位」按钮,打开带实时 3D 预览的添加弹窗,确认后才写入场景;预览与写入共用 previs-add-catalog.ts 的同一组构造函数。修复本地模型上传入口(原 modelInputRef 未挂载到任何 input)。
  • 已实现:一级模式收敛为「摆场 | 动画」。姿势、骨骼微调、机位与取景并入摆场,由选中对象决定检查器内容;旧引导进度版本升至 3。
  • 已实现:删除视口快捷键提示条,帮助面板与 ? 快捷键保留。
  • 已实现:右侧检查器按「动画 / 属性 / 姿态」标签组织;动画标签是三步引导(画走位 → 加动作 → 播放预览),手动关键帧收进「高级」折叠区;摄影机检查器分「画面 / 镜头 / 机位 / 运镜 / 镜头意图」。
  • 已验证:前端 2689 项测试、typecheck、lint、生产构建通过。
  • 浏览器验收:四类添加弹窗预览与加入结果一致、弹窗关闭后 WebGL 上下文释放;两模式切换后时间轴与 Auto Key 行为;新人按动画三步能否独立做出走位 + 动作。

预演台 v2:镜头输出与交互底座

  • 已实现:镜头摄影机统一输出、焦段与画幅、安全框、固定米制范围的近白远黑深度图与深度视频;深度产物回写为独立节点,不自动进入普通参考链路。
  • 已实现:独立第二屏监看、窗口复用时清理旧 canvas/监听器/刷新循环、选择与变换快捷键提示、PNG 截图、镜头录制与浏览器窗口录制。
  • 已修复 Agent:演员默认使用 character;焦段更新同步 fov;走位路径替换全部 transform 关键帧,清除路径时清空轨道,避免与旧手工帧冲突。路径语义已同步工具说明,保留原 schema 预算。
  • 已验证:前端预演台 522 项专项测试、生产构建(含类型检查)、lint 与后端 CloudAgentPrevis|ToolSchema 专项通过。浏览器输出色彩和深度正在复验,后续结果在本节更新;不将初次 E2E 的旧定位失败记录为全部通过。
  • 真实浏览器复验 beauty/clay 色彩、深度数值和蒙皮姿态、CAM 安全框与导出边界;截图、镜头录制、录制取消及窗口共享结束。
  • 多屏设备与浏览器权限实测:重复打开、关闭监看、自动定位外接屏、F 全屏;Safari 编码兼容性。
  • 明暗主题、窄屏、输入框中的快捷键隔离;真实画布上传回写、复制节点的深度引用及分享行为。
  • 已实现(P0):标准人偶由代码生成关节式骨架,取代胶囊小人与 CDN Xbot;模板、工作台与 Agent 新建的演员外观一致,断网可渲染。21 个姿势在人偶上重新标定并自动贴地。
  • 已实现(P0):18 个程序化动作与分层求值(姿势 → 自动步态 → 动作片段 → 骨骼覆盖 → 骨骼关键帧);走位时按位移速度自动走/跑,步频与路程同步;上半身动作可叠加走路。检查器新增「动作库」,可调开始、时长、幅度并提示同层冲突。截图、录制与第二屏共用同一求值。
  • 已实现 Agent:previs_apply_patch 新增 actor_motion_add / actor_motion_remove,读取投影返回 motions;schema 仍在预算内。
  • 已验证:前端全量 2685 项测试(含 16 项人偶与动作单测)、lint、生产构建,后端 internal/app 通过。
  • 浏览器目测 21 个姿势无穿模、反关节;走路无滑步;动作淡入淡出自然;骨骼点选与旋转 gizmo 在人偶上可用。
  • 已修复:演员掉到地下(Y=-14.54)。根因是对象 gizmo 的 Y 轴不受限制;现在演员 gizmo 隐藏 Y 轴且旋转只留偏航,所有 commit、打开旧场景、Agent previs_apply_patch 都过落地规则(演员 Y=0,几何体底面不低于地面,关键帧与走位路径同步修正);非演员对象检查器新增「贴地」。
  • 已实现:标准人偶改为本地 CC0 光滑蒙皮模型 web/public/previs/mannequin.glb(477KB,已去除动画/UV),19 根规范骨骼重定向到 UAL 53 根骨骼,T-pose 手臂校正为下垂;姿势、动作库、骨骼覆盖与关键帧沿用。模型加载失败时显示柱体占位。
  • 已实现 UI:道具库按比例等轴测缩略图卡片、整体与分类可折叠,道具底面贴地放置;检查器分组(变换/体型/外观/姿态/动作),位置·旋转·比例带 X/Y/Z 标记与单位(旋转改为度),演员 Y 只读,色板精简为 8 色;删除工作台中重复的体型/姿势微调块。快捷键提示条移到工具条上方,右侧面板底部留出 Agent 入口空间,顶栏截图/录屏/第二屏加文字(中等宽度收为图标),默认视角改为平视演员、网格加深。
  • 已验证:前端全量 2694 项测试、typecheck、lint、生产构建;后端 CloudAgentPrevis|ToolSchema 含新增落地用例通过。
  • 浏览器目测新人偶:21 个姿势与 18 个动作在蒙皮上无反关节、明显穿模;关节点选与旋转 gizmo 拖动时蒙皮实时跟随;儿童/老人/怪物体型与配件位置。
  • 打开截图中的旧场景,确认提示「已将 … 放回地面」并可正常选中、拖动;1280/1440/1920 宽度下底部提示条、工具条、Agent 入口与右侧输出区无遮挡。
  • 后续阶段未完成:P0 程序化布景、环境照明、其余 Agent v2 操作;P1 排戏/镜头区间/回执/合并;P2 离线编码/控制输入/独立存储/性能治理。

预演台第三轮:机位移动、走位与 Agent 复杂排戏

  • 已修复:视口或列表点选机位后留在可编辑视图,机位 gizmo 可拖动;添加弹窗标题栏黑条,颜色支持取色器与十六进制输入。
  • 已修复:画走位从播放头开始、按步行速度求时长,画完自动切到动画并播放预览;两种模式都显示走位线。路线上的路径点可直接拖动修改(只改位置,时间不变,朝向随路线重算),演员与摄影机路径均可编辑。
  • 浏览器验证:拖动路径点时视角不跟着转、松手后一次撤销即可还原、拖完播放演员朝向正确。
  • 已实现:新增「扇巴掌」「牵手」「被打」三个动作,前后端动作枚举一致并有测试守护。
  • 已验证:后端场景测试只用 Agent patch 从空场景搭出客厅(地板、三面墙、沙发、电视、餐桌、凳子)与 2 女 1 男 1 儿童,女1 牵儿童走到男1 身边、3s 扇巴掌、男1 被打;全部对象贴地、5 秒内完成。
  • 真实 Agent 对话复测同一剧本(依赖模型规划,未在本轮跑通);浏览器目测巴掌接触点与牵手手位。

Agent 状态动画 ZIP 包

  • 已实现:默认改用 web/public/doll/avatar.json 的内置动画包;管理端可上传含 avatar.json 和多个 MP4 的 ZIP,并将待命、运行中、等待审批、已完成、异常映射到任意 clip。入口按 manifest 比例显示,视频去绿幕并保持拖动,终态动画只播放一次。
  • 已实现:后端校验 ZIP/manifest/MP4、资源归属和状态 clip 引用;未启用包不能公开读取,启用包支持 MP4 Range,外观引用会阻止资源删除。外观 JSON 合同版本升至 11,无数据库迁移。
  • 管理页导入真实 ZIP,分别预览 8 种 Agent 运行状态映射、保存后验证公开入口切换;检查切换 clip 尺寸、去绿幕、拖动边界、终态末帧停留与循环状态衔接。
  • 用已启用包和未启用包分别检查公开访问、管理员预览、跨管理员归属拒绝、资源删除保护及解除引用后的清理。

已完成生成任务重进画布后的结果恢复

  • 修复:编辑器重进时显示 loading,而持久化节点保留同一任务的旧 error,完成结果合并可能保留旧状态。仅对成功任务、相同任务绑定且匹配生成副作用标记的节点,以最新持久化任务观察状态校准比较基线;不替换提示词、媒体、几何或任务身份基线。
  • 已验证:本分支基于 v1.6.8.10 主分支,33 项专项测试、171 条断言通过,前端类型检查及生产构建通过。覆盖图片/视频恢复、重新读取持久化结果、并发新增节点与移动改名、任务替换、真实字段冲突和删除保护。媒体使用测试数据,未调用生成供应商。
  • 已有用户反馈:同一修复此前部署后,多条历史生成结果已恢复加载;此反馈对应此前部署版本,不替代当前上游分支的浏览器验收。
  • 当前上游分支的真实浏览器“生成中离开,再进入画布”端到端复验。未提供修复前后截图,不将自动化测试冒充真实浏览器截图。

画布外观预设与自动保存

  • 已实现:浅色、深色、自定义三个入口,分色调预设、独立记忆、预设参数快照与同画布自动保存;浅深切换保持设置区域展开状态,新画布默认线网格。
  • 在真实页面验收旧画布重开、浅深往返、预设及微调、账号隔离与保存失败;补充常用分辨率、系统缩放及键盘操作下的视觉与滚动验证。

Agent 技能主动采用与检索修复

  • 已实现:系统策略与操作合同补充技能触发规则——本轮已启用技能时先拿任务对照名称与描述,匹配适用范围或触发词即先 skill_search 检索再 skill_read_file 读取(执行顺序新增第 1 步、「能力使用」节与工具描述同步);skill_search 分词对含汉字且超过 2 字的关键词展开重叠 2-gram,自然语句整句关键词也能命中名称/描述/卡名;零命中不再返回空列表,降级为已启用技能索引并引导直接读取对应技能。策略版本 cloud-agent-system 16、cloud-agent-operations 8。
  • 已验证:技能检索、策略及动画包相关专项测试通过;工具 schema 实测 29 个工具、36,883 字节,预算显式上调到 37,500。-run "CloudAgent" 全量中 6 项既有 e2e 失败经基线对照(stash 本地改动后同样失败)确认与本次改动无关。
  • 真实运行验收:挂载技能后用自然语言任务观察 Agent 是否主动 skill_search / skill_read_file;用技能用量统计(skills_load → skill_read_file 转化)对比改动效果。

百炼 MiniMax H3 视频插件

  • 已实现:独立 dashscope-minimax-video 声明式插件、接口文档和 .yan-plugin 分发包;使用业务空间 MAAS 地址、Bearer 和异步任务接口,不复用原生 MiniMax 或 Wan 协议。
  • 已实现:首帧、仅尾帧、首尾帧和多模态参考角色映射,首尾帧与参考素材互斥;4–15 秒、768P/2K、7000 字符提示词、媒体数量和 HTTP/HTTPS 地址校验;模型能力由渠道配置,不修改宿主默认能力。
  • 已验证:go test ./internal/protocol -count=1 全包通过,包含百炼协议专项、相邻 MiniMax/Wan3 回归及官方包完整合同检查,覆盖请求、参数、角色、状态、上游错误、临时视频与 usage。
  • 宿主 HTTP 集成专项及 race 检查通过:覆盖 Bearer、根路径、创建/轮询/跨源下载、原任务恢复与成功无结果拒绝;未运行全量 app 套件。
  • 真实百炼文生视频:通过分发插件构建请求,仅创建一次 4 秒、768P、16:9 任务,轮询成功并下载 819876 字节 MP4;上游 usage 返回 4 个计费秒、1344×768、1 个视频;下载文件的容器尺寸为 1344×768、总时长 4.459 秒。该验收不包含应用任务落库和账单结算。
  • 用户验收:仅首帧、仅尾帧、首尾帧、多模态参考、2K、水印、原任务恢复及应用内结果持久化与计价;媒体尺寸、编码、帧率、参考视频/音频总时长和上游错误边界仍需真实供应商验证。
  • 已知限制:设置页的用户自定义视频渠道「模型测试」仍使用旧前端视频请求入口,尚未接入声明式协议宿主;该入口不能作为本插件的连通性验收依据。

画布多窗口光标与实时通知

  • 已实现:同一账号同一画布的独立窗口会话、顶部居中的可展开设备入口、远端世界坐标光标与拖拽轮廓、退出清理、断线重连与状态补偿;服务端统一分配设备编号,各端名称和颜色一致,仅本机行显示“此窗口”。单窗口隐藏全部设备标记并停止采集,本机鼠标不附加标签。最终节点位置仍走既有 operations,不持久化 Presence。
  • 已实现:事务提交后通知,回滚不通知;WebSocket 正常且无活动 Agent 时每 30 秒校验状态,断线或活动 Agent 期间恢复原轮询,租约维护独立运行;开发 Vite 和生产 Nginx 支持 Upgrade。Redis 为跨实例可选分发层。
  • 已验证:新增 WebSocket HTTP 集成检查登录/画布归属、光标广播、不落库、租约变更通知和退出清理;事务测试检查外层提交、嵌套回滚和合并通知。前端同步专项 97 项通过,内含真实 React 浮层用例:设备命名、共用连接、平移缩放、pointer/拖拽世界坐标、blur 清理、单窗口停止采集,以及连续 100 次远端坐标/viewport 更新不增加 React commit 或布局读取。前端类型检查及生产构建通过。
  • 真实浏览器:三窗口设备命名、光标投影、拖拽轮廓与松手后的最终位置收敛;窗口退出后清理,剩余单窗口入口和光标全部隐藏。设备面板支持 Esc、外部点击关闭,明暗主题样式已检查。主动关闭 WebSocket 后自动重连;连接空闲 32.5 秒仅观察到一次状态校验。
  • 编号与布局回归:真实双窗口设备1/设备2的编号和颜色一致,“此窗口”只出现在各自对应行;顶部入口水平居中偏差为 0。后端实时接口、编号复用及 race 专项通过,前端新增双视角编号一致性用例,生产构建通过。Redis 跨实例编号与租期用例已补充,本机无 redis-server 而跳过。
  • 已测性能:单窗口同样 90 步平移,协作层布局读取从 92 次降至 0,DOM 变更从 105 次降至 0;201 个文本节点的真实临时画布在双窗口下平移,采样 191 个帧间隔,P95 约 17.6ms,无超过 50ms 的间隔。该结果仅覆盖本机文本节点场景,不作为重媒体画布或生产容量承诺。
  • 用户复验操作手感与新设备界面;真实断网/代理中断、账号切换、后台恢复、重媒体画布性能。
  • Redis 跨实例和异常进程退出:已提供真实 Redis 集成用例,本机缺少 redis-server,当前跳过;未声称跨实例运行验收通过。
  • 部署升级与回退:后端与前端一起更新,反向代理允许该路径 Upgrade;回退应用版本及代理配置即可,不涉及数据库迁移。自定义代理不支持 WS 时应保持 HTTP 保存和轮询可用。

Agent 媒体配置继承与参数准入

  • 已实现:常规生成只需模式、完整提示词和真实参考数组,执行器负责稳定节点 ID、标题、草稿、连线和模型默认值;续用草稿保留原名及 generationSpec 配置。模型只可继承草稿或本轮最新同条件目录中的唯一候选,查询失败、条件变化、多候选或未查询的临时参考均不代选。
  • 已实现:用户在对话中要求改规格时,Agent 单独列出变更字段并逐字引用本轮真实用户要求,其他已有配置继续继承。服务端检查引用来源、字段、值及模式,不把引用视为语义证明或收费授权;真实配置和依据进入原有审批。用户直接编辑节点或审批继续生效,直接审批编辑清除旧 Agent 提案依据。
  • 已实现:单图默认使用素材真实尺寸匹配模型已声明比例,已有目标草稿规格优先;不使用画布显示尺寸、多图猜测或近似比例。仅规范化 LLM 多填的未声明图片质量/分辨率提示;用户明确提案、草稿已有配置、支持参数中的非法值和直接审批编辑不能被静默替换。
  • 已实现:先核对原始配置与准入结果,再写回实际默认值;统一图片 auto/any 的未指定语义。预算检查覆盖继承、模型默认及审批编辑后的实际时长;原有权限、资源归属、报价、独立审批、最多 3 次内部参数纠正及收费提交幂等继续生效,无新增报错卡片、菜单或重试按钮。
  • 已验证:最小生成经过真实 service、草稿、独立审批和任务提交,审批重放只有一个任务;覆盖明确修改比例且保留其他配置、伪造/旧消息/运行状态引用、候选歧义、原图比例、无效用户设置及默认时长预算。扩大回归 2207 项通过、7 项跳过,唯一失败为工具说明超出体积预算 19 字节;压缩后最终 Cloud Agent 与提示词专项 604 项通过(含子用例),PostgreSQL 首尾帧用例因未配置数据库跳过,工具说明 35907 字节,未提高 36000 字节预算。不把此前有失败的运行写成全量 app 通过。
  • 真实模型验收:使用受影响模型完成角色三视图、单图编辑、对话改画幅和视频生成,核对草稿/参考比例、审批与任务实际规格一致;本轮未调用付费模型或修改生产数据。
  • 自然语言理解质量仍需真实弱模型验收;来源校验不能证明模型正确理解了否定、引用和多对象要求,收费执行继续以实际配置和独立审批为边界。

画布同步保留当前编辑并保存原画布

  • 删除同步恢复卡片及重连、采用云端、导出草稿、另存新画布入口,删除自动用云端版本替换本地编辑的分支。同步争抢静默进行,不弹报错、不冻结输入、不新建替代画布;状态只有待同步与已确认。
  • 冲突后从最新服务端基线重新提交本地实际修改;同输入框文字按基线增删保留两端输入,同位置按已提交在前、本地新增在后合并。富文本保留结构及格式,中文组词结束后合入云端更新,光标随文字偏移;其他标量保留当前编辑。已删除对象不复活,云端新任务绑定与较新结果不被旧任务观察值覆盖。
  • 只有 operations 的已识别明确拒绝允许重建请求;网络响应未知和租约申请失败保留原 mutationId/body。新请求先携带最新基线落盘,再更新编辑器和缓存,避免刷新时把合入的云端字段误认成本地编辑;落盘失败保留 journal,不显示保存成功。
  • 保存自动重新申请过期、失败或刷新前的租约,不要求继续输入;每批确认后立即交出租约,持续输入期间也允许另一端保存。未确认 journal 先重放 receipt 再合并,防止把本机已提交文字重复合入;编辑器合并同步结果并保留撤销历史。
  • 媒体绑定拒绝后查询实际素材记录,重新配对并按素材先于画布的顺序提交;Agent 发送与审批必须先确认当前画布保存,不再用旧云端快照继续。
  • 已验证:前端全量 2532 项测试、类型检查、lint 和生产构建通过。两个独立同步客户端共用服务端状态,覆盖两秒轮询前同框输入、租约争抢后的自动接手、持续输入、响应丢失、缓存写入失败后的再次冲突,以及新 journal 已落盘但缓存未投影就刷新;最终文字收敛、原请求身份不变、画布 ID 不变且无额外往返写入。真实提示词组件的 DOM 用例覆盖中文组词期间的远端更新、光标偏移及无手动重试交互。构建仍有分包体积与混合导入提示。
  • 真实受影响账号及双浏览器验收:同字段连续编辑、断网恢复、原 journal 刷新重放、恢复期间拖动与切换账号;保存后刷新仍是同一画布且保留本地改动。
  • 本轮未对生产用户数据执行修复,未调用真实模型;生产服务连通性、浏览器输入法及 PostgreSQL 仍需独立验收。

图片生成完成后的本地并发冲突误报

  • 已定位:生成节点内存中的资源、素材及任务字段可为 undefined,JSON 持久化会省略这些字段。任务状态与自动保存交错时,三方合并误把字段缺失视为并发删除,生成成功后报“画布生成副作用与并发修改冲突”。
  • 已修复:本地合并将 undefined 与缺失属性按相同语义处理。生成结果持久化直接提交三方合并的最终文档:同字段竞争采用最新已持久值,无关的生成字段继续合入,不再抛出“画布生成副作用与并发修改冲突”。对象删除仍拒绝回写,避免复活已删除节点。
  • 本轮验证:前端类型检查及四个生成专项共 24 项通过;真实持久化测试新增标题同字段竞争,验证最新用户标题、移动位置和生成资源同时保留。未进行真实模型生成及生产浏览器验收。
  • 已验证:修复前新增用例中三项复现误报,修复后四个直接相关专项共 29 项通过,前端类型检查通过;未执行真实模型生成或浏览器验收。
  • 用户验收:升级前端后单张、批量及局部重绘生成成功可回写并在刷新后保留;已有失败节点使用“重新加载资源”恢复原任务结果,核对改名、移动及手动尺寸不丢失。

同账号多端同步贡献分支

本分支基于官方 v1.6.8.6,仅提取同账号多端同步、输入租约、Agent 单画布排他及原任务重连,保留官方保存队列隔离和同任务回写校验。不包含站点定制、模型目录、灵感广场、R2 或通用日志聚合改动。

  • 已验证:前端全量 2456 项通过、类型检查与 lint 通过;后端 canvas/repository/database/app/handler 五包通过;SQLite 56 升 57、原迁移账本保持、执行标记按归属回填与索引建立通过。
  • 本独立分支仍需双浏览器实际输入法、同时输入与断网恢复、拖动视口及任务终态与未保存编辑交错的人工验收;不以原定制版验收代替。
  • PostgreSQL 专项需要独立测试数据库,本轮相关用例跳过。前端预演台 Chrome E2E、完整生产构建与全量后端 CI 尚未在本分支完成。
  • 分镜逐行对白等输入尚未全部接入租约。Agent admission 拒绝前的较重校验、外层访问日志轮转、轮询改推送及生产容量验证不在本次范围。

分支推送不代表生产发布或官方合并;升级需先备份并执行 Schema 57 迁移。

图片 AI 工具结果素材绑定(Issue #788)

  • 已实现:局部重绘、标注编辑和共用图片编辑复用任务资源及素材;图层加工、合成、本地提取与恢复先登记素材再发布结果,保存失败不回退到未绑定结果或隐式重生成。合同见画布 operations 同步协议。
  • 已补充:同一任务和节点的素材查找也核对资源,阻止旧素材与新资源错配;批量根在存储锁内从最新子图派生。
  • 首轮验证:七个相关专项共 53 项通过,包含绑定、并发持久化、等待与取消用例;交接中缺少素材绑定却要求交付完成的 fixture 已按新合同修正。前端类型检查通过。
  • Review 修正:情绪编辑恢复中的合成文件登记自身素材,仅资源相同时采用原任务 Asset;加工上传未保存到服务端时保持交付失败。移除素材准备 helper 的重复生命周期注册,保留入口取消检查及素材持久化等待;文档并入既有同步协议。
  • 修正后验证:五个直接相关的现有专项共 37 项通过(205 条断言),前端类型检查通过;本轮未新增或修改测试文件。
  • 情绪编辑恢复验收:原任务结果 A 与合成文件 B 分别绑定自身素材;保存、重新读取、取消和并发恢复不串用资源或隐式重发模型。既有专项不覆盖浏览器像素合成到服务端素材登记的完整链路。
  • 当前分支浏览器验收:单张及批量局部重绘、标注、去背景;确认原样结果不再产生第二次资源上传,节点与任务资源及素材一致,画布保存得到 receipt,重载保留结果。
  • 图层验收:专用拆层、逐层提取、本地提取、重合成及任务中心恢复;加工文件绑定各自素材,原始文件复用任务素材;删除、移动、改名、手动尺寸、可见性及排序不被晚到结果覆盖。
  • 故障验收:素材登记、文件上传、本地画布写入及云端确认失败;刷新、取消、切换账号/项目后旧异步结果不发布,已成功结果可恢复且不重复付费生成。
  • 另一台机器的历史验收不作为本分支浏览器验证证据;本次未启动开发服务、调用真实模型、部署或修复历史业务数据。

去除背景预设参数(Issue #804)

  • 已实现:Issue #804 的去背景弹窗在确认提交时显式传入 transparentBackground: "true",复用已有配置合并、节点 metadata、任务编码及重试链路。普通图片编辑与文字编辑不追加该覆盖值,不修改原图和全局偏好。
  • 已验证:bun run typecheck 通过;bun test test/image-parameters.test.tsx 共 17 项通过、0 失败、82 条断言;本次未新增或修改测试文件。既有专项覆盖参数编码,不直接覆盖去背景弹窗点击。
  • 当前分支浏览器验收:用户确认验证通过。该结论来自用户验收,非 Agent 独立复测;未提供逐项记录,不据此扩大为所有模型切换、重试及普通编辑场景均已实测。
  • 模型验收:使用支持透明输出的模型和格式,核对出站 background=transparent 或等价字段,并独立检查结果 alpha、透明像素和主体保留;本次浏览器通过的反馈未明确确认这些检查。

视频工作台的素材模式与计价

  • 已修复:视频工作台按素材角色选择文生视频、首尾帧图生视频、普通参考或音频生视频;系统渠道预校验和最终任务使用同一操作,并在预校验前统一参考素材的 JSON 形态,避免漏算素材和选错价格档。
  • 已修复:执行输入同步模式及首尾帧标识;浏览器自定义渠道复用同一模式规则。保留模型能力、资源归属、额度与计费校验,不自动改变普通参考图的用途。
  • 已验证:后端工作台套件、系统渠道选择与 MiniMax 视频协议专项通过;前端 30 项相关回归、类型检查及生产构建通过。测试只创建隔离数据库中的任务和账单,未提交真实付费生成。
  • 用户验收:在真实系统渠道及浏览器自定义渠道分别检查无素材、首尾帧、普通参考图、视频和音频组合;核对生成结果与账单。不支持的模式应在提交前拒绝,不产生扣费;自动化回归不代替真实供应商生成验收。

旧画布冲突阻塞全部前台提交

  • 已定位:无参前置保存会重放所有画布 journal;保存进行中时另一个调用直接共享旧 Promise 的失败结果,使新画布也显示旧节点冲突。
  • 已处理:按画布独立保存和等待相关读取;仅素材保存不触碰画布,后台扫描的错误不作为其他前台画布的结果。Agent 前置保存失败与已经开始 POST 的未知结果分开展示。
  • 已处理:明确字段冲突回滚后,仅从原 journal 快照为旧同任务时间请求补任务身份;新请求先持久化后发送,原业务 patch/基线不变,未知结果保留同 ID 重放。补任务换绑/时间重置及同目标完成结果的收敛校验。
  • 已验证:真实同步 service 集成回归覆盖旧 A 冲突在途时 revision 0、无远端的新 B 创建成功;前端全量 2429 项通过,类型/lint/生产构建通过,后端全量及 canvas 包 race 测试通过。本地缺少服务依赖的集成用例未替代线上 Actions 验证,未清理浏览器数据或提交付费生成。
  • 用户验收:保留发生过冲突的浏览器数据,升级后打开旧画布及新建另一画布,确认新 Agent 消息不再被旧画布错误阻塞;检查生成结果、未同步提示词和节点布局未丢失。
  • 待修复:登录初始化无 journal 时将本地项目直接作为 acknowledged;revision 0 项目读取 404 后也没有安排创建同步。需要单独修复并验证跨设备补传。
  • 待设计:服务器已将 taskId 绑定为新任务、客户端再提交同一 ID 时,尚缺服务器权威验证该 task 属于该用户/画布/节点的幂等绑定确认;不能仅按 current == desired 跳过 taskId CAS。

v1.6.8.5 发布前质量检查

v1.6.8.5 发布前质量检查

  • 已修复:画布操作回归测试未按 Prettier 格式化导致 Web checks 在格式步骤失败;仅调整测试布局,不改产品逻辑,不放宽检查规则。
  • 已验证:以失败提交父版本和 v1.6.8.4 为基线的格式检查、类型检查、lint 与前端全量测试通过(2379 项、0 失败)。
  • 用户验收:多终端同时观察同一生成任务、分镜关联资产的选择/移除及真实模型引用;自动化测试和发布检查不代替真实生产验收。

短剧场景与道具参考图片

  • 已实现:提取后的场景、道具保留设定与提示词,确认后显示「待生成图片」,支持项目画风生图和绑定已有图片;提取/确认不自动收费生图。
  • 已检查:图片绑定按同一资产创建新版本;校验项目、资源、版本归属及预期版本。任务终态和绑定共同提交,取消/失去租约不能写入;晚到图片保留原结果且不覆盖新版。
  • 已检查:旧镜头/画布沿用历史图片,历史引用以服务端版本表现为准;个人素材刷新保留本地标签编辑,画布插入使用最新服务器图片。
  • 前端全量测试 2370 项、54 项专项回归、类型/生产构建、lint 与变更文件格式检查通过;后端资产确认、图片版本、权限、任务成功/取消/租约与历史画布专项(含 race)通过,repository、handler、canvas 套件通过。
  • 较大范围 app 套件仍有既有 TestClearAdminRuntimeCacheUsesRedisWhitelist 的临时 Redis 启动失败;对应测试和实现未改动,不将该套件报告为全部通过。
  • 用户验收:真实章节提取场景、道具并确认,检查描述/提示词与分类;分别生成、绑定、重新换图、下载并用于分镜。
  • 用户验收:生成中离页、刷新、取消及双窗口换图;检查原任务、当前资产、历史镜头和旧画布保存一致,费用核对无重复请求。
  • 浏览器验收:明暗主题、窄屏、长名称、空图片状态、图片选择与生成失败提示。本次使用专项回归、组件服务端渲染和前端构建验证,未启动新开发服务器或执行付费图片生成。

画布分镜关联资产选择

  • 已修复关联资产列的竖版视频缩略图溢出:固定缩略图容器和缓存图片包装层,局部覆盖 reset 对图片高度与按钮裁切的影响;预览与管理按钮统一为 32px。真实画布明暗主题已检查图片完全位于按钮内且不遮挡下一行,点击预览可用;待用户确认样式。
  • 已修复项目上传素材触发「素材 #0 合同无效:素材字段 id 必须是字符串」:素材读取统一组装数据库身份与媒体合同,新导入即保存完整记录,已有导入素材无需重新上传。详情、批量、列表及快照回归与专项 race、Go vet 通过;真实报错画布恢复已同步,实际接口返回通过前端严格解析。全量后端仅 TestClearAdminRuntimeCacheUsesRedisWhitelist、TestRuntimeCoordinatorRedisLeasePreservesLongestTTL 因临时 Redis 未启动失败,未将全量报告为通过。
  • 已实现:画布分镜行与展开编辑窗口的「关联资产」提供选择/管理入口,支持搜索、多选、用途设置、移除和清空;可从项目资产库引入角色、图片、视频、音频,并复用已存在的资产节点。
  • 保存会同步更新镜头资产绑定、角色引用和系统生成引用;取消不更改镜头关联,已引入画布的资产仍保留。共享参考、其他镜头和已生成媒体保持独立。
  • 项目资产引入使用项目当前资源,避免本地缓存覆盖项目已更新的媒体。
  • 上游全量 2369 项、集成版本 2393 项,类型及生产构建、lint、变更文件格式检查通过;真实本地画布验证项目视频多选引入、重复复用、搜索、保存、刷新恢复、展开编辑、移除/恢复、取消与明暗主题。已有 AntD 弃用提示和构建大 chunk 警告未在本次处理。
  • 用户验收:在实际剧本中分别选择角色、场景、道具和参考媒体,检查镜头关联、刷新恢复、明暗主题、窄屏和展开编辑窗口。
  • 上游生成验收:用支持相应参考媒体的模型生成图片和视频,确认选择/移除后的实际请求与结果符合预期;本次不自动提交付费生成。

剪辑工作台样式、播放定位与视频胶片条

  • 已修复:剪辑宿主及八个插件面板同步使用现有 previs-* 主题变量,恢复素材详情浮层、时间线轨道、片段选中态、工具栏和滑杆的表面与颜色;复用既有 .editor-workbench 明暗主题定义。
  • 新增回归检查:扫描剪辑页面及插件的颜色变量引用,确保应用主题存在对应定义,防止重命名后消费方遗漏。
  • 已修复:显式定位与播放时间回写分开,播放头随播放推进;点击片段会定位点击时间并切换预览,多轨重叠时优先显示被选中的可见视频或图片。轻微指针抖动不会提交移动或重置播放时间。
  • 已实现:时间线显示素材名、时长及连续视频帧缩略图,裁剪后按源起点取帧,放大后加密采样;仅解码可见区,最多两个独立解码器及有界内存缓存,取消或切换账号后停止旧任务。重复加入同一素材生成独立片段 ID,并保留原片时长约束裁剪。
  • 已验证:剪辑、时间线、取帧和 CSS 专项测试 85 项、前端生产构建(含类型检查)与 lint 通过。真实剪辑路由使用两段真实视频和现有后端,已检查明暗主题素材详情、加入轨道、点击切换、播放头前进、裁剪源时间偏移、撤销和缩放取帧;未验证实际上传、付费生成或服务端导出。
  • 用户验收:明暗主题下展开长标题素材并加入时间线,检查浮层、轨道、播放定位、连续帧与缩放滚动;字幕/导出面板和全屏切换仍需手工确认。

PR 合并后的质量检查修复

  • 已修复:服务商目录向导及相邻测试的四处格式问题;保留既有 UI 和业务行为,不放宽 Actions 检查规则。
  • 已验证:冻结依赖安装、以前次发布为基线的格式检查、Typecheck、UI lint、前端全量测试(2350 项)与生产构建通过。
  • 已处理:保留服务商目录的 v55 迁移,将 SQL 性能优化迁移顺延为 v56;补充版本递增、旧时间戳回填及目录迁移记录不变的回归测试。
  • 已修复:手动驱动 Agent 媒体清理的测试先关闭异步媒体等待器,避免其与故意损坏执行状态的测试步骤争抢版本号;不修改产品执行行为。
  • 用户验收:合并后的 Agent 媒体审批尺寸复核、错误信息脱敏与 SQL 查询性能;专项测试不代替真实模型调用或生产升级验收。

豆包音频内置技能分类修复

  • 豆包音频提示词改归现有“创意设计”分类,修复 audio 非法分类导致启动时加载内置技能失败。
  • 已通过内置技能加载、预设目录及技能接口回归测试;待确认正常启动后技能广场可见且分类正确。

服务商目录与一键接入

  • 部署 ai.yan.tv 静态目录(scripts/provider-catalog/)后,后台「系统渠道 → 新增渠道」能看到目录卡片、标签筛选、推广期。
  • 推广期结束的服务商不再出现在目录,已接入渠道继续可用且无提示。
  • 填 Key 验证成功后进入定价页,上游缺失的模型被标灰;跳过验证创建的渠道默认停用。
  • 一键接入后渠道、模型、规格档成本与售价正确(售价 = 成本 × (1 + 加价率)),渠道详情显示来源。
  • 统一调价弹窗改为加价率口径,模型列表显示“加价”。
  • 目录不可用、离线缓存、明暗主题、窄屏下的布局。

SQL 慢查询性能优化

  • 已实现:修复 SQLite 下 whereTimeRange 的 unixepoch(created_at) 包裹列导致索引失效;ApiCallLog 与 Task 新增 CreatedAtEpoch 列(BeforeCreate 从 CreatedAt 派生 Unix epoch)及 idx_*_created_epoch 索引,时间范围查询改走 epoch 裸列,migration v56 回填既有行。新增 api_call_logs 的 (request_kind, status, created_at) 和 credit_ledger_entries 的 (user_id, type) 复合索引。
  • 已实现:钱包 CreditAccount 改为先读后写,消除读路径上的写操作;creditPolicy 加 5 分钟 TTL 缓存,更新策略时失效。资源删除校验对 tasks/task_logs 大 JSON 加 LIKE 过滤(≤100 个资源 ID 时),避免全量拉取。模型目录可用性从 7 天趋势数据导出最近结果,消除第二次全表扫描并加 30 秒 TTL 缓存。
  • 后端 go test ./internal/database/ ./internal/model/ ./internal/repository/ ./internal/app/ 通过(internal/app 的 4 个 TempDir 清理失败为 Windows 预存问题,与本改动无关)。
  • 启动 SQLite 后端,访问 GET /api/model-catalog(原 11.8s)和 GET /api/wallet(原 2.5s),确认 sql slow 日志消失或显著减少。
  • 验证 migration v56 在空库和有数据的库上均成功执行;PostgreSQL 部署行为不变。

画布豆包音频节点参数与提示词说明

  • 已实现:音频节点参数面板可输入或清空豆包音色 ID;增加折叠的提示词写法、参考音频编号与正常语速说明,不新增当前协议未映射的语言、方言、声音指令控件。
  • 已修正:空语速按 1x 显示;前端节点配置、生成合同编辑与提交保留明确的空音色,不再重新继承全局音色。仅缺失字段时继承全局值。
  • 已纠正:本次新增豆包提示词技能限定为当前实现的写法建议,删除未经核实的模型、音色数量及独立声音指令支持声明;撤回本次先前未经完整验证的 Agent 后端参数改动。
  • 已验证:音频专项测试 8 项通过(含真实面板服务端渲染、空语速、清空音色的规格往返);前端类型检查与 git diff --check 通过。未启动开发服务,未做浏览器验收。
  • 真实画布验收:明暗主题打开音频节点参数,输入音色、清空、关闭重开并保存刷新,确认不回填全局音色;格式、语速与提示词入口正常。
  • 真实渠道验收:相同台词与音色在 1x 下生成短样,对照提示词有无“缓慢/长停顿”;检查实际任务参数、播放器倍速及音频采样率。未调用供应商,不能将本次改动宣称为听感变慢问题的根因修复。

Agent 图片生成参数与运行时校验回执

  • 已实现:模型目录给出生成工具字段模板,图片分辨率字段与已有执行合同对齐;SDK 参数拒绝回填工具失败事件和调用游标。
  • 已检查:Node 语法、Git 空白差异;本次未新增或运行测试套件。
  • 在 v1.6.8.3 基线上完成 ARM64 后端构建和配套 Agent 镜像运行验证,独立空数据预览及实际部署 schema54 ready。
  • 用户批准后,以真实四张参考、gpt-image-2、16:9 / 2K / high 完成一次图片生成,结果 2752×1536;原节点回写成功,账单实际结算与批准金额一致。
  • 已修复:审批后的精确像素与能力层比例表示不同,复核时接受匹配同一解析结果的像素值。
  • 未单独制造 SDK 非法参数验证恢复路径;未验证其他线路、比例档位或视频生成。

图片尺寸与分辨率配置顺序

  • 已修复:尺寸与分辨率开关统一更新能力配置,任意顺序启用时都会初始化缺失档位;新增档位继承已选比例(含自定义比例与已有像素预设的比例),不再固定缩减为常用六项。没有已有比例时仍使用常用比例,并遵守插件支持范围。
  • 已修复:保留已有档位的精确像素和独立比例;编辑期间临时关闭尺寸再开启可恢复精确预设。仅新增或重新启用时初始化,普通参数更新不会填回已手动清空的档位。
  • 已实现:无法自动换算的规格保留待填写比例并显示宽高提示;后端既有保存校验继续拒绝不完整像素映射。
  • 已验证:新增顺序、十种比例继承、精确像素、插件范围、自定义档位及能力投影回归测试;前端构建(含类型检查)、lint 和变更文件 Prettier 检查通过。
  • 真实管理员页面分别按两种顺序配置,保存并重新打开;确认 1K/2K/4K 的比例、精确像素、默认输出及前台显示正确。
  • 使用真实渠道分别生成 2K 的 3:2、2:3、4:5、5:4 图片;旧配置已经丢失的手工像素无法自动恢复,需按供应商规格重新填写。未调用真实供应商。

MiniMax H3 30 秒生成时长

  • 已实现:MiniMax 原生视频协议插件 minimax-hailuo-video-v2 更新为 2.0.2,生成时长参数和实际校验统一为 4–30 秒整数。前后端默认选项同步扩展,默认仍为 5 秒;前端请求可原样发送 16–30 秒。
  • 已验证:在旧 2.0.1 插件包复现 16–30 秒的「必须在 4-15 秒之间」失败,新包与源码逐字节一致;实际插件包测试覆盖全部 4–30 秒及 3/31 秒越界拒绝。协议包测试、MiniMax 后端专项与 19 项前端能力/请求测试通过。
  • 部署或导入新版插件后,在真实渠道分别生成 16、20、30 秒视频,确认上游受理、计费、任务轮询与素材保存正常;专项测试未调用真实供应商。
  • 已保存的渠道模型如仍限制到 15 秒,单独更新该模型的输出时长选项;若价格档仅覆盖 15 秒以内,补齐真实定价覆盖。保留管理员自定义参考素材、分辨率和价格设置。

画布云端同步状态收尾

  • 已修复:本地媒体地址与云端资源地址不同、规范化后没有提交操作时,仍完成本地持久化与同步状态更新,避免卡片长期显示“云端同步中”;后续保存不再重复处理同一地址差异。
  • 已修复:按提交前的本地快照判断是否采用云端结果,保留同步期间的新编辑与视口变化;重放旧 journal 时仅在内容一致后采用云端快照,未确认的新修改继续排队。
  • 已验证:同步状态、operations 生成、本地持久化、媒体同步、失败文案与编辑一致性 6 个专项测试文件共 34 项通过,其中新增 7 项同步状态回归测试;前端 bun run typecheck 通过。测试使用隔离的网络与存储依赖,执行真实同步与资源转换实现。
  • 用户验收:真实登录态上传媒体、返回画布列表并再次打开,确认同步提示正常结束;同步期间继续编辑和移动视口,刷新后确认内容保留。
  • 用户验收:断网恢复、旧 journal 重放与本地存储失败时,确认实际未保存的修改仍保留并正确提示。

图片与视频电商出品工作室

  • 已实现:/toolbox/image 与 /toolbox/video 保留紧凑工作区入口,移除顶部品牌介绍区;提供创作流程条、重置入口、快捷出品目标和工具选择弹窗。弹窗桌面五列,961px 以下四列、768px 以下两列;选择工具后空提示词自动套用首个预设,已有内容可通过预设入口追加或替换。
  • 已实现:重置后结果区保持空态,旧提交与轮询响应不会重新展示结果;历史任务保留。结果标题、任务列表和详情统一使用模型展示名;生成按钮收窄。模型选择器禁用位移、图标缩放、箭头过渡及弹层进出场动画,键盘聚焦仅滚动菜单。
  • 已实现:服务启动时在事务内补齐 118 个内置工具(69 图片、49 视频)及每个工具 3 个提示词预设,固定 ID、重复启动不覆盖已有管理员编辑和下线状态;不引用其他安装实例的资源 ID。
  • 已验证:cd web && bun run typecheck、bun run lint、bun run build 通过;git diff --check 通过。
  • 用户验收:真实登录态访问 /toolbox/image 和 /toolbox/video,确认快捷目标卡使用真实工具、图片/视频切换、工具弹层、素材上传和生成提交均正常。
  • 用户验收:明暗主题、窄屏滚动、不同工具数量、工具封面缺失、生成中/成功/失败结果状态下,确认布局和色彩层级符合预期。

千问 AI 平台(QianWenAI MAAS)图像协议插件

  • 已实现:新增独立协议插件 qianwenai-maas-image,Base URL https://maas.qianwenaiapi.com,创建端点 POST /api/v1/services/aigc/multimodal-generation/generation,查询 GET /api/v1/tasks/{{taskId}}。与百炼的 dashscope-qwen-image 报文形状一致,但网关域名不同,不能互相替代。
  • 已验证:manifest 关键字段与百炼多模态模板逐字段对照一致(仅 id/name/baseUrl/endpoint/providerOptions 命名空间按预期不同);JSON 合法;插件包 qianwenai-maas-image.yan-plugin 已生成。Go 测试已补齐,真实 API 请求未发出。
  • 实现位置:plugin-packages/qianwenai-maas-image/、plugin-packages/generate-catalog.mjs、backend/internal/protocol/qianwenai_maas_image_test.go。
  • 用户验收:用千问 AI 平台真实 API Key 配置渠道,文生图与图生图各跑一次,确认返回图片能正常落盘;确认渠道 Base URL 填 https://maas.qianwenaiapi.com。
  • 未验证:真实请求未发出,模型 ID(qwen-image-3.0-pro 等)是否在平台侧全部开通需按实际账号确认。

灵感库中文提示词

  • 已实现:内置目录与首页画廊的提示词统一为中文;复用来源中文正文,补齐外文翻译;导入时校验原文摘要,缺译或旧译文阻止覆盖。
  • 用户验收:抽查图片、长视频分镜和模板参数,确认中文表达、时长、镜头要求和参考素材语义符合预期。
  • 用户验收:本地及线上刷新后,详情、复制、编辑和一键创作均使用中文,收藏与自定义修改保持正常。

创作页提交闸门只覆盖提交阶段

  • 已修复:submit() 的提交闸门原来一直持有到整条生成结束(只在 finally 释放,而 finally 要等任务出结果才执行),因此上一条还在生成时点发送会被 tryAcquire() 静默拒绝——没有提示也没有反应,表现为「按钮在转、点不动」。重试走同一条 submit 路径,一并被挡住。
  • 已实现:闸门改为令牌制(tryAcquire() 返回令牌,release(token) 只对持有者生效,避免并发提交互相解锁);任务一旦建成(bindTask)立刻放闸,与已有的 busy 释放时机对齐,因此上一条生成中也能继续提交下一条;被拒绝时改为给出提示,不再静默丢弃。
  • 说明:该闸门在 4f18367(v1.6.5)就已存在,不是本次改动引入;它只需要防住同一次创建任务被重复触发(连点、回车连击),不该跨越整个生成过程。
  • 实现位置:web/src/pages/create/creation-submit-gate.ts、web/src/pages/create/index.tsx,单测 web/test/creation-submit-gate.test.ts。
  • 验证:tsc --noEmit、ESLint、bun run build 通过;bun test 2204 通过(唯一失败项 agent-api-reliability 在纯净上游基线上同样失败,与本改动无关);闸门单测含「持有者令牌」并发用例。
  • 用户验收:真实登录态下先提交一条慢任务(视频),在它「生成中」时输入新提示词再提交一条,确认第二条能正常创建、两条并行推进、按钮在输入后恢复为「发送」;确认快速连点仍只会创建一条。
  • 未验证:busy 仍是布尔量,两条并发时按钮可能提前约 100ms 变可点(闸门仍会拦住并提示);提交阶段本身卡住时闸门会一直被占,此时只给提示。

用户登录日志

  • 已实现:管理员菜单 /admin/login-logs、筛选分页详情、后端认证事件记录、schema v53、失败脱敏和会话/日志原子提交。
  • 已验证:Go 1.25.0 go test ./... 全量通过;认证、权限、脱敏、事务回滚、并发退出、UTC/北京时间边界和旧库迁移专项通过。Bun 1.3.9 前端 build、lint 通过,设备识别和后台密度相关专项 6 项通过。OpenAPI 新路径和模型解析通过。
  • 代码审查已修正渠道模型导入按钮的过期断言,以及启动和助手浮窗测试在中文目录中的路径解码;Bun 1.3.9 完整前端测试 2245 项通过,构建与 lint 通过。HTTP/认证测试使用隔离数据库和模拟 OAuth,不代表外部服务联调已完成。
  • 提交前完整检查:Go 1.25.0 全量测试通过,独立 PostgreSQL 与 Redis 的 5 项依赖测试全部执行并通过;Node 22.19.0 Agent 运行时参与测试。macOS 跳过 1 项仅适用 Linux errno 的支付程序启动分类测试。Chrome 预演 E2E 65 项断言通过,Go 格式检查通过。
  • 已按用户要求重启本地后端,保留原运行配置与开发数据目录;健康接口 200,新日志接口对匿名请求返回 401,schema 53 和 login_logs 表已确认。以上仅确认启动、迁移和鉴权入口,真实登录态页面与外部服务联调仍待验收。
  • 筛选布局已优化并通过真实登录态页面验证:1280px 视口两行、1600px 单行、390px 无页面横向溢出;IP 筛选与重置恢复正常。筛选区使用页面私有容器查询,不影响其他后台页面。
  • 真实管理员页面:明暗主题、窄屏横向滚动、时间筛选、分页/刷新、详情和读取失败重试;浏览器返回后 URL 筛选保留。
  • 真实 SMTP/短信/Linux.do:各方式成功及失败登录、注册自动登录、主动退出事件和设备/IP 展示。
  • PostgreSQL:旧库升级、并发登录/退出和 SQLite → PostgreSQL 数据迁移;部署反向代理须核对可信代理配置及日志 IP。

个人信息

  • 已实现:“更换头像”弹窗内切换上传图片和 8 款系统头像;图片经 1:1 裁剪后回到弹窗预览,上传或系统头像都在弹窗内保存,确认后全局同步。

  • 已验证:裁剪几何(含极宽和极高图片)、像素边界、PNG 导出失败、系统头像标识校验和事务回滚、v51→v52 数据保持的专项测试;真实个人信息路由的弹窗切换、图片裁剪预览、取消不写入。

  • 已实现:账户与设置的个人信息、PNG/JPEG 头像预览和系统默认、密码修改/设置、邮箱更换及 Linux.do 重新核验;沿用现有页面样式、表单交互与反馈。继续创作入口仍定位渠道或模型配置。

  • 已验证:认证、头像、会话撤销/并发签发、验证码归属与过期、迁移的专项测试;前端验证规则与共享头像测试、TypeScript 和 Vite 构建。运行验证记录以交付结果为准。

  • 代码审查已修正资料刷新未同步全局头像,以及 Linux.do 重新验证在会话时区变化时未保存验证状态的问题;覆盖取消请求、账户切换、错误响应归属、头像保存后迟到响应,以及 UTC−12/UTC+14 会话的回归测试通过。

  • 用户验收:真实页面明暗主题和窄屏,头像全局刷新与失败保留、原密码错误、新邮箱发送及通知失败状态。

  • 外部联调:真实 SMTP 发送新邮箱验证码/旧邮箱通知,真实 Linux.do 授权回调与不同账号拒绝,实际 PostgreSQL 并发事务。本地测试使用隔离数据与模拟上游,不等同于这些外部联调已完成。

局部重绘默认模型同步

  • 已修复:局部重绘弹窗打开时,将默认显示的图片模型同步到实际请求模型;下拉框显示与提交使用同一字段,无需手动重新选择模型。
  • 已修复:局部重绘任务优先使用提交的图片模型,并将 model 与 imageModel 统一为本次选中的模型。
  • 上传图片,在全局当前模型与默认图片模型不同的情况下打开局部重绘,直接涂抹、填写修改要求并生成,确认不再出现「所选模型与任务能力不匹配」。
  • 在弹窗中切换图片模型,以及从已有生成图片打开局部重绘,确认提交模型与显示模型一致。

裁剪与调整尺寸的跨域原图读取

  • 已修复:裁剪、调整尺寸和宫格切分共用原图读取入口,优先复用缓存或 browser-process 授权的资源 Blob;无缓存时以 CORS fetch 读取字节并构造可导出的 Blob URL,操作结束释放临时 URL。
  • 已修复:资源 Blob 读取失败时直接保留错误,不再退回展示地址;HTTP 图片加载在设置 src 前启用 CORS,覆盖同源资源接口重定向到 OSS/CDN 的情况。
  • image-raster.node.test.ts 7 项专项测试通过,覆盖 CORS 设置顺序、模拟重定向的裁剪/缩放/切分导出、缓存与无缓存原图、读取失败不降级、HTTP 错误及 Blob URL 释放。测试使用模拟 Image/Canvas,不替代真实浏览器 CORS 验收。
  • 使用本地上传图片及刷新后恢复的云端图片,分别执行裁剪、三种插值方式的调整尺寸和宫格切分,确认输出尺寸、原图保留和结果保存。
  • 验证资源接口重定向及 OSS/CDN CORS 配置;允许跨域读取时应成功导出,拒绝读取或授权失效时应明确失败。尚未进行完整前端类型检查、构建或真实站点联调。

系统模型「拉取模型」弹窗搜索

  • 已实现:后台「模型与资源 → 系统模型」点「拉取模型」后的选择弹窗新增搜索框(按模型标识做大小写不敏感的子串匹配,自动聚焦、可一键清空),因为部分上游端点会返回几百个模型。
  • 已实现:搜索时「全选 / 取消选中」只作用于当前匹配的集合,按钮文案同步显示匹配数量(如「全选匹配的 12 个」);关键字之外的勾选状态保留。无关键字时行为与改动前完全一致。
  • 已实现:搜索无命中时列表区显示「没有匹配「关键字」的模型」空态;汇总行额外显示匹配数与其中已勾选数。
  • 实现位置:筛选与批量勾选规则抽到 web/src/pages/admin/components/channel-model-import-selection.ts,弹窗接线在 channel-model-manager.tsx,配套 web/test/channel-model-import-selection.test.ts。
  • 验证:bun test test/channel-model-import-selection.test.ts 9 项通过(空关键字返回全部、大小写不敏感、首尾空白、无命中返回空、全选并入去重、关键字外勾选保留、无关键字时与旧行为一致);tsc --noEmit、ESLint、bun run build 均通过。
  • 用户验收:需要管理员登录且上游能返回大量模型才能打开该弹窗,因此未做真实界面验收。请在真实后台点「拉取模型」确认:搜索框位置与自动聚焦、输入关键字后列表实时收窄、全选/取消选中只影响匹配项、清空后恢复全部、以及几百个模型时的滚动与性能。

创作参考内容的远端素材选择

  • 已修复:创作页按素材类型与当前模式能力校验远端条目,不再把本地未缓存的素材误判为不适用;确认时使用弹窗返回的素材记录,仅按需缓存实际选中的远端素材。
  • 已修复:确认时重新校验媒体类型与视频模型能力,缺失或不支持的条目明确报错;保持现有参考数量上限。
  • 新增远端素材回归测试,并与创作引用、素材库入口和画布素材选择测试一同运行,35 项通过;前端类型检查通过。
  • 在本地未缓存云端素材的浏览器中选择图片、视频和音频,确认支持的条目可选并能添加;跨页选择后确认应保留选择顺序,再次打开弹窗应保留已选状态。
  • 切换到图片创作及不同视频模型,确认不支持的媒体类型保持禁用,参考数量仍受模型上限约束;云端素材读取失败时保留弹窗并显示错误。

创作首页与灵感大厅整合

  • 已实现:首页首屏压缩为标题、创作模式、提示词区与快捷入口;无附件时参考内容入口合并到输入工具栏。下方一行展示创建入口和最近更新的 4 个画布,保留查看全部、加载失败重试和窄屏横向浏览。
  • 已实现:灵感大厅迁入创作首页,移除独立页面路由、侧栏入口与预加载;保留搜索、类型/来源/分类/收藏隐藏筛选、分页、详情、编辑、导入导出。使用灵感会关闭详情、回填提示词并返回输入区,不自动生成。
  • 已实现:来源展示开关同时作用于卡片和详情;封面失败显示占位,触摸操作常显,键盘焦点与减少动效可用。根路径及 /create 的页面壳和侧栏高亮一致。
  • 已验证:前端生产构建、最终类型检查、UI lint 与补丁格式检查通过;已有路由、游客访问与灵感目录专项测试 13 项通过。真实 Chrome 游客首页 11 项断言通过:1440/2048/768/390px 无页面横向溢出、真实主题按钮切换暗色、创建入口打开登录弹窗、灵感详情回填真实输入框、独立灵感导航移除、/create 高亮与无未捕获运行时异常。已查看实际页面截图;未提交生成任务或用真实账号创建画布。
  • 已验证:与 GitHub Actions 同命令的冻结依赖安装、变更文件格式检查、Typecheck 和 UI lint 通过;前端全量测试 2302 项通过、0 失败,pretest 通过;预演 P0 Chrome E2E 65 项断言通过。修复灵感大厅、详情、样式和最近画布组件的四处 CI 格式问题;发布版本与更新日志对齐 v1.6.8.2。
  • 用户验收:登录态最近画布排序、创建并进入画布、云端同步失败提示、查看全部;切换账号后列表不串数据。
  • 用户验收:明暗主题与 390/768/1440px 布局、滚动、弹窗、空态和完整长提示词编辑;收藏、新建/编辑、隐藏恢复与 JSON 导入导出正常,来源开关显示一致。

画布素材缺失时的本地强制覆盖

画布 operations 自动恢复验收

  • 已实现:云端画布写入统一使用字段/对象 operations;本地 journal 保存未确认请求,响应丢失、断网、刷新和重试都复用原 mutationId 与 payload。服务端 receipt 与画布变更同事务提交,相同请求安全重放,摘要不同返回冲突。

  • 专项测试覆盖字段合并、同字段冲突、显式创建、对象不存在、幂等重放以及删除后迟到更新不重新创建节点;前端类型检查、生产构建和后端全量测试通过。

  • 使用已登录浏览器打开同一画布的两个标签页:分别修改不同字段应自动合并;修改同一字段应显示同步错误并保留本地输入,恢复后自动重放。

  • 在浏览器开发者工具中模拟断网、刷新和响应丢失,确认本地 journal 保留原请求并在恢复连接后完成;检查同步状态图标的 pending/error/done 颜色。

  • 让 Agent 或媒体任务在节点删除后返回迟到更新,确认任务回执保留但不会重新创建幽灵节点。

  • 已实现:云端画布写入统一使用字段/对象 operations;本地 journal 保存未确认请求,响应丢失、断网、刷新和重试都复用原 mutationId 与 payload。服务端 receipt 与画布变更同事务提交,相同请求安全重放,摘要不同返回冲突。

  • 专项测试覆盖字段合并、同字段冲突、显式创建、对象不存在、幂等重放以及删除后迟到更新不重新创建节点;前端类型检查、生产构建和后端全量测试通过。

  • 使用已登录浏览器打开同一画布的两个标签页:分别修改不同字段应自动合并;修改同一字段应显示同步错误并保留本地输入,恢复后自动重放。

  • 在浏览器开发者工具中模拟断网、刷新和响应丢失,确认本地 journal 保留原请求并在恢复连接后完成;检查同步状态图标的 pending/error/done 颜色。

  • 让 Agent 或媒体任务在节点删除后返回迟到更新,确认任务回执保留但不会重新创建幽灵节点。

Agent 只读循环软收敛

  • 已实现:缓存只读结果重复回放、图片同版本重复识别或本轮只读快照达到累计上限时,记录 read_loop_guard 并在下一次模型请求暂时收起只读工具;运行保持 running,仍可回复、提问或执行获准写操作,不再由该护栏写入 run_failed。
  • 已调整:能力错误提示优先复用本回合 model_list,只有素材、模式或模型选择变化后才重新查询,避免纠偏消息诱发重复读取。
  • internal/app 专项测试覆盖缓存回放、跨参数读取上限、图片重复识别、Pi 请求工具过滤、批量读取回执和运行状态;完整 go test ./internal/app 通过。
  • 在真实 Agent 会话中复现长时间重复读取,确认模型使用已有结果收束、写操作和 ask_user 仍可用,并观察护栏事件与费用变化。

Agent 画布权限与大事件审批

  • 已修复:权限查询使用 canvas_projects;大画布增量超过事件上限时改为完整快照刷新通知,避免审批执行事务回滚。
  • PostgreSQL 独立临时 schema 验证独立和项目关联画布、跨账号、缺失画布、项目 ID 误用以及数据库读取失败。
  • 专项测试复现修改前大节点审批失败;修改后覆盖完整批准、执行、回执保存、正文保留、重复批准不再写入、小事件保留增量及超大摘要刷新。
  • 本地用户确认原审批失败场景可以继续执行;前端画布事件与版本同步专项测试通过。
  • 验证跨浏览器、多实例及刷新失败时的恢复;本次不改既有审批恢复和模型调度流程。

Pi 模型输出超限

  • 已修复:工具调用数量或正文超限时,在写入待执行调用之前整批拒绝,沿用有限重试传入具体纠正上下文,不执行前几个调用、不提高上限。
  • PostgreSQL 临时 schema 在修改前复现“工具调用游标无效”;修改后验证 8 个调用允许、9/31 个调用纠正后恢复、持续超限最多 3 次重试及超长正文纠正。策略文档专项测试通过;未调用真实供应商。
  • 部署后在新会话验证大型任务按批执行;观察文本模型纠正次数及费用,失败时不声称已执行。
  • 本项独立于画布大事件修复,不改变审批和画布写入流程。

Agent 分镜绑定参数引导

  • 已优化:工具说明区分素材输入和镜头输出的两个 JSON 示例;handle 错误明确字段、正确方向和真实 rowId 要求,并在回执附上对应连线模板。不放宽校验、不自动改线。
  • 专项测试覆盖来源/目标 handle 放错节点、镜头编号误用、缺少 row 前缀、错误回执模板方向、普通连线与行绑定并存,以及重复行绑定仍拒绝;工具 schema 体积检查通过。
  • 用户已在本地验证镜头绑定可用;自动化测试不调用外部模型,不修改实际创作画布。
  • 上游合并后验证新会话沿用正确绑定方向,错误调用不会被误报为成功。

SMTP 邮件故障日志

  • 已实现:所有邮件投递入口统一记录详细后端错误,标记 SMTP 失败步骤,并隐藏错误回显中的账号、密码、邮箱、正文和验证码;不改变公开 API 响应。
  • 专项测试通过:本地 SMTP 服务模拟欢迎响应、STARTTLS、认证和收件人拒绝;验证日志上下文、错误链保留、敏感值脱敏、成功时不记录失败日志,并回归密码找回流程。
  • 使用实际 SMTP 配置分别触发连接、TLS、认证和收件人失败,确认 backend 日志保留具体错误且无敏感信息;覆盖注册、登录、绑定邮箱和密码找回。

可美 KM Seedream 图片

  • 已实现:Pro / Flash 声明式协议、参考图与扩展参数、结果保存,以及前后端一致的 1K / 1.5K / 2K 尺寸预设。
  • 用户验收协议选择后的默认能力、1.5K 档位与宽高比切换、真实图片生成及刷新后的素材显示。
  • 在供应商环境验证多参考图、Base64 响应、透明输出、全部尺寸和扩展参数;协议测试不替代真实供应商验收。

复制生图节点后节点消失

  • 已修复:副本不再继承原节点的 generationEffectKeys,避免普通保存把它误判为未确认的生成结果。图片内容、提示词和参考字段仍保留,原节点不受影响。
  • 回归测试在修改前复现副本无法保存;修改后覆盖复制、普通保存、新生成结果提交及重新读取。
  • 在真实画布中通过复制粘贴和“创建副本”分别验证,生成完成并刷新后副本仍保留。已丢失的副本不会自动恢复,也不会自动重试生图。

Agent 视频首尾帧选择

  • 已实现:生成工具支持明确指定首尾帧,视频节点编辑支持设置和取消已连接的图片;画布读取和生成审批展示当前选择。
  • 专项测试覆盖工具字段、视频模式和图片引用校验、编辑与取消、禁止其他节点类型修改帧字段。
  • PostgreSQL 独立测试区验证帧选择进入任务输入和持久化草稿,协议按明确字段识别首尾帧,不依赖参考数组顺序;未调用外部模型,测试区已删除。
  • 开启新的 Agent 对话,确认 Agent 能设置下方首尾帧选项,刷新后仍保留;用户确认后再批准真实视频生成。

上传内容与附件交付

  • 运行 TestUploadContentImportSocket 验证 URL 导入与重试;在可解析外部存储域名的环境复测 TestResolveAccessPolicyMatrix。
  • PostgreSQL 上传重试、真实 OSS 附件代理与浏览器附件下载验收。

排队后的自定义渠道检查

  • PostgreSQL 环境验证排队期间关闭自定义渠道:首次与重试任务均停止调用,未发出订单退款,已提交或待核对订单保持待核对。

Agent 失败消息合并与展示

  • 已修复:同一运行的 run_failed / error 与失败状态快照共用一条错误消息;以公开失败原因补全内容,重放、乱序和空原因不覆盖已有详细说明。不同运行即使错误文本相同也分别保留,工具失败与连接错误不合并。
  • 已调整:错误提示使用紧凑中性表面和状态图标,不重复渲染相同的标题与正文;诊断号放入默认折叠、支持键盘展开的「诊断信息」。旧对话中带相同运行 ID 的事件错误与终态提示只展示一次。
  • 自动专项测试通过:8 个 Agent 错误/对话相关测试文件共 77 项通过、0 失败(304 个断言);前端 tsc --noEmit 与本次文件 Prettier 检查通过。
  • 已在本地真实登录画布的历史失败对话中核对:同一失败只显示一张错误卡,模型调用失败原因仍可见;展开「诊断信息」可看到诊断号,未触发新的模型生成或写入操作。
  • 明暗画布、窄面板与长错误文本的可读性,以及诊断展开、键盘焦点和历史滚动体验。

画布 Midjourney 四图堆叠

  • 已修复:画布按一次任务的真实输出数组保留全部图片,以现有图片批次机制默认堆叠,每张图保留资源和素材绑定;单图仍为单节点。
  • 已实现:稳定子节点 ID 和整批持久化,任务重放保留用户移动、改名及其他画布内容;成功的旧 Midjourney 首图节点可从原任务补齐。
  • 用户验收四图默认堆叠、展开、切换主图、保存和刷新后的完整结果。

卡藏 Midjourney

  • 已实现:三个声明式生图协议、公开模型与参考图限制校验、稳定版参数默认映射、受理和任务查询、顶层/data 信封解析、所有单图及可选四宫格保存。
  • 已实现:选择协议自动填入默认能力;特惠 16:9、稳定/高速 9:16;参考图分别 1/5 张,固定一次提交,无蒙版或未声明的分辨率参数。
  • 用户验收默认参数、真实特惠与稳定版任务、图片保存和刷新后的完整显示。
  • 多参考图、Raw/数值画质与风格扩展参数的供应商实测,以及全部版本的真实生成;不以两条文生图验收替代这些边界。

沧元 Midjourney V7 与 V8.2

  • 已实现:独立声明式插件及 V7、1K/2K Provider,固定一次提交、URL 响应、全部结果提取;参考图、编辑、蒙版、速度及模型名按各线路合同校验。
  • 协议专项与完整 internal/protocol 测试通过,覆盖多图响应、查询端点、错误、非法模型与媒体输入,以及包内文档合同一致性。
  • V7 实际任务完成,四张 1456×816 PNG 均已写入 OSS。一次请求返回多图不增加生成次数;积分价格由部署者配置,不代表供应商费用。
  • 已修复:创作页按完整任务消费多图结果,保持真实 outputIndex,避免逐图投影为 outputIndex=0 后被素材及消息幂等去重合并。
  • 已实现:选择 V7/V8.2 协议自动载入专属能力默认值;V8.2 空模型名暂用 1K,上游模型改为 midjourney-2k 自动切换预设档位并保留其他参数和价格。
  • 用户验收协议选择、1K/2K 档位联动、保存并重新打开的能力参数,以及重新提交后的创作页四图显示。
  • 用户验收原提示词的 V7 生成效果、全部图片显示和刷新后的保存结果。
  • 1K/2K 实际生成与保存:官网 CDN HTTP 403 已确认,需供应商提供可下载地址或解决访问限制后验证;协议测试不替代该线路实际保存验收。
  • 参考图、蒙版、style/moodboard 及 fast 档的上游执行验收;专项测试仅验证请求合同。

自定义更新公告

  • 已实现:站点及外观新增更新公告页签,开关控制原日志/自定义公告;多版本文字、图片和视频可排序并选择整行/半行布局,保存同步公共外观状态。
  • 用户验收实际发布内容、版本排序、图片比例和视频播放效果;关闭并重新启用确认保存的自定义内容仍保留。

画布助手身份与名称同步

  • 已实现:后台助手名称与内置身份共用外观配置,新对话及已有对话的后续回合采用最新名称;历史消息和运行快照保留,工具权限不变。
  • 专项覆盖:保存名称进入规范提示词、续聊改名、品牌独立、名称 JSON 编码、缓存键变化、历史保留、配置读取失败及前端刷新失败保留旧值。
  • 用户验收在「站点及外观 → 画布配置」改名保存,切回画布后新开或继续对话询问身份,与界面名称一致。

AutoDL 画面规格简化

  • 已实现:去除画面规格开关与额外说明,保留原标题、副标题和字段样式;完整分辨率多选与默认值始终可编辑、生效,仅允许当前插件工作流预设,删除旧草稿和开关分支。
  • 专项覆盖:所选列表与默认值保存恢复、画布过期选择、真实组件渲染;后端插件预设校验、保存与目录、价格范围、任务校验和声明式请求传参。
  • 用户验收真实页面多选增删、默认值联动、保存与重新打开,确认仅显示六种插件预设及所选值生效。
  • 用户验收实际 AutoDL GPU 生成,确认选定完整标签对应横、竖和方形输出;专项测试不替代付费上游执行。

素材彻底删除恢复不拦截、CI 提速与大文件拆分

  • 已恢复:DELETE /assets/:id、批量删除、清空回收站、回收站素材删除与过期自动清理不再被画布、任务、项目或画布历史快照引用拦截(9 月 21 日 dc1ad680 的契约,9 月 24 日 5b382726 曾误收紧)。事务移除对应历史资源索引,物理对象经 Outbox 异步删除;其他素材复用的资源继续保留。与 http-api.mdx、openapi.yaml 及删除确认弹窗文案一致。
  • 已修复:审批后的媒体等待在服务停机被取消时,不再继续回写与恢复运行时;MediaTaskID 保留,重启后重新挂上等待。
  • CI 提速:每次构造 Service 都会完整解压 85MB 官方插件包(每次约 4 秒,1000 余个用例累计 7 分钟以上)。现启动只读清单、进程内缓存官方包读取结果、支付运行目录只解压本机平台的可执行文件;internal/app 本地由约 488 秒降到约 144 秒。发布流程的镜像构建与质量检查并行(可变标签推广仍等待检查通过),PR 连续推送取消旧检查。
  • 拆分:cloud_agent_runtime.go、cloud_agent_tools.go、cloud_agent_pi_coordinator.go、workflow_provider.go、repository.go、Agent 面板与输入区按职责拆成多个文件,逐声明校验为纯移动;新文件带职责说明。
  • 后端 go vet ./...、go test ./... 全部通过(依赖 Postgres/Redis 的 7 个用例本地跳过,CI 会执行);新增取消等待、插件包按需解压与本机平台产物回归用例。
  • 前端 tsc、lint、改动文件格式检查与 2103 项测试通过。
  • 真实页面:删除被画布引用的素材应直接成功;画布再次打开时断链由修复流程处理;共享给其他素材的文件仍可访问。
  • 推送后确认 GitHub Actions 后端检查耗时下降,镜像构建与检查并行、检查失败时不会推广 latest / 版本标签。

后端统一日志与降噪

  • 已实现:新增 backend/internal/logging,统一接管 slog、标准库 log、GORM 与 Gin 访问日志,级别与格式由 CANVAS_LOG_LEVEL / CANVAS_LOG_FORMAT 控制。info 下不再输出成功的查询类请求、成功 SQL、[Agent] message_end 等流式事件及常规画布自动保存;4xx/5xx、慢请求、慢 SQL、SQL 失败和 panic 仍会记录,SQL 不带参数值。
  • go build ./...、go test ./... 与 internal/logging 单元测试通过。
  • 部署到服务器后观察一段时间的日志量,确认没有遗漏的高频输出;临时切换 CANVAS_LOG_LEVEL=debug 验证 Agent 事件与查询请求可以重新看到,再切回 info。
  • 若接入日志采集,验证 CANVAS_LOG_FORMAT=json 的字段(request_id、status、latency_ms)可被正确解析。

模型选择弹窗长描述与视口边界

  • 已调整:共用 ModelPicker 的宽度由共享样式统一控制,移除按内容撑宽及触发器最小宽度约束;渠道描述支持换行,字号统一使用说明文字 token(12px),行高为 1.5,移除旧 9px / 10px 覆盖;模型名称与价格在空间不足时分行显示,长价格文本可换行。
  • 调用方排查:画布与创作、短剧新建/章节提取/分镜制作/项目默认模型、Agent 对话与设置、提示词优化、批量生成、图片编辑/蒙版/图层拆解及视频分段等入口复用同一组件,均继承修复。
  • 现有模型分组、价格展示、共享样式、Agent 和分镜选择器共 20 项专项测试通过;不代表浏览器布局验收通过。
  • 真实页面验证 500 字中英文描述、连续无空格文本、长价格、禁用原因与无描述选项;检查 1440px / 768px / 390px 视口、明暗主题、靠近浏览器左右边缘的弹窗、键盘切换和关闭。本次未完成浏览器验收。

分镜视频预览画幅

  • 已调整:分镜制作右侧的视频播放器使用媒体原始比例和完整画面适配,避免共享预览样式的固定 16:9 与 object-fit: cover 裁剪竖屏视频。
  • 真实分镜页面播放已有 9:16、16:9 视频,确认画面完整、控制条可用;切换镜头与历史版本,检查明暗主题和窄屏下的预览区滚动。本次仅核对组件与样式,未完成浏览器验收。

角色卡引用与本地参考图交付

  • 已修复:Agent 任务保留模型侧图片槽位,画布编辑器单独使用角色/图片编号;仅有角色卡输入时可解析图片别名,混合输入时不猜测、不交换素材。引用仍由真实角色节点和资源归属校验决定。
  • 已修复:OpenAI Images 插件允许 JSON 图片编辑请求携带 Base64 data URL,本地资源经后端授权读取后在内存中交付,不再错误要求公网存储地址;其他仅支持公网 URL 的协议要求不变。
  • 用户已在本地真实画布测试,扶颦参考图生成完成并上传;未额外发起收费生成。此结果不代表最新主分支集成后的完整 Agent 流程或生产环境已验收。

导演台 3D-BOX 核心 MVP

  • 已实现:默认快速镜头工作流、演员快速添加与落位、语义姿态/景别/运镜、当前视图设机位、真实 Three.js 白模预演视频及画布视频回写。
  • 已实现:画布 Agent 的 director_scene_read 安全摘要与 director_preview 请求桥;当前预演由已打开的浏览器导演台执行,不在后端伪造 Three.js 渲染。
  • 登录真实画布验收:快速/高级模式切换、添加演员、地面落位、姿态、景别、运镜、白模预演、视频节点回写。
  • Agent 场景验收:先读取导演场景,再请求指定镜头预演;确认只对当前画布/场景生效,确认模型 URL、storage key 等敏感字段不出现在工具结果。
  • 验收明暗主题、窄屏滚动、录制期间修改场景的快照保护、WebGL context loss 恢复;当前未启动开发服务器做真实浏览器验收。

技能库个人分类与画布 Agent 筛选

  • 已实现:结构迁移 v39 增加用户技能库分类,v40 增加内置技能删除记录;个人分类与平台共享技能广场分类分离。管理员可创建平台分类,用户可为已加入或自建技能归类;删除分类只解除归类,删除内置技能后启动同步不会重新创建。技能库个人视图和画布 Agent 的“我的技能 / 已启用”列表均可按分类筛选。
  • 使用真实登录页面验收技能库左侧分类及数量、创建/分配/删除、未分类筛选;确认删除分类后技能仍存在,管理员平台分类对其他账号可见、可选,技能广场共享分类不变。
  • 在画布 Agent 技能选择弹窗分别验证“我的技能”和“已启用”的个人/平台分类筛选;市场页仍按共享分类筛选。
  • 在隔离 SQLite 与 PostgreSQL 数据库备份后执行 schema v39 / v40 up / verify,确认 user_skill_states.library_category_id、分类表和 builtin_skill_tombstones 迁移正确;未在生产数据库执行迁移或改写数据。

发布回归与资源引用保护

  • 已修复:素材表现只在 metadata_json 引用资源时,批量删除和管理员资源检查仍识别该引用,不误删共享资源。已有回归覆盖共享对象、跨用户别名、事务回滚和删除队列。
  • 已更新:启动并行外观加载、主题联动、统一下拉框、画布首帧与 Agent 插话的回归断言;资源消费竞态测试通过模拟 HTTP 传输验证真实持久化链路,不依赖外部网络。
  • 升级到 schema 40 前备份数据库,执行正式迁移及 verify;验证已有渠道和逻辑模型继续生成唯一可读 ID,并确认内置技能删除记录不会在启动同步时被重新创建。
  • 登录真实页面验收素材删除、生成结果转画布、Agent 插话、SSE 断线续传及资源访问。健康检查不能代替这些路径。

注册服务协议后台配置

  • 已实现:协议名称与条款正文由后台「登录与注册」第 3 区块配置,经 PATCH /admin/settings/registration 保存,公开下发在 GET /auth/settings 的 agreementTitle / agreementContent。标题未配置时跟随外观品牌名生成;正文按空行分段渲染,留空时注册页提示待补充。注册开关单独切换不会覆盖协议(后端按可选指针字段合并)。
  • 在真实后台改品牌名与协议正文后,用未登录浏览器打开注册页,确认勾选框与弹窗标题、正文段落在明暗主题下正确显示;再确认协议留空时的占位提示与开关关闭时的注册拦截文案。
  • 用管理员账号验证「注册开关」与「服务协议」两次保存互不覆盖,撤销与离开页面提醒不丢内容;未确认服务端并发写入与多管理员同时编辑的冲突表现。

工作区 100% 缩放下的界面密度

  • 已收紧用户工作区侧栏、顶栏和导航行、画布桌面端 Dock、Agent 内边距及默认浮窗尺寸;Agent 旧的手动调整尺寸仍保留,可点标题栏「恢复 Agent 紧凑窗口」自行重置。技能组合标签维持透明底和彩色描边。
  • 画布编辑器左侧图标菜单与展开内容改用一块低圆角、半透明磨砂表面;删除双重标题、硬分隔线和搜索框边框。侧栏现在浮在真实画布上方,打开/折叠不再改变画布视口宽度;顶栏和左下缩放控件避开侧栏。工作区下拉菜单及共享单选下拉去掉高亮描边,用背景和阴影建立层次,键盘焦点保留低对比提示。仍待登录态真实页面验收明暗主题、画布节点透视、窄屏抽屉、菜单键盘导航和弹层层级。
  • 在已登录的真实画布和用户工作区以浏览器 100% 缩放验收明暗主题、侧栏展开/折叠、顶部/底部工具栏、Agent 历史与设置、输入区和标签横向滚动;再检查窄屏与触屏下是否截断或遮挡。当前本地独立浏览器会跳转登录页,未将静态检查视为视觉验收。

画布资源校验、前端发布兼容与画布热点

  • 已实现:统一递归识别持久资源字段(含嵌套 videoPreview);operations 提交前校验资源归属和 ready 状态,资源缺失返回带路径和 ID 的结构化 409。未确认请求保留在 journal,不能通过覆盖或历史恢复绕过资源合同;主媒体问题继续报告为 unresolved。
  • 已实现:哈希 chunk 采用长缓存,缺失资源不缓存;HTML 显式 no-cache, must-revalidate。静态容器发布保留当前与上一发布 chunk,并在保留窗口内清理更旧资源;Vite preload 失败只自动恢复一次,之后交由路由错误页。已有数据卷不会凭空恢复首次部署前已删的 chunk。
  • 已实现:媒体元数据请求按账号 scope/generation 隔离迟到响应;画布内容 hash 对 viewport-only 副本复用;视口更新走轻量路径;loading 节点共享画布级 ticker,页面隐藏时暂停该 ticker。
  • 先备份隔离/测试数据库,验证资源缺失返回结构化冲突、同一 mutationId 重放幂等、字段基线冲突和删除后迟到更新拒绝;确认事务失败不会留下半条 receipt。未扫描或改写生产数据库。
  • 使用发布测试卷连续发布三版以上:旧 tab 延迟触发旧 chunk 后仍可加载;验证 HTML 与哈希资源 Cache-Control、旧 chunk 404 不被 SPA fallback 改写,以及浏览器一次性恢复不循环。当前没有 CDN/Ingress 线上响应证据,Firefox MIME 具体响应类型未确认。
  • Firefox/Chrome/Safari 实际页面走关键 lazy route;检查离线 journal、登录切换和自动重放行为。尚未做真实浏览器/CDN 验收。
  • 使用 React Profiler 与长时间运行的大画布记录任务更新、节点数/可见数、主线程长任务和页面隐藏行为。当前只做结构性降热点,不推断整画布必然全量重渲染或已达到某个帧率。

完整 AI 拆图

  • 已实现:视觉规划、专用拆图与普通图片模型重建、可选去背景、图层组显隐与合成、独立素材保存及任务恢复。
  • 用户验收不同画幅的背景与透明前景、图层排序和显隐、复制/删除、保存素材与刷新恢复。
  • 在供应商环境验证专用拆图、去背景、部分失败重试,以及不同模型的比例与透明输出限制。
  • 核对规划与各生成任务的费用提示和失败结算;普通生图重建不承诺无损还原。

画布媒体产出模型

  • 产出模型与选用模型分开保存。生成成功才冻结产出模型;生成中、失败和只改模型下拉不改已有产出模型。
  • 打开画布外观「媒体信息」后,新生成的图片、视频、音频左下角显示模型展示名或模型 ID。图片右下角仍显示尺寸和体积。关闭开关后这两处都不显示。视频标题旁的宽高保持可见;视频播放时角标不盖住控制条。
  • 生成成功后把下拉改成另一个模型且不重新生成,角标仍是原来的产出模型。重新生成成功后角标换成新模型。
  • 上传、粘贴、宫格切分、截取、合并、提取音频不显示产出模型。节点详情和版本对比在没有产出模型时留空,不显示「默认模型」。搜索能按产出模型名称和选用模型找到节点。
  • 分享页和版本预览画布不显示产出模型。旧画布节点在重新生成成功之前不出现角标。
  • 真实浏览器验收尚未执行。

原任务 ID 媒体保存恢复

  • 故障注入:下载 503 后服务实例重建继续原任务、OSS 上传失败保留暂存文件及资源 ID、素材登记异常使任务成功事务回滚,登记恢复无需再次下载。
  • 防重复与权限:不触发模型路由切换、不新增账单、重复点击幂等、跨用户/已取消/已退款/项目删除拒绝恢复、过期租约写入拒绝、自动/手动重试预算与暂存容量校验。
  • 后端 app、repository、database、handler 四包回归通过;最后补验媒体恢复、路由与请求日志专项测试,以及 schema 34 幂等迁移和恢复接口鉴权/归属冒烟。测试使用隔离数据库。
  • 前端类型检查与 31 项生成显示、画布结果同步、生成提交及重新生成相关测试通过。
  • 在真实画布和任务中心触发下载失败、OSS 上传失败、登记失败,确认各阶段提示、刷新后“重试保存”、结果回写及资产库仅一条;真实浏览器验收尚未执行。
  • 使用真实 OSS 配置进行网络中断/凭证修复后的恢复验收;当前上传故障测试使用不可达端点,不代表真实 OSS 成功链路已验证。
  • PostgreSQL 部署执行 schema 34 升级及多实例租约/共享暂存卷验收。未修改当前本地业务数据库、历史失败任务或账单。
  • 无恢复记录的历史失败任务单独核实源地址有效期与计费状态;本功能不从旧日志自动回填,不承诺恢复已过期的源文件。

画布默认黑色主题与点网格

  • 前端类型检查与 17 项外观、主题隔离测试通过;尚未完成真实浏览器验收。
  • 未保存自定义默认外观时,新建画布使用黑色主题:背景 #000000、明亮度 0%、网格颜色 #000000、网格强度 100%、空间网格为点。黑底黑点视觉上为纯黑。
  • 切换「黑色」或「浅色」预设时使用点网格;黑色首次转自定义及重置时使用上述预设数值,已有自定义配置仍保留,浅色颜色与强度保持原值。仍可手动选择线或空白网格。
  • 已保存的画布外观及用户自定义默认外观不被覆盖;画布主题变更不影响工作台主题。实际浏览器明暗主题与保存恢复待验收。

Live2D 运行库随部署交付

  • Cubism Core 已纳入版本控制,保留原始版权声明并附第三方许可说明;前端构建和静态镜像直接包含运行文件,不再要求部署者手工安装。
  • 5 项 Live2D 专项测试及前端生产构建通过;Core 可初始化并读取版本,构建产物中的 Core 和许可说明与源文件逐字节一致。未执行 Docker 镜像构建或服务器部署。
  • 服务器更新至包含本次修复的新镜像,确认 /live2d/live2dcubismcore.min.js 返回 JavaScript 而非 SPA 页面;使用有授权的真实模型完成后台预览、保存及画布形象验收。

Agent 图片字节交付

  • 本地模拟上游验证:公网地址为空或错误时,worker 仍发送原始 PNG 字节;任务只持久化资源占位,多图工具配对保持连续,Chat Completions / Responses / Claude / Gemini 协议保留图片。
  • 28 项专项回归通过;同一图片资源、模型配置和模拟上游下,Chat Completions 的普通文本节点与 Agent 经真实 worker 发出相同图片字节,附带的内嵌数据不能替换账号资源文件。
  • 对照排查另发现:普通文本任务的默认声明式 Responses / Claude 请求仍使用 Chat Completions 的 image_url 内容块,需单独修复并验收;这不是本次 Chat Completions 渠道 Agent 取图失败的原因。Agent 的多协议图片展开测试不代表普通文本的这两条路径通过。
  • 专项回归覆盖资源归属、未就绪、非图片、文件大小、模型图片数量限制;附图不直接标记识别成功,不跨轮继承旧的未确认观察。
  • 更新并重启后端后,使用已声明图片能力的实际渠道模型,重新询问已上传图片节点的主体和背景;确认不再因 unknown 标记拒绝看图。真实模型调用会消耗额度,尚未执行。
  • 实际部署验证 OSS 图片、同轮多图比较、跨轮换图与读取失败提示;检查其他依赖公网 URL 的生成协议配置,不能将本次看图修复视为存储公网地址已修正。

画布创作入口主次调整

  • 前端类型检查和 4 项画布起点状态测试通过。
  • 真实画布路由使用隔离的身份与空画布测试数据完成局部浏览器验收:1440 × 900 明暗主题、390 × 844 窄屏、390 × 320 低高度。入口不横向溢出,点击目标至少 44px;Tab 顺序与焦点样式正常,入口滚轮不改变画布缩放,减少动态效果设置生效。
  • 入口改为左对齐分层标题、主题适配的金属质感片头符号和细分隔线,无卡片或实底大按钮。Agent 使用文字与小箭头入口、悬停下划线反馈;次级入口和素材操作分层展示。点击「交给 Agent」可展开原有 Agent 工作台。
  • 用户确认视觉效果;使用真实登录账号验收全部入口、上传和 Agent 对话。本轮浏览器验收拦截了写请求,未修改真实项目;未模拟的辅助接口返回错误,因此局部视觉与面板展开检查不代表后端联调、保存或 Agent 执行通过。

技能文件包迁移元数据长度

  • 启动迁移对旧技能名称、简介的回填元数据按字符数限制长度,省略号计入上限;不改写原始名称、简介和正文,不放宽非迁移入口的校验。
  • 新增回归先复现旧回填路径的长度错误,修复后技能域全量测试通过;覆盖内置与用户旧技能、重复初始化不重复建版本、原始正文和字段保留,以及 16000000000049 内置技能包。
  • 在报错用户的实际部署核对后端镜像与构建提交,并用包含修复的新产物验证启动迁移。本地通过不代表用户环境已修复;本轮未发布镜像、未操作生产数据库。

模型失败原因在画布卡片展示

  • 后端 Provider、错误分类和请求日志专项回归通过;本地模拟上游验证 HTTP 400 与 HTTP 200 业务失败均保留安全原因,覆盖图片响应和通用 JSON 响应。前端 4 项专项测试通过,覆盖具体原因、HTTP 状态提示、审核元数据及 URL 隐藏。
  • 使用内容安全拒绝、参数错误、业务失败和 HTTP 4xx/5xx 的真实模型任务,确认卡片保留上游具体原因;检查长中文消息换行及明暗主题。
  • 确认 URL 被隐藏,余额、密钥、Cookie 和内部诊断不出现在卡片;后台响应拦截规则仍能替换最终消息。历史任务不会自动补回已丢弃的原因。

管理后台轻边界与高密度改造(第一轮)

  • 公共后台外壳统一浅深色表面、弱化重复外框,保留表格行分隔、输入边界和键盘焦点;导航按监控排查、模型资源、用户运营、平台配置组织。表格默认紧凑模式,支持舒适模式,偏好按账号保存。
  • 请求明细增加排障、计费、全部字段三种视图,保留详情抽屉、媒体、完整计费与导出入口;总览压缩为六项指标及紧凑趋势区,系统性能压缩装饰留白。统计和请求加载失败明确提示,性能刷新失败标记旧快照,首次采集失败不展示假健康指标。
  • 36 项专项测试通过(330 个断言),覆盖密度偏好、请求状态、账务状态、后台样式合同、渠道工作区、统计财务及主题;前端生产构建通过,仍有部分 chunk 超过 500 kB 的提示。
  • 独立浏览器在真实应用路由使用明确的测试夹具验证,未写入真实业务数据:1440 × 900 下请求紧凑行高 36 px、首屏 18 条完整记录,舒适行高 44 px,切换后刷新保留偏好;排障及计费视图无需横向滚动,全部字段保留横向滚动;375 / 768 px 下页面不横向溢出,表格内部可滚动。浅深主题、键盘进入详情、总览筛选展开收起与 98.6% 精度显示已检查。
  • 测试夹具覆盖统计读取失败、请求读取失败、性能刷新失败及首次采集失败;缓存清理仅检查确认弹窗与取消,未执行清理。
  • 使用真实管理员账号验收实际筛选与分页、CSV 导出、媒体预览下载、请求详情及真实数据权限。浏览器夹具检查不等于后端联调通过。
  • 复核渠道、模型、用户、运营及其他设置页在公共样式变化后的长内容、固定列、浮层、滚动及不同站点皮肤;本轮并未逐页重做或完成全后台验收。

批量生图、刷新恢复与画布节点一致性

  • 专项回归 127 项通过,覆盖同步编辑命令、按节点结果提交、批次汇总、资源槽位、空间索引、相邻媒体逻辑、revision 合并与存储清理;前端类型检查通过。
  • 真实生成消费及持久化模块集成测试:两张成功、三张失败,在结果保存期间新增节点、改名和移动;重新读取模拟浏览器存储后,结果与用户编辑均保留。该测试曾复现“内存有节点、存储缺节点”,修复后通过。
  • 使用真实登录账号连接两张已有参考图,提示词包含 @图片1 和 @图片2,批量生成五张并重试失败子图;验证生成、提示词标签和参考图顺序一致,分组父图不冒充输入。
  • 真实任务两成三败后刷新,检查两张成功图、三个失败节点、父图失败数量和素材 ID;在生成中拖动、改名、新增、删除其他节点,保存后刷新复核。
  • 模拟预览尚未恢复但已有 storageKey,取消或重新生成批次,确认不会删除成功图片;删除后重新分组的子图不受旧批次清理影响。
  • 真实大画布在明暗主题下反复平移缩放,覆盖 280/420/720 原预算边界、批次折叠/展开和多选拖拽;确认可见节点不缺失,并记录极端缩小的帧率和内存。纯函数可见性测试不代替渲染性能验收。
  • 任务发现接口断网、最近任务超过 100 条、切换画布和账号时验证:不能把未知状态标成失败,旧任务不能覆盖新任务,任务中心仍可核对结果。
  • 验证浏览器真实存储故障、服务端同步失败、跨设备并发编辑及生成后立即关闭页面;本轮没有启动开发服务、访问真实用户数据或调用付费模型。
  • 历史已丢节点需单独恢复;本次修复不自动重建原位置、连线和提示词。架构与已知限制见 docs/design/canvas-consistency-repair.mdx。

回收站彻底删除与画布工具引用

  • 已修复:素材库分页多选改为按素材 ID 保留选择,翻页后批量移入回收站、还原和彻底删除不会只处理本地首屏缓存;批量选择入口支持点击整张卡片、Shift 连选,并将“全选”明确为“全选本页”。专项测试覆盖跨页未缓存素材与批量请求。
  • 登录真实账号验证第二页素材的整卡多选、Shift 连选、跨页移入回收站和彻底删除;确认筛选/翻页后选中数和确认弹窗数量一致,删除请求只提交一次完整 ID 数组。
  • 素材卡片选择框恢复左上角,徽章为选择框和更多菜单让位;批量操作条取消吸顶覆盖,并与卡片网格保留间距。需在真实登录页面检查多选边框、长列表滚动、窄屏换行和明暗主题;自动浏览器访问被登录页拦截,样式约束测试不代替视觉验收。
  • 新增 POST /api/assets/batch-delete,顶层 JSON 数组传入素材 ID;素材页及选择器的批量删除、清空回收站只发一次请求,后端批量事务处理,不按 ID 逐次提交。整批归属检查、事务失败回滚、同批共享资源回收与未选共享资源保留有专项覆盖。
  • DELETE /api/assets/:id 明确表示彻底删除,不再依赖服务端素材状态判断是否位于回收站;即使本地已归档但服务端仍暂存为 confirmed,也不会受画布、任务或历史快照引用阻塞。事务会移除对应历史资源索引并通过删除 Outbox 释放未被其他素材复用的物理文件;内部普通删除仍保留引用保护。
  • 画布提示词中的工具引用按“工具类型 + 工具 ID”区分,并使用最新提示词原子追加;相同数字 ID 的不同工具不会互相覆盖或把前一个标签回退成编码令牌。后端专项测试、前端工具集成测试和前端类型检查通过。
  • 删除完成后退出用户数据同步队列,再异步刷新素材库与素材选择器分页缓存,避免删除与列表查询互相等待而无法关闭确认弹窗。去掉选择器删除后的重复刷新;刷新失败保留查询错误并记录告警,不误报删除失败。8 项批量删除与工具栏专项测试通过,包含真实 QueryObserver、分页加载与同步队列链路,以及刷新延迟、刷新失败场景(仅模拟 HTTP 响应)。
  • 在真实素材页及素材选择器中分别确认单条删除、批量删除和清空回收站:删除成功后确认弹窗关闭,列表刷新;限速或模拟列表请求失败时确认弹窗不被卡住,素材选择器外层窗口保持打开。
  • 在真实素材页分别验证单个彻底删除、选择 100 条后批量删除、清空回收站及过期自动清理;网络面板应显示单个批量 POST,body 为数组。确认后台清理完成后空间释放、原画布或任务中的旧媒体引用按预期失效、其他素材复用的文件仍可访问;失败时不出现部分删除。
  • 在真实画布快速连续选择两个不同工具,并覆盖相同数字 ID、中文标签、同类型替换和多个运镜工具,确认两个标签均正常显示、保存刷新后不乱码。

系统模型自定义排序

  • 模型管理入口明确为“自定义排序”,支持搜索选择模型并输入目标位置,保留拖动和上下移动;位置从 1 开始,保存整份顺序,取消放弃草稿。复用已有管理员排序接口、事务与并发冲突检查,前台系统模型选择器沿用保存后的顺序。
  • 前端 8 项排序 / 管理页面专项、类型检查、生产构建与 UI lint 通过;后端现有排序事务、权限、过期快照和跨渠道检查专项通过。前端已部署,入口与排序脚本同构建一致,API 就绪;构建仍提示部分 chunk 大于 500 kB。静态资源核验不替代浏览器交互验收。
  • 真实浏览器验证跨分页移动、停用模型排序、取消不保存、刷新恢复、前台模型顺序,以及其他管理员同时修改时的冲突提示。

画布 Agent 配置与 Live2D

  • 使用约 50 MiB 的真实模型 ZIP 验收上传和预览;ZIP 上限 128 MiB,解压累计 384 MiB、单文件 128 MiB,超限须拒绝。
  • 站点仍叫“微昕·砚”,助手改为“小鱼”;保存、刷新、撤销和恢复默认后入口、面板、欢迎及输入文案正确,历史对话不改写。
  • 使用授权 Core 和真实 Cubism 3/4 模型完成预览、保存、画布播放验收。没有 Core、模型不兼容、网络超时或 WebGL 丢失时显示错误/默认球,不阻止打开对话。
  • 导入不自动启用;上传期间不可保存/刷新/恢复默认;离开未保存配置不影响线上形象;其他管理员不能预览或启用未发布草稿。
  • 未启用包不能匿名访问;启用后模型资源正常读取,切回默认球停止公开服务;引用中包无法删除,清除引用并保存后可清理。
  • 验收大模型、多次切换/打开/关闭、后台标签页、隐藏后台标签、减少动态效果、跨域 API Cookie、明暗主题、窄屏拖动和键盘移动;观察 GPU/内存释放。
  • 已用用户提供的 Shizuku 运行包和 Cubism SDK for Web 5-r.5 Core,在现有开发服务的真实 Live2DAvatar 组件中复现并修复绘制顺序接口异常,浏览器首帧渲染就绪。模型请求由测试拦截提供本地文件,不代表后台上传、权限、保存和画布全链路已验收;首期不含口型、语音联动、点击表情或 AI 自我介绍同步。

系统渠道模型展示标签

  • 在系统渠道的模型编辑中添加多个标签(如“限时特价”“官方1折”),选择不同颜色,保存并重新打开后文字、颜色及顺序保持一致;删除全部标签后前台不再显示。
  • 最多 5 个标签,每个去除首尾空白后为 1–12 字;空白、重复、超长标签或无效颜色被拒绝,失败不覆盖原数据。
  • 用户模型选择器的二级渠道行常驻显示对应标签;同名模型的不同渠道标签互不串用,长内容可换行,明暗主题可读,积分、报价和请求路由不受影响。
  • 已有数据库升级至 schema 32 后,旧模型默认无标签,原模型标识、价格和能力配置不变。
  • 后端启动迁移完成后正常通过版本检查,不再出现“数据库结构版本 32 高于程序支持的 31”;程序支持版本已同步为 32,并添加迁移计划版本一致性回归测试。

模型一级菜单选中状态

  • 明暗主题下打开模型菜单,当前模型所属一级项保持高亮;进入二级菜单并切换左侧一级项,确认仅当前展开项及已选渠道高亮。悬浮其他行只显示手形鼠标,不变色、不位移;键盘导航仍保留焦点轮廓。
  • 积分使用紧凑金黄色、浅底细边框的小圆角标签及 11px 金币图标,适配明暗主题;所有行价格右对齐,选中勾选不挤动价格,金额精度和计费单位保持不变。
  • 每次打开模型菜单默认展开当前选中项所属二级目录;无有效选中项时显示一级目录。桌面双栏总宽度为 800px,一级栏宽度不变,增加的空间留给二级目录;窄屏不超出视口。
  • 选择渠道后菜单保持打开,选中高亮及勾选立即更新,可连续切换;点击外部、再次点击触发器或按 Escape 仍可关闭,悬浮其他行不高亮。

社区技能文件包初始化

  • 修复从 Markdown 正文推断技能元数据时,截断后额外追加 ... 导致简介超过 500 字、后端启动中止的问题。名称、简介和版本的省略标记均计入长度上限,原始 SKILL.md 正文保持完整;不放宽文件包长度校验、不跳过失败技能。
  • 补充完整种子启动链回归:原有 33 条 JSON 技能、新增 72 条社区技能、3 条 Go 内置技能,共 108 条,依次同步入库并生成文件包;重复初始化不产生重复版本、不丢失加入/收藏状态;技能广场可搜索 freestyle-template-match。
  • 更新后端并重新启动,确认不再出现 迁移技能 16000000000003 文件包失败;在「技能库 → 技能广场」清空分类筛选后搜索 freestyle-template-match,查看详情并加入「我的技能」。本地临时数据库回归不代表实际部署已更新或浏览器验收通过。

PR #554–#571 批量整合

  • 合入除 #557 外的 17 个 PR;注册协议正文未确认,暂不引入空协议勾选、相关 API 或数据库版本变更。
  • 修正社区技能的 72 组空作者 ID 和秒级时间戳;使用独立外部作者标识 community-itswyatt-k(不是登录账号或权限兜底),保留原作者署名与来源。增加完整种子落库及重复同步保留收藏/加入状态的回归。
  • 保留 Agent 操作 Schema 的按类型条件必填规则,并保持体积预算;续租独立于任务执行时限,但真实租约失效仍拒绝写终态。资源删除即时 outbox 处理纳入 worker 生命周期,测试先等待 worker,再关闭数据库和删除目录。
  • CI 从 Go JSON 事件验证五个 PostgreSQL/Redis 指定测试确实运行且通过,缺失、改名、跳过均失败,不再只搜索 SKIP 文本。
  • Tooltip 触发事件与 aria-describedby 直接绑定实际可聚焦控件,修正外层 span 不会接收内层按钮焦点的行为;现有真实导演台 E2E 增加悬停、Escape 和 Tab 焦点断言。
  • 本批仍需真实页面验收:设置页导航后的浮层、Tooltip 鼠标与键盘焦点、移动端 dock、模型价格与选择、站点图标;真实上游 SSE、视频音频参数、视频资源转存和公网素材访问不由单元测试代替。既有各 PR 的部署记录不代表本批整合已经部署。

Agent 工具自动纠错与折叠展示

  • 对尚未产生副作用的参数、画布操作及快照错误增加按工具计数的有限自动纠错:首次调用加两次修正机会,中途读取画布不重置计数;第三次仍失败才以 tool_retry_exhausted 终止。权限、安全、存储错误和已提交收费任务保持不可自动重试。
  • tool_failed / tool_completed 增加稳定的 retry group、次数、上限及 retrying/recovered/exhausted 状态;前端按 group 折叠中间失败,使用中性折叠记录,恢复后保留成功结果,耗尽后仅最终运行错误报红。
  • 待真实 Agent 页面验收:空白画布连续提交缺少 type、非法文档连线和过期快照时,中间重试不出现红色错误;成功纠正后只看到折叠记录与真实画布结果;三次失败后才显示最终错误。覆盖自动执行/逐次审批、明暗主题、SSE 断线重放和刷新恢复;确认不会重复创建节点或收费任务。

设置页退出后的工作台浮层样式

  • 移除设置页对 app-user-overlays 的重复添加和清理,由 UserLayout 统一管理。此前离开设置页会清掉父布局仍需使用的样式标记,使画布菜单等 body 浮层失去表面颜色变量。
  • 修复已在部署预览版验证:从设置页返回画布列表后,菜单背景和圆角保持正常;深浅主题的卡片操作菜单及浅色排序菜单验证通过。
  • 上游集成后复核设置页与其他工作台页面之间的导航。

万有引力视频结果地址

  • 已修复:万有引力视频套件更新为 1.0.1,8 个协议优先读取 metadata.direct_url / data.metadata.direct_url,避免完成响应中的相对 metadata.url 遮蔽完整视频地址。保留已有完整 URL 回退,宿主下载与 SSRF 校验不变;源码、内嵌接口文档和插件归档同步更新。
  • 真实插件归档的 24 组响应回归通过,覆盖创建 / 轮询完成、顶层 / data 内直链优先以及完整 URL 回退;官方插件归档完整性检查通过。
  • 修复插件已部署并验证运行时注册版本与归档一致,后端就绪及 API 代理检查通过。从失败任务已记录的完整地址取回 MP4,未发起新的上游生成,也未修改原失败任务与账务状态。
  • 真实创作台新视频任务验证下载、资源转存与结果展示。原失败任务取回的视频保存在受限本地缓存,未自动回填到会话。

创作台视频同步音频参数

  • 已修复:创作台视频报价、提交和重试共用按所选模型能力整理的配置。不支持同步音频或水印时使用 false,支持时遵循模型默认值,不再把全局 videoGenerateAudio=true 当成用户请求;模型筛选只使用创作台实际可选的参数。
  • 创作台请求配置、模型能力与报价相关的 32 项专项测试通过,前端类型检查通过;覆盖无声视频的报价 / 任务参数、重试元数据以及支持音频时的模型默认值。
  • 前端生产构建通过,修复镜像已部署;首页、创作台路由、入口资源和创作台脚本与本次构建逐字节一致,容器健康与 API 就绪检查通过。构建仍提示部分 chunk 超过 500 kB。
  • 在真实创作台使用万有引力渠道的 minimax-h3-a,输入“小猫在流泪”,选择 16:9、480P,检查报价、首次生成和失败后重试;同时确认支持同步音频的模型遵循各自默认值。本次不调用真实上游,生成结果仍待验收。

模型候选价目与同渠道独立选择

  • 候选模型列表展示自身配置的价格或多规格价格范围,不再使用当前模型的分辨率、时长等参数判定其他候选模型「无报价」。选中模型的触发器、请求估价仍按当前参数精确匹配;未配置价格不显示为免费。
  • 平台直连模型以渠道 ID 和模型 Key 保持独立,同渠道同展示名不再合并成自动选价模型族。选择、生成请求和报价保留用户选中的模型,不再借用同名模型的参考输入上限;个人渠道原有细分模型兼容路由保持不变。
  • 58 项专项及相邻测试通过,覆盖同渠道同名不同价模型的选择、实际生成配置、报价目标、能力隔离,以及真实价格组件的明暗主题静态渲染;前端类型检查和生产构建通过。构建仍提示部分 chunk 超过 500 kB。
  • 云端部署前端后,在真实 MiniMax H3 列表逐项切换高速版、多图一致性、音画融合及满血等选项,确认选中项不跳回、价目与后台一致;调整参数后检查精确报价和实际任务使用的渠道与模型。本轮未读取云端配置或日志、未调用真实付费生成、未部署,静态渲染不代表云端端到端验收完成。

声明式文本任务流式输出

  • 已修复:创作台 / 画布文本开启流式且模型支持时,声明式 Chat Completions、Responses、Claude 协议发送 stream=true 并实时发布文本增量;保留插件映射、普通 JSON 响应处理和宿主网络安全校验。Chat Completions 请求 usage 终态块,524 和取消不会触发自动重发。
  • 三种协议的 15 组场景通过,覆盖响应结束前发布增量、普通 JSON 回退、关闭流式、524 单次调用和取消;声明式执行、Agent 流解析及计费核对相关回归通过。正式后端编译、部署后版本与 API 就绪检查通过。
  • 真实渠道核对首个文本增量、长回复、取消与最终用量;历史 524 任务没有上游任务 ID,仍需供应商核对执行和费用,不自动重新生成或改写账务。

注册服务协议

  • 维护者手动填写 web/src/pages/auth/register.tsx 中的 SERVICE_AGREEMENT 正文并审核后再发布;当前仅显示“服务协议内容待补充。”,不包含正式条款。
  • 真实浏览器确认《微昕·砚服务协议》弹窗、默认未勾选、取消勾选、普通注册限流和窄屏显示。
  • 在真实 Linux.do 环境验证新用户未同意被拒绝、同意后注册,以及注册关闭时已有用户仍可登录。
  • 升级前备份,在 PostgreSQL 上验证版本 32→33;前后端一起发布。当前同意标志不提供长期版本化签署留痕。

多模态列表与分镜表合并回归

  • 合入 PR #549 的图片 / 视频列表分析、动态表格、视频脚本转换和批量生成设置;参考图上限前后端统一为 10。保留本地主分支表格布局、参考图提及、删除列、结果定位、手工行增量同步及单行重新生成。
  • 不采用按模型名称猜测多模态能力或自动切换模型的逻辑;保持能力强校验。数据库迁移仍为主分支版本 31,未重编号历史迁移,也未操作实际数据库。
  • 修复完成结果的批量跳过 / 显式重生成边界、设置弹窗提交前状态复核、分镜行身份和编辑内容保留、抽帧排序 / 去重 / 部分失败时按来源与时间绑定。
  • 77 项前端专项测试通过,包含真实表格组件明暗主题静态渲染、只读边界、列表解析、分镜转换、参考图同步和生成筛选;类型检查及生产构建通过。后端数据库、协议以及批量表 / 模型能力相关专项测试通过;插件归档与源清单一致。构建仍有大于 500 kB 的 chunk 警告。
  • 真实浏览器检查列表模式切换、动态列编辑、参考图拖拽 / 提及、设置弹窗和结果定位;使用明确配置多模态能力的真实模型验证图片 / 视频分析、分镜关键帧抽取与后续图片 / 视频生成,覆盖跨域视频和部分抽帧失败。本轮未启动开发服务、调用真实上游或部署,静态渲染和构建不代表端到端验收完成。

Agent 任务诊断与模型选择强校验

  • 已修复:成功任务不再由空错误文本生成“任务未完成”;执行失败与回写失败独立保留。模型选择缺失、不完整、混用、null 和空白值在读画布及产生草稿 / 审批 / 收费任务前拒绝,返回字段级修正信息;未知字段继续拒绝,不自动选择模型或重放收费任务。
  • 已修复:出站 DNS 失败使用 502 / upstream_dns_failed,保留内部原因链且不公开请求地址;Agent 按持久诊断展示 DNS 原因,不修改代理、解析器、私网放行或自动重试策略。
  • 本地专项回归:Agent 参数与执行流程、任务诊断、出站 DNS / 取消 / SSRF、HTTP 错误脱敏通过;缺失模型选择不会新增任务、账单、审批或画布草稿。
  • 全量回归发现 TestDeleteGeneratedAssetTaskReferences/failed_output 查询 resource_deletion_jobs 时遇到 SQLite 表锁;该用例单独复跑通过,未修改资源删除逻辑或增加重试,仍需排查并发稳定性。
  • 部署后检查真实模型渠道域名及后端 DNS;在真实 Agent 会话中验证失败提示、纠正参数后重新审批,以及成功任务与回写失败的分离展示。本地回归不等于部署 DNS 已恢复,也不替代真实供应商与浏览器验收。

画布 Agent 入口拖动

  • 右下角 Agent 图标支持鼠标和触屏拖动,使用指针捕获与 6px 阈值区分点击和拖动;拖动结束不打开面板,中断或失去捕获时结束手势,不传播到画布。
  • 位置作为独立本机 UI 偏好保存,重新打开画布或收起面板后恢复;限制在可视范围,窗口缩小时自动回位。方向键移动 10px,Shift + 方向键移动 40px,保留键盘点击打开。
  • 前端类型检查与 20 项专项/相邻测试通过,覆盖真实生产 hook 的点击、拖动、取消、丢失捕获、多指隔离、持久化和键盘/缩屏行为。
  • 本地浏览器访问跳转登录,未完成登录后真实画布验收;需验证鼠标/触屏拖动不带动画布、不误开面板、刷新恢复,以及明暗主题和窄屏边缘显示。专项测试不替代浏览器验收。

DashScope Wan 3.0 视频协议插件

  • 管理端模型测试:wan3.0-video / dashscope-wan3-video 真实上游通过。
  • 画布文生视频与首尾帧完成并落盘。

系统模型同页渠道与模型管理

  • 规格列更新为成本价 / 销售价 / 利润率,按次、按秒、文本输入/输出/缓存和视频 Token 分别展示;缺失配置、零售价利润率显示 —,亏损显示负利润率。

  • 支持跨页多选最多 100 个模型统一调价。弹窗打开即展示模型,一行一个模型,列为模型展示名、渠道展示名(上游模型 ID)、规格、成本及售价输入框;多规格在模型行内纵向对齐,不拆成多个模型行,规格上游覆盖单独标注。

  • 调价弹窗模型价格列表进一步压缩行高:上下留白 6px、行内文字间距 2px,常规尺寸售价输入框与利润率同排,扩大售价列并保持规格对齐。弹窗居中固定高度 900px(不超过视窗高度减 48px),列表填充剩余空间并内部滚动,短屏允许内容区滚动;紧凑效果与滚动仍待真实页面视觉验收。

  • 目标利润率和 0–6 位小数(默认 2 位)实时重算,旁边增加「重新计算」按钮,按当前参数对所有规格精确四舍五入。重算覆盖手动值并明确提示;之后可逐项修改,提交最终输入售价。服务端强校验归属、成本、价格和模型/规格版本,事务保存,冲突整批回滚,不改成本或启停状态。

  • 前端类型检查、69 项专项及相邻回归测试通过,包含真实表格组件渲染、多规格单模型行、输入框最终值、精度和手动价重算。后端调价与相邻成本/删除测试通过,覆盖真实 HTTP 登录/管理员权限、整数/null/零售价、最终手工售价保存、过期版本拒绝及并发冲突事务回滚。验证使用内存 SQLite,未进行 PostgreSQL 或浏览器验收。

  • 待登录后的真实页面验收:多选/跨页/切换渠道,修改比例/精度后实时计算,手动编辑后点击「重新计算」恢复所有规格价格,逐项编辑保存、成功刷新与错误保留;覆盖未配置成本、零成本、Token 多计费项、长名称、明暗主题、窄屏、表头与规格对齐及滚动。不操作现有环境真实价格数据。

  • 样式细化:渠道列表改为留白分组与中性选中描边,数量与启停状态分别呈现;模型头部说明成本口径,规格与成本分行,操作列固定在右侧,超过三个规格可展开查看。

  • 规格成本读取管理员接口已有的 priceTiers[].costPricing,与销售价分开呈现;未配置成本明确提示,显式零成本正常显示,异常或缺失数值显示 —。

  • 本轮 49 项专项与相邻回归测试、前端类型检查通过;新增成本摘要真实组件渲染测试,覆盖成本/售价隔离、零成本、缺失/异常值、Token 单位、规格选择器与展开内容。样式细化仍需在登录后的真实页面检查明暗主题、长名称、多规格行高、横向滚动与固定操作列。

  • 系统渠道入口改为同页工作区:桌面左侧约 20% 展示渠道搜索、状态筛选、新增和排序,右侧约 80% 展示当前渠道信息与模型管理;移除模型管理的二级页面和返回入口,窄屏改为上下布局。

  • 保留渠道编辑、复制、启停、删除及模型拉取、选择导入、编辑、排序和批量删除。新增或复制后自动选中渠道;切换渠道时隔离模型列表、筛选、勾选和编辑状态,渠道与模型加载失败显示重试入口。服务端仍使用原分页接口,左栏分批读取全部渠道,避免默认仅展示前 20 个。

  • 40 项专项及相邻回归测试通过,覆盖渠道筛选与选择回退、更新后选中数据、真实模型管理组件静态渲染、同页结构,以及既有模型导入、批量删除、排序和编辑规则;前端类型检查通过。

  • 本地真实 /admin/channels 路由跳转登录页,未完成登录后的浏览器验收。需检查明暗主题、桌面 20/80 比例、窄屏上下布局、左右滚动、搜索及切换、新增/编辑弹窗;确认新增/复制后选中、删除当前渠道后的回退、多页渠道完整加载和快速切换不串模型。静态渲染不等同于浏览器或真实写入链路通过。

工作台菜单表面与素材显示密度

  • 根据焦点样式反馈,内容库筛选下拉取消鼠标 / 触屏点击后的粗外圈,聚焦和展开改用柔和底色;工具栏区分指针与键盘输入,键盘聚焦保留 1px 细轮廓,不主动移除焦点。离开工具栏后恢复键盘默认状态,相关复用筛选入口同步生效。本轮 12 项专项测试及类型检查通过;指针 / 键盘切换仍需真实页面验收。
  • 顶部和侧栏账户菜单共用无描边、无投影表面,去掉箭头、装饰分隔线和积分卡渐变;清理旧版 ant-popover-inner 覆盖,使用当前组件的 ant-popover-container。
  • 用户工作台 Select、Dropdown、Popover 通过显式组件类共用柔和表面和中性选中态;内容库工具栏的 Select 统一使用 filled 变体,保留禁用、危险操作和键盘焦点状态。后台、画布编辑器的通用浮层以及 Modal / 通知不纳入本次修改。
  • 修复素材密度状态被固定 224px 网格覆盖的问题:舒适 / 标准 / 紧凑分别采用 272 / 208 / 160px 卡片最小宽度,随容器自动换列,窄容器不会超宽;保持原有本地偏好值。密度入口补充无障碍名称,网格图标前置,恢复下拉箭头。
  • 13 项专项测试通过,覆盖偏好恢复、密度尺寸策略、真实工具栏静态渲染与浮层配置、主题 token、样式边界及 CSS 层顺序;前端类型检查、生产构建和 git diff --check 通过。构建仍提示部分 chunk 超过 500 kB,未在本次进行无关拆包。
  • 本地真实 /assets 路由跳转登录页,尚未完成浏览器视觉与交互验收:登录后在明暗主题检查两个账户入口和列表菜单;切换三档密度、刷新恢复偏好,检查窄屏、长文案、禁用态和键盘导航。静态渲染及尺寸策略测试不等同于浏览器验收;未部署线上。

Agent 磨砂面板与紧凑操作区

  • 根据视觉反馈增强磨砂:外壳底色混合比例由 88% 降至 68%,背景模糊调为 32px、饱和度调为 145%,加入轻微柔光而不增加描边;保留减少透明度偏好的不透明降级。模型选择框由 144px 加宽至 208px,保留最大宽度限制、操作区换行和完整名称悬停提示。
  • 真实 Agent 组件改为磨砂外壳、无分隔线头部、柔和消息与工具表面;新增空态技能入口和只填草稿的创作建议,保留审批与错误状态。
  • 执行权限入口只显示当前模式图标,点击打开原权限选择菜单;只读、请求审批、自动执行使用不同图标,悬停提示和无障碍名称保留当前权限。Skills 入口缩短为 Skills(x)。
  • 左上缩放手柄向面板内部偏移并改为对角缩放图标,保留拖动和方向键调整;欢迎语从品牌配置读取名称,显示「在这里,和{品牌名称}让灵感,慢慢成形」。
  • 发送按钮从 36px 缩小为 28px、箭头从 16px 缩小为 14px,去掉发光阴影;停止按钮同步缩小。发送、空草稿禁用、发送中禁用逻辑不变。
  • 27 项专项测试通过,覆盖空态品牌文本转义、空画布入口、三种权限图标、发送禁用状态、面板尺寸算法、工具消息和 CSS 层顺序;前端类型检查通过。
  • 在已登录的真实画布复验明暗主题、窄屏及长品牌名称换行;确认左上缩放图标与键盘焦点不再被圆角裁切、权限菜单和 Skills 入口可用、发送按钮大小合适。本次本地浏览器停留在登录页,未完成这些视觉/交互验收;未调用生成任务或部署线上。临时预览网络拦截已撤销。

生产构建 CSS 层顺序

  • 本地产物确认:应用动态加载的依赖列表中,内置编辑器 CSS 先于全局 CSS;编辑器先声明 utilities 层,会使随后出现的 base reset 优先于工具类,影响画布和 Agent 等区域的间距、边框与布局。
  • HTML 最早内联样式固定 theme, base, components, utilities 顺序,不依赖生产拆包的 CSS 加载顺序;未调整画布业务逻辑或逐个组件添加覆盖。
  • 两项层顺序回归和一项相邻滚动条回归通过;前端类型检查与生产构建通过,并确认构建后的 HTML 在外部样式和脚本之前保留层顺序声明。
  • 登录线上真实画布确认同样的 CSS 加载顺序:Agent 内容区 px-5 py-5 计算内边距为 0px。仅在调试标签页头部临时声明层顺序后,内容区恢复 20px,头部恢复水平 16px,输入区外层恢复 8px 12px 12px;截图确认留白恢复。撤掉临时声明后内容区再次变为 0px,验证因果关系。未修改服务器、提交生成/审批或编辑画布内容,临时样式已移除。
  • 发布后复验画布与 Agent 的消息内边距、待办间距、输入区和工具栏,覆盖冷启动直达、站内导航、明暗主题。本次浏览器验证为暗色空对话面板,未覆盖原截图的历史审批会话;线上尚未部署修复。

PR #544–#546 合并后回归

  • 上传弹窗的调用方保留安装 Promise,上传期间防止重复提交和关闭;复制配置复用开发规范中的有效示例,并展示剪贴板失败。减弱动画保留动画完成事件,不以禁用动画名称阻断弹窗退场。
  • 易支付插件更新至 1.0.9:必须配置可信网关;查单和通知强校验订单、金额与流水,保留长数字交易号精度;只允许明确的支付跳转协议。非成功通知在入队前拒绝,避免占用到账事件的幂等键。源码、跨平台可执行文件和插件包保持一致。
  • V2 查单协议尚未核实,不新增猜测接口。V2 只实现下单与通知验签,查单、收银台刷新和安全关单不支持,需网关人工核对;V1 本地关单不等于上游链接失效。
  • 真实管理页面检查上传成功、失败、重复点击、关闭后重开,以及浅色/深色和减弱动画下的弹窗退场;确认剪贴板不可用时有明确提示。
  • 使用可信测试商户验证 V1 下单、查询、重复/篡改通知、到账幂等及本地关单后的迟到通知;V2 另行验证 RSA 回调,并确认不支持的操作不会显示成功。
  • 核对数据概览与订单列表、CSV 的财务口径及跨渠道模型分组,详见下一节。

PR #543 本次未合入:其已发布迁移校验和改写、管理员显式图片输入限制被覆盖,以及无关插件定制需要先拆分。主分支的迁移谱系、模型能力强校验和画布实现保持不变。

本轮验证:前端全量 bun test 1832 项通过,生产构建(含类型检查)、项目 lint 和 CI 涉及文件的格式检查通过;后端财务统计(含 SQLite 集成)、模型分组、易支付插件与真实插件 RPC 专项通过,六个平台产物及插件包校验通过。后端 go test ./... 有一项素材删除测试 TestDeleteAdminResourcesSupportsPartialSuccessAndBatchedReferences 遇到 SQLite 表锁,其测试和对应删除逻辑本轮未改动,单独连续复跑 3 次通过;全量结果仍记为未通过,不能用专项复跑替代。尚未做浏览器、真实商户或部署后验收。

数据概览财务统计与模型一级分组

已实现:移除数据概览的独立价格编辑入口;按系统模型订单快照汇总已结算收入、成本、利润与利润率,并同步 CSV。“模型展示名(一级目录)”支持搜索、选择跨系统渠道已有分组及输入新分组。

自动化验证:后台 UI 回归测试 17 项通过,前端类型检查与生产构建通过;财务汇总、实际用量成本和无效成本价格专项测试通过。本轮合并复测已完成 SQLite 集成测试,此前本机 GCC/CGO 阻断不再存在;以下真实页面与数据链路仍待验收。

缺失字段修复验证:新增 4 项测试直接执行模型表格财务列的渲染函数,覆盖未返回或空财务对象、零金额、部分成本和亏损;与后台 UI 回归测试共 21 项通过,前端类型检查及生产构建通过。

  • 在真实数据概览切换时间、模型、渠道和用户,核对订单去重、部分成本提示及 CSV 金额;确认退款、未结算订单不计收入。
  • 工作流上传、结构查询、轮询、下载和取消相关日志不承载订单金额;核对 CSV 与概览一致。
  • 后端响应缺少财务统计时,页面应保留其他统计并显示提示,金额为 --,不误报零费用或暂无订单;后端更新并重启后刷新,确认财务数据恢复。模型分组列表未返回时编辑器仍可输入名称。
  • 检查浅色、深色与窄屏下的费用区域、模型表格横向滚动及长金额换行。
  • 新建或编辑模型,在“模型展示名(一级目录)”选择其他渠道已有分组;输入新分组保存后再次编辑,确认下拉更新且创作端归组正确。

CI 检查修复与镜像构建提速

  • 修复导演台 DEV 复现入口在 React 初始化前请求 /api/public/appearance 导致的 E2E 502:入口和 Provider 共用精确路径隔离,普通页面与生产环境仍执行外观初始化,未放宽浏览器错误断言。
  • 外观启动与导演台专项测试 54 项通过,包含执行真实 main.tsx 分支的 9 项新增回归;生产构建(含 TypeScript 检查)通过,仍有 chunk 大小告警。
  • 在 GitHub 重跑 Director P0 Chrome E2E,确认六个场景不再出现外观接口 502;本轮未启动本地开发服务器或执行 Chrome E2E,不以入口回归测试替代浏览器验收。
  • 修复画布连线可见性文件的 Prettier 格式;增量格式检查改用 Prettier API,移除会触发 EPIPE 的管道比较,覆盖新文件、历史格式、无父提交、全零基线和错误传播。
  • 本地前端类型检查、Lint、1844 项测试通过,其中包含 20 项 CI 格式检查与镜像复用/晋级回归;两个 Dockerfile 的 BuildKit 检查无警告,Actions 工作流通过 actionlint。
  • 使用原失败运行的提交区间重跑实际增量格式脚本,检查通过且未再出现 EPIPE;原生 ARM64 前端 Docker 镜像构建通过。
  • 后端本地 Docker 完整构建在 Go 依赖下载阶段被 proxy.golang.org 的 EOF 阻断,两次同类失败后停止原路径重试;尚不能据此确认后端镜像完整构建通过,未改用不可信依赖或吞掉错误。
  • 在 GitHub 验证质量检查失败时不构建、不更新镜像标签;确认必要检查规则匹配可复用工作流的实际名称。
  • 验证 AMD64/ARM64 原生后端构建及支付插件 smoke、前端静态资源单次编译;检查最终镜像的两个架构和实际容器运行。
  • 连续推送同一 SHA 的 main/tag,确认复用已构建摘要;模拟旧 main 晚完成、镜像不存在、GHCR 鉴权/网络失败,确认不会错误降级或回退 latest。
  • 比较冷/热缓存耗时,使用 go-test-timings 分析 internal/app 的慢测试。本次未删除测试、未调用真实收费模型、未推送镜像或发布线上版本;不能宣称云端耗时已经降到固定分钟数。

画布素材链路与工作条改造(2026-09-19)

已实现:

  • 素材库已有手动新增、重命名、删除分类,以及分类筛选和批量移动能力。
  • 画布支持“设置隐藏节点连线”:开启后隐藏普通连线,悬停、聚焦或选中节点时显示关联连线。
  • 画布底部素材入口改为带“素材”文字和数量徽标的按钮;手势切换恢复无文字的纯图标胶囊滑块,不使用标签按钮外观。
  • 手势图标固定为 16px,统一选中 / 未选中描边粗细,未选中态使用不透明颜色而非整体半透明。工具栏切换专项覆盖普通 / 紧凑尺寸、无文字及单个圆形滑块的真实组件静态渲染;尚未完成浏览器视觉验收。
  • 远程素材展示统一走资源文件地址;Blob 只保留给字节处理和本地缓存,不作为远程媒体展示 src。
  • 画布生成视频在进入成功态前先完成 Blob 缓存;缓存失败不得标记成功。
  • 文本节点字号随节点尺寸联动,普通文本、富文本和编辑态保持一致。

自动化验证已完成:画布连线可见性与文本字号专项测试通过,前端类型检查和 git diff --check 通过。以下仍需真实页面验收:

  • 登录真实账号打开素材库,新建、重命名、删除分类并移动素材;确认刷新后分类和素材归属仍正确,删除分类不会删除素材文件。
  • 在浅色、深色主题和窄屏布局下检查画布底部工作条,确认素材数量徽标、选择 / 移动切换、键盘焦点和提示文案可读。
  • 开启隐藏节点连线后,确认默认连线不可见且不可点击;悬停、聚焦、单选和多选节点时只显示关联连线,取消交互后恢复隐藏。
  • 使用真实视频生成渠道验收:资源缓存完成后再显示成功;网络或资源下载失败时显示失败,不出现“成功但视频不可播放”。
  • 调整文本节点宽高,确认普通文本、富文本和编辑态字号都随尺寸变化,极端尺寸仍在可读范围内。

Agent 工具诊断与错误恢复

针对交互日志中的字段误报、输出可引用状态被误认为输入缺失、已绑定任务无法诊断、展示字段导致审批快照失效等问题,调整工具的数据合同和共用准入规则。没有新增场景关键词路由、自动选参考图、自动重试生成或新的系统提示词规则;工具说明明确区分编辑画布和提交收费生成,去除具体广告场景例子。

  • 后端 go test ./internal/app -run 'TestCloudAgent' -count=1 通过:操作字段错误与修正后的预览、失败/取消任务诊断及跨用户/画布隔离、敏感错误脱敏、已绑定任务拒绝、展示信息自动保存不阻断审批、实际内容变化仍阻断、取消来源只记录一次;使用临时 SQLite 和模拟任务,未调用收费模型。
  • 真实模型验收:相同画布分别请求“只连线”“只创建节点”“生成视频”,确认工具选择符合意图;读取失败视频时能区分产物不可引用与实际任务错误,按字段诊断修正参数,不自行换节点重复生成。
  • 发布后验证页面引用标签与任务错误可见性、审批期间移动/缩放节点及自动保存、取消后导出日志中的来源与关联任务。旧审批快照算法变化时需重新读取审批;未做线上部署或真实收费模型对比,不能以合同测试代替模型行为验收。

Agent 媒体提示词引用标签

Agent 创建或续用未提交媒体草稿时,保留已有 @图片N / @视频N / @音频N 引用,为遗漏的已选画布素材补齐带名称的引用块。各类型独立编号,目标入边与任务参考数组顺序一致;草稿、审批与实际提交使用相同提示词。模型工具说明同步要求在对应描述中使用引用标签,编号越界和补齐后超长均在提交前报错。

  • 后端媒体、画布阶段事件与审批专项通过,覆盖编号与顺序、已有引用不重复、无引用任务、临时标注图、长度上限、草稿持久化、审批后提交及重放不重复收费。
  • 前端 11 项实际引用解析与生成上下文测试通过,覆盖图片/音频/文本混排、槽位编号、引用移除和再次提交。
  • 更新后端后,在真实页面验证 Agent 生成节点中的引用标签、缩略图/音频标识、刷新和续用草稿。本次未进行浏览器验收或线上部署;历史节点不自动补写。

MiniMax H3 视频失败原因透传

MiniMax Hailuo Video V2 / H3 插件更新至 2.0.1,创建和查询均优先读取 task.error.message,并识别 task.error.code。参考图片尺寸不符合要求等具体错误通过已有任务错误字段返回,避免被替换成“上游返回失败状态”。补回该插件的可维护源码目录,并同步插件包和接口文档。

  • 插件专项回归覆盖嵌套错误、缺少任务状态、具体错误优先级、已有错误格式和成功响应;相邻视频媒体角色测试通过。
  • 后端模拟 HTTP 上游验证创建失败与轮询失败,具体原因进入任务错误文案,且不重复提交;前端实际错误格式化函数和画布失败元数据保留该原因。插件包与源码一致,其他请求、结果映射保持不变。
  • 更新线上插件后,以真实失败任务验收画布和任务详情的错误展示;本次未部署、未调用收费模型。历史失败任务已保存的通用错误不会自动改写。

模型展示名归组与管理员积分成本

创作目录固定直接读取系统渠道模型,一级按模型展示名跨渠道分组,二级按各模型的渠道展示名展示;删除渠道级“前台名称”,不反查逻辑模型。成本配置限定在管理员价格档编辑,按下单快照核算,后台请求记录与 CSV 显示销售价、成本价;普通用户目录、报价和账单不返回成本字段。

  • 前端生产构建(含类型检查)与 35 项专项通过,覆盖跨渠道展示名分组、独立调用身份、成本回填与微积分换算。后端数据库、仓储、HTTP handler 全套回归通过;全包编译与成本/目录专项通过,覆盖管理员权限、用户接口字段隔离、历史快照、精确用量核算、迁移幂等和备用线路成本切换。
  • 在真实后台对调历史填反的模型展示名/渠道展示名,确认 MiniMax H3 一级下显示秘塔(满血渠道);同名模型跨渠道归组,不同调用 ID 保持独立。
  • 在 PostgreSQL 部署验证 schema v27,编辑按次、按秒、Token 成本后刷新回填;生成成功后核对销售金额与成本金额,改价不得影响旧订单。
  • 用普通用户登录检查网络响应,确认没有成本配置、快照或成本金额;对管理员成本接口的读写均应被拒绝。

画布删除不再预加载关联素材

登录后的画布删除直接按 ID 请求服务端,不再先进入编辑加载流程,避免历史素材的 MIME 等字段校验阻塞删除。保留账号会话检查、服务端删除失败上抛及成功后清理本地缓存的顺序。

  • 26 项画布同步与素材合同专项测试通过;新增回归覆盖关联素材为 image/*、未缓存画布、重复 ID,以及批量删除部分失败后缓存与模拟服务端状态一致。
  • 在真实账号下从画布列表和编辑页删除包含异常 MIME 素材的画布,刷新确认已删除;自动化验证使用模拟 API,未删除实际账号数据。

站点皮肤、控件焦点与外观分类

主按钮填充改为主题参数统一管理,经典黑白采用黑白基础色与 115° 紫蓝渐变;复制主题后可分别编辑明暗模式的纯色/渐变、角度、常态/悬停/按下双色和文字色。创作页“开始创作”与前后台主按钮使用相同参数,危险、幽灵和禁用按钮不套用渐变。后台隔离用户工作台外壳与浮层样式。输入、选择、日期和搜索控件移除重复焦点阴影,保留键盘焦点与错误状态。站点及外观按品牌、登录页、欢迎页、SEO、页尾备案、皮肤六个 Tab 展示,页面草稿统一保存,欢迎页开关继续独立即时保存。

  • 前端生产构建、后续类型检查及 9 项主题/渐变专项通过,覆盖主按钮状态、纯色切换清理、复制隔离和非法参数降级。后端外观专项通过,覆盖保存/读取/公开投影、旧数据补齐、非法参数拒绝及经典主题保护。外观 JSON 升为版本 8,无表结构迁移。
  • 隔离浏览器在真实外观路由验证跨 Tab 草稿保留、撤销、校验定位、隐藏视频卸载,以及明暗模式下经典/自定义按钮常态和悬停颜色、输入框无阴影、键盘焦点可见及 390px 无横向溢出。会话与配置使用测试状态,未保存真实站点设置。
  • 渐变扩展后,真实创作页和插件页验证经典主按钮明暗配色;后台编辑器验证纯色/渐变切换、角度修改、跨 Tab 草稿保留、撤销后保存按钮禁用、危险按钮不套用渐变。修复旧配置归一化后误报未保存状态;选择框键盘导航使用可见外框。浏览器 API 为隔离测试配置,持久化由后端临时 SQLite 服务测试验证。
  • 用真实管理账号保存主题并刷新前后台,确认常态、悬停、按下、禁用、危险操作和浮层控件配色一致;验证媒体文件跨 Tab 选择后保存与刷新回填。
  • 渐变相关三文件回归为 16 通过、1 失败,失败为原有后台旧警告色别名断言。上一轮完整相关回归还发现模型编辑器网格 CSS 顺序、首屏内置 Logo 引用、BrandLogo 旧主题 hook 三项原有失败;未修改这些无关实现。

模型描述与稳定悬浮

后台渠道模型编辑的“模型身份”区新增“模型描述”,公开目录和会话配置透传到二级选项。说明行预留固定高度,一级菜单取消悬浮位移,二级选项取消高度动画;选中、悬浮及键盘聚焦仍显示说明。系统模型未填写描述时不生成名称推测文案。

  • 前端 21 项专项测试及含类型检查的生产构建通过;后端保存/公开投影/描述长度专项、数据库包全套迁移回归及接口路由/OpenAPI 冒烟通过。
  • 隔离浏览器加载真实选择器,连续六次切换悬浮的位置和尺寸一致;已配置/空描述、聚焦显示、渠道选择、键盘、明暗图标及 390px 无横向溢出通过。真实编辑组件验证描述回填、修改后提交去空白文本、清空后提交空字符串;接口被测试拦截,未写真实模型。
  • 在真实管理账号下保存、重新打开并清空描述,刷新创作端确认内容同步;在画布与创作页确认长描述、明暗主题与键盘选择。
  • PostgreSQL 部署验证 schema v26。此次迁移只添加默认空字符串列;关闭自动迁移时先执行 migrate-schema up 和 migrate-schema verify。不提供降级迁移,回退使用匹配的数据库备份与二进制版本;未操作实际部署数据库。

产品模型分组与渠道展示名

系统渠道目录按模型展示名分组,二级展示独立渠道名称和价格;“渠道展示名”留空使用所属渠道名称。选中值仍为渠道 ID 与模型调用标识,个人渠道保持原选择合同。模型 Logo 按需加载原色版本,移除菜单位置染色。

  • 前端专项覆盖同产品多个渠道、价格透传、名称变化不改调用身份、能力隔离、排序时元数据稳定,以及逻辑模型和个人渠道边界。
  • 后端 SQLite 专项覆盖字段保存、公开目录及会话投影、长度与管理员校验;版本 24 迁移重复执行保留旧记录的身份和价格。
  • 前端构建与类型检查通过;隔离浏览器在现有应用中加载真实选择器组件,验证 3 个渠道及 0.3/0.3/0.2 积分单价、鼠标和键盘选中身份、Esc 关闭、390px 无横向溢出,以及明暗主题下图标原色保持一致。使用测试配置,未修改真实渠道。
  • 数据库包全套回归通过;旧迁移测试夹具补齐基线应有的 billing_orders,覆盖 v24、v25 连续升级。
  • 使用实际配置确认跨渠道的产品模型标识、展示名和 Logo 一致,填写各渠道展示名后验证画布、创作页与 Agent 模型入口。
  • 在 PostgreSQL 部署执行版本 24 迁移并验证目录;迁移只新增默认空字符串列,不自动规范化现有产品模型标识。关闭自动迁移的部署先运行 migrate-schema up 与 migrate-schema verify;没有降级迁移,回退需匹配数据库备份与二进制版本。

全协议视频 Token 计费闭环

所有视频协议开放 Token 价格,包含 NewAPI 通道 2;系统渠道和前台逻辑模型共用报价与火山式 24 FPS 公式。平台额外预留 10%,成功后优先有效上游用量,无有效用量时按提交的公式快照结算并退回余量,账单标注公式来源。schema v25 新增公式快照和来源列,不重算历史订单。方案与回滚边界见视频 Token 计费。

  • 后端专项覆盖官方公式、不同代际像素、4K、参考时长非法值、音频分档、免费价、真实用量严格解析、账单退差和补扣。
  • SQLite 集成测试覆盖系统渠道报价与任务预留一致、两种逻辑模型价格策略、报价无账户/账本/任务写入、不可用渠道拒绝与非法素材数量拒绝。
  • 收尾回归覆盖内部模型别名下的报价/预留一致、统一价格保存强校验,以及最高合法单价、倍率、最终金额溢出和汇总后一次取整;预估与结算共用精确金额算法。
  • 前端专项覆盖表单保存/回填、音频 false 匹配、Token 单价摘要、新旧报价接口与预估边界文案。
  • NewAPI 通道 2、NewAPI 视频及自定义视频的 SQLite 集成覆盖报价、预留、无上游用量公式结算、退回 10% 余量和重复结算幂等;v25 迁移重复执行保留历史账单。
  • 最新后端 app/repository/database 视频计费专项、数据库包全套回归通过;前端 41 项计费测试、bun run build 和文档 bun run types:check 通过。未执行真实收费生成或真实数据库迁移。
  • 登录管理端配置有声/无声及参考视频价格档,在模型菜单、画布与短剧生产页变更时长/清晰度/音频,确认当前参数报价更新,切换免费档显示 0。
  • 用真实方舟与 Agent Plan 渠道完成视频任务,核对上游 completion_tokens、账单实际金额及退补差额;参考视频最低消耗可能高于公式预估,确认用户能查看预估边界说明。
  • 使用 Artbox 的 NewAPI 通道 2 保存“视频 Token”,完成无用量视频任务后确认公式结算、10% 余量退回、来源标注;重复轮询/回调不重复扣费。
  • PostgreSQL 部署验证 schema v25;新代码未启动或未迁移时不要用旧后端保存非 Ark Token 价格。历史无公式快照的收费订单缺少用量仍进入待核对。

Agent 事件校准与 operations journal 恢复

旧会话的画布增量可能缺少版本号或发生断流。现在增量缺口只触发完整画布校准;客户端保留已确认基线和未确认 operations,请求恢复时复用原 mutationId 与原始 payload。不同字段可合并,同字段或已删除对象不会被静默覆盖或重建。

  • 画布 operations、Agent 增量合并、事件调度与刷新测试通过,覆盖版本缺口、响应丢失、未确认请求重放、删除后迟到更新和幂等回执。
  • 前端类型检查与生产构建通过;隔离浏览器使用实际同步模块与 IndexedDB 模拟刷新恢复,未产生重复提交。
  • 登录真实账号验证断网、刷新和 Agent 事件缺口:同步面板自动恢复,未确认操作只提交一次,删除节点后迟到结果不复活节点。

画布 Agent 读取参数纠错

画布读取工具明确首次调用 {} 及三个可选字段;读取工具区分 JSON 结构、格式、未知字段和类型错误。可修正参数失败会将本轮工具规范反馈给模型,画布读取附带空对象示例;分页范围在数据库读取前校验。未获取反馈用户的实际失败参数,因此尚不能确认线上频发错误的具体触发方式。

  • 后端专项测试覆盖非法字段、类型错误、非对象、多对象、分页越界、错误反馈脱敏、规范随检查点保存,以及错误调用后修正、摘要和精读成功、对话完成、画布不被修改与跨用户读取拒绝。
  • 使用用户实际模型和渠道验收:首次画布读取使用 {};发生参数错误时能根据反馈修正调用并继续,而不是重复提交同样参数。
  • 聊天工具卡和调试导出能显示分类后的失败原因;确认已发布新版后端,再收集仍失败调用的工具参数及模型 / 渠道信息。

Agent 媒体错误分层与回写目标校验

修复生成失败与回写失败同时发生时原始生成错误被覆盖的问题。工具结果、运行失败事件与持久化失败说明分别保留生成状态、脱敏原因、目标节点及回写原因;媒体回写同时匹配目标节点和任务绑定,损坏会话的清理从任务元数据恢复目标,缺少目标时不猜测。能力速查新增从注册表生成的连线能力,工具说明明确连线不是普通归档或排版关联。快照、资源归属、审批和收费防重试约束保持强校验。

  • go test ./internal/app -run 'TestCloudAgent' -count=1 通过;新增回归覆盖生成/回写双重失败、目标删除或换绑、复制 taskId 不得改写其他节点、敏感错误脱敏、长错误仍可读、损坏会话清理及不会重复提交媒体任务。未运行收费模型或修改真实任务。

  • 真实渠道生成失败且目标节点已删除或换任务时,聊天与调试导出同时显示生成原因和回写原因,不再只显示通用“无法回写”。

  • 生成成功但节点消失时准确显示“生成成功,回写未完成”;保留任务结果,不重建节点或重复收费。

  • 分镜、Markdown 归档流程遵循注册表的 canSource / canTarget / inputKind,避免为了布局创建不支持的引用连线。

  • 快照过期时重新读取和审批;不把并发校验错误通过无条件刷新哈希掩盖。

画布 Agent 提示词与用户意图治理

对话主链路已将行为规则集中到版本化系统策略,动态上下文和输出恢复改为带来源的事实消息;移除默认创作授权、关键词推断强制参考和“做完新要求再继续旧任务”的催办。已送达插话进入下一轮可信历史,未变化清单最多提醒一次且不强制工具调用。详见维护边界。

  • 后端 internal/app、internal/handler 完整测试通过;策略版本断言同步后 internal/prompts 完整测试通过。最终 Agent/记忆/上下文专项再次通过,覆盖插话续聊、否定参考需求、计划取消、有界催办、恢复事件和四类模型协议适配。未运行真实模型或浏览器联调。

  • 画布已有参考图时请求“不要用参考图,只修正标点”或“解释图生视频”,确认不擅自引用、生图、建分镜或改写风格。

  • 运行中插话“停止生成,只给文字分析”,确认后续步骤遵循新要求;续聊“继续”仍保留该约束,不恢复已取消的生成。

  • 先规划多个镜头,再取消部分镜头,确认 plan_update 移除对应项,不把取消标成完成;遇阻时不会因未完成清单无限请求模型。

  • 用户只要求英文或指定输出格式时,确认默认创作汇报格式让位于用户要求;未命中记忆时不强制检索。

  • 在真实渠道验证输出为空、参数截断恢复及收费任务审批;自动测试不调用真实模型、不产生媒体费用。

  • 发布前处理旧版本在途/待审批运行,确认旧终态历史可读、新轮使用新策略;不要把合同版本变化视为可无缝恢复旧运行。

批量创作表、图片工具与视口交互

  • 已实现:按格选图、上传、连线、替换确认、清除和交换;列连接与单格覆盖共存,插入和删除按稳定行 ID 保留图格对应关系。全局提示词、AI 列表行及原有生成入口继续使用。
  • 已实现:入队提示词与资源快照、输入变更提示、超过 20 行的可见行渲染;图片自然比例、受保护显示尺寸、单选图片 Ctrl+滚轮、旋转编辑副本及资源保留;浮层避让和可退出的小屏专注模式。
  • 使用实际素材和模型渠道验收 Note 列表到批量表、批量生成、失败重试与输入冻结;自动测试不替代付费模型验收。
  • 真实浏览器验收中文输入法、缩放、连续滚动、只读/锁定/多选边界、保存重开及长时间媒体负载,并以相同输入比较性能。
  • 边界:本改动不改变服务端每次最多 500 条 operations 的限制;超大变更的完整提交需要配合客户端分批保存能力。

提示词放大编辑窗口

画布图片/视频节点“放大编辑”窗口改为 min(1200px, 92vw),编辑区最小高度 200px,右下角可对角拖拽,方向键可微调。不改变节点浮动面板的现有视觉。

PR #507 核心能力已按主分支实现保留,并补齐小视口尺寸约束、浏览器缩放窗口后的尺寸收敛、短屏滚动和展开态单一调整手柄。尺寸回归测试与 Vite 生产打包通过;真实 Chrome 组件验证(临时数据,未调用生成接口)覆盖图片/视频、参考图、首尾帧控件、明暗主题、窄屏/短屏、鼠标与键盘调整、切换节点重置。完整 bun run build 仍被既有 canvas-cloud-agent-panel.tsx 中未定义的 markdownPlainText 阻断。

  • 点击放大后窗口明显大于节点面板;右下角拖动手柄可同时改宽高,桌面最小约 560×320,小视口优先限制在视口减 24px 内。
  • 方向键可调整,Shift 加速;切换节点后尺寸恢复默认。
  • 窗口缩小后弹窗尺寸自动收敛;短屏下可滚动访问编辑区、参数和提交按钮,右下角手柄保持可达。
  • 展开态仅显示右下角窗口手柄;紧凑面板仍可独立调整输入高度。明暗主题继续跟随当前画布。

支付订单与对账 CSV 导出

已通过支付相关 Go 测试(含 SQLite 两连接重跑快照、10000/10001 行边界)、前端下载与请求测试、修改文件 ESLint 和 Vite 打包;Excel 隐藏实例打开测试文件验证中文、长数字/前导零、金额/积分及公式保护通过。完整前端构建的类型检查被现有 canvas-cloud-agent-panel.tsx 中未定义的 markdownPlainText 阻断;浏览器交互、WPS 和 PostgreSQL 并发仍待人工验收。

  • 在 /admin/payments 使用超过一页的订单,确认导出包含筛选后的全部记录;关键词、渠道、状态、创建/支付/入账时间及北京时间起止日一致生效。
  • 修改筛选条件未查询时不能导出;查询失败不能导出旧结果。快速切换筛选、分页及明细记录时,旧请求不能覆盖新数据。
  • 汇总包含失败原因、自动补发笔数和异常笔数;“已完成”但有异常仍如实导出。明细“仅异常”排除一致和已自动补发。
  • 重跑期间明细导出禁用;直接调用接口也返回 409。并发重跑时导出的记录和明细保持同一数据库快照,补充 PostgreSQL 实例上的并发验收。
  • 单次 10000 行成功,10001 行拒绝;前端显示业务原因且不下载错误文件。空结果、未登录和普通用户权限也需覆盖。
  • 用 Excel/WPS 验收中文、含逗号/引号/换行名称、长数字及前导零订单号、微积分和公式触发文本。数字订单号的单引号保护前缀属于预期;不要按数值列导入。
  • 检查明暗主题、窄屏筛选换行、键盘操作及导出 loading;本清单中的人工验收尚未由用户确认。

火山方舟 Agent Plan 图片 / 视频插件

  • 新增官方协议插件:volcengine-ark-agent-plan-seedream(provider volcengine-ark-agent-plan-image)与 volcengine-ark-agent-plan-seedance(provider volcengine-ark-agent-plan-video)。
  • 与官方 Ark 插件的差异只在接入面:默认 Base URL 为 https://ark.cn-beijing.volces.com/api/plan/v3,创建路径分别为 /api/plan/v3/images/generations 与 /api/plan/v3/contents/generations/tasks;请求体、参考素材 role、能力档位与官方 Seedream/Seedance 对齐。必须使用 Agent Plan 专属 API Key,不可与 /api/v3 官方 Key 混用。
  • 宿主已把 Agent Plan 协议纳入与官方 Ark 相同的能力默认值、Token 计费校验、方舟素材引用、取消任务与前端 payload 分支。
  • 待管理端安装这两个 .yan-plugin 后:分别创建图片/视频渠道,确认默认 Base URL 为 /api/plan/v3;用 Agent Plan Key 文生图、参考图生图、Seedance 文生视频与全模态参考成功;故意混用官方 Key 应失败;官方 volcengine-ark-* 渠道行为不受影响。

Seedream 声明式结果裸 b64_json(2026-09-17)

根因:volcengine-ark-seedream / volcengine-ark-agent-plan-seedream 响应把 response.data 原样映射为 images;解析回退把裸 b64_json 写入 DataURL 却未加 data: 前缀,随后 decodeProviderDataURL 失败。UI 报「声明式协议媒体结果下载失败:音频 data URL 格式无效」(旧错误文案误写「音频」),但管理端请求明细显示上游 HTTP 200 且已返回内嵌编码。修复:声明式媒体解析对裸 base64 按 output_format/kind 补全 data URL;错误文案改为通用「data URL 格式无效」。协议单测已覆盖。需重建后端容器后浏览器验收:

  • Agent Plan / 官方 Seedream 图片渠道(response_format=b64_json)文生图、参考图生图成功落盘,不再出现「媒体结果下载失败」。
  • 上游返回 output_format=jpeg 时结果可正常预览。
  • 管理端该任务对应 create 日志仍为 succeeded / 200,与前端成功态一致。

Agent Plan Seedream 误走可信素材(2026-09-17)

根因:isArkPlanVideoConfig / 前端 usesArkVideoAssetReference 仅按 Base URL 含 /api/plan/v3 判断,Agent Plan Seedream 与 Seedance 共用该路径,图片生成被误判为视频可信素材路径,自动 CreateAsset 并把参考图改成 asset://,上游图片接口拒绝。修复:后端仅 mode=video 且非图片协议时同步可信素材;前端仅视频 mode + 视频协议(或非图片协议的 Plan BaseURL)才提交 asset://。后端单测已覆盖。需浏览器验收:

  • Agent Plan Seedream / 任意 Base URL 为 /api/plan/v3 的图片渠道带参考图生成:任务进度无「同步方舟可信素材」,请求 image 为公网 URL 或 data URL,不是 asset://。
  • 同一张已录入方舟素材 ID 的参考图用于 Agent Plan / 方舟 Seedance 视频生成时,仍可走 asset:// 并跳过重复上传。
  • 官方 volcengine-ark-image / volcengine-ark-video 行为不变。

画布 operations 持久化与恢复验收

画布写入已统一为字段级、对象级 operations。客户端先把未确认请求写入账号隔离 journal,服务端在同一事务中提交画布 mutation 与 canvas_mutation_receipts;响应丢失、断网、刷新和后台重试都复用原 mutationId 与原始 payload。内部维护快照只用于资源保护和审计,不作为用户可见的历史树、预览或恢复入口。

  • 后端覆盖显式创建、字段合并、对象基线、幂等回执、原子事务以及删除后迟到更新不重建节点。
  • 前端覆盖未确认请求 journal、刷新恢复、自动重放、远端完整快照与本地未确认 mutation 合并。
  • 双标签页、断网、响应丢失、刷新和 Agent 媒体回写的真实浏览器验收:状态自动恢复,同字段冲突不覆盖远端修改,删除节点后迟到结果不复活节点。

首页常驻滚动通知(2026-09-18)

工作台首页顶部新增常驻滚动通知条,后台「运营 / 常驻通知」可配置类型、有效期、富文本标题和跳转。Schema 顺延为 v20-v22,不占用已发布的 v19 支付插件版本。待登录后:

  • 后台能新增、编辑、启用/禁用、设置生效窗口;公告 / 活动 / 更新 / 警告四种底色在明暗主题下都正确。
  • 前台顶部轮播展示生效中的通知;关闭后刷新仍保持关闭快照;外链新窗口、站内路径走前端路由。
  • 无生效通知时首页不出现空条,也不把页面顶栏顶出明显空隙。

开发镜像标签可在线更新到正式版(2026-09-18)

CANVAS_IMAGE_TAG=sha-5509b17 这类非正式标签不再被字典序判成比 v1.5.0 更新。待登录管理后台「系统配置 / 系统更新」:

  • 当前运行显示 vsha-...,最新发布显示 v1.5.0(或当前正式版),状态是可更新而不是「已是最新」。
  • 「开始更新」可点;更新完成后 CANVAS_IMAGE_TAG 变成正式版本号,页面两边版本一致。

创作参数弹窗表面色(2026-09-17)

画幅 / 清晰度 / 时长弹窗改用工作台 --user-surface-raised,选中块用 --user-control-pressed,不再画 1px 描边。待登录后打开视频生成设置:

  • 暗色下弹层颜色贴近输入条,四周没有细线框,只靠阴影浮起。
  • 选中的画幅、清晰度是实心底块,比例图标是色块不是空心线框。
  • 时长弹窗同样没有描边;浅色主题也没有细线框。

积分中心改为弹窗(2026-09-17)

独立 /wallet 页面已删除。顶栏积分、账户卡片充值、命令面板「积分中心」、画布顶栏余额,以及访问 /wallet 或支付回跳,都应打开同一「积分中心」弹窗,并回到首页。待登录工作台后:

  • 打开 /wallet 不再出现积分超市整页,而是弹出积分中心;刷新后停留在首页。
  • 顶栏积分胶囊、侧栏账户「充值 / 兑换」、⌘K 搜索「积分中心」、画布顶栏余额都打开同一弹窗,不离开当前页(/wallet 访问除外,会回到首页)。
  • 支付渠道回跳 /wallet?paymentOrder= 后弹出积分中心并展示支付结果。

对话工具条上移与输入区收紧(2026-09-17)

开始对话后,镜头时间线 / 画布中继续收到工作台顶栏,底部提示词面板变矮,视频/图片/文本横排在录音按钮左侧。待登录后发一条消息:

  • 对话页不再单独占一行工具条;顶栏中间能看到「镜头时间线」「画布中继续」、新建和历史。
  • 底部输入框明显变矮;模式切换在录音左侧,能看到「视频 / 图片 / 文本」文字。
  • 消息区右侧不是浏览器自带宽滚动条,而是细轨道;窄屏仍能切换模式、打开镜头列表和历史。

对话开始后输入区加宽与圆角底板(2026-09-17)

开始对话后,消息列和底部输入框从 820px 加宽约 30% 到 1066px;输入框圆角后不再垫一块更黑的矩形底。待登录后发一条消息:

  • 对话列、顶栏和底部输入框明显变宽,但仍居中,窄屏仍吃满左右边距。
  • 暗色下输入框四角只看到圆角卡片,背后没有一块尖角黑底。

首页默认图片生成(2026-09-17)

  • 新会话打开首页 /,模式页签默认选中「图片」,而不是「视频」。上次手动切到视频后刷新,仍应恢复视频。

侧栏签到加油站(2026-09-17)

积分开启且签到奖励大于 0 时,首页侧栏容量条上方出现领取卡片。待登录工作台后:

  • 未领取时固定显示「{后台品牌名}加油站」和今日可领积分数,点「立即领取」后积分到账,卡片消失。
  • 当天已领取、关闭积分或签到积分为 0 时不出现该卡片。
  • 卡片为白底黑按钮、积分数青绿,侧栏本身不是浅蓝底。
  • 收起侧栏后仍能领取;在积分中心弹窗外完成签到后回到首页,侧栏卡片也应消失。

侧栏账号容量进度(2026-09-17)

登录后首页侧栏左下角用户头像上方展示账号文件容量。待登录工作台后:

  • 展开侧栏时能看到硬盘图标、已用容量、剩余容量、总容量和进度条;数字为真实配额,不是占位。
  • 收起侧栏后头像上方仍有硬盘图标和细进度条,悬停能看到剩余/总容量。
  • 用量到 70% 变警告色,到 90% 或已满变危险色;点进度条进入资产页,两边数字一致。
  • 未登录不显示该进度;接口失败时可重试。

Agent 生成失败闭环与快照补全(2026-09-17)

媒体任务失败不再把整轮 Agent 判死;漏传画布快照由服务端补当前内容哈希;没有长期偏好层时本轮不暴露 agent_profile_read。待登录画布后:

  • 让 Agent 生成一条视频,在审批通过后若上游 503 / 失败:节点应变 error,对话应继续,Agent 能用人话说明失败,而不是整轮「执行失败」。
  • 同一轮先建文本节点再生成视频,即使模型没带 snapshotHash,也应能进入审批而不是报「缺少画布快照」。
  • 未设置用户/项目/画布偏好时,Agent 不应连打三次空的偏好读取;设置了用户偏好后才应读取该层。
  • 已提交的失败任务不得自动再扣费重提。

虎皮椒聚合支付插件(2026-09-17)

新增官方支付插件 official-payment-xunhupay(渠道 ID xunhupay-aggregate),不把虎皮椒协议写入宿主。待管理员在插件中心确认插件已开放后,到「财务 / 支付」填写 APPID、APPSECRET 和公网地址并启用渠道:

  • 插件中心支付分类能看到「虎皮椒聚合支付」,停用后钱包不再出现该渠道。
  • 配置保存后用户积分中心可选该渠道;扫码(默认)或 checkoutMode=redirect 跳转收银都能创建订单。旧库重启后应自动补上 plugin_version 列,不再 500。
  • 支付成功回调返回纯文本 success 后积分入账;查单可补单;未支付订单可关闭。
  • 错误 APPSECRET、伪造回调或金额不一致不得入账。
  • 暗色主题下扫码区是白底黑码,微信 Native 可直接扫;虎皮椒展示网关返回的二维码图片,扫码应进入支付而不是再看到一张二维码图。

支付插件跨平台可执行文件(2026-09-17)

官方支付包内同时带有 macOS、Linux、Windows 的 amd64/arm64 产物,宿主按本机 GOOS/GOARCH 选择,不再把 Linux ELF 当成 macOS/Windows 入口。待在对应系统上启用任意官方支付插件后:

  • macOS(Apple Silicon 或 Intel)开启渠道后可保存配置并创建充值订单,不再出现「支付插件可执行文件或其运行时加载器不可用」。
  • Linux amd64/arm64 与 Windows amd64/arm64 同样能启动对应 backend/provider-*,错误 APPSECRET 仍应失败而不是进程起不来。
  • 只有 Linux 产物的旧包在 macOS/Windows 上应提示格式或架构不兼容,而不是误报加载器缺失。

管理后台独立设计系统(2026-09-17)

管理后台改为独立 token / Ant 主题 / 壳层控件,不再消费用户端皮肤和 WorkspacePage。待管理员登录后核对:

  • /admin/settings/features:命令条不再是玻璃大卡,功能域是紧凑分组表,开关立即保存逻辑不变。
  • /admin/users 与 /admin:侧栏无树状分组线、无选中描边和左侧指示条;表格、分页与用户工作台视觉隔离;用户首页/作品库样式未被带动。颜色回到原来的中性黑白台阶,不是冷蓝灰。
  • 亮/暗切换只改变后台冷灰台阶,不套用当前产品皮肤的圆角、主色或动效。
  • 抽屉、下拉、确认框仍可操作;关闭积分/前台模型仍有确认。用户详情、支付订单、提示词版本、模型编辑器不再使用产品 AppDrawer/AppModal。

本轮继续收敛后台的信息密度与运维扫描路径:用户管理操作区收敛为「详情 / 停用 / 更多」,注册时间改为紧凑展示并保留完整时间 title;用户列表读取失败会清空旧数据,在表格内显示错误与「重试」,避免把过期列表当成最新数据。系统渠道页压缩渠道列表、模型管理和重定价区域的间距,让首屏能看到更多模型配置;功能开放页去除功能域外层重边框,改用层级背景和行级必要分隔。真实管理员权限、用户 CRUD、渠道保存/模型编辑仍待验收:本轮只用隔离 fixture 验证真实路由渲染与失败态,不代表真实后端写入已通过。

  • 后台专项测试 5 个文件共 36 项通过,覆盖密度偏好、请求明细、分析计费、主题隔离、用户/渠道回归;前端 TypeScript 检查与生产构建通过(仍有既有大分包提示)。
  • 使用真实管理员账号复验用户筛选、分页、详情、停用/删除权限与失败重试;验证真实渠道保存、模型编辑/重定价和功能开关写入,不用 fixture 结果替代服务端验收。

模型选择器、画布摘要与首页视频入库

  • 全站 ModelPicker 统一为先选品牌、再选模型的左右二级菜单(左品牌轨 + 右模型列表),含 Agent 对话、审批卡、章节提取、分镜脚本节点、项目设置。窗口窄于 720px 时才收成单栏。
  • 「提取章节角色、场景与道具」及同类默认 ModelPicker 品牌列表改为纵向卡片;Agent 对话审批卡切换生成模型同样不再横排重叠。
  • 大画布 Agent 不再因摘要超过 64KB 整轮拒绝:按约 60KB 截断节点列表,omittedNodes 标明未列入数量,细节仍用 canvas_get_state。
  • 首页创作视频宽高未知(0)时允许入库并展示成功;图片仍要求正数尺寸。待登录后:打开提取弹窗、Agent 对话、画布脚本节点核对模型菜单均为左右二级;大画布可发送 Agent;首页文生视频成功后对话显示视频而非「素材字段 width 必须大于 0」。

Agent 计划清单、插话与提问(待用户确认)

  • 多步任务可出现待办清单:request_approval 下首次 ≥2 项会弹审批,auto 直接建清单。PlanBar 随 plan_update 刷新,全部完成后收起;新一轮第一拍就应带上未完成项。
  • 简单问答不应被强行催去建清单;有未完成项时只回文字会被催办(软约束,不验收真实产出)。
  • 运行中输入框可打字:发送走插话(下一步生效),停止按钮仍可用;本轮结束前未送达的插话应标「未送达」并可再发成新一轮。
  • Agent 调用 ask_user 后本轮收尾,输入框上方出现选项;点选或自由输入应开新一轮。
  • 官方「发送到 Agent」预填提示词仍可用。

Agent 个人记忆(待用户确认)

  • 用户在「设置 → Agent 记忆」或画布 Agent 设置的「个人记忆」批准、拒绝、添加、编辑、删除、导出导入;手动添加直接生效。
  • 记忆页视觉:顶部是筛选/添加,空态用产品空态组件;压缩优化收成次要区域(设置页在列表上方,Agent 面板贴在底部),「立即压缩」不再抢主按钮。
  • 可选择文本模型后立即压缩,或设为每天/每周/每月自动压缩;压缩走真实文本计费任务,完成后相近记忆应合并、含糊条目应被改写,别人的记忆不得被动。
  • Agent remember_lesson 写入待审;已批准记忆在系统提示里只出现索引(标题+适用场景),卡住或同类任务动手前用 recall_lessons(topic) 取全文。用户 A 的记忆不会进入用户 B 的会话。
  • 管理后台「运营 → Agent 记忆」可按用户、状态、关键词查看并删除,没有批准/拒绝按钮。
  • 只读 Agent 运行不应出现 remember_lesson;普通运行在真实画布/生成工具成功后才允许记录。
  • 新一轮系统提示可出现分类概览和最多 20 条索引,不应出现做法全文或路线。待办清单改挂在会话末尾,不能改写系统提示;同一轮连续模型调用应能复用前缀缓存。当前用户消息是本轮目标;跨轮只带最近 10 轮对话,接近 64KB 时丢掉更早轮次。记忆不得覆盖审批、预算或工具契约。

画布节点快速引用 Agent

  • 多选节点后,选区浮动工具栏应显示 @ 图标;点击「发送到 Agent」后,Agent 输入框应自动带入所有选中节点引用。
  • 单节点右键菜单(图片、视频、文本及其他节点)应显示「发送到 Agent」;点击后仅带入当前节点引用。
  • 引用应以节点 mention token 保存,发送前可以继续补充操作描述。

Agent 对话模型选择器复用创造页样式

  • Agent 底部 Composer 与设置页「对话模型」改为复用画布节点 / 创造页的 ModelPicker variant="creation":先选品牌、再选模型,不再把品牌挤成一行。
  • 目录只展示文本模型;图片、视频、音频模型不进入 Agent 对话选择。当前选中若不是文本模型,回退到第一个可用文本模型。
  • 待登录后打开画布 Agent:核对品牌列表为纵向卡片、点入后出现双栏模型列表且高度跟品牌列表走、不再被 300px 最小高度撑空;设置页同样;深浅主题与窄面板不裁切。

设置页页头与生成偏好精简

  • 设置页去掉「创作偏好 / 配置默认模型、生成参数和素材存储。」页头;仅在 ?continue=1 时保留返回创作按钮。
  • 「生成偏好」移除音频默认值与音频指令;音频参数仍在画布音频节点内设置。
  • 积分弹窗 Tab 与内容卡拉开间距并对齐左右缩进,避免内容卡圆角从 Tab 左侧露出。
  • 待登录后核对 /settings?section=preferences 不再出现页头与音频分区;打开积分中心切换「积分消耗历史」,Tab 与列表卡之间应有明确空隙。

侧栏图标、宽度与提示词面板

  • 用户端侧栏展开宽度从 180px 调整为 216px(约 +20%),折叠轨从 58px 调整为 70px;折叠态图标按钮同步加宽。
  • 侧栏菜单图标改为分色色块:创作橙、短剧蓝、画布绿、资产金、技能粉、插件紫、历史青;悬停轻微抬起并有图标摆动,激活项带同色浅底。
  • 导航项上下间距加大:展开行高约 44px、分组内 8px 间隙;折叠态行高约 62px、组内 10px。
  • 首页与对话中的提示词面板改为柔和渐变底、聚焦时抬起与光晕、胶囊工具条、分色图标、参考内容和开始创作的 hover 光泽;尊重减少动效。
  • 待登录后在 1440px 展开/折叠侧栏,核对首页 Composer 聚焦、工具按钮 hover、明暗主题和 390px 无横向溢出。

项目工作台头部导航

  • 项目详情导航从全局顶栏扩展区挪到页面内独立页头:左侧返回与项目名/状态,中间分段导航,右侧新建画布或章节定位。
  • 制作阶段改为纯文字分段控件,不再用图标+下划线+横向滚动条挤在顶栏剩余空间里;900px 以下导航折到第二行。
  • 路由、权限、画布创建和分镜章节定位逻辑未改。待登录后在 1440px、1100px、390px 及深浅主题核对标签完整显示、无横向裁切、概览/章节/分镜切换与新建画布。

Agent 生成审批、对话轮数与连线可读性

  • 媒体生成快照忽略节点位置,审批期间移动参考图或草稿可继续生成并保留新坐标;提示词、资源、锁定状态和连线改变仍拦截。画布修改与撤销保留完整布局校验。
  • 图片审批卡支持切换平台模型、画幅和质量,采用现有模型选择与图片设置控件;修改只影响本次生成,服务端重新校验并记录最终审批参数,拒绝或无效参数不创建媒体任务。
  • 移除历史 8 轮对话硬限制及策略 / capabilities 中遗留的 8 次模型调用声明;历史保留 64000 字节限制,积分预算、正数任务预算与单次响应工具数量限制继续生效。
  • Leafer 常态连线从 1px / 24% 不透明度提升为 2px / 80%,SVG 路径同步调整,缩放时线宽保持稳定。
  • 已通过后端新增回归:生成前后移动、内容冲突、模型参数修改、无效参数、跨用户拒绝、重复批准只生成一次、连续 11 轮对话和历史字节边界。未请求真实收费上游。
  • 已通过前端生产构建、审批 / SSE / 画布同步等专项测试,以及后端 HTTP handler 测试。Agent 专项除既有 TestCloudAgentNodeTypesExposeExecutableAllowList 外通过;该测试仍断言 7 种节点,当前注册表含批量创作表共 8 种,本次未调整该断言。
  • 独立浏览器组件验证已通过:真实模型选择及图片设置组件切换模型、质量、画幅,明暗主题连线显示,390px 设置区无横向溢出。使用测试模型数据,不能替代登录态和收费上游验收。
  • 待登录态验收:审批卡中切换图片模型、质量及比例;移动参考图和草稿后批准;密集画布在明暗主题与缩放下检查连线;超过 8 轮实际对话。当前浏览器访问需登录,未完成真实收费生成端到端验证。

用户端创作型工作台 UI 重构

首页创作区收窄

  • 模式切换、输入框与快捷入口归入独立的 960px 居中区域,精选作品保留宽幅布局。模式栏改为紧凑分段控件;输入区减高,统一 36px 工具按钮;快捷入口去除大卡片外壳与冗余示例文字。
  • 已完成登录态验证:1920px 下创作区为 960px、作品区为 1668px;1440px 深浅主题输入框均为 960 × 250px;390px 内容宽度为 366px,无横向溢出;模型下拉、模式切换、参考素材弹窗打开与关闭正常。
  • 前端 build(含 TypeScript)、lint 和 diff 检查通过。未执行收费生成;控制台仍有既存公告图片接口 500。

首页与内容库第二轮调整

  • 首页空态不再执行对话的自动跟随到底部;恢复历史对话仍沿用消息跟随逻辑。

  • 素材库分类(素材类型、业务分类、我的分类、回收站)改为左侧导航;桌面端 220px 粘性侧栏,窄屏仍收成内容上方横排。顶栏搜索只保留关键词和密度。

  • 积分弹窗「积分消耗历史」列表独立滚动,分页固定在面板底部;记录不足一页时也保留分页条。

  • 首页收敛标题、模式栏、输入区和四个并列快捷入口;移除旧 Composer 规则中的强制覆盖,让主题和选中态生效。

  • 技能页改为页标题、范围导航、独立搜索筛选、能力卡片;安装入口集中在页头。项目页增加标题与可展开的故事设置,输入区扩为三行起步。

  • 资产网格按最小 180px 卡片宽度自适应,避免固定列数挤压标题;密度设置仍保存原有偏好。

  • 修复窄屏隐藏侧栏仍占据 180px 的布局问题,统一列表和浮层的主题变量。

  • 功能入口移除模块级一次性检查标记,避免 StrictMode 清理后永远停在“正在确认功能状态”;仍使用真实功能开放接口与原权限判断。

  • 已运行浏览器验证:1440px、1920px 首页滚动位置为 0 且无页面横向溢出;390px 内容宽度为 366px;侧栏折叠为 58px;深浅主题输入区几何尺寸一致;模式切换可用。

  • 插件页改为页标题、横向分类与全宽卡片网格;设置页统一页头和内容宽度,积分弹窗文案改为用户操作说明。

  • 已验证技能无结果搜索及清除后恢复、项目故事设置展开/收起、积分弹窗打开;390px 侧栏展开后点击技能路由会自动收起。构建(含 TypeScript)、lint 和 diff 空白检查通过,构建仍有大 chunk 提示。

  • 已打开技能、资产、项目、设置、插件及历史路由。当前任务中心未开放,不能将权限阻挡页视为任务列表验证通过。

  • 待完成:画布核心交互、生成/上传/删除/兑换写路径、全部浮层深浅主题、离线与账号切换回归;当前改动不是所有用户页面的最终验收。

  • 已知环境异常:公告图片接口返回 500;参考站在验收浏览器要求重新登录,目前视觉依据为用户截图及已有测量记录。

  • 已完成全局用户端浅灰工作区、侧栏、顶栏、导航状态、首页创作 Composer 和画布项目侧栏的第一轮视觉收敛;保留现有路由、权限、API、缓存和画布交互。

  • 已为资产、技能、任务和项目页补齐统一的内容库壳层:最大宽度、工具栏、焦点态、卡片悬浮反馈、移动端内边距和减少动效策略;未改变这些页面的数据加载、筛选、分页、上传、删除、重试和恢复逻辑。

  • 画布积分入口已改为“积分超市”;钱包页已改为消费型“积分超市”入口,余额、兑换码、真实充值、支付状态和积分使用明细仍走原有接口与强校验。

  • cd web && bun run typecheck

  • cd web && bun run lint

  • cd web && bun run build

  • git diff --check

  • 登录后验证 /、/create、/canvas、/canvas/:id、/assets、/skills、/tasks、/wallet 的关键路径、空态、错误态和写操作。

  • 在 1200px、1440px、390px 视口核对侧栏、顶栏、Composer、画布 Dock、卡片裁切和横向溢出。

  • 登录后检查浏览器控制台、保存/恢复、生成失败重试、画布拖拽缩放连线及账号切换后的缓存隔离。

价格档上游键级联与重命名告警

  • 修复“管理端重命名渠道模型的产品标识 / 显示名称 / 上游模型 ID 后,任务请求仍把旧上游键发给供应商”的问题:价格档 provider_model_key 非空时优先于模型级上游键,此前统一价格档会把当时的顶层上游键固化为档位显式值,重命名后被旧值静默遮蔽。
  • SaveAdminChannelModel 现在在模型级上游键变更时,把与旧值相同的档位键级联更新为新值;管理员显式配置的其他上游 SKU 不受影响。前端编辑无价格档的旧模型时不再预填顶层上游键,统一价格档检测到与模型级不一致的存量上游键时展示告警并支持一键清除恢复“跟随模型默认”,模型级字段提示存在独立档位上游键。
  • 已通过后端 app 包级联与请求解析回归测试、前端价格档表单单测和生产构建;生产已验证:清除浏览器缓存并强刷后重新保存模型配置,后续请求实际发往新上游 ID。排查过程确认级联盲区符合设计——档位上游键若早于当前模型键谱系(改名发生在线上旧代码时期),来回改名需经过"改回旧键再改回新键"一轮才会被级联覆盖,期间需依赖管理端"清除并跟随模型"告警或直接修库;浏览器缓存的模型目录与 Agent 会话选中值在管理员改名后不会自动刷新,需重新登录或清缓存才会重建。
  • 已知未覆盖:前台逻辑模型(price_policy=channel)的路由快照同样会固化档位上游键(applyRoutedProviderSelection),本次级联只在渠道模型保存路径生效;逻辑模型路由如出现同类旧键残留,需重新保存对应渠道模型或后续单独处理。

生成素材删除的任务来源引用

  • 素材删除不再被已成功、失败或取消任务的输出结果及日志阻止;保留任务历史记录。任务输入、未结束或未知状态任务、画布和其他业务引用仍参与删除校验。
  • 该规则仅用于素材删除,后台孤儿资源清理和管理员资源检查仍保留完整任务引用,避免自动清理尚未入素材库的生成结果。
  • 已补充后端回归用例,覆盖任务状态、输入引用、画布引用、删除事务 Outbox、历史记录保留和自动清理边界;测试包编译通过,本地数据库测试因 CGO_ENABLED=0 无法初始化 SQLite,尚未验证通过。
  • 待部署验收:未绑定画布的生成图片可单个及批量彻底删除;被画布或其他任务输入引用时仍提示来源。删除后任务历史中的原文件不再可用,共享素材仍保留其资源。

画布统一 operations 写入与媒体保护

  • 画布手工编辑、Agent、媒体终态回写、预演台、创作提交和导入均通过统一 operations 服务提交;不存在整批快照覆盖入口。
  • 素材和画布按“资源先确认、画布后提交”顺序同步。资源缺失或绑定不一致时保留本地内容并进入自动恢复队列,不通过用户选择云端覆盖本地,也不重建来源不明的媒体或插件节点。
  • 已通过 operations、资源引用、幂等重放和删除顺序专项测试;真实浏览器仍需验证断网恢复、媒体回写和刷新后的状态投影。

欢迎页开放开关

  • 管理员在 /admin/settings/appearance 的英文品牌标识下方切换欢迎页,立即保存,沿用功能配置保存及审计流程,默认开启;功能开放页不再编辑该字段。
  • 欢迎页入口直接导入展示组件,Babel runtime 辅助代码固定独立分包(不按最小体积合并回路由),避免 AntD 反向加载工作台入口触发循环初始化错误。
  • 已通过前端类型检查和生产构建,并用构建产物在浏览器验证启用展示、关闭跳转、接口失败重试入口;外观页开关位置及真实管理员保存待部署验收。
  • 待浏览器验收:关闭后访客及已登录用户访问 /welcome、/welcome/ 均跳转首页;重新开启后恢复展示;配置请求失败时显示重试入口,不展示欢迎页内容。
  • 开关在进入页面时检查,已经打开的欢迎页不主动退出;静态图片、视频资源不受此页面开关限制。

思考模型 Agent 工具选择兼容

  • 当前 Cloud Agent 和首页创造规划入口均使用自动工具选择,不固定发送 tool_choice=required。后端仍防御旧任务、旧客户端和其他结构化调用携带的强制选择。
  • 首页创造规划提示词只声明真实注册的 creative_respond,并把画布、模型和素材上下文明确标记为只读快照;不再诱导模型调用并不存在的 canvas_* 工具或假报节点已创建、分镜已生成。
  • OpenAI Chat Completion 兼容协议的自动选择在首个上游请求中直接省略 tool_choice;显式思考模式还会移除旧任务携带的 required 或指定函数对象,内置协议和声明式已知协议均有回归覆盖。非思考模式保留强制函数选择,上游隐式思考仍保留 required → auto → 省略字段的失败后兜底。
  • 已通过 Agent 工具选择专项后端测试;待用百炼 qwen3.7-flash 与 DeepSeek 思考模型真实渠道分别验收首请求正文,确认不再出现强制工具选择参数错误,且模型仍能自行调用画布工具。

Agent 模型能力筛选与跨轮草稿续用

  • 模型工具支持按生成模式和真实参考节点筛选,复用统一模型目录的能力匹配;多图视频不再依赖模型名称猜能力。具体时长、画幅、音频和价格仍由目录配置与任务准入共同约束,不提供静默换模型兜底。
  • 可续用未提交的空白媒体占位节点、当前运行草稿和已结束且清理完成的同用户同画布草稿,保持原节点 ID;仍在审批、清理中、已提交任务、已有成品、锁定节点和跨用户 / 画布草稿不可接管。续用重新审批,不跳过收费授权。
  • 媒体策略明确用户要求生成且参数齐备时直接调用生成工具进入审批;仅改词不擅自收费。此行为仍需真实模型验收,不能以策略文本测试代替模型实际执行。
  • 已通过后端 app / prompts 两包完整测试;最终引用连线调整后再次通过 Agent 专项回归。覆盖双图筛选、无候选不兜底、非法引用与跨用户拒绝、草稿状态与权限边界、跨轮原节点续用、新审批前无媒体任务、审批后只提交一次及移除过期引用连线。未调用真实收费模型。
  • 待验收:配置文生视频和多图视频模型,带两张参考图选择正确候选;上一轮取消后在原节点继续生成并出现新审批卡;确认不重复建节点、只填词不假报已提交、拒绝审批不收费。

Agent 节点能力卡与结构化分镜

  • 节点能力 registry 已升级,文本、Markdown、图片、视频、音频、背板和分镜脚本均向 Agent 返回用途、适用场景、不适用场景和维护代价;媒体能力卡还区分单图、单镜头文生视频、图生视频、多图参考视频与音频用途,并明确仍须按真实参考节点调用 model_list 筛选模型。
  • 节点选择采用软路由:单画面和临时试验可使用轻量节点;多镜头、连续性、逐镜审查 / 生成、资产关联或交接维护时优先结构化分镜。系统不强制所有任务创建分镜,但禁止把普通文本宣称为具备镜头级维护能力的分镜表。
  • 新增分镜脚本创建、分页读取和单行追加 / 修改 / 删除工具。镜头行 ID 由服务端生成;修改和删除必须使用最新读取的真实 rowId 与 snapshotHash,写入继续经过现有权限、审批、快照冲突和画布持久化路径。
  • 后端相关专项测试、前端生产构建和文档类型检查已通过。待真实模型和浏览器验收:简单单镜头自主选择轻量节点,多镜头任务创建结构化分镜;审批前画布不变化,审批后可在分镜 UI 中逐镜编辑,连续对话不改用 Markdown 重建整表。

混合节点画布 Agent

  • 未注册 Agent 能力的节点(包括插件、配置、绘图节点)不再阻断整张画布的 Agent 摘要与分页读取;返回基础信息和 agentSupported: false,不读取任意 metadata,也不授予创建、修改或媒体引用能力。
  • 已补混合类型摘要、列表与指定节点读取、私有字段隔离、快照/连线保留和未支持类型创建拒绝测试。待真实账号验证混合画布能启动 Agent 并创建受支持的图片节点;不代表新增了插件节点编辑或全画布布局工具。

画布 Agent 预算与按需技能

  • 已取消前后端最多 8 个技能、生成预算 8 / 120 秒和固定模型循环次数约束;生成数与视频累计秒数默认 0 表示不限,积分、权限、生成审批和供应商实际能力仍强校验。
  • 技能仅保存版本与路径,读取正文按 12000 字符分页;支持总正文超过 128KB 的多技能选择。读取版本变化或跨用户访问拒绝;运行事件只存技能回执。
  • 上下文瘦身只卸载可重新读取的历史正文,保留调用配对、生成回执、用户要求及最近完整工具轮次;不宣称语义摘要或无限上下文。原始字节安全边界仍保留。
  • 已补后端回归:10 个大技能、正文不预存、分页、跨用户拒绝、版本变更拒绝、0 预算可见生成工具、大于 120 秒和正预算约束、上下文配对与生成回执保留。
  • 待真实模型验收:多技能任务中按入口选择引用、跨多页读取和上下文卸载后重读、视频模型支持的长时任务及收费审批;浅蓝用户消息在明暗主题下的交互外观。

素材 bytes 数字合同

  • 修复后端将 bytes: null 按数字零通过校验的问题,避免保存后被前端素材合同拒绝;图片、视频、音频、模型素材均覆盖。
  • 部署维护工具新增 migrate-schema repair-asset-bytes(默认只检查)和 --apply:仅使用同用户、同类型、就绪且大小为正的资源元数据修复;保留素材 ID、其他 JSON 字段和引用。无可靠资源的记录输出未解决报告,不填零;并发冲突或数据库写入错误整批回滚。操作步骤见后端数据库专题。
  • 已在 SQLite 和隔离 PostgreSQL 17 测试:只读预检、跨 100 条分页修复、缺失/null/字符串/负数处理、跨用户拒绝、合法值及其他 JSON 精度保留、重复运行幂等、写入失败整批回滚;待实际部署备份后执行并验收用户素材库。
  • 待确认:用户报错素材的实际 data.bytes 值及写入来源。此修复只阻止新的无效写入,不自动修改或删除历史素材;历史值需依据真实资源大小修复,不能批量填零。

百炼多模态图像协议插件(dashscope-qwen-image)

  • 新增官方协议包 plugin-packages/dashscope-qwen-image.yan-plugin,解决 qwen-image-3.0-pro / wan2.7-image-pro 无法调用的问题:这两个模型属于百炼多模态模型,走 OpenAI 图片端点会被网关判为“模型与端点不匹配”,官方错误码表现为 url error, please check url。
  • 协议形态:POST /api/v1/services/aigc/image-generation/generation(X-DashScope-Async: enable)+ 轮询 GET /api/v1/tasks/{taskId};参考图放在 input.messages[].content[].image(优先 Base64 data URL),不使用 /v1/images/edits 的 multipart。
  • 已由单元测试覆盖:端点与异步头、文生图只发 text、图生图按 order 排序并优先 Base64、size 采用 DashScope 的星号格式且未登记档位省略、enable_thinking 固定 false、响应从 output.choices[0].message.content[].image 取图、上游失败保留错误信息。go test ./internal/protocol/ 与 go build ./... 通过。
  • 待真实账号验收:用北京地域 Key 走一次文生图与一次图生图(换装),确认出图成功、参考图不报 url error。
  • 已知边界:协议用 originPath 声明请求路径,请求路径会替换渠道 Base URL 的路径段,因此渠道继续沿用 .../compatible-mode/v1 也能命中原生端点(.../api/v1/services/...);只有域名需要正确。协议把 size 映射为 1024 级竖版/方形档位,未登记的档位会被省略并交由模型自动推荐(官方要求像素面积 512512~20482048)。
  • 尚未处理:AI 模特页仍按“带参考图即走 /images/edits”的通用规则分支,未按协议能力判断;换成该插件后两阶段派生能否直接复用需实测确认。

Agnes 图像协议插件(agnes-image)

  • 新增官方协议包 plugin-packages/agnes-image.yan-plugin,解决 Agnes 图片模型无法调用的问题:内置 OpenAI 图片路径会固定发送 n,并按渠道能力开关发送 output_format 与顶层 response_format,而 Agnes 的参数表没有这些字段,POST /v1/images/generations 直接返回 HTTP 400 invalid_request,上游原话为“output_format 不是文生图队列支持的字段”。n 无法通过任何开关摘除,因此必须独立协议。
  • 协议形态:同步 POST /v1/images/generations(originPath),文生图与图生图共用同一入口。size 必填,由统一层质量归一为 1K/2K/3K/4K 档位,WxH 像素尺寸原样透传;画面比例走独立的 ratio 字段;参考图放 extra_body.image 并优先 Base64 data URL,多图合成传多张,不使用 /v1/images/edits multipart;输出格式只能声明在 extra_body.response_format(默认 url,可用 providerOptions.agnes-image.response_format 覆盖为 b64_json)。
  • 前端能力默认值同步新增 agnes-image 分支:尺寸按“比例 + 1k/2k/4k 档位”选择,关闭上游不支持的 output_format、顶层 response_format、透明背景和蒙版编辑,maxOutputs 固定为 1(该端点不接受 n,单次请求固定返回一张)。官方另有 3K 档位,统一层只提供 1k/2k/4k 三档,故界面不露出。
  • 已由单元测试覆盖:逐项断言 n、output_format、quality、background、顶层 response_format 与顶层 image 均不出现在请求体中,参考图进 extra_body.image 且按 order 排序并优先 Base64,比例落档位 / 像素原样透传 / auto 与空值回落档位,不在官方比例表内的取值在校验阶段拒绝,响应同时读取 data[0].url 与 data[0].b64_json。go test ./internal/protocol/、go build ./...、bun run typecheck 与相关前端测试均通过。
  • 已完成真机验收(Agnes 中国站 Key,agnes-image-2.1-flash 与 agnes-image-2.5-flash 各一轮,AI 模特页):母版与派生任务全部 succeeded,portrait_role 分别为 anchor 与 derive 并拿到 Agnes 的 task_* 号;调用日志里母版对应 /images/t2i/...、派生对应 /images/i2i/...,且两张派生图都被宿主成功下载。派生阶段能产出 i2i 结果,证明参考图确实经 extra_body.image 送达——内置 OpenAI 路径只会把参考图送去 Agnes 没有的 /images/edits,因此这条链路只可能由本插件完成。
  • 待验收:多图合成(单次传多张参考图)、providerOptions.agnes-image.response_format=b64_json 覆盖、以及 size/ratio 的实际取值。任务行只持久化 mode 与 metadata,调用日志也不记录请求体,因此档位与比例发出去的具体值无法从库中读回,需要抓包或在插件侧临时打印才能确认,目前只能由上游行为反推。
  • 渠道配置注意:模型协议改为本插件后必须重启后端,官方插件目录只在启动时装载;已保存过的 capabilityConfig 不会被新协议默认值覆盖,需要手动把尺寸参数改为 aspect_ratio、最大参考图设回大于 0,否则 AI 模特会退化为不带参考图的单阶段候选图。
  • 已知边界:默认输出 URL,由宿主立即下载并持久化;若上游图片地址无法公开回源,改用 providerOptions.agnes-image.response_format=b64_json。官方比例表只有 8 种,其他比例(如 4:5、9:21)在请求前即被拒绝,不会静默回落为 1:1。

云端 Agent 行为、能力和偏好分层(待真实环境验收)

  • 系统/媒体行为资源由后端发布物加载,运行快照记录策略和能力版本/哈希;用户 → 项目 → 画布偏好经归属校验和独立 revision CAS,合并 revision 固定到新轮次,旧轮次保留原快照。system prompt 只注入偏好清单,正文由 agent_profile_read 从固定快照按层读取。工具 schema、节点类型、可写字段和画布读取来自服务端节点能力 registry;收费生成还需实际媒体任务适配器。写入、审批与预算仍以服务端强校验为准。
  • 数据库 append-only 迁移 v15 为关闭自动迁移的部署创建 agent_profiles;OpenAPI、功能清单、代码地图和数据库文档已同步。相关 Go 专项测试与前端构建结果以本次交付记录为准。
  • 图片 / 视频 / 音频能力描述符允许更新标题和下一版提示词草稿,content 经字段合同映射到 metadata.composerContent;服务端回归测试覆盖失败视频节点,确认媒体结果、已提交 prompt、任务状态和引用问题不被覆盖。前端手工编辑与引用同步也已收敛到统一提示词写入器,纯函数测试覆盖三种媒体、空草稿、仅 storageKey 图片和文本节点。
  • 终态旧 Capability 轮次可作为不可变历史创建当前合同的新轮,父运行保持原始 JSON;旧合同活动运行会明确终止,不恢复模型或工具执行。历史结构损坏改为 409,不再落成通用 500。客户端提交错误区分服务端明确失败和未收到响应。
  • 审批预览与实际画布写入共用解析/校验/规划路径并固定 callHash;审批卡和 canvas_updated.actions 均携带节点标题、类型、修改字段、修改后标题及引用连线两端。解释信息不授权能力,执行仍校验归属、快照、Capability、锁和预算。
  • 在备份后的隔离 PostgreSQL 部署执行 migrate-schema up 和 migrate-schema verify,确认 v14→v15 后原有 Agent 轮次可查,新用户/项目/画布偏好能独立更新且不串账号。
  • 在真实登录态检查偏好编辑、并发冲突、三层继承、SSE 重连及续聊:修改偏好后新轮次使用新版本,旧轮次历史保持原样;试图在偏好中要求越权工具、跳过审批、任意 URL 或提升预算应被服务端拒绝。
  • 使用真实模型、计费与画布验证 read_only / request_approval / auto、节点精读/分页和 image/video/audio 生成的审批、收费限额、引用边界与失败恢复。静态测试不等于生产验收;系统策略 md 当前不是后台热更新。
  • 在真实画布分别选择失败和已完成的图片 / 视频 / 音频节点,让 Agent 修改标题与下一版提示词:编辑框应显示新草稿,旧媒体仍可预览或播放,已提交提示词、任务状态和引用状态保持不变;刷新后结果一致。
  • 对锁定媒体节点执行同类更新应被拒绝;尝试经 Agent 修改媒体 URL、storageKey、任务字段或其他未登记 metadata 也应被服务端拒绝,不能因 content 草稿别名扩大写权限。
  • 更新后重启本地后端,用调试包中的已完成父轮次 ag045cb29d5cebb44cb42cedb235d2fc5a 续发“继续操作”:应创建当前 Capability 合同的新轮,不再返回“系统处理失败”;父轮次状态和冻结合同保持不变。
  • 在真实审批和执行结果中确认:更新节点显示执行前名称、节点类型、修改字段和修改后名称;新增连线显示来源与目标标题/类型,点击可定位对应节点;普通 UI 不暴露完整内部 ID。

多角度编辑器与宫格切分交互

多角度改为贴在节点下方的 3D 轨道/天空盒预览(摄像头与天空盒切换、常用角度、方向箭头),宫格切分放在「图片工具」子菜单(预设 + 5×5 自定义点选),沿用当前 --fg/--bg 与 dock token,明暗主题共用同一套样式。

  • 打开图片节点「多角度」:面板贴在节点下方;拖动节点或平移画布时编辑器跟着节点走,不和节点分离。
  • 点「正面 / 左侧 / 右侧 / 背面 / 俯拍 / 仰拍」后滑条与底部「当前视角」同步;生成新角度仍创建子节点。
  • 切换浅色/深色:选中的标签、常用角度、镜头分段和滑条都跟随前景/背景,不出现浅色皮肤残留。
  • 「宫格切分」在节点工具栏「图片工具」里,不单独占一个工具栏按钮;与「裁剪 / 调整尺寸 / 标注」同一列表样式(图标 14px、标题/说明字号与左右对齐一致);点开后有 4/9/16/25 宫格预设,点「自定义」后 5×5 板留在菜单内不闪退,最少 2 格才会切分。
  • 宫格列表左侧小宫格图标垂直居中,右侧箭头约 10px,不出现过大的 LayoutGrid。
  • 切分后子节点按网格排在原图右侧,互不覆盖,并保留原图提示词。
  • 框选多张图后拖动:虚线选框跟着被选节点一起移动,松手后仍贴合,不留空框或错位。

Agent 增量联动与可点击操作留痕

  • 服务端将草稿、提交和媒体成功 / 失败 / 取消的节点增量与运行检查点一起持久化;前端 40ms 合批投影,不按每条完成 / 失败事件全量刷新。缺口、断流或冲突才单请求校准,发起间隔至少 1 秒,期间重复通知仅保留一次尾随校准。
  • 按钮与提交入口共用节点任务状态,排队 / 运行中禁用,终态解锁;旧事件不能覆盖已换任务的节点。无关拖动、提示词编辑和视口保留,同字段冲突明确提示,不静默覆盖。
  • 参数选择允许用户授权的目录默认值,已接受推荐方案不再追加文字确认;图生视频参考图只进 referenceNodeIds,校验错误说明可执行修正方法。独立收费审批、能力和预算校验保持不变,失败不自动重提收费任务。
  • 聊天保存创建 / 更新 / 引用的节点名和节点 ID,点击复用画布聚焦,同一画布操作按工具调用 ID 去重;失败显示节点名、任务 ID、短摘要及可展开的完整错误。
  • 96 项前端专项测试通过,覆盖 50 个不同节点完成的一次 Store / 编辑器投影、零全量 GET,50 条事件合批、限频 / 单请求、乱序 / 幂等、新任务隔离及冲突保护。后端 TestCloudAgent 专项覆盖失败 / 取消终态、画布删除后的失败检查点和审批边界;前端构建、文档类型检查通过,仍有既有大分块提示。
  • 复用现有开发服务的隔离组件浏览器验证通过:创建 / 引用记录可点击,键盘可聚焦操作,模拟失败后共享任务状态解除按钮禁用,失败记录保留节点名且完整错误可展开。该验证使用真实工具卡组件与增量 / 聚焦函数,不等于完整画布路由或真实后端联调;未调用生成接口、未重启服务。隔离浏览器的开发热更新 WebSocket 受本地网络检查阻止,不影响这些组件断言。
  • 真实登录态验收多节点同时生成、SSE 断线重连、切换会话 / 画布及失败后的节点展示;核实实际模型遵循默认参数策略。未调用真实收费模型,附件中 MiniMax 上游协议失败仍需独立渠道排查,不能视为供应商问题已解决。

Agent 导出、媒体审批与文本引用

  • Agent 顶部下载按钮导出当前对话消息、当前运行的服务端事件、工具参数、审批和错误为 JSON;服务端读取失败仍导出本地记录并附错误。凭证、签名 URL 参数及内嵌媒体已尽力过滤,提示词和对话仍可能含隐私,分享前需检查。历史轮次未缓存的原始事件不在本次导出范围内。
  • 图片 / 视频遵守用户指定规格,明确授权默认时按上节选择;创建草稿及引用连线后显示独立审批,卡片展示真实模型名和规格。自动模式也必须等批准;拒绝 / 取消保留草稿,不创建媒体任务或预留媒体账单。聊天本身的文本模型费用不属于媒体生成审批。
  • 视频提示词输入 @ 可选择全画布未连线文本,选中后建立真实引用连线、使用正确编号并将正文带入生成;已有引用编号、Config 输入、自引用、循环及锁定保护保持正确。
  • 仅平移 / 缩放 / 自动聚焦不会阻塞 Agent 同步或使审批快照失效;增量与本地无关字段编辑可合并,同字段冲突保留本地内容。审批仍对真实节点 / 连线变更进行快照校验。
  • 工具失败行直接显示具体错误及已有任务 ID,不必悬停;区分未提交任务与任务完成后回写失败。旧日志缺失的上游错误无法追溯补齐,需新导出记录验证实际渠道问题。
  • 95 项前端专项测试、类型检查与生产构建通过(仍有大分块提示);后端 Agent、任务准入和模型能力相关测试通过,覆盖自动模式审批、拒绝 / 取消无任务无媒体账单、重复审批幂等、草稿归属、视口保存后批准、真实快照冲突及错误详情保留。尚未进行本轮浏览器交互或真实模型生成验收,未启动 / 重启服务或操作真实画布数据。

分镜表节点提示词面板

  • 新建、连线创建、复制、粘贴和定位分镜表节点时不打开通用提示词面板,并关闭之前节点残留的面板;单击和拖动继续保持不弹出。分镜表内部编辑、生成与图片 / 视频节点提示词面板不变,待真实浏览器确认。
  • 4 项入口源码回归检查及前端类型检查 / 生产构建通过;构建仍有大分块提示,未进行浏览器交互验证。

Agent 运行闭环

  • 画布 Agent 媒体闭环:model_list 使用与生成面板一致的生效目录;支持读取节点 / 分镜表 / 角色资产绑定,审批时展示参考数量、画幅、质量、时长和音频。先创建图片 / 视频草稿和来源 / 资产连线,审批通过后原子绑定任务和账单;SSE 同步编辑器并聚焦新增节点,生成成功 / 失败 / 取消回写原节点。需使用真实已上传资产和模型渠道验证完整生成,不把测试数据库中的结果回写等同于真实出片。

  • 媒体闭环专项:后端 63 个顶层测试通过(Agent、任务准入、模型选择和能力相关),包含双图有序引用、图片生成、审批拒绝、快照过期、跨账号 / 未就绪资源、事务失败无媒体任务和账单、模型错误可恢复、结果 / 失败 / 取消回写及分镜分页。前端 22 项测试通过,包含审批规格、媒体节点与连线刷新、结果回写、聚焦及冲突保护。前端类型检查与生产构建通过(仍有大分块提示)。本次未启动 / 重启开发服务、未调用真实收费模型、未读写用户画布;发布后需新发起一轮 Agent 请求以获取新工具合同,旧失败轮次不自动续跑。

  • 工具成功行取消重复的右侧“已完成”,参考路径允许换行;审批期间停止正文流式动效。模型选择器收窄至 144px,新增思考开关;真实模型兼容性、明暗主题和窄屏待浏览器验收。

  • Agent 写入后同步持久化 Store 与打开的编辑器节点 / 连线;新增节点时选中并平滑聚焦本批节点,优先保持缩放,范围过大才缩小,尽量避开可移动 Agent 浮窗。不新增节点及相同快照重放不抢视口;未提交的本地编辑仍拒绝覆盖并显示冲突。窄屏浮窗遮满画布时回退全画布居中,需收起浮窗查看。待真实审批、连续写入、浮窗换位及断线重放验收。

  • 节点标题增加明确拖动手柄,正文编辑 / 滚动与名称单击编辑保持不变;锁定节点显示锁定提示且不可拖动,只读画布不开放拖动。补齐 HTML / SVG 沙箱 iframe 吞掉拖动事件的问题:手柄捕获指针,拖动期间屏蔽画布内 iframe 命中,结束后恢复;全局手势监听保持稳定,避免重渲染中断拖动。待用户原画布节点、组合选择与解锁后拖动验收。

  • 聚焦与拖动专项 11 项测试通过,覆盖视口几何、浮窗避让、拖动入口与 iframe 保护静态约束、刷新冲突和重复事件;前端类型检查与生产构建通过(仍有大分块提示)。复用现有开发服务,在隔离 Chromium 中挂载真实节点组件和手势控制器:合成 HTML 节点从 (100,100) 拖至 (300,268),松手后停止;结束与失焦取消后 iframe 的 pointer-events 恢复为 auto;锁定 / 只读手柄禁用。未读写用户画布数据、未启动或重启服务,真实审批联调仍待验收。

  • 本轮自动回归:前端 16 项测试通过,覆盖成功 / 失败工具行、长参考路径、编辑器刷新通知、本地冲突和重复事件;前端类型检查与生产构建通过(仍有大分块提示)。后端 TestCloudAgent|TestRunAgentToolTask 通过,覆盖审批写入、首轮及工具续轮思考配置、上游请求携带推理参数。未启动开发服务、未重启后端、未进行真实付费模型或浏览器验收。

  • Agent 工具调用后的下一轮模型请求:Chat Completions 的 tool_calls 补齐 type: "function",Claude 保留 tool_use;真实渠道连续调用与失败任务重新发起待验收。

  • 后端重启窗口内读取已加入 Skills:对 5xx 做最多 3 次有限重试,恢复后清除旧错误卡;裸代理 502 不再展示 Axios 英文错误。需在重启后端期间打开 Agent 面板确认自动恢复且不污染对话。

  • Skills 工具回归:目录始终列出固定快照入口 SKILL.md,Agent 先读入口再读取必要 reference;实际读取显示技能名与路径,失败事件不再出现成功摘要。同一轮同技能同路径的重复请求被拒绝,并引导使用历史结果;刷新恢复后仍保留去重状态。技能正文不整段进入 system prompt,入口中的未知工具名不能突破本轮工具清单。

  • 模型断连回归:连接重置、超时、拒绝连接显示安全分类和模型任务 ID,未知错误仍引导任务中心排查;不向聊天面板暴露原始上游地址或密钥。不自动重试或恢复旧失败运行。

  • Skills 反馈专项:前端 19 项工具摘要 / 错误语义 / 审批与布局测试通过,前端构建通过;后端 TestCloudAgent 专项通过,覆盖空目录、重复路径持久化、不同技能与文件隔离、缺失文件反馈,以及模型失败事件与脱敏。未调用真实模型或重启现有服务,真实浏览器验收仍待完成。

  • /api/agent 已注册能力、创建、追加消息、读取、取消、审批与事件流路由;一条消息对应一个持久化 canvas_text 任务,cloud_agent_executions 保存模型循环、工具、审批和事件状态,复用现有 Worker 与扣费事务。

  • 服务端校验画布 / 运行归属、幂等键、三档权限、用户技能快照、有限画布上下文与每轮预算;已开放 canvas_get_state、skill_read_file、task_get、model_list、受限 canvas_apply_ops 和 generate_media。禁止 shell、任意网络请求和外部 MCP。

  • 专项测试覆盖请求校验、越权、预算拒绝、重复提交、可信连续对话、公共任务入口隔离;4 个并发请求仅产生一条任务 / 账单 / 预留流水;模拟上游经真实 Worker 得到并持久化回复。

  • 隔离浏览器通过模拟 Agent 接口完成发送 → 事件流 → 回复 → 已完成;不代表真实模型渠道或登录态联调通过。

  • 真实登录态验证首轮 / 连续对话 / 取消 / 刷新恢复 / 审批 / SSE 断线重连;压力验证 PostgreSQL 扣费回滚。提交幂等键已按画布和会话持久化,仍需真实浏览器验证响应丢失后的同键恢复。

  • 原本运行中的旧后端需重新构建或重启加载新路由;本次未重启用户服务、未调用付费上游。

Agent 浮窗与设置布局

  • 聊天列表增加底部跟随:发送后回到底部,内容或窗口尺寸改变时跟随;主动上翻阅读时暂停跟随。相同错误仅合并连续提示,不再吞掉后续发送的失败反馈。
  • 前阶段隔离浏览器模拟 404 连续发送 7 次及上翻后再发送:每次失败可见,最终距底部均为 0;前端构建通过。后端实现的验收边界见上节。
  • 入口改为静态简洁按钮;桌面端支持拖动标题移动、上边缘 / 左边缘 / 左上角调整大小,位置与尺寸保存为浏览器 UI 偏好。窄屏使用全宽布局。
  • 设置与 Skills 子页收缩边界、长文换行和内部滚动已调整;修正技能搜索及全选,模型选择仅保留一个图标,输入框移除聚焦位移。
  • MCP 不再显示未经验证的连接成功状态。Agent 错误按 HTTP 状态呈现,不再根据错误文案断言系统模型渠道仍启用。
  • 专项测试:窗口几何与恢复、错误语义、会话缓存、资源引用输入,共 23 项通过。
  • 隔离组件浏览器验证:拖动 / 缩放 / 刷新恢复、Skills 搜索全选、明暗主题和 375px 窄屏无横向溢出、输入聚焦不位移。使用模拟接口,不代表后端联调通过。
  • 登录真实画布验收入口、设置、详情、输入及窗口偏好;检查画布缩放和快捷键不干扰浮窗。
  • 真实 Agent 运行、工具写入、媒体生成与 SSE 重连待联调;当前专项测试使用模拟模型和本地数据库,不替代真实上游验收。

异步视频统一轮询容错

  • 声明式视频插件、遗留内置视频协议和 RunningHub 视频工作流统一在创建成功后等待 30 秒首次查询,后续每 30 秒查询;图片、音频和文本协议不受影响。
  • 查询阶段的 HTTP 408/409/425/429/5xx、临时网络错误、断流、渠道槽位或熔断,以及最多连续两次非法 JSON 不再直接结束任务;HTTP 404 和结构化 task_not_exist 连续第三次才结束。
  • 结果下载复用同一暂态错误分类,最多尝试 3 次且不重新创建或轮询上游任务。默认视频任务执行窗口由 30 分钟改为 60 分钟;已保存的管理员策略不会被覆盖。
  • cd backend && go test ./internal/app ./internal/platform -count=1:通过。
  • cd backend && go test ./... -count=1、go vet ./...:通过。
  • 在测试渠道制造一次查询 502,确认任务保持运行、供应商任务 ID 不变,后续查询恢复后正常完成且不重复扣费。
  • 检查任务日志只出现一次「查询暂时异常」与一次「查询已恢复」,请求明细仍保留每次上游调用。
  • 让视频下载首次返回 502、第二次成功,确认宿主不重新查询或创建任务;连续三次下载失败时应返回包含供应商任务 ID 的错误。
  • 将管理员视频超时仍设为旧值的升级环境启动一次,确认保存值保持不变;新安装环境默认显示 60 分钟。

画布图片资源缓存链路优化

消除首屏满屏转圈与"一直在下载":后端图片资源改 30 天磁盘强缓存(Cache-Control: max-age=2592000),前端内存防抖 IndexedDB 元数据写入、O(1) 淘汰预检、并发下载 4→16,视口内远程图片直链首帧上屏(走原生磁盘缓存秒开),Blob 缓存后台平滑升级。已编译通过,需浏览器最终确认:

  • 打开含 50+ 张图片的大画布(如无限画布 1):图片不再全屏长时间转圈,视口内图片在 200ms 内显示(浏览器原生缓存或网络秒级完成)。
  • 刷新页面后再次打开同一画布:单张图片耗时 ≤4ms(from disk cache),无网络请求。
  • 监视器 Console Network 选项卡:图片资源响应头为 Cache-Control: private, max-age=2592000;HTTP 304 不再出现(本地磁盘命中无需 If-None-Match 验证)。
  • 超大画布(200+ 图片)冷启动后,并发下载队列在 1~2 轮完成(不再串行 20+ 秒排队)。
  • 切换不同画布、打开多个标签页均无 IndexedDB 阻塞卡顿(touchCacheMeta 内存防抖 + evictFor O(1) 预检生效)。
  • 视频资源仍保持 Cache-Control: private, no-cache(每次播放仍需校验服务端 ETag)。

后端业务域拆包

  • internal/service 只保留别名(4 个文件)。组合根和未拆出实现在 internal/app。已抽出域:kernel、platform、skills、prompts、auth、canvas、assets、outbound、generation。handler 仍只打 *service.Service。
  • cd backend && go test ./internal/kernel/ ./internal/platform/ ./internal/skills/ ./internal/prompts/ ./internal/auth/ ./internal/canvas/ ./internal/assets/ ./internal/handler/ -count=1
  • cd backend && go build ./internal/service/ ./internal/handler/ ./cmd/server/
  • 登录后打开技能库:列表、加入、GitHub/ZIP 安装、内置技能正文仍可用。
  • 管理后台提示词模板、用户风格库、画布按项目画风生成仍走原接口。
  • 注册、登录、邮件验证码、密码重置、Linux.do 登录仍走原 Cookie 接口。
  • 公开画布分享链接仍能打开,分享资源 URL 不泄露密钥和任务字段。
  • 登录后画布库分页、按 ID 读素材、上传/替换用户素材仍走原接口。

固定分辨率图片模型

  • 比例协议未配置质量参数时,图像设置按管理员启用的尺寸档位显示;未启用的档位仍隐藏。
  • 选中档位会写入 1k / 2k / 4k;Gemini 图片由官方插件 google-gemini-image 映射为上游 1K / 2K / 4K,业务层不再手写组包。插件优先读 quality,画布残留的视频 vquality(如 720)不能盖掉 4K。
  • 选 4K 后抓上游请求,确认 generationConfig.imageConfig.imageSize 为 "4K",且没有 candidateCount 被误写成视频清晰度 720。
  • 前台模型从系统模型同步 imageSize 预设和 aspect_ratio 参数;旧前台快照会从供应线路补回档位,不再把 1K/4K 压成只有 1K。未启用的 1K 不能因为协议默认 low/medium/high 出现。未声明 quality 的前台模型不能因选 4K 档位报“不支持参数 生成质量”。
  • 系统模型启用 1K+4K 全尺寸后,打开对应前台模型:画布图像设置应同时出现 1K 和 4K。
  • 保存同时启用 1K 和 4K 全尺寸、且未配置质量参数的模型后,画布图像设置应同时出现 1K 和 4K,切换档位后参考像素跟着变。
  • 保存仅启用 4K 的模型后,在画布重新选择该模型,确认只显示 4K,切换比例和重新打开面板仍保持 4K。
  • 实际生成后确认上游模型输出分辨率;面板参考尺寸不保证上游实际像素。

HTTP API 错误码与 OpenAPI

  • 路径仍是 /api。不做 /api/v1 双挂;前后端一起发布。
  • 失败信封增加 reason。配额是 HTTP 403 / code 40301 / reason=quota_exceeded,不再用 400。限流是 429 / 42901 / rate_limited。
  • GET /api/openapi.yaml 提供 OpenAPI 3.0。不要生成 TS 客户端替换 http。
  • cd backend && go test ./internal/handler/ ./internal/service/ ./cmd/server/ -count=1
  • cd web && bun test test/api-request.test.ts
  • 登录后走素材库、画布、任务中心:Cookie 仍有效,请求仍打 /api/...。
  • 打开已有图片/视频资源 URL(/api/resources/.../file)仍能加载。
  • 文本任务 SSE 与系统渠道流式仍逐条到达。
  • 账号配额打满时前端能用 reason === "quota_exceeded" 区分,而不是当可重试 429。

JSON 字符串类型与素材写入合同

  • 上游 JSON 不再把数字/布尔伪装成空字符串。optionalJSONString / requireJSONString / firstJSONString 在字段类型错误时返回 expected string, got T。视频 / 音频 / 声明式协议的任务 ID 走这条路径。
  • stringField 仍用于可选查找(status、error.message、SSE 增量)。缺字段或类型错误对该键视为空,避免异构上游把整段解析打爆。
  • 用户库素材写入强制 kind、coverUrl、tags(字符串数组)和按类型完整的 data。前端 parseAssetRecord 拒绝不完整记录,素材库页不再读时 normalizeAssetRecord。
  • 已入库、缺 tags 或 data 的历史 payload:GET 仍原样返回;登录快照或素材库分页会解析失败。没有读时补丁,需要重新保存或清洗。
  • cd backend && go test ./internal/service/ -count=1
  • cd web && bun test test/asset-record.test.ts test/asset-storage-revision.test.ts test/user-scoped-generation-persistence.test.ts
  • 上传/生成一条完整素材后刷新:素材库、画布引用、跨端同步仍可用。
  • 用数字 id 的视频/音频上游(若有)应看到类型错误,而不是“没有返回任务 ID”。
  • 本地 IndexedDB 若仍是缺 tags 的旧缓存,打开素材库应失败而不是 tags 变成 []。

巨型文件按能力/容器拆分

  • provider.go 只保留调度、水合和共享类型。文本 / 图片 / 视频遗留 / 音频 / HTTP / 声明式协议分别在 provider_text.go、provider_image.go、provider_video.go、provider_audio.go、provider_http_client.go、provider_protocol.go。未导出函数仍同包,测试无需改 import。
  • 画布助手:容器 canvas-assistant-panel.tsx;展示层 canvas-assistant-panel-views.tsx;onlineToolToOps 在 canvas-assistant-online-tools.ts;影视续写边界在 canvas-cinematic-continuation.ts。测试仍从面板文件 re-export 取值。
  • 创作页:create/index.tsx 只做提交和会话状态;历史抽屉、Composer、消息视图在 creation-workspace.tsx。
  • 画布页时间线入轨从 project.tsx 抽到 use-canvas-timeline-asset-insert.ts。页面仍装配工作区 JSX。
  • cd backend && go test ./internal/service/ -count=1
  • cd web && bun test test/generation-task-local.test.ts test/user-scoped-generation-persistence.test.ts test/generation-task-materializer.test.ts test/create-library-button.test.ts test/create-canvas-handoff.test.ts
  • 画布在线助手:发一条会改画布的指令、确认工具、影视项目续写/刷新恢复,行为与拆分前一致。
  • 创作页空态/对话流、历史抽屉重命名删除、素材库插入仍可用。
  • 画布时间线弹窗内从素材库/项目资产插入音视频仍直连入轨;图片仍提示先插入画布。

前端 HTTP 与产品浮层壳

  • 业务 JSON 模块统一走 http.get/post/put/patch/delete,不再写 request(apiClient.*)。CSV / 诊断包 zip 走 http.raw。资源 404 缓存认 ApiError.status,不再看已经解包后的 axios 错误。
  • image / video / audio 渠道请求经 createChannelTransport;语音合成走 postBlob,避免把音频当 JSON 解析。
  • 自带外壳的产品弹窗改用 AppModal flush;技能编辑和管理员用户详情改用 AppDrawer。不要再复制 padding: 0 的 Modal styles。
  • cd web && bun test test/api-request.test.ts test/http-ownership.test.ts
  • 登录后打开素材库、画布上传、风格选择、技能详情、渠道模型编辑:弹窗主题、关闭、内部滚动与改造前一致。
  • 上传资源、导出管理日志 CSV、导出诊断包:仍走同一登录 Cookie,失败文案可读。
  • 用音频渠道生成一条语音:应得到音频,而不是 JSON 解析错误。

产品 LLM 任务收进官方提示词目录

  • 短剧一句话生成和技能库 AI 草稿不再把整段指令写在页面里。前端只传 promptTemplateOperation 与变量;服务端按启用模板 + 用户偏好编译,并校验 JSON 契约 short-drama-outline/v1 / skill-draft/v1。
  • 画布预设、反推提示词、工作流起步稿、文本改写、视频操作包装、字幕高亮指令集中在 web/src/lib/prompts。在线 Agent 系统提示词和读写工具名单集中在 canvas-agent-protocol / canvas-agent-tools,在线写门控与本地日志分类共用同一份读工具列表。
  • 批改管线、提示词优化器、肖像比对等插件内指令仍留在各自模块,下一刀再收。
  • go test ./internal/service/ -run 'TestPromptOperationCatalog|TestRenderShortDrama|TestValidatePromptTemplateResultShortDrama|TestValidatePromptTemplateResultSkillDraft|TestValidatePromptTemplateResultCharacter' -count=1
  • cd web && bun test test/prompt-catalog-ownership.test.ts test/canvas-agent-workflow.test.ts
  • 重启后端后,设置 → 提示词偏好和管理后台提示词模板应出现「短剧大纲」「技能草稿」。改平台默认或用户追加后,项目页一句话生成和技能草稿应吃到新文案,JSON 结构仍能导入章节 / 填入编辑器。
  • 在线画布助手仍先读上下文再写;本地助手只读工具日志分类不变。画布预设、反推提示词、工作流缺省 prompt 文案与改造前一致。

最小 ESLint 只锁已退场的 AntD API

  • web 增加 bun run lint。不是风格检查:只禁止再 import { Empty } from "antd",以及静态 Modal.confirm(。
  • 解析器用 @babel/eslint-parser + TypeScript preset。typescript-eslint 8 在仓库的 TypeScript 7 上会直接拒绝启动,所以没有用它。
  • CI Quality / Web checks 在 typecheck 之后跑 bun run lint。
  • cd web && bun run lint:通过。
  • CI 确认 Web checks 出现 lint 步骤且现有 PR 能过。

web / canvas-agent 只认 bun.lock

  • 删除遗留的 web/pnpm-lock.yaml 和 canvas-agent/pnpm-lock.yaml。同一套 node_modules 被 pnpm 覆盖过,会把 Tiptap 和 lightningcss 装成两套版本。
  • web/package.json 去掉仅给 pnpm 用的 overrides 副本,并声明 packageManager: bun@1.3.9。仓库内 Canvas Agent 安装/构建改写为 bun install / bun run build;对外仍用 npx -y @wxin666/wxin-yan-agent。
  • CI 在 bun install --frozen-lockfile 之前拒绝 pnpm-lock.yaml / package-lock.json / yarn.lock。
  • bun test test/package-manager-lockfile.test.ts。
  • 干净目录执行 cd web && bun install --frozen-lockfile 与 cd canvas-agent && bun install --frozen-lockfile,不要再用 pnpm/npm 装前端依赖。

确认框与空态退场静态 API

  • 命令式确认不再使用静态 Modal.confirm(拿不到 App 主题和上下文)。画布取消任务、方舟素材上传、任务中心删除本机记录改为 App.useApp().modal.confirm。行内危险操作仍用 Popconfirm。
  • 全库最后一处 AntD Empty(渠道排序弹窗)改为 EmptyState。插件中心筛选空态和提示词偏好空列表也接到 EmptyState。工作区整页空态仍用 WorkspaceState(信号图标),画布引导空态保持产品专用实现。
  • bun test test/ui-kit-retirement.test.ts test/channel-presentation.test.tsx test/plugin-state-switch.test.ts。
  • 画布取消进行中任务、上传到方舟素材库:确认框明暗主题与页面一致,确认后仍执行原操作。
  • 任务中心删除本机记录:确认框主题正确,只删本机记录不删素材。
  • 管理后台渠道「设置排序」在无条目时显示 EmptyState;插件中心清空筛选后的空态可点「清除筛选」。

后端 Service 域边界试点(generation / outbound)

  • 目标:横向按业务域拆包;handler 仍依赖 *service.Service 组合根,域包禁止 import service。
  • 本轮已落地:internal/outbound(SSRF/出站 HTTP)、internal/generation(Engine + Deps 端口 + 官方协议注册表运行时)。service 通过薄包装再导出。
  • provider_* 执行簇仍在 service(与编排水合/计费耦合深),后续按 Engine 端口继续迁入 generation。
  • go build ./internal/generation/ ./internal/outbound/ ./internal/service/
  • go test ./internal/generation/ ./internal/outbound/ ./internal/protocol/ -count=1
  • go test ./internal/service/ -count=1:完整 service 回归。
  • 任选一条图片或视频生成,确认官方插件路径与结果落库仍正常。
  • go list 确认 internal/generation 的 import 不含 internal/service。

官方图片 / 音频 InterfaceType 只走声明式插件

  • runImageTask / runAudioTask 对白名单官方接口只走声明式插件:ensureOfficialProtocolAdapter → declarative;未安装时报「…插件未安装」,不再回退手写组包。
  • 图片白名单:openai-image、grok-image、volcengine-ark-image、volcengine-jimeng-image、gemini-image。音频白名单:openai-audio、async-audio。
  • 已从 Builtins 移除对应 host adapter;真相源为 plugin-packages/*.yan-plugin(含新建 openai-audio / async-audio,以及重写的 openai-images / grok / ark / jimeng)。
  • 表达式引擎补 $divide(配合 $split / $toFloat);同步音频支持 BinaryPayload。
  • go test ./internal/protocol/ ./internal/service/ -count=1:协议与 provider 回归。
  • 用 OpenAI Images(generations + edits)、Grok Images、方舟 Seedream、即梦图片、Gemini Image 各跑一条,确认创建与结果落库走对应官方包。
  • 用 openai-audio 同步 speech 与 async-audio 异步任务各跑一条,确认二进制 / 轮询结果可播放。
  • 卸掉对应官方图片或音频插件后再提交同类型任务,应看到「…插件未安装」。

官方视频 InterfaceType 只走声明式插件

  • runVideoTask 对已有官方插件的接口类型不再回退到手写协议。生产注入插件注册表;单测未注入时会补官方包。显式放入空注册表则报「…视频插件未安装」。
  • 覆盖的接口:minimax-video、gemini-veo、novita-video、newapi-channel-1、newapi-channel-2、xai-video、volcengine-ark-video、volcengine-jimeng-video、newapi、agnes-video。任务恢复也只查询声明式 adapter,不再回退 queryNewAPIChannel2VideoTask。
  • 仍保留的手写路径只有:BaseURL 含 /api/plan/v3 的 Ark Plan Seedance,以及模型名含 seedance 的 Seedance /videos 遗留;OpenAI multipart / Grok JSON 视频死代码已删。
  • 插件契约与旧手写实现不一致处按插件为准:MiniMax 时长必须 4–15 秒且不再把 720/1440p 映射成 768P/2K;Channel 2 不再做 grok 单图/音频校验;xAI 结果 URL 不可达时不再回退 /videos/{id}/content;Channel 1 音频 type 跟随宿主 role(当前为 reference_audio)。
  • go test ./internal/service/ ./internal/protocol/ -count=1:通过。
  • 用 MiniMax / Veo / Novita / NewAPI Channel 1+2 / xAI / 方舟 / 即梦视频各跑一条生成,确认创建、轮询、下载仍走对应官方插件路径。
  • 卸掉某个官方视频插件后再提交同类型任务,应看到「…视频插件未安装」,而不是静默改走另一套协议。
  • Channel 2 创建后短暂 task_not_exist 仍应延期查询,不要二次创建。

列表分页查询改为 page + pageSize

  • 业务列表查询不再使用 page_size、project_id、folder_id、media_type、unit_id 或管理端 limit。查询名和分页响应字段统一为 camelCase:page、pageSize,以及 projectId / folderId / mediaType / unitId。
  • 技能库列表信封同步改为 totalCount、hasMore、nextOffset、pageSize。技能条目、安装表单、技能包文件与 GitHub 安装请求也已改为 camelCase;createdAt / updatedAt / lastCheckedAt / lastSyncedAt 为 RFC3339。内置技能种子文件仍是仓库内部 snake_case,读取后转换成对外合同。
  • Eagle 素材连接器、Dreamina 本地任务和肖像比对仍走对方自己的 limit/offset,不纳入这次契约。
  • 登录后翻页素材库、画布库、项目资产、技能库和积分流水,确认请求查询是 pageSize 而不是 page_size/limit。
  • 管理后台用户、渠道、日志、公告、兑换码、计费、支付订单、对账和存储资源列表翻页正常,响应里是 pageSize。
  • 技能库列表、详情、创建/编辑、ZIP/GitHub 安装:确认接口字段是 skillId、skillName、createdAt 等 camelCase,时间是 ISO 字符串而不是 unix 毫秒。
  • 画布 @技能 提及和技能运行时仍能解析已加入技能。

前端测试改为全目录自动发现

  • web/package.json 的 test 脚本从手工枚举约 100 个文件改为 bun test,CI 的 bun run test 会跑到此前从未进闸门的用例(含素材弹窗、上传边界、同步文案等)。
  • 打开闸门前修了过时源码快照,以及:无入边时 @图片1 可引用节点自身;账号切换中止进行中请求的测试不再因 localforage 缺驱动而误失败。
  • bun test:全目录应通过。
  • CI Quality / Web checks 确认 bun run test 覆盖新增文件且无顺序依赖失败。

写路径诚实化(存储直传 / 云端同步 / 计费退款 / 转码终态)

  • 资源直传失败按 ApiError.retryable 分类:401/403/400/413 等永久失败当场抛出;429/5xx 与断网允许退回 IndexedDB,由云端同步用同一幂等键重传。UI 不得把 pendingRemoteUpload 说成已保存到服务器。
  • 素材页、素材弹窗还原、批量上传、画布保存在云端同步失败时会排队 scheduleRemoteUserDataSync,文案改为「本地已保存,云端同步失败:…将自动重试」。LibTV/TapNow 导入仍只在本地写失败时回滚,云端失败不回滚已写入的节点。
  • 系统渠道代理:退款或待核对写失败会打进程日志;退款失败会转 uncertain,避免订单停在 running。空 billingOrderID 不再假装退款。
  • 播放转码终态回写失败会重试 3 次并打日志;mark none 写失败会恢复内存状态,避免前端把空状态当成 processing 轮询。
  • Responses→Chat Completions 回退只认 404/405/501,不再把 502/503/504 当成“接口不存在”。
  • bun test test/resource-upload-boundary.test.ts test/user-data-sync-message.test.ts;go test ./internal/service/ -run 'TestShouldFallbackTextToChat|TestPersistPlaybackResource'。
  • 登录后上传一张图时断开后端:应看到本地已保存+将自动重试,而不是“已保存”。恢复后端后素材应出现在云端。
  • 用错误密码/过期登录上传:应直接报鉴权失败,文件不应静默进“稍后同步”。
  • 画布导入 LibTV 后人为让同步失败:节点保留,出现云端失败提示。
  • 系统渠道明确 4xx 后核对计费订单已退款;退款写库失败时订单应进入待核对。

引用素材库弹窗新增媒体类型筛选

  • AssetLibraryPickerModal 左侧在「分类」之上新增「媒体类型」分组:全部类型 / 图片 / 视频 / 音频(可选文本)。媒体类型在分类之前收窄数据源,左侧分类计数、网格和分页描述同一批素材。
  • 新增 mediaKinds prop 声明可选类型,只有一种或调用方已用 remoteKind 锁定类型时不展示该分组;新增 item 字段 mediaKind,缺省时按本地素材或插件素材的 kind 推断,角色卡这类非媒体条目在筛选生效时不出现。
  • 远端素材库按服务端 kind 过滤并重置到第一页;remoteKind 仍是调用方的硬约束,媒体筛选不会覆盖它。
  • 各入口传参:创作首页与项目主图沿用默认/图片单类型;画布插入素材、画布项目资产、短剧制造引用个人素材声明含文本的四类;角色三视图与角色声音已由 remoteKind 锁定,不展示分组。
  • bun run typecheck、bun test test/canvas-asset-picker.test.ts test/create-library-button.test.ts test/asset-ingest.test.ts test/assets-page-batch-toolbar.test.ts:23 passed。
  • 创作首页「参考内容」:切换图片/视频/音频,确认分类计数、网格和分页一致,翻页后筛选保持。
  • 画布「插入素材」「项目资产」:确认文本类型可筛选,角色卡在筛选非全部时不出现。
  • 短剧制造「引用个人素材」以及角色三视图/声音绑定:确认前者有媒体类型分组、后两者没有。
  • 窄屏(≤680px)下左栏横向滚动,媒体类型与分类合并成一排后仍可点选。

画布顶栏提示被生成任务面板遮挡

  • 现象:画布右上角有进行中任务时,顶栏按钮的悬浮提示被「生成任务」面板压住,文字读不全。
  • 原因:顶栏是 --z-toolbar(30) 的绝对定位浮层,会为子元素建立层叠上下文;顶栏提示原来是行内绝对定位、--dock-tooltip-z(140) 只在该上下文内生效,实际仍低于 --z-panel-floating(80) 的任务面板。提示向下展开的位置又正好落在 --canvas-topbar-offset(72px) 的面板顶边。
  • 修复:CanvasTopBarTooltip 改用 Ant Design Tooltip(portal 到浮层层级),与专注模式工具栏、节点悬浮工具的提示实现一致;底部 dock 的提示向上展开,不受影响,保持原样。
  • 视觉变化:顶栏提示改用全局浮层配色(--popover),不再是 dock 提示的自定义样式。
  • bun run typecheck 通过。未做浏览器验证:复现需要画布上有进行中的生成任务。
  • 登录画布并发起一个生成任务,逐个悬停顶栏按钮,确认提示显示在任务面板之上、明暗主题下都可读。
  • 确认菜单类按钮(画布菜单、导入第三方画布、媒体性能)的下拉仍能正常打开。

远端素材未归一化导致的 tags undefined

  • 现象:部分素材的 tags 是 undefined,首页点击「参考内容」时页面报「当前页面没有正常加载,Cannot read properties of undefined (reading 'join')」。
  • 原因:素材在服务端是不透明 payload,早期记录没有 tags 字段。本地缓存、登录快照和素材库页面都会走 normalizeAssetRecord,但 user-data-sync 的 acceptRemoteAssets(素材选择弹窗分页、按 ID 拉取引用素材)把服务端原样对象直接写进 store。
  • 修复:acceptRemoteAssets 与登录快照都在写入前归一化,并让 acknowledged 基线复用同一份对象。顺带修掉登录时 store 存归一化副本、基线存原始副本导致这些素材被永久标记为待上传的差异。
  • bun test test/user-scoped-generation-persistence.test.ts test/asset-storage-revision.test.ts test/asset-remote-sync.test.ts test/canvas-asset-picker.test.ts:58 passed;bun run typecheck 通过。
  • 登录后在首页点击「参考内容」,翻页浏览历史素材,确认不再白屏。
  • 观察一次同步周期,确认历史素材没有被反复回传服务端。

声明式协议插件丢失系统指令

  • 现象:短剧「AI 生成章节」报「AI 没有返回有效的章节内容,请重试」。上游请求只带一条 user 消息,要求输出 JSON 的系统指令被丢弃,模型返回散文,前端解析不到章节。
  • 原因:manifestRequestValues 构造的 request.messages 不包含 request.instructions,而 OpenAI 系官方插件(chat-completion、deepseek-chat、atlascloud-chat 等 26 个)只映射 request.messages。
  • 修复:宿主在 request.messages 前补一条 system 消息(请求本身已有 system 消息时不重复);openai-responses 和 google-gemini-generate-content 改为过滤 system 角色,改用各自的 instructions / systemInstruction 字段,与 anthropic-messages 一致。
  • 需要重新打包并重装的官方插件:openai-responses、google-gemini-generate-content。其余 OpenAI 系插件只需后端升级,无需重装。
  • go test ./internal/protocol/ ./internal/service/:通过。
  • 登录后用 DeepSeek 等 chat-completion 渠道跑「开始一部新短剧 → AI 生成章节」,确认章节正常导入。
  • Claude、Gemini、OpenAI Responses 渠道各跑一次文本生成,确认系统指令生效且没有重复出现在正文里。

AI 生成章节的同名项目处理

  • 已实现:创建项目遇到同一用户下的重名时返回 HTTP/code 409、reason=project_name_conflict;前端只对该原因有限更换名称重试,其他冲突和服务错误直接显示,不调用模型。
  • 隔离 PostgreSQL 的仓储和服务测试、HTTP 响应及前端重试边界测试通过:同用户重名返回结构化冲突、不同用户可同名、项目 ID 冲突不被误判、原项目和工作流不被覆盖;更换名称后可正常创建。
  • SQLite 同组用例待在启用 CGO 的环境运行。
  • 登录真实页面,用已存在项目的同一故事再次执行「AI 生成章节」,确认自动创建带后缀项目、章节正常导入,且只有一次模型生成请求;确认其他 HTTP 409 不触发重试。

画布智能引用

  • 在简洁、专业模式及展开提示词面板中打开智能引用,检查明暗主题、弹层宽度和开关状态。
  • 输入素材名称、image1 或独立序号,按 Tab 和点击候选项均能插入正确引用;关闭 AutoLink 后不再提示。
  • 一键引用全文保留重复指代,跳过已有引用、重名和“约2秒”等普通文本;无匹配时按钮禁用。
  • 长提示词滚动、移动光标、中文输入和切换节点后,引用插入位置正确;素材原有双击预览正常。

图片节点打光与镜头控制

  • 图片节点支持基于原图的打光与镜头控制;确认操作只生成明确的编辑请求,不修改源节点内容。
  • 打光支持光位、俯仰、亮度、光色、轮廓光和预设;镜头控制由声明式参数构建提示词,生成结果保留对应操作元数据。
  • 打光弹窗确认后只创建空图片节点并连到原图,不立刻发起生成;提示词、模型和尺寸可在新节点面板里改完再生成。
  • 登录画布后分别执行打光与镜头控制,确认新节点、连线、模型配置、失败状态和窄屏菜单行为正确。
  • 检查明暗主题、键盘焦点、弹窗滚动、复制提示词与自定义模板;确认取消操作不会触发生成。
  • 点击「生成打光效果」后应出现空图片节点和连线,节点面板可改提示词/模型/尺寸;确认不会立刻进入 loading 或打上游。

创作页生成类型胶囊切换

  • 创作页 Composer 的生成类型从「图片生成」下拉菜单改为 视频 | 图片 | 文本 三段胶囊切换(creation-mode-capsule),选中态使用 --control-selected-bg/fg 中性高亮;旧下拉 creation-mode-picker-menu / creation-menu-icon / creation-chat-control.is-mode 样式已删除。
  • 录音时控制行不换行(:has(> .voice-recording-inline) 时 nowrap),录音条改为可压缩(flex: 1 1 236px; min-width: 140px,波形可缩);≤680px 恢复换行。
  • 创作页(含首页空态和会话态)确认胶囊明暗主题选中/悬停层次正确、高度与其他控件协调,切换视频/图片/文本后模型选择器与参数菜单仍跟随模式变化。
  • 录音时右侧模型、清晰度、时长、清空等控件保持在同一行,波形被压缩但不遮挡;窄屏(≤680px)录音时仍可换行不溢出。

v1.2.8.rc1 候选版本发布

  • 发布版本与镜像标签分别为 v1.2.8.rc1 和 1.2.8.rc1;GitHub Release 应标记为预发布,不能被当作正式版本推荐,也不覆盖已发布的 latest。
  • 待验证:前后端镜像的 Linux amd64/arm64 构建、Release 更新器附件与校验文件,以及实际部署后的版本展示和核心流程。本次发布不自动部署服务,构建成功不代表业务验收通过。
  • 拉取 ghcr.io/wxin/wxin-yan-web:1.2.8.rc1 与 ghcr.io/wxin/wxin-yan-backend:1.2.8.rc1,验证 amd64/arm64 manifest、容器内版本和提交信息,以及 docker-compose.deploy.yml 使用 CANVAS_IMAGE_TAG=1.2.8.rc1 启动。

框选工具栏精简与自适应整理

  • 多选悬浮栏默认只保留对齐、等距、分镜组和批量连接;横向/纵向/宫格/连线排列和引用组改到工具栏设置里,需要时再打开。
  • 框选多个节点后,在节点或画布空白处右键会出现「自适应整理画布」:保持现有相对占位,把间距至少加到约 56px,不按媒体类型重排。
  • 右键已选中的节点不再拆掉多选。
  • 登录画布框选一组松散节点,确认悬浮栏变短,右键整理后左右上下关系不变、间距变大,撤销可恢复。
  • 工具栏设置里仍能重新打开隐藏的排列入口。

画布抓手 / 框选胶囊开关

  • 主工具栏左侧的抓手工具和区域选择合并为一个胶囊开关:选中项是白色圆形滑块,未选项直接落在纯黑轨道上;左右留白比参考图更松。
  • 默认仍是区域选择;切换到抓手后空白处拖动平移画布,切回后空白处拖动框选。空格 / 中键临时平移不受影响。
  • 旧工具栏偏好里的 tool-move / tool-box-select 会合并成 tool-canvas-mode;两个都隐藏时开关才隐藏。
  • 登录画布验证明暗主题、开关切换后光标和拖动语义、工具栏设置中的显隐与排序。
  • 触屏或窄屏下开关仍可点按,不与 dock 横向滚动冲突。

画布本地媒体转换节点(PR #446)

  • 合并本地媒体转换节点与 Canvas Agent Runtime:灰度、Canny、AI 线稿、Depth Anything V2、OpenPose;官方插件注册;图片输入约束、结果指纹与缓存。
  • 合并冲突处理:保留主分支连线创建菜单的展开描述样式,并补上「转换」选项。
  • 修复:完成后的转换结果可进入下游生成参考图;stale 写入不再覆盖 processing;hover「转换」识别 storageKey 媒体;pose personCount 允许 0。
  • 已知边界:抠图(cutout)与视频转换仍标记为暂不可用;插件开关未像肖像排查那样隐藏创建入口。
  • 修复:POSIX 主机上 Windows 风格绝对路径环境变量不再被 path.resolve 错误拼接工作目录。
  • bun test test/media-conversion.test.ts:7 passed。
  • canvas-agent depth/lineart/pose 路径覆盖测试:通过。
  • 登录画布:图片 → 转换(灰度/Canny)→ 下游图片生成,确认参考图实际进入请求。
  • 本机 Agent:深度 / 线稿 / 姿态转换;无人物姿态显示 skipped。
  • 更换上游图片后转换节点变 stale,重新运行后下游可继续生成。

Agent 聊天附件、局部重绘次数与多图展开

  • Agent 输入框附件改为 80px 预览,标签在图片下方,不再盖住画面;点击/双击放大,可用 @图片N 插入正文,鼠标移开后图片保持可见。
  • 在线 Agent(画布助手面板)选中节点引用同步改为 80px 预览、点击放大、@图片N 插入,并接入输入框 @ 候选;预览走 storageKey 解析,避免 blob 失效导致黑块。引用列表与画布选区解耦,逐个点选图片会累积到 Agent,不再只能保留最后一张。
  • 提示词内联 @图片N 芯片恢复紧凑尺寸(约 22px 高 / 18px 缩略图),不再撑高整行文本。
  • 图片/视频节点提示词面板的参考素材改为 44px 横向胶囊(缩略图 + @标签),单行左右滑动;「参考图 · N」移到标题栏「图片/视频生成」后面;单击缩略图预览,点击 @标签 插入引用。
  • 画布局部重绘:核心区只保留笔刷、修改要求、生成张数;模型/质量/尺寸/比例收进「高级生成设置」折叠区,侧栏限高滚动,底部操作栏固定。
  • 画布局部重绘增加模型选择、尺寸和生成张数;张数大于 1 时按多图组并行出图并默认展开。
  • 局部重绘多图取消时清掉未出图的占位节点;单路失败不影响其余并行任务,部分失败会提示并保留成功结果。
  • 重新生成会把源节点的参考图连线带到新结果,避免提示词里的 @图片 缩略图丢失。
  • 管理员尺寸预设每个分辨率档位提供全选/全不选;左侧档位标题列加宽,4K / 8 个比例分行显示不再挤成「4K8 个比例」。
  • 新的多图组默认展开成 4 张,不再叠在旧结果上;取消或重生成会清掉没有结果的占位子图,已有结果拆成独立节点。
  • 登录画布验证 Agent 附件放大、@ 插入、局部重绘侧栏不溢出且高级设置可折叠、局部重绘多张、改提示词重生成后参考图仍在,以及 4 张结果直接铺开。
  • 管理员尺寸预设页确认 1K/2K/4K 左侧标题不换行、全选/全不选可用。

刷新画布后提示词引用缩略图恢复

  • 修复参考图可见、正文 @引用 图片却加载失败:图片地址异步解析完成后,即使提示词未变化,也按引用 ID 同步正文缩略图,不再保留旧地址。
  • 仅替换发生变化的预览元素,保留引用标签、文字和光标;地址不变时复用现有图片,不触发提示词保存。
  • 真实浏览器挂载实际编辑器,验证失效 blob 地址切换到有效图片后解码成功、光标和标签保持、相同地址复用图片,且没有触发 onChange。
  • 在登录后的真实画布中刷新页面,确认原有参考图及正文引用均恢复;覆盖素材库引用和多个引用。

连线目标节点 3D 倾斜反馈

  • 拖动连线进入现有合法目标吸附区时,目标节点按接近点倾斜,最大约 5°,以接近点作为支点;支持单条和批量连线,不扩大连线命中区域或改变节点坐标。移出、完成或取消后恢复,普通 hover、点击和选中不启用此效果。
  • 性能降级模式、拖动节点和系统减弱动态效果下不启用倾斜。修复逐帧传入鼠标坐标导致目标节点 memo 失效的问题:仅在进入目标时锁定接近点,同一目标内移动保持引用和倾斜不变,切换、退出或取消时更新;连线端点仍按原有 RAF 节奏更新。
  • 方向、边界、缩放、600 次同目标移动引用稳定性及相邻连线/媒体专项共 40 项测试通过,前端构建通过。真实浏览器验证样式在普通/选中状态为 none,目标状态为 3D 变换,清除后恢复 none 和 will-change: auto。
  • 在用户出现卡顿的大画布复验连线延迟和渲染开销;独立浏览器渲染计数实验初始计数异常为零,未获得有效的渲染次数对比,不能据此认定性能验收通过。
  • 登录画布验证不同缩放下从各方向接近目标、完成、Escape 取消、窗口失焦,以及批量连线的合法/非法目标切换。

画布视频悬停预览

  • 鼠标停留 350ms 后静音播放前 3 秒,播放完恢复静态封面;短视频结束即停止,不循环。触屏、按键拖拽以及系统减弱动态效果下不自动播放,点击播放仍使用完整播放器。
  • 同时仅一个悬停预览(包括待加载任务),快速划过不解析视频地址;离开、滚轮、按下鼠标、键盘操作、窗口失焦、页面隐藏、节点离开视口或画布变换均释放播放器。手动播放优先,悬停不触发整文件后台缓存。
  • 悬停生命周期与相邻媒体专项测试共 31 项通过,前端完整构建通过;真实浏览器以 4.2 秒本地生成视频验证静音播放及约 3 秒后播放器移除。此验证不依赖登录,也不等同于完整画布验收。
  • 在真实大画布中验收大量视频节点下的快速划过、拖拽、缩放、慢网和跨域失败,记录目标设备的帧率与内存;本地专项测试不代表所有设备的性能保证。

预览使用原视频,3 秒限制是播放时长而非下载字节上限;实际网络流量取决于浏览器缓冲、源视频码率和服务端 Range 支持。

任务详情、章节资产与请求明细

  • 前端专项回归覆盖图片自引用、任务同步边界、章节三类资产解析及相邻媒体逻辑;无角色章节允许保留场景和道具,缺失必填字段仍报错。
  • 后端 repository、service、handler 测试通过,覆盖请求/下载筛选及导出、章节资产输出校验。
  • 视频首帧组件使用浏览器内生成的视频验证:输出 400×225 缩略图,卸载后释放对象 URL;此项不等同于登录态任务页面验收。
  • 登录后打开画布任务和短剧任务详情,确认不再因详情读取触发画布同步而报 record not found。
  • 检查生成图片的提示词面板:不含自身引用,原有上游素材引用仍保留。
  • 使用真实文本模型提取章节,确认角色、场景、道具均进入待确认资产,重复提取与刷新恢复不重复入库。
  • 请求明细默认仅请求,切换仅下载/全部后,分页、检索、CSV 导出一致。
  • 视频任务列表和网格检查已有封面、无封面、跨域失败、滚动懒加载及明暗主题。
  • “参考 LibTV 的深度动作捕捉”尚未实现,需确认对应功能入口、截图或预期输入输出。

本轮不涉及数据库迁移;前后端需一起更新,后端重启后才会提供新章节提取模板和日志筛选参数。

文件上传占位、真实进度与磨砂流光

  • 图片、视频按本地读取的真实宽高比占位;音频、TXT / Markdown 文本使用各自节点尺寸。普通 multipart 与大文件分片上传回传真实字节进度,磨砂和流光随百分比逐渐变淡;传输 100% 后显示保存处理中,不能当作服务端保存成功。
  • 四类文件共用上传、拖入、替换及失败重试流程;完成后填入同一节点,上传弹窗提前关闭,批量仍按顺序处理。纯剪贴板文字直接插入,不伪造网络上传过程。文本按 UTF-8 读取,不支持 PDF / Word 文档解析。
  • 上传失败保留明确错误和重新选择入口;替换失败保留原资源;上传中删除节点不会在完成后重新插入;刷新后中断占位转为错误。减弱动态效果设置下禁用流光和淡出过渡;媒体本地降级明确提示尚未上传到服务器。
  • 占位、进度浓度、四类文件、错误状态、相邻回归与普通/分片传输模拟测试通过,前端类型检查和完整构建通过;静态渲染与模拟传输不等同于真实网络及浏览器视觉验收。
  • 慢速网络下验证横图、竖图、视频、音频、TXT / Markdown、拖入和替换:比例正确,遮罩随实际进度变淡,完成前后位置稳定,右上角与节点状态同步。补验大于 50MB 的分片上传及保存失败。
  • 验证明暗主题、上传失败重试、刷新中断、上传中拖动或删除节点,以及系统减弱动态效果;未确认真实网络上传的浏览器交互。

上传图片保护与画布浮层顺序(#438 / #436)

  • 上传/导入的纯图片素材不再显示生成框和生成设置入口;空白生成节点、已有生成结果和显式复制/版本节点仍保留配置入口。替换上传会清除旧生成落点状态。
  • 人物质感操作创建独立图片编辑节点,通过入边引用原图;底部添加与外观面板接入统一浮层管理,打开或交互时置顶。
  • 图片素材判定、人物质感节点构造、入口接线、浮层接线及相邻布局/引用测试共 24 项通过;前端完整构建通过。浏览器访问现有服务进入登录页,尚未完成登录后的交互验证,也未调用真实生成接口。
  • 上传、拖入和替换图片,确认原图没有生成框;执行人物质感、局部重绘、裁剪、放大与表情编辑,确认原图保留、结果生成到新节点并有原图连线。
  • 先打开节点编辑框,再打开底部添加/外观菜单,确认后打开的面板在上层;再次点击节点编辑框能置顶,键盘操作、明暗主题和菜单关闭正常。

可视化排序与注册限流

  • 排序使用完整列表快照与事务保存,回归验证取消前的本地移动、过期快照、重复 ID、跨渠道修改及非管理员拒绝;价格和模型能力保持不变。
  • 验证验证码 SMTP 失败后可重试、同邮箱 60 秒冷却、429 响应的 Retry-After、小时窗口剩余时间与前端目录顺序。
  • 浏览器确认渠道和模型的“设置排序”、上下移动后保存及取消、用户端同时采用渠道与模型顺序;默认选择保留,临时顺序已恢复。拖动手势尚未单独做浏览器自动化验证。
  • 最终部署后日志记录 4 次验证码请求成功、3 次注册成功;自动化使用模拟 SMTP,未代替用户发送测试邮件。
  • 上线验收发现旧定时清理漏掉全局外观引用,启动时误删过期 Logo;已精确恢复原记录和文件,并验证清理保留四类外观资源、配置异常时拒绝清理。
  • 用户继续验收不同邮箱服务商的收件体验及较多用户共用网络的情况。

系统渠道排序与前台别名

  • 系统渠道及模型列表保存排序、刷新后持久化的浏览器验收通过;自动化验证分页前排序、别名筛选及相同值按创建时间和 ID 排列。
  • 用户端模型设置与创作模型选择器沿用目录顺序;浏览器验证渠道换序、模型移至末尾、别名显示和清空回退,临时配置已恢复。
  • 自动化回归验证排序独立保存不改价格、启用状态或能力版本,普通用户无权保存排序,不能跨渠道修改模型;前端会话归一化保留目录顺序与当前所选模型。
  • SQLite 与独立 PostgreSQL 内存盘环境验证版本 8 升级至 9、重复迁移和默认值;生产迁移后业务指纹一致,保留数据库备份及已验证启动的 schema 9 兼容回滚程序。

Tiptap 依赖版本对齐

  • Tiptap 核心、React、扩展及间接依赖统一锁定为 3.28.0,同步 Bun 与 pnpm 锁文件;显式声明 pm 和 extensions,避免 pnpm 保留旧 peer 解析。此项不修改编辑器业务代码和 UI 样式。
  • 使用 pnpm install --frozen-lockfile 后启动 pnpm dev,打开画布文本编辑器与项目章节编辑页,确认没有依赖预打包缺失导出错误。
  • 验证正文编辑、标题、列表、颜色、高亮、撤销重做、保存后重新打开,以及明暗主题外观。

v1.2.7 正式版本发布

  • 版本与镜像标签分别为 v1.2.7 和 1.2.7;发布流程构建前后端 Linux amd64/arm64 镜像并生成 GitHub Release、双架构 Host Updater 与 SHA256 校验文件,同时更新主分支 latest 镜像。
  • 本次发布目标是提供可用镜像,不自动部署服务、不修改线上数据库或运行配置。发布前应确认主分支质量检查、双架构镜像与 Release 附件均成功。
  • 拉取 ghcr.io/wxin/wxin-yan-web:1.2.7 与 ghcr.io/wxin/wxin-yan-backend:1.2.7,验证 amd64/arm64 manifest、容器内版本和提交信息,以及 docker-compose.deploy.yml 使用 CANVAS_IMAGE_TAG=1.2.7 启动。
  • 部署后验收登录、插件中心、文本节点、多角度编辑器、对象存储参考素材、模型批量操作、任务轮询、系统性能页面和真实生成链路;升级前备份数据库与数据目录。

创作页面附件缩略图

  • 聊天消息与分镜简报附件的放大图标样式排除 .cached-resource-image-shell,避免缓存图片容器被误设为透明和绝对定位;悬停与键盘聚焦仍显示放大图标。
  • 在真实创作会话中确认远端图片加载后无需悬停即可显示,移开鼠标后保持可见,点击可放大;同时确认分镜简报附件、本地图片和视频预览正常。

MiniMax H3 分辨率能力与价格档

  • 视频能力比较复用请求意图和价格档的分辨率别名归一规则,修复 MiniMax H3 供应线路配置 2K 价格档后,前台模型声明 2K 时误报「创作端参数超出供应线路能力:vquality」。内部价格档仍使用归一值,MiniMax 请求保持官方参数 resolution: "2K"。
  • 回归测试在修复前复现相同保存校验错误,修复后通过;相关能力匹配、线路覆盖和 MiniMax 专项测试通过。模拟 HTTP 请求验证 2K 与内部 1440p 均发送 2K,未声明的 4K 仍被拒绝,图片 quality 参数不受视频别名影响。
  • 在实际 /admin/channels 配置 768P / 2K 价格档后,于 /admin/models 保存包含 2K 的模型能力,确认创作端可选并正确报价;未调用真实收费生成接口或部署服务。

对象存储优先发送媒体 URL

  • 开启对象存储后,参考图、视频、音频发给上游时:协议支持 URL 就优先发对象存储签名链接;协议必须传文件字节时仍走 Base64 或 multipart。不会在上游失败后再自动重发一次生成。
  • 强制 URL:NewAPI 系列、火山方舟视频、MiniMax 视频,以及声明需要公网媒体 URL 的插件协议。优先 URL:chat-completion、openai-response、claude-api、Grok 图片、火山方舟图片、xAI/Novita/Grok/Seedance 视频等。Gemini 图片、Gemini Veo、带蒙版的 OpenAI 图片编辑继续走字节。
  • 本地资源在“优先 URL”协议下仍读成 Base64;对象存储资源签发失败、资源不存在或未就绪会直接报错,不会伪装成“不支持 URL”。存储桶不必公开读,使用短期签名链接即可。
  • 后端专项测试覆盖协议策略、OSS 强制 URL、本地强制 URL,以及 preferURL 时对象存储走签名 URL、本地回退 Base64。
  • 用户浏览器验收:开启 OSS/COS/七牛/S3 后,图生图或视频参考素材应发对象存储 URL;Gemini 或蒙版编辑仍发文件字节。签名失败不能变成静默回退 Base64。

管理后台系统性能

  • 管理后台「系统配置」新增独立「系统性能」页面,集中展示主机与 Go 进程、数据目录所在磁盘、系统/进程内存、数据库连接池与 Schema、PostgreSQL 统计、Redis 运行状态和运行时缓存 key 数量;连接地址、账号、密码、DSN 与 Redis URL 不返回前端。
  • 页面提供 15 秒自动刷新、手动刷新、降级提示和紧凑 KPI。SQLite 环境明确隐藏 PostgreSQL 专属统计,Redis 未配置时显示单实例本地协调状态;macOS 无可靠系统可用内存时降级展示 Go 堆内存,避免把未知可用量误报为 100% 占用。
  • 缓存维护仅接受 runtime scope,通过 Redis SCAN + UNLINK 清理请求频控、渠道失败/熔断和线路临时禁用四类白名单;保留活动并发租约、跨实例目录版本以及用户、任务、素材、模型配置和数据库数据,同时清理可重建的进程内读缓存并写入管理员审计。
  • 后端专项测试覆盖管理员权限、SQLite/无 Redis 状态、非法 scope 拒绝、本地缓存清理和审计写入;专项竞态测试、handler 路由注册、repository/service 和前端生产构建通过。Redis 白名单删除与保留边界的集成用例已实现,但本机无 redis-server,本轮自动跳过。
  • 浏览器 mock 已验证 PostgreSQL + Redis 完整态、SQLite + 本地协调降级态、桌面浅色与 390px 深色布局、无横向溢出,以及缓存清理二次确认文案;未调用真实清理接口。
  • 在真实部署的 /admin/settings/system-performance 验证 PostgreSQL 统计、Redis 指标、自动刷新和 Redis 断连降级;仅在测试环境执行缓存清理,确认流量高峰期间不影响活动并发租约和业务数据。

图片组预览、连线菜单与尺寸设置

  • 折叠图片组背板读取真实子图,排除当前主图、最多显示五张,并复用资源缓存与视口懒加载;未完成的子图保留占位背板。
  • 连线创建菜单的说明与禁用原因可换行,菜单限制在视口宽高内并允许纵向滚动。隔离组件页已通过浏览器确认真实图片背板与长说明显示。
  • 管理员固定展示 1K / 2K / 4K 三组,可选择或手动输入每档比例,等价比例归一去重;1K + 16:9 自动换算为 1824x1024,已有精确像素保持原值。未配置分档时,从已有尺寸按总像素推导档位(例如 1920x1080 为 2K)。
  • 图片协议的尺寸参数独占首行,输出数量与可选参数移到下方;每个分辨率档位用横向比例卡片直接点选,额外比例通过输入框添加,默认输出也改为直接点选,不再使用比例下拉框。窄容器自动改为单列,视频协议布局保持不变。
  • 后台未保存的新增模型表单已验证:比例选中/取消、32:18 等价去重、17:11 添加与像素展示、0:9 错误提示、默认输出切换、Enter 添加而非提交表单;1440px 桌面尺寸卡片独占整行,390px 明暗主题和长比例标签无横向溢出,焦点轮廓可见。验证后已取消表单、放弃测试修改并恢复原主题。截图工具未成功,本轮布局依据浏览器 DOM 几何测量与交互结果,视觉效果仍待人工确认。
  • 画布、创作和短剧生产接入同一“分辨率 → 宽高比 → 像素展示”组件。用户端仅显示协议支持且已配置比例的档位:例如 2K 比例为空时隐藏 2K,允许自定义也不额外显示空档位;剩余按钮等宽填充。管理员仍保留三档配置入口。允许自定义时开放比例或像素输入,切档尽量保持比例;重新打开保留真实自定义尺寸展示,不将已隐藏档位的旧尺寸伪装成其他档位选中,也不自动改写尺寸。
  • 空档位隐藏已在隔离组件页验证:仅配置 1K/4K 时无 2K 按钮,选择 4K 返回 3840x2160;仅一档时按钮铺满可用宽度,全空时隐藏分辨率标题和按钮,保留自动尺寸与自定义入口。未保存模型或发起生成,真实路由仍待人工复验。
  • 比例请求配置 aspect_ratio;精确像素配置 size。独立分辨率字段由对应模型协议适配,仅比例不能保证输出像素。模型声明的精确像素预设不受自定义尺寸的 16 倍数对齐限制,保持原值发送,其余尺寸边界继续校验。
  • 浏览器隔离组件页已确认:旧比例配置切 4K 实际交给请求转换函数的是 3840x2160;自定义 2:1 后切 2K 保持比例;0:9 显式报错且不改已选值;管理员输入 32:18 去重、17:11 自动计算并同步用户选项;Grok 禁用 4K。390px 视口内的 264px 面板在明暗主题下测得无横向溢出,含长比例标签。以上不等同于真实上游生成或三个路由的完整验收。
  • 前端 29 项尺寸、协议及能力专项测试和生产构建通过,包含空档位隐藏、比例无下拉框、禁用状态与图片/视频布局隔离回归;此前后端尺寸预设、能力规格转换及图片任务相关测试通过,覆盖默认组合拒绝、跨档位比例拒绝及 JSON 往返,本轮纯 UI 改造未重跑后端。构建仍有既有的大分包与无效动态导入警告。
  • 复验画布、创作、短剧真实路由中的模型切换、保存后重开、默认档位与比例组合、明暗主题和键盘交互;管理员真实保存由用户确认后执行。
  • 用真实模型确认新增尺寸是否受上游支持、实际输出与计费档位是否一致;本次未修改已保存模型配置或执行收费生成。

Issue #432 多角度编辑器

  • 多角度编辑器改为居中 Modal,复用遮罩点击、Escape 和关闭按钮的取消行为,不再定位到节点底部或随节点拖拽卸载。
  • #428、#429、#432 的定向源码回归检查与前端生产构建通过;浏览器访问现有服务停在登录页,未完成真实登录态交互验收。构建保留现有大分包和混合静动态导入警告。
  • 人工复验不同缩放和明暗主题下的位置、遮罩与 Escape 关闭、重新打开重置参数、预设与角度拖动;本轮不执行收费生成。

Issue #429 文本节点选中

  • 普通文本和富文本预览恢复鼠标事件冒泡,单击进入节点选中和编辑面板流程;编辑中的输入框仍隔离拖拽和滚轮。
  • 人工复验正文单击、标题拖拽、富文本、组合键多选、双击编辑和正文滚动。

Issue #428 插件协议分类

  • 分类筛选同时限制展示分区,避免音视频协议在音频筛选结果中重复展示;全部分类仍展示各自支持的能力分区。
  • 人工复验 AutoDL 在音频、视频和全部分类中的展示,以及搜索、状态筛选和详情入口。

画布多图分组与展开动画

  • 新生成的多图组默认展开,直接看到全部结果;仍可手动收起,复制图片或替换节点生成多图时保留分组归属、收起和设置主图。
  • 子图入场动画仅在主动展开图片组时触发;普通选择、拖动或重新进入视口不播放入场动画,快速切换展开与收起时清理上一轮动画状态。
  • 22 项相关测试及前端生产构建通过,包含子图普通挂载、选中与展开/收起的组件渲染回归;浏览器已确认本地画布可加载,尚未复验截图中的多图场景。
  • 人工确认多图生成后的堆叠预览、数量按钮展开/收起、子图点击与拖动、主图切换,以及保存后重新打开画布。已有画布保留用户保存的展开状态。

PR #426 本地整合验收

  • 保留主分支图片尺寸选择器、后台尺寸预设布局、插件分类筛选、文本节点单击编辑、多角度居中弹窗、附件缩略图、站点外观与系统性能页面;接入 PR 的 UI 组件族和创作会话交互。
  • 创作结果添加到画布前继续校验全部结果均有归属明确的素材记录,避免部分结果尚未落库时只转交部分素材;测试同步到消息级结果组件。
  • 本次不接入 PR 新增的用户彻底删除功能,移除其按钮、客户端调用、路由和级联实现,原有停用/启用及素材回收站功能保持不变。临时 SQLite 回归已复现原实现成功返回后残留镜头修订和素材展示记录;其资源物理清理、账务保留与事务边界需单独完善后再接入。
  • 无新增数据库迁移,不运行开发服务、不操作真实用户数据、不推送远程或部署。
  • 前端生产构建、前端主测试及主分支交互/外观和剪辑专项测试通过;后端 go test ./... 全量通过。
  • 浏览器验收:明暗主题下图片分辨率/比例、自定义尺寸、后台模型能力预设、插件分类、文本节点编辑、多角度弹窗、附件常显、创作历史与完整结果转交画布。
  • 确认后台用户管理保留查看/编辑/启用/停用入口,不展示未完成的用户彻底删除功能;实际生成与剪辑链路由用户验证后再决定是否推送。

UI 组件同角色迁移(P0,2026-09-06)

依据 docs/plans/ui-kit-consumption-audit.md 实施:主界面/后台同角色控件统一消费 components/ui,消除 antd 与 ui 双观感。变更范围:Tooltip 29 处、Switch 10 处、朴素单选 Select 12 处、Checkbox.Group 1 处迁移至 ui 族;同步清理 globals.css 中 3 段 antd Checkbox 死选择器。antd Switch/Checkbox/Tooltip 全库归零;Empty/Alert/Badge/状态 Tag 维持零。

  • tsc --noEmit + vite build 通过(跳过与本次无关的 build:bridge 预构建)。
  • 代码级核对:size="small"→"sm"、mouseEnterDelay 秒→delay ms(ui 契约)、id/htmlFor→ariaLabel(ui Select 不接收 id)、rootClassName 死类删除、CheckboxGroup 泛型对齐;antd import 行同步剔除。
  • 浏览器目验(待用户确认):
    • Switch(ui 版):画布节点配置面板、字幕弹窗、工具栏显隐设置、人像抠图弹窗「浏览器调试」开关、图片/视频生成设置面板——尺寸/轨道/焦点态与设置页、后台开关一致。
    • Tooltip(ui 版):后台左侧栏折叠提示、项目详情页签栏与新建按钮、画布各图标按钮、技能/插件/设置页——悬停提示正常、无溢出裁剪(ui 版外层 span 包裹)。
    • Select(ui 版):后台邮件/存储设置、用户编辑抽屉、皮肤主题编辑器、画布页布局切换、项目详情设置、设置页与技能编辑/安装——下拉观感与尺寸、placeholder、暗色模式正常;skill 模板/皮肤阴影下拉值回显正确。
    • CheckboxGroup(ui 版):脚本节点右键「显示列」选择器——勾选/反选、列显隐即时生效,无残留 antd 勾选样式。
    • 已知保留(非本次改动,不判回归):搜索/多选 Select(约 24 处)与画布 11 处 Segmented 维持 antd,ui 能力缺口补足前不迁移。

v1.2.6.rc3 候选版本发布

  • 本版本在 rc2 基础上纳入此前未提交的模型编辑弹窗、协议浏览器、后台切页与画布网格源码及相邻回归测试;版本为 v1.2.6.rc3,镜像标签为 1.2.6.rc3,不覆盖 rc2。
  • 默认前端测试命令已接入模型编辑表单、价格档、前台模型与画布网格回归;最终 bun run test 的 39 + 4 + 1120 + 1 项测试全部通过,前端生产构建通过,仍有既有包体积与混合静动态导入警告。
  • 隔离组件页使用明确的测试协议数据完成浅色桌面、390px 暗色窄屏、协议搜索选择与详情联动、长内容滚动和固定底栏验收;后台编辑器跨页签必填校验能定位基本信息,取消修改会确认且可继续编辑。校验期间无 XHR/fetch 请求及控制台错误,不代表真实路由或后端保存已验收。
  • 本轮相对 rc2 无后端源码变更,未重跑后端全量;rc2 记录的既有后端测试失败仍不视为解决。
  • 标签推送后的远程质量检查中,后端全量与支付插件检查通过,前端被 9 个文件的格式检查阻断。主分支追加格式修复,并将协议浏览器静态回归的定位条件改为忽略换行缩进;本地 1164 项前端测试复跑通过。已推送的 rc3 标签不改写,该补充提交不改变应用业务逻辑。
  • 发布产物验收:前后端 Linux amd64/arm64 镜像、双架构更新器校验和、部署 Compose 附件以及镜像内版本和提交信息。
  • 部署后验收:实际模型新增/编辑保存、真实协议与计费组合、后台路由切换、画布缩放以及登录和任务生成。本次不部署、不写入真实模型配置、不执行收费生成。

v1.2.6.rc2 候选版本发布

  • 发布版本与镜像标签分别为 v1.2.6.rc2 和 1.2.6.rc2,GitHub Release 应标记为预发布。发布范围包含 PR #423 合并后的远程主分支,不包含本地未提交改动。
  • 发布前代码验证:前端完整测试与生产构建通过;后端相关专项通过,全量测试仍有 4 项在合并前基线同样失败,另一次素材清理测试出现 SQLite 表锁且独立复跑通过,不将后端全量标记为全绿。
  • 发布产物验收:前后端 Linux amd64/arm64 镜像、Release 双架构更新器、SHA256SUMS 与部署 Compose 附件,以及镜像内版本和提交信息。
  • 部署后验收:版本展示、登录、画布任务恢复、图片规格报价、真实邮件与生成流程;本次仅发布镜像和附件,不部署服务或修改线上数据库。

缓存回源与任务队列止血

  • 已加入进程内有界读缓存:SSE 按用户、任务、游标合并回源;并发策略短缓存;路由版本短缓存和目录回源失败冷却。强校验的计费、配额、权限读取不改为缓存。
  • worker 改为可续期全局槽位和每次领取独立 owner;数据库进度、终态、完成事务、延迟回查检查有效租约;旧执行者条件更新失败后不继续退款和完成会话。渠道槽位等待改为有上限的随机退避。
  • 已通过定向回归与缓存 / 租约 race 检查,覆盖突发同 key 合并、失败冷却、容量与正文预算、取消、缓存失效、用户 / 游标隔离、调用者副本和旧 owner 写入拒绝。完整 repository / handler 测试通过;完整 service 仍有 4 项既有失败,已在 HEAD 隔离副本复现(渠道私网策略 2 项、视频恢复策略 2 项),不将其标记为全绿。
  • Redis Lua 与 PostgreSQL 双实例故障注入、长任务续租、worker 强退后恢复及真实 SSE 重连验收;本地缺少 Redis 服务且 Docker daemon 未运行,尚未执行真实 Redis / PostgreSQL 集成测试。
  • 线上故障时段取证及灰度效果确认;本次没有部署、清缓存或重投任务,不能认定早间事故已修复。
  • 独立 worker、可靠投递、渠道前置队列、全部回调 owner 校验、业务 Redis 缓存、请求链路日志和事件驱动 SSE 属于后续阶段。范围、上线风险及验收步骤见“开发文档 → 任务缓存与队列稳定性”。

后台模型编辑与紧凑布局

  • 模型编辑改为固定操作栏的高弹窗,按基本信息、能力与参数、积分定价分组;隐藏页签校验失败时定位到对应页签,未保存修改关闭前确认。
  • 基本信息采用双列字段,次要说明收进提示;价格档的定价方式、计费方式与金额横向排列,规格条件单独展开,启用状态收进档位标题栏。
  • 引用与限制改为左侧标签、右侧数字框,支持/默认开关横排,压缩卡片头部和行距,卡片按内容高度展示;样式限定后台编辑弹窗,不改变设置页的共享组件布局。
  • 调用协议由下拉框改为固定高度的内嵌协议浏览器:支持按协议名称、厂商和请求路径搜索,以单选列表切换,右侧持续展示当前协议的请求、请求体、响应方式和来源;约 30 个视频协议下仍保持弹窗高度稳定。
  • 管理后台“前台模型”和用户端“自定义渠道”的新增/编辑统一为居中分组弹窗;前台模型的供应线路改为可搜索单选浏览器。自定义渠道把连接信息、模型与能力合并为一个可滚动页面,不显示页签;调用协议仅在渠道内模型的“编辑模型使用配置”中选择,用户自定义模型不提供积分定价。
  • 隔离组件验收已覆盖前台模型新增、类型切换、线路添加与详情联动,以及自定义渠道新增、完成后重新编辑、渠道内模型协议搜索切换和嵌套编辑;验收适配窄屏单列布局,未向后端写入测试数据。统一改造后的 46 项相关回归测试和前端生产构建通过。
  • 协议选择专项与后台 UI 回归共 27 项通过,前端生产构建通过;浏览器已确认当前协议选中态、协议详情和 sora 搜索筛选正常,未执行协议切换或保存。
  • 31 项相关回归测试和前端构建通过。浏览器验证引用数量字段可编辑并恢复原值,未支持参数的默认开关仍禁用;桌面与 390px 窄屏无横向溢出,底部操作栏可见、长内容可滚动。未保存模型或触发收费上游测试。
  • 人工确认紧凑布局、浅色主题、新增/编辑实际保存、协议切换和规格计费组合;当前真实路由受前台模型与自定义渠道功能开关限制,本轮只在隔离组件页完成交互验收。
  • 后台切页已移除入场透明度动画并收敛为持久布局内的 Suspense 边界;冷/热路由切换的闪屏效果仍需浏览器复验。

邮箱域名白名单与公告自动提醒(PR #417)

  • 新增注册邮箱域名白名单:默认常见服务商、空列表不限制、精确域名匹配;发送注册验证码及提交注册都会校验,已有账号找回密码不受限制。保存失败不覆盖既有配置。
  • 公告允许仅标题发布;工作区自动提示未读公告,支持关闭本次及今日不再提醒。保留弹窗按需加载;主动打开后即使已读同步失败,关闭也不会立刻重新弹出。
  • 合并沿用主分支历史迁移方案,不重复执行迁移或重写版本 6 的历史记录;未修改用户数据库,历史升级仍需备份及 PostgreSQL 实际环境验收。
  • 已通过前端构建及本次相关后端数据库、handler、service 专项测试;公告提醒前端回归使用静态契约检查,不等同于浏览器交互验收。
  • 基线复测确认既有失败:后端渠道私网策略 2 项、视频恢复策略 2 项,以及前端工作区加载骨架断言 1 项;本次不修改这些无关逻辑。
  • 待人工验证:邮箱设置保存/清空/刷新及错误展示、仅标题公告发布与重新发布、明暗主题、窄屏弹窗、跨日提醒、不同账号的今日免打扰隔离,以及网络失败后的手动关闭与重试。

v1.2.6.rc1 候选版本发布

  • 发布版本与镜像标签分别为 v1.2.6.rc1 和 1.2.6.rc1;GitHub Release 应标记为预发布,不能被当作正式版本推荐。
  • 待验证:前后端镜像的 Linux amd64/arm64 构建、Release 更新器附件与校验文件,以及实际部署后的版本展示和核心流程。本次发布不自动部署服务,构建成功不代表业务验收通过。

历史迁移 6 编号冲突

  • 已修复历史 asset_library_folders 占用版本 6 导致启动失败的问题:保留既有记录,精确验证名称与校验和后,在版本 7 补齐播放副本字段;现行数据库迁移顺序不变。
  • 已验证 SQLite 数据库测试:历史版本升级、目录数据与迁移时间保留、播放字段实际补齐、重复执行、未知名称/校验和及冲突记录拒绝;未直接修改用户数据库。
  • 待验证:实际部署备份后的迁移与后端重启,以及 PostgreSQL 历史数据库升级。回退必须使用匹配备份与代码,不能直接修改 schema_migrations。

登录与个人库按需加载

  • 登录不调用全量 snapshot;画布库每页 40 条摘要、服务端搜索排序;详情、导出和重命名按 ID 加载。素材选择按页读取,画布引用素材每批最多 100 个 ID。
  • 已验证:前端构建、账号持久化专项 50 项测试、后端分页与批量读取隔离测试、handler 包测试。待新后端加载代码后验证登录首页网络、分页滚动、搜索、跨页选择、导出、重命名及失败重试;本轮浏览器连接中断,未取得改造后请求数。
  • 后端 service 包更大范围测试有 4 项失败:TestChannelFromRequestStoresAndClearsHeaders、TestRuntimeConcurrencyUsesEnvironmentFallback(私网地址策略),TestOnlyResumableNewAPIChannel2VideoDeadlinesStayRunning、TestResumableVideoDeadlineUsesResolvedSystemChannelProtocol(视频恢复策略);未借本次分页优化调整这些逻辑。
  • 待验证:新账号无缓存时的生成回填、历史创作转画布、项目图片与声音选择、跨设备编辑冲突和 PostgreSQL 查询。
  • 边界:Vite 开发模块请求不能当作业务 API 数量;本地 IndexedDB 仍整体恢复,后端仍解析当前页完整画布。增量会话不基于未加载数据推断删除或自动归档素材。

提示词编辑器顶栏精简

  • 标题改为“图片生成 / 视频生成”等无底色文本;“提示词模板”和“润色”右对齐,辅助操作默认透明,仅悬停、展开或键盘聚焦时强调。
  • 参考数量移到缩略图行,纯图片引用显示“参考图”,混合引用显示“参考素材”;保留预览、插入引用和移除连接行为。
  • 前端生产构建通过;浏览器确认图片普通面板与放大面板的标题、参考数量位置,以及模板菜单展开。
  • 确认明暗主题、窄窗口、视频及音频面板的显示;启用润色插件后检查入口与原有优化流程。当前验证环境未启用该插件,未触发生成或收费操作。

画布浮层平移同步

  • 连续平移、缩放时,节点工具条与提示词卡片逐帧跟随,结束后不回跳;调整窗口宽度后仍正确定位。
  • 顶部空间不足时工具条仍避让提示词卡片;明暗主题下移动无模糊残影,菜单、输入和键盘操作正常。
  • 实现:卡片改用逐帧视口事件和 transform 定位,尺寸变化使用最新视口;工具条合并重复通知并缓存尺寸,交互期间关闭浮层滤镜。
  • 工具条及媒体性能专项测试 31 项通过,前端生产构建通过;浏览器连续平移与缩放采样中,卡片与节点间距约 10px、工具条与节点间距 30px,未出现定位回跳。大画布性能、不同设备上的残影观感仍待确认。

图片与视频节点工具条重组

  • 图片:平铺只保留局部重绘、文字编辑;其余按用途收进四个菜单:画面调整(人像 / 光影 / 主体与图层)、镜头(视角含多角度与全景图 / 画面推演 / 3D 预演)、宫格与设定(分镜宫格 / 设定图)、图片工具(构图与尺寸 / 拆分与标记)。电影级光影校正不再放在宫格菜单,预览与下载为图标操作。
  • 图片紧凑档:画面调整、镜头、宫格与设定并入「工具」菜单,宫格类入口不再在紧凑档消失。
  • 视频:截取片段、字幕平铺;画质增强与提取画面 / 提取音频收进「视频工具」菜单;版本、进入剪辑保留;替换素材收进更多,移除节点单独分组。
  • 提示词面板「预设」菜单仍列出全部 9 个预设,宫格与设定在前,光影、画面推演在后。
  • 调整尺寸明确为插值放大而非 AI 超分;未实现的超分入口不再展示。裁剪、标注、放大、宫格和音频结果名称保留源素材名。
  • 窄画布折叠工具与剪辑入口,顶部空间不足时工具条保持在可视范围;检查明暗主题、滚轮不穿透和点击后关闭。
  • 工具条专项测试覆盖分组、文案、空态、简洁模式、忙碌禁用和动作派发;前端类型检查与生产构建通过(存在分包体积及混合导入警告)。
  • 已在现有开发服务确认图片菜单分组、方向键进入菜单、Escape 关闭并返回触发按钮;390px 视口下工具条为单行且不越界。
  • 已确认视频四个一级入口及提取素材菜单;边缘节点工具条避让生成面板后可正常点击。
  • 素材预览端到端验证受当前资源接口 500、本机 Agent 连接失败影响;不将界面验证视为媒体链路全部通过。
  • 真实素材端到端复核:局部重绘与表情生成、质感设置、音频提取保留原声、项目时间线定位;本次不自动触发收费模型任务。

图片区域标注(替换局部重绘)

  • 图片工具条「区域标注」打开弹窗:左侧点阵画布上拖拽画多个矩形框,自动编号 1、2、3;选中后可拖动、拉四角缩放、按 Delete 或 × 删除,Ctrl/⌘+Z 撤销、Shift+Ctrl/⌘+Z 重做,底部操作坞计数同步。
  • 画完一个框后右侧缩略图网格出现「区域N」,提示词自动追加一行带缩略图胶囊的 @区域N,光标落在该行末尾;点缩略图与点框双向高亮。
  • 删除区域(含撤销新建)会移除以它开头的整行和其他位置的该引用;撤销删除会重新追加该区域的引用行。
  • 提示词里输入 @ 弹出「图片区域」引用菜单(复用画布引用菜单与胶囊样式),双击胶囊可预览区域裁图;⌘/Ctrl+Enter 生成;引用不存在的 @区域N 时阻止生成并提示。
  • 右侧面板 420px,模型选择独占一行,图像设置与生成按钮在下一行。
  • 生成:支持 ≥2 张参考图的模型收到原图 + 编号标注图;支持蒙版的模型额外收到框选区域蒙版;单图模型只靠提示词中的百分比坐标。结果节点连线到原图,多张输出按批量根展示,框线和编号不出现在结果中。
  • 明暗主题、≤960px 窄屏(上下布局)、prefers-reduced-motion 下样式正常;底部模型选择和图像设置浮层不被弹窗遮挡。
  • 已验证:前端类型检查与工具条 / 图片源专项测试通过;未做真实浏览器和真实模型生成验证。

验证码邮件

  • 邮件配置保存自定义发件名称后,新发送的注册验证码邮件发件名称、标题和正文保持一致;密码重置验证码邮件同样使用该名称。
  • 发件名称留空或使用默认名称时,验证码邮件继续继承站点品牌名称;再次修改自定义发件名称后,新邮件使用最新名称。

画布任务恢复

  • 缺少任务 ID 的节点,通过当前项目最近 100 条任务摘要的 clientContext.nodeId 恢复;完成后正常回填。超出发现范围的旧任务不保证自动恢复。
  • 回归覆盖任务摘要节点关联、敏感输入不泄露,以及前端在没有完整输入时读取节点 ID。

图片规格价格

  • 仅配置 1K、2K、4K 三档价格(无统一兜底),画布逐一切换分辨率,显示与对应档位一致的积分价格。
  • 分别配置文生图、图生图规格价格;添加、移除参考图或角色参考后,报价与实际生成命中对应档位。
  • 新建图片节点时,报价使用节点模型默认规格,而不是全局旧参数;刷新后再次核对。
  • 配置统一价格时仍正常兜底;未配置且没有兜底的规格不能被计为其他档位价格。
  • 合并检查补修:缺少质量参数时按有效尺寸匹配档位;不把空参数转为 "<nil>";面板保留实际生成的“自动”参数,不以价格表第一档替换请求规格。
  • PR #423 合并验证:前端完整测试脚本 1139 项通过、生产构建通过;后端邮件、任务摘要和图片计价专项通过。后端全量仍有 4 项既有失败(私网上游校验 2 项、视频恢复策略 2 项),已在未合并的 main 基线上复现;最后一轮另有资源清理测试 SQLite 表锁失败,该项在合并分支与基线单独复跑均通过。未为通过测试而放宽安全或恢复策略。
  • 真实 SMTP 投递、浏览器刷新恢复和收费生成仍待人工验证。本次不触发外部邮件或收费请求。

NewAPI Video Generations Channel 2 轮询恢复

  • 官方插件兼容从 data.task_id 和 data.taskId 读取上游任务 ID;Channel 2 创建成功后首次查询等待 2 秒,仅将结构化 400 task_not_exist 识别为上游同步延迟,并按 2 秒、3 秒、5 秒、5 秒退避复查同一任务。
  • 短期重试耗尽后,Worker 保留本地任务 running、原 provider_request_id 和计费状态,延后 15 秒继续查询;恢复过程不重复发送创建请求、不切换渠道,也不立即失败或退款。其他接口类型、HTTP 状态和错误码仍按原失败语义处理。
  • 合并补修为跨轮次 task_not_exist 增加 5 分钟总同步上限;超过上限进入明确失败态并释放任务与计费资源,正常 pending/running 长视频仍可跨执行窗口恢复。
  • Channel 2 终态响应兼容 data.result_url、data.video_url、data.output_url、data.url、data.metadata.url 及对应的 data.data.* 嵌套路径;API 调用日志在该接口下优先记录嵌套真实任务 ID。协议与日志富化专项回归测试通过。
  • 使用真实 Channel 2 分别验证上游任务 ID 短暂不可见和生成耗时 500 至 600 秒的任务:本地不再提示“模型服务拒绝了请求”,创建请求只出现一次,后续始终查询同一 Provider Task ID,最终视频正常回写;真实参数错误仍应及时失败。
  • 使用返回 SUCCESS 且视频地址位于 data.result_url 或 data.data.video_url 的真实任务,确认不再提示“声明式协议已完成但没有返回结果”,并在当前 OSS 配置下成功下载并持久化为本地资源。

编辑器(M2 命令状态机)

  • 命令协议黄金文件:editor-commands 8 个黄金 op(addClip/moveClip/trimClip/splitClip/removeClip/setClipProperty/addSubtitle/removeSubtitle)全量快照比对通过;未知 op、非法 payload 一律抛错(fail-closed)且输入不可变。
  • 快照撤销:editor-history 有界 200 层,undo 后新命令清空 redo;边界测试(0 层/200 层/undo 后 redo 清空)通过。
  • 命令状态机 store:editor-store 命令入队→reducer→新状态,手势预览(previewGesture 连续预览/commitGesture 一次性入历史/cancelGesture 丢弃),1.5s 防抖保存(保存层依赖注入),保存串行链防旧快照覆盖,失败置 saveError 且保持 dirty;11 项测试通过。
  • 浏览器冒烟(待用户确认):项目详情 → 剪辑成片 → 编辑器,拖拽片段移动、拖拽边缘裁剪(trim-start/trim-end)、撤销/重做按钮与缩放按钮;松手提交后可一次撤销;刷新后本地时间线(localforage scope 隔离)保留;状态栏显示 未保存/保存中/已保存/保存失败。
  • M2.4 手势与画布拖拽不冲突(时间线容器 data-canvas-no-zoom),快捷键(Cmd/Ctrl+Z)与全局冲突项待 M3 统一处理。

编辑器(M3 预设插件八连)

  • 命令层新增 rebuildSubtitleClips(9 个黄金 op):从节点权威 subtitleEntries 重建字幕快照,确定性 id(nodeId:subtitle:index)重复导入原地替换;非法 entries(index/startMs/endMs/text/重复 index)与非法轨道(非字幕轨/无字幕轨)fail-closed;黄金文件追加用例通过(26 项)。
  • M3.1~M3.4:timeline-panel(选中联动 + 撤销/重做/缩放 UI)、preview-monitor(buildTimelineRenderPlan 预览)、inspector(setClipProperty 可撤销)、asset-ingest(addClip 入轨)插件与 editor.tsx 三段式接线已提交。
  • M3.5 subtitle-tools:SRT 粘贴导入(parseSrt → rebuildSubtitleClips 重建快照)、当前时间线字幕导出 .srt(serializeSrtEntries 往返一致);AI 高亮占位(M6 接入)。
  • M3.6 transcription:确定性 mock 转写(mockTranscriptionEntries 同输入同输出,3 项测试),结果按 ADR-0004 协议重建到字幕轨道;M4 替换真实任务客户端。
  • M3.7 export:渲染计划(buildTimelineRenderPlan 与画布同源)+ ffmpeg.wasm 降级导出(exportTimelineToMp4 带进度);悬空 nodeId 源按计划跳过。
  • M3.8:editor.tsx 全 8 槽三段式渲染(左素材/转写,中预览/时间线,右检查器/字幕/导出/AI)+ ai-assistant 占位(M6);typecheck 零错误、专项 53/53、全量 build 通过。
  • 浏览器三段式冒烟(待用户确认):编辑器六个区域(时间线/预览/检查器/素材库/字幕/转写/导出)逐区域可见可操作;拖拽/裁剪/撤销重做回归;SRT 导入导出往返;mock 转写落轨;导出面板显示渲染计划。

M5(编辑器插件权限执行,fail-closed)

  • M5.1:plugin-permission-check.ts 新建——8 插槽→最小权限表(timeline.read/timeline.command/export.run 三类域)+ pluginMayRenderEditorSlot/assertEditorPermission fail-closed 判定;测试 10 用例(表完整性/空权限拒绝/未注册拒绝/缺权限拒绝含 missing 域/editor-shell 真实回归 8 插槽可渲染)全绿。
  • M5.2 执行路径接入:editor.tsx SlotStack 渲染前过滤——缺权限插槽不渲染、改显一行诊断条(含缺失域);editor-shell manifest 权限补全为 timeline.read/timeline.command/export.run;tsc 全绿、全量 bun test 失败集与改动前一致(零新增回归)。边界:宿主全局命令(editor-commands,v1 语义)与宿主 UI 手势不经过此校验,仅 v2 插件插槽贡献与后续 M6 AI 命令代发通道受约束——ADR-0007「v1 权限语义一字不动」。
  • M5 浏览器验证(待用户确认):停用/注册一个缺 timeline.command 权限的第三方插件时对应面板被拒渲染并显示诊断;editor-shell 全部 8 面板正常。

M6(AI 编辑助手:schema + 摘要 + 面板)

  • M6.1:ai-command-schema.ts 新建——AI 命令 JSON 解析(容忍 markdown fence/前后杂讯/字符串内括号)、批级 dry-run 预检(走 M2 命令注册表,任一非法整批拒绝并报下标与 op)、12-op LLM 提示词契约(AI_EDITING_OP_CATALOG + buildAiEditingSystemPrompt)、AI_COMMAND_SCHEMA_VERSION 版本化;ai-commands.golden.json 固化 op 集与 registry 黄金同步(漂移即测试失败);20 用例全绿。
  • M6.2:timeline-summary.ts 新建——确定性中文摘要(轨道按 order 排序逐行、片段逐行含 id/kind/时间区间、字幕字数统计、空态提示);片段行数超限折叠(SUMMARY_MAX_CLIP_LINES);同输入同输出;10 用例全绿。
  • M6.3:editor-ai-assistant.tsx 从占位替换为真实 AI 助手——右上悬浮对话面板(OpenAI Canvas 风格):面板内文本模型选择器(effective.textModels 即文本能力模型目录,选择即 updateConfig("textModel", …) 持久化并在请求时同时覆写 config.model/textModel,绕过默认/误配图像模型的根因)、消息流(user/assistant/error/preview 四类气泡 + 思考中占位)、空态引导(示例意图文案,点击建议指令 chips 即发送,跨轮记忆)、底部输入条;顶部工具栏常驻 Sparkles 入口(aria-pressed 切换)。宿主链路:buildAiEditingSystemPrompt(summarizeTimeline(project)) 喂上下文 → 流式增量渲染 → parseAiCommandPlan → validateAiCommandBatch dry-run(任一非法整批拒绝,同步 registry 校验、不落盘)→ ≤3 条 dispatch 直执行 / >3 条渲染 diff 预览卡片「确认执行(N)/ 放弃」→ 解析/校验拒绝时错误气泡可「修正后重试」(failTurn 回填 FAILED_MARK,历史含用户文本不重发;registry 直执行本身 fail-closed——拒绝写入 saveError 顶部提示,同步 dispatch 不抛错故不回填 FAILED_MARK)。修复了上一版文件的重复/截断函数(appendToEntry 双定义、settleAnswer 三声明等);typecheck 零错误、编辑器/插件相关测试通过、生产构建通过。
  • 浏览器冒烟(待用户确认,需真实文本渠道):顶部工具栏 AI 图标开关面板 → 切换面板内模型下拉(无可用模型时展示禁用态)→ 输入自然语言;确认 ≤3 条指令直接执行且可撤销(撤销按条回退,N 条需 N 次撤销)、>3 条出现预览确认卡片(放弃不动时间线、确认后预览卡转为执行汇报、重复点击不再二次提交)、模型输出非法 JSON 时错误气泡出现「修正后重试」并回填失败标记、ESC/关闭按钮收起面板后再次打开会话仍在。

M4(后端转写/渲染任务)

  • M4.1 执行侧(e9d1b8ad):本地 whisper.cpp HTTP(CANVAS_WHISPER_BASE_URL)转写;语音数据不出本机;未配置时任务明确失败并提示设置;processClaimedTask 顶部按类型分叉、旁路计费/模型路由,20 分钟超时;ffmpeg 预处理 16k 单声道 wav;verbose_json 解码/formatSRTTimestamp/buildTimelineSRT 单测 PASS。
  • M4.1 创建 API(bf26ebb1):POST /api/timeline/transcriptions(注册于 RegisterTaskRoutes)→ CreateTimelineTranscriptionTask:draining 503 → feature 门控 → 资源归属/可转写类型校验 → 配额入队(local/whisper.cpp,无 billing order);活跃任务上限 → 可读 400;测试 3 项 PASS。
  • M4.2 渲染任务(3f16d13b):POST /api/timeline/renders → CreateTimelineRenderTask:buildRenderPlan 校验 ≥1 可渲染媒体 → 配额入队(local/ffmpeg);worker 分叉 processTimelineRender(60 分钟超时):ffmpeg 合成 → 产物写资源存储 → ResultJSON{resourceId,...};计划/失败快路径测试 PASS。
  • M4.3 前端字幕回写(fd5e8139):timeline-tasks.ts 客户端 + editor-transcription.tsx 真实任务替换 mock;资源范围放宽到音视频;resourceId 由 storageKey 推导;waitForGenerationTask 显式 25 分钟超时轮询;结果 segments → SrtEntry → rebuildSubtitleClips 落字幕轨;typecheck 通过。
  • M4.1 运行时端到端(2026-09-04,真实 whisper.cpp):brew install whisper-cpp + ggml-base.bin,whisper-server 127.0.0.1:8082(-l auto);后端注入 CANVAS_WHISPER_BASE_URL=http://127.0.0.1:8082 重启;真实 mp4 资源经 worker 队列(status=queued → running → succeeded 100%)跑通:ffmpeg 16k mono 提取 → /inference verbose_json → 中文分段含 start/end/text 入库,与 transcription_whisper.go 解码协议一致。失败路径(未配置)此前 5 条任务均按设计报“撰写失败未配置本地转写服务”。启动步骤已写入 local-development.mdx,脚本 scripts/start-whisper-local.sh。
  • 浏览器端到端(待用户确认;本机 whisper-server 已就绪,直接重试转写即可):媒体面板选音视频素材 → 转写 → 进度可见 → 完成后字幕分段入轨可编辑;错误路径(未配置/删除素材/非音视频/活跃任务上限/功能未开放)提示可读。
  • M4.2 渲染前端接线:timeline-tasks.ts 增 createTimelineRenderTask(timeline 整传 TimelineProject v2,与后端 renderProject 契约同构);editor-export.tsx 主路径改提交 POST /api/timeline/renders → waitForGenerationTask 轮询(62min)→ ResultJSON.resourceId 内嵌预览/下载;ffmpeg.wasm 降级保留;tsc 全绿、无新增测试失败。
  • M4.2 渲染浏览器验证(待用户确认,需 ffmpeg 可用):导出面板「渲染成片(服务端)」→ 轮询进度 → 完成后内嵌预览/下载渲染产物;无后端时「本地导出」ffmpeg.wasm 仍可用。
  • 文档回写(已提交):docs/plans/m4-transcription-render-design.md §2 决策 3/4/5 按“单一池 + 类型分叉”与旁路终态修正;端点统一为复数 /api/timeline/transcriptions 与 /api/timeline/renders(注册于 RegisterTaskRoutes);auth.go 前缀白名单补 timeline。

编辑器 UI 打磨(主题/布局/导入媒体)

  • 主题联动修复:globals.css .dark 块未闭合导致 .editor-workbench 规则被 CSS 嵌套吞并、浅暗主题三栏配色反转;补齐花括号后编译产物恢复顶层两规则,director token 明暗两主题齐备。
  • 播放条修复:预览卡与时间线卡容器补 flex flex-col,恢复 absolute 播放条的高度链。
  • 时间线右端截断修复:内容宽度改为 trackWidth + 标签列(160px),标尺左列占位与轨道标签列改为 sticky(left-0 + 不透明底),滚动到最右端时末端片段完整可见;容器宽度监听改用 ResizeObserver。
  • 顶部栏图标化:删除「剪辑工作台」标题 + Film 图标 + 分隔线等死图标;导出按钮改为纯图标(aria-label/title 保留)。
  • 媒体导入失败修复:linkProjectAsset 原来只认 assets 表记录,而上传只落 resources 表,导入必然 404。后端 LinkProjectAsset 在资产不存在时按资源元数据(storageKey/mimeType/kind/宽高/时长/状态)合成资产记录并幂等补齐(UpsertAsset),Title 透传原始文件名;资源与资产都不存在时仍 fail-closed。前端导入调用补传 title: file.name。
  • 后端新增 TestLinkProjectAssetCreatesAssetFromUploadedResource 与 TestLinkProjectAssetMissingResourceKeepsFailingClosed 专项测试;前端 typecheck、生产构建、后端全量测试通过。
  • 用户浏览器 re-test(第 35 条):媒体面板中导入的素材与项目资产分组显示、筛选 Tab 切换、分组折叠与资产行展开;浅色/深色主题切换后媒体面板配色与编辑面板一致;时间线横跨整个编辑面板宽度,拖动分隔条调整高度正常。
  • 对象存储上传降级:OSS 上传失败(密钥失效、配置错误、网络故障、设置被删)自动回退本地存储并同步改写资源记录,本地媒体导入不再因外部存储故障整体失败;覆盖新上传与重试两条路径。专项测试 2 个(OSS 不可用降级成功 + 本地路径不受他人 OSS 设置影响),后端全量测试通过。
  • 用户浏览器 re-test(对象存储降级):重新启动后端后再次导入视频,应显示成功且素材出现在媒体面板;资源走本地存储(provider=local)。
  • 编辑器 UI 打磨(第 36 条 5 项):① 时间线/监视器分隔条拖拽方向反转(上拖=时间线变大);② 导出按钮图标去蓝(灰白描边风格),媒体面板来源徽章去蓝,轨道类型徽章保留语义色;③ 时间线 pxPerMs 独立化(不再随时长漂移),末片段向右拖轨道随内容等比扩展不再被钉住(新增守护测试 3 例);④ 监视器控制条重做为 Concat 风格:回到开头/退 1s/播放/进 1s/到结尾五键传输组 + 播放速度展开菜单(0.5x/1x/1.5x/2x)+ 进度条,全部灰白描边;⑤ 检查器重做为 Concat 风格:分组小标题(片段/基本/转场)+ 紧凑控件 + sunken 滑块(新增 .editor-slider),全部使用 director token 随主题联动。
  • 用户浏览器 re-test(第 36 条):上拖分隔条时间线变大;导出按钮与监视器控制条图标均为灰白描边风格;时间线末片段可正常向右拖拽且轨道随内容扩展;监视器速度菜单展开选择生效;检查器分组与滑块在明暗两主题下配色一致(无主题不同步)。
  • 媒体面板改版:资产按来源分组(「本地上传」/「项目素材」),顶部提供 全部/项目素材/本地上传 筛选 Tab;分组头可折叠、资产行可展开查看详情(类型/分类/来源/预览文本)并一键添加到时间线;每项带来源徽章与计数徽章。后端 projectAssetSummary 透出 source(上传链路写入 uploaded),前端 ProjectAsset 类型补 source?: string,仅展示层使用,后端读取不再查询本地存储。
  • 概览成片完成度接线:项目概览指标新增 renderSucceededCount(repository 聚合 SQL 子查询 tasks 表 type=timeline_render 且成功的计数),概览「剪辑成片」步骤卡的 complete 态由写死的 false 改为 renderSucceededCount > 0,提示文案随计数/就绪情况切换;新增后端专项测试 1 个、前端类型检查通过。
  • 用户浏览器 re-test(概览完成度):渲染成功一次后刷新概览,「剪辑成片」卡应显示已输出 N 个成片且步骤完成态点亮;删除该成片对应任务后计数回退。
  • 时间线横跨编辑面板全宽:时间线卡从内容区独立出来,与左栏+预览+右栏同处编辑面板,横跨从左到右全宽(含拖拽高度分隔条);左栏收窄到 256px、右栏 320px,为全宽时间线腾出空间。
  • 主题明暗一致性:媒体面板分组/筛选/徽章/展开详情全部使用 director token(surface/control-hover/dock-fg/sequencer-border),无新增硬编码色值;后端 source 字段不参与任何配色。前端 typecheck、生产构建、后端全量测试通过。
  • 时间线面板补齐 Concat 风格工具栏与编辑交互(对齐第 2 条 runbook 与 Concat/desktop/.../TimelinePanel.tsx):新增 选择/剃刀 工具切换(剃刀点击分割、非字幕片段、边缘留 100ms)、播放头时码只读显示与标尺拖动 scrub、分割播放头处、删除选中片段、磁吸开关(默认开)、加轨道下拉(视频/音频/字幕,addTrack 黄金命令确定性生成 id/order/label,undo/redo 可重放)、适应宽度(getFitTimelineZoom);工具栏布局重排为 Concat 顶部条结构。editor-commands.ts golden ops 由 9 增到 10(addTrack)。
  • 磁吸失效修复:片段拖拽移动分支原本只保留「左边缘目标与右边缘目标同时命中」的结果,单边命中(如最后一个片段右边缘无目标)或双目标取整后偏移为 0(原始位置已在目标上)时整组吸附被丢弃,表现为「第一个和第二个片段能吸附、后续片段与剃刀分割出的片段都吸不住」。改为以 computeSnap 返回的 targets.length 判定命中、左右候选独立比较取更近者,单边命中与零偏移命中均可正常吸附。
  • 用户浏览器 re-test(时间线工具栏与磁吸):拖拽任意片段(含剃刀分割出的片段)靠近其他片段边缘或播放头时磁吸生效且可吸附回自身原位置;剃刀点击在指针处分割;分割按钮在播放头落在片段中段时可用;删除选中片段后再次拖拽正常;加轨道后新轨道带确定性标签与序号;适应宽度后内容恰好铺满可视宽度;磁吸关闭后拖拽自由、无取整跳动。
  • 工具按钮选中态样式修正:时间线工具栏 选择/剃刀/磁吸 的按下态原来是蓝色背景块,改为「仅图标变 accent 色、无背景块」;颜色职责收敛为 TOOL_FG_IDLE / TOOL_FG_ACTIVE 两常量(唯一来源),工具栏与加轨道下拉不再散落重复的颜色字面量。
  • 监视器播放条重构(Concat 布局):删除叠加在画面底部的渐变进度条与 <input type=range> scrub;改为画面下方独立一行 grid h-11 grid-cols-[1fr_auto_1fr]:左 播放头/总时长时码、中 回开头/退 1s/播放暂停/进 1s/到结尾(播放态仅图标变 accent)、右 速度菜单(0.5x/1x/1.5x/2x,带 Gauge 图标与展开箭头)。
  • 用户浏览器 re-test(选中态与播放条):点击 选择/剃刀/磁吸 时只看到图标变色(无蓝底块),深色/浅色主题一致;监视器底部控制条不悬浮于画面、无进度条,播放态播放图标变主题强调色,速度菜单展开/选择生效,拖拽分隔条改变监视器高度时画面区域与控制条高度正常。
  • 轨道操作按钮(Concat 对齐):时间线轨道行头新增「移除轨道」X 按钮(hover/键盘 focus 显现,danger 强调,仅该 kind 非最后一条时可用);新增 removeTrack 黄金命令——每类轨道至少保留一条(删除该 kind 最后一条会被守卫拒绝),删除时级联移除轨道上全部片段、无悬挂引用,undo/redo 可重放;editor-commands.ts golden ops 10→11(removeTrack),新增 3 条单测(级联删除并保留其余 / 最后一条拒绝 / 未知 trackId 拒绝)。
  • 资源上传 400 修复:POST /api/resources 在文件超过 MaxBytesReader 上限(单文件限制 50MB +1MB 缓冲)时 FormFile 返回英文 http: request body too large → 现翻译为与 service 配额校验一致的中文「单个上传文件必须小于 50MB」(backend/internal/handler/user_data.go),前端可正常展示失败原因而非裸 400。
  • antd Modal maskClosable deprecation 清理:5 处改用 mask={{ closable: … }}(canvas-upload-modal / asset-library-picker-modal / projects index「AI 生成章节」/ skill-editor-drawer / skill-install-modal)。
  • 用户浏览器 re-test(轨道移除与上传):hover 轨道行头出现 X,点击移除非最后一条轨道后其与片段消失且可 undo;该 kind 仅剩一条时行头不出现 X;移除轨道后选中片段同步取消;导入超过 50MB 的本地视频不再报 400、可正常入库(见下方分片导入复测)。
  • 本地媒体导入对齐 Concat 分片化:前端 uploadResourceFile 超过 50MB 自动切分片上传(8MB/片、失败整传重试、回调进度);后端新增分片会话三接口 POST /api/resources/uploads(开始)、PUT /api/resources/uploads/:id/chunks/:index(逐片原始二进制)、POST /api/resources/uploads/:id/complete(合并落库,复用 UploadResourceFile 幂等/落盘/探测,保留上传中唯一键 → 提示“上传中请稍候”);单片上限 8MB 使文件整体不再受 multipart 单请求限制,普通本地视频可导入。
  • 上传默认配额放宽:运行时默认策略 DailyUploadMB 200→2048、StoredFileGB 2→20(管理员后台仍可调回);UploadResourceFile 经 reserveChunkedUploadQuota 豁免单文件大小上限、仅受日/总量约束;upload_quota_test.go 对总量文案、daily 上限文案与逻辑按新默认同步,resource_upload_session.go 分片会话(内存 TTL 90min、并发/单片限长防护、超总量提前拒绝),新增路由注册测试。
  • 用户浏览器 re-test(分片导入):本地选择 >50MB 的视频导入成功并入库(进度可见、失败自动整传重试);断网重连后重试完成;<50MB 小文件仍走原 multipart 路径无回归;重复导入同一文件命中幂等返回原资源不重复占额度;超日限/总量时提示中文配额文案。
  • 用户浏览器 re-test(第 35 条):媒体面板中导入的素材与项目资产分组显示、筛选 Tab 切换、分组折叠与资产行展开;浅色/深色主题切换后媒体面板配色与编辑面板一致;时间线横跨整个编辑面板宽度,拖动分隔条调整高度正常。
  • 轨道可见/静音开关(Concat 行头对齐):轨道行头补齐 eye(显示/隐藏轨道)与 volume(静音/取消静音)按钮,与移除 X 三按钮同组(行头加宽 w-40→w-48);关闭态图标变 accent 色(无背景块),轨道名与片段区随隐藏降透明度;新增 setTrackFlag 黄金命令(flag 白名单 visible/muted,golden ops 11→12),隐藏轨道(visible=false)上的片段不再参与监视器预览合成(getClipAtTime 过滤);新增 3 条单测(目标轨设置且其余不受影响、muted 独立于 visible、未知轨道/flag/非布尔拒绝),输入不可变校验。
  • 用户浏览器 re-test(轨道可见/静音):行头 hover 出现三按钮组;点 eye 隐藏轨道后监视器该轨画面消失、轨道行与轨道名变淡、再点恢复;点 volume 静音后图标变 accent(音频在 M4 播放/导出阶段生效);仅剩一条轨道时无移除 X;以上操作均可一步 undo。

任务预览、文本创作与首屏加载优化

  • 任务列表视频改为后端海报字段与前端懒加载图片占位,列表本身不再挂载视频源;后端安全 URL、视频海报专项测试通过。
  • 图片、视频、文字节点的编辑面板统一定位在节点下方;文本创作新增默认开启的流式输出与默认关闭的思考开关,并完成前后端协议、推理内容解析和专项测试。
  • 创作输入支持一键清空,生成结果刷新后保持展开,“生成同款”入口移至结果标题区,对话文字默认左对齐。
  • 匿名首屏移除画布、素材、插件、用户数据同步和品牌视频的提前加载;生产预览的请求数由 203 降至 71,前端生产构建与相关专项测试通过。
  • 首屏骨架屏替换为平台 Logo、分镜、文字稿和时间线组成的创作动画,并支持减少动态效果偏好。
  • 使用真实登录态分别生成 Responses、Chat Completions 与 Claude 文本,验证流式开关、思考内容、刷新后的结果展开状态和历史消息左对齐。
  • 在任务中心打开含海报、无海报两类视频任务,确认列表滚动时不下载视频正文,进入详情后才加载并播放视频。
  • 在画布底部边缘分别选择图片、视频和文字节点,确认编辑面板仍固定在节点下方且控件可通过画布滚动或平移访问。
  • 在弱网、浅色/深色主题及 prefers-reduced-motion 下刷新首页,确认 Logo 创作动画清晰、无闪屏且登录后工作区模块正常按需加载。

生成结果项目资产同步限流恢复

  • 生成成功后的自动资产同步会识别后端 HTTP 429,读取 Retry-After 并在可取消等待后重试;普通校验失败仍立即上抛,专项测试与前端生产构建通过。
  • 在启用常规素材/画布写入频控的部署环境连续完成一批图片、视频或音频生成,确认结果先保留在画布,临时 429 不再立即显示为项目资产同步失败,等待频控窗口后资产自动出现在项目资产库。

平台外观管理

支付插件跨平台构建

  • 微信与支付宝 provider 已使用同一 target-aware 构建脚本完成 CGO_ENABLED=0 的 linux/amd64、linux/arm64 交叉编译;目录 provider 与 .yan-plugin 内 provider 的 ELF 架构和内容一致性校验通过。
  • 包内外产物一致性、完整包摘要缓存、同版本 provider 更新失效、未完成解包恢复等专项测试通过;RPC 错误映射的跨平台单元测试通过。
  • 在 Linux CI 完成无文件、无权限、错误格式、异常退出与无效 JSON 的 RPC 进程测试,并使用 Docker Buildx/QEMU 执行 payment-package-smoke 的 amd64/arm64 双平台构建,确认目标容器内两个 provider 均能真实执行无效 JSON 冒烟请求。
  • 保留含旧 Mach-O runtime 的生产 /data 卷升级到修复镜像,确认启动后自动选择新 package digest,管理后台保存微信和支付宝配置进入真实凭证校验。

站点及外观与皮肤主题

管理后台“系统配置 → 站点及外观”统一品牌、登录页、SEO、首页收尾/备案和皮肤主题,并让公开配置在应用渲染前完成解析;以下真实浏览器与媒体场景需要持续确认:

  • 后端专项与全量测试通过,覆盖内置默认值、管理员权限、资源类型/归属、公开 URL 不泄漏资源 ID、媒体字节嗅探、删除保护与路由注册。
  • 前端专项测试、后台回归测试、TypeScript 检查和生产构建通过,覆盖初始 HTML 品牌中立、自定义视频不回退内置封面、不安全 URL 回退、单 Logo 深浅主题复用、双 Logo 主题选择、外框关闭与登录场景固定使用深色 Logo。
  • 站点名已覆盖注册邮件、密码重置邮件、继承型发件人名称、诊断说明、批量导出、插件与协议文档中的运行时品牌文案;技术兼容键继续保留稳定值。
  • SEO、版权、ICP备案和主题库通过前后端归一化、持久化、公开投影、metadata/页脚和亮暗语义令牌专项测试;经典皮肤不写覆盖变量且由服务端锁定,三套初始扩展主题可编辑或删除。
  • 主题库支持从经典或当前主题完整复制、改名、新建、编辑、删除、启用和统一保存;每套包含浅/深各 50 项颜色与 17 项控件参数,公开接口只投影当前主题。
  • 危险删除、系统警告、错误/成功/信息状态与全站 Ant Switch 已统一消费主题语义色;开关有可编辑的开/关轨道、悬停和滑块色,并以边界与外环增强开启态辨识。主题卡按频次显示全部去重色,取色器只由色块直接触发。
  • 生产站 /register 与 /forgot-password 在 1440×900、1280×800、430×932、390×844 下无横向溢出,页面标题、SEO 描述、Open Graph 和版权均使用当前自定义站点名,正文无内置品牌残留。
  • 使用管理员账号依次保存品牌名、英文品牌标识、登录页标题/说明、浅色 PNG/WebP Logo、可选深色 Logo、外框开关、MP4/WebM 视频与封面,确认工作台和登录页立即更新,刷新后保持一致。
  • 在已登录管理后台从经典主题复制一套自定义主题,修改名称、浅色/深色、按钮 hover/active/focus、输入框、开关开/关轨道与滑块、选中卡、警告/危险色、图标、圆角、阴影和动效;保存刷新后确认保持,再删除测试主题并恢复运营方实际选择。
  • 在浅色/深色下检查后台、创作页、插件页和设置页的开关开启/关闭状态,确认颜色、滑块、边界与外环均清晰;检查删除主题、普通危险按钮、确认弹窗、warning/error message 和状态徽标均随主题色变化且文字对比可读。
  • 保存 SEO 标题/描述/关键词、版权与ICP备案开关,确认 metadata 和公共页脚刷新后同步;备案链接只指向 https://beian.miit.gov.cn/。
  • 分别只上传浅色 Logo、只上传深色 Logo、同时上传两套 Logo,并切换浅色/深色主题,确认单图自动复用、双图按主题选择;开启“禁用 Logo 后面的圆角矩形外框”后确认工作台和管理后台导航只显示等比放大到原外框可用区域的 Logo,布局不跳动。
  • 在“对象存储”中点击“使用品牌标识”,确认只更新当前路径前缀草稿;未点击或未保存时保留服务端已有前缀,历史资源读取不受影响。
  • 保存一套自定义品牌后点击“恢复微昕·砚默认”,确认品牌名称、英文标识、Logo、登录页文案和媒体立即恢复内置值,自定义素材文件仍保留在存储资源中。
  • 清空浏览器缓存并以慢速网络打开 /login、/register 和 /forgot-password,确认加载阶段不出现内置品牌名、Logo、favicon 或视频封面闪烁。
  • 更换品牌视频但不上传封面,确认首帧出现前只显示中性深色背景;再配置封面,确认只显示当前自定义封面。
  • 在存储资源页尝试删除当前浅色 Logo、深色 Logo、视频和封面,确认显示“外观”引用并保留文件;解除绑定后可正常删除。
  • 将公开配置接口模拟为超时或 5xx,确认 4 秒内结束等待并完整回退内置外观,应用仍可进入。

画布导入同步、素材回收站与删除保护

  • 画布压缩包导入先校验媒体完整性,资源上传和画布写入统一进入 operations journal;失败时保留未确认请求并自动重放,不把浏览器本地 storage key 标记为云端事实。
  • 素材回收站使用独立归档状态;彻底删除复用服务端引用校验与资源删除 Outbox,自动过期清理不会旁路业务引用。
  • 画布删除后迟到的媒体或编辑更新不会重新创建画布或节点;只有显式 create operation 可以创建实体。
  • 使用两个账号、两个标签页和断网恢复验收导入、删除、刷新与同步状态;确认来源未知的插件包和媒体修改不被清理。

邮箱找回密码

  • 后端专项测试验证验证码用途隔离、错误和过期验证码拒绝、单次消费、bcrypt 密码更新,以及重置事务撤销全部旧登录会话。
  • 前端专项测试和生产构建验证登录页入口、独立找回路由、验证码倒计时、新密码表单及账户邮件设置文案。
  • 使用真实 SMTP 账号发送一次注册验证码和一次密码重置验证码,确认发件身份、正文、投递结果和 10 分钟有效期符合配置。
  • 在桌面、窄屏和键盘操作下确认“忘记密码?”与密码标签同行右对齐,找回页没有横向溢出,焦点顺序和提示信息清晰。
  • 使用两个浏览器会话登录同一账号后重置密码,确认两个旧会话都失效,旧密码无法登录且新密码可登录。
  • 分别使用未知邮箱、禁用账号和 Linux.do-only 账号请求验证码,确认公开响应不泄露账号是否存在或是否可找回。

服务升级运行基础

  • 完整架构、状态机、Release 清单、备份和回退边界见 docs/design/dynamic-update.md。
  • 后端新增权威 BuildInfo、schema_migrations、独立 migrate-schema 命令、分层健康检查以及可停止 Worker;专项 Go 测试通过。
  • 生产 Compose 在 Backend 前运行一次性迁移服务,并使用 CANVAS_AUTO_MIGRATE=false 阻止业务进程隐式修改 Schema;Backend 收到 SIGTERM 后进入 drain、停止领取任务并等待活动任务。
  • 使用 PostgreSQL 部署执行一次无迁移启动和一次跨版本迁移,确认 migrate 成功后 Backend 才启动,checksum 漂移和高版本 Schema 均会阻止旧 Backend 就绪。
  • 在存在图片、视频和文本长任务时发送 SIGTERM,确认 readiness 立即返回 503、新任务被拒绝、已领取任务在宽限期内完成,超时后租约可由重启实例恢复。
  • 构建带版本参数的前后端镜像,确认 /api/system/version、管理后台版本、OCI Commit 和 Release Tag 一致。

画布视频静态首帧

  • 普通上传与生成视频会在入库时串行截取并持久化 400px JPEG 首帧;历史视频仅在可见、未选中且浏览器空闲时单并发补图,选中媒体或离开视口会取消后台解码。
  • 未选中视频只挂载静态图片,单选后才创建真实播放器;专项测试、TypeScript 检查、生产构建通过,本地画布刷新后 3 个历史视频首帧仍可显示。
  • 用户在包含本地上传、模型生成和外部无 CORS 视频的真实画布中确认首帧画面、刷新持久化与降级图标;连续平移、缩放和切换视频时确认最多只有一个播放器且没有明显闪烁。

自由空白画布与画布外观

  • 线网格与点阵改为屏幕坐标下的固定间距背景,移除缩放时的密度、点大小和偏移更新;节点与连线仍按原视口平移缩放,网格颜色和透明度不变。
  • 固定背景新增渲染与实时视口回归测试,覆盖缩放范围、原点阵阈值、正负平移及空白模式;相关测试分组运行共 49 项通过,前端生产构建通过(保留既有分包警告)。
  • 在浅色、深色及自定义主题下连续滚轮缩放、触控板捏合与拖动画布,确认背景无密度跳变或闪烁;切换空白/线网格/点阵后复验,确认节点与连线位置正常。
  • 新建画布引导新增“自由空白画布”主入口;进入后显示中央空白起始框和加号,不创建占位节点。
  • 中央加号复用底部工具栏的添加命令,当前浏览器已确认文本、绘图、分镜、背板、文件夹、图片、视频、导演台、音频、工作流、上传文件和素材库入口完整显示。
  • 自由起点按画布持久化,当前浏览器刷新后仍停留在自由空白起始框;浅色、深色两种主题已完成常规桌面尺寸验收。
  • 浅色画布固定为 #EDEEEE,深色画布固定为中性灰 #262626;原项目的节点、起始框、工具浮层、边框和阴影颜色保持不变。
  • 画布外观增加“自定义”主题,可调整背景颜色、背景明亮度、网格颜色和网格强度;不开放节点、工具浮层、边框和阴影任意改色。
  • 自定义主题增加“浅色界面/深色界面”,复用原项目对应的节点和工具浮层样式;切换界面样式不覆盖自定义画布和网格颜色。
  • 原“网格透明度”改名为“网格强度”,保持 0% 最淡、100% 最明显。
  • 颜色选择器与合法的 #RRGGBB 输入实时写入当前画布;点击面板外只关闭面板,不撤销刚才的颜色。
  • HEX 输入支持三位/六位、可带或不带 #;输入编辑不会被父级状态覆盖,选择新背景色时明亮度归零以精确显示输入色。
  • 删除背景透明度控件并忽略旧存储字段;背景明亮度改为沿 OKLCH 亮度轴调整,0% 精确保留输入色码。
  • 自定义主题继承进入前的浅色或深色基础界面;同一基础主题可以恢复上次自定义配置,跨深浅主题则重新继承。
  • 第一次进入或重置自定义主题时,明亮度默认为 0%、网格颜色默认为 #B6B3B3、网格强度默认为 70%;已有用户保存值不被覆盖。
  • 当前画布外观随画布项目保存;“保存为默认”写入当前浏览器并按账号 scope 隔离,不跨设备同步。
  • 深色点阵和线稿网格同步调整为 rgba(205,205,205,0.28),浅色网格与网格图层渲染透明度保持既有值,并有专项回归断言。
  • 自由空白画布与外观专项自动化测试通过,前端生产构建通过。
  • 在用户当前登录的 Edge 中验收颜色选择器、十六进制输入、明亮度调节、深浅主题继承和本机账号默认值。
  • 在窄屏和触屏尺寸检查三张起始卡、中央起始框、加号菜单的换行、滚动与点击目标;确认菜单不遮挡底部工具栏。
  • 由产品验收浅色/深色固定底色,以及原节点和工具浮层恢复后的最终视觉观感。
  • 从自由起点分别新建每种内置节点和插件节点,并从上传、素材库各导入一次素材,确认第一个节点创建后起始框消失且刷新后节点数据不丢失。

画布拖线创建节点落点

  • 从普通节点连接端拖到空白处创建节点时,松手点改为新节点靠近来源一侧的边缘中点;单击快捷创建和批量连接仍保留原布局。位置计算与批量连接专项测试、TypeScript 检查和前端生产构建通过。
  • 分别从节点右侧输出端和左侧输入端拖线创建图片、视频、文本与音频节点,确认新节点向松手点外侧展开,连线落在边缘中点且不会回头遮挡拖线区域。
  • 单击连接加号创建节点,确认仍自动放在相邻位置并保留 96px 间距;使用批量连接创建节点,确认原有落点和连接关系不变。

素材库网格密度

  • 素材库桌面端缩小卡片并改为每行 6 张;新增素材占首格,默认每页 35 项,可切换 70/105 项,首屏正好组成 6×6 完整网格;中窄屏按 4/3/1 列收敛,前端生产构建通过。
  • 在 1280px、1440px、1920px 与窄屏下检查图片、视频、音频、文本、模型和新增素材卡片,确认标题、徽标、批量选择和操作菜单不拥挤或溢出。

短剧长篇项目分页读取

  • 短剧工作台已拆分项目核心、制作概览、章节摘要、当前章节生产包、画布分页、资产分页和候选分页接口;章节列表不返回正文,当前章节生产包不返回其他章节镜头和产物。
  • 资产库按目录/分类分页,候选角色单独分页;分镜工作台资产栏服务端分页,当前章节响应只携带镜头已绑定资产;项目设置仅在打开主图选择器时读取图片资产。
  • 新增章节、镜头、章节产物、画布、项目目录资产、候选资产和项目任务组合索引;后端聚合/隔离/分页专项测试与前端生产构建通过。
  • 导入至少 1000 章、每章 10 个镜头的测试项目,分别打开概览、章节、分镜、画布、资产和设置页,确认首屏请求不再出现整项目详情响应,切章只读取目标章节生产包。
  • 在浏览器网络面板记录上述页面的响应体积、请求耗时和内存占用;连续切换 30 个章节、翻阅 10 页画布和资产,确认 React Query 缓存及 DOM 数量没有持续异常增长。
  • 在资产超过 80 项、角色候选超过 24 项、画布超过 40 张时验证分页、分类、目录、候选确认、镜头资产绑定和主图选择;确认新增、移动、删除、确认后总数与当前页自动刷新。
  • 使用 SQLite 与 PostgreSQL 各执行一次大项目冒烟,确认新增组合索引成功创建,概览聚合、章节隔离和分页顺序一致。

多文件技能包库

  • 后端新增技能版本与文件索引,支持单个 Markdown、ZIP 和公开 GitHub 仓库安装;ZIP 路径越界、软链接、重复路径、文件数、单文件大小和总解压大小均在写入前校验,后端全量测试通过。
  • 技能详情改为约 82vw × 82vh 的弹窗,左侧支持多层文件树,右侧支持 Markdown 预览、源码、代码/文本及媒体文件查看;前端生产构建通过。
  • 在线 Agent 只在系统上下文保留技能元数据,并通过入口、文件清单、单文件读取和搜索工具渐进式加载;本机 Agent 只把用户本轮显式提及的完整技能包写入临时目录,321 项 Agent 测试与 TypeScript 构建通过。
  • 新增统一 Skill Runtime:画布、创作页和短剧工作台共用同一技能选择、引用解析、版本/文件来源记录与上下文预算;普通生成只加载 SKILL.md 和入口直接引用的相关文本,在线 Agent 使用渐进工具,本机 Agent 使用原生完整包,专项测试与前端类型检查通过。
  • 分别安装无 Frontmatter 的单个 Markdown、两个用户提供的示例 ZIP,确认名称/简介推断、文件树层级、中文路径、预览/源码切换和相对 Markdown 链接正确。
  • 使用公开 GitHub 仓库的默认分支、指定分支和子目录安装技能,修改仓库后手动同步并等待一次后台检查,确认 commit、版本、检查时间、同步时间和失败信息准确。
  • 在浅色、深色、常规桌面、窄屏下检查大弹窗尺寸、双栏滚动、文件筛选、长路径、省略文本、键盘焦点和媒体预览;确认弹窗不会触发画布缩放或快捷键。
  • 在线 Agent 使用示例技能完成一次任务,确认先读 SKILL.md,仅在入口引用时读取对应 reference;本机 Agent 确认 scripts/assets 保持目录结构、turn 完成后临时目录被清理,且聊天历史不出现完整技能正文。
  • 分别在画布图片/视频/文本生成、创作页文本/图片/视频、短剧分镜图/动作预演/镜头视频中选择示例技能,确认任务只记录本轮技能版本和实际读取文件,不重复注入历史消息,也不加载 scripts/、assets/ 或整个技能包。
  • 画布、创作页和 Agent 共用的 @ 引用菜单改为真实光标定位,输入框或页面滚动、尺寸变化时同步更新;向上弹出按实际内容高度贴边。技能候选改为工作流图标、名称、说明、版本和文件数的统一信息行,专项测试和前端生产构建通过。
  • 登录后分别在高输入框首行、末行、滚动后的中间行输入 @,确认菜单与光标保持约 8px 间距;在浅色/深色及窄屏下确认技能说明、版本、文件数和键盘选中态清晰可读。

短剧分镜工作流 v2

  • 章节角色提取增加候选名称幂等:重复待确认角色、已经确认角色和别名不会再次创建;Agent 来源不能创建角色候选。数据库 schema v3 为候选增加 name_key / source 并建立待确认唯一索引,后端专项测试通过。
  • 资产分类统一为角色、场景、道具、素材、其他;旧服饰/武器/配饰映射为道具,旧画风和通用媒体映射为素材。项目资产页、画布资产菜单、素材选择器和 Agent 合同已同步,前端生产构建与专项测试通过。
  • 分镜工作台左栏调整为“章节 → 镜头 → 资产”并默认打开章节;项目资产页和分镜资产栏新增防抖名称搜索;镜头默认编号统一为“镜头01”,仅精确匹配旧 SC.数字 的默认标题会转换,自定义标题保持不变。
  • 后端新增镜头版本、镜头产物和生产任务上下文;分镜修改与资产版本变更会局部将旧产物标记为 stale,专项测试通过。
  • 短剧工作流调整为“剧情与章节 → 资产拆分 → 分镜脚本 → 黑白动作预演 → 视频生成 → 交付与打包”,旧 v1 实例保留,新章节使用 v2。
  • 项目工作台新增独立分镜工作流路由,支持初始化章节流程、新增镜头、保存分镜版本、绑定资产版本、查看预演/视频版本和交付缺失状态;前端生产构建通过。
  • 镜头轨道按当前制作阶段显示待生成、生成中、已生成和生成失败状态,状态标签固定在卡片右下角;横向镜头只在轨道内部滚动,不再撑宽脚本区或挤出产物预览。制作概览六个流程节点改为独立可点击卡片;前端类型检查、生产构建与相关专项测试通过。
  • 分镜生成设置接入统一模型选择、能力和计价链路,支持前台模型、系统模型与用户自定义模型;切换模型会归一画幅、分辨率/画质和时长,MiniMax-H3 的旧 720 会切换为 768P。项目设置可保存默认生图/视频模型;后端全量测试、MiniMax 回归测试和前端生产构建通过。
  • 单镜生成改为任务提交后立即返回,不同镜头可并行进入排队/生成状态;角色卡主图、绑定声音样本和场景资产会按 图片N / 音频N 编译进提示词。MiniMax 项目资产使用 reference_image / reference_audio,仅显式首尾帧节点使用帧角色;产物固定绑定任务提交时的镜头版本。前后端全量测试与生产构建通过。
  • 视频图片语义统一为首帧、尾帧和普通参考图三类,并贯穿前端直连、后端任务与声明式协议;Agnes、Seedance /videos、火山方舟、NewAPI 媒体任务、xAI 和 MiniMax 不再按图片数量误猜项目角色资产。Gemini Veo、Novita 等仅支持起始图的协议会明确拒绝 reference_to_video,不再静默降级成首帧。
  • 在真实项目中初始化一个已有章节,确认不会误用旧 v1 工作流,刷新和切换章节后阶段、镜头和当前版本保持一致。
  • 在同一章节准备待生成、生成中、已生成和生成失败镜头,确认灰、蓝、绿、红标签始终显示在卡片右下角;增加到几十个镜头后确认只有底部轨道横向滚动,中间脚本和右侧产物预览仍完整可见。
  • 在浅色、深色、常规桌面和窄屏下检查制作概览六张流程卡片的边界、间距、完成态、悬停和键盘焦点,确认跳转目标正确。
  • 连续保存同一镜头多个版本并绑定不同资产版本,确认只有该镜头的动作预演和视频转为过期,其他镜头不受影响。
  • 使用画布任务和项目任务分别登记镜头产物,确认 production_task_links 正确记录 Project、Canvas、Unit、Shot 和 WorkflowStep,且账号归属校验有效。
  • 在浅色、深色、窄屏和常规桌面验证阶段导航、镜头列表、表单、检查器、媒体预览和长章节内容滚动。
  • 在角色与资产页分别搜索已确认资产和待确认角色,再切换分类、目录和分页;确认关键词重置到第一页、空态明确且没有重复请求抖动。进入分镜工作台确认左栏顺序、默认章节页和资产搜索一致。
  • 打开包含旧 SC.01 默认标题和用户自定义标题的项目,确认前者显示为“镜头01”且编号旁不重复,后者原样保留;新增镜头和章节生成镜头都直接使用中文编号。
  • 在项目设置分别选择系统、用户自定义的默认生图/视频模型,刷新后进入分镜图、动作预演和镜头视频,确认项目默认优先、已下架模型回退全局默认;切换 Seedance、MiniMax-H3 等能力不同的模型时,画幅、时长、分辨率和本次预计积分立即更新,并与实际账单一致。
  • 连续选择两个镜头并分别提交视频生成,确认两个镜头独立显示“正在提交/生成中”,第二个任务不会被第一个全局锁阻止;刷新页面后两个任务状态都能恢复,完成产物分别绑定各自提交时的镜头版本。
  • 给镜头绑定带主图和声音样本的角色卡及场景资产,使用 MiniMax-H3 生成并检查请求日志:文本包含 【资产参考】、角色声音说明和台词,角色/场景图片为 reference_image、声音为 reference_audio,请求不再出现误判的 first_frame,画幅和 768P / 2K 与界面选择一致。
  • 使用同一镜头资产依次切换 Agnes 2.5、Seedance /videos、火山方舟、NewAPI 媒体任务和 xAI,确认单张角色图仍走 reference 字段;再切换 Gemini Veo、Novita,确认提交前给出“不支持 reference_to_video”的明确提示,而不是把角色图当起始帧生成。
  • 当前“资产拆分 AI、多宫格生成提交、批量视频任务、后端交付包”仍是后续阶段,界面不得显示为已完成或可用。

角色声音素材绑定

  • 角色卡声音绑定移除无效的预设声音下拉框,改为从素材库选择或实时上传声音样本;支持 MP3、WAV、M4A/AAC、FLAC、OGG/Opus 和 WebM 音频。前后端共同校验资源归属、完成状态、资源类型和格式白名单,画布生成引用会保留资源真实 MIME 与文件扩展名。
  • 在角色卡分别选择素材库已有音频并上传 MP3、WAV、M4A/AAC、FLAC、OGG/Opus、WebM 样本,确认选择器格式标签、浏览器试听、绑定、版本历史和刷新后的声音状态一致;再验证不支持格式、伪装扩展名、视频 WebM、未完成资源和其他账号资源均被拒绝。
  • 使用绑定了不同格式声音样本的角色执行画布生成,确认请求中的参考音频使用资源真实 MIME 和对应文件扩展名,不再统一伪装成 MP3;生成成功、失败及刷新恢复后引用关系不丢失。

短剧章节后台生成与项目头部

  • “提取角色”和“生成到分镜制作”继续使用后端任务中心,确认配置后立即关闭弹窗;章节按钮按任务真实开始时间每秒显示“已运行 X分钟XX秒”,任务完成后恢复可点击并显示“已生成”。刷新页面后会按章节从任务中心恢复运行计时和完成态,并接管尚未写回的角色或分镜结果。
  • 项目名称、状态、六个项目导航、章节选择和新建画布操作已注册到全局公用头部,项目内容区不再重复占用一整行头部;相关专项测试、TypeScript 检查与前端生产构建通过。
  • 在真实慢任务中分别启动角色提取和章节分镜,确认弹窗立即关闭、按钮计时连续增长、可编辑正文和切换章节,完成后按钮显示“已生成”且仍可再次运行。
  • 在任务运行中和任务刚完成尚未写回结果时分别刷新项目,确认对应章节继续显示累计计时或“已生成”,成功结果会自动写回;再检查无新角色、生成失败和重新生成替换确认场景的按钮恢复、错误提示和旧分镜保护。
  • 在浅色、深色、常规桌面和窄屏下检查全局头部:项目名、状态、项目导航、右侧全局操作和新建画布/章节选择不重叠,导航可横向滚动,内容区高度确实增加。

画布生成副本与结果落点

  • 图片、视频节点右键菜单新增“创建生成副本”:副本保留提示词、模型参数、首尾帧设置和原有参考入边,但不加入原节点的参数版本族。
  • 图片与视频生成统一使用结构化结果落点;生成副本、复制粘贴节点和参数变体直接回填当前节点,普通已有媒体再次生成继续创建新版本,不再依赖节点标题判断。
  • 参考入边复用、图片/视频原地生成策略专项测试、TypeScript 检查与前端生产构建通过。
  • 分别对带一张、多张参考图及首尾帧设置的图片和视频使用“创建生成副本”,确认副本提示词、模型参数、参考缩略图和连线与原节点一致;连续生成多次时只更新副本自身,不新增下一级节点。
  • 对普通已有图片、普通已有视频、参数变体和旧版复制节点分别生成,确认普通媒体创建并行版本,参数变体和复制节点原地更新;刷新画布后结果落点不改变。

画布生成结果命名

  • 快捷键复制节点生成图片后保留 _copyN,参数变体生成图片后保留 A/B/C/D 版本标识;批量输出追加结果序号。
  • 下载文件名继续使用节点标题,因此复制、参数变体和同批多图结果不会再生成相同文件名。
  • 分别使用快捷键复制和“创建参数变体”生成图片,确认生成中、生成完成和刷新画布后标题标识不丢失。
  • 下载原图、复制结果、多个参数变体和同批多图结果,确认浏览器不会再提示同名文件覆盖。

画布生成进度与全屏视频控件

  • 移除图片、视频任务进入模型调用时统一写入的假 35%;排队、后端接管和连接上游阶段只显示真实阶段文案,不再显示伪造百分比。
  • 后端从图片、视频上游成功的创建与轮询响应中识别 progress、percent、percentage、completion 及常见百分比变体,支持数字、百分数字符串和 0~1 小数;进度单调写回任务,前端既有 2 秒轮询会同步到画布节点。
  • 画布视频节点保留紧凑控件;进入全屏后恢复完整顶部控制组,底部按钮调整为 52px 操作目标,同时放大图标、时间文字、进度轨道和拖动滑块。
  • 分别使用会返回整数百分比、小数进度、百分数字符串和不返回进度的图片/视频渠道生成,确认前三者按上游实时增长,不返回进度的渠道仅显示阶段文案且不会卡在固定百分比;刷新页面后继续从后端任务恢复最新进度。
  • 在桌面、窄屏和触屏设备全屏播放横版、竖版视频,确认播放/暂停、音量、时间、画中画、设置、全屏退出和进度拖动尺寸清晰且不会遮挡字幕。

视频画面与片段提取

  • 视频节点“尾帧截取”已合并为“提取画面”,支持首帧、当前帧、尾帧和最多 30 个自选时间点;批量结果保留来源节点与时间点元数据。
  • “截取重生成”已调整为“截取片段”,默认只创建片段素材;可选同时创建待生成节点,但不会自动提交生成任务。
  • 多张提取图片会保持全部选中,可继续使用画布现有批量连接能力自行创建并连接生成节点。
  • 在真实视频节点提取首帧、多个中间帧和尾帧,确认画面、时间标记、网格布局、来源连线和多选状态正确。
  • 选择接近重复的时间点、超过 30 个时间点及部分帧解码失败场景,确认去重、上限提示和部分成功反馈正确。
  • 分别验证“只创建视频片段”和“同时创建待生成节点”,确认前者不要求模型,后者创建后不会自动扣费或启动任务。
  • 选中多张提取图片后新建视频生成节点,确认批量连线和手动生成流程可用。

画布节点搜索

  • 搜索结果改为紧凑媒体行,图片、视频、绘图优先显示真实缩略图,文本节点显示内容片段;素材类型、尺寸、时长、文件大小和模型按可用信息摘要展示。
  • 节点新增可持久化创建时间与最后编辑时间;旧画布按项目时间建立迁移基线,素材 URL/尺寸后台恢复不会误记为用户编辑。
  • 默认按最近编辑排序,支持节点、章节、镜头、模型和标签搜索,以及方向键选择、Enter 定位、Esc 关闭。
  • 在含图片、视频、音频、绘图、文本、分镜和插件节点的真实画布验证缩略图、摘要、时间和排序;确认失效媒体能降级为类型图标。
  • 在窄屏、常规桌面、浅色和深色主题验证行密度、长标题截断、时间列布局、滚动与键盘焦点。

画布素材批量插入与右键菜单动效

  • 画布素材库复用既有多选能力,一次确认后按三列网格批量创建节点并选中全部新增节点;本地素材与插件来源共用同一 payload 转换路径。
  • 时间线素材入口继续保持单选,图片和文本不会被误当作可直接入轨媒体。
  • 右键主菜单、添加节点子菜单、菜单项、图标与箭头已移除位移和缩放动画,只保留淡入、颜色变化与 Spotlight 光影跟随;专项测试、TypeScript 检查与生产构建通过。
  • 在画布空白处右键后缓慢移动光标经过各菜单项,确认菜单、文字、图标和箭头位置稳定,光影仍跟随光标,主菜单与子菜单打开时不跳动。
  • 从画布工具栏和右键菜单分别打开素材库,混选图片、视频、音频、文本及插件来源素材,确认一次插入全部节点、顺序稳定、节点不重叠且全部保持选中。
  • 从时间线打开素材库,确认仍只能单选;音视频可直接入轨,图片或文本会保留弹窗并显示明确错误。

画布本机 Agent 连接教程

  • 未连接、连接中和连接失败时,Agent 对话正文由连接教程替代;连接成功后自动恢复原聊天或历史区域,不清空消息和线程状态。
  • 教程按 macOS/Linux 与 Windows 生成安装、构建和启动命令,并将当前网页 Origin 写入 FRAMEFIELD_TRUSTED_WEB_ORIGINS;命令生成专项测试、前端类型检查与生产构建通过。
  • 页面明确区分网页侧边栏 Codex、外部 Codex/Claude Code MCP 与尚未验证的 Hermes/WorkBuddy,不再把 Codex 插件误写成本机侧边栏前置条件。
  • 画布全局 Cmd/Ctrl+C 在存在真实文字选区时交还浏览器处理,不再把 Agent 消息、日志或 Markdown 文本复制误判成节点复制;快捷键边界专项测试通过。
  • 在 Windows、macOS 和 Linux 分别复制并执行教程命令,确认 Runtime 能连接当前线上 Origin,平台自动识别和手动切换均正确。
  • 在未连接、自动重试、Origin 未授权、连接成功和运行中断后重连状态下验证教程与对话区域切换;确认原消息、历史会话和待确认工具调用不丢失。
  • 在 360px 窄面板、常规宽度、浅色和深色主题下确认命令块可横向滚动、复制按钮可见、教程不遮挡画布。
  • 在 Agent 回复、运行日志、代码块和普通 Markdown 中分别框选文字后使用右键复制及 Cmd/Ctrl+C,确认系统剪贴板内容正确;无文字选区时 Cmd/Ctrl+C 仍复制所选画布节点。

画布复制粘贴命名

  • 节点首次复制粘贴使用“原名称_copy1”,后续按当前画布已有最大序号递增。
  • 复制已有 _copyN 副本时回到原始名称计算,避免生成 _copy1_copy1;旧版空格 Copy 后缀已有兼容测试。
  • 在画布中连续粘贴单个节点、多个同名节点和包含子节点的背板,确认名称依次递增且节点关系不变。

画布媒体下载文件名

  • 图片、视频和音频下载统一使用“画布名_节点名_yyyyMMdd.扩展名”,中文名称和跨平台非法字符已有专项测试覆盖。
  • 扩展名优先按媒体 MIME 类型判断,并兼容远程 URL 后缀;JPEG、WebM 和 MOV 已有专项测试覆盖。
  • 前端 TypeScript 检查与生产构建通过。
  • 在浏览器中分别下载本地上传、生成结果、LibTV 导入和 TapNow 导入的图片与视频,确认文件名、日期和实际媒体格式一致。
  • 在同一天重复下载同名节点,确认浏览器的重名处理不会覆盖用户已有文件。

创作输入区参考内容管理

  • 视频创作按同名模型组汇总图片、视频和音频参考能力;文生视频路由本身不接收参考素材时,仍可先添加参考内容,再由现有兼容路由选择图生视频或全模态参考模型。素材库和提交前按媒体类型分别执行上限校验。
  • 创作参考、素材库入口和模型路由 47 项专项测试、前端 TypeScript 检查与生产构建通过。前端已部署为 1.5.7-creation-video-references,容器健康,HTTPS 创作页与 API 健康入口返回 200,线上创作页脚本与本次构建哈希一致;未调用真实视频上游。
  • 自动化覆盖首个、中间和末尾参考内容按稳定 ID 独立删除,且删除后其余顺序保持不变。
  • 在真实创作台分别选择图片、视频和音频参考,确认素材库只允许当前模型组支持的类型,达到各类型上限时提示明确,并检查任务详情中的 referenceImages、referenceVideos、referenceAudios 与所选素材一致。
  • 折叠态提供明确的“查看全部”入口,展开态提供图片、视频、音频、文件筛选、清空全部和收起入口。
  • 在桌面浏览器验证上方“参考内容”打开素材选择、折叠堆叠态中间卡片删除、展开态任意卡片删除、筛选、拖动排序和收起。
  • 在真实登录数据下验证“清空全部素材”同步移除全部附件引用,不影响技能引用和素材库原始文件。
  • 在触屏及窄窗口验证删除按钮无需悬停也可见,素材轨道可横向浏览且不会遮挡提示词和底部控制区。
  • 在创作首页选择图片或视频生成并修改画幅、质量、时长或生成数量后切换到其他工作区再返回,确认上次的创作类型和各自参数仍保留;切换到不支持某个已保存参数的模型时,确认该参数仅回退为当前模型默认值;生成结果点击“添加到画布”后确认仍能按现有交接流程进入画布。

首页生成图片预览交互

  • 首页图片预览改为与画布共用 CanvasImagePreview,移除首页独立的 scale/offset 和拖拽边界计算;前端 TypeScript 检查与生产构建通过。
  • 在首页生成结果、参考图片、故事板图片和画布图片节点中分别打开预览,确认遮罩、移动、滚轮缩放、缩放范围、关闭和再次打开后的初始状态一致;本次尚未完成真实浏览器交互验收。
  • 在首页提示词输入框中分别粘贴截图、从网页复制的图片和带文字的剪贴板内容,确认图片自动加入参考内容、普通文字仍能正常粘贴,超出当前模型参考数量上限时提示明确且不会重复添加。

Agnes Video 2.5 JSON 协议

  • 前端专项测试确认 Agnes 创建请求使用 application/json,不再发送 input_reference[]、resolution_name、preset 或像素型 size。
  • 后端专项测试确认内置 host:agnes-video 插件直接进入 Agnes JSON 协议执行器,不再回退到 OpenAI 风格 multipart;旧渠道能力读取时会收紧为官方 4–12 秒和 720P/960P/2K 档位。
  • Agnes 插件升级到 1.2.0:公共层像素画幅(如 1280x720)只转换为 aspect_ratio: "16:9",公共层分辨率(如 720/720p)只转换为 size: "720P",不再把两类字段混用。
  • 后端专项测试确认自定义渠道和系统渠道均允许官方 /agnesapi?video_id=...&model_name=... 轮询,并将该路径转发到 Agnes 主机根路径。
  • Agnes 完成态兼容 2.5 的 metadata.url 与 V2.0 的顶层 url;前端 provider 和后端协议专项测试均已覆盖。
  • 使用真实 Agnes API Key 分别验证文生视频、单张首帧、三张图片 reference、视频/音频 reference;确认 metadata.url 可播放并且失败信息可见。
  • 使用 Agnes Video V2.0 完成一次真实任务,确认顶层 url 能进入视频资源保存流程,不再报“没有 metadata.url”。
  • 在系统渠道中验证 4 秒与 12 秒边界、720P/960P/2K、横竖画幅,以及 2.5 Flash 的 720P/最多 5 图/不支持视频限制。

画布生成按钮价格

  • 系统渠道价格按当前 operation、分辨率、时长、图片数量、质量和画幅匹配价格档,并按图片数量或视频秒数计算本次积分;逻辑前台模型继续使用后端报价。
  • 画布生成按钮改为价格与圆形生成操作一体式胶囊,保留完整无障碍标签;价格匹配专项测试与前端生产构建通过。
  • 在画布中分别选择按次图片模型、按秒视频模型和前台逻辑模型,确认修改数量、时长、分辨率和参考素材后价格立即更新且与实际账单一致。
  • 在浅色/深色主题及生成中、禁用状态下确认胶囊价格可读、圆形操作区清晰且不挤压模型与参数控件。

系统渠道模型批量删除

  • 管理员可勾选最多 100 个渠道模型并一次删除;任一模型仍被活动线路或进行中任务引用时整批拒绝,不产生部分删除。
  • 合并补修将兼容 models_json 的重建收进删除事务,并由 repository 在取得渠道写锁后读取当前启用模型;模型保存后的目录同步也复用同一锁定入口,避免并发管理员操作用事务外旧快照覆盖较新的模型目录。
  • 后端批量删除与引用拒绝专项测试、前端管理页回归测试和格式检查通过。
  • 在 PostgreSQL 测试环境由两个管理员并发执行模型新增、启停和批量删除,确认 channel_models 与渠道 models_json 最终一致,删除失败时列表不发生部分变化。

系统渠道默认积分价格

  • 新建渠道模型默认使用“所有规格统一价格”,管理员只需填写一次积分;1K/2K/4K、画幅和生成方式差异定价收进可选的“按规格定价”。
  • 系统渠道直连、前台逻辑模型按渠道计价和失败切换线路均按任务实际规格匹配价格档;缺失价格档 ID 不再被误转成 "<nil>"。
  • 后端全量测试、价格表单专项测试和前端生产构建通过。
  • 在 /admin/channels 新建图片和视频模型,仅填写统一价格后分别生成不同质量、尺寸、分辨率和时长,确认都命中默认价格。
  • 在默认价格之外新增一个 2K 或指定分辨率价格,确认精确规格优先、其他规格继续使用默认价格;关闭“可供用户使用”后该档不再参与匹配。
  • 后端保存系统渠道模型 Logo,并通过脱敏模型目录下发;前端类型检查与生产构建通过。
  • 在 /admin/channels 的模型管理中新增和编辑模型,确认 Logo 可选择、清除并在列表中立即更新。
  • 关闭“前台模型”功能后刷新创作端,确认模型选择器显示系统渠道模型配置的 Logo,浅色和深色主题下均清晰可见。

提示词位置型资源引用与缩略图

提示词中的画布连接使用 @图片N、@视频N、@音频N、@文本N 等位置型槽位,不再把节点 ID 写入提示词;创作页附件对用户仍显示同类编号,但内部使用稳定附件身份,避免删除中间项后引用错位。以下场景仍需要在浏览器中由用户确认:

  • 29 项提示词引用专项测试、TypeScript 检查与生产构建通过。
  • 旧 @[node:节点ID] 仅做读取迁移;新写入、配置组装、故事板物化、Agent 建图和快捷生成均只生成位置型引用。
  • 普通图片、角色主图和绘图共享图片编号,保留各自显示前缀;视频、音频和文本独立计数。生成时按当前连线顺序解析槽位,删除连线不再删除提示词。
  • 只有 storageKey 的图片/视频引用会异步解析预览地址;生成中按钮使用节点强调色与可见旋转动画。
  • 在画布中连接图片 A 并写入 @图片1,删除 A 的连线后连接图片 B,确认提示词不变、缩略图切换到 B、生成请求使用 B。
  • 混合连接两张图片、一段音频和一段文本,确认标签依次为 @图片1、@音频1、@图片2、@文本1,调整不同类型的连线不会串号。
  • 打开包含旧 @[node:...] 的画布节点,确认面板自动迁移成可见位置标签,保存和后续编辑不再出现节点 ID。
  • 使用只有 storageKey、没有 content 的本地图片和服务端资源图片,确认顶部参考栏、行内引用和放大预览均能显示。
  • 点击生成,确认按钮保持节点强调色并显示连续旋转动画,不再出现纯红色空圆。
  • 在 /create 添加至少三张参考图,并在提示词中重复引用 @图片2;拖动参考内容轨道中的另一张图片覆盖行内缩略图,确认提示词文本保持不变且所有 @图片2 缩略图同步刷新。
  • 从本机拖入图片覆盖行内缩略图,确认上传期间不能发送,上传成功后原编号保持,上传失败时旧图和旧提示词不变。
  • 分别测试图片模式、视频模式和文本模式,确认只有图片引用可成为替换目标,视频、音频、文件和技能引用不会误触发。
  • 替换一个已经位于参考轨道中的图片,确认附件不会重复,其他引用仍指向正确素材。
  • 确认浅色/深色主题、窄窗口和同一图片多次出现时,拖入高亮与“替换”遮罩清晰且不遮挡相邻文字。

已有图片节点图生图引用

  • 已有图片节点显式使用 @图片1 时会把节点自身作为参考图提交;未显式引用时仍保持文生图语义。
  • 无法解析的 @图片N、@视频N、@音频N 等画布引用会在提交前报错,不再静默丢失素材。
  • 后端专项测试确认 OpenAI Images 图生图使用 POST /v1/images/edits 和 multipart/form-data,并携带图片文件、模型、提示词、尺寸及响应格式。
  • 在线上画布打开一张已有图片,输入“将 @图片1 图片变清晰”并生成,确认任务日志包含参考图、请求路径为 /v1/images/edits、Content-Type 为 multipart/form-data。
  • 在同一图片节点移除 @图片1 后再次生成,确认请求恢复为 /v1/images/generations,不会隐式携带旧图片。

画布图片与音频组合的视频模型选择

  • 图片或角色与音频组合时继续按 image_to_video 匹配,音频仅作为附加参考;纯音频仍按 audio_to_video,包含参考视频时仍按 reference_to_video。
  • 模型选择专项测试覆盖“支持图生视频且允许参考音频”的模型,不再错误提示“不支持全模态参考”。
  • 在线上画布只连接一张图片和一段音频,确认支持图生视频与参考音频的视频模型可选择,并能正常提交生成任务。
  • 分别验证纯音频、图片加音频、视频加音频三种输入,确认模型筛选和任务 operation 依次为 audio_to_video、image_to_video、reference_to_video。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

工作区、Agent、画布复制、模型配置与创作附件修复

  • 前端 TypeScript 检查与生产构建通过;提示词引用、创作附件和侧栏主题专项测试通过。
  • 空间工作区与普通页面的左侧菜单统一使用 --workspace-navigation,不再随路由切换表面色。
  • 本机 Agent 输入框改为 Enter 换行、Cmd/Ctrl+Enter 发送;本轮模型失败会保留原请求快照并提供手动重试,不重复插入用户消息。
  • 文本节点展示区支持框选复制,复制文本在 Clipboard API 不可用时使用兼容回退;图片节点右键增加“复制图片”,非 PNG 图片会转为 PNG 后写入系统剪贴板。
  • 后台模型配置的章节标题与内容、价格档匹配条件与计费状态均改为上下结构。
  • 创作页附件删除按钮隔离 Reorder 拖拽事件;附件引用使用稳定 token,删除第三张不会让第四、第五张引用串位。
  • 在普通列表页、创作页、空间工作区之间切换,确认左侧菜单明暗色调始终一致,折叠与移动端展开状态无闪色。
  • 在本机 Agent 输入多行文本,确认 Enter 只换行、Cmd/Ctrl+Enter 和发送按钮正常提交;模拟模型中途失败后点击“重试本轮”,确认沿用原会话、文本、图片和技能且不重复用户气泡。
  • 在画布文本节点中拖选部分文字并复制;分别右键 PNG、JPEG、服务端 storageKey 图片执行“复制图片”,确认可粘贴到系统应用。
  • 在后台打开文本、图片、视频模型配置,确认所有章节为纵向阅读顺序,宽屏和窄屏都没有左右主从栏或价格档竖分隔线。
  • 在创作页上传 5 张参考图,展开后依次删除第 3、5、1 张,确认每张都能就地删除,轨道不触发拖拽,提示词中的其余引用仍指向原附件。

Agnes AI 官方视频协议

  • Agnes 协议已启用,覆盖 agnes-video-v2.0、agnes-video-2.5、agnes-video-2.5-flash 的官方创建字段、状态、失败信息和 metadata.url 结果解析。
  • 轮询使用同一 Base URL 主机的根路径 /agnesapi,专项测试确认 https://apihub.agnes-ai.com/v1 不会被拼成错误的 /v1/agnesapi。
  • Flash 的 720P、最多 5 张图片、禁止参考视频规则已在请求前强校验;协议与 provider service 专项测试通过。
  • 使用真实 Agnes API Key 分别完成 V2.0 文生视频、单图生视频、2.5 关键帧、2.5 reference、2.5 Flash 的创建与轮询冒烟。
  • 验证真实失败任务能显示官方 error.message,429/5xx 保持现有上游错误语义,生成成功后视频能进入微昕·砚资源保存流程。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

插件分层管理

  • 管理员在 /admin/plugins 停用官方应用插件后,普通用户的有效状态和新请求同时被阻止;重新开放后保留原个人启用选择。
  • 两个普通用户分别启用和停用同一官方应用插件,确认状态、Eagle 配置和工作流入口互不串号。
  • 普通用户不能切换系统协议或管理员上传插件;关闭“向普通用户显示系统插件”后,两类插件均不可见。
  • 用户停用 RunningHub / ComfyUI 后不能提交新任务,但已接收任务、Bridge 轮询、心跳和结果回传可以完成。
  • 管理员上传、停用、启用和卸载自定义插件后,插件包、平台状态、用户状态与审计日志一致。
  • 验证 /plugins 与 /admin/plugins 的浅色/深色主题、窄屏、空态、筛选、上传弹窗和开关失败回滚。

RunningHub 与 ComfyUI Bridge 工作流

  • 后端全量测试、前端类型检查、Canvas Agent 构建和原生 Bridge Go 测试通过。
  • 工作流插件停用状态覆盖设置入口、画布创建、配置面板、任务创建、管理 API 和 worker 执行校验。
  • 覆盖后端重启后请求领取、结果先落库再恢复、原请求 ID 幂等复用,以及 RunningHub API Key 不进入 URL 的自动化测试。
  • 使用真实 RunningHub Workflow 和 App 分别验证参数发现、图片/视频/音频输入映射、提交、轮询、取消和结果下载。
  • 使用真实 ComfyUI API 工作流验证 Bridge 注册、心跳、领取、完成、取消和大文件结果回传。
  • 在 Bridge 执行中重启后端,确认结果回传成功且任务不重复执行;在请求未领取时重启后端,确认原请求继续投递。
  • 验证浅色/深色主题、窄屏设置页、画布工作流节点和任务中心状态展示。

AI 提示词优化器

当前代码和生产构建已完成,但以下场景仍需要在真实配置和不同窗口尺寸下由用户确认:

  • web 前端 TypeScript 检查与生产构建通过。
  • 优化面板打开、关闭不再等待 Popover 入场或退出动效。
  • 在 /create 中分别测试图片和视频模式的打开、发送、取消、失败重试和关闭。
  • 在图片、视频画布节点中测试优化入口、结果采用和原提示词回填。
  • 逐项测试五种优化方式,确认模式切换不会丢失当前输入。
  • 测试优化模型切换,并确认目标生成模型与优化模型显示和请求职责分离。
  • 测试已连接图片、文本参考,以及“结合参考”没有参考内容时的提示和禁用状态。
  • 测试长提示词、长优化结果、滚动、拖动和四边缩放;确认窗口接近边缘时不会跑出视口。
  • 测试浅色/深色主题和窄窗口布局,确认按钮、输入框和结果文本仍可读且可操作。
  • 使用自定义文本渠道实际发送一次,确认渠道、模型和权限配置正确时不会误报“必须指定系统渠道和模型”。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

肖像可识别性排查画布插件

首版画布节点、本机签名运行时、本地 ONNX 预检、百度候选链路、模型作业协调器和四种报告导出已接入;以下边界仍需要真实环境确认:

  • Agent TypeScript 构建、Web TypeScript 检查通过。
  • 本机任务持久化、幂等、取消/重试清理、候选 URL 安全校验和报告转义测试通过。
  • Markdown、无脚本 HTML、DOCX 共用检测结论、本地预检、六维特征、修改建议和失败候选说明;报告结构回归测试通过。
  • 使用固定真人/虚拟人图片建立 Python 原实现与 TS 实现的检测框、embedding 和风险金标。
  • 在安装 det_10g.onnx、w600k_r50.onnx 的 Windows 环境完成直接比对和本地仅模式验证。
  • 在系统 Chrome/Edge 可用环境完成百度识图、验证码、页面结构变化和候选下载失败验证。
  • 配置支持双图输入的项目视觉模型,验证 Path A、Path B、模型租约、并发、取消和页面重开恢复。
  • 浏览器确认插件首次关闭、旧节点只读、明暗主题、窄屏、键盘焦点和候选添加到画布。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

画布节点自动整理

自动整理入口和布局提交逻辑已完成,以下场景仍需要在实际画布中手工确认:

  • web 前端 TypeScript 检查与生产构建通过。
  • 画布底部视图控制中显示“自动整理节点”按钮。
  • 布局纯函数专项测试覆盖有连线、无连线、选中子集、不同尺寸、锁定节点,以及文本/图片/视频/音频四类泳道。
  • 无选中节点时,确认多个顶层节点横向保持连线层级,纵向按文本、图片、视频、音频分区;无连线时同类节点各自在独立网格中排列。
  • 选中节点时,确认只移动选中的可移动节点,未选中节点保持原位。
  • 确认锁定节点、容器节点和折叠批次隐藏子节点不会被移动。
  • 点击“撤销”确认可以恢复整理前的位置,并确认刷新画布后布局仍能保存。
  • 在浅色/深色主题、窄窗口和节点数量较多的画布中确认底部按钮可见、可操作且不遮挡主要内容。

分镜脚本资产关联

  1. 在同一画布放入角色、场景图片、参考视频和音频后生成分镜,确认各镜头只关联模型返回的真实画布资产,不出现失效或编造 ID。
  2. 分镜卡片按“序号、时长、视频提示词、台词/旁白、关联资产”五列显示;图片、视频和音频缩略图可点击并打开对应预览。
  3. 从单个镜头及批量入口创建视频节点,确认脚本行输出和每个关联资产都自动连到视频节点,重复同步不会产生重复连线。
  4. 打开视频节点提示词,确认关联资产以标准 @资产 缩略图展示,生成请求能解析图片、视频和音频引用。
  5. 修改镜头资产关联后再次同步,确认已移除的托管资产连线被清理,而用户手工创建的普通连线仍保留。

零价免费模型

  1. 管理员设置启用系统渠道模型的按次价格为 0 后,普通用户刷新设置即可看到并成功创建任务。
  2. 前台逻辑模型使用统一按次价格 0 后,普通用户可见并能成功创建任务。
  3. 零价任务完成后,账单状态为已结算,用户可用积分和预留积分均不变化。
  4. 零价 Token 任务在上游未返回 usage 时仍能以 0 结算;正价 Token 任务继续依赖 usage 结算。
  5. 管理端提交任一负价格仍会被拒绝。
  6. 未勾选价格已配置的默认零价模型仍不会向普通用户公开。

用户诊断包导出

当前实现已完成前后端链路、脱敏和设置页 UI,但仍需要真实环境验证下载链路和不同错误场景:

  • web 前端 TypeScript 检查与生产构建通过。
  • 诊断服务已覆盖脱敏、ZIP 结构和跨用户任务拒绝测试。
  • 设置页桌面布局和 680px 窄屏布局已完成浏览器预览。
  • 登录后从设置页导出成功,确认 ZIP、诊断编号和文件名均可用。
  • 从失败任务详情进入诊断页,确认 taskId、projectId 和对应日志范围正确带入。
  • 后端未重启或接口未部署时,确认前端能显示可操作的错误提示,而不是原始 Blob/502 文案。
  • 验证浅色/深色主题、15 分钟到 24 小时范围、长问题描述和导出中的 loading 状态。

Eagle 素材库

  • 增加素材无文件夹、无标签时的空集合归一化单元测试。
  • 使用真实 Eagle 服务验证无文件夹素材、无标签素材、文件夹路径和预览引用。

Windows 本地开发

  • 在一台依赖已安装和一台全新工作区分别运行 .\scripts\start-local.ps1。
  • 验证端口被占用时脚本会安全退出,且不会关闭已有进程或使用正式开发数据目录。

画布生成结果资源恢复

  • web 前端 TypeScript 检查与生产构建通过。
  • 模拟图片生成任务已成功但结果下载失败,确认节点显示“重新加载资源”和“重新生成”两个按钮。
  • 点击“重新加载资源”,确认只重新查询并消费原任务结果,不创建新的生成任务或重复扣费。
  • 模拟视频结果落盘/OSS 上传失败后再次加载,确认恢复成功会清除错误状态并保留原任务信息。
  • 点击“重新生成”,确认仍走原有生成重试流程;普通生成失败仍只显示“重新生成”。

数据同步与资源删除重构

  • 前端远端基线、登录 hydrated 屏障、上传并发编辑和删除持久化回归测试通过。
  • Generation 失败只回滚生成字段,保留同节点并发标题编辑;重复 Generation 仍按明确 effect key 幂等。
  • 资源引用识别改为显式字段合同,未登记的字段名和自由文本不会被推断为资源引用。
  • 后端素材删除改为数据库事务 + resource_deletion_jobs Outbox,数据库失败时物理文件保持不动。
  • Outbox Worker 本地文件删除、对象不存在幂等成功和失败退避测试通过。
  • 画布上传、媒体工具产物、导演台输出、ZIP 导入和时间线直连媒体统一先写入素材库;远端同步按“素材后端确认后再保存画布”的顺序执行。
  • 后端保存画布时校验 assetId、资源归属、就绪状态和素材资源一致性;素材更新、替换与删除不能破坏已有画布引用。
  • 登录会修复历史画布缺失的素材记录与 assetId;后台按状态保留期回收无任何业务引用的资源,并通过删除 Outbox 清理物理对象。
  • 账号容量只统计 ready 资源并按物理对象去重,上传中、失败记录和重复 Resource 行不会形成虚假容量占用。
  • 在个人画布分别上传图片、视频、音频和时间线媒体,刷新后确认 /assets 均可见对应素材、画布 assetId 不丢失,账号容量只增长一次。
  • 使用修复前已有“画布存在资源但素材缺失”的账号登录,确认素材自动补建并同步;再准备超过 24 小时且无任何引用的孤儿对象,确认后台最终删除资源记录和物理对象、容量同步下降。
  • 模拟资源上传成功后立即断网,确认画布结构不会以缺失素材的状态写入服务端;恢复网络后自动重试完成素材与画布同步。
  • 使用真实 OSS 配置验证对象删除成功、权限失败后的退避重试和多实例租约接管。
  • 浏览器真实环境验证登录快照慢响应期间工作区保持不可写,以及删除后立即刷新不复活素材。

S3 兼容存储

  • 后端 S3 单次上传、Range 读取、预签名地址、Session Token、幂等删除、配置版本和迁移清单自动化测试通过。
  • 前端 S3 预设、关键字段重测判断、默认 wxin-yan 路径前缀、TypeScript 检查和生产构建通过。
  • 平台或用户从未保存 OSS 配置时,后端统一返回标准化默认值(含 s3Preset: custom);缺省读取回归测试与后端全量测试通过。
  • 腾讯云 COS 连接测试固定通过服务端 Endpoint 执行写入、Range 读取和删除,不再误走可选 CDN;COS 鉴权失败会返回可操作且不泄露上游详情的提示,专项回归测试通过。
  • 使用全新数据库登录管理员并打开 /admin/settings/storage,确认页面直接显示服务器本地存储且可切换阿里云 OSS、腾讯云 COS、七牛云 Kodo 和 S3 兼容存储。
  • 使用真实腾讯云 COS 配置测试成功与错误 SecretKey 两种场景;同时填写 CDN 加速域名时确认连接测试仍走 COS Endpoint,错误凭据提示为鉴权失败而非“系统处理失败”。
  • 分别使用 AWS S3、Cloudflare R2、Backblaze B2 和 RustFS 完成写入、Range 读取、删除及历史资源恢复验证。
  • 验证 Path Style 开启时强制路径寻址,关闭时 AWS 使用虚拟主机寻址、其他自定义 Endpoint 自动使用路径寻址。
  • 验证平台切换到本机后只影响新上传,历史 S3 资源仍可读取和删除;个人 S3 停用后正确回退平台存储。
  • 验证同一 S3 修改 Bucket、Endpoint、Region、前缀或 Path Style 时,留空 Secret 和 Session Token 可继续复用,并要求重新连接测试。
  • 使用私网 RustFS 验证浏览器同源代理,以及提交给模型上游时转换为微昕·砚公网 HTTPS 短时地址;未配置公网 HTTPS 地址时应明确拒绝。
  • 验证管理员关闭个人 S3 后不再接受个人新上传,但已有个人 S3 资源仍可读取和删除。

3D 导演台时间轴关键帧删除与快捷键

关键帧删除入口、全局快捷键和交互控件守卫已接入,以下场景仍需要在浏览器中由用户确认:

  • web TypeScript 检查、导演台专项测试与全量前端测试通过。
  • 关键帧删除覆盖对象 transform、对象骨骼和摄影机三类轨道;未命中时返回同一场景引用,不记历史、不产生修订。
  • 时间轴关键帧为可 Tab 聚焦的真实 button;点击或 Enter/Space 只选择并定位播放头,Delete/Backspace 或顶栏删除按钮才删除,避免普通点击误删。
  • 所选关键帧可切换保持、线性、平滑缓动;缓动同时作用于对象/摄影机 Transform 与骨骼旋转插值,旧数据默认线性。
  • 切换镜头/摄影机或外部删除关键帧后会清除陈旧选择,顶栏缓动和删除控件不会继续修改不可见轨道。
  • 全局快捷键在输入框、按钮、链接、role 型控件、可编辑区域及其子元素内一律不解析;仅在动作真正执行时 preventDefault。
  • 鼠标点选场景对象、dock 工具、模式按钮、快速添加和顶栏图标按钮后会释放焦点,全局快捷键立刻可用;键盘激活(Enter/Space)保留焦点,Tab 序列不断。
  • 在真实画布中记录多个关键帧后逐个删除,确认删除的是目标帧、其余帧顺序不变,且「撤销」能恢复。
  • 折叠对象轨道后仅通过汇总轨删除关键帧,确认收起状态下仍可删除。
  • 用键盘 Tab 走到关键帧上按 Enter/Space,确认只选择并把播放头定位到该帧;再按 Delete,确认删除的是该关键帧而不是整个对象。
  • 对同一段动画依次选择保持、线性、平滑缓动,确认播放结果明显不同,撤销可恢复上一个缓动设置。
  • 选中摄影机关键帧后切换到使用另一台摄影机的镜头,确认旧选择和顶栏缓动/删除控件立即消失。
  • 确认浅色/深色主题下关键帧的悬停环与焦点环可见,命中区易于点中。
  • 逐个验证 W/E/R、Delete/Backspace、H、Escape、Ctrl/Cmd+Z、Ctrl/Cmd+Shift+Z、Ctrl/Cmd+Y 和空格;确认在标题输入框内输入这些字符不会触发快捷键。
  • 在场景列表点选一个对象后直接按 Delete,确认删除的是该对象;再点 dock 的「旋转」后按 W,确认能切回移动。
  • 用键盘 Tab 走到场景对象行按 Enter 选中,确认焦点仍停在该行、可继续 Tab 到下一项。

3D 导演台场景模板与四模式骨架

新建场景模板和摆场/姿态/动画/摄影机四个一级模式已接入,以下场景仍需要在浏览器中由用户确认:

  • web TypeScript 检查、导演台专项测试与全量前端测试通过。
  • 导演台 P0 Chrome E2E 全部通过;场景 A 已同步为「默认摆场不显示时间轴与 AutoKey,切到动画模式后 AutoKey 默认关闭」。
  • 五个模板结构确定、每次实例 id 独立、对象 XZ 占位两两不相交,判据与 resolveDirectorPlacement 一致。
  • 空场景不含任何演员;未知模板 id 回落到空场景。
  • 模板不改动 DirectorScene 结构与 version;mode 只存在于工作台 store,不写入场景。
  • 离开动画模式会停止播放并关闭 Auto Key,并把渲染视图夹回当前模式允许的集合。
  • 动画模式会根据 Transform 关键帧绘制可见演员与摄影机的空间轨迹,包含起终点、方向和当前播放进度;隐藏演员及零长度轨迹不显示。
  • 播放头按镜头 FPS 而非固定 60 次/秒更新,跨过镜头末尾时保留余量;轨迹长度只在对象/摄影机内容变化时重算。
  • 「按运镜生成轨迹」只更新首尾关键帧,保留手工中间帧、关键帧 ID 与 easing,并提示切到动画模式继续编辑。
  • 截图/录制绑定开始时的场景快照;上传完成后重新核验节点与镜头,并只把预览引用合入最新场景,不用旧快照覆盖并发编辑。
  • 从工具栏和画布右键菜单分别新建镜头,确认都会先弹出模板选择,且右键位置会作为新节点位置。
  • 逐个使用五个模板新建镜头,确认空场景没有演员,单人/双人/走位演员数量正确,产品镜头含产品主体、背景板和侧面道具且没有演员。
  • 确认双人对话两名演员面对面、走位三名演员互不重叠、产品镜头道具不穿模。
  • 打开一个已保存的镜头,确认不弹模板选择、场景内容未被改写。
  • 在摆场模式确认时间轴、Auto Key、记录关键帧、骨骼与姿势预设、深度/法线视图都不可见。
  • 在姿态模式选中演员,确认骨骼与姿势入口出现;未选中演员时不出现;确认不会自动产生关键帧。
  • 在动画模式开启 Auto Key 并开始播放,再切到其他模式,确认播放停止、Auto Key 关闭,且场景没有被继续写入关键帧。
  • 在动画模式为演员和摄影机分别记录至少两枚位置不同的 Transform 关键帧,确认轨迹、起终点、方向锥和当前进度点可见;隐藏演员后其轨迹同步消失,离开动画模式后全部轨迹消失。
  • 在摄影机模式确认右栏固定显示镜头/摄影机检查器,对齐视图与运镜可用,深度/法线视图可选。
  • 在摄影机已有关键帧且播放头不在 0 秒时执行「摄影机对齐当前视图」,确认当前帧立即保持新机位,旧关键帧仍在且撤销可恢复。
  • 在摄影机已有首尾帧和至少一枚带缓动的手工中间帧时执行「按运镜生成轨迹」,确认只更新首尾位置,中间帧、缓动与撤销历史都保留。
  • 开始截图或白膜录制后切换活动镜头、删除源节点或继续编辑场景,确认旧输出被拒绝或安全合并,不写进另一项目、不复活节点、不覆盖新编辑。
  • 确认模式切换不丢失草稿、撤销历史和保存状态,切换后标题与保存指示器仍正确。
  • 确认浅色/深色主题下模式按钮的选中态、悬停态与焦点环可见,选中态不是主操作色。
  • 在窄窗口(小于 lg 断点)确认模式切换仍可见可点击。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

3D 导演台取景模式(3D/CAM/五个正交视图)

新增 viewMode(自由/机位/顶前后左右五个正交轴向)取景切换,独立于摆场/姿态/动画/摄影机四个一级模式;以下场景仍需要在浏览器中由用户确认:

  • web TypeScript 检查通过;director-view-modes.test.ts、director-modes.test.ts、director-template-mode-wiring.test.ts 专项测试通过。
  • 三台相机对象(自由观察、机位、正交)互相独立持有,切换 viewMode 只挪动视口的活动相机指针,源码层面确认不共享可变状态。
  • 正交轴向使用真正的 THREE.OrthographicCamera,取景来自场景内容包围盒,而非把透视相机换个角度伪装;取景解算与视口接线均有专项测试覆盖退化场景(空场景、非法数值)。
  • 逐个切换 3D/CAM/顶视/前视/后视/左视/右视,确认画面确实是对应视角,正交视图没有透视畸变。
  • 放入大比例背景板和旋转后的长道具,逐个切换正交视图,确认对象完整进入画面,不再因只按对象中心构图而裁切。
  • 在自由视角环绕后切到机位或任一正交视图,再切回自由视角,确认之前的环绕位置原样恢复,没有被拉回默认机位。
  • 在机位视图播放/拖动时间轴,确认摄影机运镜正确预览;切到正交视图确认环绕已锁定、拖拽无效。
  • 确认取景切换器(3D/CAM/TOP/FRONT/BACK/LEFT/RIGHT 七个按钮)可键盘 Tab 到达、Enter/Space 激活,aria-pressed 状态正确朗读。
  • 确认切换取景模式不产生新的撤销历史记录,也不触发保存/未保存提示。
  • 在机位或正交视图下点击「导出预览图」「录制白膜视频」,确认导出流程仍正常完成(不因当前相机是正交投影而失败)。
  • 确认浅色/深色主题下取景切换器的选中态、悬停态与焦点环可见。
  • 在窄窗口(小于 lg 断点)确认取景切换器仍可见可点击,不与其他浮层重叠遮挡。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

3D 导演台首次引导与窄屏属性面板

首次引导已接入真实登录用户 scope,并按 Issue #305 改为“添加演员 → 移动 → 调姿 → 轨迹 → CAM → 应用”六步;以下场景仍需要浏览器确认:

  • 引导进度按认证用户 ID 隔离,不回落 guest;重启入口在加载期间也可用,重置失败会重新读取原进度。
  • 已跳过或已结束的引导可从标题栏重新开始;最后一步使用“结束引导”中性文案,不宣称用户已经完成实际任务。
  • 小于 lg 断点时右侧属性区移动到工作区下方且可滚动,不再直接隐藏姿势与骨骼控制。
  • director-onboarding.test.ts 专项测试与 web TypeScript 检查通过。
  • 使用两个真实账号分别推进、跳过和重启引导,确认进度互不串号;切换账号时旧读取结果不会闪现。
  • 从新账号首次打开导演台,逐步完成添加演员、移动、姿态、两枚 Transform 关键帧、CAM 构图与应用,确认六步文案都指向真实可见入口。
  • 在引导加载期间连续点击“重新开始引导”,再模拟 IndexedDB 写入失败与恢复,确认界面不会永久隐藏或假装推进。
  • 在窄窗口检查摆场、姿态、动画、摄影机四种模式:标题栏可横向到达,底部属性面板可滚动,时间轴与引导不互相遮挡。

用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。

模型请求失败日志完整性

模型请求日志已补齐 HTTP 失败关联、错误搜索与请求前失败兜底;以下场景仍需要在管理后台由用户确认:

  • HTTP 非 2xx 日志同时保留节点使用的中文错误归类和上游原始错误详情。
  • API 调用日志关键词搜索覆盖 errorCode 与 error,可按节点中文提示、上游错误或错误码定位。
  • 参数校验、协议构造、路由准备等请求尚未发出的最终失败会补记 request_not_sent,且不保存任务输入、API Key 或请求正文。
  • 已有真实 HTTP 调用日志的任务不会重复补记请求前失败日志。
  • 在画布分别触发一次成功请求、一次上游 400 和一次本地参数校验失败,确认 /admin/logs 均能看到对应记录,并可按节点错误文案搜索。

渠道视频分辨率枚举兼容

画布已将渠道声明的分辨率视为不透明枚举,不再把带方向或本地化后缀的值静默回退为 720p;以下场景仍需浏览器确认:

  • 前端分辨率规范化、画布选中态、价格匹配与请求映射专项测试通过。
  • AutoDL 插件 1.0.2 已改用通用 lower 并通过协议包测试;宿主仅保留旧 1.0.1 清单所需的兼容 shim。
  • Manifest 工作流的视频能力改为按 parameters 投影:只声明分辨率时不再补画幅能力,也不会继续提交旧的全局 size。
  • 同时支持分辨率和画幅的渠道按当前比例与分辨率推导只读宽高,例如 16:9 + 720P = 1280×720、16:9 + 1080P = 1920×1080、16:9 + 4K = 3840×2160。
  • web TypeScript 检查与生产构建通过。
  • 后端允许视频能力明确省略画幅,并通过全量 Go 测试;前端能力投影、尺寸计算和画布模型专项测试通过。
  • 在画布选择 480p竖、768p竖、480p横、768p横,确认按钮选中态、底部摘要和重新打开后的状态一致。
  • 分别提交四个枚举值,确认请求中的 resolution 与插件声明一致,且其他标准 720p、1080p 渠道不受影响。
  • 使用仅声明 resolution 的 AutoDL 工作流,确认画布和创作页不显示画幅/尺寸,生成请求不包含无意义的 aspectRatio。
  • 使用同时声明画幅与分辨率的渠道,依次切换 16:9 下的 720P、1080P、4K 及 9:16,确认宽高展示随选择即时更新且请求仍按渠道协议发送比例与分辨率。

画布生成重复提交保护

画布生成入口已增加节点级同步提交锁,并为手动生成记录“提示词、模型、参数、参考素材”指纹;以下场景仍需浏览器确认:

  • 连续三次调用同一节点只执行一次的专项测试通过;提示词、模型、参数或参考素材变化会产生不同指纹。
  • web TypeScript 检查、21 个相关专项测试与生产构建通过。
  • 在同一节点快速连续点击三次生成,确认任务中心只新增一个任务,且不会重复扣除积分。
  • 首次任务完成后不修改提示词、模型、参数和参考素材,再次点击生成,确认出现“再次生成相同内容”二次确认;取消不创建任务,确认后只创建一个新任务。
  • 分别修改提示词、模型、分辨率/时长和参考素材后生成,确认视为新内容,不弹重复确认。
  • 执行分镜批量生成、Agent 自动生成和显式重试,确认不会被手动重复确认弹窗阻塞。

画布快捷键中心

画布搜索已统一为 Ctrl/Cmd + F,专注模式调整为 Shift + Ctrl/Cmd + F;原快捷键长列表已改为可搜索、可分类的快捷键中心。以下场景仍需浏览器确认:

  • 快捷键目录筛选专项测试、web TypeScript 检查与生产构建通过。
  • 在 Windows 和 macOS 分别按 Ctrl/Cmd + F,确认打开画布节点搜索且不会触发浏览器页内查找。
  • 按 Shift + Ctrl/Cmd + F,确认进入或退出专注模式;按 Ctrl/Cmd + K 不再打开节点搜索,并保留工作区命令面板入口。
  • 打开快捷键中心,分别搜索“粘贴”“缩放”和“Alt L”,确认结果与分类计数正确,清空搜索后恢复完整列表。
  • 确认浅色/深色主题下标题、分类选中态、搜索焦点环、键帽和滚动区域清晰可见。
  • 在窄窗口确认分类可横向滚动、快捷键列表改为单列,弹窗不超出视口且长内容仅在列表区滚动。

管理后台在线更新

管理后台已新增“系统配置 → 系统更新”,并通过宿主机 Host Updater 执行强制备份、迁移、切换、健康验证和失败回退;以下场景需要在真实 Linux Docker Compose 服务器完成最终确认:

  • 后端 Host Updater、Unix Socket 客户端、管理员 API、版本比较和状态持久化相关测试通过。
  • 前端 TypeScript 检查、生产构建、侧栏入口、更新器未安装空态、更新器连接态、GitHub Release 日志、浅色/深色主题浏览器验收通过。
  • Compose 配置校验、systemd 安装脚本语法和 Release 二进制构建命令通过。
  • 在生产更新前生成 PostgreSQL + 数据目录 ZIP,确认 .partial 不会被当作有效备份,最终 ZIP 可打开且 SHA-256、元数据、database.dump、backend-data.tar 均有效。
  • 从首个在线更新版本升级到包含 schema v2 的测试版本,确认旧服务先 drain,迁移服务独占执行,目标 build version 和 schema version 在稳定窗口内一致。
  • 人为让目标版本健康检查失败,确认自动恢复旧 Compose、旧镜像和数据库备份;旧版本因 schema 过高拒绝启动时,必须在数据库恢复完成后才能重新健康。
  • 在拉取镜像、创建备份、迁移、启动和健康检查阶段分别模拟失败,确认停服前失败不会改变运行版本,停服后失败进入回退,回退失败明确显示“需人工介入”。
  • 更新期间刷新页面、关闭浏览器和 Backend 短暂不可用,确认宿主机操作不中断,恢复后日志与最终状态完整。

大型画布媒体节点性能

大型画布已修复 LibTV 图片强制并发加载、缩略图反向覆盖原始尺寸、节点操作 Context 失稳和小范围平移频繁卸载媒体节点的问题;以下场景仍需使用真实大型画布确认:

  • 前端专项测试覆盖 LibTV 延迟加载、尺寸回写保护、节点渲染滞回、Context 稳定引用,以及缩放/平移期间不得隐藏节点壳;TypeScript 检查与生产构建通过。
  • 导入包含数百个图片、视频节点的 LibTV 画布,确认初次打开不会同时加载全部图片,平移和反向平移时已显示图片不再反复闪烁或重新解码。
  • 在自动、性能、画质三种模式下分别缩放和平移,确认操作期间视口内节点持续可见,远离视口的节点仍会卸载,选中、拖动、连线和节点尺寸保持正确。
  • 使用浏览器 Performance 与 Network 面板记录导入前后数据,确认平移期间主线程长任务、图片并发请求和节点重复渲染明显下降。

大型画布进入详情性能

画布列表进入详情已增加详情模块预取、点击即时反馈和可中断的数据恢复渲染;节点引用改为一次建图索引,列表封面结果按节点数组缓存,避免延迟随节点数快速放大。以下场景仍需使用真实大型画布确认:

  • 专项测试覆盖详情模块预取、点击反馈时序、批量引用索引语义;TypeScript 检查与生产构建通过。
  • 首次打开应用后悬停并点击包含数百节点的 LibTV 画布,确认卡片立即出现“正在打开”,随后进入详情加载态,不再数秒无反馈。
  • 分别使用空画布、100 节点和数百节点画布记录从点击到详情可见的耗时,确认增长接近线性且列表返回后再次进入更快。

画布保存被历史素材阻断

  • 素材远端同步会在发送副本中移除超过后端约束的历史 primaryVersionId,合法项目资产版本 UUID 原样保留,本地素材对象不被修改。
  • 后端 36 字符强校验保持不变;前端专项测试覆盖非法历史值清理、合法 UUID 保留与本地对象不可变。
  • 使用曾出现“素材主版本 ID 不能超过 36 个字符”的账号编辑并保存画布,确认云端同步成功,刷新后画布布局仍然存在。

独立素材共享文件删除

  • 素材删除不再把另一条素材共用同一资源文件误判为素材实体引用;删除当前素材时保留其他素材仍使用的资源记录与物理文件。
  • 项目、镜头等真实业务引用仍会阻止素材删除;后端专项测试覆盖两个独立素材共享同一资源的删除场景。
  • 在素材库删除曾由同一生成结果产生的重复素材,确认当前素材删除成功,其他素材仍可预览和下载;实际仍关联项目或镜头的素材继续显示引用来源。

管理后台存储资源

管理后台已新增资源列表、筛选、去重容量统计、预览下载和安全批量删除;以下场景仍需使用真实资源数据确认:

  • 后端专项测试覆盖管理员权限、筛选校验、共享对象去重统计、历史本地资源预览、部分删除成功、公告/画布引用阻止、共享物理对象保留、审计失败事务回滚和 100 项上限。
  • web TypeScript 检查通过;只读阶段与删除阶段均复用同一资源页面和统一 API 客户端。
  • 在 /admin/resources 分别按资源 ID、对象路径、用户 ID、类型、状态和存储类型筛选,确认分页与筛选 chip 一致。
  • 预览并下载本地、阿里云 OSS、腾讯云 COS、七牛云 Kodo 和 S3 的图片、视频、音频与普通文件,确认 Range、登录 Cookie 和错误提示正确。
  • 选择一个仍被公告、素材、画布、项目、风格、工作流或镜头产物引用的资源,确认删除结果显示真实引用来源且业务数据和物理对象均保留。
  • 批量选择“可删除、仍被引用、不存在”三类资源,确认只删除安全项,列表和统计刷新,审计事件与 outbox 数量一致。
  • 创建两条共享同一物理对象的资源记录,只删除其中一条,确认另一条仍能预览且物理对象未清理;两条同时删除时确认只产生一个物理删除任务。
  • 模拟对象存储暂时失败,确认资源记录事务仍成功、删除任务保留并重试,恢复后物理对象最终清理。

画布素材上传幂等

画布上传、远端用户数据同步与后端资源写入已使用同一逻辑上传身份,避免腾讯云 COS 等对象存储因自动同步、并发请求或响应丢失产生重复对象:

  • 前端回归测试补充“内嵌图片上传期间继续编辑”,要求同一 coverUrl/dataUrl 跨同步批次只调用一次资源上传。
  • 后端专项测试覆盖相同上传身份复用就绪资源,以及失败重试保持原资源 ID 和对象路径。
  • 在腾讯云 COS 测试桶上传图片后连续移动节点、修改标题并刷新页面,确认后台始终只有一条资源记录和一个物理对象。
  • 在 COS 已接收上传后中断浏览器响应,再恢复网络触发自动同步,确认返回原资源 ID,用户存储用量不增加。
  • 使用两个标签页并发提交相同 X-Idempotency-Key,确认一个请求完成上传,另一个复用结果或返回可重试冲突,不生成第二个对象路径。

短剧分镜工作流工作台

短剧工作流已按镜头生产重构为单层项目工作台,并将资产绑定、镜头编辑、生成预览和整集镜头轨道放入同一视口;以下场景仍需用户在真实项目数据与模型渠道下确认:

  • 工作流路由保留系统全局侧栏和顶栏;项目头部压缩为单行,移除额外六阶段横条,项目导航入口改为“分镜制作”。
  • 项目详情 API 对旧后端可能缺失的工作流、镜头版本、产物、引用、候选资产和文件夹数组统一规范为空数组;使用缺失这些字段的响应完成浏览器复现,页面正常加载且控制台无错误。
  • 未初始化章节不再显示阻断式居中空态;镜头编辑器可直接查看和保存,首次真实生成时按当前章节自动建立工作流记录。
  • 分镜脚本、黑白动作预演、视频生成共用资产栏、镜头表单、预览/历史栏和底部镜头轨道;前端生产构建通过。
  • 模型、时长、画幅、分辨率和镜头语言合并为默认折叠的“生成设置”,模型提示词与接戏信息合并为默认折叠的“生成补充”;折叠摘要会显示当前关键参数,浏览器展开/收起验证通过。
  • 删除项目头部重复且发生重叠的“新增分镜”入口,只保留底部镜头轨道中的新增卡片;1280px 与 1680px 浏览器检查无横向溢出,系统全局侧栏保持可见。
  • 右侧产物阶段从标题旁的隐藏下拉框改为常驻三段切换,分镜图、动作预演和镜头视频始终可见;1280px 与 1680px 下切换路由、阶段文案、最新/历史状态和全局侧栏浏览器验证通过。
  • 底部镜头卡片取消悬浮上移和向外扩张的选中阴影,改为不改变坐标与尺寸的底色、边框和内描边反馈;右侧移除“复制参数”“入素材库”,仅保留并排的重新生成与下载,1280px 浏览器悬浮和布局验证通过。
  • 镜头编辑器改为脚本优先顺序:镜头名称与画面、镜头资产、表演与动作、对白/旁白优先展示,生成规格和模型补充保持折叠;字段统一为画幅、镜头时长、机位角度、运镜方式、排除内容和接戏备注等生产术语。
  • 编辑器标题实时反映镜头名称与“已保存/有未保存修改/保存中”状态;无修改时禁止重复保存,切换或新增镜头前会拦截未保存修改。浏览器交互验证通过。
  • 镜头保存使用真实版本写接口;资产点击绑定具体版本;生成统一进入后端任务生命周期,成功后登记对应镜头产物;下载使用带登录凭据的资源接口。
  • “生成设置”新增技能库多选,分镜图、动作预演和镜头视频统一通过 Skill Runtime 解析,任务与镜头产物记录技能版本和实际引用文件。
  • 镜头资产支持再次点击或从已绑定标签取消引用;解绑使用归属校验的独立写接口,并使该镜头旧产物失效。动态提示词复用画布 @ 引用编辑器,已绑定图片和角色会按实际参考图顺序解析后提交;后端全量测试、前端专项测试和生产构建通过。
  • 镜头生成资产解析改为同时保留绑定版本视觉快照与当前角色卡声音配置;角色主图、场景图和声音样本按 图片N / 音频N 写入 【资产参考】,并自动补充声音画像与镜头台词。历史角色版本 + 新版声音绑定的后端/前端专项回归通过。
  • 镜头编辑器底部在“保存脚本”左侧新增“删除镜头”;二次确认后原子清理该镜头的脚本版本、资产引用、生成产物、候选资产和生产任务关联,压紧剩余镜头顺序并自动切换到相邻镜头。
  • 使用包含角色、场景、道具和画风的真实项目,确认左侧分类、绑定状态、参考素材标签和镜头切换保持一致。
  • 分别删除首个、中间、末尾和唯一镜头,确认二次提示、相邻镜头切换、空态、镜头编号、总镜数以及刷新后的数据一致;有未保存修改时确认提示明确且取消不会丢失内容。
  • 在同一镜头绑定角色和场景后输入 @,确认菜单、行内缩略图和生成请求中的“图片 N”顺序一致;分别从左侧资产行和已绑定标签取消引用,确认刷新后状态一致,旧 token 会阻止生成并提示重新选择或删除引用。
  • 使用“分镜绑定角色旧版本、角色卡随后绑定声音”的真实项目生成镜头视频,确认请求包含旧版角色主图、场景图、当前声音样本、声音画像和镜头台词,且媒体角色为参考资产而非首帧。
  • 配置一个图片模型和一个视频模型,分别生成分镜预览、动作预演与视频,确认任务中心、镜头历史、最新预览和阶段状态同步更新。
  • 在浅色/深色主题及 1280px、1050px、760px 三个断点检查项目导航、表单滚动、右侧预览和底部镜头轨道,确认没有遮挡或不可达控件。
  • 验证下载视频、复制生成参数、将任务物化产物加入项目素材库、章节切换与新增分镜;确认失败任务展示真实错误且不会伪造产物成功。

章节分镜生成到分镜制作

剧情章节的分镜入口已从“在画布中分镜”纠正为“生成到分镜制作”;生成结果直接写入镜头脚本,并在本章已有分镜时执行显式替换确认。以下场景仍需使用真实项目与已安装技能确认:

  • 章节正文、项目画风、当前角色版本和项目资产统一进入 agent_storyboard_rows 任务;分镜生成继续经过 Skill Runtime 的 shortDrama profile,并记录实际技能版本和引用文件。
  • 本章待确认角色也会进入分镜上下文;模型在 characterIds 中返回角色名称时,已确认角色自动映射到真实资产版本,待确认或未知角色降级为仅名称引用,不再触发结构修复请求或报废整份分镜。后端专项测试、前端映射测试与生产构建通过。
  • 分镜任务结果映射到镜头画面、动作、对白、景别、机位、运镜、图片/动态提示词与接戏备注;模型返回的项目资产关联随镜头在同一替换事务中保存。
  • 本章无分镜时直接写入“分镜制作”并跳转到分镜图阶段;已有分镜时展示镜头、脚本版本、资产引用、生成产物和候选资产影响数量,生成失败不修改旧数据。
  • 技能多选框占满弹窗内容宽度;专项测试、TypeScript 检查、后端服务测试和前端生产构建通过。
  • 选择 1 至 4 个已安装技能生成真实章节,确认任务中心中的技能版本、文件来源和生成结果一致,完成后进入对应章节的“分镜制作 / 分镜图”。
  • 使用已提取但尚未确认资产的“张振天、张天昊”重新生成真实章节,确认镜头正常落库、提示词保留角色名称;确认角色资产后再次生成,确认同名角色自动带上真实资产与版本 ID。
  • 对已有镜头、历史脚本、资产引用和生成产物的章节重新生成,分别验证取消替换、模型生成失败和确认替换:前两者保留旧数据,确认替换后旧关联被移除且新资产引用可用。
  • 在 560px 及更窄视口打开设置弹窗和技能下拉框,确认选择器、选项面板、长技能名称和替换警告没有横向溢出。

短剧项目导航与制作概览

项目设置、章节导航、制作概览、镜头轨道和画布新增入口已按长篇短剧工作流重构;以下场景仍需使用登录态真实项目确认:

  • 项目新增 cover_resource_id,服务端校验资源归属、就绪状态和图片类型;项目主图被资源删除流程识别为直接引用。章节新增持久化 word_count,新建、导入、更新和旧数据迁移均维护字数摘要;后端全量测试通过。
  • 项目设置可从个人图片素材、项目图片素材或实时上传中设置主图;项目列表优先显示主图,未设置时回退画风示意图。分镜制作头部改为上一章、搜索定位、下一章的虚拟章节导航;前端生产构建通过。
  • 修复项目更新仓储遗漏 cover_resource_id,避免接口返回“主图已更新”但数据库字段仍为空;回归测试同时校验设置与移除主图后的数据库重读结果,后端全量测试通过。
  • 剧情章节列表去除装饰性侧边表达并显示状态、字数、画布数;制作概览新增六阶段标准流程、当前指标、制作缺口和可点击快速入口;底部镜头卡增加画面、加粗时长、镜头参数、产物版本与绿色成功状态。
  • 画布空白区域双击改为直接打开已有新增节点面板,并保留双击位置作为节点落点;原“适配内容”能力继续由缩放控制区提供。
  • 项目分镜视频页完成首屏请求治理:项目详情与七个子视图按路由加载,命令面板、更新日志、公告正文和画布创建运行时改为交互后加载,视频预览点击后才取流;真实登录项目生产构建实测首屏 75 个请求(59 个静态资源、13 个 API、3 个其他),首屏不请求 MP4,Console 无错误。
  • 在项目设置分别从个人素材、项目素材和上传图片设置主图,刷新项目列表后确认图片一致;替换、移除主图后确认回退逻辑正确,尝试删除当前主图资源时确认显示项目引用来源。
  • 使用 2500 章项目搜索章节序号和标题,确认定位弹窗桌面端为 5 列、默认每页 100 章,搜索区与分页区保持同一表面;连续切换上一章、下一章并刷新页面,确认当前位置、总章数、字数和路由一致。
  • 在制作概览点击剧情、资产、分镜、预演、视频、交付和三个快速入口,确认跳转到正确章节及阶段,真实镜头产物数量与完成状态一致。
  • 在浅色、深色主题和 1280px、1680px 宽度检查镜头卡,确认时长明显、标题与镜头参数不溢出、“已生成”为绿色且选中态仍使用工作台强调色。
  • 在画布不同缩放和平移位置双击空白处,确认新增节点面板直接打开,选择文本、图片、视频和扩展节点后落点接近双击位置;双击节点、弹窗和其他浮层不应触发新增。

工作台首页创作仪表盘改造

参考模板 Dashboard 将 /home 首页重构为创作仪表盘(欢迎区 + 统计卡 + 活跃度/素材图表 + 最近项目表格),以下场景仍需要浏览器确认:

  • web 前端 TypeScript 检查通过;旧首页样式类已随页面重写移除。
  • 登录用户确认欢迎区显示用户名、主操作跳转 /projects?create=1、打开画布按钮在未登录时引导登录。
  • 确认统计卡数值与项目/画布/素材/任务页面一致:进行中项目、自由画布、素材资产、本周任务。
  • 确认创作活跃度图表随 7/14/30 天切换刷新,生成任务与画布更新两个系列与任务中心/画布列表一致。
  • 确认素材构成环形图按类型统计正确,无素材时显示空态文案。
  • 确认最近项目表格的搜索、状态筛选、排序与分页行为,行点击进入项目概览;无项目时显示创建入口。
  • 确认快捷创建与工作流面板入口可用,工作流提示显示最近项目阶段与章节完成度。
  • 验证浅色/深色主题与窄窗口(表格横向滚动、统计卡换行)下可读可操作。

编辑器 Concat 风格打磨第 36 条(5 项 UI)

已实施完成,需要浏览器最终确认:

  • 前端 TypeScript 检查通过;web/test/timeline-view.test.ts 3 个守护测试通过;git 工作区干净。
  • 时间线面板与监视器的分隔条拖拽方向:向上拖拽时间线面板应变大(已反转,拖拽中无反向)。
  • 顶部工具栏图标(含导出)与时间线轨道徽标、片段未选中态不再使用蓝色填充,风格与 img-10 参考统一;片段选中态仍以 accent 蓝标识。
  • 时间线最后一个片段可向左、向右双向拖拽,右侧不再固定不动;拖动过程中时间刻度不漂移(pxPerMs 仅由缩放决定)。
  • 监视器底部控制条为 Concat img-14 风格:SkipBack/StepBack/Play/StepForward/SkipForward 五键 + 变速菜单(0.5x–2x)+ 进度条行与时间码;图标在恒黑监视器上为白色,无蓝色。
  • 右侧检查器为 Concat img-15 风格:属性行水平排列(标签左、控件右)、Section 分组标题、输入框 h-7 rounded-[7px]、凹嵌式滑块;浅色/深色主题下均无主题不同步。

媒体导入失败根治(分片上传 + OSS 降级修复)

已实施,代码/单测/编译验证通过,需要浏览器最终确认:

  • 后端 go build/go vet 通过;resource_test.go 新增 OSS body close 回归测试通过;handler/service 包测试通过。
  • 重新导入 >50MB 视频(如 92MB 样例),确认前端分片上传(POST /uploads → PUT chunks → POST complete)全程无 400,且进度条显示百分比。
  • OSS 配置密钥仍不匹配(历史 403 SignatureDoesNotMatch)时,确认上传自动降级写入本地存储(provider=local)并导入成功,不再报"导入失败"。
  • 在用户设置里修正阿里云 OSS AccessKeySecret(当前配置的密钥从未验证通过,8/16 起所有 OSS 上传均 403)后,确认资源改回写入 OSS。
  • 确认配额默认值已放宽(日 2048MB、总量 20GB,仅当无 runtime_policy 记录时生效);超过日配额时前端提示为中文而非裸 400。

上传媒体监视器播放(H.265 播放副本 + 真实播放驱动 + 时长链路)

阶段 C 根治:本地 H.265 原件服务端转 H.264 播放副本(provider=local 专属,无 ffmpeg 则保持原样), 监视器 <video> 真实播放驱动(不再纯时间码),时间线 transport 与监视器共享,上传携带真实时长。 代码/单测/编译验证通过(后端 go build/vet/test、前端 tsc 全绿),需浏览器最终确认:

  • 拖入上传的 H.265 视频(92MB 样例,资源 rowid 54/55)到时间线,点播放:画面真实播放、有声音(不再黑屏/静音);首次 onError 后出现"正在生成兼容版本"提示并轮询,转码完成后自动切 H.264 副本继续播放。
  • 监视器播放时时间线播放头同步推进;拖动时间线播放头(scrub)监视器画面即时跳转;暂停/继续/变速(0.5x–2x)后时间线与监视器仍一致。
  • 轨道静音开关生效:视频所在轨道 muted 时监视器无声,取消静音恢复声音;轨道隐藏(可见性关闭)的片段不再参与预览。
  • 拖入时长 >5s 的视频片段,其时间线长度等于视频真实时长(不再固定 5s 截断);时长探测上传的新素材在资源卡片/片段均显示真实时长。
  • 播放副本就绪前(processing)视频黑屏时出现"正在生成兼容版本(H.264)…"浮层 + "下载原片用本地播放器观看"链接;生成失败显示失败文案而非一直转圈。
  • 时间线 scrub/播放/变速往返 10 次以上无卡死、无播放头回跳、无 setState-after-unmount 报错(Console 无告警)。

MPEG-4 Part 2 播放死循环 + 画布产物素材同步(待浏览器验收)

已实施,代码/单测/编译验证通过(后端 go vet/test、前端 tsc 全绿),需浏览器最终确认:

  • 导入 MPEG-4 Part 2(mp4v)视频(如 07ee…mp4 sprite/header damaged 样例)后拖入时间线:不再出现"正在生成兼容版本"提示闪烁死循环;损坏文件转码失败后显示终止性文案(不再反复回退重试);正常 mp4v 文件自动生成 H.264 副本并可播放。
  • 存量回归(backend 重启生效):重启后端后,旧规则遗留的 none 存量视频被自动重判——H.264 保持可播;损坏 mp4v(如 c326/07ee…)自动尝试转码并以失败终态呈现终止性文案,不再直接抛"视频编码此浏览器暂不支持"。
  • 打开剪辑器进入已含画布产物(selected+ready 的 storyboard/action_board/分镜/导出成片)的项目:素材自动并入"项目素材"组展示(不再单列"画布素材"分组/页签/来源徽章),再次进入/刷新不产生重复素材。
  • 项目素材库页与剪辑器素材面板对本轮新同步的画布素材均可见;下载/删除画布素材不影响对应画布产物资源。

管理后台用户彻底删除(硬删,2026-09-06)

已实施,后端 go build/vet/test 与前端改动文件 tsc 通过,需浏览器最终确认:

  • /admin/users 操作列出现「删除用户」(垃圾桶图标、红色、二次确认);当前登录管理员(自己)行内该按钮置灰不可点。
  • 删除 cdptest(disabled、无任务/项目/素材、仅 1 条赠送积分流水,本地库唯一无内容用户):确认弹窗点「彻底删除」后行从列表移除、总数减一、若打开着详情抽屉则自动关闭;列表搜索/筛选后不再出现该用户。
  • 对 yorkchiu(有任务/项目/素材等业务内容)点删除:提示「该用户仍有任务/项目/素材等业务数据,无法彻底删除,请先清理相关内容或改用停用」,用户未被删除。
  • 对存在 billing_orders/payment_orders 的用户(生产真实付款场景)点删除:提示「该用户存在资金流水/账单数据,无法彻底删除,请改用停用」。
  • 删除后审计事件落库(audit-events 页签可见 user.purge);DB 中 users 行及 auth_sessions/user_identities 等关联行已物理清除。
  • 既有「停用/重新启用」语义未受影响:停用入口仍走 DELETE /admin/users/:id(保留用户主体),重新启用可用。

画布默认框选与移动期性能优化

  • 默认工具改为“区域选择”;空白处左键拖动框选,抓手工具拖动平移。Space + 左键、中键和触控板双指手势保留为导航路径;专项测试、类型检查和生产构建通过。
  • 框选移动期只通过 Leafer 选区与 DOM 差量标记预览命中节点,不再逐帧提交 React selectedNodeIds;抬手使用最终指针坐标计算并只提交一次。
  • 可选节点空间索引按不可变节点数组引用缓存;折叠画框子节点和未展开批次子节点继续排除。50k 节点空间索引回归测试通过。
  • 登录态真实项目浏览器确认:默认区域选择为激活状态,左键框选不移动视口;抓手工具可平移;区域选择激活时滚动手势继续平移画布。
  • 使用真实 MacBook 触控板复测双指横向/纵向滑动、捏合缩放及 Space + 左键临时抓手,并在 500、2000、5000 个可见节点画布记录连续框选帧率和输入延迟。

BoardUI 吸收落地:AI 助手工作态/发送态动效(2026-09-06)

已实施,改动文件 tsc 零错误 + Vite dev 模块编译 200,需浏览器视觉验收:

  • 打开画布 AI 助手面板(本地 Agent / 云端助手)触发生成:顶部状态区显示 3×3 对角波光点阵指示器 + 阶段文案 + 秒数计时(替代原打字机“正在推演…”);点阵节奏流畅不刺眼,与画布主题明暗模式均协调。
  • 发送消息后输入胶囊出现主题色呼吸光环(1.6s 周期透明/亮起循环),回复到达后消失;光环不遮挡输入与按钮点击(pointer-events 透传)。
  • 系统开启“减弱动态效果(prefers-reduced-motion)”时:点阵静止为静态帧、无计时闪烁感、胶囊无光环;无 console 报错。
  • 快速连续发送/取消多次无 setState-after-unmount、无定时器泄漏(Console 无告警);长时间等待秒数计时平滑(tabular-nums 不跳动)。
  • 后台运营健康卡(/admin 分析页)活跃用户/生成任务/服务质量三卡数值刷新时平滑滚动;系统减弱动效时直接跳变不滚动。

首页创作入口收敛:单会话承载分镜(2026-09-06)

决策:删除顶部「连续对话 / 镜头创作」双模式切换与独立分镜工作台;单一对话消息流承载一切创作,视频消息自动按发送顺序编号为镜头(镜头轨道),右上角「镜头时间线」抽屉按镜跳转回看。已实施(tsc 零错误 + Vite 模块编译 200,CSS 死样式已清理),需浏览器验收:

  • 顶栏不再出现「连续对话/镜头创作」切换;只有一个对话入口(新建/历史按钮保留在右侧)。
  • 空会话(无历史)时提示「发送一条视频消息自动成为第 1 镜」,入口自然无模式概念。
  • 连续发送两条视频消息:用户消息依次带「镜 1」「镜 2」徽标;同 mode 的视频生成结果也带对应镜号徽标,且镜头顺序与发送顺序一致。
  • 视频生成中(pending)消息流显示进行中提示;完成后显示视频 + 镜号徽标 +「生成同款」按钮,失败可重试。
  • 点击顶栏「镜头时间线」:下拉列出全部镜头(镜号 + 用户提示 + 完成/生成中/失败/待生成状态),点击任意镜头平滑滚动到该消息锚点;空轨道显示引导文案。
  • 下拉点击镜头后自动关闭;点击外部区域可关闭下拉。
  • 时间线列表镜头状态随消息流刷新(生成中→完成)实时更新;生成失败的镜头状态为「生成失败」红色标记。
  • 新建/历史/重试/生成同款在收敛后行为与原来一致;无 console 报错;切主题/切窗口尺寸(窄屏 rail 下拉不溢出)正常。

(注:上一版「分镜模式计划路线胶囊 + 活动行」验收项已随分镜独立工作台删除而移除——收敛后视频等待提示由消息流内进行中文案承担。)

创作页通知中心(2026-09-06,已于当日移除——见文末「移除页面级任务通知按钮」)

决策:铃铛入口 + 通知面板,从当前 CreationConversation.messages 状态迁移推导任务完成/失败通知(无新后端、无新类型);空态顶部与多轮会话工具栏两处均可进入同一面板;未读计数徽标 + 全部已读 + 点击通知定位到所属会话消息。已实施(tsc 零错误),需浏览器验收:

  • 空会话顶部与多轮会话右上角工具栏均有铃铛入口;存在未读时铃铛显示红色数字徽标,全部已读后徽标消失。
  • 发送文本/图片/视频任一生成任务,任务完成(或失败)后通知面板出现对应行(状态小点 + 生成类型/文案 + 时间),行序新→旧。
  • 生成进行中的任务不在面板出现“完成”行;失败任务行呈错误态文案与颜色。
  • 「全部已读」后所有行标记已读、铃铛计数清零;单行读状态随点击/已读动作变化。
  • 点击通知行:若该会话当前未打开则切换打开对应会话,并滚动定位到涉及的那条消息;面板随之关闭。
  • 通知来源跨会话:多个历史会话各自完成的任务都能汇总到同一面板;删除会话后其通知不再出现。
  • 无任何通知(从未生成过或全部已读且清空)时面板显示「暂无新通知」空态,无伪造行。
  • 面板开合、点击外部关闭、明暗主题切换均正常;无 console 报错。

首页图标撞车与布局统一(2026-09-06)

决策:顶栏全局公告中心保留 Bell(系统公告语义);创作页任务通知图标由 Bell 改为 ClipboardList(任务清单语义),消除同屏「双铃铛」;空态右上操作组中任务按钮与历史按钮统一为同一规格(36px、同底色、同 hover 抬起),多轮态工具栏内任务按钮与相邻工具栏按钮规格本就一致。已实施(tsc 零错误),需浏览器验收:

  • 首页(创作页)任意状态:右上区域不再出现两枚相同铃铛——顶栏公告为 Bell,页面任务通知为 ClipboardList(任务清单图标)。
  • 空态页右上仅一枚「历史」按钮:32px 幽灵透明底、hover 同底色、focus-visible 描边;任务通知入口已移除、无残留。
  • 多轮会话工具栏右侧为「新建/历史」按钮,形态一致(32px 透明、hover 同底色),与顶栏公告铃铛语义可区分。
  • 明暗主题切换后按钮组配色跟随语义 token 变化,无突兀色块。

hero 主卡去彩色外框 + 用户消息右侧气泡(2026-09-06,对齐 boardui)

决策:①空态 hero 主卡原以 accent34%/62% 混色外框强调,观感像多余描边线——改为中性 creation-border(hover border-strong + accent 柔阴影上浮),强调由右上光晕承担,消除「外框线」感;②消息区用户消息原与 AI 同为左侧无气泡长块,无对话主客节奏——改为右侧气泡列(整列 flex-end + margin-left auto、正文 fit-content 气泡 accent10% over surface、r-lg 圆角右下小角),meta/附件/引用随列右置,与左侧 AI 文本流对称。纯 CSS 改造,JSX 未动。tsc + bun run build 通过,需浏览器验收:

  • 空态页:hero 主卡外框为极淡中性细线(明暗主题各验),不再有明显彩色描边;hover 仅轻提 + 柔影,无生硬变色;右上光晕仍在。
  • 会话态发一条消息:用户正文呈右侧圆角气泡(右下小角),时间戳/复制钮/引用随气泡右对齐;AI 回复仍在左侧无气泡文本流,两侧形成对称对话节奏。
  • 长用户消息不破版:气泡 max-width 86% 内换行;附件/引用 chips 右置不溢出。
  • 明暗主题切换:气泡底色(accent 10% over surface)在两种主题下都清晰可辨、不过浓。

会话工具栏视觉统一重构(2026-09-06,幽灵按钮)

决策:创作页会话态工具栏与空态右上操作钮统一为一套「全透明幽灵按钮」规范——32px 高、透明底、muted 灰、hover 才显 surface-hover 底色、focus-visible accent 描边、图标与文字同用 caption 字号/space-4 尺寸;镜头计数胶囊仅在有镜头时显示(无镜头不再显示孤零零的 0),计数徽标为 accent 小胶囊(底色 14% mix、tabular-nums)。已实施(tsc 零错误),需浏览器验收:

  • 会话工具栏左侧「镜头时间线」按钮:无边框透明底、hover 出现浅灰底;有分镜时右侧显示 accent 色计数胶囊,无分镜时按钮后不再出现「0」胶囊。
  • 会话工具栏右侧新建/历史两按钮:同为 32px 透明幽灵、hover 同底色,间距均匀。
  • 空态右上「历史」与多轮态工具栏按钮视觉同源(同高、同圆角、同 hover、同 focus 描边)。
  • 空态与工具栏按钮 hover、focus 三态在明暗主题下均可辨识,图标不与文字基线错位。
  • 移动端窄屏时空态按钮组仍等大(40px 触摸目标)。

首页空态卡列与输入框对齐、图标瓦片统一(2026-09-06)

决策:空态「推荐区(hero 主卡 + 快捷卡)」由 920px 收窄为 820px,与艺术横幅、输入框两端完全对齐;卡内图标瓦片从 36px/r-sm/纯文字色改为与输入框「参考」按钮同源规格——34px、r-md 圆角、creation-border 边框 + surface-muted 浅底 + muted 图标色、icon 16px/2px 描边,hover 卡片时瓦片亮起,暗色主题有独立适配;输入框参考按钮圆角 9px 同步 token 化为 var(--r-md)。已实施(tsc 零错误),需浏览器验收:

  • 空态页艺术横幅、输入框、「推荐卡」左右边缘完全对齐(同一中轴 820px 列),不再出现卡宽于输入框的情况。
  • hero 主卡图标瓦片与下方三张快捷卡瓦片大小一致(34px/icon16px)、配色一致(同边框同浅底同 muted 灰),与输入框内「参考」按钮视觉同源。
  • 悬停任意卡片时瓦片边框/底色/图标色同步亮起;明暗主题切换后瓦片与卡列配色正常(暗色有 rgba 适配不刺眼)。
  • 主卡与小卡靠主卡 accent 边框与文案层级区分主次,不再靠瓦片尺寸/颜色差异。
  • 窄屏(<860px)下推荐卡与输入框同步退化为单列自适应,两端仍对齐。

移除页面级任务通知按钮(2026-09-06)

决策:创作页右上「任务通知」按钮(ClipboardList + 未读徽标 + 通知面板)整体移除——任务成败已由会话流内联状态与镜头时间线承担,跨会话查看由「历史对话」抽屉承担,页面级入口冗余。删除范围:CreationNotificationBell 组件、通知推导状态与扫描逻辑、creation-bell-* 全部样式、空态与工具栏两处挂载;顶栏系统公告铃铛(全局)保留。已实施(tsc 零错误),需浏览器验收:

  • 空态页右上仅剩「历史」一枚按钮;多轮会话工具栏右侧仅「新建」「历史」;无 ClipboardList 残留图标。
  • 无任务通知相关 console 报错;生成任务成败仍以消息流内联状态与镜头时间线呈现。
  • 顶栏系统公告铃铛(红点)不受影响,与页面级入口不再混淆。

历史对话抽屉:行操作菜单 v2 + 行内重命名 + 时间让位(2026-09-06)

v2(用户反馈首版难看后重做):菜单改用 antd Dropdown(placement=bottomRight 自动翻转防溢出、全局 token 化浮层明暗自适应),菜单项纯文字无图标(重命名 / 删除对话[红]),对齐 boardui agent-chat-history 的「纯文字菜单项」形态;行尾时间改为共槽让位:普通态仅显示相对时间(刚刚/n 分钟前/n 小时前/n 天前,>7 天回退「M月D日」),hover/键盘聚焦时时间淡出、同一位置浮现 26px「⋯」按钮(永不共显);模式标签下沉到摘要行前缀(chip→文字微标签);选中态 = 行底色 9% + hover 升 14%(对齐 boardui hover 即预览选中);删除仍走确认弹窗;行内重命名改为无边框透明输入(hover 底色容器),自动聚焦全选、Enter 提交 / Esc 还原 / blur 提交、空标题不提交、120 字上限并持久化。旧版自制浮层 CSS 全部清除。样式全 token 化 + color-mix 明暗自适应 + prefers-reduced-motion 降级 + 触屏常显「⋯」。tsc 零错误,需浏览器验收:

  • 打开历史抽屉:普通态行尾只显示相对时间(简洁);hover 行时时间淡出、「⋯」浮现(26px);键盘 Tab 聚焦「⋯」按钮直接可见;触屏设备「⋯」常显。
  • 点击「⋯」:antd 浮层下拉含「重命名」「删除对话」(删除红字),明暗主题下浮层背景/圆角/阴影与全局一致;点击外部或按 Esc 关闭;底部行开菜单浮层自动向上翻转不溢出抽屉。
  • 行内重命名:标题变透明输入框(自动聚焦全选);Enter 提交生效并持久化(刷新仍为新标题)、Esc 还原、点击别处 blur 提交;空标题不提交。
  • 删除走确认弹窗,确认后该行消失;重命名/删除后排序与分组不变;选中行底色可辨。
  • 明暗主题均无图标错位/文字重叠;无 console 报错。

AI 消息代码块外壳 B1(2026-09-06)

自研代码块渲染组件 AiMessageCodeBlock(components/ai/ai-message-code-block.tsx,替换 streamdown components.pre 映射,全站消息统一受益):顶部 34px 工具条 = 左侧语言标签(取自 language-*,未知显示 code,小号大写等宽)+ 右侧复制按钮(复制成功反馈「已复制」1.6s);正文滚动容器保留;圆角/边框/底色走 token + color-mix 明暗自适应(容器 r-md、5% 前景底、11% 边框),pre 内透明继承;prefers-reduced-motion 关闭过渡。语法高亮暂缓(调研发现 streamdown@2.5.0 运行时不消费 @streamdown/code 插件,方案待定)。tsc 零错误,需浏览器验收:

  • 让 AI 回复含多行代码(如 markdown 围栏 ts):代码块顶部有语言标签 + 复制按钮,点复制后变「已复制」,粘贴内容正确(不含语言标记行)。
  • 代码块圆角/边框/底色在明暗主题均可辨;长代码横向滚动不破版;流式输出中代码块容器稳定不跳动、复制按钮可用。
  • 消息中的行内代码(如 const x)样式不受影响;画布 Agent 消息里的代码块同样获得新外壳。

微昕·砚品牌首页

  • 新增 /welcome 独立公开首页、六幕电影卷轴、工作台截图切换和创作入口,保留既有工作台路由。
  • 用户已确认品牌名微昕·砚,保留 Spring(默认)、Charge、Wing It! 三个素材版本;没有竹影选项或专用素材。
  • 首屏影像背景随滚动渐隐为黑底,返回顶部时恢复;故事章节保留九张电影画面和三张叠字镜头。
  • 来源、作者署名、CC BY 4.0 许可和改编说明见 /welcome/credits.html,不将第三方电影素材宣称为微昕·砚生成案例。
  • 设计与实现说明:微昕·砚品牌首页。
  • 上游基线独立分支的完整前端构建(指定 Go 1.25.0 工具链)、素材与启动清理专项测试通过;生产预览通过 1440px、390px 三版本切换、六幕滚动、非空画布与动画、Charge 视频、历史返回、减少动态效果与署名页检查,无页面异常、资源 HTTP 错误或后端 API 请求。
  • iOS Safari 真机地址栏变化、长时间浏览帧率与设备发热。
  • Wing It! 部分低分辨率色彩分镜后续升级为高清成片镜头。
  • 是否将品牌首页设为根路径入口,由项目维护者另行决定。

画布生成重试与引用交互修复(2026-09-10)

已修复五处画布契约断点:在线节点重试的任务提交保留重试身份;比例型图片协议切换分辨率时同步实际质量档位;在线 Agent 多图只提交 resource:<id> 引用、不再嵌入 Data URL;绘图引用从项目本地绘图仓库恢复缩略图;已连接参考素材支持拖动及左右方向键排序,并同步更新 @图片N 等编号。专项测试与前端构建通过,需浏览器验收:

  • 对一个失败的图片、视频或音频节点点「重新生成」,任务中心出现新的排队/运行任务,节点最终随任务进入成功或明确失败状态,不长期停在「正在连接上游」。
  • 在比例型图片模型中直接点 4K 后立即生成,无需二次点击;摘要与实际请求均为 4K,切换 1K/2K 同理。
  • 在线 Agent 同时引用多张已上传图片时,请求可进入上游,不再出现 http: request body too large;尚未同步的本地图片会在提交前给出明确提示。
  • 多个绘图节点连接到生成节点后,参考栏显示各自最新缩略图;编辑并保存绘图后重新打开面板,缩略图随 revision 更新。
  • 用拖动手柄或聚焦后按左右方向键调整参考顺序,标签编号和提示词中的 @图片N 同步更新;刷新画布后顺序保持,配置节点承接引用时同样有效。
  • 明暗主题下拖动手柄、缩略图预览、删除按钮和横向滚动无错位;拖动引用不触发画布节点拖拽。

全景图工具与查看器增强(2026-09-10)

图片节点工具栏「全景图」先打开配置弹窗再创建节点:弹窗含素材管理(参考图多选/图生模式单选、素材选择器搜索)、提示词合成(内置等距柱状投影约束模板,可展开查看最终提示词并复制)、生成方式(AI 生成/图生全景)、投影方式(720° 球体/360° 环绕)、智能比例兜底说明;配置写入节点 metadata.panoramaConfig,参考图节点一并连线。全景查看器新增:顶部工具栏(全屏环视、截图当前视角、导出四向视图、重置视角、退出)、方向键旋转、three.js 按需加载 spinner、投影方式标签;截图走 preserveDrawingBuffer 同步重渲染,四宫格临时切方形画幅并带方向标注;全屏为 portal 覆盖层(滚轮调视场角),展开时节点体退回静态预览保证同一时刻只有一个 WebGL 上下文。截图经 addPanoramaCaptureNode 上传并在源节点右侧按列错开创建派生图片节点。tsc 零错误,需浏览器验收:

  • 图片节点工具栏点「全景图」:弹出配置弹窗,左侧可加/删参考图(图生模式仅单选),中间提示词与「查看最终提示词」联动,右侧模式切换与说明文案正确。
  • 确认后在源图右侧创建全景节点并连线,选中且弹出对话节点;图生模式无连线时节点直接显示 directImageUrl 源图。
  • 全景节点点「进入环视」:加载中出现 spinner;拖拽环视、方向键旋转、重置视角正常;节点内滚轮仍归画布缩放。
  • 工具栏「截图当前视角」与「导出四向视图」:源节点右侧出现派生图片节点(四向视图为 2×2 带方向标注),多次导出按列错开不重叠;导出后视角自动还原。
  • 「全屏环视」:覆盖层展开,滚轮缩放视场角生效;退出全屏回到节点内环视且视角保留;展开期间节点体显示静态预览。
  • 分享只读页(未提供导出动作)不显示截图/四宫格按钮,仅保留环视、重置与全屏;明暗主题与性能模式(仅预览)行为不变。

方舟可信素材失败重试与素材库方舟素材 ID(2026-09-11)

后端:方舟可信素材同步失败不再永久缓存——素材组未建成(素材组 ID 与素材 ID 均为空)的失败 binding 下次同步直接重试,素材组已建、素材未建时仅重试创建素材阶段的失败;审核拒绝(ArkAssetID 非空)保持终态;重试复用已建素材组;控制面 HTTP 非 2xx 时透传方舟 ResponseMetadata.Error 的原始 Code/Message(如 SubscriptionRequired),不再统一误报为「模型服务鉴权失败」;管理页 Region 输入补充仅 cn-beijing 开放的说明。前端:素材库编辑弹窗新增「方舟素材 ID」与「人像认证」两个字段(卡片封面显示「人像认证」徽章、详情抽屉显示方舟素材 ID);方舟视频渠道(volcengine-ark-video 或 Ark Plan BaseURL)生成时,引用图片节点绑定的素材若已录入方舟素材 ID,任务参考图直接提交 asset://<ID> 跳过上传同步(后端任务与浏览器直连路径一致);任务重跑按存储引用还原时会回退到常规上传路径。后端 go test(排除 main 存量失败用例 TestUserAssetsBatchIsBoundedAndScoped 与 protocol 插件清单校验)与前端构建通过,需浏览器验收:

  • 管理页断开网络或把 Region 暂改为 cn-shanghai 后在画布上传方舟素材失败,恢复后再次上传直接发起新请求成功,无需清理数据库 binding 记录。
  • 套餐未开通等上游 403 场景,上传失败提示包含方舟原始错误码(如 SubscriptionRequired),不再是「模型服务鉴权失败」。
  • 素材库编辑图片素材:可填写 asset- 开头的方舟素材 ID、勾选人像认证,保存后刷新页面两字段仍在;卡片封面出现「人像认证」徽章,详情抽屉显示方舟素材 ID 标签;非法 ID(不以 asset- 开头)被表单拦截。
  • 画布图片节点绑定已录入方舟素材 ID 的素材后连接视频节点,用方舟渠道生成:任务参考图为 asset:// 引用、跳过「同步方舟可信素材」;非方舟渠道生成不受影响,仍走原参考图路径。

支付订单用户识别(待验收)

已通过支付页与 API 的 ESLint、15 项后台 UI 回归检查,以及后端身份响应隔离测试和相关包编译。全量前端类型检查仍在未修改的动画、Tooltip 和画布模块报错;数据库搜索专项测试因本机 CGO_ENABLED=0 无法执行。尚未进行浏览器视觉验收。

  • 核对名称、用户名和邮箱与用户管理一致;同名用户可通过用户名和邮箱区分。
  • 验收用户身份、订单号、渠道交易号和完整用户 ID 查询,与状态过滤、分页组合使用。
  • 验收用户详情、订单详情、订单号复制和用户不存在的历史订单;关闭侧栏保留列表状态。
  • 检查同步状态、关单确认、明暗主题、长文本和窄屏固定操作列。

视频生成显式 @文本 引用内联(2026-09-11)

修复普通模型视频渠道(非声明式工作流)丢弃显式 @文本N 引用内容的问题:buildComposerGenerationContext 此前受 promptOnly 门槛限制,提示词里的 @文本N 只被改写成「【文本N】」占位标记,文本节点真实内容不追加,导致发给上游的视频提示词只剩无意义占位符(如「任务要求提示词:【文本1】」)。现在显式 @文本 引用始终内联真实内容并在提示词末尾以「【文本N】\n正文」块追加;promptOnly 拦截自动上游连线文本的原有语义(提交 8f20240d)不变——未显式引用的连线文本在视频模式下仍不自动拼接,图片仍走结构化参考图通道。提示词超长时按既有校验明确报错,不静默截断。专项测试(canvas-node-generation-mentions.test.ts,新增 3 例)与前端全量测试通过(与 main 基线相比无新增失败),需浏览器验收:

  • 画布视频节点提示词同时 @图片1 和 @文本1(文本节点含多行正文)后用方舟或普通视频渠道生成:抓上游请求,text 为「原提示词 + 【文本1】标记 + 空行 + 【文本1】\n文本正文」,参考图仍为结构化 image_url(方舟素材绑定时为 asset:// 引用)。
  • 视频节点只连图片和文本节点、提示词不写任何 @ 引用时:text 仍只有输入框原文,连线文本不自动拼入(8f20240d 行为保持)。
  • 图片、文本、音频模式生成行为不变;显式 @文本 引用的图片节点重试同样内联文本内容。
  • 引用超长文本(超过模型提示词上限)时提交被拦截并提示具体字符数,不出现静默截断或直接丢弃。

全景图生成弹窗重设计(2026-09-11)

按设计系统重写 canvas-panorama-config-modal.tsx:由 1120px 双栏(左步骤表单 + 右侧栏)改为 680px 单栏表单结构,分区依次为生成方式(AntD Segmented)、参考图/源图缩略图行、场景描述(AntD TextArea)、全景类型(双选卡片)、高级选项(智能比例 Switch + 复制完整提示词);底部固定操作栏含状态提示、取消与主操作按钮,支持 ⌘↵。视觉遵循「默认无边、选中才有 stroke」:未选中项用 bg-foreground/5 表面、无描边,选中项用 accent 环线加浅色填充;选图器内选中缩略图为 2px accent 环 + 角标对勾。修复部分缩略图停留在骨架态的问题:缓存图可能在 onLoad 挂载前已完成,新增 ref 挂载时 complete && naturalWidth 补检。功能行为(提示词合成、单/多选约束、配置字段、事件)保持不变。前端 bun run build 通过,需浏览器验收:

  • 画布图片节点工具栏打开「全景图」弹窗:明暗主题下各分区层级清晰,仅选中项显示 accent 描边;生成方式 Segmented 切换后参考图标题、描述区、底部状态同步变化。
  • 有画布图片(含视频封面)时从画布添加/搜索/多选参考图,图生模式强制单选;缩略图加载后不再停留骨架态,失败图显示「加载失败」。
  • 确认生成与图片直出两条路径行为与旧版一致(配置字段、连线、提示词),⌘↵ 快捷提交可用;「复制完整提示词」内容正确。
  • 680px 弹窗在窄屏(<768px)无横向溢出,全景类型卡片换为单列;选图器覆盖层可独立关闭,不误关整个弹窗。

云端 Agent Skills 选择与 Token 预算(2026-09-13)

文本 Agent 已改为按所选文本模型能力计算上下文预算:渠道模型读取 contextWindowTokens / maxOutputTokens,逻辑模型按候选线路取安全交集,旧配置回退 128K / 16K;前端发送前检查与后端轮次预算使用同一语义。1M 模型可配置更大输入预算,运行 checkpoint 的 512KB 持久化上限保持独立。后端上下文压缩保留任务、生成、审批、计费、取消和回写事实,只移除可重新读取正文。

  • 后端按能力合同计算 Token 预算、输出预留和压缩阈值,移除生产路径固定 96KB/120KB/192KB 上下文窗口。
  • provider 文本任务从能力合同读取 maxOutputTokens;前端模型能力编辑器支持上下文窗口和最大输出配置。
  • 使用真实 1M 模型 tokenizer 做大上下文压力测试,并验证多线路路由、SSE 断线恢复和费用估算在生产等价环境的一致性。

Skills 选择器已扩大为固定高度面板,增加宽松留白、自定义多选状态、250ms 搜索防抖和服务端分页的滚动续载;Agent 输入恢复画布节点 @ 候选,/ 选择技能后保留可读技能名,不再显示内部 skill ID 或残留斜杠。Token 计费模型现可进入 Agent,账单会把预授权报价固化为最终扣费上限。前端生产构建、ESLint、29 项相关测试,以及后端 app/repository/database 测试通过,需浏览器和真实计费渠道验收:

  • 在明暗主题、窄窗口和低高度窗口打开 Skills,确认面板尺寸稳定、列表独立滚动、空态不缩高、选中态与焦点清晰。
  • 在“发现 Skills”连续滚动并搜索,确认每页只请求 20 条、无重复项或并发重复翻页,加入后可立即勾选。
  • 输入 @ 选择任意画布节点,再输入 / 选择技能,确认编辑器显示节点引用和不带 / 的 Skill 标签,提交请求同时携带正确节点上下文与 skillId。
  • 使用 Token 计费文本模型运行 Agent,确认不再报“仅支持按次定价”,实际 usage 超过预授权估值时最终扣费不超过本轮报价和总预算。

云端 Agent 已完成轮次事件流恢复(2026-09-13)

成功任务会按存储配额策略压缩 tasks.input_json,旧读取逻辑却依赖其中的 cloudAgent 字段校验运行,导致完成后的 /api/agent/runs/:id/events、查询及续聊返回 404。现从同一用户的持久化 cloud_agent_executions.state_json 恢复并校验运行身份;新轮次持久化幂等指纹与历史,旧轮次可读取和续聊(旧记录缺少指纹时不接受复用幂等键)。后端专项测试覆盖压缩后的查询、隔离、幂等与续聊。需更新后端进程并验收:

  • 对已完成的 Agent 轮次重新打开会话,GET /api/agent/runs/:id 和 GET /api/agent/runs/:id/events 不再返回 404,事件流正常结束。
  • 在该轮次后继续发送消息,可接续原对话且不重复创建画布任务;跨账号读取仍被拒绝。

云端 Agent Skill 引用展示修复(2026-09-13)

/ 仅作为 Skill 选择命令,不再渲染到编辑器 Skill 标签;发送后的用户消息将 @[skill:<id>] 映射为图标 + Skill 名称标签,历史标题也不会暴露内部 Skill ID。请求体仍保留稳定 token,供后端按 skillId 固定版本。需浏览器验收:

  • 输入 / 选择 Skill,编辑器和发送后的消息均显示图标 + 名称,不显示 /、内部 ID 或乱码;刷新会话后显示保持一致。

云端 Agent 工具消息用户化(2026-09-13)

工具事件在聊天中改为结果摘要:skills_load 显示「已成功加载 N 个 Skills 技能」,画布读取、Skill 资料读取、画布更新和生成任务分别显示自然语言结果;隐藏内部工具名、蓝色扳手时间线、重复状态文案和 JSON 展开入口。处理中状态改为紧凑的脉冲提示。需浏览器验收:

  • 运行包含 Skill 和画布读取的 Agent,确认只显示用户可理解的成功摘要,不出现 skills_load、canvas_get_state、工具调用、工具执行成功 或 JSON 展开内容;工具列表间距紧凑且明暗主题可读。

云端 Agent 审批卡片与提交反馈(2026-09-13)

审批卡片改为无左侧竖杠的中性确认面板:根据待审批参数摘要展示新增/修改节点数量和标题,不展示内部工具名或正文;“同意执行”使用蓝色主按钮,拒绝理由默认收起。审批使用独立提交状态,不再被整轮消息的 busy 锁住;请求 15 秒超时后读取服务端决定以辨别成功或保留可重试状态,SSE 刷新不再覆盖输入中的拒绝理由。前端构建、摘要测试及后端压缩任务输入后的审批专项测试通过,需浏览器验收:

  • 在真实待审批轮次点击“同意执行”,按钮可立即响应,后端接受后卡片消失、画布修改发生;快速重复点击不重复执行。
  • 拒绝理由输入期间 SSE 刷新不清空文字;拒绝可提交;接口超时或失败时按钮恢复可点击并给出明确错误,不无限转圈。
  • 明暗主题及窄面板下卡片无左侧竖杠,蓝色按钮、节点摘要、焦点与禁用态可辨识。

云端 Agent 可靠性第一阶段收尾(待生产等价容量验收)

本轮补齐了 Agent 运行控制字段和后台收尾:取消 / 失败不再依赖大段运行 JSON 才能落库,cleanupPending 会由相同的 HTTP 与 Worker 收尾路径恢复;迁移 v14 会按 100 条批量回填旧运行,遇到损坏运行记录会中止并回滚,不静默遗留不可恢复任务。调度改为带游标的公平分页,避免前 50 条长期等待时后续就绪运行完全饥饿。

SSE 现在按 revision 变化发送紧凑快照,无变化只 heartbeat;客户端具备游标去重、确定性 4xx 立即停止、429 Retry-After、建连 / 心跳超时、抖动退避和有限失败预算。Agent admission 请求先保存原正文和幂等键,响应不确定时只重放同一请求;收费 provider create 不做盲目 HTTP 重试。聊天续聊会保留失败轮次的用户目标与真实工具事实,并把画布操作记录做成可聚焦节点的消息留痕。

已验证:后端 internal/app、internal/repository、internal/database、internal/handler 测试通过;前端 Agent 协议、pending 恢复与相关画布测试通过;前端 build 和 TypeScript 检查通过。新增测试使用临时 SQLite / mock fetch,不调用收费模型,不代表真实容量。

仍待:隔离 PostgreSQL + Redis + mock 上游的 50/100/500 活跃运行压测、多实例断线重连、worker kill/restart、DB/Redis 短暂不可用、接单后响应丢失,以及取消落库后账务 / 上游取消收尾窗口的端到端验收。当前默认 Agent worker 并发和渠道并发仍需按线上资源、模型额度和连接池共同压测,不能据本轮单测承诺 500 用户可接受的 p95 或队列时延。

迁移 v14 发布前备份数据库并先在副本演练;新程序写入的 pending 控制字段不保证旧程序理解,回滚旧程序前必须确认没有待收尾运行。若迁移因损坏运行中止,应先导出并核对该运行及关联任务,再修复或人工处理,禁止跳过校验强行上线。

云端 Agent 审批拒绝与节点能力路由(2026-09-15)

已实施,需真实环境验收:

  • 审批拒绝改为独立终态 rejected,不再把用户决定包装为 tool_failed,也不会继续推进模型调用、画布写入、收费生成或扣费;前端展示“已拒绝”并保留可继续对话的上下文。
  • 新轮次首个 system prompt 直接注入由服务端 Capability Registry 生成的节点能力速查,说明轻量节点、媒体节点与分镜脚本的适用场景、限制和维护取舍;模型自主决策,不强制调用能力查询或分镜工具。
  • 审批预览支持创建/修改分镜脚本的操作标签;后端能力校验仍是最终约束。
  • 真实待审批轮次点击“拒绝”,确认只出现一次“已拒绝本次操作,未写入画布”,没有“更新画布内容失败”或随后“执行失败”,SSE 在 rejected 终态正常关闭。
  • 真实多镜头请求确认 Agent 能基于能力速查选择结构化分镜;单画面快速试验不应被强制创建分镜脚本。

用户端侧栏与创作首页对齐参考图(2026-09-15)

根据用户提供的本地用户端截图与小云雀参考截图,继续收敛用户端壳层:侧栏宽度调整为 300px,核心导航、资源工具、创作历史分组重新编排;管理员后台、设置和退出登录收进用户资料菜单,保留原有路由与退出写操作;侧栏底部增加真实用户头像/名称、系统公告入口;顶栏增加真实积分超市余额入口。首页 Composer、模式切换、快捷能力卡片和页面最大宽度沿用前一轮结构。前端 typecheck、ESLint 和 build 已通过,仍需登录态浏览器验收:

  • 1440px/大屏下核对侧栏宽度、分组分隔线、选中态、积分余额、资料菜单和公告按钮的位置。
  • 打开用户资料菜单,确认管理员后台(管理员账号)、设置、退出登录仍可用;退出失败时不静默成功。
  • 390px 窄屏检查侧栏抽屉、资料菜单、顶栏积分入口和首页 Composer 无横向溢出。
  • 真实登录态检查 /、/tasks、/wallet 关键路由及登录过期跳转。

PR #547 本地选择性整合验收

以主分支 UI 为准移植功能,不整包合并 PR 页面。尚需真实浏览器和真实模型验收:

  • 左侧常驻主页、节点、资产、任务、历史菜单,已移除工具菜单,工作区面板默认折叠;菜单采用小字细线图标、加大纵向间距,展开/收起按钮置底。验证点击分类展开、再次点击收起、短窗口滚动、键盘焦点和明暗主题;与原有项目章节栏互斥,小屏抽屉、专注模式、历史版本预览无误,不能通过历史预览编辑当前画布。
  • 节点边框、主题和提示词面板原尺寸不变;图片节点直接展示风格 / 预设,移除提示词模板入口(包含放大编辑器和斜杠触发),其他节点模板入口保留;明暗主题、窄屏、浮层滚轮、键盘和点击外部关闭。
  • 风格选取/替换/清除、保存重载;节点风格优先于项目画风,清除后恢复继承。运镜可多个但不能重复;特效没有内置预设,可创建自定义工具。
  • 九宫格从已有图片创建独立子节点和引用连线,原图不变,不自动扣费或生成;用户明确点击生成后确认模型收到展开的提示词。
  • 节点内工具选取、收藏幂等、跨账号隔离、搜索分页、请求失败提示;自定义删除验证 API 权限。公开工具预览暂不接受私人上传资源;相对路径种子预览不显示,不在启动时下载。
  • 资产面板直接展示分类、名称/标签搜索、媒体类型、刷新及分页;使用现有素材服务与插入合同。验证文本、图片、视频、音频插入,entity/model 不应出现虚假的插入成功;管理素材 / 项目素材仍打开原有入口。
  • 任务列表明确展示最近 30 条,不是完整历史;进行中过滤普通生成任务,历史包含 Agent;刷新、取消、切换项目/账号后不串数据。
  • 工具被删除、停用、不可见、类型错误或标签损坏时,生成必须报错,不能静默忽略;排队后删除工具也应失败。
  • 使用备份的本地测试数据库验证 schema 29 → 31 和第二次启动幂等;PostgreSQL 序列、迁移工具实库验证待补。不要用生产数据库直接试。

自动检查不能替代以上真实页面/生成验收;本次不自动启动服务,不调用付费模型。左侧菜单补齐后尝试访问已有本地服务,内置浏览器停在登录页,未代填凭据,登录态视觉验收仍待进行。

本地自动验证记录:前端 8 个专项测试文件共 59 项通过,生产构建通过(仍有大分块提示);后端 tools、database、repository、迁移命令、handler 测试及工具权限、项目封面引用专项通过。初次后端全量测试未全绿:项目封面测试夹具缺少 tools 表,补齐后专项通过;资源删除 cancelled_output 用例出现 SQLite 锁表,单独复跑通过。修复后未重跑整套后端测试,不将其记录为全量通过。PostgreSQL 实库、真实浏览器和模型调用仍待验收。

侧栏补齐复测:前端生产构建通过,9 个专项文件共 63 项通过(含 4 项侧栏结构守护测试);源码守护不代表浏览器视觉验收通过。

侧栏配色对齐:左侧菜单直接复用画布工具条的 canvasDockStyle 和画布主题,统一背景、图标文字、悬停和选中态,保留默认折叠与纵向间距。侧栏与主题隔离专项共 10 项通过,生产构建通过(仍有大分块提示);明暗主题下与工具条的实际视觉一致性仍待登录态页面验收。

移除画布底部独立的「素材 + 数量」悬浮入口,保留左侧资产面板及原有缩放控件;待确认刷新后不再显示该按钮,左侧资产浏览与插入正常。

提示词模板清空回填修复:统一提示词写入器显式同步 generationSpec.prompt,避免旧合同覆盖清空或连续编辑后的草稿;已有媒体的原始生成提示词保持不变。新增回归测试先复现失败,修复后提示词、引用、生成引用及工具整合 4 个文件共 48 项通过,TypeScript 类型检查通过。待真实页面确认:图片节点选择模板 → 清空 → 点击画布取消聚焦 → 重新选择节点仍为空;再次修改及保存重载后内容正确。

入口精简与工具草稿复测:移除左侧工具菜单及图片节点提示词模板入口,保留图片风格 / 预设和其他节点模板入口。工具引用列表读取草稿改用空值判断,明确清空时不再从原始生成提示词回读旧标签。风格和预设的选择、替换、连续编辑、标签移除、全文清空及保存重载覆盖有图/空节点两种情况;5 个专项文件共 58 项通过,TypeScript 类型检查通过。实际页面仍需确认普通/放大编辑器均无图片提示词模板入口,以及风格和预设清空后重新聚焦不回填。

主分支提交前复测:前端 bun run test 全量 1925 项通过,生产构建、类型检查、UI 退场 lint 通过;构建仍有大分块提示。同步了技能/工具标签结构与多行连接菜单的源码守护断言。后端 go test ./... 全量通过,工具、迁移、资源引用、handler 及工具预览权限/项目封面专项通过。本轮未执行真实模型调用、PostgreSQL 实库迁移或登录态浏览器验收,这些项目继续保留待验收。

画布媒体交互与 Agent 循环止损复测(2026-09-23)

本轮针对画布媒体节点、生成任务状态及云端 Agent 重复读取问题完成实现和复测。代码仍未提交,以下结论基于当前工作区的专项测试与隔离本地浏览器环境,不代表已部署生产。

  • 第三方 API 已提交后,前后端均拒绝取消:任务存在 providerRequestId、取消状态、媒体阶段、未知运行阶段或已进入媒体保存阶段时不再显示取消按钮,也不接受取消请求。
  • 图片、视频、音频下载改为浏览器直接导航 OSS/CDN 签名地址;不再 fetch → Blob,平台只签发短时地址,不中转媒体正文。隔离浏览器下载的 Host 为 cn-nb1.rains3.com。
  • 生成节点初始状态统一显示“作品创作中”;“正在准备参考素材”和“正在连接上游”等技术阶段也统一映射为该文案。没有上游真实进度时不显示 0% 或素材准备假进度,只有上游返回真实进度才显示百分比。
  • 图片预览弹窗增加非纯黑加载占位、边框、虚线内框、Spinner、错误态和加载完成淡入;已用 2.5 秒图片响应延迟在浏览器中验证加载态可见。
  • 视频节点无持久化 poster 时主动从 OSS/CDN 视频取首帧;已验证首帧静态预览真实显示,视频资源请求返回 Range 206,持久化 poster 仍优先使用对象存储地址。
  • 视频播放器不再因未知音轨默认静音;已验证视频解码音频字节持续增加,muted=false,播放期间 paused=false,音量滑块可操作并从 100% 调至 85%。
  • Agent 只读工具增加同参数缓存、同结果重复回放护栏、跨参数累计 32 次安全上限;识图按画布版本和资源限制重复调用,并受本轮总识图预算约束,超过上限直接结束本轮,避免继续消耗模型调用和 Token。附件事件序列已解析确认事故主要是只读工具循环(canvas_get_state 6 次、canvas_read_storyboard 2 次、agent_profile_read 4 次),不是单一图片识别失败。
  • Agent 媒体审批快照忽略节点位置和展示性变化;仅移动节点不会使已审批生成失效,提示词、资源、连接、锁定状态和任务状态等真实生成输入变化仍会使审批失效。

自动验证记录:

  • 前端 bun run test:canvas:37 项通过;媒体与生成显示专项:36 项通过。
  • 前端 bun run typecheck、bun run lint、bun run build:通过;构建仍有既有大 chunk 提示。
  • 后端 Agent 读取、识图、审批、媒体依赖专项:通过;资源/OSS、取消、上游进度专项:通过。
  • 后端全量 go test ./...:未通过,阻断点为既有 TestPluginViewIncludesDocumentationForEveryOfficialProtocol 插件视图数量断言(实际 99,对断言期望 97),与本轮媒体和 Agent 修复无直接关系;因此不能记录为后端全量通过。

仍待真实环境验收:

  • 使用真实生产渠道重新执行 Agent 图片识别和“识别多张图片后命名节点”流程;本轮未再次调用付费生产模型。生产渠道仍建议将“最大参考图片数”设为 0,不需要识图的渠道不要暴露图片识别能力。
  • 使用真实 Agent 会话完成审批后仅移动节点、再提交生成的端到端验收;后端回归已覆盖该语义,真实模型会话尚未执行。
  • 对含音轨视频做人工听觉验收;当前隔离视频已由浏览器运行时确认音频解码和音量控制可用。
  • 修复或单独核对插件视图数量断言后,再执行后端全量测试;本轮不修改与媒体/Agent 无关的插件注册逻辑。

Pi Agent runtime 与存储边界预发布验证(2026-09-29)

  • 已实现:在线画布 Agent 切换到 Pi 原生会话 runtime;Go 保留权限、工具审批、模型桥和控制检查点,Pi JSONL 会话按运行 ID 持久化;画布能力工具、错误映射、技能渐进读取、运行时镜像依赖和存储运行策略已有回归覆盖。
  • 已修正验证门禁:旧的 2026-09-23 记录称 TestPluginViewIncludesDocumentationForEveryOfficialProtocol 固定期望 97、实际 99;当前断言已改为根据官方包和内置插件动态计算数量,该专项现已通过。不要把该历史记录当作当前未解决的失败。
  • 本地自动验证:后端 go test ./... -count=1 -timeout=15m 全量通过;PostgreSQL 资产迁移、资源字节修复及画布版本历史依赖用例通过。前端类型检查、退场 lint、全量测试(2096 项)和生产构建通过;文档站 bun run types:check 通过。
  • 本机没有 redis-server,因此 Redis 租约及缓存白名单两个真实 Redis 用例在全量本地运行中会跳过;质量工作流已安装 Redis、连接 PostgreSQL,并强制检查 5 个依赖型用例均真实执行并通过。需以 GitHub Actions 的结果作为合并/发布门禁。

仍待真实环境验收:

  • GitHub Actions 确认 PostgreSQL / Redis 依赖测试、前后端检查、支付插件双架构 smoke 和 amd64/arm64 镜像构建全部通过后再部署。
  • 部署后使用真实登录态验证 Agent 多轮会话、Skill 按需读取、工具审批/继续、进程重启后的会话恢复,以及用户/画布之间的会话隔离;不以健康检查替代该链路。
  • 在隔离数据库备份上验收 schema v42 的 cloud_agent_pi_sessions 迁移与回滚方案;不得在生产服务器手工改数据库或代码。

Agent 角色卡读取与图文参考待验收

画布角色卡仍为 text 节点,但角色设定由项目角色资产按当前版或固定版读取;Agent 的节点目录标注 kind: character,精读返回角色设定、形象/声音状态及图片参考就绪情况,不再把空 content 当作空角色卡。选择角色卡作为媒体参考时,后端从同一角色版本解析三视图图片,并把角色设定加入本次生成提示词;只选 sourceNodeId 则使用文字设定。审批期间角色版本变化会阻止旧输入提交。生成仍需用户确认或符合 auto 准入,不在读取时发起付费任务。

待登录态页面验收:对「扶颦」精读应返回实际外貌和服装;选择该卡生成时,审批/任务输入应同时包含该版设定与已绑定三视图;故意改动角色版本后旧审批不能提交。声音档案可精读,音频任务在未显式选择音色时采用角色绑定的 voiceKey 与声音指令;跨模型适配及真实音色效果仍需单独验收。此轮不代表生产已部署。

存储满额生成拦截与 Live2D 开关稳定性(2026-09-30)

  • 已修复:图片、视频、音频生成任务在创建、积分预留和上游调用之前检查账号文件容量;容量已满时返回配额错误并提示先清理素材,文本任务不受文件容量限制。普通画布与 Agent 媒体生成共用该 admission 边界。
  • 已修复:Agent 面板开合时保留 Live2D 入口组件和已加载模型,仅隐藏入口并暂停不可见渲染,不再因反复卸载、重建 PIXI/Live2D 上下文而短暂回退默认动态球。
  • 自动验证:后端纯 admission 专项测试通过(CGO 关闭,3 项);前端 Live2D 生命周期专项测试通过;前端生产构建通过。既有 Agent 位置测试在当前 Windows 环境因 Bun 将磁盘路径解析为 /E:/... 而未进入测试逻辑。

仍待真实环境验收:

  • 将测试账号文件容量填满后,从普通画布和 Agent 分别提交图片、视频、音频生成,确认立即显示容量提示、没有创建计费订单、没有调用上游;清理出容量后可恢复生成。
  • 使用自定义 Live2D 模型连续开合 Agent 面板,确认不出现默认动态球闪回,拖动、窗口缩放和重新进入画布仍正常。

后台存储资源用户筛选(2026-09-30)

  • 已修复:后台存储资源列表的用户筛选不再只接受完整用户 ID;现在支持按用户 ID、用户名、昵称和邮箱进行不区分大小写的模糊匹配,并可与资源类型、状态、存储位置、资源关键词组合使用。
  • API 新增可读性更高的 user 查询参数,后端继续兼容旧 userId 参数;前端请求同时发送两者,避免滚动升级期间旧后端忽略新参数并错误返回全量资源。
  • 自动验证:后台 UI 回归 17 项通过;前端生产构建通过;后端参数规范化专项通过。SQLite 集成用例已补充四种用户字段匹配,但当前 Windows 本机 CGO/GCC 无法解析生成的对象文件,未在本机实际执行该数据库用例。

仍待真实环境验收:

  • 在管理员后台存储资源页分别输入完整/部分用户名、昵称、邮箱和用户 ID,确认返回同一用户资源;再叠加类型、状态和存储位置筛选,确认分页与清空筛选正常。

平台技能策展

SQLite 与 HTTP recorder 已验证;PostgreSQL 16/17、前端构建及浏览器中的开关、分类维护、市场/技能库筛选、分页与明暗主题待验证。

一级分类还需 PostgreSQL 验证 46→47 与并发改归/删除,以及浏览器图示、根停用默认桶与空根表回落。handler 全套涉及 socket,受限环境中未完成。

画布角色与媒体引用顺序一致性

  • 已实现:普通图片、角色主图、绘图共享图片编号,编辑器保留 @图片N、@角色N、@绘图N 类型前缀,提交模型时统一映射为实际图片数组的 @图片N。引用先后按连接槽位确定,逆序提及不会重排资源;拖动引用后按节点身份同步编号,中文紧邻及连续引用可正常解析,多位数字不会被部分替换。
  • 已实现:角色主图占据原槽位,素材库图片保留自身资源身份,去重后的补充视角追加到主图之后。关闭角色设定注入时仍保留角色与参考图、声音样本的对应关系;多角色共用声音样本只发送一份。
  • 已实现:前端解析到的角色版本与固定版本不一致、图片/视频角色缺少主参考图、模型参考容量不足、角色授权或资源读取失败时阻止提交。文本/音频允许没有主图的角色,并将其提及改为角色名、重新对应后续图片编号。
  • 自动验证:前端 bun run test 全量 2203 项通过,类型检查、lint、冻结锁文件安装检查通过;bun --bun run build 通过,仍有大分块提示。普通构建命令首次因本机 Node 子进程缺少 TypeScript Darwin x64 包失败,显式使用 Bun 运行时后通过,未修改依赖版本或构建脚本。后端 go test ./internal/app -run 'TestCloudAgent(Media|Character)' -count=1 通过,修改的 Go 文件符合 gofmt。
  • Web checks 回归:更新时间轴容器、小屏抽屉、生命周期依赖及访客创作路由的过期源码断言,相关 45 项测试通过;真实 Chrome 预演台 E2E 65 项断言通过,覆盖模式时间轴切换、模型加载/重试/加载中删除、WebGL 恢复和保存失败关闭保护。

仍待真实环境验收:

  • 在登录态画布混合连接两张角色卡、普通图片、绘图及素材库图片,调整顺序、编辑提示词、保存重载并重试任务,核对编辑器标签与任务参考数组一一对应。
  • 在支持声音参考的视频模型上核对多角色共用样本、已有音频与角色声音样本的编号;通过真实模型验证外观与音色效果。本轮未调用付费模型,未执行整套后端及 PostgreSQL/Redis 集成测试。

创作首页纵深画廊与灵感库

  • 已实现:创作首页纵深画廊、灵感页 /inspirations、外部提示词导入脚本与本地缩略图。
  • 浏览器验收画廊 23 项:层次递减且左右对称、三段提示词信息、玻璃描边与圆角、滚轮/左右按钮切换、按钮悬停不下移、按创作类型过滤、点击卡片把提示词填进编辑器。
  • 浏览器验收灵感页 24 项:侧栏入口位于「创作」下方、分类与来源筛选、搜索、详情正文、收藏、新建与删除、跳转创作页带回提示词、JSON 导入导出。
  • bunx tsc --noEmit 通过。
  • 在低带宽的真实链路上确认首屏画廊出图时间,以及弱网下画廊池 JSON 拉取失败时退回打包原创条目的表现。
  • 窄屏(≤1100px、≤640px)下确认画廊卡片不被裁切、灵感页分页与筛选可用,并检查明暗主题。
  • 文本创作类型目前只有 9 条原创条目,画廊池暂无文本条目,仍会重复出现,待补数据。
  • 外部来源(awesome-seedance、好好学 AI、YouMind)的署名与许可声明尚未在页面展示,待定。

节点补丁字段基线

  • 已修复:节点可选字段的 undefined 在 JSON 操作请求中转换为 null,避免基线或删除值被丢弃;缺省与 undefined 的变化不提交。旧队列只使用原始快照恢复无效补丁,保留 mutationId,不使用当前云端值替代基线。
  • 专项测试覆盖新增/删除可选字段的真实 JSON 序列化、旧空补丁恢复、有效请求不变、缺少原快照不猜测以及无效变化不发送。
  • 用户确认原先 Agent 发消息前“节点补丁缺少字段基线”的场景恢复正常。
  • 在多标签页同时修改字段并重试旧队列,确认服务端仍拒绝同字段冲突;本次未修改服务端并发校验。

旧缓存与云端新增节点合并

  • 已修复:打开画布时按原会话基线合并本地编辑和最新云端文档,再更新编辑器及同步基线;旧空缓存不会把云端新增节点转换成删除操作。
  • 已实现:无法验证内容哈希的旧缓存先在账号隔离的本地存储保留最多三份恢复副本;写入失败停止替换。已落盘的明确删除请求保留原请求和幂等 ID,同字段冲突不自动覆盖。
  • 专项回归覆盖旧空缓存、新增节点与本地标题并存、明确删除保留新节点、恢复副本写入失败、同字段冲突,以及已有 journal 重放和账号切换场景。
  • 在两台设备分别保留旧缓存和新增节点,确认重载、离开再返回后新增节点与连线仍保留,明确删除仍正常生效;不提交付费生成。

Agent 选择题渲染稳定性

  • 已修复:没有 fields 的提问复用稳定的空字段列表,避免重置表单的 Effect 循环更新状态;新问题仍会重置默认值。
  • 真实 React 挂载回归覆盖无字段选择题/表单、选项和默认方案提交、保留已选值与新问题重置。
  • 在持续接收 Agent 事件时显示选择题、提交答案并切换提问,确认画布和输入区仍可正常操作。

大规模画布分批保存

  • 已实现:每批最多 500 条操作、发送前持久化、顺序推进、原请求重放和租约证明保留;全部确认后才推进整份快照的保存状态。
  • 在真实登录态下验收超限保存、响应丢失后的重开恢复、中途冲突、账号切换和编辑租约过期;模拟回执测试不替代多窗口及部署验收。

模型配置与图片参数通用修复

  • 重新进入画布、连续多步骤写入和历史会话逐步撤销,在真实浏览器复验按钮状态、并发编辑冲突和刷新恢复;自动化React与CAS测试不替代浏览器验收。

云端 Agent Registry 与记忆重构

  • 已实现:删除旧工具注册副本及旧启发式CanvasIntelligence注入链;29个schema/执行handler/Policy由统一Registry绑定,8类读取schema由类型参数结构体生成,schema/name golden及授权组合测试守护。Pi两层参数校验、工具所有权、CAS、媒体审批和收费幂等保持。
  • 已实现:焦点超过8个保留前8个并注明省略数;焦点摘要使用Unicode字符截断;当前运行时策略单一版本v17。Pi步数与预算一致,read_only权限不暴露写工具。
  • 已实现:最多5条/6KiB相关记忆作为动态消息,不进system;Injected仅在模型任务实际入队事务递增。候选记忆在检查点中保存步骤与来源事件,仅run成功后成为待审。记忆压缩改为版本化提案,批准/拒绝、CAS恢复及用户证据展示已接入。
  • 已实现:逐步撤销按钮使用服务端run/canvas/step/hash回执,拒绝后续画布变更,收费任务不可撤销,历史run通过runId正确归属。
  • 已实现:CI架构 AST 守卫检查 Agent 依赖边界及存量复杂度;Agent 域 golangci-lint 使用固定版本。
  • 真实模型与 app replay 评测未接入;本次不报告智能度/pass^k 收益。
  • 已验证:go test ./... -count=1 -timeout=20m、go vet ./...、go build ./...、前端 2716 项测试、bun run lint、bun run build 通过;数据库与API迁移测试包含SQLite。四篇修改后的MDX逐篇编译及OpenAPI引用解析通过。
  • 环境阻塞:文档站 bun run types:check 在 MDX 扫描前失败,当前忽略的 docs/node_modules/fdir/dist/index.mjs 调用了 Dirent.isPrevisy()(Node Dirent 无此方法);为避免改依赖,本轮未继续修补 node_modules。
  • 真实模型/收费生成与多次运行pass^k、provider缓存命中率、PostgreSQL 58迁移、浏览器记忆提案与历史撤销尚未人工验收。

On this page

待测试短剧:段视频后处理失败可重新处理短剧:提示词过期、对白密度、模型选择、资产图与卡住的段视频管理后台折叠侧栏显示两字名称画布框选批量下载工作台切换创作、@ 缩略图、Live2D 预览与形象收起画布上传:本地预览、并发上传与上传动效画布资产视图闲置画布反复全量重拉已结束的 Agent 轮次(#900)点击节点时偶发左右抖动画布多节点渲染性能全站 UI 规范整理(尺度、动效、反馈、空态)画布媒体版本存储空间套餐作品交付:对象存储故障时本地兜底、补传与计费保护提示词素材库引用“没有对应的画布资源”Agent 媒体规格误拒绝与工具回执恢复我的画布与技能库页面重设计画布提示词面板、节点工具条与左侧菜单视觉整理用户工作台按钮系统与内容库页面外壳技能工作台(VS Code 式技能包编辑)短剧自动流水线(上传小说 → 成片)用户反馈收件箱(PR #849)Agent 多端对话接续与图片审批宽高比Agent 多图补充观察与图像消费(#877)Agent 审批与执行回执阶段(#876)放大编辑的资产引用菜单连线目标卡片动态倾斜上游 5xx 失败文案(#868)Pi 运行待办催办与先说明再调用(#867)Agent 审批恢复回传本次结果(#866)Agent 单参考图的像素尺寸继承(#862)可移动父容器中的其他浮层画布参数浮层统一跟随与边缘避让画布助手上下文用量浮层边缘裁切画布节点比例切换动画平台级 Agent(单一面板,画布可选绑定)积分运营:冻结积分自动退回开关视频画质增强(火山 AI MediaKit 大模型版)局域网 HTTP 访问报错 crypto.randomUUID is not a function画布自动整理:分层布局与防重叠工作台账户 Popover 在减少动态效果下停留在屏幕外Agent 画布更新:节点不存在按可恢复参数错误返回预演台交互第二轮:添加弹窗、两模式与引导式动画预演台 v2:镜头输出与交互底座预演台第三轮:机位移动、走位与 Agent 复杂排戏Agent 状态动画 ZIP 包已完成生成任务重进画布后的结果恢复画布外观预设与自动保存Agent 技能主动采用与检索修复百炼 MiniMax H3 视频插件画布多窗口光标与实时通知Agent 媒体配置继承与参数准入画布同步保留当前编辑并保存原画布图片生成完成后的本地并发冲突误报同账号多端同步贡献分支图片 AI 工具结果素材绑定(Issue #788)去除背景预设参数(Issue #804)视频工作台的素材模式与计价旧画布冲突阻塞全部前台提交v1.6.8.5 发布前质量检查v1.6.8.5 发布前质量检查短剧场景与道具参考图片画布分镜关联资产选择剪辑工作台样式、播放定位与视频胶片条PR 合并后的质量检查修复豆包音频内置技能分类修复服务商目录与一键接入SQL 慢查询性能优化画布豆包音频节点参数与提示词说明Agent 图片生成参数与运行时校验回执图片尺寸与分辨率配置顺序MiniMax H3 30 秒生成时长画布云端同步状态收尾图片与视频电商出品工作室千问 AI 平台(QianWenAI MAAS)图像协议插件灵感库中文提示词创作页提交闸门只覆盖提交阶段用户登录日志个人信息局部重绘默认模型同步裁剪与调整尺寸的跨域原图读取系统模型「拉取模型」弹窗搜索创作参考内容的远端素材选择创作首页与灵感大厅整合画布素材缺失时的本地强制覆盖画布 operations 自动恢复验收Agent 只读循环软收敛Agent 画布权限与大事件审批Pi 模型输出超限Agent 分镜绑定参数引导SMTP 邮件故障日志可美 KM Seedream 图片复制生图节点后节点消失Agent 视频首尾帧选择上传内容与附件交付排队后的自定义渠道检查Agent 失败消息合并与展示画布 Midjourney 四图堆叠卡藏 Midjourney沧元 Midjourney V7 与 V8.2自定义更新公告画布助手身份与名称同步AutoDL 画面规格简化素材彻底删除恢复不拦截、CI 提速与大文件拆分后端统一日志与降噪模型选择弹窗长描述与视口边界分镜视频预览画幅角色卡引用与本地参考图交付导演台 3D-BOX 核心 MVP技能库个人分类与画布 Agent 筛选发布回归与资源引用保护注册服务协议后台配置工作区 100% 缩放下的界面密度画布资源校验、前端发布兼容与画布热点完整 AI 拆图画布媒体产出模型原任务 ID 媒体保存恢复画布默认黑色主题与点网格Live2D 运行库随部署交付Agent 图片字节交付画布创作入口主次调整技能文件包迁移元数据长度模型失败原因在画布卡片展示管理后台轻边界与高密度改造(第一轮)批量生图、刷新恢复与画布节点一致性回收站彻底删除与画布工具引用系统模型自定义排序画布 Agent 配置与 Live2D系统渠道模型展示标签模型一级菜单选中状态社区技能文件包初始化PR #554–#571 批量整合Agent 工具自动纠错与折叠展示设置页退出后的工作台浮层样式万有引力视频结果地址创作台视频同步音频参数模型候选价目与同渠道独立选择声明式文本任务流式输出注册服务协议多模态列表与分镜表合并回归Agent 任务诊断与模型选择强校验画布 Agent 入口拖动DashScope Wan 3.0 视频协议插件系统模型同页渠道与模型管理工作台菜单表面与素材显示密度Agent 磨砂面板与紧凑操作区生产构建 CSS 层顺序PR #544–#546 合并后回归数据概览财务统计与模型一级分组CI 检查修复与镜像构建提速画布素材链路与工作条改造(2026-09-19)Agent 工具诊断与错误恢复Agent 媒体提示词引用标签MiniMax H3 视频失败原因透传模型展示名归组与管理员积分成本画布删除不再预加载关联素材站点皮肤、控件焦点与外观分类模型描述与稳定悬浮产品模型分组与渠道展示名全协议视频 Token 计费闭环Agent 事件校准与 operations journal 恢复画布 Agent 读取参数纠错Agent 媒体错误分层与回写目标校验画布 Agent 提示词与用户意图治理批量创作表、图片工具与视口交互提示词放大编辑窗口支付订单与对账 CSV 导出火山方舟 Agent Plan 图片 / 视频插件Seedream 声明式结果裸 b64_json(2026-09-17)Agent Plan Seedream 误走可信素材(2026-09-17)画布 operations 持久化与恢复验收首页常驻滚动通知(2026-09-18)开发镜像标签可在线更新到正式版(2026-09-18)创作参数弹窗表面色(2026-09-17)积分中心改为弹窗(2026-09-17)对话工具条上移与输入区收紧(2026-09-17)对话开始后输入区加宽与圆角底板(2026-09-17)首页默认图片生成(2026-09-17)侧栏签到加油站(2026-09-17)侧栏账号容量进度(2026-09-17)Agent 生成失败闭环与快照补全(2026-09-17)虎皮椒聚合支付插件(2026-09-17)支付插件跨平台可执行文件(2026-09-17)管理后台独立设计系统(2026-09-17)模型选择器、画布摘要与首页视频入库Agent 计划清单、插话与提问(待用户确认)Agent 个人记忆(待用户确认)画布节点快速引用 AgentAgent 对话模型选择器复用创造页样式设置页页头与生成偏好精简侧栏图标、宽度与提示词面板项目工作台头部导航Agent 生成审批、对话轮数与连线可读性用户端创作型工作台 UI 重构首页创作区收窄首页与内容库第二轮调整价格档上游键级联与重命名告警生成素材删除的任务来源引用画布统一 operations 写入与媒体保护欢迎页开放开关思考模型 Agent 工具选择兼容Agent 模型能力筛选与跨轮草稿续用Agent 节点能力卡与结构化分镜混合节点画布 Agent画布 Agent 预算与按需技能素材 bytes 数字合同百炼多模态图像协议插件(dashscope-qwen-image)Agnes 图像协议插件(agnes-image)云端 Agent 行为、能力和偏好分层(待真实环境验收)多角度编辑器与宫格切分交互Agent 增量联动与可点击操作留痕Agent 导出、媒体审批与文本引用分镜表节点提示词面板Agent 运行闭环Agent 浮窗与设置布局异步视频统一轮询容错画布图片资源缓存链路优化后端业务域拆包固定分辨率图片模型HTTP API 错误码与 OpenAPIJSON 字符串类型与素材写入合同巨型文件按能力/容器拆分前端 HTTP 与产品浮层壳产品 LLM 任务收进官方提示词目录最小 ESLint 只锁已退场的 AntD APIweb / canvas-agent 只认 bun.lock确认框与空态退场静态 API后端 Service 域边界试点(generation / outbound)官方图片 / 音频 InterfaceType 只走声明式插件官方视频 InterfaceType 只走声明式插件列表分页查询改为 page + pageSize前端测试改为全目录自动发现写路径诚实化(存储直传 / 云端同步 / 计费退款 / 转码终态)引用素材库弹窗新增媒体类型筛选画布顶栏提示被生成任务面板遮挡远端素材未归一化导致的 tags undefined声明式协议插件丢失系统指令AI 生成章节的同名项目处理画布智能引用图片节点打光与镜头控制创作页生成类型胶囊切换v1.2.8.rc1 候选版本发布框选工具栏精简与自适应整理画布抓手 / 框选胶囊开关画布本地媒体转换节点(PR #446)Agent 聊天附件、局部重绘次数与多图展开刷新画布后提示词引用缩略图恢复连线目标节点 3D 倾斜反馈画布视频悬停预览任务详情、章节资产与请求明细文件上传占位、真实进度与磨砂流光上传图片保护与画布浮层顺序(#438 / #436)可视化排序与注册限流系统渠道排序与前台别名Tiptap 依赖版本对齐v1.2.7 正式版本发布创作页面附件缩略图MiniMax H3 分辨率能力与价格档对象存储优先发送媒体 URL管理后台系统性能图片组预览、连线菜单与尺寸设置Issue #432 多角度编辑器Issue #429 文本节点选中Issue #428 插件协议分类画布多图分组与展开动画PR #426 本地整合验收UI 组件同角色迁移(P0,2026-09-06)v1.2.6.rc3 候选版本发布v1.2.6.rc2 候选版本发布缓存回源与任务队列止血后台模型编辑与紧凑布局邮箱域名白名单与公告自动提醒(PR #417)v1.2.6.rc1 候选版本发布历史迁移 6 编号冲突登录与个人库按需加载提示词编辑器顶栏精简画布浮层平移同步图片与视频节点工具条重组图片区域标注(替换局部重绘)验证码邮件画布任务恢复图片规格价格NewAPI Video Generations Channel 2 轮询恢复编辑器(M2 命令状态机)编辑器(M3 预设插件八连)M5(编辑器插件权限执行,fail-closed)M6(AI 编辑助手:schema + 摘要 + 面板)M4(后端转写/渲染任务)编辑器 UI 打磨(主题/布局/导入媒体)任务预览、文本创作与首屏加载优化生成结果项目资产同步限流恢复平台外观管理支付插件跨平台构建站点及外观与皮肤主题画布导入同步、素材回收站与删除保护邮箱找回密码服务升级运行基础画布视频静态首帧自由空白画布与画布外观画布拖线创建节点落点素材库网格密度短剧长篇项目分页读取多文件技能包库短剧分镜工作流 v2角色声音素材绑定短剧章节后台生成与项目头部画布生成副本与结果落点画布生成结果命名画布生成进度与全屏视频控件视频画面与片段提取画布节点搜索画布素材批量插入与右键菜单动效画布本机 Agent 连接教程画布复制粘贴命名画布媒体下载文件名创作输入区参考内容管理首页生成图片预览交互Agnes Video 2.5 JSON 协议画布生成按钮价格系统渠道模型批量删除系统渠道默认积分价格系统渠道模型 Logo提示词位置型资源引用与缩略图已有图片节点图生图引用画布图片与音频组合的视频模型选择工作区、Agent、画布复制、模型配置与创作附件修复Agnes AI 官方视频协议插件分层管理RunningHub 与 ComfyUI Bridge 工作流AI 提示词优化器肖像可识别性排查画布插件画布节点自动整理分镜脚本资产关联零价免费模型用户诊断包导出Eagle 素材库Windows 本地开发画布生成结果资源恢复数据同步与资源删除重构S3 兼容存储3D 导演台时间轴关键帧删除与快捷键3D 导演台场景模板与四模式骨架3D 导演台取景模式(3D/CAM/五个正交视图)3D 导演台首次引导与窄屏属性面板模型请求失败日志完整性渠道视频分辨率枚举兼容画布生成重复提交保护画布快捷键中心管理后台在线更新大型画布媒体节点性能大型画布进入详情性能画布保存被历史素材阻断独立素材共享文件删除管理后台存储资源画布素材上传幂等短剧分镜工作流工作台章节分镜生成到分镜制作短剧项目导航与制作概览工作台首页创作仪表盘改造编辑器 Concat 风格打磨第 36 条(5 项 UI)媒体导入失败根治(分片上传 + OSS 降级修复)上传媒体监视器播放(H.265 播放副本 + 真实播放驱动 + 时长链路)MPEG-4 Part 2 播放死循环 + 画布产物素材同步(待浏览器验收)管理后台用户彻底删除(硬删,2026-09-06)画布默认框选与移动期性能优化BoardUI 吸收落地:AI 助手工作态/发送态动效(2026-09-06)首页创作入口收敛:单会话承载分镜(2026-09-06)创作页通知中心(2026-09-06,已于当日移除——见文末「移除页面级任务通知按钮」)首页图标撞车与布局统一(2026-09-06)hero 主卡去彩色外框 + 用户消息右侧气泡(2026-09-06,对齐 boardui)会话工具栏视觉统一重构(2026-09-06,幽灵按钮)首页空态卡列与输入框对齐、图标瓦片统一(2026-09-06)移除页面级任务通知按钮(2026-09-06)历史对话抽屉:行操作菜单 v2 + 行内重命名 + 时间让位(2026-09-06)AI 消息代码块外壳 B1(2026-09-06)微昕·砚品牌首页画布生成重试与引用交互修复(2026-09-10)全景图工具与查看器增强(2026-09-10)方舟可信素材失败重试与素材库方舟素材 ID(2026-09-11)支付订单用户识别(待验收)视频生成显式 @文本 引用内联(2026-09-11)全景图生成弹窗重设计(2026-09-11)云端 Agent Skills 选择与 Token 预算(2026-09-13)云端 Agent 已完成轮次事件流恢复(2026-09-13)云端 Agent Skill 引用展示修复(2026-09-13)云端 Agent 工具消息用户化(2026-09-13)云端 Agent 审批卡片与提交反馈(2026-09-13)云端 Agent 可靠性第一阶段收尾(待生产等价容量验收)云端 Agent 审批拒绝与节点能力路由(2026-09-15)用户端侧栏与创作首页对齐参考图(2026-09-15)PR #547 本地选择性整合验收画布媒体交互与 Agent 循环止损复测(2026-09-23)Pi Agent runtime 与存储边界预发布验证(2026-09-29)Agent 角色卡读取与图文参考待验收存储满额生成拦截与 Live2D 开关稳定性(2026-09-30)后台存储资源用户筛选(2026-09-30)平台技能策展画布角色与媒体引用顺序一致性创作首页纵深画廊与灵感库节点补丁字段基线旧缓存与云端新增节点合并Agent 选择题渲染稳定性大规模画布分批保存模型配置与图片参数通用修复云端 Agent Registry 与记忆重构