4.4 KiB
@deepseek-ai/dsh-skill
English | 中文
纯 agent skill 提供方注册表。
该包负责 ctx.skills 接口。它不知道 skill 来自本地文件、嵌入式插件数据、HTTP 还是其他后端;提供方通过 ctx.skills.registerProvider(...) 注册这些来源。已发布的本地实现是 @deepseek-ai/dsh-skill-local。
服务:SkillService(ctx 键:skills)
公开 API
ctx.skills.registerProvider(provider): () => void使用唯一provider.name注册只读提供方。重复提供方名称会抛错,runtime保留给ctx.skills.register(...)。注册表借用提供方对象,并直接调用其方法。注册作用域绑定到 effect,可安全用于 HMR;精确的 Cordis disposer 支持有序组合拆卸。ctx.skills.list({ cwd?, signal? })借用只读查找选项,然后返回当前工作区中模型可调用的摘要;这些摘要跨提供方合并,并按名称排序。ctx.skills.get(name, { cwd?, signal? })在发现和加载中使用同一组只读选项和胜出候选项;在发现或缓存命中后重新检查取消,让提供方加载与信号竞速,验证已加载定义,然后将其返回,包括已对模型禁用的 skill。ctx.skills.register(skill): () => void注册只读运行时嵌入式 skill,省略时添加provider: "runtime"。同名运行时注册使用先到先得:重复项会记录警告,并获得无操作 disposer。成功注册会返回精确的 Cordis disposer,以供有序组合拆卸。
配置
| 字段 | 默认值 | 含义 |
|---|---|---|
collectCacheMaxEntries |
128 |
内存中保留的最大已完成 cwd/提供方目录数。 |
提供方契约
提供方同步注册,并在已等待的 list(options) 调用中执行远程设置、身份验证和发现。提供方对象、查找选项、候选项和定义都以只读方式借用,而不是克隆或重新绑定。提供方应遵守 options.signal;取消后,注册表也会停止等待不协作的发现或加载。
注册表在缓存前验证候选项,在返回前验证定义。胜出提供方会收到同一候选项和不透明 locator,两者都是它从 list() 返回的内容,从而支持后端专用文件、URL、id 或版本句柄。调用方和提供方必须保持只读契约。
契约违反会快速失败。被拒绝的 list() 视为瞬时来源失败:系统记录它、跳过它,并且不缓存。只缓存已完成目录;提供方或运行时修订变更会丢弃正在进行的结果并重试。重复名称按 rank、提供方注册顺序,然后按提供方本地顺序解析。摘要按 skill 名称排序。
运行时 Skill
ctx.skills.register(...) 是嵌入式运行时 skill 的便利接口。运行时 skill 使用 rank 250:项目提供方可覆盖它们,它们则覆盖已发布本地提供方的自定义根和用户根。运行时定义和嵌套资源元数据均以只读方式借用;服务只实体化提供默认 provider 所需的顶层定义。运行时贡献内的注册使用先到先得,因此重复贡献无法通过其 disposer 移除活动项。
消费方边界
注册表不渲染模型指引,也不注册面向模型的工具。@deepseek-ai/dsh-tool-skill 消费 ctx.skills 以提供会话前缀目录和 skill 工具,因此提供方仍与模型接口独立。
模型体验
通过 dsh-tool-skill 间接影响模型;该包将提供方摘要渲染到会话前缀中,并将已加载指令渲染到已保留工具结果中。
KV 缓存影响
不直接导致失效;指定的消费方负责其引起的任何请求前缀变更。
已知限制与待完成工作
- 已完成目录没有 TTL 或 watcher 失效机制:提供方的底层文件或远程数据可在注册修订不变的情况下更改,因此已缓存 cwd 会保持陈旧,直到被驱逐或重新加载提供方/运行时。
- 提供方依次查询:一个缓慢的协作提供方会延迟之后注册的所有提供方;取消会停止调用方等待,但无法终止不协作提供方持续运行的工作。
- 提供方列表失败会移除该请求的整个来源:注册表会记录并跳过它,不提供模型可见诊断或部分目录恢复契约。
- 重复解析使用先到先得:系统会记录并隐藏较晚出现的低优先级候选项;不提供检查全部被遮蔽定义的 API。