实现 Skills 管理功能,支持超级管理员导入、编辑、导出和删除技能包。 - 新增 Skill 数据模型(元数据存数据库,内容存文件系统) - 新增 /api/system/skills/* 路由(权限分级:admin 可列表,superadmin 可管理) - 新增 SelectedSkillsReadonlyBackend,运行时只读挂载到 /skills - Agent 配置新增 skills 字段,运行时注入技能提示词 - 前端新增 Skills 管理页面(设置弹窗 + 独立路由) - 新增测试覆盖:service/router/backend 单测 未实现功能: - 关联使用其他技能 - 沙箱执行代码 - 在技能中绑定工具
1.8 KiB
1.8 KiB
Skills 管理
Skills 管理模块用于集中维护可供 Agent 只读引用的技能包。
本期采用“文件系统存内容,数据库存索引”模式:
- 技能目录存储在
/app/saves/skills(本地save_dir/skills)。 - 技能元数据(slug/name/description/dir_path)存储在
skills表。 - Agent 配置通过
context.skills选择技能,运行时挂载到/skills且只读。
权限与入口
- 系统设置中新增
Skills 管理页签(仅superadmin可见)。 admin仅可调用列表接口(用于 Agent 配置选择 skills)。user无 skills 管理权限。
导入规范(ZIP)
- 单包单技能,且必须包含一个
SKILL.md。 SKILL.md必须包含 frontmatter,且name、description必填。name需满足 slug 规则:小写字母/数字/短横线。- 导入时执行路径安全校验,拒绝绝对路径与
..路径穿越。 - slug 冲突时自动追加
-v2/-v3...,并自动改写SKILL.md中name为最终 slug。 - 导入采用临时目录 + 原子替换,避免半成品落盘。
在线管理能力
- Skills 列表:来自数据库,避免全量目录扫描。
- 目录树:按原生目录结构展示。
- 文件级 CRUD:支持新建文件/目录、编辑文本文件、删除文件/目录。
- 文件编辑仅允许文本类型(如 md/py/js/ts/json/yaml/toml/txt 等)。
SKILL.md保存后会重新解析,并同步更新数据库中的name/description。- 支持导出单个 skill 为 ZIP。
- 删除 skill 时会同时删除目录与数据库记录(硬删除)。
Agent 运行时行为
context.skills用于配置技能 slug 列表。- 运行时仅暴露选中 skills 到
/skills/<slug>/...。 /skills路径只读,不允许写入、编辑、上传。- 变更在下一次对话请求生效。