Files
skills-vault/README.zh.md
T

201 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Skills Vault
**_[English](./README.md)_**
[![npm version](https://img.shields.io/npm/v/skvlt)](https://www.npmjs.com/package/skvlt)
[![npm downloads](https://img.shields.io/npm/dm/skvlt?label=downloads)](https://www.npmjs.com/package/skvlt)
[![CI](https://img.shields.io/github/actions/workflow/status/xixu-me/skills-vault/ci.yml?branch=main&label=ci)](https://github.com/xixu-me/skills-vault/actions/workflows/ci.yml)
[![Bun](https://img.shields.io/badge/Bun-%3E%3D1.3.11-f9f1e1)](https://bun.sh/)
[![License](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)
Skills Vault 是一个用于备份和恢复 [Agent Skills](https://agentskills.io) 的 CLI。
它主要服务于这样一个常见流程:
1. 把当前机器上已安装的 skills 快照出来
2. 提交或移动这个 manifest
3. 在另一台机器上恢复同一组 skill source
> [!IMPORTANT]
> 仅支持 Bun 运行时。Skills Vault 设计上就是通过 [Bun](https://bun.com) 安装和运行的。
## 为什么需要 Skills Vault
Skills Vault 的存在,是为了补上 [vercel-labs/skills#729](https://github.com/vercel-labs/skills/issues/729) 里提到的缺口:缺少一种声明式 manifest,来支持可移植、可复现的 skills 配置。
- 把已安装的 skills 备份为确定性的 `skvlt.yaml`
- 按 source、按 agent,或者一次性从 manifest 恢复
- 通过 `--dry-run` 在真正改动前先预览
- 用 `doctor` 快速检查本地环境
- 为 `bash`、`zsh` 和 `powershell` 生成补全脚本
## 快速开始
备份当前已安装的 skills:
```bash
bunx skvlt backup
```
预览一次 restore 将会执行什么:
```bash
bunx skvlt restore --dry-run
```
恢复 manifest 中记录的全部内容:
```bash
bunx skvlt restore --all
```
如果你想直接使用一个精选好的 manifest,可以查看 [xixu-me/skvlt](https://github.com/xixu-me/skvlt),这是一个持续维护的 `skvlt.yaml` 集合。
默认 manifest 路径是 `./skvlt.yaml`。一个典型文件如下:
```yaml
total_sources: 2
total_skills: 3
scope: "global"
sources:
"alpha/source":
count: 1
skills:
- "beta"
"beta/source":
count: 2
skills:
- "alpha"
- "zulu"
```
## 命令
### `backup`
把已安装的 skills 快照到 `skvlt.yaml`。
```bash
bunx skvlt backup
bunx skvlt backup --dry-run
bunx skvlt backup --output ./skvlt.yaml
bunx skvlt backup --project-scope --lock-file ./skills-lock.json
```
`backup` 会先读取已安装的 skill 名称,再结合 lock file 元数据,最终按 source 分组写出 manifest。
> [!NOTE]
> 全局备份默认读取 `~/.agents/.skill-lock.json`。项目级备份目前仍然需要显式传入 `--lock-file`。
### `restore`
从 manifest 安装 skills。
```bash
bunx skvlt restore --all
bunx skvlt restore --only-source xixu-me/skills
bunx skvlt restore --project-scope
bunx skvlt restore --dry-run
```
默认情况下,`restore` 会遵循 manifest 中记录的 scope。如果希望即使 manifest 来自全局状态,也强制恢复到项目作用域,可以使用 `--project-scope`。
`--dry-run` 会打印推导出的 `bunx skills add ...` 命令,但不会真正执行。实际安装时会采用 lock-safe 模式串行执行,以避免全局 lock file 竞争。
如果你想从一个精选 manifest 起步,也可以直接使用 [xixu-me/skvlt](https://github.com/xixu-me/skvlt) 中维护的 `skvlt.yaml`。
### `doctor`
检查本地 Skills Vault 环境和全局 skill 状态。
```bash
bunx skvlt doctor
bunx skvlt doctor --manifest ./skvlt.yaml
```
`doctor` 会检查:
- Bun 运行时
- `bunx skills --help`
- manifest 是否存在
- 全局 lock file 和 skills 目录是否存在
- lock file 中追踪的技能与实际安装状态是否一致
### `completion`
输出 shell 补全脚本。
```bash
bunx skvlt completion bash
bunx skvlt completion zsh
bunx skvlt completion powershell
```
## JSON 输出
所有顶层命令都支持 `--json` 结构化输出:
```bash
bunx skvlt --json doctor
bunx skvlt --json backup --dry-run
```
成功时会返回 `ok`、`command` 和 `data`。失败时会返回 `ok`、`command`,以及稳定的 `error.code` 和错误消息。
## 本地开发
安装依赖:
```bash
bun install --frozen-lockfile
```
常用命令:
```bash
bun run ./src/cli.ts --help
bun run ./src/cli.ts doctor
bun run backup
bun run restore
bun run test
bun run check
```
`bun run check` 是主要的发布前校验入口。它会运行格式检查、完整的 Bun 测试,以及 `npm pack --dry-run --json`。
如果你修改了 workflow 文件,也请额外运行:
```bash
bunx prettier --check ".github/**/*.yml"
```
## 打包与发布说明
npm 包会把 `src/cli.ts` 作为 `skvlt` 可执行入口,并且有意只将 `src` 目录作为运行时载荷发布。
发布前,可以先在本地检查 tarball 内容:
```bash
npm pack --dry-run --json
```
Release workflow 使用 trusted publishing。实际发布步骤为:
```bash
npm publish --access public
```
## 故障排查
- 如果 restore 报告全局状态不一致,请检查 `~/.agents/.skill-lock.json` 和 `~/.agents/skills`
- 如果环境检查失败,先运行 `bunx skvlt doctor`
- 如果打包检查失败,运行 `bun run check`,并检查 `npm pack --dry-run --json` 的输出
关于贡献、支持和安全策略,请参阅 [`CONTRIBUTING.md`](./CONTRIBUTING.md)、[`SUPPORT.md`](./SUPPORT.md) 和 [`SECURITY.md`](./SECURITY.md)。
## 许可证
基于 MIT 许可证发布。详见 [`LICENSE`](./LICENSE)。