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
|
e8811ace34
|
Merge remote-tracking branch 'origin/pr-580' into codex/pr-557-589-security-integration
|
2026-09-22 11:05:37 +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
|
4bea8cb7b6
|
Merge remote-tracking branch 'origin/pr-577' into codex/pr-557-589-security-integration
|
2026-09-22 11:05:08 +08:00 |
|
ddCat
|
c8a91fd2e9
|
fix(canvas): 模型生成 - 保留安全的上游失败原因并展示到用户卡片
|
2026-09-22 10:48:25 +08:00 |
|
ddCat
|
b2a1bcc8d9
|
chore(release): 版本发布 - 准备 v1.5.7.1 预览版
|
2026-09-22 09:23:18 +08:00 |
|
Wyatt_K
|
04bbbf642e
|
fix(cloud-agent): skill_search 两处实机缺陷——skillId 容错与 snippet 多字节越界
两个缺陷都是实机验证时撞出来的,不是理论风险。
1) 参数容错:Agent 首次调用时按 skill_read_file 的参数习惯顺手带上 skillId
({"keyword": "...", "skillId": "<已启用技能ID>"}),而参数解码走
decodeCloudAgentJSONObject(DisallowUnknownFields),直接拒绝 → tool_failed。
结果是工具在清单里可见、却一次都没调用成功。
- args struct 增加 SkillID(json:"skillId,omitempty"),仅接收不生效——
检索范围恒为本轮已启用技能;
- 工具描述补「不要传 skillId——本工具搜索全部已启用技能」,从源头减少误传;
- 回归测试走完整的工具分发路径(cloudAgentReadTool),真正穿透解码层,
并断言该字段不会缩小检索范围。
2) snippet 越界 panic(更严重):cloudAgentSkillSnippet 用 strings.Index 拿
**字节偏移**,却拿它去切 **[]rune**。中文描述里关键词越靠后、字节偏移越远
超 rune 数,start 没有夹紧到 len(runes),触发
panic: runtime error: slice bounds out of range [249:233],
**整个后端进程被打挂**(实测复现两次)。
- 改为 rune 级子串查找(cloudAgentSkillRuneIndex),不再混用字节与 rune 下标;
- start/end 双向夹紧,并补 start>end 兜底;
- 回归测试用 276 rune、命中词字节偏移 483 的长中文描述,
在修复前稳定 panic([443:276]),修复后通过。
3) 工具描述补充检索引导(提示文本,非行为改动):
- skill_search:明写「当本轮启用了多个技能、而你不确定该读哪一个时,先用本工具检索」;
- skill_read_file:补「若本轮启用了多个技能且不确定该读哪一个,先用 skill_search 检索再读」——
放在这里是因为模型一定会用到 read_file,提示的可达性高于只写在 search 自己的描述里。
实测:同一 8 技能满槽任务跑 3 次(原始描述 / 只改 search 描述 / 再改 read_file 描述),
step-5 **三次都没自发调用** skill_search,skill_read_file 次数 15 / 8 / 9(噪声内)。
即:**仅靠工具描述不足以驱动该模型自发检索**,需要系统提示层路由或遥测来验证采纳,
本 PR 不声称改善了采纳率。
门禁:go build ✓ go vet ✓ go test 8/8 ✓
|
2026-09-22 03:35:24 +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 |
|
AetherNo2332
|
30bc8f7675
|
test(cloud-agent): 工具分派 - 新增工具表与运行期分派的一致性守卫
工具生效需要同时改三处:compileCloudAgentTools 的 add(...) 注册、advanceCloudAgentTool /
cloudAgentReadTool 的运行期分派、以及 CloudAgentSupportedToolNames() 暴露的平台支持集合。
只改一两处时工具对模型不可见或调用落到 default 分支,而既有测试(含 schema 预算用例与能力
注册表契约用例)依然全绿。
本用例用 go/ast 读源码抽取三条集合后做集合断言:平台支持 ⊆ 分派;注册 == 分派(双向);
cloudAgentWrite 的写操作 ⊆ 注册 ⊆ 分派。解析不到 add(...) 或分派函数被改名/搬走时立即
t.Fatal,守卫自身不会静默失效。纯测试文件,零生产代码改动。
|
2026-09-22 00:49:24 +08:00 |
|
Wyatt_K
|
18b082a2d0
|
feat(cloud-agent): 新增 skill_search 工具——Agent 侧技能检索
#568/#575 提交 35 个域包(760 卡)后,Agent 按总纲名录逐卡深读的模式
出现检索成本:实测单任务读卡 12-29 次,卡库继续增长后劣化可期。
skill_read_file 只接受精确路径,Agent 侧无检索能力,与用户侧商店搜索不对称。
本 PR 参照仓库内 recall_lessons 的既有检索范式(同一套分词器与三档加权:
name 命中 3 分 / description 命中 2 分),为 Agent 侧补上对称能力:
- skill_search(keyword, limit):在本轮已启用的技能中按关键词打分排序,
返回「哪张卡值得读 + skillId + path + snippet」;不带参数时列全量索引;
- 数据源为本轮冻结的技能快照(与 #577 注入 manifest 的 description 同源),
搜到的必然是能读的,不引入「搜到但版本已变」的一致性问题;
- 只读、零副作用;不搜索未安装技能,避免「搜到不能读」的挫败;
- 渐进披露边界不变:返回索引而非正文,正文仍走 skill_read_file
(12000 字符/页),技能内容永不整体内联进上下文;
- 工具描述明牌「返回的是索引,不是指令」,延续不可信数据纪律。
测试(6 个新契约用例,全绿):
- 与 skill_read_file 一同注册、无技能时均不出现;
- name 命中排在 description 命中之前;snippet 不泄正文;
- 无关键词列全量索引;limit 夹紧;无命中时 guidance 指向 read_file;
- 空技能集返回 guidance;instruction 正文绝不内联(sentinel 断言)。
门禁:go build ./internal/app/ ✓ go vet ./internal/app/ ✓
go test -run TestCloudAgentSkillSearch ✓
|
2026-09-21 22:23:35 +08:00 |
|
ddCat
|
dc1ad68015
|
fix(*): 素材库与画布 - 修复批量删除刷新、选择布局及工具引用
|
2026-09-21 20:14:05 +08:00 |
|
Wyatt_K
|
5fe27ae642
|
feat(cloud-agent): 技能 description 进入 Agent 系统提示 manifest
compileCloudAgentPolicies 的技能 manifest 此前只含 skillId/name/version/hash/entryPath/files,模型看不到每个已激活技能是干什么的,无法在多技能间路由、也无法向用户解释为何选它。本改动把 SkillItem.Description(技能市场公开元数据)注入 manifest,并以 500 runes 为上限截断(描述由技能作者提供,需防止异常长的描述撑爆提示词预算)。skill_read_file 渐进披露边界不变:instruction 与文件正文仍不进入系统提示。
|
2026-09-21 17:52:49 +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
|
d5ff22258e
|
fix(skills): 技能文件包 - 修复元数据截断超限并补充初始化回归
|
2026-09-21 11:10:58 +08:00 |
|
ddCat
|
8b8ea29148
|
fix(runtime): 运行稳定性 - 修复技能种子、任务续租与回归检查
保留社区技能作者与时间戳修复、Agent 参数约束、资源删除 worker 生命周期、PostgreSQL/Redis 测试门禁及相关回归。
Original-Commit: 0d05ff88bbe6c875d01964041788023a662ff7e8
|
2026-09-21 09:48:43 +08:00 |
|
Codex
|
15946e5a86
|
fix(text): 文本生成 - 修复声明式协议流式请求与增量输出 (#558)
Original-Commit: b2fef297e8a50d519a0480d120a32eb81234a48f
fix(text): 文本生成 - 修复声明式协议流式请求与增量输出
|
2026-09-21 09:38:11 +08:00 |
|
Codex
|
93bc079b89
|
fix(video): 创作台视频 - 修正同步音频参数与万有引力结果下载地址 (#554)
Original-Commit: e85e78fb898be7ef1fcd2027b62ab43c00dfaa2c
fix(video): 创作台视频 - 修正同步音频参数与万有引力结果下载地址
|
2026-09-21 09:37:35 +08:00 |
|
AetherNo2332
|
13707c06b9
|
perf(agent): 工具 schema 瘦身 - 去掉重复 oneOf 并压缩冗余描述 (#569)
Original-Commit: 042d06f02215c29771360e73bc17c99d132ddfda
perf(agent): 工具 schema 瘦身 - 去掉重复 oneOf 并压缩冗余描述
工具表每一步都要发、还在前缀缓存最前面,属于固定开销:
- canvas_apply_ops 的 ops.items 同时给顶层 type 枚举和一份 oneOf,同一条约束下发两遍;
工具描述与服务端按 action 的强校验已经表达了它,删掉 oneOf。
- generate_media 的 snapshotHash / sourceNodeId / referenceNodeIds 描述压成短句。
- remember_lesson 的 steps[].tool / steps[].note 描述压成短句。
契约不变(字段、required、enum、服务端校验都未动)。实测:20 个工具的平台表
22885 → 22438 字节(−447)。新增体积守卫用例(断言无重复 oneOf + 总体积 ≤24000)。
|
2026-09-21 09:37:20 +08:00 |
|
itsWyatt-K
|
73ef84ffc8
|
feat(skills): 社区技能 - 新增 72 个创作方法论技能 (#568)
Original-Commit: d96d5aa62b68b0f8582f4f2d6a0e588d2794af6d
feat(skills): 新增 70 个社区创作方法论技能并在 README 推荐 judian-skills
- seed/skills.json 追加 70 条目(drama 14 / creative 44 / ecommerce 12),来源为
官方文档(MiniMax H3)与 9 个宽松许可开源项目的结构化蒸馏加自撰方法论,
逐卡带许可署名(metadata.source / license / attribution)
- 与现有 33 个种子技能分工明确:本批负责生成前方法论(节奏校准/提示词组装/
质检/反推),27 个任务域重叠技能带工位边界声明,与 image_text_detect 正交互补
- README 核心能力新增社区技能生态条目,指向 judian-skills 仓库
(技能页 install/GitHub 标签直装)
- 验证:go build ./internal/skills 与 go vet ./internal/skills 均通过;
种子 JSON 无重名/重 ID;A/B 实测五任务全部优于无技能与上游同类技能
Original-Commit: 55e0252e92c65bf9b69891c46313be5a7a02edd7
feat(skills): 种子技能 70 → 72(补装订图文案规范与视觉决策转换层)
新增两条已在社区技能库发布、但此前因 frontmatter 残缺被转换器按私有跳过的技能:
- flux-asset-image(FLUX.2 资产图规范):四层结构 Subject→Action→Style→Context + 五条专属规则(无负向词 / HEX 绑物体 / 外观段逐字重复保角色一致性 / 相机代码提写实感 / 多主体切 JSON)。补上图像侧「生成前方法论」空白。
- vis-to-prompt(视觉决策 → 提示词转换层):把视觉叙事七元素决策(空间选型/影调/色彩/运动)翻译成模型能懂的具象短语,并嵌入 FLUX 四层或 H3 时间轴。补上「设计意图 → 模型语言」的断点。
字段规范:skill_id 由 id_ledger.json 台账分配(...00071 / ...00072),不与既有 70 条串号;tag=creative;status=1;source=3;instruction 末尾附许可与署名页脚。
验证:go build ./... 与 go vet ./... 均 EXIT=0;skills.json 自检无重复 skill_name / skill_id,总条目 33 → 105。
|
2026-09-21 09:37:20 +08:00 |
|
AetherNo2332
|
04d8b85eec
|
fix(app): 任务租约 - 续租不再被自己的执行时限打断 (#567)
Original-Commit: 2b796c403f0c99f3b607b53650b42078964ea753
fix(app): 任务租约 - 续租不再被自己的执行时限打断
续租 context 原来派生自任务执行时限(context.WithTimeout(ctx, 5s)):执行时限一到,
续租请求立刻被取消,失败后被误判成"租约失效、等待其他 worker 恢复",任务停在 running,
租约过期后又被别的 worker 重跑(实测一次上游调用被重跑成三次)。
- taskLeaseRenewContext:用 context.WithoutCancel(parent) + 5s,只继承值、不继承取消与时限;
- 收尾处若我方执行时限已到点,不再直接返回租约错误,而是继续走失败收尾(真丢失时行为不变)。
新增用例在旧写法下失败、修复后通过。
|
2026-09-21 09:37:20 +08:00 |
|
AetherNo2332
|
fd3fc44d88
|
fix(agent): 画布写入 - 漏 patch 按参数错误回给模型而不是终止整轮 (#566)
Original-Commit: a7df2b57c72e479200b82d0af88446d43fa9f9dd
fix(agent): 画布写入 - 漏 patch 按参数错误回给模型而不是终止整轮
审批模式下模型用 canvas_apply_ops 做 update_node 时漏了 patch,准入预检直接返回普通
BadAuthRequest,运行期按"准入失败"处理 → 整轮 failed,用户只看得到一句"更新节点必须提供 patch",
模型没有改正机会。批量创作表、分镜、画布读取参数都已把同类错误包成 cloudAgentArgumentError
(运行期 errors.As 后作为工具结果回给模型重试),这里补齐。
未知画布写操作仍按准入失败终止(既有用例断言不变);新增用例同时钉住这两条。
|
2026-09-21 09:37:20 +08:00 |
|
AetherNo2332
|
76e02734f1
|
test(app): 测试库 - 改用 WAL 文件库,消除共享缓存内存库的表级锁 flake (#562)
Original-Commit: 25931635266ca01843691e87d631b6f2db178e52
test(app): 测试库 - 改用 WAL 文件库,消除共享缓存内存库的表级锁 flake
两处用例夹具用 sqlite 的 `file:…?mode=memory&cache=shared`(表级锁,且不受 _busy_timeout
约束),而它们都会触发后台删除 outbox(go s.drainResourceDeletionJobs),并发时偶发
`database table is locked`(本地并发读写 400 次撞到 70+ 次)。
新增 newSQLiteTestDB(t):文件库 + WAL + busy_timeout=5000,WAL 允许"一写多读"、写冲突退化成
SQLITE_BUSY 并由 busy_timeout 重试;库文件放 os.MkdirTemp(不用 t.TempDir,避免 outbox 仍在写
时清理报 directory not empty)。两处夹具改用它,并新增一条属性用例守住这个选型。
|
2026-09-21 09:37:19 +08:00 |
|
ddCat
|
85de99071d
|
fix(canvas): 云端 Agent - 参数错误有限重试并折叠中间失败
|
2026-09-21 09:30:38 +08:00 |
|
ddCat
|
a3bf0bd801
|
feat(canvas): 多模态表格 - 合并 PR #549 并保留本地交互与校验
|
2026-09-20 17:18:46 +08:00 |
|
ddCat
|
150f9cf2c1
|
feat(plugins): DashScope Wan3 - 合并原生视频协议插件 PR #551
|
2026-09-20 16:53:26 +08:00 |
|
ddCat
|
9148ceab66
|
feat(canvas): 画布工作区 - 整合侧栏与风格预设并修复提示词回填
选择性整合 #547,保留主分支节点与工具条设计。新增默认折叠的节点、资产、任务和历史面板,风格与预设保留在节点内,移除重复入口。
补齐工具权限、提示词解析、资源引用保护及数据库迁移,修复提示词清空和连续编辑后的生成配置同步。
验证:前端全量 1925 项测试、构建、类型检查及 lint 通过;后端 go test ./... 通过。真实模型、PostgreSQL 实库与登录态页面验收仍待进行。
Refs #547
Co-authored-by: bensharp <bensharp@qq.com>
|
2026-09-20 16:40:08 +08:00 |
|
qiuliw
|
f6b33e76b0
|
feat(plugins): DashScope Wan3 - 新增 wan3.0 原生视频协议插件
对齐 dashscope-wan-video 风格,支持 media type+url、originPath 与 UNKNOWN 失败映射;序列化 providerOptions 供声明式校验引用。
|
2026-09-20 15:49:10 +08:00 |
|
Codex
|
d87c3944b7
|
merge: official v1.5.6 with multimodal storyboard enhancements
|
2026-09-20 13:05:42 +08:00 |
|
Codex
|
6d355380cb
|
feat(canvas): support multimodal video storyboard tables
|
2026-09-20 12:59:23 +08:00 |
|
ddCat
|
0ea9f7d94b
|
fix(canvas): 画布智能体 - 严格校验模型选择并修正任务与 DNS 错误诊断
|
2026-09-20 12:47:07 +08:00 |
|
ddCat
|
8d94bde1f4
|
feat(*): 系统渠道与画布 - 支持多规格批量调价及 Agent 入口拖动
|
2026-09-20 11:18:19 +08:00 |
|
ddCat
|
9afe061d79
|
ci(deploy): 镜像发布 - 原生多架构构建并复用提交镜像与缓存
|
2026-09-20 09:35:23 +08:00 |
|
ddCat
|
3e35f7d687
|
fix(merge): PR 集成 - fix merge 上传状态与易支付校验
在 #544、#545、#546 的原作者 merge commit 之后独立修复:保留上传 Promise、处理重复上传与复制失败、格式对齐,以及易支付网关、订单证据、签名、通知幂等与安全关单校验。同步重建六平台插件产物和包。
验证:前端 1832 tests、build/typecheck、lint、相关格式检查通过;财务 SQLite、支付、插件 RPC 与产物专项通过。后端全量出现一项未改动的素材删除 SQLite 表锁失败,单独复跑 3 次通过,保留全量未通过记录。浏览器与真实商户验收待完成。#543 因迁移历史与能力限制回退暂缓。
|
2026-09-20 05:18:16 +08:00 |
|
qiuliw
|
9c22ea1d76
|
feat(payment): 支付插件 - 合并 PR #546 易支付适配
Merge pull request #546 from qiuliw. Preserve the original author and current main behavior.
|
2026-09-20 04:56:42 +08:00 |
|
qiuliw
|
28b9930915
|
feat(payment): 支付插件 - 接入易支付官方标准插件 official-payment-epay
|
2026-09-20 04:04:42 +08:00 |
|
Rou
|
04cb438869
|
feat(admin): 模型管理 - 统一财务统计并支持已有分组选择
|
2026-09-20 01:40:40 +08:00 |
|
cn-derekdu
|
d8e9928ce3
|
fix(ci): 质量检查 - 同步格式、前端断言与存储降级
|
2026-09-19 21:04:03 +08:00 |
|
ddCat
|
adf3a5be3c
|
feat(agent): 云端 Agent - 增加上下文预算、任务事实与终态恢复保障
|
2026-09-19 20:43:20 +08:00 |
|
Codex
|
10b85962b6
|
fix: recognize common multimodal text models
|
2026-09-19 20:40:55 +08:00 |
|
ddCat
|
16bd4b923b
|
feat(canvas): 生成合同 - 统一节点参数并补充模型上下文能力
|
2026-09-19 20:32:05 +08:00 |
|
ddCat
|
d7e695b9dd
|
feat(plugin): 海螺视频 - 更新 v2 插件合同并补充失败响应验证
|
2026-09-19 20:29:46 +08:00 |
|
Codex
|
cce2d2d399
|
fix: preserve legacy migration lineage
|
2026-09-19 18:41:34 +08:00 |
|
Codex
|
f9dc1c561b
|
merge: preserve batch canvas enhancements on v1.5.4
|
2026-09-19 15:48:07 +08:00 |
|
Codex
|
0e5fb27f06
|
merge: official v1.5.4 release
|
2026-09-19 15:36:02 +08:00 |
|
Codex
|
af96824011
|
fix: harden list mode and batch generation flow
|
2026-09-19 15:35:11 +08:00 |
|
Codex
|
baddbc2f5e
|
fix: allow image inputs for multimodal text models in capability check
|
2026-09-19 14:51:07 +08:00 |
|
ddCat
|
237f2e2a6e
|
feat(models): 模型目录与计费 - 按展示名分组并隔离管理员积分成本
|
2026-09-19 09:54:27 +08:00 |
|
ddCat
|
dc62109d0d
|
feat(payment): PR #538 支付FM插件 - 合并 Danborad 的支付插件实现
|
2026-09-19 08:17:47 +08:00 |
|
ddCat
|
1026301663
|
fix(plugin): PR #537 AutoDL 插件 - 合并 Rou325 的 H3 工作流更新
|
2026-09-19 08:17:28 +08:00 |
|