Skill 系统
wesgine Skill 的二分体系、装载机制、渠道管理与生命周期。
Tier 二分
| Tier | 来源 | 权限 | 业务术语 |
|---|---|---|---|
| Tier E(引擎技能) | 引擎二进制 embed | 只读 | ❌ 禁止 |
| Tier C(Cell 技能) | .wesskill 包上传或应用自带 | 可编辑 | ✓ 允许 |
禁止 Tier H:想让 5 个 Cell 用同一 skill → 每个各装一份。
.wesskill 包结构
.wesskill (tar.gz)
├── SKILL.md # 必需,name/version 的权威源
├── scripts/ # 脚本
├── templates/ # 模板
├── manifest.json # 可选,依赖声明
└── signature.sig # 可选,ed25519 签名
渠道三值闭域
| 渠道 | 含义 | 来源 |
|---|---|---|
engine | 只读,随二进制 | 引擎 embed |
product | 应用自带 | 消费方 SeedProduct |
user | 用户安装 | InstallPackage |
渠道是派生量不是位置——两者物理同处 cells/{id}/skills/ 一个目录。
Skill API
cell.Skills().InstallPackage(ctx, pkg []byte) // .wesskill
cell.Skills().SeedProduct(ctx, name, fsys) // 应用自带技能
cell.Skills().Uninstall(ctx, name)
cell.Skills().Update(ctx, name, pkg []byte)
cell.Skills().Rollback(ctx, name, version)
cell.Skills().SetEnabled(ctx, name, enabled)
cell.Skills().List(ctx) []SkillInfo
cell.Skills().Info(ctx, name) *SkillInfo
cell.Skills().Export(ctx, name) (io.Reader, error)
HTTP 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /skills | 列出技能 |
| POST | /skills | 安装(raw tar.gz) |
| POST | /skills/reload | 从磁盘重新加载 |
| GET | /skills/stats | 全局调用统计 |
| POST | /skills/validate | 校验 manifest |
| GET | /skills/{name} | 技能详情 |
| PUT | /skills/{name} | 更新 |
| DELETE | /skills/{name} | 卸载 |
| PATCH | /skills/{name}/enabled | 启用/禁用 |
| GET | /skills/{name}/export | 导出 |
| GET | /skills/{name}/versions | 版本列表 |
| POST | /skills/{name}/rollback | 回滚 |
| GET | /skills/{name}/stats | 单技能统计 |
| GET | /skills/{name}/snapshot | 健康快照 |
| GET | /skills/{name}/resources | 资源文件列表 |
| GET | /skills/{name}/resources/{path} | 资源文件内容 |
双层白名单
Cell DisabledEngineSkills × Agent Skills allowlist → AND 生效
AgentConfig.Skills是过滤器:nil= 全量;[]string{}= 无- Cell 级禁用 + Agent 级允许 → 不可见
不可变性
INV-SKILL-CH-03:不可变性判据只有一处 ChannelRegistry.Immutable。
读侧五个入口与写侧三个入口共用。
此前只有读侧守着——PUT /skills/plan 拒绝改它,而 POST /skills 传同名包可顶掉。
应用自带技能更新
INV-SKILL-CH-04:SeedProduct 比较三方:
embed(编译时) vs 磁盘(运行时) vs wes_skill_seed(账本)
此前判据在 wesapp 且用 Info.Source != "engine" 回答"用户改过没有"——而 workspace 只表示"已装上"。
配额
MaxSkillsInstalled 限制 Cell 内技能总数。
判据在唯一增长点(INV-QUOTA-05):
- 覆盖已有名字 →
delta=0(upsert 是编辑手势) current从权威处数(不取缓存)
Tier E 约束
- Tier E 不得含行业术语(INV-SKILL-TIER-03)
- 词表与执行在
scripts/audit-lock/06-skill-tiere.sh
相关文档
- CellSpec 总览 →
cellspec-overview.md - 配额系统 →
quota-system.md - Agent 配置 →
agent-config.md