@gemdoq/codi 0.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/LICENSE +21 -0
- package/README.md +377 -0
- package/dist/cli.js +4569 -0
- package/dist/cli.js.map +1 -0
- package/package.json +79 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 gemdoq
|
|
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.md
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# Codi (코디)
|
|
2
|
+
|
|
3
|
+
터미널에서 동작하는 AI 코딩 에이전트입니다.
|
|
4
|
+
|
|
5
|
+
파일 읽기/쓰기, 코드 검색, 셸 실행, Git 조작 등 15개 이상의 도구를 자율적으로 사용하여 소프트웨어 개발 작업을 도와줍니다.
|
|
6
|
+
|
|
7
|
+
## 빠른 시작
|
|
8
|
+
|
|
9
|
+
### 1. 설치
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Node.js 20 이상 필요
|
|
13
|
+
node --version # v20.0.0+
|
|
14
|
+
|
|
15
|
+
# 레포 클론 및 설치
|
|
16
|
+
git clone https://github.com/gemdoq/codi.git
|
|
17
|
+
cd codi
|
|
18
|
+
npm install
|
|
19
|
+
npm run build
|
|
20
|
+
npm link # 전역 명령어로 등록 (선택)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. API 키 설정
|
|
24
|
+
|
|
25
|
+
Codi는 기본적으로 **Google Gemini 2.5 Flash** (무료)를 사용합니다.
|
|
26
|
+
|
|
27
|
+
**API 키 발급:**
|
|
28
|
+
1. [Google AI Studio](https://aistudio.google.com/apikey) 접속
|
|
29
|
+
2. Google 계정으로 로그인
|
|
30
|
+
3. "Create API Key" 클릭
|
|
31
|
+
4. 키 복사
|
|
32
|
+
|
|
33
|
+
**설정 방법 (택 1):**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 방법 A: 환경변수 (추천 - 터미널 세션 동안 유지)
|
|
37
|
+
export GEMINI_API_KEY=your-api-key-here
|
|
38
|
+
|
|
39
|
+
# 방법 B: 셸 설정에 영구 등록 (zsh)
|
|
40
|
+
echo 'export GEMINI_API_KEY=your-api-key-here' >> ~/.zshrc
|
|
41
|
+
source ~/.zshrc
|
|
42
|
+
|
|
43
|
+
# 방법 C: 셸 설정에 영구 등록 (bash)
|
|
44
|
+
echo 'export GEMINI_API_KEY=your-api-key-here' >> ~/.bashrc
|
|
45
|
+
source ~/.bashrc
|
|
46
|
+
|
|
47
|
+
# 방법 D: 설정 파일
|
|
48
|
+
mkdir -p ~/.codi
|
|
49
|
+
cat > ~/.codi/settings.json << 'EOF'
|
|
50
|
+
{
|
|
51
|
+
"apiKeys": {
|
|
52
|
+
"openai": "your-api-key-here"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
EOF
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 3. 실행
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# 대화형 세션 시작
|
|
62
|
+
codi
|
|
63
|
+
|
|
64
|
+
# 또는 빌드된 파일 직접 실행
|
|
65
|
+
node dist/cli.js
|
|
66
|
+
|
|
67
|
+
# 또는 개발 모드 (빌드 없이)
|
|
68
|
+
npx tsx src/cli.ts
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 사용법
|
|
72
|
+
|
|
73
|
+
### 대화형 모드
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
codi
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
프롬프트(`codi >`)가 나타나면 자연어로 요청하면 됩니다:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
codi > 이 프로젝트의 구조를 분석해줘
|
|
83
|
+
codi > src/main.ts에서 버그를 찾아 고쳐줘
|
|
84
|
+
codi > package.json에 새 스크립트를 추가해줘
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 단일 프롬프트 모드
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
codi -p "이 디렉토리의 파일 목록을 보여줘"
|
|
91
|
+
codi -p "README.md를 한국어로 번역해줘"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### CLI 옵션
|
|
95
|
+
|
|
96
|
+
| 옵션 | 설명 |
|
|
97
|
+
|------|------|
|
|
98
|
+
| `-p <프롬프트>` | 단일 프롬프트 실행 후 종료 |
|
|
99
|
+
| `-m, --model <모델>` | 모델 변경 (기본: `gemini-2.5-flash`) |
|
|
100
|
+
| `--provider <이름>` | 프로바이더 변경 (`openai`, `anthropic`, `ollama`) |
|
|
101
|
+
| `-c, --continue` | 마지막 세션 이어하기 |
|
|
102
|
+
| `-r, --resume <id>` | 특정 세션 복원 |
|
|
103
|
+
| `--plan` | 플랜 모드 (읽기 전용 분석) |
|
|
104
|
+
| `--yolo` | 모든 권한 확인 건너뛰기 |
|
|
105
|
+
| `-h, --help` | 도움말 |
|
|
106
|
+
| `-v, --version` | 버전 표시 |
|
|
107
|
+
|
|
108
|
+
### 입력 특수 기능
|
|
109
|
+
|
|
110
|
+
| 입력 | 기능 |
|
|
111
|
+
|------|------|
|
|
112
|
+
| `\` + Enter | 멀티라인 입력 |
|
|
113
|
+
| `!ls -la` | 직접 셸 명령어 실행 |
|
|
114
|
+
| `@src/main.ts` | 파일 내용을 메시지에 첨부 |
|
|
115
|
+
| `/help` | 슬래시 커맨드 목록 |
|
|
116
|
+
|
|
117
|
+
### 슬래시 커맨드
|
|
118
|
+
|
|
119
|
+
대화 중 `/`로 시작하는 커맨드를 사용할 수 있습니다:
|
|
120
|
+
|
|
121
|
+
| 커맨드 | 설명 |
|
|
122
|
+
|--------|------|
|
|
123
|
+
| `/help` | 사용 가능한 커맨드 목록 |
|
|
124
|
+
| `/quit` `/exit` | 종료 |
|
|
125
|
+
| `/clear` `/reset` `/new` | 대화 초기화 |
|
|
126
|
+
| `/model [이름]` | 모델 전환 |
|
|
127
|
+
| `/compact [초점]` | 대화 압축 (컨텍스트 절약) |
|
|
128
|
+
| `/cost` | 토큰 사용량 및 비용 표시 |
|
|
129
|
+
| `/config` | 현재 설정 표시 |
|
|
130
|
+
| `/permissions` | 권한 규칙 확인 |
|
|
131
|
+
| `/save [이름]` | 세션 저장 |
|
|
132
|
+
| `/resume` `/continue` | 세션 복원 |
|
|
133
|
+
| `/fork [이름]` | 대화 분기 |
|
|
134
|
+
| `/plan` | 플랜 모드 전환 (읽기 전용) |
|
|
135
|
+
| `/memory` | 자동 메모리 확인/편집 |
|
|
136
|
+
| `/init` | CODI.md 초기화 |
|
|
137
|
+
| `/export [파일]` | 대화 내보내기 |
|
|
138
|
+
| `/tasks` | 태스크 목록 |
|
|
139
|
+
| `/status` | 시스템 상태 |
|
|
140
|
+
| `/context` | 컨텍스트 윈도우 사용량 |
|
|
141
|
+
| `/rewind` | 이전 체크포인트로 되감기 |
|
|
142
|
+
| `/diff` | 변경사항 diff |
|
|
143
|
+
| `/mcp` | MCP 서버 상태 |
|
|
144
|
+
|
|
145
|
+
## 지원 모델
|
|
146
|
+
|
|
147
|
+
### Google Gemini (기본)
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
export GEMINI_API_KEY=your-key
|
|
151
|
+
codi # gemini-2.5-flash (기본)
|
|
152
|
+
codi --model gemini-2.5-pro # 더 강력한 모델
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Anthropic Claude
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
export ANTHROPIC_API_KEY=your-key
|
|
159
|
+
codi --provider anthropic # claude-sonnet
|
|
160
|
+
codi --provider anthropic --model claude-opus-4-20250514 # claude-opus
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### OpenAI
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
export OPENAI_API_KEY=your-key
|
|
167
|
+
codi --provider openai --model gpt-4o
|
|
168
|
+
codi --provider openai --model gpt-4.1
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Ollama (로컬, 무료)
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Ollama 설치 후 모델 다운로드
|
|
175
|
+
ollama pull llama3.1
|
|
176
|
+
|
|
177
|
+
codi --provider ollama --model llama3.1
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 내장 도구
|
|
181
|
+
|
|
182
|
+
Codi는 다음 도구를 자동으로 사용합니다. 사용자가 도구를 직접 호출할 필요 없이, 자연어로 요청하면 적절한 도구를 선택합니다.
|
|
183
|
+
|
|
184
|
+
| 도구 | 기능 | 예시 요청 |
|
|
185
|
+
|------|------|----------|
|
|
186
|
+
| `read_file` | 파일 읽기 (텍스트, PDF, 이미지, .ipynb) | "main.ts 파일을 읽어줘" |
|
|
187
|
+
| `write_file` | 파일 생성 | "hello.py 파일을 만들어줘" |
|
|
188
|
+
| `edit_file` | 파일 수정 (정확한 문자열 치환) | "함수 이름을 바꿔줘" |
|
|
189
|
+
| `multi_edit` | 한 파일 다중 수정 | "이 파일에서 여러 곳을 고쳐줘" |
|
|
190
|
+
| `glob` | 파일 패턴 검색 | "모든 .ts 파일을 찾아줘" |
|
|
191
|
+
| `grep` | 코드 내용 검색 (정규식) | "TODO가 있는 파일을 찾아줘" |
|
|
192
|
+
| `bash` | 셸 명령어 실행 | "테스트를 실행해줘" |
|
|
193
|
+
| `list_dir` | 디렉토리 목록 | "src 폴더 안에 뭐가 있어?" |
|
|
194
|
+
| `git` | Git 작업 | "변경사항을 커밋해줘" |
|
|
195
|
+
| `web_fetch` | 웹 페이지 가져오기 | "이 URL의 내용을 요약해줘" |
|
|
196
|
+
| `web_search` | 웹 검색 | "React 18 새 기능을 검색해줘" |
|
|
197
|
+
| `notebook_edit` | Jupyter 노트북 편집 | "노트북에 셀을 추가해줘" |
|
|
198
|
+
| `sub_agent` | 서브 에이전트 실행 | "이 코드베이스를 분석해줘" |
|
|
199
|
+
| `task_*` | 태스크 관리 | "할 일 목록을 만들어줘" |
|
|
200
|
+
| `ask_user` | 사용자에게 질문 | (자동으로 확인이 필요할 때 사용) |
|
|
201
|
+
|
|
202
|
+
## 권한 시스템
|
|
203
|
+
|
|
204
|
+
파일 수정, 셸 실행 등 위험한 작업은 실행 전에 확인을 요청합니다:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
⚠ Permission Required: bash
|
|
208
|
+
command: npm install express
|
|
209
|
+
Allow? [Yes / no / always for this tool]
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- `Y` 또는 Enter: 이번만 허용
|
|
213
|
+
- `n`: 거부
|
|
214
|
+
- `a`: 이 도구는 앞으로 묻지 않고 항상 허용
|
|
215
|
+
|
|
216
|
+
### 권한 규칙 설정
|
|
217
|
+
|
|
218
|
+
`~/.codi/settings.json` 또는 `.codi/settings.json`에서 설정:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"permissions": {
|
|
223
|
+
"allow": ["read_file", "glob", "grep", "list_dir"],
|
|
224
|
+
"deny": ["bash(rm -rf *)"],
|
|
225
|
+
"ask": ["write_file", "edit_file", "bash"]
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## 프로젝트 설정 (CODI.md)
|
|
231
|
+
|
|
232
|
+
프로젝트 루트에 `CODI.md` 파일을 만들면 Codi가 프로젝트 컨텍스트를 자동으로 인식합니다:
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
codi
|
|
236
|
+
codi > /init # CODI.md 템플릿 생성
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
```markdown
|
|
240
|
+
# 프로젝트: My App
|
|
241
|
+
|
|
242
|
+
## 개요
|
|
243
|
+
React + TypeScript 웹 애플리케이션
|
|
244
|
+
|
|
245
|
+
## 개발 규칙
|
|
246
|
+
- 컴포넌트는 함수형으로 작성
|
|
247
|
+
- CSS는 Tailwind 사용
|
|
248
|
+
- 테스트는 Vitest 사용
|
|
249
|
+
|
|
250
|
+
## 빌드 명령어
|
|
251
|
+
- `npm run dev`: 개발 서버
|
|
252
|
+
- `npm run build`: 프로덕션 빌드
|
|
253
|
+
- `npm test`: 테스트 실행
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## 커스텀 슬래시 커맨드
|
|
257
|
+
|
|
258
|
+
자주 쓰는 프롬프트를 커맨드로 저장할 수 있습니다:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# 프로젝트용 커맨드
|
|
262
|
+
mkdir -p .codi/commands
|
|
263
|
+
cat > .codi/commands/review.md << 'EOF'
|
|
264
|
+
현재 git diff를 확인하고 코드 리뷰를 해주세요.
|
|
265
|
+
보안 취약점, 성능 이슈, 코드 스타일 문제를 중심으로 검토해주세요.
|
|
266
|
+
EOF
|
|
267
|
+
|
|
268
|
+
# 개인 전역 커맨드
|
|
269
|
+
mkdir -p ~/.codi/commands
|
|
270
|
+
cat > ~/.codi/commands/fix.md << 'EOF'
|
|
271
|
+
{{file_path}} 파일의 lint 에러를 모두 수정해주세요.
|
|
272
|
+
EOF
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
사용: `/review`, `/fix src/main.ts`
|
|
276
|
+
|
|
277
|
+
## MCP (Model Context Protocol) 연동
|
|
278
|
+
|
|
279
|
+
외부 도구를 MCP 서버로 연결할 수 있습니다:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
cat > .codi/mcp.json << 'EOF'
|
|
283
|
+
{
|
|
284
|
+
"mcpServers": {
|
|
285
|
+
"filesystem": {
|
|
286
|
+
"command": "npx",
|
|
287
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
|
|
288
|
+
},
|
|
289
|
+
"github": {
|
|
290
|
+
"command": "npx",
|
|
291
|
+
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
292
|
+
"env": { "GITHUB_TOKEN": "your-token" }
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
EOF
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## 훅 시스템
|
|
300
|
+
|
|
301
|
+
도구 실행 전후에 자동으로 스크립트를 실행할 수 있습니다:
|
|
302
|
+
|
|
303
|
+
```json
|
|
304
|
+
// .codi/settings.json
|
|
305
|
+
{
|
|
306
|
+
"hooks": {
|
|
307
|
+
"PostToolUse": [{
|
|
308
|
+
"matcher": "edit_file",
|
|
309
|
+
"hooks": [{
|
|
310
|
+
"type": "command",
|
|
311
|
+
"command": "npx eslint --fix ${file_path}"
|
|
312
|
+
}]
|
|
313
|
+
}]
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## 설정 파일
|
|
319
|
+
|
|
320
|
+
설정은 다음 순서로 병합됩니다 (아래가 우선순위 높음):
|
|
321
|
+
|
|
322
|
+
1. `~/.codi/settings.json` - 사용자 전역
|
|
323
|
+
2. `.codi/settings.json` - 프로젝트 (Git에 포함)
|
|
324
|
+
3. `.codi/settings.local.json` - 로컬 전용 (`.gitignore`에 추가 권장)
|
|
325
|
+
|
|
326
|
+
```json
|
|
327
|
+
{
|
|
328
|
+
"provider": "openai",
|
|
329
|
+
"model": "gemini-2.5-flash",
|
|
330
|
+
"maxTokens": 8192,
|
|
331
|
+
"apiKeys": {
|
|
332
|
+
"openai": "your-gemini-key"
|
|
333
|
+
},
|
|
334
|
+
"permissions": {
|
|
335
|
+
"allow": ["read_file", "glob", "grep"],
|
|
336
|
+
"deny": [],
|
|
337
|
+
"ask": ["bash", "write_file"]
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## 키보드 단축키
|
|
343
|
+
|
|
344
|
+
| 단축키 | 기능 |
|
|
345
|
+
|--------|------|
|
|
346
|
+
| `Ctrl+C` | 현재 작업 취소 |
|
|
347
|
+
| `Ctrl+D` | 종료 |
|
|
348
|
+
| `Ctrl+L` | 화면 지우기 |
|
|
349
|
+
| `Tab` | 자동 완성 (커맨드, 파일 경로) |
|
|
350
|
+
|
|
351
|
+
## 요구사항
|
|
352
|
+
|
|
353
|
+
- **Node.js** 20.0.0 이상
|
|
354
|
+
- **ripgrep** (`rg`) - 코드 검색 성능 향상 (선택, 없으면 grep 사용)
|
|
355
|
+
- **Git** - Git 관련 기능 사용 시 필요
|
|
356
|
+
|
|
357
|
+
## 문제 해결
|
|
358
|
+
|
|
359
|
+
### "Could not resolve authentication method" 에러
|
|
360
|
+
API 키가 설정되지 않았습니다. [API 키 설정](#2-api-키-설정) 섹션을 참고하세요.
|
|
361
|
+
|
|
362
|
+
### "429 Rate Limit" 에러
|
|
363
|
+
API 요청 한도를 초과했습니다. 잠시 후 다시 시도하거나, [Google AI Studio](https://aistudio.google.com)에서 할당량을 확인하세요.
|
|
364
|
+
|
|
365
|
+
### ripgrep이 없다는 경고
|
|
366
|
+
`grep` 도구가 시스템 grep으로 대체됩니다. 성능 향상을 위해 설치를 권장합니다:
|
|
367
|
+
```bash
|
|
368
|
+
# macOS
|
|
369
|
+
brew install ripgrep
|
|
370
|
+
|
|
371
|
+
# Ubuntu/Debian
|
|
372
|
+
sudo apt install ripgrep
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## 라이선스
|
|
376
|
+
|
|
377
|
+
MIT
|