feat(canvas): 画布工作区 - 整合侧栏与风格预设并修复提示词回填
选择性整合 #547,保留主分支节点与工具条设计。新增默认折叠的节点、资产、任务和历史面板,风格与预设保留在节点内,移除重复入口。 补齐工具权限、提示词解析、资源引用保护及数据库迁移,修复提示词清空和连续编辑后的生成配置同步。 验证:前端全量 1925 项测试、构建、类型检查及 lint 通过;后端 go test ./... 通过。真实模型、PostgreSQL 实库与登录态页面验收仍待进行。 Refs #547 Co-authored-by: bensharp <bensharp@qq.com>
This commit is contained in:
@@ -254,3 +254,13 @@ schema v27 为 `channel_model_price_tiers` 和 `billing_orders` 添加 `cost_con
|
||||
账号文件容量只统计 `ready` 资源,并按 Provider、Endpoint、Bucket、ObjectKey 对同一物理对象去重。上传中或失败记录不占用已存储容量。后台每小时检查资源生命周期:超过 1 小时的 `pending/failed` 记录,以及超过 24 小时仍没有任何素材、画布、任务或其他业务引用的 `ready` 记录,会在再次校验引用后删除数据库记录并写入 `resource_deletion_jobs`,由幂等 Worker 清理物理对象。
|
||||
|
||||
素材状态为 `archived` 时进入回收站。后台按“资源与请求策略”中的 `recycleBinRetentionDays` 定期扫描过期项;`0` 表示永久保留。自动清理与用户手动彻底删除复用同一 service 引用校验和 `resource_deletion_jobs` Outbox,仍被画布、项目、任务或其他业务记录引用的素材不会被删除。
|
||||
|
||||
## 画布生成工具
|
||||
|
||||
Schema 30 新增 `tools`,31 新增 `tool_favorites`;主分支已有 28(Agent 执行日志)、29(资源租约)编号和 checksum 不变。
|
||||
|
||||
- `tools`:自增 `id`、类型 `type`、名称 `label/label_en`、描述/标签、`prompt`、预览 `cover/media_url/extra_info_json`、比例、`owner_id`、`source`、`enabled`、`visibility`、排序权重和时间。
|
||||
- `tool_favorites`:`id`、`user_id`、`tool_id`、收藏时间;用户和工具联合唯一。删除自己的自定义工具时事务清理收藏,不删除预览文件。
|
||||
- 启动幂等装载 87 个预设(风格 45、运镜 33、九宫格 9),不下载第三方媒体。显式 ID 与用户工具冲突时启动报错,不覆盖用户数据;PostgreSQL 同步自增序列。
|
||||
- 工具预览纳入资源引用检查;自定义预览必须是当前用户已上传完成的资源。公开工具暂不接受私人预览资源。
|
||||
- SQLite → PostgreSQL 迁移包含上述两表。首次启动前备份测试数据;回退旧代码不能视为数据库降级,应使用备份恢复,不手工重写迁移记录。
|
||||
|
||||
@@ -133,3 +133,11 @@ HTTP 请求 -> handler -> service(稳定导入面 / 别名)-> app(组合
|
||||
- HTTP 参数与响应只在 handler 处理,业务规则进入 service。
|
||||
- 页面保留流程协调;可独立理解和测试的算法进入同业务域的 `lib`。
|
||||
- 新增功能时只更新本页的主要入口,不增加逐文件清单。
|
||||
|
||||
## 画布工具链路
|
||||
|
||||
- `backend/internal/handler/tools.go`:登录态工具列表、详情、收藏、创建与删除。
|
||||
- `internal/service` 别名 → `internal/app/tools_bridge.go`(资源归属校验)→ `internal/tools`(可见性策略、输入合同、token 展开和内置种子)→ `internal/repository/tools.go`。
|
||||
- 任务入队 `internal/app/task_creation.go` 与生成执行 `internal/app/provider.go` 共用严格 token 解析。
|
||||
- 前端 `canvas-tool-presentation.ts` 共享轻量展示配置,`canvas-resource-references.ts` 统一 token;节点提示词与工具面板共用同一持久状态,不复制到 metadata 风格字段。
|
||||
- `canvas-workspace-panel.tsx` 提供常驻左侧菜单,按需挂载节点、资产、工具、任务和历史面板;资产面板复用素材分页服务与画布插入合同;主分支项目章节侧栏与工作区互斥。
|
||||
|
||||
@@ -243,3 +243,17 @@ CSV 使用中文表头、UTF-8 BOM、CRLF;金额按整数分精确转换为两
|
||||
模型错误把已有字符串码放进 `reason`(如 `model_capability_not_supported`),`code` 仍为 400。
|
||||
|
||||
常量:后端 `service/error_codes.go`,前端 `web/src/services/api/error-codes.ts`。
|
||||
|
||||
## 画布工具 API
|
||||
|
||||
以下接口均要求登录,使用标准业务信封:
|
||||
|
||||
| 方法 | 路径 | 行为 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/api/tools` | 分页列表;`scope=public/favorites/custom`,默认 public;可按 `type=style/motion/nine_grid/effect`、tag、search 筛选。page 从 1 开始,pageSize 默认 20、最大 80;返回 tools、totalCount、page、pageSize、hasMore |
|
||||
| GET | `/api/tools/:id` | 可见且启用的工具详情,包含 prompt 和 extraInfo;列表不含这两个大字段 |
|
||||
| POST | `/api/tools` | 新建自己的工具;type、label、prompt 必填,visibility 默认 private;预览仅支持本人已上传完成的资源,公开工具暂不接受私人预览 |
|
||||
| POST / DELETE | `/api/tools/:id/favorite` | 幂等收藏 / 取消收藏,仅允许操作可见且启用工具 |
|
||||
| DELETE | `/api/tools/:id` | 仅删除自己的用户工具,不能删除内置或他人工具 |
|
||||
|
||||
生成提示词工具引用格式为 `@[tool:type:ID:label:icon]`,label 使用 URI 编码。名称和图标只用于展示,不作为授权依据。服务端在任务入队及执行前检查用户可见性、启用状态、工具类型和生成模式;无效、越权、嵌套工具或数据库错误必须失败,不能把未解析 token 发送给模型。风格和九宫格仅用于图片,运镜和特效仅用于视频。入队校验不冻结工具快照:排队期间删除工具将导致执行失败。
|
||||
|
||||
@@ -400,3 +400,7 @@ SEO 标题、描述、可选关键词会投影到浏览器 metadata、Open Graph
|
||||
- `web/src/services/api/timeline-tasks.ts`:转写与渲染任务客户端。
|
||||
- `backend/internal/service/task_timeline.go`、`task_render.go`、`timeline_render_plan.go`、`transcription_whisper.go`:后端转写、渲染与渲染计划任务。
|
||||
- `backend/internal/repository/project_workbench_read.go`:项目概览指标聚合(含成片完成度计数)。
|
||||
|
||||
## 画布生成工具(待本地验收)
|
||||
|
||||
画布支持风格、运镜、九宫格提示词工具及自定义特效工具,提供收藏和私有自定义工具。工具仅加入提示词或创建待生成子节点,选择工具不自动发起生成。画布左侧提供主页、折叠、节点、资产、任务和历史菜单,不再提供独立工具菜单,展开面板沿用主分支主题。资产支持分类、搜索、分页和直接插入,复用现有素材服务及插入合同;任务和历史独立,历史明确展示最近 30 条。图片节点直接展示风格和预设,不再展示提示词模板入口;其他节点的提示词模板保持不变。
|
||||
|
||||
@@ -2467,3 +2467,33 @@ SSE 现在按 revision 变化发送紧凑快照,无变化只 heartbeat;客
|
||||
- [ ] 打开用户资料菜单,确认管理员后台(管理员账号)、设置、退出登录仍可用;退出失败时不静默成功。
|
||||
- [ ] 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 实库迁移或登录态浏览器验收,这些项目继续保留待验收。
|
||||
|
||||
Reference in New Issue
Block a user