ddCat
11618e83fb
test(canvas): 画布外观 - 同步默认黑色网格断言
2026-09-22 22:30:56 +08:00
ddCat
b9c7439c2f
fix(media): 资源分发 - 补齐存储配置类型并修正后端构建
2026-09-22 22:25:05 +08:00
ddCat
aab4066e0e
chore(media): 资源分发 - 修复管理端存储页面格式检查
2026-09-22 21:55:22 +08:00
ddCat
487c34bfeb
refactor(media): 资源分发 - 统一资源访问策略与云存储重定向
2026-09-22 21:41:00 +08:00
ddCat
2088cf78cc
feat(canvas): 创作入口 - 突出 Agent 主入口并优化响应式交互
2026-09-22 15:48:32 +08:00
ddCat
c30393df14
feat(canvas): 画布外观 - 默认使用黑色点网格并保留自定义配置
2026-09-22 15:47:49 +08:00
ddCat
48a82ded74
feat(media): 作品保存恢复 - 按原任务重试交付并避免重复生成计费
2026-09-22 15:47:24 +08:00
ddCat
65f639aa71
fix(canvas): Live2D 外观 - 补齐随部署发布的 Cubism Core 运行库
2026-09-22 14:17:27 +08:00
ddCat
2af633caec
feat(auth): 注册协议 - 合并同意校验并顺延迁移版本
2026-09-22 11:58:49 +08:00
ddCat
76613edadc
fix(agent): 合并回归 - 保留当前输入提示与任务租约安全边界
2026-09-22 11:21:38 +08:00
ddCat
2cbe80369b
Merge remote-tracking branch 'origin/pr-589' into codex/pr-557-589-security-integration
...
# Conflicts:
# docs/content/docs/backend/http-api.mdx
2026-09-22 11:20:54 +08:00
ddCat
f500bc3951
Merge remote-tracking branch 'origin/pr-586' into codex/pr-557-589-security-integration
2026-09-22 11:10:48 +08:00
ddCat
6f4bc29524
Merge remote-tracking branch 'origin/pr-585' into codex/pr-557-589-security-integration
2026-09-22 11:10:48 +08:00
ddCat
e46f599dc2
Merge remote-tracking branch 'origin/pr-584' into codex/pr-557-589-security-integration
2026-09-22 11:05:08 +08:00
ddCat
764ef95aa7
Merge remote-tracking branch 'origin/pr-579' into codex/pr-557-589-security-integration
2026-09-22 11:05:07 +08:00
ddCat
1d352957fb
Merge remote-tracking branch 'origin/pr-574' into codex/pr-557-589-security-integration
...
# Conflicts:
# docs/content/docs/progress/pending-test.mdx
2026-09-22 11:05:07 +08:00
ddCat
4f373c3a87
Merge remote-tracking branch 'origin/pr-573' into codex/pr-557-589-security-integration
2026-09-22 11:02:04 +08:00
ddCat
c8a91fd2e9
fix(canvas): 模型生成 - 保留安全的上游失败原因并展示到用户卡片
2026-09-22 10:48:25 +08:00
ddCat
5ea9466bb4
fix(agent): 画布助手 - 恢复 Skills 引用提示
2026-09-22 09:35:11 +08:00
ddCat
b2a1bcc8d9
chore(release): 版本发布 - 准备 v1.5.7.1 预览版
2026-09-22 09:23:18 +08:00
ddCat
e0e6be450b
refactor(admin): 管理后台 - 收敛重复边框并提升运维信息密度
2026-09-22 06:09:03 +08:00
AetherNo2332
cc76070c60
test(web): 画布 Agent 面板 - 修正 Skill 引用提示语的过期断言
...
输入框提示语已随外观配置搬进 lib/canvas/agent-appearance.ts,面板只消费
appearance.inputPlaceholder(canvas-cloud-agent-panel.tsx 的 agentCopy(...)),而这条用例仍在
面板源码里找那句字面文案,于是 Web checks 的 Run tests 一直红:干净 upstream/main 检出上可复现
1994 pass / 1 fail,同期其它作者的 PR 也是同一条失败。
改为断言"文案在 agent-appearance 里 + 面板仍在使用它",与重构后的架构一致。
2026-09-22 01:51:29 +08:00
AetherNo2332
0b5a876fd1
test(web): 画布 Agent 面板 - 修正 Skill 引用提示语的过期断言
...
输入框提示语已随外观配置搬进 lib/canvas/agent-appearance.ts,面板只消费
appearance.inputPlaceholder(canvas-cloud-agent-panel.tsx 的 agentCopy(...)),而这条用例仍在
面板源码里找那句字面文案,于是 Web checks 的 Run tests 一直红:干净 upstream/main 检出上可复现
1994 pass / 1 fail,同期其它作者的 PR 也是同一条失败。
改为断言"文案在 agent-appearance 里 + 面板仍在使用它",与重构后的架构一致。
2026-09-22 01:50:37 +08:00
AetherNo2332
33a0121cd7
test(web): 画布 Agent 面板 - 修正 Skill 引用提示语的过期断言
...
输入框提示语已随外观配置搬进 lib/canvas/agent-appearance.ts,面板只消费
appearance.inputPlaceholder(canvas-cloud-agent-panel.tsx 的 agentCopy(...)),而这条用例仍在
面板源码里找那句字面文案,于是 Web checks 的 Run tests 一直红:干净 upstream/main 检出上可复现
1994 pass / 1 fail,同期其它作者的 PR 也是同一条失败。
改为断言"文案在 agent-appearance 里 + 面板仍在使用它",与重构后的架构一致。
2026-09-22 01:50:20 +08:00
AetherNo2332
748c20cf3e
test(web): 画布 Agent 面板 - 修正 Skill 引用提示语的过期断言
...
输入框提示语已随外观配置搬进 lib/canvas/agent-appearance.ts,面板只消费
appearance.inputPlaceholder(canvas-cloud-agent-panel.tsx 的 agentCopy(...)),而这条用例仍在
面板源码里找那句字面文案,于是 Web checks 的 Run tests 一直红:干净 upstream/main 检出上可复现
1994 pass / 1 fail,同期其它作者的 PR 也是同一条失败。
改为断言"文案在 agent-appearance 里 + 面板仍在使用它",与重构后的架构一致。
2026-09-22 01:50:02 +08:00
AetherNo2332
1637bb9536
fix(cloud-agent): 布局工具参数错误按字段归类,审批卡补整理徽标
...
- canvas_arrange_nodes 的参数契约错误改用上游既有的 cloudAgentFieldError:
snapshotHash 缺失按 required、mode/align/gap/nodeIds/groups 非法按 invalid_value、
nodeIds/groups 超限按 item_count。原先一律 BadAuthRequest(*AppError),按上游运行期的
errors.As 顺序会走 failCloudAgentAdmission 把整轮判死,模型拿不到可纠正回执。
- 审批卡补 .canvas-agent-approval-operation-arrange_nodes 徽标配色(与新增/修改/连线同一组),
并补一条前端用例:arrange_nodes 预览项不得被 operation() 当成未知值丢掉。
2026-09-22 01:40:43 +08:00
AetherNo2332
56598108d4
feat(canvas): 云端 Agent 画布布局 - 新增 canvas_arrange_nodes 与新增节点自动落位
...
云端 Agent 此前只能新建节点与连线,既不会排版也不能移动已有节点:模型只能用几十个
update_node 手算坐标,或者让用户自己拖。
- 新增 backend/internal/canvas/layout:把前端既有的画布布局算法(web/src/lib/canvas/
canvas-layout.ts,本 PR 不改该文件)按同一套常量移植到服务端,提供 Kahn 拓扑分层 flow、
媒体泳道 byType、row/column/grid、对齐与等距、分组分带、AABB 重叠检测与空位搜索。
- 新增写工具 canvas_arrange_nodes:snapshotHash 必需,mode∈{auto,flow,byType,row,column,
grid},可传 nodeIds、groups(只做横向位置分带,不建容器、不改层级)、align、gap、dryRun。
只改坐标,不改内容、不建连线、不增删节点;一次最多 50 个节点 / 12 组。锁定节点、背板等
容器、隐藏批次子节点与已归属背板的子节点保持不动并在回执里说明;整批复用现有 mutation
记录与事件管线,审批与撤销走同一条路径。
- add_node 省略坐标时不再落到 (0,0):优先贴合本批连线的对端(输入在左、输出在右),否则
追加到同泳道同类节点之后,冲突则扫描空位;只给一个轴时保留该轴。agentCanvasOp.X/Y 改为
指针以区分"没给坐标"与"坐标 0"。
- update_node 的 patch 新增 x/y(PatchField.Limit 校验 ±1e6),供模型微调单个节点。
- 系统行为策略新增「布局与整理」一节并升版到 8;docs 补工具说明与工具全集;前端同步审批
预览联合类型、面板文案与徽标。
- 工具 schema 预算按实测从 24000 上调到 25000(21 个工具 24788 字节),并改正注释里
"上游约 23.4 KB"的说法(上游 20 个工具实测 22777 字节)。
2026-09-22 01:32:20 +08:00
AetherNo2332
63c9e32259
feat(cloud-agent): 单步输出上限与秒级墙钟,超时/空输出可自恢复
...
画布 Agent 一轮要跑很多步模型调用,此前只有"按任务类型的分钟级超时":某一步卡住只能等
整轮判死;更根本的是每一步请求根本不带输出上限,不写 max_tokens 时上游按剩余上下文放行,
思考模型可以把单步拖到几分钟,且偶发把整个输出预算花在推理上、正文与工具调用皆空。
- 新增运行时策略 task.agentStepTimeoutSeconds 与 task.agentStepMaxOutputTokens:秒级墙钟
与单步输出上限,都支持环境变量给部署级默认值、管理端热更新;旧配置 JSON 缺字段按默认值
回填,无需数据迁移。
- 单步墙钟到点中止这一步时不再把整轮判死:以可识别标记记为该步失败,运行期关掉上游思考
重试同一步一次(model_failure_recovered / step_timeout_retried),重试仍超时才以可读原因
(model_step_timeout)结束本轮。
- 空输出催办用尽后新增一级升级:关思考 + 放大输出预算重试同一步
(model_failure_recovered / empty_output_escalated),而不是直接判死。放大档在原值上翻倍
并以 131072 封顶,策略值为 0 时用 32768 兜底,让重试仍然有界。
- 输出上限真正下发到上游:textOptions.maxOutputTokens 成为任务信封字段,Agent 的两条请求
路径(内置协议与声明式协议)组装请求体时写入 max_tokens / max_output_tokens,与既有的
input.MaxOutputTokens 取较小值,避免策略上限超过模型声明的物理上限。
- task_worker:执行时限改用带画布 Agent 分支的 taskExecutionTimeout;执行时限到点本身不再
被当成"租约丢失",否则任务会停在 running 等租约过期后被反复重跑(实测一次调用被重跑成
三次上游请求)。续租仍用上游已合入的"不继承父 context 取消"的独立 context。
2026-09-22 01:20:36 +08:00
AetherNo2332
4e2df72eeb
fix(cloud-agent): 工具失败归类与可行动字段
...
工具失败此前只有一句自然语言(tool_failed + text),无法区分"模型自己出的错"和真实的
权限/状态/上游问题:模型拿不到可自纠的反馈,排查时分不清该改提示词、改权限还是等上游。
- 新增 backend/internal/app/cloud_agent_tool_error_class.go:把失败归成
invalid_model_output(幻觉工具名;本轮契约之外、只被 contextScope 挡掉的调用)、
schema_error(缺必填字段/类型错/未知字段/非法 JSON)、state_conflict(画布在读取之后被改动)、
permission_violation(只读轮发起写入等真实授权边界)、upstream_failure(上游 4xx/5xx、
超时、媒体上游拒绝),其余归 tool_error。
- 每类附 retryable 与稳定的 requiredAction(fix_arguments / reread_canvas /
use_advertised_tools / ask_user / report_to_user),写进 tool_failed 的回执与载荷顶层。
只加标注:没有任何放行或拒绝逻辑读它。
- 缺必填字段的通用判定:各工具的校验点抛的多是普通 AppError,从错误类型看不出"模型漏了字段"。
现在用本轮实际暴露的 schema 的 required 与参数比对,命中即按参数契约错误处理(回传 schema 与
guidance 供模型自纠);只在业务侧确实按参数问题拒绝(400/422)时套用,已分类的参数错误不套壳。
- 幻觉工具名的拒绝文案更具体:过去一律"工具未获本轮权限授权",现在指向"不存在的工具 + 只使用
本轮工具表里列出的工具"。
- 前端工具卡失败时显示归类标签,比统一的"执行失败"更能说明下一步该做什么。
2026-09-22 00:53:32 +08:00
ddCat
6f45240599
fix(canvas): 画布批量生成 - 修复节点丢失、资源引用及刷新状态不一致
2026-09-21 21:13:29 +08:00
ddCat
dc1ad68015
fix(*): 素材库与画布 - 修复批量删除刷新、选择布局及工具引用
2026-09-21 20:14:05 +08:00
root
64832b2fb5
fix(canvas): 任务结果恢复 - 规范化分镜行文本字段
2026-09-21 20:13:22 +08:00
root
72c0a037de
fix(canvas): 任务结果恢复 - 兼容结构化文本结果
2026-09-21 18:57:25 +08:00
Codex
d716e3900d
feat(admin): 模型排序 - 支持搜索并移动到指定位置
2026-09-21 15:38:21 +08:00
Codex
691073e173
fix(create): 视频创作 - 恢复参考内容添加与按类型校验
2026-09-21 14:27:16 +08:00
ddCat
c5b81f696c
feat(*): 画布助手 - 新增 Live2D 配置导入与模型渲染支持
2026-09-21 14:11:29 +08:00
ddCat
b8eefdad70
feat(canvas): 模型选择 - 支持彩色展示标签并优化目录与积分交互
2026-09-21 11:11:10 +08:00
ddCat
4ab43ca6f9
fix(ui): 提示浮层 - 修复键盘触发并补真实交互回归
...
Original-Commit: ff42bb969a037f3271e3da59b752f513c3112b2d
2026-09-21 09:55:26 +08:00
ddCat
8b8ea29148
fix(runtime): 运行稳定性 - 修复技能种子、任务续租与回归检查
...
保留社区技能作者与时间戳修复、Agent 参数约束、资源删除 worker 生命周期、PostgreSQL/Redis 测试门禁及相关回归。
Original-Commit: 0d05ff88bbe6c875d01964041788023a662ff7e8
2026-09-21 09:48:43 +08:00
Rou
19c9a207c9
fix(model-picker): 模型选择 - 修复候选报价显示与同渠道模型跳回 ( #556 )
...
Original-Commit: 7a5e17e2112c3c23e081a1ecf3c33a654cf1e907
fix(model-picker): 模型选择 - 修复候选报价显示与同渠道模型跳回
2026-09-21 09:37:51 +08:00
Codex
93bc079b89
fix(video): 创作台视频 - 修正同步音频参数与万有引力结果下载地址 ( #554 )
...
Original-Commit: e85e78fb898be7ef1fcd2027b62ab43c00dfaa2c
fix(video): 创作台视频 - 修正同步音频参数与万有引力结果下载地址
2026-09-21 09:37:35 +08:00
AetherNo2332
c09304d905
fix(web): 首屏 favicon - 不再先闪内置品牌图标 ( #570 )
...
Original-Commit: d049f7014d49e93ab0e6aa8b7e715d5155b94dc0
fix(web): 首屏 favicon - 不再先闪内置品牌图标
index.html 静态声明 /logo.svg 作 icon,而 favicon 由 use-appearance-store 在解析出外观后写入
(link[rel~="icon"] + appearanceLogoURL)。自定义品牌部署于是会先闪一下内置 logo。
换成空占位 <link rel="icon" href="data:," />:外观系统照旧覆盖它,占位只是为了不让浏览器去
请求 /favicon.ico(那是一条 404)。代价是外观接口不可用时标签页没有图标,这是有意的取舍。
新增源码级守卫用例(上游原态 1 pass/1 fail,改后 2 pass)。
2026-09-21 09:37:20 +08:00
AetherNo2332
f7a8b9eda5
test(web): Director E2E - 点击前要求目标站稳 300ms ( #565 )
...
Original-Commit: 8af5d28da78feeb30ca673030422a20e4ede0411
test(web): Director E2E - 点击前要求目标站稳 300ms
clickPoint() 原来只要相邻两次读数坐标相同(间隔 100ms)就判定就绪。AntD 弹窗/抽屉有约
200ms 入场动画,动画刚开始、坐标还没动的那一拍会被判成"稳定",真正派发鼠标事件时控件已移位,
点击落到遮罩(mask.closable=false)上无效。
改为要求坐标连续 300ms 不动、等待上限 5000ms→8000ms。上游 main 上连跑两次都失败在
F6「留在导演台」(57/58),打补丁后连跑两次都是 58/58。
2026-09-21 09:37:20 +08:00
AetherNo2332
22d65d0192
fix(web): 基础控件 FloatingDock - 宿主没有 matchMedia 时不再渲染失败 ( #563 )
...
Original-Commit: 3da77b3931a675de06b02c1bba93f112d253041b
fix(web): 基础控件 FloatingDock - 宿主没有 matchMedia 时不再渲染失败
`window` 存在不代表 `matchMedia` 存在(SSR 垫片、嵌入式 webview、部分 DOM polyfill),
而 FloatingDock 在渲染期直接取 `window.matchMedia("(pointer: coarse)").matches`,
取不到就抛 TypeError,整个 dock(画布工具栏/素材托盘/缩放控件)渲染失败。
仓库里同一模式已有先例:canvas-workspace-tool-panel 用 typeof 守卫。
抽 coarsePointerQuery():两个都探测,取不到按"非触屏"处理,useEffect 也提前返回;
能取到时行为不变。新增源码级守卫用例(上游原态失败、补丁后通过)。
2026-09-21 09:37:19 +08:00
AetherNo2332
6c92c3be7a
chore(web): 前端格式 - 统一十个文件的 Prettier 格式 ( #561 )
...
Original-Commit: ade0049c0b80733dfea563bac2aae9260e373cf0
style(web): 前端格式 - 补 Prettier 格式(10 个文件)
这 10 个文件(3 个组件/样式与设置页、4 个 admin 主题与控件、1 个 lib、2 个测试)
用仓库自带 Prettier 检查会 warn,`bun scripts/check-changed-formatting.mjs` 在改动到它们时
会直接判红。本次只做格式化,不改任何行为:合并的 CSS 声明、去掉多余换行与括号、
统一链式调用换行。
验证:prettier --write 后 `check-changed-formatting.mjs` 通过、typecheck 通过、
1940 条前端测试全过、eslint 通过。
2026-09-21 09:37:19 +08:00
AetherNo2332
5e3bc01161
fix(web): 基础控件 Tooltip - 子元素可触发并保留键盘可达性 ( #560 )
...
Original-Commit: 38b5909fa78902048345ad8d8e00248660830ad5
fix(web): 基础控件 Tooltip - 子元素可触发并保留键盘可达性
react-aria-components 的 TooltipTrigger 通过 context 下发 hover/focus 处理与 triggerRef,
只有消费该上下文的组件才会真正挂上;原来包一层普通 span,既不读 context 也拿不到 ref,
所以悬停/聚焦都不弹气泡(有定位也无基准)。
包装层改为 Focusable + excludeFromTabOrder:悬停与聚焦都能触发、气泡有定位基准,
外层不占 Tab 位,键盘焦点仍落在内层控件上,导航顺序不变。
2026-09-21 09:37:19 +08:00
AetherNo2332
edcf7bc7c0
fix(web): 诊断 - 在没有 window.location 的环境不再抛错 ( #559 )
...
Original-Commit: cdb07ca9cbdd74e63d8e80659f3bdbd6d49b3dff
fix(web): 诊断 - 在没有 window.location 的环境不再抛错
recordDiagnosticEvent / normalizeRoute 用 `typeof window !== "undefined"` 判断"在浏览器里",
但 bun 的测试环境里 window 存在、window.location 不存在,于是每次记录诊断事件都抛
`TypeError: undefined is not an object (evaluating 'window.location.pathname')`,
director-diagnostics-recorder 的 9 条基线用例因此全红。
改成 browserLocation():window 与 window.location 都探测,取不到就当没有地址(路由回落 "/")。
浏览器内的行为完全不变。
2026-09-21 09:37:19 +08:00
dk56dd
13d8f629bb
fix(settings): 工作台浮层 - 修复离开设置页后菜单背景丢失 ( #555 )
...
Original-Commit: 7edc171f36aa77b19d998ffd83d168b5d9169287
fix(settings): 工作台浮层 - 修复离开设置页后菜单背景丢失
Removed useLayoutEffect for body class management.
Original-Commit: 3b555144cc079b403ad36a6df02be5e7ad8c19b9
Update pending-test.mdx with workspace overlay styles
Added new section on workspace overlay styles after exiting settings page, including tasks for removing duplicate overlays and fixing navigation issues.
2026-09-21 09:37:19 +08:00
ddCat
85de99071d
fix(canvas): 云端 Agent - 参数错误有限重试并折叠中间失败
2026-09-21 09:30:38 +08:00
陈泽
316386a2bd
feat(auth): 注册协议 - 增加同意校验并预留影策协议正文
2026-09-20 22:57:31 +08:00