@kiyeonjeon21/datacontext 0.2.0 → 0.3.1

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 (55) hide show
  1. package/.cursorrules +12 -0
  2. package/.env.example +8 -0
  3. package/.github/workflows/ci.yml +21 -1
  4. package/.github/workflows/publish.yml +21 -1
  5. package/CHANGELOG.md +41 -0
  6. package/README.md +247 -239
  7. package/cursor-mcp-config.json.example +29 -0
  8. package/datacontext.db +0 -0
  9. package/dist/api/server.d.ts.map +1 -1
  10. package/dist/api/server.js +145 -0
  11. package/dist/api/server.js.map +1 -1
  12. package/dist/api/start-server.d.ts +10 -0
  13. package/dist/api/start-server.d.ts.map +1 -0
  14. package/dist/api/start-server.js +73 -0
  15. package/dist/api/start-server.js.map +1 -0
  16. package/dist/cli/index.js +462 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/context-service.d.ts +72 -0
  19. package/dist/core/context-service.d.ts.map +1 -1
  20. package/dist/core/context-service.js +132 -0
  21. package/dist/core/context-service.js.map +1 -1
  22. package/dist/core/index.d.ts +2 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +5 -1
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/llm-service.d.ts +141 -0
  27. package/dist/core/llm-service.d.ts.map +1 -0
  28. package/dist/core/llm-service.js +284 -0
  29. package/dist/core/llm-service.js.map +1 -0
  30. package/dist/knowledge/store.d.ts +56 -3
  31. package/dist/knowledge/store.d.ts.map +1 -1
  32. package/dist/knowledge/store.js +193 -7
  33. package/dist/knowledge/store.js.map +1 -1
  34. package/dist/knowledge/types.d.ts +43 -1
  35. package/dist/knowledge/types.d.ts.map +1 -1
  36. package/dist/knowledge/types.js.map +1 -1
  37. package/dist/mcp/tools.d.ts.map +1 -1
  38. package/dist/mcp/tools.js +365 -0
  39. package/dist/mcp/tools.js.map +1 -1
  40. package/docs/API.md +173 -0
  41. package/docs/DEMO_SCRIPT.md +210 -0
  42. package/docs/MCP_TEST_GUIDE.md +414 -0
  43. package/docs/SYNC_GUIDE.md +242 -0
  44. package/package.json +4 -1
  45. package/src/api/server.ts +160 -0
  46. package/src/api/start-server.ts +78 -0
  47. package/src/cli/index.ts +534 -0
  48. package/src/core/context-service.ts +182 -0
  49. package/src/core/index.ts +7 -0
  50. package/src/core/llm-service.ts +359 -0
  51. package/src/knowledge/store.ts +232 -7
  52. package/src/knowledge/types.ts +45 -1
  53. package/src/mcp/tools.ts +415 -0
  54. package/test-glossary.yaml +55 -0
  55. package/test-mcp.db +0 -0
@@ -0,0 +1,414 @@
1
+ # MCP 도구 테스트 가이드
2
+
3
+ Cursor에서 DataContext MCP 도구를 테스트하는 방법입니다.
4
+
5
+ ## 1. Cursor MCP 설정
6
+
7
+ ### 방법 1: 로컬 빌드 사용 (개발 중)
8
+
9
+ 1. Cursor 설정 열기: `Cmd + ,` → `MCP`
10
+ 2. 다음 설정 추가:
11
+
12
+ ```json
13
+ {
14
+ "mcpServers": {
15
+ "datacontext": {
16
+ "command": "node",
17
+ "args": [
18
+ "/Users/kiyeonjeon/Projects/business/DataContext-HQ/datacontext-cli/dist/cli/index.js",
19
+ "connect",
20
+ "sqlite:./test-mcp.db"
21
+ ],
22
+ "env": {
23
+ "ANTHROPIC_API_KEY": "sk-ant-api03-..."
24
+ }
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ ### 방법 2: npm 패키지 사용 (배포 후)
31
+
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "datacontext": {
36
+ "command": "npx",
37
+ "args": [
38
+ "@kiyeonjeon21/datacontext",
39
+ "connect",
40
+ "sqlite:./test-mcp.db"
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## 2. Cursor 재시작
48
+
49
+ 설정 변경 후 Cursor를 재시작하세요.
50
+
51
+ ## 3. 빠른 시작: 자연어 질의 예시
52
+
53
+ Cursor 채팅에서 아래와 같이 자연어로 질문하면 Cursor가 자동으로 적절한 MCP 도구를 호출합니다:
54
+
55
+ | 질문 | 호출되는 도구 |
56
+ |------|-------------|
57
+ | "비즈니스 용어 목록을 보여줘" | `list_terms()` |
58
+ | "'활성' 관련 용어를 찾아줘" | `search_terms()` |
59
+ | "활성 사용자 중 최근 주문한 VIP 고객 조회해줘" | `enhance_query()` → SQL 생성 |
60
+ | "신규 가입자 = 7일 이내 용어 추가해줘" | `generate_glossary()` |
61
+ | "데이터베이스 테이블 목록을 보여줘" | `list_tables()` |
62
+ | "users 테이블 구조를 설명해줘" | `describe_table()` |
63
+ | "활성 사용자 5명을 조회해줘" | `query()` |
64
+
65
+ **💡 Tip:** 자연어로 질문하면 Cursor가 자동으로 적절한 도구를 선택합니다. 직접 도구를 호출할 수도 있습니다.
66
+
67
+ ## 4. MCP 도구 상세 테스트
68
+
69
+ Cursor 채팅에서 자연어로 질문하면 Cursor가 자동으로 적절한 MCP 도구를 호출합니다.
70
+
71
+ ### 4.1 용어 목록 조회
72
+
73
+ **자연어 질의:**
74
+ ```
75
+ "데이터베이스에 정의된 비즈니스 용어 목록을 보여줘"
76
+ "glossary에 있는 모든 용어를 나열해줘"
77
+ "정의된 business terms를 확인하고 싶어"
78
+ ```
79
+
80
+ **또는 직접 호출:**
81
+ ```
82
+ list_terms()
83
+ ```
84
+
85
+ **예상 결과:**
86
+ - 모든 business terms 목록 반환
87
+ - 각 용어의 term, definition, sqlExpression 포함
88
+
89
+ ---
90
+
91
+ ### 4.2 용어 검색
92
+
93
+ **자연어 질의:**
94
+ ```
95
+ "'활성'이라는 키워드로 용어를 검색해줘"
96
+ "active user 관련 용어를 찾아줘"
97
+ "활성 사용자에 대한 비즈니스 용어가 있나?"
98
+ ```
99
+
100
+ **또는 직접 호출:**
101
+ ```
102
+ search_terms({ query: "활성" })
103
+ ```
104
+
105
+ **예상 결과:**
106
+ - "활성 사용자" 용어 매칭
107
+ - SQL 조건 제안
108
+
109
+ ---
110
+
111
+ ### 4.3 Query Enhancement (핵심 기능!)
112
+
113
+ **자연어 질의:**
114
+ ```
115
+ "활성 사용자 중 최근 주문한 VIP 고객을 조회하는 쿼리를 만들어줘"
116
+ "활성 사용자 중 최근 주문한 VIP 고객 조회해줘"
117
+ "이 쿼리를 개선해줘: 활성 사용자 중 최근 주문한 VIP 고객"
118
+ ```
119
+
120
+ **또는 직접 호출:**
121
+ ```
122
+ enhance_query({ query: "활성 사용자 중 최근 주문한 VIP 고객" })
123
+ ```
124
+
125
+ **예상 결과:**
126
+ ```json
127
+ {
128
+ "success": true,
129
+ "query": "활성 사용자 중 최근 주문한 VIP 고객",
130
+ "usedTerms": ["활성 사용자", "최근 주문", "VIP 고객"],
131
+ "suggestedConditions": [
132
+ "status = 1",
133
+ "created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)",
134
+ "COUNT(order_id) >= 10"
135
+ ],
136
+ "method": "local"
137
+ }
138
+ ```
139
+
140
+ **Cursor가 자동으로:**
141
+ - 용어를 매칭하고 SQL 조건을 추출
142
+ - 해당 조건을 포함한 SQL 쿼리 생성
143
+
144
+ ---
145
+
146
+ ### 4.4 AI 용어 생성 (API 키 필요)
147
+
148
+ **자연어 질의:**
149
+ ```
150
+ "다음 용어들을 비즈니스 용어집에 추가해줘: 신규 가입자 = 7일 이내, 프리미엄 회원 = 구독료 10000원 이상"
151
+ "AI로 용어를 생성해줘: 신규 가입자 = 7일 이내 가입한 사용자, 프리미엄 회원 = 구독료 10000원 이상인 회원"
152
+ "이 용어들을 glossary에 추가해줘: 신규 가입자 = 7일 이내, 프리미엄 회원 = 구독료 10000원 이상"
153
+ ```
154
+
155
+ **또는 직접 호출:**
156
+ ```
157
+ generate_glossary({
158
+ terms: "신규 가입자 = 7일 이내, 프리미엄 회원 = 구독료 10000원 이상"
159
+ })
160
+ ```
161
+
162
+ **예상 결과:**
163
+ - 2개 용어 생성
164
+ - SQL 표현식, 동의어, 카테고리 자동 생성
165
+
166
+ ---
167
+
168
+ ### 4.5 수동 용어 추가
169
+
170
+ **자연어 질의:**
171
+ ```
172
+ "'테스트 용어'라는 비즈니스 용어를 추가해줘. 정의는 '테스트용 정의'이고 SQL은 'test = 1'이야"
173
+ "새로운 용어를 추가하고 싶어: 용어는 '테스트 용어', 정의는 '테스트용 정의', SQL은 'test = 1'"
174
+ ```
175
+
176
+ **또는 직접 호출:**
177
+ ```
178
+ add_term({
179
+ term: "테스트 용어",
180
+ definition: "테스트용 정의",
181
+ sqlExpression: "test = 1",
182
+ synonyms: ["test term"],
183
+ appliesTo: { tables: ["users"] },
184
+ category: "custom"
185
+ })
186
+ ```
187
+
188
+ ---
189
+
190
+ ### 4.6 테이블 목록 조회
191
+
192
+ **자연어 질의:**
193
+ ```
194
+ "데이터베이스에 있는 모든 테이블 목록을 보여줘"
195
+ "어떤 테이블들이 있나?"
196
+ "스키마의 테이블 목록을 확인하고 싶어"
197
+ ```
198
+
199
+ **또는 직접 호출:**
200
+ ```
201
+ list_tables({ schema: "main" })
202
+ ```
203
+
204
+ ---
205
+
206
+ ### 4.7 테이블 상세 정보
207
+
208
+ **자연어 질의:**
209
+ ```
210
+ "users 테이블의 구조를 설명해줘"
211
+ "users 테이블에 어떤 컬럼들이 있나?"
212
+ "users 테이블의 상세 정보를 보여줘"
213
+ ```
214
+
215
+ **또는 직접 호출:**
216
+ ```
217
+ describe_table({ table: "users", schema: "main" })
218
+ ```
219
+
220
+ ---
221
+
222
+ ### 4.8 쿼리 실행
223
+
224
+ **자연어 질의:**
225
+ ```
226
+ "SELECT * FROM users WHERE status = 1 LIMIT 5 이 쿼리를 실행해줘"
227
+ "활성 사용자 5명을 조회해줘"
228
+ "status가 1인 사용자 5명을 보여줘"
229
+ ```
230
+
231
+ **또는 직접 호출:**
232
+ ```
233
+ query({
234
+ sql: "SELECT * FROM users WHERE status = 1 LIMIT 5"
235
+ })
236
+ ```
237
+
238
+ ## 5. 통합 테스트 시나리오
239
+
240
+ ### 시나리오 1: 자연어 쿼리 → SQL 생성 (End-to-End)
241
+
242
+ **전제 조건:** 용어가 이미 정의되어 있어야 합니다.
243
+ - 활성 사용자: `status = 1`
244
+ - 최근 주문: `created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)`
245
+ - VIP 고객: `COUNT(order_id) >= 10`
246
+
247
+ **1단계: 자연어 질의**
248
+ ```
249
+ "활성 사용자 중 최근 주문한 VIP 고객 조회해줘"
250
+ ```
251
+
252
+ **2단계: Cursor가 자동으로 수행**
253
+ - `enhance_query` 도구 호출
254
+ - 용어 매칭 ("활성 사용자", "최근 주문", "VIP 고객")
255
+ - SQL 조건 추출
256
+ - SQL 쿼리 생성
257
+
258
+ **3단계: 생성된 SQL**
259
+ ```sql
260
+ SELECT u.* FROM users u
261
+ JOIN orders o ON o.user_id = u.id
262
+ WHERE u.status = 1 -- 활성 사용자 (from glossary)
263
+ AND o.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) -- 최근 주문 (from glossary)
264
+ GROUP BY u.id
265
+ HAVING COUNT(o.id) >= 10 -- VIP 고객 (from glossary)
266
+ ```
267
+
268
+ ---
269
+
270
+ ### 시나리오 2: 용어 정의 → 쿼리 생성 (전체 플로우)
271
+
272
+ **1단계: 용어 정의**
273
+ ```
274
+ "다음 용어들을 비즈니스 용어집에 추가해줘:
275
+ - 활성 사용자 = status가 1인 사용자
276
+ - 최근 주문 = 30일 이내 주문
277
+ - VIP 고객 = 주문 10건 이상"
278
+ ```
279
+
280
+ **2단계: 용어 확인**
281
+ ```
282
+ "정의한 용어 목록을 보여줘"
283
+ ```
284
+
285
+ **3단계: 자연어 쿼리**
286
+ ```
287
+ "활성 사용자 중 최근 주문한 VIP 고객을 조회하는 SQL을 만들어줘"
288
+ ```
289
+
290
+ **4단계: 쿼리 실행**
291
+ ```
292
+ "위에서 만든 쿼리를 실행해줘"
293
+ ```
294
+
295
+ ---
296
+
297
+ ### 시나리오 3: 용어 검색 → 쿼리 개선
298
+
299
+ **1단계: 용어 검색**
300
+ ```
301
+ "'활성' 관련 용어를 찾아줘"
302
+ ```
303
+
304
+ **2단계: 검색 결과 확인 후 쿼리 개선**
305
+ ```
306
+ "활성 사용자만 조회하는 쿼리를 만들어줘"
307
+ ```
308
+
309
+ **3단계: Cursor가 자동으로**
310
+ - 검색된 용어의 SQL 조건 적용
311
+ - 올바른 WHERE 절 생성
312
+
313
+ ---
314
+
315
+ ### 시나리오 4: 테이블 구조 확인 → 용어 정의 → 쿼리 생성
316
+
317
+ **1단계: 테이블 구조 확인**
318
+ ```
319
+ "users 테이블 구조를 보여줘"
320
+ ```
321
+
322
+ **2단계: 용어 정의**
323
+ ```
324
+ "users 테이블에서 status = 1인 사용자를 '활성 사용자'로 정의해줘"
325
+ ```
326
+
327
+ **3단계: 쿼리 생성**
328
+ ```
329
+ "활성 사용자 목록을 조회해줘"
330
+ ```
331
+
332
+ ## 6. VS Code Extension 테스트 (Cursor에서도 동일)
333
+
334
+ Cursor는 VS Code 기반이므로 VS Code Extension을 그대로 사용할 수 있습니다.
335
+
336
+ ### 5.1 Extension 설치
337
+
338
+ ```bash
339
+ code --install-extension kiyeonjeon21.vscode-datacontext
340
+ ```
341
+
342
+ 또는 Cursor Extensions에서 "DataContext" 검색
343
+
344
+ ### 5.2 Extension 사용
345
+
346
+ 1. **REST API 서버 시작** (다른 터미널)
347
+ ```bash
348
+ npx @kiyeonjeon21/datacontext serve sqlite:./test-mcp.db --port 3000
349
+ ```
350
+
351
+ 2. **Cursor에서 연결**
352
+ - `Cmd+Shift+P` → "DataContext: Connect to Database"
353
+ - URL: `http://localhost:3000`
354
+
355
+ 3. **Knowledge 패널 확인**
356
+ - 왼쪽 사이드바에서 DataContext 아이콘 클릭
357
+ - "Business Glossary" 카테고리 확인
358
+ - 용어 목록 표시 확인
359
+
360
+ 4. **명령어 테스트**
361
+ - `Cmd+Shift+P` → "DataContext: Add Business Term"
362
+ - `Cmd+Shift+P` → "DataContext: Generate Glossary with AI"
363
+ - `Cmd+Shift+P` → "DataContext: Search Terms"
364
+
365
+ ## 7. 문제 해결
366
+
367
+ ### MCP 서버 연결 실패
368
+
369
+ 1. Cursor 재시작
370
+ 2. 설정 파일 경로 확인
371
+ 3. `node` 또는 `npx` 경로 확인
372
+ 4. 데이터베이스 연결 문자열 확인
373
+
374
+ ### 도구가 보이지 않음
375
+
376
+ 1. Cursor 채팅에서 MCP 도구 목록 확인
377
+ 2. 서버 로그 확인 (Cursor 개발자 도구)
378
+ 3. 설정 파일 JSON 문법 확인
379
+
380
+ ### API 키 오류
381
+
382
+ - `ANTHROPIC_API_KEY` 환경 변수 확인
383
+ - `.env` 파일이 MCP 서버에서 읽히지 않을 수 있음
384
+ - Cursor 설정에서 직접 `env`에 추가
385
+
386
+ ## 8. 체크리스트
387
+
388
+ ### MCP 도구 테스트
389
+
390
+ - [ ] Cursor MCP 설정 완료
391
+ - [ ] Cursor 재시작
392
+ - [ ] **용어 목록 조회**: "비즈니스 용어 목록을 보여줘"
393
+ - [ ] **용어 검색**: "'활성' 관련 용어를 찾아줘"
394
+ - [ ] **Query Enhancement**: "활성 사용자 중 최근 주문한 VIP 고객 조회해줘"
395
+ - [ ] **AI 용어 생성**: "신규 가입자 = 7일 이내, 프리미엄 회원 = 구독료 10000원 이상 용어 추가해줘" (API 키 필요)
396
+ - [ ] **테이블 목록**: "데이터베이스 테이블 목록을 보여줘"
397
+ - [ ] **테이블 상세**: "users 테이블 구조를 설명해줘"
398
+ - [ ] **쿼리 실행**: "활성 사용자 5명을 조회해줘"
399
+
400
+ ### VS Code Extension 테스트
401
+
402
+ - [ ] VS Code Extension 설치
403
+ - [ ] Extension에서 Glossary UI 확인
404
+ - [ ] "DataContext: Add Business Term" 명령어 테스트
405
+ - [ ] "DataContext: Generate Glossary with AI" 명령어 테스트
406
+ - [ ] "DataContext: Search Terms" 명령어 테스트
407
+
408
+ ### 통합 시나리오 테스트
409
+
410
+ - [ ] 시나리오 1: 자연어 쿼리 → SQL 생성
411
+ - [ ] 시나리오 2: 용어 정의 → 쿼리 생성
412
+ - [ ] 시나리오 3: 용어 검색 → 쿼리 개선
413
+ - [ ] 시나리오 4: 테이블 구조 확인 → 용어 정의 → 쿼리 생성
414
+
@@ -0,0 +1,242 @@
1
+ # DataContext Sync Guide
2
+
3
+ > 이 문서는 AI 코드 어시스턴트가 DataContext 프로젝트의 여러 컴포넌트 간 동기화를 유지하는 데 필요한 정보를 제공합니다.
4
+
5
+ ## 프로젝트 구조 개요
6
+
7
+ ```
8
+ DataContext-HQ/
9
+ ├── datacontext-cli/ # CLI + MCP Server + REST API
10
+ ├── vscode-datacontext/ # VS Code Extension
11
+ └── datacontext/ # Business docs, landing page
12
+ ```
13
+
14
+ ---
15
+
16
+ ## 동기화 규칙
17
+
18
+ ### 1. REST API ↔ VS Code Extension 동기화
19
+
20
+ **원칙:** CLI의 REST API 엔드포인트가 추가/변경되면, VS Code Extension도 업데이트해야 합니다.
21
+
22
+ #### 체크리스트
23
+
24
+ | CLI 변경 (`datacontext-cli`) | Extension 변경 (`vscode-datacontext`) |
25
+ |------------------------------|---------------------------------------|
26
+ | `src/api/server.ts`에 새 엔드포인트 추가 | `src/services/connectionManager.ts`에 메서드 추가 |
27
+ | `docs/API.md` 업데이트 | `README.md` API Endpoints 섹션 업데이트 |
28
+ | 새 기능/tool 추가 | `package.json` commands 추가 |
29
+ | — | `src/extension.ts`에 명령어 핸들러 추가 |
30
+
31
+ #### API 매핑 테이블
32
+
33
+ 이 테이블은 CLI API와 Extension 메서드 간의 매핑을 보여줍니다:
34
+
35
+ | REST API Endpoint | HTTP Method | Extension Method | 상태 |
36
+ |-------------------|-------------|------------------|------|
37
+ | `/health` | GET | `connect()` 내부 체크 | ✅ |
38
+ | `/api/tables` | GET | `getTables()` | ✅ |
39
+ | `/api/tables/:name` | GET | `getTables()` 내부 | ✅ |
40
+ | `/api/tables/:name/description` | PUT | `setTableDescription()` | ✅ |
41
+ | `/api/tables/:table/columns/:column/description` | PUT | `setColumnDescription()` | ✅ |
42
+ | `/api/query` | POST | `SQLExecutor.execute()` | ✅ |
43
+ | `/api/query/estimate` | POST | `SQLExecutor.estimateCost()` | ✅ |
44
+ | `/api/harvest` | POST | `harvest()` | ✅ |
45
+ | `/api/knowledge` | GET | `getKnowledge()` | ✅ |
46
+ | `/api/feedback` | POST | `recordFeedback()` | ✅ |
47
+ | `/api/metrics` | GET | `getMetrics()` | ✅ |
48
+ | `/api/examples` | POST | `addQueryExample()` | ✅ |
49
+ | `/api/rules` | POST | `addBusinessRule()` | ✅ |
50
+ | `/api/rules/candidates` | GET | `getRuleCandidates()` | ✅ |
51
+ | `/api/context` | POST | (미구현 - 선택적) | ⚠️ |
52
+ | `/api/schema` | GET | (미구현 - 선택적) | ⚠️ |
53
+ | `/api/harvest/preview` | GET | (미구현 - 선택적) | ⚠️ |
54
+
55
+ ---
56
+
57
+ ### 2. MCP Tools ↔ REST API 동기화
58
+
59
+ **원칙:** MCP tool과 REST API는 동일한 `DataContextService`를 사용합니다. 새 기능은 두 곳 모두에 노출되어야 합니다.
60
+
61
+ #### 파일 매핑
62
+
63
+ | 기능 추가 시 | MCP 파일 | REST 파일 |
64
+ |-------------|----------|----------|
65
+ | 새 tool/endpoint | `src/mcp/tools.ts` | `src/api/server.ts` |
66
+ | 새 service 메서드 | `src/core/context-service.ts` | `src/core/context-service.ts` |
67
+
68
+ #### MCP Tools ↔ REST Endpoints 매핑
69
+
70
+ | MCP Tool | REST Endpoint | Service Method |
71
+ |----------|---------------|----------------|
72
+ | `query` | `POST /api/query` | `service.query()` |
73
+ | `list_tables` | `GET /api/tables` | `service.listTables()` |
74
+ | `describe_table` | `GET /api/tables/:name` | `service.getTableWithContext()` |
75
+ | `get_context` | `POST /api/context` | `service.buildContext()` |
76
+ | `add_description` | `PUT /api/tables/:name/description` | `service.setTableDescription()` |
77
+ | `harvest_metadata` | `POST /api/harvest` | `service.harvest()` |
78
+ | `estimate_cost` | `POST /api/query/estimate` | `service.estimateCost()` |
79
+ | `record_feedback` | `POST /api/feedback` | `service.recordFeedback()` |
80
+ | `get_metrics` | `GET /api/metrics` | `service.getMetricsSummary()` |
81
+ | `add_query_example` | `POST /api/examples` | `service.addQueryExample()` |
82
+ | `add_business_rule` | `POST /api/rules` | `service.addBusinessRule()` |
83
+
84
+ ---
85
+
86
+ ### 3. 문서 동기화
87
+
88
+ **원칙:** 코드 변경 시 관련 문서도 함께 업데이트합니다.
89
+
90
+ | 변경 유형 | 업데이트 필요 문서 |
91
+ |----------|-------------------|
92
+ | 새 CLI command | `datacontext-cli/README.md` |
93
+ | 새 REST endpoint | `datacontext-cli/docs/API.md` |
94
+ | 새 MCP tool | `datacontext-cli/README.md` MCP Tools 테이블 |
95
+ | 새 Extension command | `vscode-datacontext/README.md` Commands 테이블 |
96
+ | Extension 설정 추가 | `vscode-datacontext/README.md` Configuration 섹션 |
97
+ | 데모 시나리오 변경 | `datacontext-cli/docs/DEMO_SCRIPT.md` |
98
+
99
+ ---
100
+
101
+ ## 버전 관리
102
+
103
+ ### 버전 위치
104
+
105
+ | 컴포넌트 | 파일 | 필드 |
106
+ |----------|------|------|
107
+ | CLI | `datacontext-cli/package.json` | `"version"` |
108
+ | Extension | `vscode-datacontext/package.json` | `"version"` |
109
+
110
+ ### 버전 증가 규칙
111
+
112
+ - **Patch (0.0.X)**: 버그 수정, 문서 업데이트
113
+ - **Minor (0.X.0)**: 새 기능 추가 (하위 호환)
114
+ - **Major (X.0.0)**: Breaking changes
115
+
116
+ ### CHANGELOG 업데이트
117
+
118
+ 각 릴리스에서 다음 파일 업데이트:
119
+ - `datacontext-cli/CHANGELOG.md`
120
+ - `vscode-datacontext/CHANGELOG.md`
121
+
122
+ ---
123
+
124
+ ## 타입 동기화
125
+
126
+ ### CLI 타입 → Extension 타입
127
+
128
+ CLI에서 정의된 타입이 Extension에서도 필요할 때, 동일한 구조로 재정의합니다.
129
+
130
+ #### 예시: QueryFeedback 타입
131
+
132
+ **CLI (`src/core/feedback-manager.ts`):**
133
+ ```typescript
134
+ export interface QueryFeedback {
135
+ originalSql: string;
136
+ correctedSql?: string;
137
+ intent?: string;
138
+ feedbackType: 'success' | 'corrected' | 'failed' | 'rejected';
139
+ tables?: string[];
140
+ // ...
141
+ }
142
+ ```
143
+
144
+ **Extension (`src/services/connectionManager.ts`):**
145
+ ```typescript
146
+ export interface QueryFeedback {
147
+ originalSql: string;
148
+ correctedSql?: string;
149
+ intent?: string;
150
+ feedbackType: 'success' | 'corrected' | 'failed' | 'rejected';
151
+ tables?: string[];
152
+ errorMessage?: string;
153
+ }
154
+ ```
155
+
156
+ **주의:** Extension은 API Response 기준으로 타입을 정의합니다. CLI 내부 타입과 100% 일치할 필요 없음.
157
+
158
+ ---
159
+
160
+ ## 자동 동기화 체크리스트
161
+
162
+ AI 어시스턴트가 코드 변경 시 확인해야 할 사항:
163
+
164
+ ### REST API 엔드포인트 추가 시
165
+ - [ ] `src/api/server.ts`에 라우트 추가
166
+ - [ ] `docs/API.md`에 문서 추가
167
+ - [ ] `vscode-datacontext/src/services/connectionManager.ts`에 메서드 추가
168
+ - [ ] `vscode-datacontext/README.md` API Endpoints 섹션 업데이트
169
+
170
+ ### MCP Tool 추가 시
171
+ - [ ] `src/mcp/tools.ts`의 `getMcpTools()` 에 추가
172
+ - [ ] `src/mcp/tools.ts`의 `handleToolCall()` switch에 핸들러 추가
173
+ - [ ] `README.md` MCP Tools 테이블 업데이트
174
+
175
+ ### Extension Command 추가 시
176
+ - [ ] `package.json` contributes.commands에 추가
177
+ - [ ] `src/extension.ts`에 핸들러 등록
178
+ - [ ] `README.md` Commands 테이블 업데이트
179
+ - [ ] 필요 시 `package.json` keybindings/menus 추가
180
+
181
+ ### 새 설정 옵션 추가 시
182
+ - [ ] `package.json` contributes.configuration에 추가
183
+ - [ ] `README.md` Configuration 섹션 업데이트
184
+
185
+ ---
186
+
187
+ ## 테스트 동기화
188
+
189
+ | 기능 영역 | 테스트 파일 |
190
+ |----------|------------|
191
+ | Knowledge Store | `tests/knowledge-store.test.ts` |
192
+ | MCP Tools | `tests/mcp-tools.test.ts` |
193
+ | PostgreSQL Adapter | `tests/postgres-adapter.test.ts` |
194
+ | SQLite Adapter | `tests/sqlite-adapter.test.ts` |
195
+ | Safety Validator | `tests/safety-validator.test.ts` |
196
+
197
+ 새 기능 추가 시 관련 테스트도 추가해야 합니다.
198
+
199
+ ---
200
+
201
+ ## 참고: 의존성 관계
202
+
203
+ ```
204
+ ┌─────────────────────────────────────────────────────────────┐
205
+ │ vscode-datacontext │
206
+ │ (VS Code Extension - UI Layer) │
207
+ └─────────────────────────┬───────────────────────────────────┘
208
+ │ HTTP (REST API)
209
+
210
+ ┌─────────────────────────────────────────────────────────────┐
211
+ │ datacontext-cli │
212
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
213
+ │ │ api/ │ │ mcp/ │ │ cli/ │ │
214
+ │ │ (REST) │ │ (MCP) │ │ (Terminal) │ │
215
+ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
216
+ │ │ │ │ │
217
+ │ └────────────────┼────────────────┘ │
218
+ │ ▼ │
219
+ │ ┌─────────────────────────────────────────────────────┐ │
220
+ │ │ core/ │ │
221
+ │ │ (DataContextService - platform-agnostic) │ │
222
+ │ └─────────────────────────┬───────────────────────────┘ │
223
+ │ │ │
224
+ │ ┌───────────┬─────────────┼─────────────┬───────────┐ │
225
+ │ ▼ ▼ ▼ ▼ ▼ │
226
+ │ adapters/ knowledge/ safety/ schema/ feedback/ │
227
+ └─────────────────────────────────────────────────────────────┘
228
+ ```
229
+
230
+ **핵심 원칙:**
231
+ - `core/`는 platform-agnostic - `mcp/`, `api/`를 import하지 않음
232
+ - `mcp/`와 `api/`는 서로를 import하지 않음 - 둘 다 `core/`만 사용
233
+ - Extension은 REST API만 사용 - CLI 코드 직접 import 불가
234
+
235
+ ---
236
+
237
+ ## 변경 이력
238
+
239
+ | 날짜 | 변경 내용 |
240
+ |------|----------|
241
+ | 2026-01-01 | 초기 문서 작성 |
242
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kiyeonjeon21/datacontext",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "AI-native database context layer - Make AI understand your data better",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "build": "tsc",
12
12
  "dev": "tsc --watch",
13
13
  "start": "node dist/index.js",
14
+ "serve": "node dist/api/start-server.js",
14
15
  "lint": "eslint src --ext .ts",
15
16
  "test": "vitest run",
16
17
  "test:watch": "vitest",
@@ -42,10 +43,12 @@
42
43
  "node": ">=18.0.0"
43
44
  },
44
45
  "dependencies": {
46
+ "@anthropic-ai/sdk": "^0.71.2",
45
47
  "@modelcontextprotocol/sdk": "^1.0.0",
46
48
  "better-sqlite3": "^12.5.0",
47
49
  "commander": "^12.1.0",
48
50
  "cors": "^2.8.5",
51
+ "dotenv": "^17.2.3",
49
52
  "express": "^5.2.1",
50
53
  "mysql2": "^3.16.0",
51
54
  "pg": "^8.13.0",