activo 0.2.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/FINAL_SIMPLIFIED_SPEC.md +456 -0
- package/README.md +62 -0
- package/TODO.md +193 -0
- package/dist/cli/banner.d.ts +3 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +30 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/headless.d.ts +3 -0
- package/dist/cli/headless.d.ts.map +1 -0
- package/dist/cli/headless.js +34 -0
- package/dist/cli/headless.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/agent.d.ts +23 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +171 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/config.d.ts +24 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +66 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/llm/ollama.d.ts +30 -0
- package/dist/core/llm/ollama.d.ts.map +1 -0
- package/dist/core/llm/ollama.js +173 -0
- package/dist/core/llm/ollama.js.map +1 -0
- package/dist/core/mcp/client.d.ts +22 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +116 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/tools/builtIn.d.ts +9 -0
- package/dist/core/tools/builtIn.d.ts.map +1 -0
- package/dist/core/tools/builtIn.js +219 -0
- package/dist/core/tools/builtIn.js.map +1 -0
- package/dist/core/tools/index.d.ts +13 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +43 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/standards.d.ts +6 -0
- package/dist/core/tools/standards.d.ts.map +1 -0
- package/dist/core/tools/standards.js +215 -0
- package/dist/core/tools/standards.js.map +1 -0
- package/dist/core/tools/types.d.ts +34 -0
- package/dist/core/tools/types.d.ts.map +1 -0
- package/dist/core/tools/types.js +2 -0
- package/dist/core/tools/types.js.map +1 -0
- package/dist/ui/App.d.ts +10 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +167 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +11 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -0
- package/dist/ui/components/InputBox.js +7 -0
- package/dist/ui/components/InputBox.js.map +1 -0
- package/dist/ui/components/MessageList.d.ts +17 -0
- package/dist/ui/components/MessageList.d.ts.map +1 -0
- package/dist/ui/components/MessageList.js +18 -0
- package/dist/ui/components/MessageList.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +9 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +6 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/ToolStatus.d.ts +8 -0
- package/dist/ui/components/ToolStatus.d.ts.map +1 -0
- package/dist/ui/components/ToolStatus.js +7 -0
- package/dist/ui/components/ToolStatus.js.map +1 -0
- package/package.json +64 -0
- package/screenshot.png +0 -0
- package/src/cli/banner.ts +34 -0
- package/src/cli/headless.ts +37 -0
- package/src/cli/index.ts +53 -0
- package/src/core/agent.ts +235 -0
- package/src/core/config.ts +98 -0
- package/src/core/llm/ollama.ts +238 -0
- package/src/core/mcp/client.ts +143 -0
- package/src/core/tools/builtIn.ts +221 -0
- package/src/core/tools/index.ts +53 -0
- package/src/core/tools/standards.ts +246 -0
- package/src/core/tools/types.ts +37 -0
- package/src/ui/App.tsx +238 -0
- package/src/ui/components/InputBox.tsx +37 -0
- package/src/ui/components/MessageList.tsx +80 -0
- package/src/ui/components/StatusBar.tsx +36 -0
- package/src/ui/components/ToolStatus.tsx +38 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
# activo-code 최종 방안 (간소화)
|
|
2
|
+
|
|
3
|
+
## 0. 참조 레포지토리
|
|
4
|
+
|
|
5
|
+
### continue-cli GitHub
|
|
6
|
+
- **메인 레포**: https://github.com/continuedev/continue
|
|
7
|
+
- **CLI 코드 위치**: `extensions/cli/`
|
|
8
|
+
- **Core 코드 위치**: `core/`
|
|
9
|
+
|
|
10
|
+
### 작업 전 준비 (필수)
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# continue 레포 클론 (참조용)
|
|
14
|
+
cd ~/Downloads
|
|
15
|
+
git clone https://github.com/continuedev/continue.git
|
|
16
|
+
cd continue
|
|
17
|
+
|
|
18
|
+
# CLI 구조 확인
|
|
19
|
+
ls -la extensions/cli/
|
|
20
|
+
ls -la extensions/cli/src/
|
|
21
|
+
|
|
22
|
+
# Core 구조 확인
|
|
23
|
+
ls -la core/
|
|
24
|
+
ls -la core/llm/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 참조할 주요 파일
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
~/Downloads/continue/
|
|
31
|
+
├── extensions/cli/
|
|
32
|
+
│ ├── src/
|
|
33
|
+
│ │ ├── index.ts # CLI 엔트리포인트
|
|
34
|
+
│ │ ├── commands/ # 명령어 구현
|
|
35
|
+
│ │ ├── tui/ # Terminal UI (React Ink)
|
|
36
|
+
│ │ └── headless/ # Headless 모드
|
|
37
|
+
│ └── package.json # 의존성 참조
|
|
38
|
+
├── core/
|
|
39
|
+
│ ├── llm/
|
|
40
|
+
│ │ ├── llms/ # LLM 프로바이더들
|
|
41
|
+
│ │ └── templates/ # 프롬프트 템플릿
|
|
42
|
+
│ ├── config/ # 설정 로딩
|
|
43
|
+
│ └── tools/ # Agent Tools
|
|
44
|
+
└── packages/
|
|
45
|
+
└── openai-adapters/ # OpenAI 호환 어댑터
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 참조 시 주의사항
|
|
49
|
+
- continue-cli는 범용 코딩 에이전트 (우리는 품질 분석 특화)
|
|
50
|
+
- Ollama 연동 방식, CLI 구조, 세션 관리 참조
|
|
51
|
+
- LLM Provider 추상화 패턴 참조
|
|
52
|
+
- 프롬프트 구조는 우리 목적에 맞게 재설계
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 1. 결론 요약
|
|
57
|
+
|
|
58
|
+
### 인터페이스: CLI 단일화
|
|
59
|
+
```
|
|
60
|
+
PDF → MD 변환: CLI (activo standards import)
|
|
61
|
+
MD 수정: 에디터로 직접 (VS Code 등)
|
|
62
|
+
코드 분석: CLI (activo improve, activo check)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### continue-cli RAG 기능
|
|
66
|
+
**있음**, 하지만 제한적:
|
|
67
|
+
- `.continue/rules/` 폴더에 MD 파일 배치 → 자동 컨텍스트 로드
|
|
68
|
+
- `@docs` context provider → 문서 참조 (deprecated, MCP로 대체 중)
|
|
69
|
+
- Custom Context Provider → 자체 RAG 서버 연동 가능
|
|
70
|
+
|
|
71
|
+
**activo-code에서 활용 방안:**
|
|
72
|
+
- 규칙 MD를 `.continue/rules/` 또는 `.activo/standards/`에 배치
|
|
73
|
+
- 분석 시 해당 MD를 직접 로드하여 프롬프트에 포함 (자체 구현)
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 2. PDF → MD 변환 전략
|
|
78
|
+
|
|
79
|
+
### 2.1 CLI 명령어
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# PDF 변환 (청크 분할, 여러 MD 생성)
|
|
83
|
+
activo standards import ./개발표준.pdf
|
|
84
|
+
|
|
85
|
+
# 결과
|
|
86
|
+
.activo/standards/
|
|
87
|
+
├── _index.md # 전체 목록/요약
|
|
88
|
+
├── 01_명명규칙.md # 청크 1
|
|
89
|
+
├── 02_코드구조.md # 청크 2
|
|
90
|
+
├── 03_보안.md # 청크 3
|
|
91
|
+
├── 04_예외처리.md # 청크 4
|
|
92
|
+
└── 05_주석문서화.md # 청크 5
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 2.2 청크 분할 전략
|
|
96
|
+
|
|
97
|
+
| PDF 크기 | 청크 크기 | MD 파일 수 |
|
|
98
|
+
|----------|----------|-----------|
|
|
99
|
+
| ~20페이지 | 전체 1개 | 1개 |
|
|
100
|
+
| 20~50페이지 | 장/절 단위 | 3~5개 |
|
|
101
|
+
| 50페이지+ | 2000자 단위 | 다수 |
|
|
102
|
+
|
|
103
|
+
**분할 기준:**
|
|
104
|
+
1. 목차 기반 (장/절 경계)
|
|
105
|
+
2. 페이지 단위 (목차 없을 경우)
|
|
106
|
+
3. 고정 길이 (마지막 수단)
|
|
107
|
+
|
|
108
|
+
### 2.3 생성되는 MD 구조
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
# 명명규칙 (01_명명규칙.md)
|
|
112
|
+
|
|
113
|
+
> 원본: 개발표준_v2.1.pdf (페이지 5-12)
|
|
114
|
+
> 추출일: 2025-01-30
|
|
115
|
+
|
|
116
|
+
## NR-001: 클래스명
|
|
117
|
+
- 심각도: error
|
|
118
|
+
- 규칙: PascalCase 사용
|
|
119
|
+
- 예시: UserService (O), userService (X)
|
|
120
|
+
|
|
121
|
+
## NR-002: 변수명
|
|
122
|
+
- 심각도: warning
|
|
123
|
+
- 규칙: camelCase 사용
|
|
124
|
+
- 예시: userName (O), user_name (X)
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
[수동 수정 필요 시 이 파일을 직접 편집하세요]
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 2.4 수동 편집 가이드
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# 변환 후 안내 메시지
|
|
134
|
+
$ activo standards import ./개발표준.pdf
|
|
135
|
+
|
|
136
|
+
PDF 변환 완료!
|
|
137
|
+
- 생성된 파일: 5개
|
|
138
|
+
- 위치: .activo/standards/
|
|
139
|
+
|
|
140
|
+
[다음 단계]
|
|
141
|
+
1. 생성된 MD 파일을 에디터로 확인하세요
|
|
142
|
+
2. 잘못 추출된 규칙은 직접 수정/삭제하세요
|
|
143
|
+
3. 누락된 규칙은 수동으로 추가하세요
|
|
144
|
+
|
|
145
|
+
$ code .activo/standards/ # VS Code로 열기
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 3. 아키텍처 (간소화)
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
┌─────────────────────────────────────────────────┐
|
|
154
|
+
│ activo-code │
|
|
155
|
+
├─────────────────────────────────────────────────┤
|
|
156
|
+
│ │
|
|
157
|
+
│ [CLI] │
|
|
158
|
+
│ ├── activo standards import <pdf> │
|
|
159
|
+
│ │ └── PDF → 청크 분할 → Ollama 추출 → MD들 │
|
|
160
|
+
│ │ │
|
|
161
|
+
│ ├── activo standards list │
|
|
162
|
+
│ │ └── 현재 로드된 규칙 목록 │
|
|
163
|
+
│ │ │
|
|
164
|
+
│ ├── activo improve <path> │
|
|
165
|
+
│ │ └── 코드 개선점 분석 (Why/How) │
|
|
166
|
+
│ │ │
|
|
167
|
+
│ ├── activo check <path> │
|
|
168
|
+
│ │ └── 표준 규칙 준수 여부 점검 │
|
|
169
|
+
│ │ │
|
|
170
|
+
│ └── activo explain --input <cqc-result.json> │
|
|
171
|
+
│ └── code-quality-checker 결과 설명 추가 │
|
|
172
|
+
│ │
|
|
173
|
+
├─────────────────────────────────────────────────┤
|
|
174
|
+
│ │
|
|
175
|
+
│ [Standards Loader] │
|
|
176
|
+
│ └── .activo/standards/*.md 로드 │
|
|
177
|
+
│ └── 여러 MD 병합 → 프롬프트 컨텍스트 │
|
|
178
|
+
│ │
|
|
179
|
+
├─────────────────────────────────────────────────┤
|
|
180
|
+
│ │
|
|
181
|
+
│ [Ollama Engine] │
|
|
182
|
+
│ ├── PDF 규칙 추출: qwen2.5:7b (한국어) │
|
|
183
|
+
│ └── 코드 분석: codellama:7b │
|
|
184
|
+
│ │
|
|
185
|
+
└─────────────────────────────────────────────────┘
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 4. 분석 시 규칙 로드 방식
|
|
191
|
+
|
|
192
|
+
### 4.1 단순 방식 (권장)
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
[분석 요청]
|
|
196
|
+
↓
|
|
197
|
+
[.activo/standards/*.md 전체 로드]
|
|
198
|
+
↓
|
|
199
|
+
[관련 규칙만 필터링] ← 파일 확장자, 카테고리 기반
|
|
200
|
+
↓
|
|
201
|
+
[프롬프트에 규칙 포함]
|
|
202
|
+
↓
|
|
203
|
+
[Ollama 호출]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**예시: Java 파일 분석 시**
|
|
207
|
+
```
|
|
208
|
+
로드할 규칙:
|
|
209
|
+
- 01_명명규칙.md (전체)
|
|
210
|
+
- 02_코드구조.md (전체)
|
|
211
|
+
- 03_보안.md (전체)
|
|
212
|
+
|
|
213
|
+
제외:
|
|
214
|
+
- 06_HTML규칙.md
|
|
215
|
+
- 07_CSS규칙.md
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 4.2 프롬프트 구성
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
[시스템]
|
|
222
|
+
당신은 코드 품질 전문가입니다.
|
|
223
|
+
아래 개발표준 규칙에 따라 코드를 점검하세요.
|
|
224
|
+
|
|
225
|
+
[개발표준 규칙]
|
|
226
|
+
## 명명규칙
|
|
227
|
+
- NR-001: 클래스명 PascalCase (error)
|
|
228
|
+
- NR-002: 변수명 camelCase (warning)
|
|
229
|
+
...
|
|
230
|
+
|
|
231
|
+
## 코드구조
|
|
232
|
+
- CS-001: 메서드 50줄 이하 (warning)
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
[분석 대상 코드]
|
|
236
|
+
```java
|
|
237
|
+
public class userService { ... }
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
[질문]
|
|
241
|
+
위 코드가 개발표준을 위반하는 부분을 찾고,
|
|
242
|
+
각 위반에 대해 다음을 설명하세요:
|
|
243
|
+
1. 위반 규칙 ID
|
|
244
|
+
2. 위반 위치 (라인)
|
|
245
|
+
3. 위반 이유
|
|
246
|
+
4. 수정 방안
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 4.3 8GB Ollama 대응
|
|
250
|
+
|
|
251
|
+
**규칙 MD가 너무 클 경우:**
|
|
252
|
+
```
|
|
253
|
+
전체 규칙: 10,000자 → 컨텍스트 초과
|
|
254
|
+
|
|
255
|
+
해결책:
|
|
256
|
+
1. 분석 대상 언어의 규칙만 로드
|
|
257
|
+
2. 카테고리별로 나눠서 여러 번 호출
|
|
258
|
+
3. 규칙 요약본 사용 (_index.md)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 5. CLI 명령어 최종
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# 개발표준 관리
|
|
267
|
+
activo standards import <pdf> # PDF → MD 변환 (청크 분할)
|
|
268
|
+
activo standards list # 현재 규칙 목록
|
|
269
|
+
activo standards validate # MD 문법 검증
|
|
270
|
+
|
|
271
|
+
# 코드 분석
|
|
272
|
+
activo improve <path> # 개선점 분석
|
|
273
|
+
activo improve --focus naming # 특정 영역 집중
|
|
274
|
+
activo check <path> # 표준 준수 점검
|
|
275
|
+
activo check --strict # 엄격 모드
|
|
276
|
+
|
|
277
|
+
# code-quality-checker 연동
|
|
278
|
+
activo explain -i result.json # cqc 결과 설명
|
|
279
|
+
|
|
280
|
+
# 설정
|
|
281
|
+
activo config # 설정 확인/수정
|
|
282
|
+
activo config set model codellama:7b
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 6. continue-cli 참조 vs 자체 구현
|
|
288
|
+
|
|
289
|
+
### continue-cli 레포 구조 (~/Downloads/continue/)
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
~/Downloads/continue/
|
|
293
|
+
├── extensions/cli/ # ← 메인 참조 대상
|
|
294
|
+
│ ├── src/
|
|
295
|
+
│ │ ├── index.ts # CLI 메인 (Commander.js)
|
|
296
|
+
│ │ ├── commands/ # 명령어 핸들러
|
|
297
|
+
│ │ ├── tui/ # React Ink TUI
|
|
298
|
+
│ │ ├── headless/ # CI용 헤드리스 모드
|
|
299
|
+
│ │ └── session/ # 세션 관리
|
|
300
|
+
│ ├── package.json # 의존성 목록
|
|
301
|
+
│ └── tsconfig.json
|
|
302
|
+
├── core/ # ← LLM/Tool 참조
|
|
303
|
+
│ ├── llm/
|
|
304
|
+
│ │ ├── llms/ # 각 프로바이더 구현
|
|
305
|
+
│ │ │ ├── Ollama.ts # ★ Ollama 연동 참조
|
|
306
|
+
│ │ │ ├── OpenAI.ts
|
|
307
|
+
│ │ │ └── Anthropic.ts
|
|
308
|
+
│ │ └── templates/ # 프롬프트 템플릿
|
|
309
|
+
│ ├── config/ # 설정 로딩
|
|
310
|
+
│ ├── tools/ # Agent Tools
|
|
311
|
+
│ └── index.d.ts # 타입 정의
|
|
312
|
+
└── packages/
|
|
313
|
+
├── config-types/ # 설정 타입
|
|
314
|
+
└── fetch/ # HTTP 클라이언트
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### continue-cli에서 가져올 것
|
|
318
|
+
- CLI 구조 (Commander.js 패턴) → `extensions/cli/src/index.ts`
|
|
319
|
+
- Ollama 연동 방식 → `core/llm/llms/Ollama.ts`
|
|
320
|
+
- 세션/히스토리 관리 → `extensions/cli/src/session/`
|
|
321
|
+
- 설정 로딩 패턴 → `core/config/`
|
|
322
|
+
|
|
323
|
+
### 자체 구현할 것
|
|
324
|
+
- PDF 파싱 및 청크 분할
|
|
325
|
+
- 개발표준 규칙 로더
|
|
326
|
+
- 코드 품질 분석 프롬프트
|
|
327
|
+
- code-quality-checker 연동
|
|
328
|
+
|
|
329
|
+
### continue-cli RAG 활용 여부
|
|
330
|
+
**활용 안 함** (자체 구현)
|
|
331
|
+
- continue-cli RAG는 IDE 통합 위주
|
|
332
|
+
- 우리는 단순히 MD 파일 로드 → 프롬프트 포함
|
|
333
|
+
- 복잡한 벡터 DB 불필요 (규칙 MD는 작음)
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 7. 개발 우선순위
|
|
338
|
+
|
|
339
|
+
### Phase 1 (1주)
|
|
340
|
+
- [ ] CLI 프레임워크
|
|
341
|
+
- [ ] Ollama 연동 (ollama-js)
|
|
342
|
+
- [ ] 단일 파일 개선점 분석
|
|
343
|
+
|
|
344
|
+
### Phase 2 (1주)
|
|
345
|
+
- [ ] PDF 파싱 (pdf-parse)
|
|
346
|
+
- [ ] 청크 분할 로직
|
|
347
|
+
- [ ] MD 생성
|
|
348
|
+
|
|
349
|
+
### Phase 3 (1주)
|
|
350
|
+
- [ ] 규칙 MD 로더
|
|
351
|
+
- [ ] 표준 준수 점검
|
|
352
|
+
- [ ] cqc 연동
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 8. 파일 구조
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
activo-code/
|
|
360
|
+
├── src/
|
|
361
|
+
│ ├── cli/
|
|
362
|
+
│ │ ├── index.ts
|
|
363
|
+
│ │ └── commands/
|
|
364
|
+
│ │ ├── standards.ts # import, list, validate
|
|
365
|
+
│ │ ├── improve.ts # 개선점 분석
|
|
366
|
+
│ │ ├── check.ts # 표준 점검
|
|
367
|
+
│ │ └── explain.ts # cqc 연동
|
|
368
|
+
│ ├── core/
|
|
369
|
+
│ │ ├── pdf-parser.ts # PDF → 텍스트
|
|
370
|
+
│ │ ├── chunk-splitter.ts # 청크 분할
|
|
371
|
+
│ │ ├── rule-extractor.ts # Ollama로 규칙 추출
|
|
372
|
+
│ │ ├── rule-loader.ts # MD 로드
|
|
373
|
+
│ │ └── analyzer.ts # 코드 분석
|
|
374
|
+
│ └── llm/
|
|
375
|
+
│ ├── ollama.ts # Ollama 클라이언트
|
|
376
|
+
│ └── prompts.ts # 프롬프트 템플릿
|
|
377
|
+
├── package.json
|
|
378
|
+
└── .activo/ # 프로젝트별 설정
|
|
379
|
+
└── standards/ # 규칙 MD 저장 위치
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 9. 기술 스택
|
|
385
|
+
|
|
386
|
+
| 영역 | 기술 |
|
|
387
|
+
|------|------|
|
|
388
|
+
| 언어 | TypeScript (Node.js) |
|
|
389
|
+
| CLI | Commander.js |
|
|
390
|
+
| PDF | pdf-parse |
|
|
391
|
+
| LLM | ollama (npm 패키지) |
|
|
392
|
+
| 출력 | chalk, ora |
|
|
393
|
+
|
|
394
|
+
또는 Go로 통일 (code-quality-checker와 맞춤):
|
|
395
|
+
|
|
396
|
+
| 영역 | 기술 |
|
|
397
|
+
|------|------|
|
|
398
|
+
| 언어 | Go |
|
|
399
|
+
| CLI | cobra |
|
|
400
|
+
| PDF | pdfcpu |
|
|
401
|
+
| LLM | ollama Go client |
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## 10. 개발 시작 전 체크리스트
|
|
406
|
+
|
|
407
|
+
### 환경 준비
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
# 1. continue 레포 클론 (참조용)
|
|
411
|
+
cd ~/Downloads
|
|
412
|
+
git clone https://github.com/continuedev/continue.git
|
|
413
|
+
|
|
414
|
+
# 2. continue-cli 구조 파악
|
|
415
|
+
cd continue
|
|
416
|
+
cat extensions/cli/package.json # 의존성 확인
|
|
417
|
+
cat extensions/cli/src/index.ts # CLI 엔트리 확인
|
|
418
|
+
cat core/llm/llms/Ollama.ts # Ollama 연동 확인
|
|
419
|
+
|
|
420
|
+
# 3. Ollama 설치 및 모델 다운로드
|
|
421
|
+
ollama pull codellama:7b # 코드 분석용
|
|
422
|
+
ollama pull qwen2.5:7b # 한국어 PDF용 (선택)
|
|
423
|
+
|
|
424
|
+
# 4. activo-code 프로젝트 생성
|
|
425
|
+
cd ~/Projects # 또는 원하는 위치
|
|
426
|
+
mkdir activo-code && cd activo-code
|
|
427
|
+
pnpm init
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### 참조 파일 복사 (선택)
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
# Ollama 연동 코드 참조용 복사
|
|
434
|
+
cp ~/Downloads/continue/core/llm/llms/Ollama.ts ./reference/
|
|
435
|
+
|
|
436
|
+
# CLI 구조 참조용 복사
|
|
437
|
+
cp ~/Downloads/continue/extensions/cli/src/index.ts ./reference/
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Claude Code 작업 시 지시문
|
|
441
|
+
|
|
442
|
+
```
|
|
443
|
+
activo-code 프로젝트를 만들어주세요.
|
|
444
|
+
|
|
445
|
+
참조 레포: ~/Downloads/continue/
|
|
446
|
+
- CLI 구조: extensions/cli/src/
|
|
447
|
+
- Ollama 연동: core/llm/llms/Ollama.ts
|
|
448
|
+
- 설정 패턴: core/config/
|
|
449
|
+
|
|
450
|
+
주요 기능:
|
|
451
|
+
1. PDF → MD 변환 (청크 분할)
|
|
452
|
+
2. 개발표준 규칙 점검
|
|
453
|
+
3. 코드 개선점 분석
|
|
454
|
+
|
|
455
|
+
Ollama 모델: codellama:7b (8GB 메모리 제한)
|
|
456
|
+
```
|
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# ACTIVO
|
|
2
|
+
|
|
3
|
+
AI 기반 코드 품질 분석 CLI 도구
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## 설치
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm install
|
|
11
|
+
pnpm build
|
|
12
|
+
npm link
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 사용법
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 대화형 모드
|
|
19
|
+
activo
|
|
20
|
+
|
|
21
|
+
# 프롬프트와 함께 실행
|
|
22
|
+
activo "src 폴더 구조 보여줘"
|
|
23
|
+
|
|
24
|
+
# 비대화형 모드
|
|
25
|
+
activo --print "package.json 분석해줘"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 주요 기능
|
|
29
|
+
|
|
30
|
+
- **자연어 인터페이스**: 한글로 명령 입력
|
|
31
|
+
- **Tool Calling**: 파일 읽기/쓰기, 검색, 명령 실행
|
|
32
|
+
- **PDF 변환**: 개발표준 PDF → Markdown 변환
|
|
33
|
+
- **코드 품질 분석**: 규칙 기반 코드 점검
|
|
34
|
+
|
|
35
|
+
## 요구사항
|
|
36
|
+
|
|
37
|
+
- Node.js 18+
|
|
38
|
+
- [Ollama](https://ollama.ai) 실행 중
|
|
39
|
+
|
|
40
|
+
## 설정
|
|
41
|
+
|
|
42
|
+
`~/.activo/config.json`:
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"ollama": {
|
|
46
|
+
"baseUrl": "http://localhost:11434",
|
|
47
|
+
"model": "mistral:latest"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 단축키
|
|
53
|
+
|
|
54
|
+
| 키 | 동작 |
|
|
55
|
+
|---|------|
|
|
56
|
+
| `Enter` | 메시지 전송 |
|
|
57
|
+
| `ESC` | 진행 중 작업 취소 |
|
|
58
|
+
| `Ctrl+C` x2 | 종료 |
|
|
59
|
+
|
|
60
|
+
## 라이선스
|
|
61
|
+
|
|
62
|
+
MIT
|
package/TODO.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# TODO.md - activo-code 개발 계획
|
|
2
|
+
|
|
3
|
+
## 아키텍처 (v0.2.0 - React Ink TUI)
|
|
4
|
+
|
|
5
|
+
### continue-cli 기반 새 구조
|
|
6
|
+
```
|
|
7
|
+
activo-code/
|
|
8
|
+
├── src/
|
|
9
|
+
│ ├── cli/
|
|
10
|
+
│ │ ├── index.ts # CLI 엔트리 (Commander.js + React Ink)
|
|
11
|
+
│ │ ├── banner.ts # ACTIVO ASCII 아트 배너
|
|
12
|
+
│ │ └── headless.ts # 비대화형 모드
|
|
13
|
+
│ ├── core/
|
|
14
|
+
│ │ ├── config.ts # 설정 관리 (Ollama, MCP)
|
|
15
|
+
│ │ ├── agent.ts # 에이전트 (Tool Calling 루프)
|
|
16
|
+
│ │ ├── llm/
|
|
17
|
+
│ │ │ └── ollama.ts # Ollama 클라이언트 (스트리밍, Tool Calling)
|
|
18
|
+
│ │ ├── tools/
|
|
19
|
+
│ │ │ ├── types.ts # Tool, ToolCall, ToolResult 타입
|
|
20
|
+
│ │ │ ├── builtIn.ts # 내장 도구 (파일, 검색, 명령)
|
|
21
|
+
│ │ │ ├── standards.ts # 표준 도구 (PDF, 품질 체크)
|
|
22
|
+
│ │ │ └── index.ts # 도구 레지스트리
|
|
23
|
+
│ │ └── mcp/
|
|
24
|
+
│ │ └── client.ts # MCP 프로토콜 클라이언트
|
|
25
|
+
│ └── ui/
|
|
26
|
+
│ ├── App.tsx # 메인 React Ink 앱
|
|
27
|
+
│ └── components/
|
|
28
|
+
│ ├── InputBox.tsx # 입력창 컴포넌트
|
|
29
|
+
│ ├── MessageList.tsx # 메시지 목록
|
|
30
|
+
│ ├── StatusBar.tsx # 상태바 (모델, 메시지 수)
|
|
31
|
+
│ └── ToolStatus.tsx # 도구 실행 상태
|
|
32
|
+
├── package.json
|
|
33
|
+
└── tsconfig.json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 핵심 기능
|
|
37
|
+
- **자연어 인터페이스**: 터미널에서 한글로 명령 입력
|
|
38
|
+
- **Tool Calling**: Ollama가 필요한 도구 자동 선택/실행
|
|
39
|
+
- **MCP 지원**: 외부 도구 서버 연결 가능
|
|
40
|
+
- **스트리밍**: 실시간 응답 출력
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Phase 0: 프로젝트 리빌드 ✅
|
|
45
|
+
|
|
46
|
+
### 0.1 React Ink TUI 구축
|
|
47
|
+
- [x] ink, ink-spinner, ink-text-input 설치
|
|
48
|
+
- [x] Commander.js + React Ink 통합
|
|
49
|
+
- [x] ASCII 배너 (gradient-string)
|
|
50
|
+
- [x] 대화형/비대화형 모드 분리
|
|
51
|
+
|
|
52
|
+
**테스트:**
|
|
53
|
+
```bash
|
|
54
|
+
node dist/cli/index.js --version # 0.2.0
|
|
55
|
+
node dist/cli/index.js --help # 옵션 목록
|
|
56
|
+
node dist/cli/index.js --print "test" # 배너 + 응답
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 0.2 Ollama 클라이언트
|
|
60
|
+
- [x] 스트리밍 chat 지원
|
|
61
|
+
- [x] Tool Calling 지원
|
|
62
|
+
- [x] 연결 상태 확인
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Phase 1: Tool Calling 시스템 ✅
|
|
67
|
+
|
|
68
|
+
### 1.1 내장 도구 (Built-in Tools)
|
|
69
|
+
- [x] `read_file` - 파일 읽기
|
|
70
|
+
- [x] `write_file` - 파일 쓰기
|
|
71
|
+
- [x] `list_directory` - 디렉토리 목록
|
|
72
|
+
- [x] `grep_search` - 텍스트 검색
|
|
73
|
+
- [x] `glob_search` - 파일 패턴 검색
|
|
74
|
+
- [x] `run_command` - 명령 실행
|
|
75
|
+
|
|
76
|
+
### 1.2 표준 도구 (Standards Tools)
|
|
77
|
+
- [x] `import_pdf_standards` - PDF → MD 변환
|
|
78
|
+
- [x] `list_standards` - 규칙 목록 조회
|
|
79
|
+
- [x] `check_code_quality` - 코드 품질 체크
|
|
80
|
+
|
|
81
|
+
### 1.3 에이전트 루프
|
|
82
|
+
- [x] 시스템 프롬프트 정의
|
|
83
|
+
- [x] 반복 Tool Calling 처리
|
|
84
|
+
- [x] 스트리밍 이벤트 생성
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Phase 2: MCP 지원 ✅
|
|
89
|
+
|
|
90
|
+
### 2.1 MCP 클라이언트
|
|
91
|
+
- [x] StdioClientTransport 연동
|
|
92
|
+
- [x] 도구 목록 조회
|
|
93
|
+
- [x] 도구 호출 프록시
|
|
94
|
+
|
|
95
|
+
### 2.2 설정
|
|
96
|
+
- [x] ~/.activo/config.json 지원
|
|
97
|
+
- [x] MCP 서버 설정 구조
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Phase 3: UI 컴포넌트 ✅
|
|
102
|
+
|
|
103
|
+
### 3.1 React Ink 컴포넌트
|
|
104
|
+
- [x] InputBox - 입력창 + 처리중 상태
|
|
105
|
+
- [x] MessageList - 대화 기록 표시
|
|
106
|
+
- [x] StatusBar - 모델, 메시지 수, 상태
|
|
107
|
+
- [x] ToolStatus - 도구 실행 표시
|
|
108
|
+
|
|
109
|
+
### 3.2 상태 관리
|
|
110
|
+
- [x] 메시지 히스토리
|
|
111
|
+
- [x] 도구 호출 추적
|
|
112
|
+
- [x] 에러 표시
|
|
113
|
+
- [x] Ctrl+C 처리 (2회 종료)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Phase 4: 통합 및 테스트
|
|
118
|
+
|
|
119
|
+
### 4.1 빌드 검증
|
|
120
|
+
- [x] TypeScript 컴파일
|
|
121
|
+
- [x] 배너 출력 확인
|
|
122
|
+
- [ ] Ollama 연동 테스트
|
|
123
|
+
- [ ] Tool Calling 실행 테스트
|
|
124
|
+
|
|
125
|
+
### 4.2 사용 시나리오 테스트
|
|
126
|
+
- [ ] "src 폴더 구조 보여줘"
|
|
127
|
+
- [ ] "이 프로젝트의 코드 품질 분석해줘"
|
|
128
|
+
- [ ] "PDF 파일을 규칙으로 변환해줘"
|
|
129
|
+
- [ ] "명명규칙 위반 찾아줘"
|
|
130
|
+
|
|
131
|
+
### 4.3 패키징
|
|
132
|
+
- [ ] npm link 테스트
|
|
133
|
+
- [ ] 글로벌 설치 테스트
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 테스트 체크리스트
|
|
138
|
+
|
|
139
|
+
### 빌드 & 기본 테스트
|
|
140
|
+
| 항목 | 명령어 | 예상 결과 | 상태 |
|
|
141
|
+
|------|--------|-----------|------|
|
|
142
|
+
| 빌드 | `pnpm build` | 성공 | ✅ |
|
|
143
|
+
| 버전 | `node dist/cli/index.js --version` | 0.2.0 | ✅ |
|
|
144
|
+
| 도움말 | `node dist/cli/index.js --help` | 옵션 목록 | ✅ |
|
|
145
|
+
| 배너 | `node dist/cli/index.js --print "test"` | ASCII 아트 | ✅ |
|
|
146
|
+
|
|
147
|
+
### 대화 테스트
|
|
148
|
+
| 항목 | 명령어 | 예상 결과 | 상태 |
|
|
149
|
+
|------|--------|-----------|------|
|
|
150
|
+
| 파일 목록 | "src 폴더에 뭐가 있어?" | list_directory 호출 | ⬜ |
|
|
151
|
+
| 파일 읽기 | "package.json 보여줘" | read_file 호출 | ⬜ |
|
|
152
|
+
| 검색 | "TODO 찾아줘" | grep_search 호출 | ⬜ |
|
|
153
|
+
| 품질 체크 | "코드 품질 분석해줘" | check_code_quality 호출 | ⬜ |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 핵심 의존성
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"dependencies": {
|
|
162
|
+
"commander": "^14.0.0",
|
|
163
|
+
"chalk": "^5.4.1",
|
|
164
|
+
"ink": "^6.1.0",
|
|
165
|
+
"ink-spinner": "^5.0.0",
|
|
166
|
+
"ink-text-input": "^6.0.0",
|
|
167
|
+
"react": "^19.1.0",
|
|
168
|
+
"gradient-string": "^3.0.0",
|
|
169
|
+
"pdf-parse": "^1.1.1",
|
|
170
|
+
"@modelcontextprotocol/sdk": "^1.25.0",
|
|
171
|
+
"@anthropic-ai/sdk": "^0.52.0",
|
|
172
|
+
"uuid": "^9.0.1",
|
|
173
|
+
"date-fns": "^4.1.0"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 진행 상황
|
|
181
|
+
|
|
182
|
+
- **버전**: v0.2.0 (React Ink TUI 버전)
|
|
183
|
+
- **현재 단계**: Phase 4.1 (빌드 검증)
|
|
184
|
+
- **마지막 업데이트**: 2025-01-30
|
|
185
|
+
- **다음 작업**: Ollama 연동 테스트, 실사용 시나리오 검증
|
|
186
|
+
|
|
187
|
+
### 완료된 작업
|
|
188
|
+
- [x] continue-cli 아키텍처 분석
|
|
189
|
+
- [x] React Ink TUI 구현
|
|
190
|
+
- [x] Tool Calling 시스템 구현
|
|
191
|
+
- [x] MCP 클라이언트 구현
|
|
192
|
+
- [x] ASCII 배너 구현
|
|
193
|
+
- [x] 빌드 성공
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAaA,wBAAgB,UAAU,IAAI,IAAI,CAgBjC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|