huhaa-myskills 0.2.13 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +9 -375
  2. package/bin/huhaa-myskills.mjs +194 -12
  3. package/{scripts → build}/verify.mjs +3 -1
  4. package/docs/Frontend-Spec.md +1149 -0
  5. package/docs/assets/layout-wireframe.png +0 -0
  6. package/docs/assets/theme-reference.png +0 -0
  7. package/docs/scan_rules.md +172 -0
  8. package/package.json +33 -9
  9. package/packages/scanner/src/adapters/directory-skill.mjs +239 -0
  10. package/packages/scanner/src/adapters/skill-adapter.mjs +345 -0
  11. package/packages/scanner/src/icon/brand-map.mjs +84 -0
  12. package/packages/scanner/src/icon/icon-extractor.mjs +246 -0
  13. package/packages/scanner/src/index.mjs +107 -82
  14. package/packages/scanner/src/types.d.ts +18 -0
  15. package/packages/scanner/test/icon.test.mjs +61 -0
  16. package/packages/scanner/test/scanner.test.mjs +37 -41
  17. package/packages/scanner/test/skill-adapter.test.mjs +70 -0
  18. package/packages/scanner/tests/directory-skill.test.mjs +93 -0
  19. package/packages/scanner/tests/scanner-integration.test.mjs +139 -0
  20. package/packages/server/src/index.mjs +164 -12
  21. package/packages/server/src/labels.mjs +62 -0
  22. package/packages/server/test/server.test.mjs +1 -1
  23. package/packages/web/README.md +33 -2
  24. package/packages/web/dist/assets/index-BCY2cRaO.js +175 -0
  25. package/packages/web/dist/assets/index-DALKjJPi.css +1 -0
  26. package/packages/web/dist/favicon-16x16.png +0 -0
  27. package/packages/web/dist/favicon-192x192.png +0 -0
  28. package/packages/web/dist/favicon-32x32.png +0 -0
  29. package/packages/web/dist/favicon-512x512.png +0 -0
  30. package/packages/web/dist/favicon-source.svg +5 -0
  31. package/packages/web/dist/index.html +23 -9
  32. package/packages/web/index.html +22 -8
  33. package/packages/web/package-lock.json +2989 -0
  34. package/packages/web/package.json +21 -8
  35. package/packages/web/postcss.config.js +6 -0
  36. package/packages/web/public/favicon-16x16.png +0 -0
  37. package/packages/web/public/favicon-192x192.png +0 -0
  38. package/packages/web/public/favicon-32x32.png +0 -0
  39. package/packages/web/public/favicon-512x512.png +0 -0
  40. package/packages/web/public/favicon-source.svg +5 -0
  41. package/packages/web/src/App.test.ts +40 -0
  42. package/packages/web/src/App.tsx +177 -0
  43. package/packages/web/src/components/ComingSoon.tsx +14 -0
  44. package/packages/web/src/components/layout/Sidebar.test.tsx +74 -0
  45. package/packages/web/src/components/layout/Sidebar.tsx +114 -0
  46. package/packages/web/src/components/layout/Topbar.tsx +74 -0
  47. package/packages/web/src/components/ui/ActionButton.tsx +48 -0
  48. package/packages/web/src/components/ui/button.tsx +48 -0
  49. package/packages/web/src/components/ui/card.tsx +45 -0
  50. package/packages/web/src/components/views/DashboardView.tsx +122 -0
  51. package/packages/web/src/components/views/OtherSkillsView.test.tsx +126 -0
  52. package/packages/web/src/components/views/OtherSkillsView.tsx +306 -0
  53. package/packages/web/src/components/views/SettingsView.tsx +95 -0
  54. package/packages/web/src/components/views/SkillDetail.test.tsx +57 -0
  55. package/packages/web/src/components/views/SkillDetail.tsx +81 -0
  56. package/packages/web/src/components/views/SkillsView.test.ts +28 -0
  57. package/packages/web/src/components/views/SkillsView.tsx +226 -0
  58. package/packages/web/src/hooks/QUICK_REFERENCE.md +165 -0
  59. package/packages/web/src/hooks/README.md +378 -0
  60. package/packages/web/src/hooks/__tests__/useOtherSkills.test.ts +422 -0
  61. package/packages/web/src/hooks/__tests__/useSkillIcons.test.ts +272 -0
  62. package/packages/web/src/hooks/useLiveReload.ts +20 -0
  63. package/packages/web/src/hooks/useOtherSkills.ts +387 -0
  64. package/packages/web/src/hooks/useSkillIcons.ts +248 -0
  65. package/packages/web/src/hooks/useTheme.ts +36 -0
  66. package/packages/web/src/index.css +161 -0
  67. package/packages/web/src/lib/api.test.ts +47 -0
  68. package/packages/web/src/lib/api.ts +77 -0
  69. package/packages/web/src/lib/cn.ts +7 -0
  70. package/packages/web/src/lib/editors.test.ts +30 -0
  71. package/packages/web/src/lib/editors.ts +70 -0
  72. package/packages/web/src/lib/markdown.test.ts +27 -0
  73. package/packages/web/src/lib/markdown.ts +14 -0
  74. package/packages/web/src/main.tsx +13 -0
  75. package/packages/web/src/types/index.ts +62 -0
  76. package/packages/web/src/types/other-skill.ts +88 -0
  77. package/packages/web/src/types/skill.ts +136 -0
  78. package/packages/web/src/types.ts +47 -0
  79. package/packages/web/src/vite-env.d.ts +1 -0
  80. package/packages/web/tailwind.config.ts +66 -0
  81. package/packages/web/tsconfig.json +28 -0
  82. package/packages/web/vite.config.ts +36 -0
  83. package/packages/web/vitest.config.ts +21 -0
  84. package/packages/web/vitest.setup.ts +1 -0
  85. package/scripts/activate-data-sources.sh +223 -0
  86. package/scripts/brand-completion.py +586 -0
  87. package/scripts/init-nextjs-project.sh +421 -0
  88. package/scripts/install-and-sync.sh +209 -0
  89. package/scripts/start-dev.sh +72 -0
  90. package/docs/GUIDE.md +0 -190
  91. package/docs/PLAN.md +0 -359
  92. package/docs/RULES.md +0 -329
  93. package/docs/RUNBOOK-myskills.md +0 -258
  94. package/docs/SYNC-SKILLS.md +0 -259
  95. package/docs/releases/README.md +0 -47
  96. package/docs/releases/v0.1.0.md +0 -256
  97. package/docs/releases/v0.1.1.md +0 -297
  98. package/docs/releases/v0.1.2.md +0 -207
  99. package/docs/releases/v0.1.3.md +0 -269
  100. package/docs/todo/v0.1.2.md +0 -98
  101. package/docs/todo/v0.1.3.md +0 -40
  102. package/docs/todo/v0.1.4.md +0 -36
  103. package/docs/todo/v0.1.5.md +0 -41
  104. package/docs/todo/v0.1.6.md +0 -43
  105. package/docs/todo/v0.1.7.md +0 -38
  106. package/docs/todo/v0.1.8.md +0 -36
  107. package/docs/todo/v0.1.9.md +0 -54
  108. package/packages/web/dist/assets/index-BPepSb3q.js +0 -36
  109. package/packages/web/dist/assets/index-CIGkgT5w.css +0 -1
  110. package/packages/web/src/App.vue +0 -483
  111. package/packages/web/src/components/AppTree.vue +0 -230
  112. package/packages/web/src/components/DirectoryTree.vue +0 -263
  113. package/packages/web/src/components/SkillTree.vue +0 -208
  114. package/packages/web/src/lib/api.js +0 -43
  115. package/packages/web/src/main.js +0 -6
  116. package/packages/web/src/stores/i18n.js +0 -161
  117. package/packages/web/src/stores/skills.js +0 -287
  118. package/packages/web/src/styles.css +0 -365
  119. package/packages/web/vite.config.js +0 -17
  120. /package/{scripts → build}/build-web.mjs +0 -0
  121. /package/{scripts → build}/prepare-publish.mjs +0 -0
package/docs/RULES.md DELETED
@@ -1,329 +0,0 @@
1
- # 版本发布规范
2
-
3
- 本文档定义 HuHaa-MySkills 版本发布、更新日志、Issue 和 Pull Request 的标准格式。
4
-
5
- ## 版本号规则
6
-
7
- 遵循 Semantic Versioning:
8
-
9
- - `v0.1.x` - Alpha 阶段(核心功能开发)
10
- - `v1.0.0+` - 稳定版(计划 v0.1.9 之后)
11
-
12
- ### 版本发布清单
13
-
14
- | 环节 | 检查项 |
15
- |------|--------|
16
- | 代码 | [ ] 所有测试通过 / [ ] 代码审查完成 / [ ] 无 TODO 注释 |
17
- | 文档 | [ ] README 更新 / [ ] CHANGELOG 更新 / [ ] API 文档更新 |
18
- | 发布 | [ ] git tag 创建 / [ ] GitHub Release 发布 / [ ] npm publish(如适用) |
19
- | 验证 | [ ] 真实环境测试 / [ ] 向后兼容性检查 |
20
-
21
- ## CHANGELOG 格式
22
-
23
- 参考 [Keep a Changelog](https://keepachangelog.com/):
24
-
25
- ```markdown
26
- # Changelog
27
-
28
- ## [v0.1.2] - 2026-06-25
29
-
30
- ### Added
31
- - Keyboard shortcuts support (/, Escape, arrow keys)
32
- - Virtual scrolling for 800+ items
33
- - `/api/search` endpoint with filter syntax
34
-
35
- ### Fixed
36
- - Search performance optimization
37
- - YAML frontmatter parsing robustness
38
-
39
- ### Changed
40
- - Improved error handling in adapters
41
-
42
- ### Removed
43
- - Legacy cache format
44
-
45
- ### Deprecated
46
- - Old search API (use `/api/search` instead)
47
-
48
- ## [v0.1.1] - 2026-06-18
49
-
50
- ### Added
51
- - npm global install support
52
- - Normalized bin path for cross-platform compatibility
53
- ```
54
-
55
- ## Git Commit 格式
56
-
57
- 遵循 Conventional Commits:
58
-
59
- ```
60
- <type>(<scope>): <subject>
61
-
62
- <body>
63
-
64
- <footer>
65
- ```
66
-
67
- ### 类型(type)
68
-
69
- - **feat** - 新功能
70
- - **fix** - Bug 修复
71
- - **docs** - 文档变更
72
- - **style** - 代码风格(不影响功能)
73
- - **refactor** - 重构(不改变外部行为)
74
- - **perf** - 性能优化
75
- - **test** - 测试相关
76
- - **chore** - 工具、依赖更新
77
-
78
- ### 范围(scope)
79
-
80
- - `scanner` - 扫描器模块
81
- - `server` - HTTP 服务器
82
- - `web` - 前端界面
83
- - `adapter` - 适配器系列
84
- - `cli` - 命令行工具
85
- - `docs` - 文档
86
-
87
- ### 示例
88
-
89
- ```bash
90
- feat(web): add keyboard shortcuts support
91
-
92
- - Implement / key to focus search box
93
- - Implement Escape to clear search
94
- - Implement arrow keys to navigate list
95
-
96
- Closes #42
97
- ```
98
-
99
- ## GitHub Issues 模板
100
-
101
- ### Bug Report
102
-
103
- ```markdown
104
- ## 描述问题
105
-
106
- 清晰简洁的问题描述。
107
-
108
- ## 复现步骤
109
-
110
- 1. ...
111
- 2. ...
112
- 3. ...
113
-
114
- ## 期望行为
115
-
116
- 应该发生什么?
117
-
118
- ## 实际行为
119
-
120
- 实际发生了什么?
121
-
122
- ## 环境
123
-
124
- - 操作系统:macOS / Linux / Windows
125
- - Node.js 版本:20.x
126
- - HuHaa-MySkills 版本:v0.1.1
127
-
128
- ## 额外信息
129
-
130
- 日志、截图等。
131
- ```
132
-
133
- ### Feature Request
134
-
135
- ```markdown
136
- ## 功能描述
137
-
138
- 这个功能要解决什么问题?
139
-
140
- ## 使用场景
141
-
142
- 什么时候会用到?
143
-
144
- ## 建议的实现方式
145
-
146
- 你有什么想法吗?
147
-
148
- ## 替代方案
149
-
150
- 有其他可能的实现吗?
151
- ```
152
-
153
- ## Pull Request 模板
154
-
155
- ```markdown
156
- ## 变更说明
157
-
158
- 这个 PR 做了什么?简要描述关键变更。
159
-
160
- ## 类型
161
-
162
- - [ ] Bug 修复
163
- - [ ] 新功能
164
- - [ ] 文档更新
165
- - [ ] 性能优化
166
-
167
- ## 相关 Issue
168
-
169
- Fixes #123
170
-
171
- ## 测试
172
-
173
- - [ ] 本地测试通过
174
- - [ ] 新增单元测试
175
- - [ ] 回归测试通过
176
-
177
- ## 检查清单
178
-
179
- - [ ] 代码风格符合项目规范
180
- - [ ] 无新的 linting 警告
181
- - [ ] CHANGELOG 已更新
182
- - [ ] 文档已更新
183
- - [ ] 提交消息格式正确
184
- ```
185
-
186
- ## Release Notes 模板
187
-
188
- ```markdown
189
- # v0.1.2: 搜索与交互优化
190
-
191
- ## 概览
192
-
193
- 这个版本改进了搜索体验和 UI 交互,支持键盘快捷键和高性能虚拟滚动。
194
-
195
- ## ✨ 新功能
196
-
197
- ### 键盘快捷键
198
- - `/ ` - 聚焦搜索框
199
- - `Esc` - 清空搜索
200
- - `↑ ↓` - 导航列表
201
-
202
- ### 快速搜索 API
203
- ```
204
- GET /api/search?q=...&source=hermes&brand=OpenAI
205
- ```
206
-
207
- ## 🐛 Bug 修复
208
-
209
- - 修复 frontmatter 解析容错性 (#45)
210
- - 改进 SSE 连接稳定性 (#48)
211
-
212
- ## 📊 性能
213
-
214
- - 列表虚拟滚动:支持 800+ 条目无卡顿
215
- - 搜索延迟:< 5ms(Fuse.js)
216
- - 内存占用:保持 ~50MB
217
-
218
- ## 🔄 更新指南
219
-
220
- ```bash
221
- # 从 npm 全局安装更新
222
- npm update -g github:aquarkgn/HuHaa-MySkills
223
-
224
- # 或从源码
225
- cd ~/Project/HuHaa-MySkills
226
- git pull origin main
227
- npm install
228
- ```
229
-
230
- ## 🙏 贡献者
231
-
232
- 感谢 @contributor1 @contributor2 的贡献。
233
-
234
- ---
235
-
236
- **完整变更日志** - [CHANGELOG.md](../CHANGELOG.md)
237
- ```
238
-
239
- ## GitHub Actions 工作流
240
-
241
- ### 验证工作流 (.github/workflows/verify.yml)
242
-
243
- ```yaml
244
- name: Verify
245
-
246
- on:
247
- push:
248
- branches: [main]
249
- pull_request:
250
- branches: [main]
251
-
252
- jobs:
253
- verify:
254
- runs-on: macos-latest
255
- steps:
256
- - uses: actions/checkout@v4
257
- - uses: actions/setup-node@v4
258
- with:
259
- node-version: '20'
260
- - run: npm ci
261
- - run: npm run verify
262
- - run: npm test
263
- ```
264
-
265
- ### 发布工作流 (.github/workflows/release.yml)
266
-
267
- ```yaml
268
- name: Release
269
-
270
- on:
271
- push:
272
- tags:
273
- - 'v*'
274
-
275
- jobs:
276
- release:
277
- runs-on: macos-latest
278
- steps:
279
- - uses: actions/checkout@v4
280
- - uses: actions/setup-node@v4
281
- with:
282
- node-version: '20'
283
- - run: npm ci
284
- - run: npm run verify
285
- - run: npm publish # 如果要发布到 npm
286
- - name: Create Release
287
- uses: actions/create-release@v1
288
- env:
289
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
290
- ```
291
-
292
- ## 文档结构
293
-
294
- ```
295
- docs/
296
- ├── README.md # 项目总览
297
- ├── GUIDE.md # 快速启动指南(本文件)
298
- ├── PLAN.md # 架构和设计文档
299
- ├── RULES.md # 本发布规范
300
- ├── CHANGELOG.md # 变更日志
301
- ├── RUNBOOK-*.md # 操作手册
302
- ├── ARCHITECTURE.md # 详细架构(TODO)
303
- ├── API.md # API 参考(TODO)
304
- ├── CONTRIBUTING.md # 贡献指南(TODO)
305
- └── todo/
306
- ├── v0.1.2.md
307
- ├── v0.1.3.md
308
- └── ...
309
- ```
310
-
311
- ## 标签(Labels)
312
-
313
- 推荐在 GitHub Issues 中使用以下标签:
314
-
315
- | 标签 | 说明 |
316
- |------|------|
317
- | `bug` | 缺陷报告 |
318
- | `enhancement` | 功能请求 |
319
- | `documentation` | 文档改进 |
320
- | `good first issue` | 适合新贡献者 |
321
- | `help wanted` | 寻求帮助 |
322
- | `question` | 提问 |
323
- | `wontfix` | 无意修复 |
324
- | `duplicate` | 重复问题 |
325
- | `v0.1.x` | 版本标记 |
326
-
327
- ---
328
-
329
- **相关文档** → [CONTRIBUTING.md(待完善)](./CONTRIBUTING.md)
@@ -1,258 +0,0 @@
1
- # RUNBOOK: HuHaa-MySkills
2
-
3
- This runbook is the production/operator note for the local HuHaa-MySkills service.
4
-
5
- ## Service identity
6
-
7
- - Name: HuHaa-MySkills
8
- - Purpose: local browser catalog for AI-agent skills, plugins, MCP configs, and runbooks
9
- - Default URL: `http://127.0.0.1:11520`
10
- - Default data dir: `~/.config/huhaa-myskills/`
11
- - Override data dir: `HUHAA_HOME=/path/to/dir`
12
- - Default preferred port: `11520`
13
- - Override port: `PORT=11530`
14
- - Bind address: `127.0.0.1` only
15
-
16
- ## Main commands
17
-
18
- ```bash
19
- npm install
20
- npm run init
21
- npm start
22
- npm test
23
- npm run verify
24
- npm run purge
25
- ```
26
-
27
- ## Files and directories
28
-
29
- Runtime/user data:
30
-
31
- ```text
32
- ~/.config/huhaa-myskills/sources.yaml
33
- ~/.config/huhaa-myskills/cache.json
34
- ~/.config/huhaa-myskills/state.json
35
- ```
36
-
37
- Repository layout:
38
-
39
- ```text
40
- service/bin/huhaa-myskills.mjs
41
- service/config/sources.example.yaml
42
- service/packages/scanner/src/index.mjs
43
- service/packages/server/src/index.mjs
44
- service/packages/web/src/App.vue
45
- service/scripts/verify.mjs
46
- ```
47
-
48
- ## Healthy state
49
-
50
- ```bash
51
- curl -s http://127.0.0.1:11520/api/health
52
- ```
53
-
54
- Expected shape:
55
-
56
- ```json
57
- {"ok":true,"port":11520,"items":188,"version":"0.1.0","phase":"P6"}
58
- ```
59
-
60
- The exact `items` count depends on local sources.
61
-
62
- ## Full verification
63
-
64
- ```bash
65
- npm run verify
66
- ```
67
-
68
- Expected final line:
69
-
70
- ```text
71
- [verify] PASS build + tests + HTTP/API/static smoke checks
72
- ```
73
-
74
- The verify script proves:
75
-
76
- 1. Vue SPA builds.
77
- 2. Scanner/server tests pass.
78
- 3. A real Fastify server starts on loopback.
79
- 4. `/api/health`, `/api/skills`, `/api/skills/:id`, `/api/stats`, and `/api/reload` work.
80
- 5. Built JS/CSS assets are served with correct content types.
81
- 6. Temporary runtime data is removed.
82
-
83
- ## Troubleshooting
84
-
85
- ### Page does not open
86
-
87
- Check service:
88
-
89
- ```bash
90
- curl -s http://127.0.0.1:11520/api/health
91
- ```
92
-
93
- If it fails, start manually:
94
-
95
- ```bash
96
- npm start
97
- ```
98
-
99
- If port is busy:
100
-
101
- ```bash
102
- PORT=11530 npm start
103
- ```
104
-
105
- The CLI will also try fallback ports when the preferred port is unavailable.
106
-
107
- ### Page opens but is blank
108
-
109
- Build assets:
110
-
111
- ```bash
112
- npm run build:web
113
- npm start
114
- ```
115
-
116
- Check static assets from `index.html`:
117
-
118
- ```bash
119
- curl -I http://127.0.0.1:11520/
120
- curl -I http://127.0.0.1:11520/assets/<asset>.js
121
- curl -I http://127.0.0.1:11520/assets/<asset>.css
122
- ```
123
-
124
- Expected content types:
125
-
126
- ```text
127
- text/html; charset=utf-8
128
- text/javascript; charset=utf-8
129
- text/css; charset=utf-8
130
- ```
131
-
132
- ### No skills or too few skills
133
-
134
- Check config:
135
-
136
- ```bash
137
- sed -n '1,220p' ~/.config/huhaa-myskills/sources.yaml
138
- ```
139
-
140
- Run scan debug:
141
-
142
- ```bash
143
- HUHAA_DEBUG=1 npm run scan >/tmp/huhaa-skills.json
144
- ```
145
-
146
- Common causes:
147
-
148
- - source root path does not exist
149
- - source is disabled
150
- - file is larger than `limits.maxFileBytes`
151
- - glob does not match the target file
152
- - project runbooks are outside configured roots
153
-
154
- ### MCP secrets appear in UI
155
-
156
- They should not. Verify using tests:
157
-
158
- ```bash
159
- npm test
160
- ```
161
-
162
- Specific redaction behavior lives in:
163
-
164
- ```text
165
- service/packages/scanner/src/adapters/mcp-config.mjs
166
- ```
167
-
168
- The adapter redacts keys matching token/key/secret/password/auth/cookie-style names and common inline secret patterns before writing `raw` or `preview`.
169
-
170
- ### Reload does not update page
171
-
172
- Manual reload:
173
-
174
- ```bash
175
- curl -s -X POST http://127.0.0.1:11520/api/reload
176
- curl -s http://127.0.0.1:11520/api/reload-state
177
- ```
178
-
179
- Watch events endpoint:
180
-
181
- ```bash
182
- curl -N http://127.0.0.1:11520/api/events
183
- ```
184
-
185
- If watcher is unreliable on a synced/cloud directory, use manual reload. The server never clears the old snapshot on reload failure; it keeps the last good data.
186
-
187
- ### Copy buttons do not work
188
-
189
- On macOS, copy uses `pbcopy` on the server side.
190
-
191
- Check:
192
-
193
- ```bash
194
- command -v pbcopy
195
- ```
196
-
197
- The tests use a fake temporary `pbcopy` and do not touch the real clipboard.
198
-
199
- ### Open in Cursor does not work
200
-
201
- Check Cursor CLI:
202
-
203
- ```bash
204
- command -v cursor
205
- ```
206
-
207
- If missing, install Cursor shell command from Cursor itself, or use the path copy/reveal buttons instead.
208
-
209
- ### Finder reveal does not work
210
-
211
- Finder reveal uses:
212
-
213
- ```bash
214
- open -R <path>
215
- ```
216
-
217
- This is macOS-only.
218
-
219
- ## Public release checklist
220
-
221
- Before pushing a public repository:
222
-
223
- ```bash
224
- npm run verify
225
- ```
226
-
227
- Then check ignored/generated files:
228
-
229
- ```bash
230
- git status --short
231
- git check-ignore -v node_modules service/packages/web/dist 2>/dev/null || true
232
- ```
233
-
234
- Check for obvious secrets outside ignored directories:
235
-
236
- ```bash
237
- git grep -n -E '(ghp_|sk-[A-Za-z0-9_-]{12,}|Bearer [A-Za-z0-9._~+/=-]{12,}|API[_-]?KEY|SECRET|PASSWORD|TOKEN)' -- . ':!service/packages/scanner/test/scanner.test.mjs'
238
- ```
239
-
240
- Expected matches should be code patterns/documentation only, not real credential values.
241
-
242
- ## Recovery
243
-
244
- Reset runtime config:
245
-
246
- ```bash
247
- npm run purge
248
- npm run init
249
- npm start
250
- ```
251
-
252
- Remove code checkout:
253
-
254
- ```bash
255
- rm -rf /path/to/HuHaa-MySkills
256
- ```
257
-
258
- `purge` intentionally touches only the runtime data dir, never the repository.