Commit Graph

324 Commits

Author SHA1 Message Date
ddCat
a70e7e189f fix(canvas): 画布浮层 - 修复小地图定位并弱化卡片边界 2026-08-22 13:51:24 +08:00
ddCat
bce2055602 fix(canvas): 画布交互 - 优化节点视觉、分镜列与滑动性能 2026-08-22 13:34:30 +08:00
ddCat
227e548503 fix(canvas): 画布视觉 - 收敛边框与网格样式 2026-08-22 13:09:34 +08:00
ddCat
772e7bbef7 feat(canvas): 画布节点与背景 - 扩展节点能力并优化连接与网格 2026-08-22 12:52:58 +08:00
ddCat
13702e662d fix(canvas): 画布删除 - 删除云端记录并等待本地持久化 2026-08-22 12:33:34 +08:00
dlh
800e91cc20 feat(canvas): 画布背景 - 默认网格由点阵改为线条
新建画布、读取未指定背景的画布、公开分享页,以及 InfiniteCanvas 组件自身的 prop
默认值,统一改为 lines。

四处默认值必须一起改:store 的新建与恢复分支各一份、分享页一份、组件 prop 默认一份。
漏掉任意一处就会出现「自己的画布是线条、分享出去变点阵」这类不报错的不一致。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 12:33:10 +08:00
dlh
e46f2ec027 fix(canvas): 图片节点 - 尺寸跟随图片真实比例,竖图不再两侧留黑
上传接口返回的 width/height 是可选字段(services/api/resources.ts),拿不到时节点落到
默认的横向比例,竖图被放进一个宽盒子、两侧留大片空白。改为在图片解码后于客户端量真实
尺寸并按比例校正节点 —— 这样不依赖服务端是否返回尺寸。

判据是「用户有没有手动定过尺寸」,**不是**「有没有量过尺寸」。第一版按后者写,结果所有
已经存过 naturalWidth 的既有节点永远得不到修正,改完等于没改。现在由 handleNodeResize
在手动拉伸时打 metadata.manualSize 标记,自动适配只避让它和 freeResize(自由比例是用户
显式要求脱离原始比例,自动校正会跟他打架)。

顺带收益:naturalWidth / naturalHeight 补齐后,canvas-node.tsx 的锁比例拉伸也会按真实
比例走 —— 它本来就在读这两个字段,之前多数节点拿不到。

已知影响:既有节点因为没有 manualSize 标记,首次重新加载时会自动校正一次尺寸。
对被 letterbox 的图是修复,但确实会让画布上现有图片节点的尺寸变动一次。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 12:33:10 +08:00
dlh
e07574ee14 fix(canvas): 画布连线 - 端点收敛到端口中点并新增流动光影
两件事,都在连线层。

一、多条线接同一个端口时不再沿着边散开。

原因是 use-canvas-connection-controller 把**鼠标松手的 Y 位置**记成了 anchorRatio,
于是每条线各自钉在落点上。判据还是反的:真正多端口的分镜脚本传 undefined,
而左右各只有一个出入口的普通节点却按落点比例取 Y,看起来像节点有很多端口。

改成单端口一侧永远取边的正中。这条规则有**两份实现**(canvas-connections 的
connectionHandleY 与 canvas-project-domain 的 getConnectionTargetAnchor),只改一处
会让实际画出来的线和吸附点对不上,所以两处一起改。同时把 anchorRatio 参数从这两个
几何函数上摘掉,让「不按落点」写在签名里而不是悄悄丢掉一个入参 —— 摘掉之后编译器
点出了 4 处仍在传旧参数的调用,正是这么做的收益。分镜脚本的 row: 句柄不受影响。

二、连线新增光晕与流光两层。

光晕(blur 的宽描边)和流光(一小段高亮沿路径跑)**只在悬停/选中态渲染**:blur 是
filter,成本随线条数量线性上升,常态几十条线全开会明显掉帧。常态仍是原来那条极淡的
虚线,只有指向的那条亮起来,顺带让「当前在看哪条链路」更清楚。

流光周期 2.1s 与虚线流动 1.25s 刻意错拍 —— 同频会锁成一条整体平移的虚线,
看不出有光在走。keyframes 的位移量等于 dasharray 之和(16 + 118 = 134),
否则循环处会跳一帧。

新动画已加入全部三处禁用名单:prefers-reduced-motion、.no-motion,以及
[data-canvas-viewport-interacting](平移缩放期间)。第三处最关键 —— 漏掉的话拖画布时
几十条线还在跑动画,正是错题本里「画布高频重绘导致崩溃」那一类。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 12:33:10 +08:00
dlh
90d6c58de9 feat(canvas): 扩展节点 - 新增 7 种展示与加工节点并补齐上游读取基建
在已落地的节点注册表上加两层节点:展示层(Markdown / SVG / HTML / 全景)与
接入生成链的加工层(对比 / 图表 / 调色)。全部是第一方内置节点,不引入远程插件
加载,因此不涉及沙箱信任模型,也不需要把 CanvasNodeType 放开成任意字符串。

刻意保留穷尽性检查而不是改成运行时注册。全库只有 4 张按类型建的穷眉表
(NODE_DEFAULT_SIZE / NODE_SPECS / 注册表定义 / nodeContentRenderers),
让编译器强制每个新节点填满它们,比少改几个文件更值 —— 加第一个枚举成员时
编译器点出了 5 处,其中 pages/canvas/shared.tsx 是原先没编目的那一处;
换成运行时注册,那里会静默回落成「未知节点」。

两处前置基建:
- CanvasNodeGraphContext:渲染器只拿到 node、没有 connections,而加工层三个节点
  都要读上游。仿已有的 canvas-node-action-context(同一个问题:节点经
  CanvasProjectWorldLayers 渲染不便逐个透传),取上游复用
  canvas-resource-references 的 getContextResourceNodes,不另写一份。
  Provider 值必须 memo —— 每帧新对象会让所有节点跟着重渲染。
- ToolbarHandlers.onAddExtensionNode(type):一个泛用入口,不给每种扩展节点单开
  一个 onAddXxx。菜单另开「展示与加工」分区,不挤占上方调好的四列创作网格。

SVG 与 HTML 统一走 sandbox iframe:依赖里没有 DOMPurify,手写 SVG 消毒不可靠
(script / on* / foreignObject)。SandboxedFrame 只暴露 allowScripts 布尔而不是
sandbox 取值,让「同时给 allow-same-origin」这条没有入口。

全景节点三个取舍:点击才激活 WebGL(浏览器对同时存在的上下文有硬上限,画布可以有
任意多个全景节点,自动激活必然在某个数量后整片黑);用原生 three 而非 fiber
(需要精确 dispose,forceContextLoss 才真正释放上下文);性能模式下只给静态预览。

调色是唯一碰生成路径的节点,照 Drawing 的先例:拖滑杆只做本地 CSS filter 预览,
落地成资源要等到生成消费它时才走 uploadResourceFile。预览与导出共用同一个
filter 字符串,两处各写一份就会「看到的和用的悄悄不一致」;未调色时直接透传源图,
省掉一次渲染与上传。ctx.filter 不受支持时明确报错而不是导出一张没调色的图。

resourceKind 与 inputKind 分开两个字段:空图片节点不是素材(不进 @ 引用),
但照样计入 imageCount。调色节点的 resourceKind 无条件返回 image —— 它的图来自
上游,按「有没有 content」判断会让它永远进不了生成输入,这是不报错的静默失效。

测试:新增 test/canvas-extension-nodes.test.ts(12 用例 / 64 断言),覆盖 7 个节点的
判据矩阵、调色参数、以及图表解析。图表解析函数刻意不抛 —— 数据来自模型输出,
非法 JSON 是常态而不是异常,抛出来会连带整个画布白屏,有 7 条断言钉这个。
测试列表是显式枚举,已把新文件加进 package.json,不加进去不会跑。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 12:29:24 +08:00
ddCat
c670ebca90 feat(*): 工作台界面 - 优化插件中心、管理侧栏及画布与短剧列表 2026-08-22 11:35:23 +08:00
ddCat
9327b75c2e feat(canvas): 画布插件与视觉 - 合并 PR #289 并保留任务计费边界 2026-08-22 10:01:41 +08:00
ddCat
8be75c1fbd refactor(core): 任务与模型协议治理 - 拆分服务职责并禁止已发起任务取消 2026-08-22 09:52:09 +08:00
QAyong
34a207eb39 feat(canvas): 画布视觉 - 优化浮动控件与连接线可读性 2026-08-22 03:08:15 +08:00
QAyong
d70c0961cb feat(workbench): 插件素材与画布视觉 - 完成 Eagle 外部来源与节点可读性适配 2026-08-22 02:30:26 +08:00
QAyong
ce5af1b6c8 feat(plugin): 插件系统 - 新增插件中心与可展开配置 2026-08-21 19:13:34 +08:00
MasterChiefCN
ce86bb781b fix(web): 资源预览 - 请求明细资源失效时显示预览占位 2026-08-21 16:53:33 +08:00
ddCat
d909e65993 feat(canvas): 创作体验 - 合并 PR #282 并优化引用、风格与素材文件夹 2026-08-21 09:23:31 +08:00
ddCat
36bff1963b refactor(canvas): 节点注册表 - 合并 PR #284 并收敛类型判据 2026-08-21 09:18:17 +08:00
ddCat
0071e9416c fix(*): 模型与数据同步 - 完善鉴权、供应商模型和本地持久化能力 2026-08-20 22:58:31 +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
ddCat
7f2e8c16e6 fix(web): 构建与测试 - 修复会话类型和图标依赖兼容 2026-08-20 19:48:02 +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
80cf16f7cf chore(git): 主分支 - 合并 feature 分支 2026-08-20 17:13:10 +08:00
echoD886
9df5d5add4 chore(web): 文件夹主题 - 修复前端格式检查 2026-08-20 16:50:50 +08:00
echoD886
536af9a69f feat(assets): 文件夹主题 - 新增多主题皮肤并同步主线 2026-08-20 16:33:51 +08:00
ddCat
192cb12758 fix(media): 七牛对象存储 - 支持无绑定域名通过后端代理读取 2026-08-20 16:21:59 +08:00
echoD886
b2923b1c08 fix(canvas): 文件夹主题 - 对齐参考材质并分离内容预览 2026-08-20 15:59:51 +08:00
echoD886
935108edca feat(assets): 素材库与画布 - 新增可交互通用文件夹 2026-08-20 15:16:45 +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
51c79c5a65 fix(canvas): 在线 Agent - 接入平台系统模型工具路由 2026-08-20 12:09:05 +08:00
ddCat
6228e530a9 refactor(web): 工作区布局与技能库 - 完成侧栏导航、分页与卡片一致性改造 2026-08-20 10:15:44 +08:00
dlh
31026a112d fix(canvas): 在线 Agent - 系统模型接入工具任务路由 2026-08-20 09:59:27 +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
73e38280a5 fix(web): 工作区布局 - 修复侧栏快速搜索重复文本并统一占位符颜色
- 修复重复:搜索按钮的占位文本 span 在上次颜色统一编辑时被误插两份,现删去一份\n- 颜色:占位文字与搜索图标由 text-foreground/45(深色下为半透明白,观感偏白)改用语义 token text-muted-foreground(浅色深灰 / 深色中性灰 0.708,非纯白),深浅主题一致;hover 保持加深
2026-08-20 00:44:29 +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
a3767dd6e3 refactor(web): 工作区布局 - 侧栏底部取消背景色与侧边栏一致 2026-08-20 00:33:25 +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
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