Skip to content

Commit dc44c6e

Browse files
committed
feat(skills): 新增 skills 配置安装器
1 parent 39485cb commit dc44c6e

13 files changed

Lines changed: 2488 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}

.trellis/tasks/05-20-skills-installer-config/prd.md

Lines changed: 290 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# PowerShell 日志调研
2+
3+
## 结论摘要
4+
5+
skills 安装器适合实现一层轻量日志封装,而不是引入完整日志框架。内部状态消息使用 PowerShell streams;外部 `npx skills add` 的 stdout/stderr 通过 helper 同步输出到控制台和日志文件,并保留退出码。
6+
7+
## 资料来源
8+
9+
* Context7 `/microsoftdocs/powershell-docs`
10+
* 本仓库现有 PowerShell 脚本:
11+
* `scripts/pwsh/devops/postgresql/core/logging.ps1`
12+
* `ai/downloadModels.ps1`
13+
14+
## PowerShell 官方能力
15+
16+
* `Start-Transcript` 记录整个 PowerShell session 到文本文件;适合交互排障或全局会话记录,但不适合作为单个安装命令的结构化日志主路径。
17+
* `Tee-Object` 可以把 pipeline 输出同时写到控制台和文件;适合简单输出复制。
18+
* PowerShell redirection 支持 success、error、warning、verbose、debug、information streams;外部命令 stdout/stderr 对应 success/error stream,但需要小心保留退出码。
19+
20+
## 本仓库现状
21+
22+
* `Postgres-Toolkit` 使用小型 `Write-PostgresToolkitMessage` 统一输出前缀。
23+
* `ai/downloadModels.ps1` 使用 `Write-Host` / `Write-Warning` / `Write-Verbose` 的简单封装。
24+
* 没有可直接复用的通用日志模块。
25+
26+
## 推荐实现
27+
28+
* 新增脚本内 helper,例如 `Invoke-SkillNativeCommand`
29+
* 入参:命令、参数数组、日志文件路径、可选工作目录。
30+
* 行为:执行 `npx skills ...`,把 stdout/stderr 同步输出到控制台并追加到日志。
31+
* 返回:exit code、stdout/stderr 摘要、日志路径。
32+
* 新增脚本内 helper,例如 `Write-SkillInstallerLog`
33+
* 内部消息写入控制台对应 stream,并追加到日志文件。
34+
* 日志行包含时间戳、level、message。
35+
* 默认日志目录:`ai/skills/logs/`
36+
* 日志文件名:`install-skills.<yyyyMMdd-HHmmss>.log`
37+
* 日志目录应通过 `.gitignore` 忽略真实日志文件,可用 `.gitkeep` 保留目录。
38+
39+
## 不推荐作为 MVP 主路径
40+
41+
* 仅依赖 `Start-Transcript`:简单但粒度太粗,测试和失败摘要都不够清晰。
42+
* 只用 `Tee-Object` 管道:容易混淆 stdout/stderr,且退出码处理容易被管道行为掩盖。
43+
* 做成通用 psutils 日志模块:未来可以抽象,但首版会扩大范围。
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# skills CLI 与仓库结构调研
2+
3+
## 结论摘要
4+
5+
`vercel-labs/skills` 是一个 npm CLI 包,包名和命令都是 `skills`,用于查找、安装和同步 agent skills。它不是主要的 skill 集合仓库;README 和 Context7 文档中的示例通常从 `vercel-labs/agent-skills` 安装具体 skill。
6+
7+
## 资料来源
8+
9+
* Context7 library: `/vercel-labs/skills`
10+
* GitHub: `https://github.com/vercel-labs/skills`
11+
* npm package metadata: `skills@1.5.7`
12+
13+
## CLI 能力
14+
15+
* 安装 GitHub 仓库中的 skills:
16+
* `npx skills add vercel-labs/agent-skills`
17+
* `npx skills add vercel-labs/agent-skills@react-best-practices`
18+
* `npx skills add vercel-labs/agent-skills#main -g -y --agent claude-code`
19+
* 支持指定目标 agent:
20+
* `npx skills add vercel-labs/agent-skills -a claude-code -a opencode`
21+
* 支持多种来源:
22+
* GitHub shorthand:`owner/repo`
23+
* GitHub URL
24+
* repo 中的直接 skill 路径
25+
* GitLab URL
26+
* 任意 git URL
27+
* 本地路径
28+
* 支持查找:
29+
* `npx skills find "react performance"`
30+
* 支持实验性同步:
31+
* `npx skills experimental_sync -y --agent claude-code`
32+
* 用途是扫描 `node_modules` 内含 `SKILL.md` 的包,并同步到项目 agent skill 目录。
33+
34+
## 对本仓库设计的影响
35+
36+
* 我们可以把 `npx skills add ...` 作为安装后端,而不是重写远程下载和 agent 目录探测。
37+
* `ai/skills` 下的配置文件可以声明来源、skill 名称、目标 agent、是否全局安装、是否确认交互和是否强制覆盖。
38+
* `vercel-labs/skills` 本身适合作为安装工具依赖;实际默认示例来源应考虑 `vercel-labs/agent-skills` 或配置里显式写用户想要的来源。
39+
* 本地开发目录可以作为 `npx skills add ./ai/skills/dev/<skill-name>` 的来源,或者由项目脚本复制/链接到多个 agent 目标目录。
40+
41+
## 风险与待验证点
42+
43+
* `experimental_sync` 仍标为 experimental,不宜作为 MVP 的唯一机制。
44+
* CLI 的目标 agent 名称需要在实现前通过 `npx skills --help` / `npx skills add --help` 固化测试。
45+
* 如果用户希望完全离线或无 Node 依赖,才需要实现纯 PowerShell 复制安装后端;首版可以先包装 `npx skills`
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# skills lock 文件格式调研
2+
3+
## 结论摘要
4+
5+
`skills` CLI 已经有 lock 文件概念,可以覆盖一部分“多设备同步已安装 skill”的需求。设计上应尽量贴近它的格式,而不是发明完全不同的配置结构。
6+
7+
## 资料来源
8+
9+
* 本机全局 lock:`C:\Users\mudssky\.agents\.skill-lock.json`
10+
* Context7 `/vercel-labs/skills` lock file API 文档
11+
12+
## 现有 lock 类型
13+
14+
* Global lock: `~/.agents/.skill-lock.json`
15+
* 用于 global installs。
16+
* 本机示例版本为 `version: 3`
17+
* Local/project lock: `skills-lock.json`
18+
* 位于项目根目录。
19+
* 用于 project-scoped installs。
20+
* 文档说明应提交到版本控制,支撑跨机器复现。
21+
22+
## Global lock 示例字段
23+
24+
```json
25+
{
26+
"version": 3,
27+
"skills": {
28+
"find-skills": {
29+
"source": "vercel-labs/skills",
30+
"sourceType": "github",
31+
"sourceUrl": "https://github.com/vercel-labs/skills.git",
32+
"skillPath": "skills/find-skills/SKILL.md",
33+
"skillFolderHash": "c2f31172b6f256272305a5e6e7228b258446899f",
34+
"installedAt": "2026-02-10T06:29:08.304Z",
35+
"updatedAt": "2026-02-10T06:29:08.304Z"
36+
}
37+
},
38+
"dismissed": {
39+
"findSkillsPrompt": true
40+
},
41+
"lastSelectedAgents": ["codex", "claude-code"]
42+
}
43+
```
44+
45+
## 对本任务的影响
46+
47+
* `source``sourceType``sourceUrl``skillPath``pluginName` 这些字段适合作为配置/状态模型参考。
48+
* `skillFolderHash``installedAt``updatedAt` 是安装后状态,不应由手写配置维护。
49+
* `lastSelectedAgents` 可启发默认 agent 列表,但我们的配置仍需要显式默认值和 CLI 覆盖。
50+
* project 模式应考虑读取/检查项目根 `skills-lock.json`,global 模式读取 `~/.agents/.skill-lock.json`
51+
52+
## 推荐调整
53+
54+
* 保留 `ai/skills/skills.config.json` 作为期望状态配置,但让其结构贴近 lock:
55+
* `version`
56+
* `scope`
57+
* `agents`
58+
* `skills` object,以 skill 名为 key
59+
* 每项包含 `source``sourceType`、可选 `sourceUrl``skillPath``pluginName``agents`
60+
* 安装前状态检查读取对应 lock:
61+
* `global` -> `~/.agents/.skill-lock.json`
62+
* `project` -> `<repo>/skills-lock.json`
63+
* 安装后不要手写 lock;让 `npx skills add` 更新官方 lock。
64+
* dry-run 展示配置期望状态与 lock 当前状态的差异。
65+
66+
## 风险
67+
68+
* 直接依赖 lock 内部字段可能受 `skills` CLI 版本影响。MVP 应只把 lock 作为状态检查来源,真正安装和 lock 更新仍委托 CLI。
69+
* lock version 当前为 3,旧版本可能被 CLI 清空重建;脚本应把不支持的 lock version 标为 unknown 状态,而不是自行迁移。
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"id": "skills-installer-config",
3+
"name": "skills-installer-config",
4+
"title": "brainstorm: skills 安装脚本",
5+
"description": "",
6+
"status": "in_progress",
7+
"dev_type": null,
8+
"scope": null,
9+
"package": null,
10+
"priority": "P2",
11+
"creator": "mudssky",
12+
"assignee": "mudssky",
13+
"createdAt": "2026-05-20",
14+
"completedAt": null,
15+
"branch": null,
16+
"base_branch": "master",
17+
"worktree_path": null,
18+
"commit": null,
19+
"pr_url": null,
20+
"subtasks": [],
21+
"children": [],
22+
"parent": null,
23+
"relatedFiles": [],
24+
"notes": "",
25+
"meta": {}
26+
}

0 commit comments

Comments
 (0)