Files
stash-ui/docs/AI-USAGE.md
T

103 lines
4.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.
# 让 AI 正确使用 / 扩展这套组件库
结论先说:**需要 skill,但 skill 只做「入口 + 护栏 + 验证循环」,规则仍然只写在文档里。**
否则规则会两处维护,迟早漂移。
## 1. 三件东西各管什么
| 文件 | 给谁 | 作用 |
| --- | --- | --- |
| [`skills/stash-ui/SKILL.md`](../skills/stash-ui/SKILL.md) | 支持 skill 的 agent(DSH 等) | 任务分流(用 / 改 / 加)、硬约束、验证命令、已知坑 |
| [`AGENTS.md`](../AGENTS.md) | 任意 AI 编码工具(Codex、Claude Code、Cursor…) | 进仓库先读到「去哪里看」 |
| [`DESIGN.md`](../DESIGN.md) / [`docs/COMPONENTS.md`](COMPONENTS.md) / [`docs/ADDING-A-COMPONENT.md`](ADDING-A-COMPONENT.md) | 人与 AI | 唯一事实来源(规则、契约、流程) |
skill 的内容刻意很短(约 80 行),因为它解决的是**入口问题**:
AI 不需要每次都把 5 份文档读一遍,而是先被路由到正确的文档和验收命令。
## 2. 三种接入方式
### 2.1 直接读文件(最通用,零配置)
任何能读仓库的 AI 都可以从 `skills/stash-ui/SKILL.md` 开始:
```text
读 skills/stash-ui/SKILL.md,按里面的流程执行。
```
Claude Code / Codex / Cursor 这类工具会自动读仓库根的 `AGENTS.md`(或 `CLAUDE.md`),
所以把仓库交给它们时,入口是自动的。
### 2.2 DeepSeek Harness(技能目录)
如果你的 harness 支持扫描技能目录,把 `skills/stash-ui/` 整个复制到技能根目录即可
(目录名即 skill 名,`SKILL.md` 的 frontmatter 里也有 `name: stash-ui`)。
### 2.3 DeepSeek Harness(插件包,官方同款做法)
DSH 的 skill 由 `@deepseek-ai/dsh-skill-filesystem` 提供,插件通过 `cordis.patch.yml`
注册一个 `bundledSkillDir`。最小骨架如下(放在本仓库之外,例如 `stash-ui-dsh-plugin/`):
```text
stash-ui-dsh-plugin/
├── package.json # name: @yourscope/stash-ui-dsh,dsh.bundle.patch: ./cordis.patch.yml
├── cordis.patch.yml
├── lib/index.js # 导出 resolveStashSkillRoot(可选,便于测试)
└── skills/stash-ui/SKILL.md
```
`cordis.patch.yml`(把 `<你的包名>` 换成实际 npm 名):
```yaml
- insert:
- id: stash-ui-skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
providerName: stash-ui
includeDefaultRoots: false
bundledSkillDir: !!js process.getBuiltinModule('node:path').join(
process.getBuiltinModule('node:path').dirname(
process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('<你的包名>/package.json')
),
'skills'
)
```
`package.json` 关键字段:
```json
{
"name": "<你的包名>",
"type": "module",
"files": ["lib", "cordis.patch.yml", "skills"],
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
}
```
装到 DSH profile 后,`skill` 工具的技能目录里就会出现 `stash-ui`;
如果没出现,先确认 patch 里的包名能被 profile 的 `createRequire(baseUrl)` 解析到。
## 3. AI 用这套库时的三条铁律
1. **先查再用**:`COMPONENTS.md §2` 有「用哪个」决策表;能组合就不新增组件。
2. **令牌唯一**:颜色 / 间距 / 字号 / 圆角只走 `--su-*`;直接写 `--su-gray-*` 会在深色下串色。
3. **改 props = 改契约**:组件、展示页、`COMPONENTS.md` + README 三处必须同时更新。
## 4. 验证循环(AI 必须自己跑)
```bash
npm run typecheck && npm run lint && npm run build && npm run build:site
node scripts/screenshot.mjs http://127.0.0.1:5199/#<section> shots/<section>.png
node scripts/screenshot.mjs "http://127.0.0.1:5199/demo.html?scheme=dark" shots/demo-dark.png full
```
- `lint` 要求 **0 warnings**(不是「能过就行」)。
- 视觉改动要贴图核对;深色必须单独看一遍。
- 交付时说明改了哪些组件、契约是否同步、截图路径。
## 5. 维护 skill 的规则
- skill 里**不复制**具体数值、props 表、12 步流程;只写入口、约束、命令、坑。
- 文档改了影响流程的部分(验收清单、命令、目录结构)时,同步改 skill 那几行。
- 新增「已知坑」时,先写到 `DESIGN.md §9`,再决定要不要在 skill 里留一句指针。
- 每次组件数量变化,只改 README / COMPONENTS,skill 里不写死数量(本文档除外)。