这一版不大,但很实在——把一个长期含糊的点做明确了:Web 管理台上,你看到的每一项技能、每一个工具,到底是平台自带、还是你自己装的,现在一眼可辨。顺手把主库写路径也收了口。
本文要点
- 全站统一的来源徽标:靛蓝「内置」/ 琥珀「安装」(含暗色主题),技能列表、工具链路、意图映射、决策流、路由追踪、模拟测试全部接入
- 后端单一真源:
Skill.origin按 SKILL.md 所在目录判定,并由/api/skills与/api/tools-chain透出- 主库写路径全量收口到进程内写闸门,补齐 WAL / SSRF 过滤 / 配置漂移检测等边缘缺陷
- 依赖随 dependabot 同步 6 项(pydantic / fastapi / tokenizers / platformdirs / pypdfium2 / ruff)
Web 端:技能与工具一眼可分
此前在技能列表、工具链路、意图映射、决策流、路由追踪、模拟测试等界面,无法判断某项是「平台手搓的内置技能」还是「用户安装的 skill」——运维和使用者都难以一眼判断来源与可改性。这不只是美观问题:装了个自己的技能、却分不清哪个是平台自带的,排查和升级时很容易动错对象。
现在的做法是后端定真源、前端统一视觉语言:
- 后端单一真源:
Skill新增origin字段,按 SKILL.md 所在目录判定——src/skills与捆绑资源为builtin(平台内置),可写data/skills与.agents/skills为user(用户安装),异常保守回退 user。该字段由/api/skills(列表+详情)、/api/tools-chain(新增skill_origin)透出,SkillTool也暴露skill_origin。 - 前端统一徽标:
core/util.js建来源注册表 + 徽标 helper,badge.css定义.origin-badge——靛蓝fa-cube「内置」/ 琥珀fa-arrow-down-to-bracket「安装」(内置工具为中性灰),含暗色主题;技能列表卡片与配置/意图词/AI 意图词三个弹窗标题、工具链路三态来源列与筛选、意图映射、决策流(仪表盘+意图页)、路由追踪链路卡片与详情弹窗、模拟测试命中技能,全部带来源标识。
一处判定、处处一致。加新界面时只要调同一个 helper,就不会再出现「这个页面忘了标来源」的漂移。
主库写路径收口与边缘加固
主库的写入此前存在绕过统一闸门的直连路径(conn.commit()),长周期运行下容易和分库写入抢同一把锁,埋下「database is locked」的隐患。v0.6.3 把主库写操作全量收口到进程内统一写闸门(write_main_with_retry + 全局锁),对称于分库写入,进程内统一串行。
顺带补齐一批边缘可靠性与安全缺陷:WAL 模式、SSRF 过滤、配置漂移检测——都是「平时跑得好好的、特定条件下才发作」的隐藏坑,现在一并堵上。
依赖更新
随 dependabot 同步 6 项依赖前进:pydantic 2.13.5→2.14.0、platformdirs 4.12.2→4.12.4、tokenizers 0.23.2→0.23.3、fastapi 0.142.2→0.143.0、pypdfium2 5.13.0→5.14.0、ruff 0.16.10→0.17.0。其中 dependabot 的 bump 只改了 requirements.txt / pyproject.toml 未重生成锁文件,已按 scripts/lock_deps.sh 重新生成两份锁文件,依赖一致性门禁恢复 0 告警。
门禁
- 前端 vitest 全量通过(含新增来源徽标 helper 与技能卡片渲染用例)。
- ruff 全路径、pyright 钉版 0 错误、
check_deps.py --strict0 告警、check_no_bare_except.py基线未增。 - 后端 pytest 全量通过:4255 passed / 3 skipped / 2 xfailed。
- 线上对运行中的服务打真实 API 验证:技能列表
origin透出全部正确,工具链路中技能工具均带user来源。
升级注意
无破坏性变更、无新增配置、无数据迁移。纯前端视觉 + 内部写路径加固 + 依赖前进。若浏览器缓存了旧 bundle,升级后建议强制刷新一次。
延伸阅读
- 完整变更日志(CHANGELOG)——本次全部变更条目
- GitHub Release v0.6.3
- 项目源码——GitHub