team-skills 1.0.0 → 1.1.0
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.
- package/.claude/commands/team-setup.md +1 -1
- package/README.md +44 -98
- package/package.json +1 -1
- package/skills/team-orchestrator/SKILL.md +5 -9
- package/skills/team-review/SKILL.md +1 -1
- package/skills/using-team-skills/SKILL.md +0 -2
- package/src/commands/init.js +11 -8
- package/src/commands/setup.js +4 -2
- package/src/lib/inventory.js +2 -1
|
@@ -11,7 +11,7 @@ argument-hint: [target-dir]
|
|
|
11
11
|
|
|
12
12
|
安装内容:
|
|
13
13
|
|
|
14
|
-
- `skills/*` → `{target-dir}/`(Agent Skills,含
|
|
14
|
+
- `skills/*` → `{target-dir}/`(Agent Skills,含 using-team-skills meta-skill)
|
|
15
15
|
- `skills/_team-rules/*` → `{target-dir}/_team-rules/`(共享规则文件,被所有 Skill 引用)
|
|
16
16
|
- `.claude/commands/*` → `{target-dir}/{name}/SKILL.md`(Commands 也作为 Skill 安装,Cursor 可发现)
|
|
17
17
|
- `.claude/commands/*` → `~/.claude/commands/`(兼容 Claude Code 斜杠命令)
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](CONTRIBUTING.md)
|
|
13
13
|
[](https://conventionalcommits.org)
|
|
14
14
|
|
|
15
|
-
**Spec-Driven · 有向图回退 ·
|
|
15
|
+
**Spec-Driven · 有向图回退 · 质量门禁**
|
|
16
16
|
|
|
17
17
|
</div>
|
|
18
18
|
|
|
@@ -60,104 +60,77 @@ reviewAgent 发现 spec 遗漏 ──→ 自动回退 specAgent
|
|
|
60
60
|
- **反规避条款**:预判 6 种常见借口并逐一反驳
|
|
61
61
|
- **三视角对抗审查**:攻击者/怀疑者/用户视角反向验证
|
|
62
62
|
|
|
63
|
-
### 📊 100 分制评分,不是凭感觉
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
7 项硬门槛(任一不通过则整体不通过)
|
|
67
|
-
5 个维度 × 25 子项
|
|
68
|
-
每个子项有可检查的证据要求
|
|
69
|
-
```
|
|
70
|
-
|
|
71
63
|
---
|
|
72
64
|
|
|
73
|
-
## 🚀
|
|
65
|
+
## 🚀 安装
|
|
74
66
|
|
|
75
67
|
### 前置条件
|
|
76
68
|
|
|
77
69
|
- **Node.js** >= 18
|
|
78
70
|
- **Claude Code** 或 **Cursor**:至少安装其中之一
|
|
79
71
|
|
|
80
|
-
###
|
|
81
|
-
|
|
82
|
-
无需 clone 仓库,直接全局安装 Skills:
|
|
72
|
+
### 一键安装(推荐)
|
|
83
73
|
|
|
84
74
|
```bash
|
|
85
|
-
npx team-skills setup
|
|
75
|
+
npx team-skills@latest setup
|
|
86
76
|
```
|
|
87
77
|
|
|
88
|
-
|
|
78
|
+
自动将 Skills、斜杠命令和 Hooks 以 symlink 方式安装到全局目录。
|
|
79
|
+
|
|
80
|
+
如需频繁使用 CLI,可全局安装:
|
|
89
81
|
|
|
90
82
|
```bash
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
npm install
|
|
94
|
-
npm run setup
|
|
83
|
+
npm i -g team-skills
|
|
84
|
+
team-skills setup
|
|
95
85
|
```
|
|
96
86
|
|
|
97
|
-
###
|
|
87
|
+
### 初始化到项目(可选)
|
|
98
88
|
|
|
99
|
-
将 Skills
|
|
89
|
+
将 Skills 复制到项目中,支持版本控制和自定义:
|
|
100
90
|
|
|
101
91
|
```bash
|
|
102
|
-
npx team-skills init
|
|
103
|
-
# 或在已 clone 的仓库中
|
|
104
|
-
node bin/team-skills.js init /path/to/your-project
|
|
92
|
+
npx team-skills@latest init
|
|
105
93
|
```
|
|
106
94
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
### 安装内容
|
|
110
|
-
|
|
111
|
-
| 安装内容 | 说明 |
|
|
112
|
-
|----------|------|
|
|
113
|
-
| 12 个 Agent Skills | 安装到 `~/.agents/skills/`,Cursor 自动发现 |
|
|
114
|
-
| 斜杠命令 | 安装到 `~/.claude/commands/`,Claude Code 可用 `/team-{name}` |
|
|
115
|
-
| 共享规则 | `_team-rules/` 被所有 Skill 引用 |
|
|
116
|
-
| Hooks(可选) | session-start 钩子,每次新 session 自动加载 |
|
|
117
|
-
|
|
118
|
-
### CLI 命令
|
|
95
|
+
创建 `.team-skills/` 目录,包含 Skills、Hooks 和命令文件。后续更新:
|
|
119
96
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
| `team-skills init [dir]` | 复制到用户项目(消费者模式) |
|
|
124
|
-
| `team-skills update [dir]` | 增量更新 init 的副本 |
|
|
125
|
-
| `team-skills uninstall [target]` | 移除所有 symlink |
|
|
126
|
-
| `team-skills list` | 列出已安装 Skills 及状态 |
|
|
127
|
-
| `team-skills --version` | 显示版本 |
|
|
97
|
+
```bash
|
|
98
|
+
npx team-skills@latest update
|
|
99
|
+
```
|
|
128
100
|
|
|
129
|
-
|
|
101
|
+
### 安装内容
|
|
130
102
|
|
|
131
|
-
|
|
103
|
+
| 内容 | 位置 | 说明 |
|
|
104
|
+
|------|------|------|
|
|
105
|
+
| 12 个 Agent Skills | `~/.agents/skills/` | Cursor 自动发现 |
|
|
106
|
+
| 斜杠命令 | `~/.claude/commands/` | Claude Code `/team-{name}` |
|
|
107
|
+
| 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
108
|
+
| Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
|
|
132
109
|
|
|
133
|
-
|
|
110
|
+
### 验证
|
|
134
111
|
|
|
135
112
|
```bash
|
|
136
|
-
team-
|
|
137
|
-
|
|
138
|
-
# 或在 Claude Code / Cursor 中
|
|
113
|
+
# 在 Claude Code / Cursor 中输入 / 查看 team- 开头的命令
|
|
139
114
|
/using-team-skills
|
|
140
|
-
|
|
141
|
-
# 评估项目协作成熟度
|
|
142
|
-
/team-score
|
|
143
115
|
```
|
|
144
116
|
|
|
145
|
-
###
|
|
117
|
+
### CLI 参考
|
|
146
118
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
119
|
+
| 命令 | 说明 |
|
|
120
|
+
|------|------|
|
|
121
|
+
| `team-skills setup` | symlink 安装到全局目录 |
|
|
122
|
+
| `team-skills init [dir]` | 复制到项目目录 |
|
|
123
|
+
| `team-skills update [dir]` | 增量更新项目副本 |
|
|
124
|
+
| `team-skills uninstall` | 移除所有 symlink |
|
|
125
|
+
| `team-skills list` | 查看安装状态 |
|
|
150
126
|
|
|
151
|
-
|
|
152
|
-
npx team-skills update
|
|
127
|
+
所有命令支持 `--dry-run`。
|
|
153
128
|
|
|
154
|
-
|
|
155
|
-
git pull && npm run setup
|
|
156
|
-
```
|
|
129
|
+
---
|
|
157
130
|
|
|
158
|
-
|
|
131
|
+
## 📖 使用方式
|
|
159
132
|
|
|
160
|
-
|
|
133
|
+
### 全自动编排(推荐)
|
|
161
134
|
|
|
162
135
|
一条命令启动完整流水线,适合从零开始的功能开发:
|
|
163
136
|
|
|
@@ -165,29 +138,15 @@ git pull && npm run setup
|
|
|
165
138
|
/team-orchestrator 实现用户登录功能
|
|
166
139
|
```
|
|
167
140
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
1. H1: 向你确认目标理解
|
|
173
|
-
2. specAgent: 产出 SDD 规格
|
|
174
|
-
3. H2: 向你确认规格方案
|
|
175
|
-
4. implAgent: TDD 实现
|
|
176
|
-
5. testAgent: 四维测试
|
|
177
|
-
6. reviewAgent: 五维审查
|
|
178
|
-
7. H4: 向你交付验收
|
|
179
|
-
|
|
180
|
-
```
|
|
141
|
+
编排器自动完成:H1 确认目标 → specAgent 产出 SDD → H2 确认规格 → implAgent TDD 实现 → testAgent 四维测试 → reviewAgent 五维审查 → H4 验收交付
|
|
181
142
|
|
|
182
|
-
|
|
143
|
+
简单任务可用精简模式:
|
|
183
144
|
|
|
184
145
|
```bash
|
|
185
146
|
/team-orchestrator --compact 修复登录页按钮样式
|
|
186
147
|
```
|
|
187
148
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
你可以在任意阶段单独调用某个 Skill,适合只想做其中一步的场景:
|
|
149
|
+
### 按需调用单个 Skill
|
|
191
150
|
|
|
192
151
|
| 场景 | 命令 |
|
|
193
152
|
|------|------|
|
|
@@ -202,13 +161,6 @@ git pull && npm run setup
|
|
|
202
161
|
| 代码写完了 | `/team-finish` |
|
|
203
162
|
| 不知道用哪个 | `/using-team-skills` |
|
|
204
163
|
|
|
205
|
-
#### 方式三:评估项目成熟度
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
/team-score
|
|
209
|
-
# 输出 100 分制评分报告 + 改进建议
|
|
210
|
-
```
|
|
211
|
-
|
|
212
164
|
---
|
|
213
165
|
|
|
214
166
|
## 🏗️ 核心架构
|
|
@@ -280,7 +232,6 @@ graph TD
|
|
|
280
232
|
Q -->|"遇到 Bug"| DEBUG[🐛 team-debug<br/>→ 根因分析 + 修复]:::skill
|
|
281
233
|
Q -->|"实现完成,准备合并"| FINISH[🏁 team-finish<br/>→ 合并/PR/清理]:::skill
|
|
282
234
|
Q -->|"声称完成"| VERIFY[✅ team-verify<br/>→ 验证证据链]:::skill
|
|
283
|
-
Q -->|"评估项目成熟度"| SCORE[📊 team-score<br/>→ 100 分制评分]:::skill
|
|
284
235
|
Q -->|"不知道用哪个"| USING[🧭 using-team-skills<br/>→ Skill 推荐]:::skill
|
|
285
236
|
Q -->|"需要完整交付流水线"| ORCH[⚙️ team-orchestrator<br/>→ 全自动编排]:::orch
|
|
286
237
|
|
|
@@ -301,7 +252,7 @@ graph TD
|
|
|
301
252
|
|
|
302
253
|
---
|
|
303
254
|
|
|
304
|
-
## 📦 包含
|
|
255
|
+
## 📦 包含 11 个可独立使用的 Skill
|
|
305
256
|
|
|
306
257
|
| Skill | 一句话说明 | 使用场景 |
|
|
307
258
|
|-------|-----------|----------|
|
|
@@ -315,7 +266,6 @@ graph TD
|
|
|
315
266
|
| `team-debug` | 四阶段根因分析 + 修复 | "这个 bug 怎么回事?" |
|
|
316
267
|
| `team-feedback` | 先验证再实施,非表演性同意 | "Review 反馈来了" |
|
|
317
268
|
| `team-finish` | 分支完成处理(合并/PR/保留/丢弃) | "代码写完了" |
|
|
318
|
-
| `team-score` | 100 分制扫描评估 | "项目协作成熟度如何?" |
|
|
319
269
|
| `using-team-skills` | Meta-skill,自动引导你选正确的 Skill | "我该用哪个?" |
|
|
320
270
|
|
|
321
271
|
> 每个 Skill 可独立使用,也可通过 `team-orchestrator` 串联成完整流水线。
|
|
@@ -366,19 +316,15 @@ Team Skills 融合了业界多个 AI 协作框架的精华:
|
|
|
366
316
|
| **OpenSpec** (Fission AI) | Delta Spec 增量规格、RFC 2119 + Given/When/Then |
|
|
367
317
|
| **Karpathy Skills** | 过度抽象防御、死代码清理、困惑管理 |
|
|
368
318
|
| **Agent-Style** | 5 条 LLM 输出质量约束 |
|
|
369
|
-
| **独创** |
|
|
319
|
+
| **独创** | 有向图回退、质量追溯矩阵、消费方契约、H1-H4 人类介入点 |
|
|
370
320
|
|
|
371
321
|
---
|
|
372
322
|
|
|
373
323
|
## 🔧 本地开发
|
|
374
324
|
|
|
375
|
-
### 前置要求
|
|
376
|
-
|
|
377
|
-
- Node.js >= 18
|
|
378
|
-
|
|
379
|
-
### 安装依赖
|
|
380
|
-
|
|
381
325
|
```bash
|
|
326
|
+
git clone https://github.com/andeya/team-skills.git
|
|
327
|
+
cd team-skills
|
|
382
328
|
npm install
|
|
383
329
|
```
|
|
384
330
|
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
|
|
|
56
56
|
- Claude Code:通过 `/team-orchestrator`、`/team-spec`、`/team-impl`、`/team-test`、`/team-review` 调用
|
|
57
57
|
- Cursor:通过 `~/.agents/skills/` 下的 Skill 机制自动发现
|
|
58
58
|
|
|
59
|
-
<!--
|
|
59
|
+
<!-- 质量检查追溯矩阵(内部参考,不产出到文件)
|
|
60
60
|
硬门槛:
|
|
61
61
|
G1 任务规划 → 01-plan.md
|
|
62
62
|
G2 修改边界 → 04-boundary.md
|
|
@@ -65,7 +65,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
|
|
|
65
65
|
G5 资产可执行 → 12-asset-update.md(消费方契约)+ CLAUDE.md
|
|
66
66
|
G6 风险说明 → 05-risk.md + 11-review.md §四
|
|
67
67
|
G7 决策解释 → 08-ai-decisions.md + 15-brief.md
|
|
68
|
-
|
|
68
|
+
质量维度:
|
|
69
69
|
D1.1 分层组织 → CLAUDE.md + {module}/CLAUDE.md + task-rules.md
|
|
70
70
|
D1.2 内容8类 → 02-context.md + CLAUDE.md + review-checklist + delivery-checklist
|
|
71
71
|
D1.3 规则可执行 → 12-asset-update.md(触发条件+可执行指令+示例)
|
|
@@ -231,8 +231,6 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
|
|
|
231
231
|
|
|
232
232
|
判断标准:预计修改文件数 ≤ 3 且无跨模块影响 → Small;修改文件 4-15 → Medium;修改文件 > 15 或跨 2+ 模块 → Large。
|
|
233
233
|
|
|
234
|
-
> **评分注意**:精简模式跳过 01-plan、02-context、05-risk、14-team、15-brief,无法通过 team-score 满分评估。如需满分评估,使用完整模式。
|
|
235
|
-
|
|
236
234
|
**精简模式 vs 完整模式对比**:
|
|
237
235
|
|
|
238
236
|
| 环节 | 完整模式 | 精简模式 |
|
|
@@ -479,9 +477,9 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
|
|
|
479
477
|
| ---- | ---- | ---- | ----------- | ---- |
|
|
480
478
|
```
|
|
481
479
|
|
|
482
|
-
### Step 8
|
|
480
|
+
### Step 8:最终质量检查
|
|
483
481
|
|
|
484
|
-
|
|
482
|
+
逐条核验,确保每个维度都有明确证据。
|
|
485
483
|
|
|
486
484
|
**硬门槛(7 项全部必须通过):**
|
|
487
485
|
|
|
@@ -560,7 +558,7 @@ NO AGENT DISPATCH WITHOUT H1 HUMAN CONFIRMATION FIRST
|
|
|
560
558
|
Team 全流程完成 ✅
|
|
561
559
|
产出目录:docs/tasks/{slug}/
|
|
562
560
|
文件总数:17 个文档(01-15 + prompt-template + task-rules)+ 代码 + 测试 + 资产更新
|
|
563
|
-
|
|
561
|
+
全部质量检查通过
|
|
564
562
|
```
|
|
565
563
|
|
|
566
564
|
## 集成关系
|
|
@@ -576,9 +574,7 @@ Team 全流程完成 ✅
|
|
|
576
574
|
- `team-test` — REQUIRED:编排流程中必须调度测试审计
|
|
577
575
|
- `team-review` — REQUIRED:编排流程中必须调度代码审查
|
|
578
576
|
- `team-finish` — 分支完成处理
|
|
579
|
-
- `team-score` — 评估项目协作成熟度
|
|
580
577
|
|
|
581
578
|
## 下一步
|
|
582
579
|
|
|
583
|
-
- 交付完成后,推荐使用 `team-score` 评估项目协作成熟度
|
|
584
580
|
- 如果发现流程问题,更新 `CLAUDE.md` 和 `skills/_team-rules/` 中的规则
|
|
@@ -317,7 +317,7 @@ NO COMPLETION CLAIMS WITHOUT CONSTITUTIONAL COMPLIANCE CHECK
|
|
|
317
317
|
3. **新规则沉淀**(§二.5):列出本次发现的可固化规则,注明写入位置和理由。对每条新规则,必须同时执行写入——追加到目标文件(CLAUDE.md / 模块 CLAUDE.md / task-rules.md),并在 12-asset-update.md 中记录变更
|
|
318
318
|
4. **改进承诺**(§三):具体行动 + 预期效果
|
|
319
319
|
|
|
320
|
-
> 重点:§二.5
|
|
320
|
+
> 重点:§二.5 的新规则沉淀是质量检查 D4.4 的关键证据,不可省略。"发现规则但未写入目标文件"视为未完成。
|
|
321
321
|
|
|
322
322
|
## 产出文件
|
|
323
323
|
|
|
@@ -56,7 +56,6 @@ NO SKILL RECOMMENDATION WITHOUT SCENE ANALYSIS FIRST
|
|
|
56
56
|
| 声明完成,需验证门禁 | team-verify |
|
|
57
57
|
| 实现完成,需处理分支 | team-finish |
|
|
58
58
|
| 需完整交付流水线 | team-orchestrator |
|
|
59
|
-
| 评估项目协作成熟度 | team-score |
|
|
60
59
|
|
|
61
60
|
## 执行步骤
|
|
62
61
|
|
|
@@ -73,7 +72,6 @@ NO SKILL RECOMMENDATION WITHOUT SCENE ANALYSIS FIRST
|
|
|
73
72
|
- 收到审查反馈 → 推荐 `team-feedback`
|
|
74
73
|
- 实现完成 → 推荐 `team-finish`
|
|
75
74
|
- 需要完整流水线 → 推荐 `team-orchestrator`
|
|
76
|
-
- 评估成熟度 → 推荐 `team-score`
|
|
77
75
|
|
|
78
76
|
### Step 2:推荐并说明理由
|
|
79
77
|
|
package/src/commands/init.js
CHANGED
|
@@ -16,13 +16,15 @@ export function registerInit(program) {
|
|
|
16
16
|
.argument('[dir]', 'Project directory', '.')
|
|
17
17
|
.option('--no-hooks', 'Skip hooks')
|
|
18
18
|
.option('--no-commands', 'Skip command files')
|
|
19
|
+
.option('--with-score', 'Include team-score skill (hidden by default)', false)
|
|
19
20
|
.option('--dry-run', 'Show what would be copied', false)
|
|
20
21
|
.action(runInit);
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
function runInit(dir, opts) {
|
|
24
|
-
const { hooks, commands, dryRun } = opts;
|
|
25
|
+
const { hooks, commands, withScore, dryRun } = opts;
|
|
25
26
|
const installDir = join(dir, LOCAL_INSTALL_DIR);
|
|
27
|
+
const exclude = withScore ? [] : ['team-score'];
|
|
26
28
|
|
|
27
29
|
const existing = readManifest(installDir);
|
|
28
30
|
if (existing) {
|
|
@@ -38,15 +40,16 @@ function runInit(dir, opts) {
|
|
|
38
40
|
|
|
39
41
|
// Copy skills/
|
|
40
42
|
log.heading('复制 Skills');
|
|
41
|
-
const skillsSrc = join(PACKAGE_ROOT, SKILLS_DIR);
|
|
42
43
|
const skillsDst = join(installDir, 'skills');
|
|
43
|
-
|
|
44
|
-
log.info(`${tag}${skillsSrc} → ${skillsDst}`);
|
|
45
|
-
} else {
|
|
46
|
-
copyRecursive(skillsSrc, skillsDst);
|
|
47
|
-
}
|
|
48
|
-
const skills = discoverSkills();
|
|
44
|
+
const skills = discoverSkills(PACKAGE_ROOT, { exclude });
|
|
49
45
|
const rules = discoverSharedRules();
|
|
46
|
+
if (!dryRun) {
|
|
47
|
+
ensureDir(skillsDst);
|
|
48
|
+
for (const s of skills) copyRecursive(s.path, join(skillsDst, s.name));
|
|
49
|
+
const rulesDst = join(skillsDst, '_team-rules');
|
|
50
|
+
ensureDir(rulesDst);
|
|
51
|
+
for (const r of rules) fsCopyFile(r.path, join(rulesDst, r.name));
|
|
52
|
+
}
|
|
50
53
|
fileCount += skills.length + rules.length;
|
|
51
54
|
for (const s of skills) log.success(`${tag}Skill: ${s.name}`);
|
|
52
55
|
for (const r of rules) log.success(`${tag}Rule: ${r.name}`);
|
package/src/commands/setup.js
CHANGED
|
@@ -14,18 +14,20 @@ export function registerSetup(program) {
|
|
|
14
14
|
.argument('[target]', 'Target skills directory', DEFAULT_SKILLS_TARGET)
|
|
15
15
|
.option('--no-hooks', 'Skip hook installation')
|
|
16
16
|
.option('--no-commands', 'Skip Claude Code command symlinks')
|
|
17
|
+
.option('--with-score', 'Include team-score skill (hidden by default)', false)
|
|
17
18
|
.option('--force', 'Overwrite existing symlinks', false)
|
|
18
19
|
.option('--dry-run', 'Show what would be done without doing it', false)
|
|
19
20
|
.action(runSetup);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
function runSetup(target, opts) {
|
|
23
|
-
const { hooks, commands, force, dryRun } = opts;
|
|
24
|
+
const { hooks, commands, withScore, force, dryRun } = opts;
|
|
24
25
|
const tag = dryRun ? '[dry-run] ' : '';
|
|
26
|
+
const exclude = withScore ? [] : ['team-score'];
|
|
25
27
|
let count = 0;
|
|
26
28
|
|
|
27
29
|
log.heading('安装 Agent Skills');
|
|
28
|
-
const skills = discoverSkills();
|
|
30
|
+
const skills = discoverSkills(PACKAGE_ROOT, { exclude });
|
|
29
31
|
for (const skill of skills) {
|
|
30
32
|
const dest = join(target, skill.name);
|
|
31
33
|
const result = createSymlinkSafe(skill.path, dest, { force, dryRun });
|
package/src/lib/inventory.js
CHANGED
|
@@ -2,13 +2,14 @@ import { readdirSync, statSync, existsSync } from 'node:fs';
|
|
|
2
2
|
import { join, basename } from 'node:path';
|
|
3
3
|
import { PACKAGE_ROOT, SKILLS_DIR, HOOKS_DIR, COMMANDS_DIR } from './constants.js';
|
|
4
4
|
|
|
5
|
-
export function discoverSkills(root = PACKAGE_ROOT) {
|
|
5
|
+
export function discoverSkills(root = PACKAGE_ROOT, { exclude = [] } = {}) {
|
|
6
6
|
const skillsDir = join(root, SKILLS_DIR);
|
|
7
7
|
if (!existsSync(skillsDir)) return [];
|
|
8
8
|
|
|
9
9
|
return readdirSync(skillsDir)
|
|
10
10
|
.filter(name => {
|
|
11
11
|
if (name.startsWith('_') || name === 'CLAUDE.md') return false;
|
|
12
|
+
if (exclude.includes(name)) return false;
|
|
12
13
|
const full = join(skillsDir, name);
|
|
13
14
|
return statSync(full).isDirectory();
|
|
14
15
|
})
|