@the-magic-tower/fixhive-opencode-plugin 0.1.4 → 0.1.6

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Seoul Ventures / The Magic Tower
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ko.md CHANGED
@@ -11,17 +11,31 @@
11
11
  <a href="README.nl.md">Nederlands</a>
12
12
  </p>
13
13
 
14
- > OpenCode를 위한 커뮤니티 기반 오류 지식 공유 시스템
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/@the-magic-tower/fixhive-opencode-plugin">
16
+ <img src="https://img.shields.io/npm/v/@the-magic-tower/fixhive-opencode-plugin.svg" alt="npm version">
17
+ </a>
18
+ <a href="https://github.com/SeoulVentures/FixHive/actions/workflows/ci.yml">
19
+ <img src="https://github.com/SeoulVentures/FixHive/actions/workflows/ci.yml/badge.svg" alt="CI Status">
20
+ </a>
21
+ <a href="https://opensource.org/licenses/MIT">
22
+ <img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT">
23
+ </a>
24
+ <img src="https://img.shields.io/badge/Node.js-18%20%7C%2020%20%7C%2022-green" alt="Node.js Version">
25
+ </p>
15
26
 
16
- FixHive는 개발 세션 발생하는 오류를 자동으로 캡처하고, 커뮤니티 지식 베이스에서 솔루션을 검색하며, 해결된 오류를 다른 개발자들과 공유하는 OpenCode 플러그인입니다.
27
+ > 커뮤니티 기반 오류 지식 공유 시스템 - OpenCode 플러그인
28
+
29
+ FixHive는 개발 세션 중 발생하는 오류를 자동으로 감지하고, 커뮤니티 지식 베이스에서 해결책을 검색하며, 해결된 오류를 다른 개발자들과 공유하는 OpenCode 플러그인입니다.
17
30
 
18
31
  ## 주요 기능
19
32
 
20
- - **자동 오류 감지**: 도구 출력(bash, edit 등)에서 오류를 자동으로 감지
21
- - **클라우드 지식 베이스**: 시맨틱 유사도(pgvector)를 사용한 커뮤니티 솔루션 검색
22
- - **로컬 캐싱**: 오프라인 접근을 위한 SQLite 기반 로컬 저장소
23
- - **개인정보 필터링**: 민감한 데이터(API 키, 경로, 이메일) 자동 삭제
24
- - **실시간 동기화**: 오류/해결 시 즉각적인 클라우드 통신
33
+ - **자동 오류 감지**: 도구 출력(bash, edit 등)에서 자동으로 오류 감지
34
+ - **클라우드 지식 베이스**: 시맨틱 유사도 검색으로 커뮤니티 솔루션 검색 (pgvector)
35
+ - **로컬 캐싱**: SQLite 기반 로컬 저장소로 오프라인 접근 지원
36
+ - **프라이버시 필터링**: 민감한 데이터 자동 마스킹 (API 키, 경로, 이메일)
37
+ - **실시간 동기화**: 오류/해결 시 즉시 클라우드 통신
38
+ - **중복 방지**: 임베딩과 해시 매칭을 통한 스마트 중복 검사
25
39
 
26
40
  ## 설치
27
41
 
@@ -41,11 +55,35 @@ export default {
41
55
  };
42
56
  ```
43
57
 
44
- **끝!** FixHive는 기본적으로 커뮤니티 지식 베이스에 연결됩니다. 환경 변수 설정이 필요 없습니다.
58
+ **끝입니다!** FixHive는 기본적으로 커뮤니티 지식 베이스에 연결됩니다. 환경 변수 설정이 필요 없습니다.
59
+
60
+ ## 작동 원리
61
+
62
+ ```
63
+ ┌─────────────────────────────────────────────────────────────────┐
64
+ │ FixHive 흐름도 │
65
+ ├─────────────────────────────────────────────────────────────────┤
66
+ │ │
67
+ │ 1. 오류 발생 │
68
+ │ ↓ │
69
+ │ 2. 자동 감지 (tool.execute.after 훅) │
70
+ │ ↓ │
71
+ │ 3. 프라이버시 필터 (API 키, 경로 등 마스킹) │
72
+ │ ↓ │
73
+ │ 4. 로컬 저장 (SQLite) │
74
+ │ ↓ │
75
+ │ 5. 클라우드 검색 (Supabase + pgvector) │
76
+ │ ↓ │
77
+ │ 6. 솔루션 표시 (유사도 & 투표순 정렬) │
78
+ │ ↓ │
79
+ │ 7. 해결 → 커뮤니티 업로드 │
80
+ │ │
81
+ └─────────────────────────────────────────────────────────────────┘
82
+ ```
45
83
 
46
84
  ## 설정 (선택사항)
47
85
 
48
- 동작을 커스터마이즈하기 위한 환경 변수:
86
+ 환경 변수로 동작 커스터마이징:
49
87
 
50
88
  ```bash
51
89
  # 커뮤니티 대신 자체 Supabase 인스턴스 사용
@@ -55,54 +93,187 @@ FIXHIVE_SUPABASE_KEY=your-anon-key
55
93
  # 시맨틱 검색 활성화 (권장)
56
94
  OPENAI_API_KEY=sk-...
57
95
 
58
- # 사용자 지정 기여자 ID (미설정 자동 생성)
96
+ # 커스텀 기여자 ID (설정하지 않으면 자동 생성)
59
97
  FIXHIVE_CONTRIBUTOR_ID=your-contributor-id
60
98
  ```
61
99
 
62
100
  | 변수 | 기본값 | 설명 |
63
101
  |------|--------|------|
64
102
  | `FIXHIVE_SUPABASE_URL` | 커뮤니티 DB | Supabase 프로젝트 URL |
65
- | `FIXHIVE_SUPABASE_KEY` | 커뮤니티 Key | Supabase anon 키 |
103
+ | `FIXHIVE_SUPABASE_KEY` | 커뮤니티 | Supabase anon 키 |
66
104
  | `OPENAI_API_KEY` | 없음 | 시맨틱 유사도 검색 활성화 |
67
105
  | `FIXHIVE_CONTRIBUTOR_ID` | 자동 생성 | 고유 기여자 ID |
68
106
 
69
- ## 사용 가능한 명령어
107
+ ## 사용 가능한 도구
108
+
109
+ ### `fixhive_search`
110
+
111
+ 지식 베이스에서 오류 해결책 검색.
112
+
113
+ ```typescript
114
+ // 인자
115
+ {
116
+ errorMessage: string; // 필수: 검색할 오류 메시지
117
+ language?: string; // 선택: 프로그래밍 언어 (typescript, python 등)
118
+ framework?: string; // 선택: 프레임워크 (react, nextjs, express 등)
119
+ limit?: number; // 선택: 최대 결과 수 (기본값: 5)
120
+ }
121
+ ```
122
+
123
+ **예시:**
124
+ ```
125
+ fixhive_search "Cannot find module 'react'" --language typescript --framework nextjs
126
+ ```
127
+
128
+ ### `fixhive_resolve`
129
+
130
+ 오류를 해결됨으로 표시하고 솔루션 공유.
131
+
132
+ ```typescript
133
+ // 인자
134
+ {
135
+ errorId: string; // 필수: fixhive_list에서 얻은 오류 ID
136
+ resolution: string; // 필수: 오류 해결 방법 설명
137
+ resolutionCode?: string; // 선택: 코드 수정 또는 diff
138
+ upload?: boolean; // 선택: 커뮤니티에 업로드 (기본값: true)
139
+ }
140
+ ```
141
+
142
+ **예시:**
143
+ ```
144
+ fixhive_resolve abc12345 "의존성 누락. npm install react 실행으로 해결"
145
+ ```
146
+
147
+ ### `fixhive_list`
148
+
149
+ 현재 세션에서 감지된 오류 목록.
150
+
151
+ ```typescript
152
+ // 인자
153
+ {
154
+ status?: 'unresolved' | 'resolved' | 'uploaded'; // 선택: 상태로 필터링
155
+ limit?: number; // 선택: 최대 결과 수 (기본값: 10)
156
+ }
157
+ ```
158
+
159
+ ### `fixhive_vote`
160
+
161
+ 솔루션에 투표.
162
+
163
+ ```typescript
164
+ // 인자
165
+ {
166
+ knowledgeId: string; // 필수: 지식 항목 ID
167
+ helpful: boolean; // 필수: true는 추천, false는 비추천
168
+ }
169
+ ```
170
+
171
+ ### `fixhive_stats`
172
+
173
+ 사용 통계 조회.
174
+
175
+ ```typescript
176
+ // 인자 없음
177
+ ```
178
+
179
+ **출력:**
180
+ ```markdown
181
+ ## FixHive 통계
182
+
183
+ ### 로컬
184
+ - 기록된 오류: 42
185
+ - 해결됨: 38
186
+ - 업로드됨: 25
187
+
188
+ ### 커뮤니티 기여
189
+ - 공유한 솔루션: 25
190
+ - 내 솔루션이 도움 준 횟수: 156
191
+ - 받은 총 추천: 89
192
+ ```
193
+
194
+ ### `fixhive_helpful`
195
+
196
+ 솔루션이 도움이 되었다고 보고.
197
+
198
+ ```typescript
199
+ // 인자
200
+ {
201
+ knowledgeId: string; // 필수: 도움이 된 지식 항목 ID
202
+ }
203
+ ```
204
+
205
+ ### `fixhive_report`
206
+
207
+ 부적절한 콘텐츠 신고.
208
+
209
+ ```typescript
210
+ // 인자
211
+ {
212
+ knowledgeId: string; // 필수: 신고할 지식 항목 ID
213
+ reason?: string; // 선택: 신고 사유
214
+ }
215
+ ```
70
216
 
71
- | 명령어 | 설명 |
72
- |--------|------|
73
- | `fixhive_search` | 오류 솔루션 지식 베이스 검색 |
74
- | `fixhive_resolve` | 오류를 해결됨으로 표시하고 솔루션 공유 |
75
- | `fixhive_list` | 현재 세션의 오류 목록 조회 |
76
- | `fixhive_vote` | 솔루션 추천/비추천 |
77
- | `fixhive_stats` | 사용 통계 조회 |
78
- | `fixhive_helpful` | 솔루션이 도움됐음을 보고 |
79
- | `fixhive_report` | 부적절한 콘텐츠 신고 |
217
+ ## 예시 워크플로우
218
+
219
+ ```
220
+ 1. 실패하는 명령 실행
221
+ $ npm run build
222
+ > error TS2307: Cannot find module '@/components/Button'
80
223
 
81
- ### 사용 예시 워크플로우
224
+ 2. FixHive 자동 동작:
225
+ - 오류 감지
226
+ - 로컬에 기록
227
+ - 솔루션 검색
228
+ - 매칭되는 커뮤니티 솔루션 표시
82
229
 
83
- 1. **오류 발생** FixHive가 자동으로 감지하고 기록
84
- 2. **솔루션 검색** `fixhive_search "Module not found: react"`
85
- 3. **수정 적용** → 커뮤니티 솔루션 따라하기
86
- 4. **해결 공유** `fixhive_resolve <error-id> "누락된 의존성 설치"`
230
+ 3. 커뮤니티 솔루션의 수정 적용
231
+ $ npm install @/components/Button --save
232
+
233
+ 4. 해결 표시 공유
234
+ fixhive_resolve <error-id> "tsconfig.json에 경로 별칭 설정 누락. paths 매핑 추가."
235
+
236
+ 5. 당신의 솔루션이 다른 개발자들을 돕습니다!
237
+ ```
238
+
239
+ ## 프라이버시
240
+
241
+ FixHive는 공유 전 민감한 정보를 자동으로 필터링합니다:
242
+
243
+ | 카테고리 | 예시 | 대체값 |
244
+ |----------|------|--------|
245
+ | API 키 | `sk-abc123...`, `ghp_xxx...` | `[API_KEY_REDACTED]` |
246
+ | 토큰 | `Bearer eyJ...`, `xoxb-...` | `[TOKEN_REDACTED]` |
247
+ | 이메일 | `user@example.com` | `[EMAIL_REDACTED]` |
248
+ | 경로 | `/Users/john/projects/...` | `~/projects/...` |
249
+ | 환경변수 | `DATABASE_URL=postgres://...` | `[ENV_REDACTED]` |
250
+ | 연결 문자열 | `mongodb://user:pass@...` | `[CONNECTION_STRING_REDACTED]` |
251
+ | IP 주소 | `192.168.1.100` | `[IP_REDACTED]` |
87
252
 
88
253
  ## 자체 호스팅 설정 (선택사항)
89
254
 
90
- 기본 커뮤니티 지식 베이스를 사용하는 경우 이 섹션을 건너뛰세요.
255
+ 기본 커뮤니티 지식 베이스를 사용한다면 이 섹션을 건너뛰세요.
91
256
 
92
- 자체 FixHive 백엔드를 운영하려면:
257
+ ### 1. Supabase 프로젝트 생성
93
258
 
94
- 1. 새 Supabase 프로젝트 생성 (무료 플랜 가능)
95
- 2. SQL 에디터에서 설정 스크립트 실행:
259
+ 1. [supabase.com](https://supabase.com)에서 새 프로젝트 생성 (무료 티어 가능)
260
+ 2. 프로젝트가 준비될 때까지 대기
96
261
 
97
- ```bash
98
- cat scripts/setup-supabase.sql | pbcopy
99
- # Supabase SQL 에디터에 붙여넣기
262
+ ### 2. pgvector 확장 활성화
263
+
264
+ SQL 에디터에서 실행:
265
+ ```sql
266
+ CREATE EXTENSION IF NOT EXISTS vector;
100
267
  ```
101
268
 
102
- 3. Settings > API에서 프로젝트 URL과 anon key 획득
103
- 4. 환경 변수 설정:
269
+ ### 3. 설정 스크립트 실행
270
+
271
+ `scripts/setup-supabase.sql` 내용을 SQL 에디터에서 복사하여 실행.
272
+
273
+ ### 4. 환경 설정
104
274
 
105
275
  ```bash
276
+ # Settings > API에서 가져오기
106
277
  FIXHIVE_SUPABASE_URL=https://your-project.supabase.co
107
278
  FIXHIVE_SUPABASE_KEY=your-anon-key
108
279
  ```
@@ -110,28 +281,129 @@ FIXHIVE_SUPABASE_KEY=your-anon-key
110
281
  ## 아키텍처
111
282
 
112
283
  ```
113
- FixHive Plugin
114
- ├── Error Detection (tool.execute.after 훅)
115
- ├── Privacy Filter (민감한 데이터 삭제)
116
- ├── Local Storage (SQLite)
117
- ├── error_records
118
- └── query_cache
119
- └── Cloud Client (Supabase + pgvector)
120
- ├── knowledge_entries
121
- └── usage_logs
284
+ @the-magic-tower/fixhive-opencode-plugin
285
+ ├── src/
286
+ ├── plugin/
287
+ │ │ ├── index.ts # 플러그인 정의 ()
288
+ │ └── tools.ts # 커스텀 도구 (7개)
289
+ ├── core/
290
+ │ │ ├── error-detector.ts # 다중 신호 오류 감지
291
+ │ │ ├── privacy-filter.ts # 민감 데이터 마스킹
292
+ │ │ └── hash.ts # 핑거프린팅 & 중복 검사
293
+ │ ├── storage/
294
+ │ │ ├── local-store.ts # SQLite 로컬 저장소
295
+ │ │ └── migrations.ts # 데이터베이스 마이그레이션
296
+ │ ├── cloud/
297
+ │ │ ├── client.ts # Supabase 클라이언트
298
+ │ │ └── embedding.ts # OpenAI 임베딩
299
+ │ └── types/
300
+ │ └── index.ts # TypeScript 정의
301
+ └── scripts/
302
+ └── setup-supabase.sql # 클라우드 스키마
303
+ ```
304
+
305
+ ## API 레퍼런스
306
+
307
+ ### TypeScript 타입
308
+
309
+ ```typescript
310
+ import type {
311
+ LocalErrorRecord,
312
+ CloudKnowledgeEntry,
313
+ ErrorType,
314
+ ErrorStatus,
315
+ Language,
316
+ Severity,
317
+ } from '@the-magic-tower/fixhive-opencode-plugin';
318
+
319
+ // 오류 타입
320
+ type ErrorType =
321
+ | 'runtime' | 'build' | 'lint' | 'test'
322
+ | 'network' | 'permission' | 'dependency'
323
+ | 'syntax' | 'type_error' | 'unknown';
324
+
325
+ // 오류 상태
326
+ type ErrorStatus = 'unresolved' | 'resolved' | 'uploaded';
327
+
328
+ // 지원 언어
329
+ type Language =
330
+ | 'typescript' | 'javascript' | 'python' | 'rust'
331
+ | 'go' | 'java' | 'ruby' | 'php' | 'csharp' | 'cpp' | 'other';
332
+ ```
333
+
334
+ ### 프로그래매틱 사용
335
+
336
+ ```typescript
337
+ import {
338
+ ErrorDetector,
339
+ PrivacyFilter,
340
+ LocalStore,
341
+ CloudClient,
342
+ createEmbeddingService,
343
+ } from '@the-magic-tower/fixhive-opencode-plugin';
344
+
345
+ // 인스턴스 생성
346
+ const detector = new ErrorDetector();
347
+ const filter = new PrivacyFilter();
348
+ const store = new LocalStore('/path/to/project');
349
+ const cloud = new CloudClient({
350
+ supabaseUrl: 'https://xxx.supabase.co',
351
+ supabaseAnonKey: 'your-key',
352
+ });
353
+
354
+ // 오류 감지
355
+ const result = detector.detect({
356
+ tool: 'bash',
357
+ output: 'error TS2307: Cannot find module...',
358
+ exitCode: 1,
359
+ });
360
+
361
+ // 콘텐츠 정제
362
+ const sanitized = filter.sanitize('API key: sk-abc123...');
363
+ // { sanitized: 'API key: [API_KEY_REDACTED]', redactedCount: 1, ... }
364
+
365
+ // 솔루션 검색
366
+ const solutions = await cloud.searchSimilar({
367
+ errorMessage: 'Module not found',
368
+ language: 'typescript',
369
+ });
370
+ ```
371
+
372
+ ## 문제 해결
373
+
374
+ ### 플러그인이 로드되지 않음
375
+
376
+ OpenCode v1.1.1 이상인지 확인:
377
+ ```bash
378
+ npm list @opencode-ai/plugin
379
+ ```
380
+
381
+ ### 솔루션을 찾을 수 없음
382
+
383
+ 1. 시맨틱 검색을 위해 `OPENAI_API_KEY`가 설정되어 있는지 확인
384
+ 2. 더 넓은 검색어 시도
385
+ 3. 희귀한 오류는 커뮤니티 데이터베이스에 솔루션이 아직 없을 수 있음
386
+
387
+ ### 프라이버시 우려
388
+
389
+ FixHive는 자동으로 민감한 데이터를 필터링하지만, 클라우드 동기화를 비활성화할 수 있습니다:
390
+ ```typescript
391
+ fixhive_resolve <error-id> "내 해결책" --upload false
122
392
  ```
123
393
 
124
- ## 개인정보 보호
394
+ ### SQLite 오류
125
395
 
126
- FixHive는 민감한 정보를 자동으로 필터링합니다:
396
+ 로컬 데이터베이스 삭제:
397
+ ```bash
398
+ rm -rf .fixhive/
399
+ ```
127
400
 
128
- - API 키 (OpenAI, GitHub, AWS, Stripe 등)
129
- - JWT 토큰 및 Bearer 토큰
130
- - 이메일 주소
131
- - 파일 경로 (`~` 또는 `<PROJECT>`로 대체)
132
- - 민감한 이름의 환경 변수
133
- - 데이터베이스 연결 문자열
134
- - IP 주소 (localhost 제외)
401
+ ### 연결 오류
402
+
403
+ 네트워크와 Supabase 상태 확인:
404
+ ```bash
405
+ curl https://your-project.supabase.co/rest/v1/
406
+ ```
135
407
 
136
408
  ## 개발
137
409
 
@@ -150,16 +422,45 @@ npm run typecheck
150
422
 
151
423
  # 테스트 실행
152
424
  npm test
425
+
426
+ # 커버리지와 함께 테스트 실행
427
+ npm run test:coverage
153
428
  ```
154
429
 
155
- ## 라이선스
430
+ ### 테스트 커버리지
156
431
 
157
- MIT
432
+ | 모듈 | 커버리지 |
433
+ |------|----------|
434
+ | Core (error-detector, privacy-filter, hash) | 99% |
435
+ | Storage (local-store) | 98% |
436
+ | Cloud (client, embedding) | 96% |
158
437
 
159
438
  ## 기여하기
160
439
 
161
440
  1. 저장소 포크
162
- 2. 기능 브랜치 생성
163
- 3. 변경 사항 커밋
164
- 4. 브랜치에 푸시
441
+ 2. 기능 브랜치 생성 (`git checkout -b feature/amazing`)
442
+ 3. 변경사항 커밋 (`git commit -m 'Add amazing feature'`)
443
+ 4. 브랜치에 푸시 (`git push origin feature/amazing`)
165
444
  5. Pull Request 생성
445
+
446
+ ### 가이드라인
447
+
448
+ - 새 기능에 테스트 작성
449
+ - 기존 코드 스타일 따르기
450
+ - 문서 업데이트
451
+ - 커밋은 원자적으로 유지
452
+
453
+ ## 변경 로그
454
+
455
+ 릴리스 히스토리는 [CHANGELOG.md](CHANGELOG.md)를 참조하세요.
456
+
457
+ ## 라이선스
458
+
459
+ MIT - 자세한 내용은 [LICENSE](LICENSE)를 참조하세요.
460
+
461
+ ## 감사의 말
462
+
463
+ - [OpenCode](https://github.com/opencode-ai/opencode) - AI 코딩 어시스턴트
464
+ - [Supabase](https://supabase.com) - Backend as a Service
465
+ - [pgvector](https://github.com/pgvector/pgvector) - 벡터 유사도 검색
466
+ - [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) - 빠른 SQLite 바인딩