@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 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