chore: commit workspace updates

This commit is contained in:
ddCat
2026-09-14 01:11:56 +08:00
parent 4eeef3cfd8
commit 4b0e9d8965
490 changed files with 12826 additions and 72249 deletions

View File

@@ -5,6 +5,64 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
# 待测试
## Agent 增量联动与可点击操作留痕
- 服务端将草稿、提交和媒体成功 / 失败 / 取消的节点增量与运行检查点一起持久化;前端 40ms 合批投影,不按每条完成 / 失败事件全量刷新。缺口、断流或冲突才单请求校准,发起间隔至少 1 秒,期间重复通知仅保留一次尾随校准。
- 按钮与提交入口共用节点任务状态,排队 / 运行中禁用,终态解锁;旧事件不能覆盖已换任务的节点。无关拖动、提示词编辑和视口保留,同字段冲突明确提示,不静默覆盖。
- 参数选择允许用户授权的目录默认值,已接受推荐方案不再追加文字确认;图生视频参考图只进 `referenceNodeIds`,校验错误说明可执行修正方法。独立收费审批、能力和预算校验保持不变,失败不自动重提收费任务。
- 聊天保存创建 / 更新 / 引用的节点名和节点 ID,点击复用画布聚焦,同一画布操作按工具调用 ID 去重;失败显示节点名、任务 ID、短摘要及可展开的完整错误。
- [x] 96 项前端专项测试通过,覆盖 50 个不同节点完成的一次 Store / 编辑器投影、零全量 GET,50 条事件合批、限频 / 单请求、乱序 / 幂等、新任务隔离及冲突保护。后端 `TestCloudAgent` 专项覆盖失败 / 取消终态、画布删除后的失败检查点和审批边界;前端构建、文档类型检查通过,仍有既有大分块提示。
- [x] 复用现有开发服务的隔离组件浏览器验证通过:创建 / 引用记录可点击,键盘可聚焦操作,模拟失败后共享任务状态解除按钮禁用,失败记录保留节点名且完整错误可展开。该验证使用真实工具卡组件与增量 / 聚焦函数,不等于完整画布路由或真实后端联调;未调用生成接口、未重启服务。隔离浏览器的开发热更新 WebSocket 受本地网络检查阻止,不影响这些组件断言。
- [ ] 真实登录态验收多节点同时生成、SSE 断线重连、切换会话 / 画布及失败后的节点展示;核实实际模型遵循默认参数策略。未调用真实收费模型,附件中 MiniMax 上游协议失败仍需独立渠道排查,不能视为供应商问题已解决。
## Agent 导出、媒体审批与文本引用
- [ ] Agent 顶部下载按钮导出当前对话消息、当前运行的服务端事件、工具参数、审批和错误为 JSON;服务端读取失败仍导出本地记录并附错误。凭证、签名 URL 参数及内嵌媒体已尽力过滤,提示词和对话仍可能含隐私,分享前需检查。历史轮次未缓存的原始事件不在本次导出范围内。
- [ ] 图片 / 视频遵守用户指定规格,明确授权默认时按上节选择;创建草稿及引用连线后显示独立审批,卡片展示真实模型名和规格。自动模式也必须等批准;拒绝 / 取消保留草稿,不创建媒体任务或预留媒体账单。聊天本身的文本模型费用不属于媒体生成审批。
- [ ] 视频提示词输入 `@` 可选择全画布未连线文本,选中后建立真实引用连线、使用正确编号并将正文带入生成;已有引用编号、Config 输入、自引用、循环及锁定保护保持正确。
- [ ] 仅平移 / 缩放 / 自动聚焦不会阻塞 Agent 同步或使审批快照失效;增量与本地无关字段编辑可合并,同字段冲突保留本地内容。审批仍对真实节点 / 连线变更进行快照校验。
- [ ] 工具失败行直接显示具体错误及已有任务 ID,不必悬停;区分未提交任务与任务完成后回写失败。旧日志缺失的上游错误无法追溯补齐,需新导出记录验证实际渠道问题。
- [x] 95 项前端专项测试、类型检查与生产构建通过(仍有大分块提示);后端 Agent、任务准入和模型能力相关测试通过,覆盖自动模式审批、拒绝 / 取消无任务无媒体账单、重复审批幂等、草稿归属、视口保存后批准、真实快照冲突及错误详情保留。尚未进行本轮浏览器交互或真实模型生成验收,未启动 / 重启服务或操作真实画布数据。
## 分镜表节点提示词面板
- [ ] 新建、连线创建、复制、粘贴和定位分镜表节点时不打开通用提示词面板,并关闭之前节点残留的面板;单击和拖动继续保持不弹出。分镜表内部编辑、生成与图片 / 视频节点提示词面板不变,待真实浏览器确认。
- [x] 4 项入口源码回归检查及前端类型检查 / 生产构建通过;构建仍有大分块提示,未进行浏览器交互验证。
## Agent 运行闭环
- [ ] 画布 Agent 媒体闭环:`model_list` 使用与生成面板一致的生效目录;支持读取节点 / 分镜表 / 角色资产绑定,审批时展示参考数量、画幅、质量、时长和音频。先创建图片 / 视频草稿和来源 / 资产连线,审批通过后原子绑定任务和账单;SSE 同步编辑器并聚焦新增节点,生成成功 / 失败 / 取消回写原节点。需使用真实已上传资产和模型渠道验证完整生成,不把测试数据库中的结果回写等同于真实出片。
- [x] 媒体闭环专项:后端 63 个顶层测试通过(Agent、任务准入、模型选择和能力相关),包含双图有序引用、图片生成、审批拒绝、快照过期、跨账号 / 未就绪资源、事务失败无媒体任务和账单、模型错误可恢复、结果 / 失败 / 取消回写及分镜分页。前端 22 项测试通过,包含审批规格、媒体节点与连线刷新、结果回写、聚焦及冲突保护。前端类型检查与生产构建通过(仍有大分块提示)。本次未启动 / 重启开发服务、未调用真实收费模型、未读写用户画布;发布后需新发起一轮 Agent 请求以获取新工具合同,旧失败轮次不自动续跑。
- [ ] 工具成功行取消重复的右侧“已完成”,参考路径允许换行;审批期间停止正文流式动效。模型选择器收窄至 144px,新增思考开关;真实模型兼容性、明暗主题和窄屏待浏览器验收。
- [ ] Agent 写入后同步持久化 Store 与打开的编辑器节点 / 连线;新增节点时选中并平滑聚焦本批节点,优先保持缩放,范围过大才缩小,尽量避开可移动 Agent 浮窗。不新增节点及相同快照重放不抢视口;未提交的本地编辑仍拒绝覆盖并显示冲突。窄屏浮窗遮满画布时回退全画布居中,需收起浮窗查看。待真实审批、连续写入、浮窗换位及断线重放验收。
- [ ] 节点标题增加明确拖动手柄,正文编辑 / 滚动与名称单击编辑保持不变;锁定节点显示锁定提示且不可拖动,只读画布不开放拖动。补齐 HTML / SVG 沙箱 iframe 吞掉拖动事件的问题:手柄捕获指针,拖动期间屏蔽画布内 iframe 命中,结束后恢复;全局手势监听保持稳定,避免重渲染中断拖动。待用户原画布节点、组合选择与解锁后拖动验收。
- [x] 聚焦与拖动专项 11 项测试通过,覆盖视口几何、浮窗避让、拖动入口与 iframe 保护静态约束、刷新冲突和重复事件;前端类型检查与生产构建通过(仍有大分块提示)。复用现有开发服务,在隔离 Chromium 中挂载真实节点组件和手势控制器:合成 HTML 节点从 `(100,100)` 拖至 `(300,268)`,松手后停止;结束与失焦取消后 iframe 的 pointer-events 恢复为 auto;锁定 / 只读手柄禁用。未读写用户画布数据、未启动或重启服务,真实审批联调仍待验收。
- [x] 本轮自动回归:前端 16 项测试通过,覆盖成功 / 失败工具行、长参考路径、编辑器刷新通知、本地冲突和重复事件;前端类型检查与生产构建通过(仍有大分块提示)。后端 `TestCloudAgent|TestRunAgentToolTask` 通过,覆盖审批写入、首轮及工具续轮思考配置、上游请求携带推理参数。未启动开发服务、未重启后端、未进行真实付费模型或浏览器验收。
- [ ] Agent 工具调用后的下一轮模型请求:Chat Completions 的 `tool_calls` 补齐 `type: "function"`,Claude 保留 `tool_use`;真实渠道连续调用与失败任务重新发起待验收。
- [ ] 后端重启窗口内读取已加入 Skills:对 5xx 做最多 3 次有限重试,恢复后清除旧错误卡;裸代理 502 不再展示 Axios 英文错误。需在重启后端期间打开 Agent 面板确认自动恢复且不污染对话。
- [ ] Skills 工具回归:空目录显示“无可读参考文件”,实际读取显示技能名与路径;失败事件不再出现成功摘要。同一轮同技能同路径的重复请求被拒绝,并引导使用历史结果 / 已加载正文;刷新恢复后仍保留去重状态。
- [ ] 模型断连回归:连接重置、超时、拒绝连接显示安全分类和模型任务 ID,未知错误仍引导任务中心排查;不向聊天面板暴露原始上游地址或密钥。不自动重试或恢复旧失败运行。
- [x] 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。
- [x] 专项测试覆盖请求校验、越权、预算拒绝、重复提交、可信连续对话、公共任务入口隔离;4 个并发请求仅产生一条任务 / 账单 / 预留流水;模拟上游经真实 Worker 得到并持久化回复。
- [x] 隔离浏览器通过模拟 Agent 接口完成发送 → 事件流 → 回复 → 已完成;不代表真实模型渠道或登录态联调通过。
- [ ] 真实登录态验证首轮 / 连续对话 / 取消 / 刷新恢复 / 审批 / SSE 断线重连;压力验证 PostgreSQL 扣费回滚。提交幂等键已按画布和会话持久化,仍需真实浏览器验证响应丢失后的同键恢复。
- [ ] 原本运行中的旧后端需重新构建或重启加载新路由;本次未重启用户服务、未调用付费上游。
## Agent 浮窗与设置布局
- 聊天列表增加底部跟随:发送后回到底部,内容或窗口尺寸改变时跟随;主动上翻阅读时暂停跟随。相同错误仅合并连续提示,不再吞掉后续发送的失败反馈。
- [x] 前阶段隔离浏览器模拟 404 连续发送 7 次及上翻后再发送:每次失败可见,最终距底部均为 0;前端构建通过。后端实现的验收边界见上节。
- 入口改为静态简洁按钮;桌面端支持拖动标题移动、上边缘 / 左边缘 / 左上角调整大小,位置与尺寸保存为浏览器 UI 偏好。窄屏使用全宽布局。
- 设置与 Skills 子页收缩边界、长文换行和内部滚动已调整;修正技能搜索及全选,模型选择仅保留一个图标,输入框移除聚焦位移。
- MCP 不再显示未经验证的连接成功状态。Agent 错误按 HTTP 状态呈现,不再根据错误文案断言系统模型渠道仍启用。
- [x] 专项测试:窗口几何与恢复、错误语义、会话缓存、资源引用输入,共 23 项通过。
- [x] 隔离组件浏览器验证:拖动 / 缩放 / 刷新恢复、Skills 搜索全选、明暗主题和 375px 窄屏无横向溢出、输入聚焦不位移。使用模拟接口,不代表后端联调通过。
- [ ] 登录真实画布验收入口、设置、详情、输入及窗口偏好;检查画布缩放和快捷键不干扰浮窗。
- [ ] 真实 Agent 运行、工具写入、媒体生成与 SSE 重连待联调;当前专项测试使用模拟模型和本地数据库,不替代真实上游验收。
## 画布图片资源缓存链路优化
消除首屏满屏转圈与"一直在下载":后端图片资源改 30 天磁盘强缓存(`Cache-Control: max-age=2592000`),前端内存防抖 IndexedDB 元数据写入、O(1) 淘汰预检、并发下载 4→16,视口内远程图片直链首帧上屏(走原生磁盘缓存秒开),Blob 缓存后台平滑升级。已编译通过,需浏览器最终确认:
@@ -1680,3 +1738,51 @@ v2(用户反馈首版难看后重做):菜单改用 antd Dropdown(placeme
- [ ] 有画布图片(含视频封面)时从画布添加/搜索/多选参考图,图生模式强制单选;缩略图加载后不再停留骨架态,失败图显示「加载失败」。
- [ ] 确认生成与图片直出两条路径行为与旧版一致(配置字段、连线、提示词),⌘↵ 快捷提交可用;「复制完整提示词」内容正确。
- [ ] 680px 弹窗在窄屏(`<768px`)无横向溢出,全景类型卡片换为单列;选图器覆盖层可独立关闭,不误关整个弹窗。
## 云端 Agent Skills 选择与 Token 预算(2026-09-13)
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 控制字段不保证旧程序理解,回滚旧程序前必须确认没有待收尾运行。若迁移因损坏运行中止,应先导出并核对该运行及关联任务,再修复或人工处理,禁止跳过校验强行上线。