monol-plugin-scout 2.0.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/plugins/marketplace.json +12 -0
- package/.claude/plugins/monol-plugin-scout/CLAUDE.md +135 -0
- package/.claude/plugins/monol-plugin-scout/combos/full-review.yaml +33 -0
- package/.claude/plugins/monol-plugin-scout/combos/quick-commit.yaml +15 -0
- package/.claude/plugins/monol-plugin-scout/commands/audit.md +99 -0
- package/.claude/plugins/monol-plugin-scout/commands/cleanup.md +123 -0
- package/.claude/plugins/monol-plugin-scout/commands/compare.md +92 -0
- package/.claude/plugins/monol-plugin-scout/commands/explore.md +118 -0
- package/.claude/plugins/monol-plugin-scout/commands/fork.md +111 -0
- package/.claude/plugins/monol-plugin-scout/commands/scout.md +209 -0
- package/.claude/plugins/monol-plugin-scout/config.yaml +76 -0
- package/.claude/plugins/monol-plugin-scout/data/history.json +36 -0
- package/.claude/plugins/monol-plugin-scout/data/usage.json +49 -0
- package/.claude/plugins/monol-plugin-scout/overrides/code-review/override.md +21 -0
- package/.claude/plugins/monol-plugin-scout/plugin.json +8 -0
- package/.claude/plugins/monol-plugin-scout/skills/plugin-evaluation.md +227 -0
- package/CHANGELOG.md +41 -0
- package/README.md +115 -0
- package/docs/DEV_LOG.md +115 -0
- package/docs/FEATURE_SPEC.md +284 -0
- package/docs/SKILL.md +227 -0
- package/docs/TEST_RESULTS.md +155 -0
- package/docs/USER_GUIDE.md +364 -0
- package/docs/references/license-compatibility.md +58 -0
- package/docs/references/scoring-methodology.md +73 -0
- package/docs/references/security-checklist.md +91 -0
- package/docs/scripts/fetch-plugin-metadata.sh +61 -0
- package/examples/basic-usage.md +124 -0
- package/package.json +31 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
# Plugin Scout v2 - 사용자 가이드
|
|
2
|
+
|
|
3
|
+
## 개요
|
|
4
|
+
|
|
5
|
+
Plugin Scout는 Claude Code 플러그인을 발견, 평가, 관리하는 에이전트입니다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 빠른 시작
|
|
10
|
+
|
|
11
|
+
### 플러그인 추천 받기
|
|
12
|
+
```
|
|
13
|
+
플러그인 추천해줘
|
|
14
|
+
이 프로젝트에 맞는 플러그인 찾아줘
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 플러그인 비교하기
|
|
18
|
+
```
|
|
19
|
+
/scout compare typescript-lsp pyright-lsp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 미사용 플러그인 정리
|
|
23
|
+
```
|
|
24
|
+
/scout cleanup
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 주요 기능
|
|
30
|
+
|
|
31
|
+
### 1. 프로젝트 스캔 & 추천
|
|
32
|
+
|
|
33
|
+
프로젝트를 분석하여 적합한 플러그인을 추천합니다.
|
|
34
|
+
|
|
35
|
+
**작동 방식:**
|
|
36
|
+
1. `package.json`, `requirements.txt` 등 설정 파일 분석
|
|
37
|
+
2. 언어/프레임워크 감지
|
|
38
|
+
3. 마켓플레이스 스캔
|
|
39
|
+
4. 종합 점수 계산 (프로젝트 매칭 40% + 인기도 30% + 보안 30%)
|
|
40
|
+
5. 인터뷰식 설치 제안
|
|
41
|
+
|
|
42
|
+
**사용 예시:**
|
|
43
|
+
```
|
|
44
|
+
> 플러그인 추천해줘
|
|
45
|
+
|
|
46
|
+
📊 Plugin Scout Report
|
|
47
|
+
|
|
48
|
+
프로젝트: TypeScript + React + Node.js
|
|
49
|
+
|
|
50
|
+
추천 플러그인:
|
|
51
|
+
1. typescript-lsp (93점) - TS/JS 코드 인텔리전스
|
|
52
|
+
2. code-review (88점) - PR 자동 리뷰
|
|
53
|
+
|
|
54
|
+
설치할까요?
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### 2. `/scout compare` - 플러그인 비교
|
|
60
|
+
|
|
61
|
+
두 개 이상의 플러그인을 비교합니다.
|
|
62
|
+
|
|
63
|
+
**사용법:**
|
|
64
|
+
```
|
|
65
|
+
/scout compare <plugin1> <plugin2> [plugin3]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**예시:**
|
|
69
|
+
```
|
|
70
|
+
> /scout compare sentry firebase
|
|
71
|
+
|
|
72
|
+
┌─────────────┬─────────────────┬─────────────────┐
|
|
73
|
+
│ │ sentry │ firebase │
|
|
74
|
+
├─────────────┼─────────────────┼─────────────────┤
|
|
75
|
+
│ 카테고리 │ monitoring │ database │
|
|
76
|
+
│ 점수 │ 95 │ 95 │
|
|
77
|
+
│ 설치 │ ✅ │ ❌ │
|
|
78
|
+
└─────────────┴─────────────────┴─────────────────┘
|
|
79
|
+
|
|
80
|
+
💡 둘 다 프로젝트에 적합합니다. 용도가 다르므로 함께 사용 가능.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### 3. `/scout cleanup` - 미사용 플러그인 정리
|
|
86
|
+
|
|
87
|
+
30일 이상 사용하지 않은 플러그인을 정리 제안합니다.
|
|
88
|
+
|
|
89
|
+
**사용법:**
|
|
90
|
+
```
|
|
91
|
+
/scout cleanup
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**예시:**
|
|
95
|
+
```
|
|
96
|
+
📊 플러그인 정리 제안
|
|
97
|
+
|
|
98
|
+
오래된 미사용 플러그인이 1개 있습니다:
|
|
99
|
+
|
|
100
|
+
• old-plugin
|
|
101
|
+
설치: 2025-10-01 (98일 전)
|
|
102
|
+
마지막 사용: 2025-10-15 (84일 전)
|
|
103
|
+
|
|
104
|
+
나머지 6개 플러그인은 최근 활발히 사용 중입니다. ✅
|
|
105
|
+
|
|
106
|
+
[제거할 플러그인 선택]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 4. 작업 완료 후 추천
|
|
112
|
+
|
|
113
|
+
작업 완료 시 관련 플러그인을 간략히 추천합니다.
|
|
114
|
+
|
|
115
|
+
**트리거 시점:**
|
|
116
|
+
- PR 생성 후
|
|
117
|
+
- 새 기능 구현 후
|
|
118
|
+
- 테스트 작성 후
|
|
119
|
+
- 에러 디버깅 후
|
|
120
|
+
|
|
121
|
+
**예시:**
|
|
122
|
+
```
|
|
123
|
+
💡 관련 플러그인 팁이 있어요. 볼까요?
|
|
124
|
+
• 설치된 거 활용법
|
|
125
|
+
• 새 플러그인 추천
|
|
126
|
+
• 다음에
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 익스텐션 시스템
|
|
132
|
+
|
|
133
|
+
### 5. 플러그인 커스터마이징 (Override)
|
|
134
|
+
|
|
135
|
+
기존 플러그인에 커스텀 규칙을 추가합니다.
|
|
136
|
+
|
|
137
|
+
**위치:**
|
|
138
|
+
```
|
|
139
|
+
.claude/plugin-overrides/<plugin-name>/override.md
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**예시 (code-review 커스텀):**
|
|
143
|
+
```markdown
|
|
144
|
+
---
|
|
145
|
+
plugin: code-review
|
|
146
|
+
version: ">=1.0.0"
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
# 추가 체크 항목
|
|
150
|
+
- 한국어 주석 권장
|
|
151
|
+
- console.log 사용 금지
|
|
152
|
+
- any 타입 경고
|
|
153
|
+
|
|
154
|
+
# 무시 항목
|
|
155
|
+
- 테스트 파일 (*.test.ts)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### 6. 플러그인 조합 (Combos)
|
|
161
|
+
|
|
162
|
+
여러 플러그인을 순차 실행하는 워크플로우를 정의합니다.
|
|
163
|
+
|
|
164
|
+
**위치:**
|
|
165
|
+
```
|
|
166
|
+
.claude/combos/<combo-name>.yaml
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**예시 (full-review.yaml):**
|
|
170
|
+
```yaml
|
|
171
|
+
name: full-review
|
|
172
|
+
trigger: "/full-review"
|
|
173
|
+
steps:
|
|
174
|
+
- plugin: commit-commands
|
|
175
|
+
action: commit
|
|
176
|
+
- plugin: code-review
|
|
177
|
+
action: review
|
|
178
|
+
- plugin: commit-commands
|
|
179
|
+
action: pr
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**사용:**
|
|
183
|
+
```
|
|
184
|
+
/full-review
|
|
185
|
+
→ 커밋 → 리뷰 → PR 생성 자동 진행
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### 7. `/scout fork` - 플러그인 포크
|
|
191
|
+
|
|
192
|
+
플러그인을 복사하여 커스텀 버전을 만듭니다.
|
|
193
|
+
|
|
194
|
+
**사용법:**
|
|
195
|
+
```
|
|
196
|
+
/scout fork code-review my-code-review
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**결과:**
|
|
200
|
+
```
|
|
201
|
+
.claude/plugins/my-code-review/
|
|
202
|
+
├── plugin.json
|
|
203
|
+
├── agents/
|
|
204
|
+
└── FORKED_FROM.txt
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 학습 시스템
|
|
210
|
+
|
|
211
|
+
Plugin Scout는 사용자 행동을 학습합니다:
|
|
212
|
+
|
|
213
|
+
### 거절 학습
|
|
214
|
+
- 3번 거절한 플러그인은 추천에서 제외
|
|
215
|
+
- `.claude/scout-history.json`에 기록
|
|
216
|
+
|
|
217
|
+
### 선호도 학습
|
|
218
|
+
- 자주 설치하는 카테고리 우선 추천
|
|
219
|
+
- 프로젝트 패턴 기억
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 파일 구조
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
.claude/
|
|
227
|
+
├── agents/
|
|
228
|
+
│ └── plugin-scout.md # 메인 에이전트
|
|
229
|
+
├── skills/
|
|
230
|
+
│ └── plugin-evaluation/
|
|
231
|
+
│ ├── SKILL.md # 평가 스킬
|
|
232
|
+
│ ├── FEATURE_SPEC.md # 기능 명세
|
|
233
|
+
│ ├── TEST_RESULTS.md # 테스트 결과
|
|
234
|
+
│ ├── USER_GUIDE.md # 이 문서
|
|
235
|
+
│ └── references/
|
|
236
|
+
├── plugins/ # 포크한 플러그인
|
|
237
|
+
├── plugin-overrides/ # 커스텀 규칙
|
|
238
|
+
│ └── code-review/
|
|
239
|
+
│ └── override.md
|
|
240
|
+
├── combos/ # 워크플로우
|
|
241
|
+
│ ├── full-review.yaml
|
|
242
|
+
│ └── quick-commit.yaml
|
|
243
|
+
├── scout-history.json # 학습 데이터
|
|
244
|
+
└── scout-usage.json # 사용 기록
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## 활용 예시
|
|
250
|
+
|
|
251
|
+
### 예시 1: 새 프로젝트 시작
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
> 새 TypeScript 프로젝트를 시작했어. 유용한 플러그인 있어?
|
|
255
|
+
|
|
256
|
+
[Plugin Scout가 프로젝트 분석]
|
|
257
|
+
|
|
258
|
+
추천:
|
|
259
|
+
1. typescript-lsp - 코드 인텔리전스
|
|
260
|
+
2. commit-commands - Git 워크플로우
|
|
261
|
+
3. code-review - PR 리뷰
|
|
262
|
+
|
|
263
|
+
설치할까요?
|
|
264
|
+
> 1, 2번 설치해줘
|
|
265
|
+
|
|
266
|
+
✅ typescript-lsp 설치 완료
|
|
267
|
+
✅ commit-commands 설치 완료
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 예시 2: 기존 통합 활용
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
> 이 프로젝트에 Sentry 쓰고 있는데 관련 플러그인 있어?
|
|
274
|
+
|
|
275
|
+
[프로젝트 스캔: @sentry/node 발견]
|
|
276
|
+
|
|
277
|
+
sentry 플러그인을 설치하면:
|
|
278
|
+
- 에러 리포트 직접 조회
|
|
279
|
+
- 스택 트레이스 분석
|
|
280
|
+
- 이슈 검색
|
|
281
|
+
|
|
282
|
+
설치할까요?
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 예시 3: 워크플로우 자동화
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
> 커밋부터 PR까지 한번에 할 수 있어?
|
|
289
|
+
|
|
290
|
+
[combos/full-review.yaml 발견]
|
|
291
|
+
|
|
292
|
+
/full-review 명령으로 가능해요:
|
|
293
|
+
1. 변경사항 커밋
|
|
294
|
+
2. 코드 리뷰
|
|
295
|
+
3. PR 생성
|
|
296
|
+
|
|
297
|
+
실행할까요?
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### 예시 4: 플러그인 정리
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
> 설치된 플러그인 중에 안 쓰는 거 있어?
|
|
304
|
+
|
|
305
|
+
/scout cleanup
|
|
306
|
+
|
|
307
|
+
📊 플러그인 정리 제안
|
|
308
|
+
|
|
309
|
+
오래된 미사용 플러그인 1개:
|
|
310
|
+
• old-plugin (84일간 미사용)
|
|
311
|
+
|
|
312
|
+
제거할까요?
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 설정
|
|
318
|
+
|
|
319
|
+
### 무음 모드
|
|
320
|
+
```
|
|
321
|
+
/scout quiet on # 자동 추천 끄기
|
|
322
|
+
/scout quiet off # 다시 켜기
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### 히스토리 초기화
|
|
326
|
+
```
|
|
327
|
+
/scout reset-history
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## FAQ
|
|
333
|
+
|
|
334
|
+
**Q: 플러그인이 자동으로 설치되나요?**
|
|
335
|
+
A: 아니요. 항상 사용자 동의 후에만 설치됩니다.
|
|
336
|
+
|
|
337
|
+
**Q: 추천을 끌 수 있나요?**
|
|
338
|
+
A: `/scout quiet on`으로 자동 추천을 끌 수 있습니다.
|
|
339
|
+
|
|
340
|
+
**Q: 팀과 설정을 공유할 수 있나요?**
|
|
341
|
+
A: `.claude/` 폴더를 git에 커밋하면 팀과 공유됩니다.
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 문제 해결
|
|
346
|
+
|
|
347
|
+
### 플러그인이 안 보여요
|
|
348
|
+
```
|
|
349
|
+
/plugin marketplace list
|
|
350
|
+
/plugin marketplace update
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 추천이 안 맞아요
|
|
354
|
+
```
|
|
355
|
+
/scout reset-history
|
|
356
|
+
```
|
|
357
|
+
히스토리를 초기화하고 다시 학습합니다.
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 버전 정보
|
|
362
|
+
|
|
363
|
+
- **v1.0**: 기본 추천, 인터뷰식 설치
|
|
364
|
+
- **v2.0**: compare, cleanup, 익스텐션 시스템, 학습
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# License Compatibility Matrix
|
|
2
|
+
|
|
3
|
+
## Permissive Licenses (Recommended)
|
|
4
|
+
|
|
5
|
+
| License | Commercial | Modification | Distribution | Private |
|
|
6
|
+
|---------|------------|--------------|--------------|---------|
|
|
7
|
+
| MIT | Yes | Yes | Yes | Yes |
|
|
8
|
+
| Apache-2.0 | Yes | Yes | Yes | Yes |
|
|
9
|
+
| BSD-2-Clause | Yes | Yes | Yes | Yes |
|
|
10
|
+
| BSD-3-Clause | Yes | Yes | Yes | Yes |
|
|
11
|
+
| ISC | Yes | Yes | Yes | Yes |
|
|
12
|
+
|
|
13
|
+
**Requirements**: Attribution in documentation/source
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Copyleft Licenses (Caution)
|
|
18
|
+
|
|
19
|
+
| License | Commercial | Modification | Copyleft |
|
|
20
|
+
|---------|------------|--------------|----------|
|
|
21
|
+
| GPL-3.0 | Yes* | Yes* | Strong |
|
|
22
|
+
| GPL-2.0 | Yes* | Yes* | Strong |
|
|
23
|
+
| LGPL-3.0 | Yes | Yes* | Weak |
|
|
24
|
+
| MPL-2.0 | Yes | Yes* | Weak |
|
|
25
|
+
|
|
26
|
+
*Derivative works must use same license
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Compatibility with Project Licenses
|
|
31
|
+
|
|
32
|
+
### If your project uses MIT/Apache-2.0:
|
|
33
|
+
- **Permissive**: Full compatibility
|
|
34
|
+
- **LGPL**: Compatible (for linking)
|
|
35
|
+
- **GPL**: May require project relicensing
|
|
36
|
+
|
|
37
|
+
### If your project uses GPL:
|
|
38
|
+
- **All open source**: Compatible
|
|
39
|
+
- **Proprietary plugins**: Not compatible
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Recommendations
|
|
44
|
+
|
|
45
|
+
| Project Type | Recommended Plugin Licenses |
|
|
46
|
+
|--------------|----------------------------|
|
|
47
|
+
| Commercial/Enterprise | MIT, Apache-2.0, BSD |
|
|
48
|
+
| Open Source | Any OSI-approved |
|
|
49
|
+
| Internal Tools | MIT, Apache-2.0, LGPL |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Unknown License Handling
|
|
54
|
+
|
|
55
|
+
1. Check for LICENSE file in repository
|
|
56
|
+
2. Check package.json/Cargo.toml for license field
|
|
57
|
+
3. Contact author for clarification
|
|
58
|
+
4. **If unclear**: Avoid installation
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Scoring Methodology Reference
|
|
2
|
+
|
|
3
|
+
## Detailed Formulas
|
|
4
|
+
|
|
5
|
+
### Project Match Score Calculation
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
project_match = language + framework + category + dependency + architecture
|
|
9
|
+
|
|
10
|
+
Where:
|
|
11
|
+
language = 0-30 points (exact: 30, related: 15, none: 0)
|
|
12
|
+
framework = 0-25 points (exact: 25, compatible: 15, none: 0)
|
|
13
|
+
category = 0-20 points (high: 20, medium: 10, low: 5)
|
|
14
|
+
dependency = 0-15 points (no conflict: 15, minor: 5, major: 0)
|
|
15
|
+
architecture = 0-10 points (excellent: 10, good: 5, poor: 0)
|
|
16
|
+
|
|
17
|
+
Total possible: 100 points
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Multi-Language Projects
|
|
21
|
+
|
|
22
|
+
When multiple languages are detected:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
weighted_score = (primary_lang_score × 0.6) + (secondary_lang_score × 0.4)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Primary language is determined by:
|
|
29
|
+
1. Explicit config (package.json → JS/TS)
|
|
30
|
+
2. File count percentage
|
|
31
|
+
3. Build tool presence
|
|
32
|
+
|
|
33
|
+
### Popularity Score Normalization
|
|
34
|
+
|
|
35
|
+
GitHub stars vary widely. Use logarithmic normalization:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
normalized_stars = min(log10(stars + 1) / log10(100000) × 100, 100)
|
|
39
|
+
|
|
40
|
+
Examples:
|
|
41
|
+
10 stars → 25 points
|
|
42
|
+
100 stars → 50 points
|
|
43
|
+
1,000 stars → 75 points
|
|
44
|
+
10,000 stars → 100 points
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Commit Freshness
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
freshness_score = max(0, 100 - (days_since_update × 0.27))
|
|
51
|
+
|
|
52
|
+
Examples:
|
|
53
|
+
1 day ago → 100 points
|
|
54
|
+
30 days ago → 92 points
|
|
55
|
+
180 days ago → 51 points
|
|
56
|
+
365 days ago → 1 point
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Composite Score
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
composite = (project_match × 0.40) + (popularity × 0.30) + (security × 0.30)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Edge Cases
|
|
66
|
+
|
|
67
|
+
| Scenario | Handling |
|
|
68
|
+
|----------|----------|
|
|
69
|
+
| No GitHub data | Use default popularity = 50 |
|
|
70
|
+
| Unknown license | Security license score = 0 |
|
|
71
|
+
| No recent commits | Commits score = 5 (minimum) |
|
|
72
|
+
| Fork of popular repo | Use original repo's stats |
|
|
73
|
+
| Archived repository | Reduce popularity by 50% |
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Plugin Security Checklist
|
|
2
|
+
|
|
3
|
+
## Pre-Installation Review
|
|
4
|
+
|
|
5
|
+
### Source Verification
|
|
6
|
+
- [ ] Plugin source is from known marketplace
|
|
7
|
+
- [ ] Repository URL is accessible and valid
|
|
8
|
+
- [ ] Author/organization can be verified
|
|
9
|
+
- [ ] No typosquatting in name (e.g., "typescrit-lsp")
|
|
10
|
+
|
|
11
|
+
### License Review
|
|
12
|
+
- [ ] License file is present
|
|
13
|
+
- [ ] License is OSI-approved
|
|
14
|
+
- [ ] License is compatible with project
|
|
15
|
+
- [ ] No unusual restrictions or obligations
|
|
16
|
+
|
|
17
|
+
### Maintenance Status
|
|
18
|
+
- [ ] Active development (commits in last year)
|
|
19
|
+
- [ ] Issues are being addressed
|
|
20
|
+
- [ ] Security issues get prompt response
|
|
21
|
+
- [ ] Reasonable open/closed issue ratio
|
|
22
|
+
|
|
23
|
+
### Author Trust
|
|
24
|
+
- [ ] Author has other reputable projects
|
|
25
|
+
- [ ] Organization is verified (if applicable)
|
|
26
|
+
- [ ] No history of malicious packages
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Red Flags
|
|
31
|
+
|
|
32
|
+
### Immediate Rejection
|
|
33
|
+
- Unknown or missing license
|
|
34
|
+
- Obfuscated code
|
|
35
|
+
- Requests excessive permissions
|
|
36
|
+
- Known critical vulnerabilities
|
|
37
|
+
- Author cannot be verified
|
|
38
|
+
- Typosquatting on popular plugin names
|
|
39
|
+
|
|
40
|
+
### Proceed with Caution
|
|
41
|
+
- Last update > 1 year ago
|
|
42
|
+
- No issue response
|
|
43
|
+
- GPL license (copyleft implications)
|
|
44
|
+
- New/unknown author
|
|
45
|
+
- Very few stars or forks
|
|
46
|
+
- No documentation
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Security Warning Triggers
|
|
51
|
+
|
|
52
|
+
| Condition | Warning Level |
|
|
53
|
+
|-----------|---------------|
|
|
54
|
+
| License unknown | Critical |
|
|
55
|
+
| Critical vulnerability | Critical |
|
|
56
|
+
| Author unknown | Critical |
|
|
57
|
+
| Last update > 2 years | Critical |
|
|
58
|
+
| License restrictive | Moderate |
|
|
59
|
+
| Minor vulnerability | Moderate |
|
|
60
|
+
| New author | Moderate |
|
|
61
|
+
| Last update > 1 year | Moderate |
|
|
62
|
+
| Community-managed | Informational |
|
|
63
|
+
| Attribution required | Informational |
|
|
64
|
+
| Beta/experimental | Informational |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Warning Message Templates
|
|
69
|
+
|
|
70
|
+
### Critical Warning
|
|
71
|
+
```
|
|
72
|
+
⚠️ CRITICAL: [plugin-name]
|
|
73
|
+
- [Issue description]
|
|
74
|
+
- Installation NOT recommended
|
|
75
|
+
- Risk: [specific risk]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Moderate Warning
|
|
79
|
+
```
|
|
80
|
+
⚠️ Warning: [plugin-name]
|
|
81
|
+
- [Issue description]
|
|
82
|
+
- Proceed with caution
|
|
83
|
+
- Consider: [alternative or mitigation]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Informational Notice
|
|
87
|
+
```
|
|
88
|
+
ℹ️ Notice: [plugin-name]
|
|
89
|
+
- [Information]
|
|
90
|
+
- No action required
|
|
91
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# fetch-plugin-metadata.sh
|
|
3
|
+
# Extract metadata from plugin manifest for evaluation
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
PLUGIN_PATH="${1:-}"
|
|
8
|
+
|
|
9
|
+
usage() {
|
|
10
|
+
echo "Usage: fetch-plugin-metadata.sh <plugin-path>"
|
|
11
|
+
echo ""
|
|
12
|
+
echo "Extracts metadata from a local plugin directory."
|
|
13
|
+
echo ""
|
|
14
|
+
echo "Example:"
|
|
15
|
+
echo " fetch-plugin-metadata.sh ./my-plugin"
|
|
16
|
+
exit 1
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if [ -z "$PLUGIN_PATH" ]; then
|
|
20
|
+
usage
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if [ ! -d "$PLUGIN_PATH" ]; then
|
|
24
|
+
echo "{\"error\": \"Directory not found: $PLUGIN_PATH\"}" >&2
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Check for plugin.json in standard location
|
|
29
|
+
MANIFEST="$PLUGIN_PATH/.claude-plugin/plugin.json"
|
|
30
|
+
|
|
31
|
+
if [ ! -f "$MANIFEST" ]; then
|
|
32
|
+
# Try alternative location
|
|
33
|
+
MANIFEST="$PLUGIN_PATH/plugin.json"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if [ ! -f "$MANIFEST" ]; then
|
|
37
|
+
echo "{\"error\": \"No plugin.json found in $PLUGIN_PATH\"}" >&2
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# Extract and format metadata using jq if available
|
|
42
|
+
if command -v jq &> /dev/null; then
|
|
43
|
+
cat "$MANIFEST" | jq '{
|
|
44
|
+
name: .name,
|
|
45
|
+
description: .description,
|
|
46
|
+
version: .version,
|
|
47
|
+
author: .author,
|
|
48
|
+
license: .license,
|
|
49
|
+
homepage: .homepage,
|
|
50
|
+
repository: .repository,
|
|
51
|
+
keywords: .keywords,
|
|
52
|
+
commands: (.commands | if type == "array" then length else 0 end),
|
|
53
|
+
agents: (.agents | if type == "array" then length else 0 end),
|
|
54
|
+
skills: (.skills | if type == "array" then length else 0 end),
|
|
55
|
+
hooks: (.hooks | if type == "object" then keys else [] end),
|
|
56
|
+
source: "local"
|
|
57
|
+
}'
|
|
58
|
+
else
|
|
59
|
+
# Fallback: just output the raw manifest
|
|
60
|
+
cat "$MANIFEST"
|
|
61
|
+
fi
|