Commit Graph

280 Commits

Author SHA1 Message Date
dlh
a4585fdc2a refactor(canvas): 节点注册表 - 收敛素材类型、生成模式与输入计数判据
把三条按类型分支的语义判据收进注册表:
- resourceKind  原 canvas-resource-references.ts,作为 @ 引用素材时的类型
- generationMode 原 canvas-connection-policy.ts,作为生成节点时的模式
- inputKind     原 canvas-connection-policy.ts,被容量校验计数时的类别

resourceKind 与 inputKind 刻意分成两个字段:它们语义不同——空图片节点不是素材
(不进 @ 引用),但照样计入 imageCount。合成一个会静默改掉连线容量校验。

两处必须保住的语义,均已由测试钉住:
1. 角色卡(workflowKind === character)是跨类型覆盖,对任何节点类型生效,
   属于查注册表之前的前置判定,因此留在调用点而不进 per-type 定义。
2. 排除必须早于覆盖。原实现先 return 掉生成配置与背板,之后才判角色卡;
   若把角色卡判定提前,带角色元数据的配置/背板节点会被多算成 characterCount。

新增 test/canvas-node-registry.test.ts(19 用例 / 77 断言)并加入 package.json
的 test 列表——该列表是显式枚举,不加进去文件不会跑。补测的原因是
canvas-resource-references.test.ts 只覆盖 collectUpstreamVideoNodes,
本次改动的 resourceKind 此前零覆盖,而这类判据出错不报错、只会让 @ 引用少收素材。

顺带内联 nodeGenerationMode(迁移后退化为单行转发)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 22:27:23 +08:00
dlh
af84cf5772 refactor(canvas): 节点注册表 - 收敛节点展示与几何知识到单一数据源
每加一种画布节点,叫什么、长什么样、能不能自由拉伸要在 4-5 处各写一遍。
实际后果是节点标签出现三份且互相矛盾(NODE_DEFAULT_SIZE.title / 创建菜单 label /
搜索弹窗 nodeTypeLabel),canvas-node-size.ts 里还有第四份硬编码兜底。

新增 lib/canvas/node-registry/,镜像现有 tool-registry/ 的结构:
静态定义带 satisfies Record<CanvasNodeType, ...> 做编译期穷尽性检查
(往枚举加成员不补定义即编译失败),再注册进模块级 Map 并按 ownerId 归属,
为后续扩展留出隔离位。

尺寸与初始 metadata 的数据源仍是 constant/canvas.ts 的 NODE_SPECS,定义文件读它
而非复制,现有约 40 处布局计算未动;渲染层 nodeContentRenderers 已是查表结构,
本次不改。

标签刻意分三个字段各司其职,界面文案零变化:
- defaultTitle 新建节点默认名(Note/Audio/未命名背板 原样保留)
- label UI 短标签
- listLabel 列表标签,缺省派生为 label + 节点;背板显式钉住为背板

接入 3 处调用点:创建菜单标签与图标、搜索弹窗类型标签、canvas-node.tsx 的
minWidth/minHeight 与 keepRatio。导演台落在节点分区但开的是工作台、不是节点类型,
故不走注册表。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 22:22:28 +08:00
dlh
7a817d6847 feat(canvas): 技能 - 新增 AI 起草技能草稿并保存为我的技能
- 技能编辑器新增「AI 起草」:描述想法后用文本模型生成 name/description/instruction/tag 草稿并回填表单
- 复用后端文本任务通道 runBackendGenerationTask 与现有技能保存/启停 API
- 容错解析 JSON,失败回退首行作名称;未配置文本模型时引导到设置页
2026-08-20 19:46:19 +08:00
dlh
55b35dd943 feat(canvas): 多图批次 - 子图操作条补齐(下载/副本/设主图/失败重试删除)
- 展开批次子图悬浮操作条:成功子项下载/创建副本/设为主图,失败子项重试/删除
- 批次主图位常驻下载按钮
- 通过 CanvasNodeActionContext 注入画布级动作(download/duplicate/delete),不改 world-layers 数据模型
2026-08-20 19:46:18 +08:00
dlh
c0e017d006 feat(canvas): Agent 输入框 - 支持 / 选技能与 @ 光标插入画布素材
AgentChatComposer 由纯 textarea 升级为内联引用编辑器:
- @ 复用 CanvasResourceMentionTextarea,光标处插入画布节点/素材引用 chip + 悬浮预览
- / 弹出已加入技能候选,选择后替换为 @[skill:xxx] 引用 token
- 提交时引用 token 保留在 prompt 文本随发送链路送出;新 props 可选,向后兼容在线/本地两条 Agent
2026-08-20 19:46:18 +08:00
dlh
e4c0f8f585 feat(canvas): 文本生成 - 独立文本份数 textCount(不再误用生图数量)
- metadata 新增 textCount
- 执行器不再复用餐 count,文本份数独立默认 1
- 配置节点与文本节点面板增加「文本份数」入口(1-15)
2026-08-20 19:33:47 +08:00
dlh
a95ff6f0d0 fix(canvas): 画布空间网格 - 修复点/线网格过淡不可见 2026-08-20 18:49:01 +08:00
ddCat
192cb12758 fix(media): 七牛对象存储 - 支持无绑定域名通过后端代理读取 2026-08-20 16:21:59 +08:00
ddCat
36c08bcc9b feat(*): 工作区体验 - 将管理员入口下沉到左侧栏并优化画布目录卡片 2026-08-20 14:33:16 +08:00
ddCat
2e2b26ecc8 fix(canvas): 构建兼容 - 修复 Agent 缓存键与退出会话类型 2026-08-20 13:46:21 +08:00
ddCat
a5bac9ec78 fix(platform): 模型路由 - 合并PR并修复归档重试兼容 2026-08-20 13:24:09 +08:00
ddCat
51c79c5a65 fix(canvas): 在线 Agent - 接入平台系统模型工具路由 2026-08-20 12:09:05 +08:00
ddCat
c289bb203a feat(admin): 模型目录 - 增加前台模型删除功能 2026-08-20 12:09:05 +08:00
ddCat
40b80cee92 fix(admin): 模型目录 - 修复能力标签与表格布局 2026-08-20 12:09:05 +08:00
ddCat
6228e530a9 refactor(web): 工作区布局与技能库 - 完成侧栏导航、分页与卡片一致性改造 2026-08-20 10:15:44 +08:00
ddCat
2a1605270c fix(canvas): 风格中心 - 恢复全部分类卡片图片 2026-08-20 10:02:57 +08:00
dlh
31026a112d fix(canvas): 在线 Agent - 系统模型接入工具任务路由 2026-08-20 09:59:27 +08:00
MasterChiefCN
56f5f651cd feat(admin): 模型目录 - 增加前台模型删除功能 2026-08-20 09:34:17 +08:00
dlh
7dc0c6fccf fix(admin): 模型目录 - 修复能力标签颜色与表格布局 2026-08-20 09:28:29 +08:00
sikongyue
05b3c64d5e refactor(web): 技能库 - 分页自研重构、选中色统一与图标瓦片提取共享类 2026-08-20 01:57:17 +08:00
sikongyue
6b17e93cff fix(web): 工作区布局 - 侧栏快速搜索补齐 ⌘K 快捷键提示
- 搜索按钮右侧加常驻 kbd 提示(复用导航项快捷键样式合同:h-5 圆角描边浅底 mono),与命令面板 ⌘K 一致
2026-08-20 00:51:36 +08:00
sikongyue
617c3c7e70 feat(web): 工作区布局 - 侧栏分组导航支持折叠
- 新增 NavGroup 组件:有标题的分组(工作台管理)可点击折叠/展开,Chevron 旋转指示,grid-rows 平滑动画;激活项所在分组自动展开\n- 折叠按钮借鉴 SelectItem 交互:紧凑 28px 高度、hover/focus-visible 浅背景反馈、标签文字与图标随 hover 加深(36% -> 55% / 35% -> 70%)\n- 无标题主分组(核心导航入口)保持常驻;分组标签 padding 移交折叠按钮,样式单一来源
2026-08-20 00:50:17 +08:00
sikongyue
46c3d51dcb fix(web): 工作区布局 - 账户中心浮层改不透明并与影策展开一致
- 根因:AntD 6 Popover 背景容器类已由 .ant-popover-inner 改为 .ant-popover-container,全局浮层覆盖规则未命中;且主题 token colorBgElevated 为 0.96 半透明,主区账户中心展开因此透出下层内容\n- 主题唯一源:elevatedBackground 深浅主题均改为不透明(alpha 1),所有 AntD 浮层(popover/dropdown/select/modal)不再半透明,与侧栏切换器浮层实底背景一致\n- 全局覆盖适配 AntD 6:.ant-popover-inner -> .ant-popover-container(背景/边框/圆角/去阴影),.ant-popover-inner-content 分隔线 -> .ant-popover-content
2026-08-20 00:48:27 +08:00
sikongyue
73e38280a5 fix(web): 工作区布局 - 修复侧栏快速搜索重复文本并统一占位符颜色
- 修复重复:搜索按钮的占位文本 span 在上次颜色统一编辑时被误插两份,现删去一份\n- 颜色:占位文字与搜索图标由 text-foreground/45(深色下为半透明白,观感偏白)改用语义 token text-muted-foreground(浅色深灰 / 深色中性灰 0.708,非纯白),深浅主题一致;hover 保持加深
2026-08-20 00:44:29 +08:00
sikongyue
aaabedb2f4 refactor(web): 工作区布局 - 卡片样式合并共享规则并减线条感
- .app-workspace-sidebar 与 .app-workspace-stage 的边框/圆角/阴影规则(含 .dark 覆盖)合并为共享选择器,消除重复声明;深浅主题覆盖保持在折叠规则之前避免覆盖失效\n- 卡片边框由 foreground 9% 减淡至 7%(与 spatial 分隔线一致),移动端抽屉边框同步\n- 核查:工作区卡片无左侧竖杠(导航引导线/引用线均为内容层级);NavItem 组件在导航与 footer 复用
2026-08-20 00:43:18 +08:00
sikongyue
4cef763a11 fix(web): 工作区布局 - 侧栏快速搜索占位文字与图标颜色统一为中性灰
- 占位文字由 text-foreground/30 改为 /45,hover 由 /55 改为 /70,与搜索图标(/45 -> /70)一致;浅色主题下为中性灰而非偏白
2026-08-20 00:41:54 +08:00
sikongyue
17a8d8ae03 fix(web): 工作区布局 - 账户图标默认态去掉圆角容器
- UserAvatar 占位 span 移除 rounded + bg-foreground/[.06] 圆角容器,默认态为纯图标;hover/打开菜单时由图标按钮背景提供圆角反馈
2026-08-20 00:40:53 +08:00
sikongyue
3fde5fd304 fix(web): 工作区布局 - 主区账户图标默认态不再发灰
- 账户触发按钮加 app-workspace-account-trigger 类,占位 CircleUserRound 覆盖为 var(--foreground) 100%,不再套用图标按钮 58% 弱化;hover 仍保持背景反馈
2026-08-20 00:37:57 +08:00
sikongyue
e026c0570a refactor(web): 工作区布局 - 卡片间间隙调小至 4px
- 新增 --workspace-card-gap 组件 token(4px),main-row gap 由 shell-gutter(6px)改引新 token,侧边栏与主区卡片间隙调小;外壳四周留白保持 6px
2026-08-20 00:36:57 +08:00
sikongyue
52a3a9f2b8 refactor(web): 工作区布局 - 侧栏折叠后主区四周贴齐无间隙
- 新增 :has(.app-workspace-sidebar.is-collapsed) 规则:折叠时 shell padding 归 0、main-row gap 归 0、stage 圆角归 0,主区卡片四周贴齐视口,无留白与圆角间隙;展开时恢复圆角卡片布局
2026-08-20 00:36:15 +08:00
sikongyue
1fc5a09a86 fix(web): 工作区布局 - 修复主区卡片暗色阴影嵌套失效,深浅主题一致
- .app-workspace-stage 块缺少闭合 },导致 .dark .app-workspace-stage 被 CSS 嵌套解析成不匹配选择器,深色下主区卡片阴影回落为白色 12% 发光;补全闭合使暗色黑色阴影覆盖生效,深浅主题表现一致
2026-08-20 00:34:57 +08:00
sikongyue
a3767dd6e3 refactor(web): 工作区布局 - 侧栏底部取消背景色与侧边栏一致 2026-08-20 00:33:25 +08:00
sikongyue
5b41f4aad3 refactor(web): 工作区布局 - 展开菜单背景改为不透明
- .app-spatial-workspace 的 --workspace-surface-strong 由 0.94 半透明改为完全不透明(白 #fff / 深色 #161616),侧栏切换器浮层、命令面板、画布 composer 面板等展开浮层不再透出背景
2026-08-20 00:32:36 +08:00
sikongyue
9e3f417bf9 refactor(web): 工作区布局 - 侧栏底部去分隔线改淡背景
- 侧栏 footer 移除 border-t 分隔线,改用淡背景(foreground 4%)+ 底部圆角匹配卡片,层级由明度差表达
2026-08-20 00:31:18 +08:00
sikongyue
e1a2b9bc0d refactor(web): 工作区布局 - 侧栏与主区展开菜单取消阴影
- 侧栏切换器下拉浮层与主区 AntD 下拉/弹出菜单(账户菜单、公告中心)取消阴影,层级改由边框与背景对比表达
2026-08-20 00:29:46 +08:00
sikongyue
9beb4ab771 refactor(web): 工作区布局 - 顶部工具条融入主卡片背景
- 移除工具条独立圆角容器(边框/圆角/阴影/margin/独立底色),顶栏成为主区卡片背景的一部分,仅保留 44px 紧凑高度与内容区对齐
2026-08-20 00:24:29 +08:00
sikongyue
2d44484843 refactor(web): 工作区布局 - 卡片间隙收窄至 6px 且工具条降至 44px 2026-08-20 00:17:26 +08:00
sikongyue
011f638d80 refactor(web): 工作区布局 - 圆角卡片成为工作台默认,顶栏降高调淡
- 删除 is-spatial 连体覆盖,所有工作台页面(默认 is-spatial)走 base 圆角卡片规则:侧边栏/主区悬浮大圆角卡片 + 留白\n- 新增 :not(.is-spatial) 保护:画布编辑器与运营后台保持全屏连体\n- 顶部工具条降高至 48px,边框由 9% 调淡至 5%,阴影弱化
2026-08-20 00:13:01 +08:00
sikongyue
3036df5956 refactor(web): 工作区布局 - 顶栏改为嵌在主区卡片内的圆角工具条
- 移除全宽横条与 border-bottom 分隔线,改为悬浮圆角工具条(12px 圆角、9% 边框、柔和阴影、顶部高光),嵌在主区卡片内、四周留白对齐内容区\n- 层级改由边框 + 阴影表达,不再使用分隔线\n- 暗色主题阴影收敛为黑色阴影
2026-08-20 00:08:34 +08:00
sikongyue
cf07f42fc2 refactor(web): 工作区布局 - 侧边栏与主区改为圆角卡片悬浮画布
- 外壳 10px 画布留白,侧边栏与主区成为独立圆角卡片(14px 圆角、9% 边框、柔和阴影、顶部高光),双卡片并排 gap 10px\n- 侧边栏展开 260px、折叠归 0(边框/阴影同步收起);移动端抽屉沿用圆角卡片样式\n- spatial 画布工作台保持连体(padding/gap 归 0、无边框圆角阴影),暗色主题阴影收敛为黑色阴影
2026-08-20 00:02:36 +08:00
sikongyue
d509cd88c3 refactor(web): 工作区布局 - 侧边栏搜索框占位文字调淡与搜索框配色一致 2026-08-19 23:51:22 +08:00
sikongyue
10f4a0f672 refactor(web): 工作区布局 - 侧边栏搜索框大圆角并调淡文本与图标 2026-08-19 23:50:26 +08:00
sikongyue
5f9606bf27 refactor(web): 工作区布局 - 侧边栏搜索框去边框改浅底并中文化占位 2026-08-19 23:49:24 +08:00
sikongyue
dd5e839501 refactor(web): 工作区布局 - 侧边栏新增 Quick search 搜索框并移除导航内冗余搜索项 2026-08-19 23:47:45 +08:00
dlh
2f937846ab fix(canvas): 风格中心 - 修复全部分类卡片内容被压缩 2026-08-19 23:45:13 +08:00
sikongyue
b311a24b85 refactor(web): 工作区布局 - 命令面板搜索框采用 shadcn 风格圆角输入框 2026-08-19 23:44:59 +08:00
sikongyue
54d1e6b693 refactor(web): 工作区布局 - 侧栏改 260px 可折叠导航、顶栏移入主区并统一账户按钮
- 侧栏由 64px 图标 rail 改为 260px 可折叠导航:分组、设置分区子项、钱包余额徽章、⌘K 命令面板入口、激活分支自动展开
- 顶栏移入主内容区(侧栏右侧):面包屑、主题切换、公告中心、账户菜单;移除冗余搜索按钮(保留侧栏搜索与 ⌘K)
- 账户按钮与其余图标按钮视觉对齐:24px 圆角头像、占位图标复用统一图标合同、移除触发按钮角标
- 新增命令面板与登出 hook;浮层背景不透明化并收敛到唯一源规则
2026-08-19 23:25:32 +08:00
dlh
d7a7397d28 fix(create): 文本生成任务 - 恢复终态正文并停止错误的生成中状态 2026-08-19 23:25:03 +08:00
dlh
35dee568c9 feat(create): 创作对话文本模式接入 text-replay 持久化与回放
把后端既有但未接线的 text-replay 能力在前端打通:前端直连模型生成正文时,
把生成过程/结果持久化到后端任务,支持刷新重放与任务中心可见。

后端(最小配套,text-replay 本为前端自管设计):
- 新增 TaskStatusTextReplay 任务状态:不排入 worker 队列、不计费、不执行,
  仅作为正文增量(text-deltas)的存储容器;
- CreateTask 识别 input.replay=true 的请求,走 createTextReplayTask 轻量创建;
- 新增 POST /tasks/:id/text-replay-complete: 写入最终正文、置为 succeeded、
  触发 text-deltas 归并,使 queryTaskTextReplay 能读到 finalText。

前端:
- 新增 creation-text-replay.ts 发布器: start 建任务、publish 节流上报增量、
  finish 存最终全文,失败静默降级不阻塞生成;
- create 文本模式生成时接入发布器,正文流不经展示改动、额外持久化到后端。

测试: 新增 isTextReplayTaskRequest 纯函数测(本地)、text-replay 闭环仓测
(建任务后写增量 -> complete -> succeeded + finalText,CI/cgo 验证)。
build/vet/tsc 全绿。
2026-08-19 22:04:41 +08:00
dlh
1502ccfc1d fix(canvas): 节点模型配置 - 清理音频参数并纳入回归测试
修复 PR #265 遗漏的音频节点参数残留,并将新增回归测试加入 web test 脚本。

Co-authored-by: dlh <2773843782@qq.com>
2026-08-19 20:52:11 +08:00