vibe-commander 0.1.1 → 0.2.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 (37) hide show
  1. package/AGENTS.md +1 -0
  2. package/README.ko.md +643 -0
  3. package/README.md +643 -0
  4. package/dist/adapters/cli/commands/git-helpers.js +5 -3
  5. package/dist/adapters/cli/commands/init-helpers.js +1 -1
  6. package/dist/adapters/cli/commands/io-helpers.js +6 -2
  7. package/dist/adapters/cli/commands/schema.js +7 -3
  8. package/dist/adapters/cli/commands/set-unit.js +8 -2
  9. package/dist/adapters/cli/commands/skill-install.js +10 -4
  10. package/dist/adapters/cli/formatters-schema.d.ts +17 -0
  11. package/dist/adapters/cli/formatters-schema.js +155 -0
  12. package/dist/adapters/cli/formatters-unit.d.ts +0 -8
  13. package/dist/adapters/cli/formatters-unit.js +0 -146
  14. package/dist/adapters/cli/index.js +2 -1
  15. package/dist/adapters/cli/router.d.ts +0 -12
  16. package/dist/adapters/cli/router.js +4 -103
  17. package/dist/adapters/cli/stdin-parser.d.ts +23 -0
  18. package/dist/adapters/cli/stdin-parser.js +109 -0
  19. package/dist/config/schema.d.ts +0 -9
  20. package/dist/config/schema.js +138 -56
  21. package/dist/core/renderers/index.d.ts +1 -1
  22. package/dist/core/renderers/index.js +1 -1
  23. package/dist/core/renderers/marker-utils.js +5 -3
  24. package/dist/core/renderers/schema-renderer.d.ts +16 -0
  25. package/dist/core/renderers/schema-renderer.js +21 -0
  26. package/dist/core/resolvers/index.d.ts +0 -2
  27. package/examples/nextjs-web.config.json +73 -0
  28. package/examples/python-backend.config.json +91 -0
  29. package/examples/tauri-app.config.json +95 -0
  30. package/examples/vscode-tasks.json +101 -0
  31. package/package.json +14 -2
  32. package/schemas/config-schema.json +409 -0
  33. package/skills/claude/SKILL.md +22 -0
  34. package/skills/common/cli-reference.md +22 -0
  35. package/skills/cursor/SKILL.md +22 -0
  36. package/dist/adapters/cli/formatters.d.ts +0 -2
  37. package/dist/adapters/cli/formatters.js +0 -3
package/AGENTS.md CHANGED
@@ -8,6 +8,7 @@
8
8
  ```
9
9
  vc init # Initialize project (create config)
10
10
  vc init --from-existing # Auto-detect from existing files
11
+ vc init --force # Overwrite existing config
11
12
  vc set-unit <unitId> # Set current working unit
12
13
  vc set-unit <unitId> --dry-run # Preview without modifying files
13
14
  vc update-commit [sha|N] # Update commit SHA (no arg=HEAD, number=recent N)
package/README.ko.md ADDED
@@ -0,0 +1,643 @@
1
+ # vibe-commander
2
+
3
+ [![npm version](https://img.shields.io/npm/v/vibe-commander.svg)](https://www.npmjs.com/package/vibe-commander)
4
+ [![license](https://img.shields.io/npm/l/vibe-commander.svg)](https://github.com/viilab/vibe-commander/blob/main/LICENSE)
5
+ [![node](https://img.shields.io/node/v/vibe-commander.svg)](https://nodejs.org)
6
+
7
+ [English](README.md) | [한국어](README.ko.md)
8
+
9
+ **유닛 기반 바이브 코딩 워크플로우 자동화** — 유닛 ID 하나로 커맨드 파일 섹션을 자동 생성하여, 수동 컨텍스트 수집 시간을 **10분에서 10초로** 단축합니다.
10
+
11
+ vibe-commander는 작업 유닛 전환 시 반복되는 과정을 자동화합니다: 계획서 파싱, 의존성 수집, 관련 커밋 검색, 에이전트 컨텍스트 조립 — 모두 하나의 설정 파일(config file)로 어떤 프로젝트 구조에든 적응합니다.
12
+
13
+ ## 왜 vibe-commander인가?
14
+
15
+ AI 에이전트(Cursor, Claude Code, Gemini CLI)와 유닛 기반 개발 파이프라인을 사용할 때, 유닛 전환마다 수동으로 컨텍스트를 수집해야 합니다:
16
+
17
+ **이전** — 유닛 전환 시 수동 워크플로우:
18
+
19
+ ```
20
+ 1. 로드맵에서 다음 유닛 확인 (~1분)
21
+ 2. 계획서를 열고 의존성 파악 (~2분)
22
+ 3. 의존 유닛 문서(계획서, 결과, 런북) 찾기 (~3분)
23
+ 4. Git 히스토리에서 관련 커밋 검색 (~2분)
24
+ 5. 페어링 질문 답변 작성 (~1분)
25
+ 6. 특별 요청사항 템플릿 삽입 (~1분)
26
+ 7. 작업 중 커밋 SHA 계속 업데이트 (지속적)
27
+ ─────────────────────────────────────────
28
+ 합계: 전환 1회당 ~10–15분 × 하루 3–5회 전환
29
+ ```
30
+
31
+ **이후** — vibe-commander 사용 시:
32
+
33
+ ```bash
34
+ vc set-unit U-042[Mvp] # 모든 컨텍스트가 ~10초 만에 수집·조립
35
+ vc update-commit # HEAD에서 커밋 SHA 자동 추적
36
+ ```
37
+
38
+ 하나의 명령으로 계획서를 파싱하고, 의존성을 해석하고, 관련 문서와 커밋을 수집하고, 커맨드 파일 섹션을 렌더링하고, 페어링 질문을 처리합니다 — 모두 프로젝트 설정(config)에 의해 구동됩니다.
39
+
40
+ ## 빠른 시작
41
+
42
+ ### 방법 1: npx로 즉시 실행 (설치 불필요)
43
+
44
+ ```bash
45
+ npx vibe-commander init --from-existing
46
+ npx vibe-commander set-unit U-001[Mvp]
47
+ ```
48
+
49
+ > **pnpm 사용자**: `npx` 대신 `pnpm dlx vibe-commander`를 사용하세요.
50
+
51
+ ### 방법 2: 글로벌 설치
52
+
53
+ ```bash
54
+ npm install -g vibe-commander
55
+ # 또는: pnpm add -g vibe-commander
56
+ # 또는: yarn global add vibe-commander
57
+
58
+ vc init --from-existing
59
+ vc set-unit U-001[Mvp]
60
+ ```
61
+
62
+ ### 방법 3: 프로젝트 devDependency
63
+
64
+ ```bash
65
+ npm install -D vibe-commander
66
+ # 또는: pnpm add -D vibe-commander
67
+ # 또는: yarn add -D vibe-commander
68
+
69
+ npx vc init --from-existing
70
+ npx vc set-unit U-001[Mvp]
71
+ ```
72
+
73
+ > **중요**: 프로젝트에서 사용하는 패키지 매니저와 동일한 도구를 사용하세요. 패키지 매니저를 혼용하면(예: pnpm 프로젝트에서 `npm install` 실행) 의존성 해석 에러가 발생할 수 있습니다.
74
+
75
+ ### 초기 설정
76
+
77
+ ```bash
78
+ # 기존 프로젝트 파일을 스캔하여 설정 자동 생성
79
+ vc init --from-existing
80
+
81
+ # 또는 대화형으로 설정 생성
82
+ vc init
83
+
84
+ # 생성된 설정 검증
85
+ vc validate
86
+ ```
87
+
88
+ 이 명령은 프로젝트 루트에 `vibe-commander.config.json`을 생성합니다. 디렉토리 구조, 유닛 ID 패턴, 문서 레이아웃에 맞게 자동으로 구성됩니다.
89
+
90
+ ### 일일 워크플로우
91
+
92
+ 설정이 완료되면, 매일의 작업 사이클은 다음과 같습니다:
93
+
94
+ ```bash
95
+ # 1. 작업 가능한 유닛 확인
96
+ vc list-units
97
+
98
+ # 2. 유닛 전환 — 계획서 파싱, 의존성 수집, 커맨드 파일 업데이트
99
+ vc set-unit U-042[Mvp]
100
+
101
+ # 3. AI 에이전트(Cursor, Claude Code 등)와 작업
102
+ # 커맨드 파일에 에이전트가 필요한 모든 컨텍스트가 준비되어 있습니다.
103
+
104
+ # 4. 작업 중 커밋 추적
105
+ vc update-commit # 최신 HEAD
106
+ vc update-commit 3 # 최근 3개 커밋
107
+ vc update-commit --mode append # 기존 커밋에 추가
108
+
109
+ # 5. 다음 유닛으로 이동
110
+ vc set-unit U-043[Mvp]
111
+ ```
112
+
113
+ ## CLI 레퍼런스
114
+
115
+ | 명령어 | 설명 |
116
+ |--------|------|
117
+ | `vc init` | 프로젝트 설정 초기화 (대화형 또는 `--from-existing` 스캔) |
118
+ | `vc set-unit <unitId>` | 현재 작업 유닛 설정 — 커맨드 파일 섹션 자동 생성 |
119
+ | `vc update-commit [sha\|N]` | 커밋 SHA 업데이트 (인자 없음 = HEAD, 숫자 = 최근 N개) |
120
+ | `vc list-units` | 미완료 유닛 목록 및 의존성 상태 조회 |
121
+ | `vc context <unitId>` | 읽기 전용 유닛 컨텍스트 조회 (파일 수정 없음) |
122
+ | `vc validate` | 설정 파일 무결성 검증 (스키마, 경로, 패턴) |
123
+ | `vc skill install` | AI 에이전트용 SKILL 파일 설치 |
124
+ | `vc schema [subcommand]` | 런타임 CLI 스키마 조회 |
125
+
126
+ ### vc set-unit
127
+
128
+ 핵심 명령어입니다. 유닛 계획서를 파싱하고, 모든 의존성 문서와 커밋을 수집하여, 커맨드 파일을 업데이트합니다 — 한 번에.
129
+
130
+ ```bash
131
+ # 기본 사용법
132
+ vc set-unit U-042[Mvp]
133
+
134
+ # 파일 수정 없이 변경 사항 미리보기
135
+ vc set-unit U-042[Mvp] --dry-run
136
+
137
+ # 커스텀 특별 요청사항 추가
138
+ vc set-unit U-042[Mvp] --request doc-update --request mcp-codrag
139
+
140
+ # 자동화를 위한 JSON 출력
141
+ vc set-unit U-042[Mvp] --json
142
+ ```
143
+
144
+ ### vc update-commit
145
+
146
+ 작업 중 SHA를 직접 복사하지 않고 커밋을 추적합니다.
147
+
148
+ ```bash
149
+ # HEAD 커밋 자동 감지
150
+ vc update-commit
151
+
152
+ # 최근 3개 커밋 수집
153
+ vc update-commit 3
154
+
155
+ # 특정 SHA 지정
156
+ vc update-commit abc1234f
157
+
158
+ # 기존 커밋에 추가 (교체 대신)
159
+ vc update-commit --mode append
160
+ ```
161
+
162
+ ### vc list-units
163
+
164
+ 작업 가능한 유닛을 확인합니다.
165
+
166
+ ```bash
167
+ # 미완료 유닛 전체 조회
168
+ vc list-units
169
+
170
+ # 단계(phase)별 필터링
171
+ vc list-units --phase Mvp
172
+
173
+ # 기계 판독용 출력
174
+ vc list-units --json
175
+ ```
176
+
177
+ ### vc context
178
+
179
+ 읽기 전용 컨텍스트 조회 — 커맨드 파일을 수정하지 않고 유닛 정보가 필요한 에이전트에 유용합니다.
180
+
181
+ ```bash
182
+ vc context U-042[Mvp] --json
183
+ ```
184
+
185
+ ### vc schema
186
+
187
+ 에이전트가 CLI 기능을 동적으로 발견하기 위한 런타임 스키마 인트로스펙션입니다.
188
+
189
+ ```bash
190
+ # 설정 파일의 JSON Schema
191
+ vc schema config --json
192
+
193
+ # 사용 가능한 모든 명령어와 플래그
194
+ vc schema commands --json
195
+
196
+ # 유닛 유형과 ID 패턴
197
+ vc schema types --json
198
+
199
+ # 스키마를 파일로 저장
200
+ vc schema config --json --output config-schema.json
201
+ ```
202
+
203
+ ### vc validate
204
+
205
+ 4단계 설정 검증 파이프라인: 스키마 검사, 경로 존재 확인, 정규식 유효성, 패턴 충돌 감지.
206
+
207
+ ```bash
208
+ vc validate
209
+ vc validate --json
210
+ ```
211
+
212
+ ## AI 에이전트용 SKILL 파일
213
+
214
+ SKILL 파일은 AI 에이전트에게 vibe-commander 사용법을 가르칩니다. 하나의 명령으로 지원하는 모든 플랫폼에 가이드를 설치합니다:
215
+
216
+ ```bash
217
+ # 모든 플랫폼에 설치 (Cursor + Claude Code + Gemini)
218
+ vc skill install
219
+
220
+ # 플랫폼별 설치
221
+ vc skill install --cursor
222
+ vc skill install --claude
223
+ vc skill install --gemini
224
+
225
+ # 기존 파일 강제 덮어쓰기
226
+ vc skill install --force
227
+ ```
228
+
229
+ 설치 후, 에이전트가 자동으로 SKILL 가이드를 발견하는 경로:
230
+
231
+ - **Cursor**: `.cursor/skills/vibe-commander/SKILL.md`
232
+ - **Claude Code**: `.claude/skills/vibe-commander/SKILL.md`
233
+ - **Gemini**: `.gemini/skills/vibe-commander/SKILL.md`
234
+
235
+ ## 에이전트 우선 설계 (Agent-First Design)
236
+
237
+ vibe-commander는 AI 에이전트를 일급 소비자(first-class consumer)로 설계되었습니다. 모든 설계 결정이 에이전트 사용성을 우선시합니다.
238
+
239
+ ### AGENTS.md
240
+
241
+ 프로젝트에 포함된 [`AGENTS.md`](AGENTS.md) 파일(npm 패키지에도 번들됨)은 에이전트가 대화 시작 시 읽는 파일입니다. 다음을 포함합니다:
242
+
243
+ - 명령어 빠른 참조
244
+ - 불변 규칙 (항상 `--dry-run` 먼저, 항상 `--json`, 입력 검증)
245
+ - 안전한 워크플로우 예시
246
+ - 에러 처리 패턴
247
+
248
+ ### 구조화된 출력 (Structured Output)
249
+
250
+ 모든 명령어는 `--json` 플래그로 `ToolResult<T>` 구조의 기계 판독용 출력을 지원합니다:
251
+
252
+ ```json
253
+ {
254
+ "success": true,
255
+ "data": {
256
+ "unitId": "U-042[Mvp]",
257
+ "title": "U-042[Mvp]: Add authentication module",
258
+ "depsFound": ["U-041[Mvp]"],
259
+ "docsFound": [
260
+ { "unitId": "U-041[Mvp]", "role": "result", "path": "docs/results/U-041[Mvp].md" }
261
+ ],
262
+ "commitsFound": ["a1b2c3d4"]
263
+ }
264
+ }
265
+ ```
266
+
267
+ 에러도 구조화되어 반환됩니다:
268
+
269
+ ```json
270
+ {
271
+ "success": false,
272
+ "error": {
273
+ "code": "UNIT_TYPE_NOT_FOUND",
274
+ "message": "No matching unit type for: U-999",
275
+ "details": "Registered types: implement, refactor, checkpoint",
276
+ "suggestions": ["U-099[Mvp]", "U-100[Mmp]"]
277
+ }
278
+ }
279
+ ```
280
+
281
+ ### Dry-Run 모드
282
+
283
+ 변경 사항을 적용하기 전에 미리보기 — 에이전트 안전성에 핵심적입니다:
284
+
285
+ ```bash
286
+ vc set-unit U-042[Mvp] --dry-run --json
287
+ ```
288
+
289
+ ### 입력 안전성 (Input Safety)
290
+
291
+ CLI는 에이전트의 환각(hallucination)을 방어하기 위해 위험한 패턴을 거부합니다:
292
+
293
+ - 경로 순회: `../`, `..\\`
294
+ - 제어 문자: ASCII < 0x20
295
+ - URL 인코딩: `%2e`, `%2F`
296
+ - 쿼리 파라미터: `?`, `#`
297
+
298
+ 잘못된 유닛 ID는 레벤슈타인 거리(Levenshtein distance) 기반의 퍼지 매칭 제안을 트리거합니다.
299
+
300
+ ### 파이프 모드 (Pipe Mode)
301
+
302
+ 자동화 및 오케스트레이터를 위해 stdin으로 JSON을 전달합니다:
303
+
304
+ ```bash
305
+ echo '{"unitId":"U-042[Mvp]"}' | vc set-unit --stdin --json
306
+ ```
307
+
308
+ ## VS Code 통합 (VS Code Integration)
309
+
310
+ vibe-commander는 터미널 전환 없이 에디터 안에서 `vc` 명령어를 바로 실행할 수 있는 VS Code Tasks를 제공합니다. 선택적 DX 개선이며, 모든 기능은 터미널에서도 동일하게 사용 가능합니다.
311
+
312
+ ### 빠른 설정
313
+
314
+ 프로젝트에 Tasks 템플릿을 복사합니다:
315
+
316
+ ```bash
317
+ # npm 패키지에서 복사
318
+ cp node_modules/vibe-commander/examples/vscode-tasks.json .vscode/tasks.json
319
+ ```
320
+
321
+ 글로벌 설치 대신 `npx`를 사용하는 경우, Task 명령어의 `vc`를 `npx vc`로 변경하세요.
322
+
323
+ ### 사용 가능한 Tasks
324
+
325
+ `Ctrl+Shift+P` → **Tasks: Run Task** 또는 `Ctrl+Shift+B`로 빌드 Task 그룹에서 접근할 수 있습니다:
326
+
327
+ | Task | 명령어 | 설명 |
328
+ |------|--------|------|
329
+ | `vc: Set Unit` | `vc set-unit <unitId>` | 유닛 전환 (ID 입력 프롬프트) |
330
+ | `vc: Set Unit (Dry Run)` | `vc set-unit <unitId> --dry-run` | 파일 수정 없이 변경 미리보기 |
331
+ | `vc: Update Commit (HEAD)` | `vc update-commit` | 최신 HEAD 커밋 추적 |
332
+ | `vc: Update Commit (N)` | `vc update-commit <N>` | 최근 N개 커밋 추적 (개수 입력) |
333
+ | `vc: List Units` | `vc list-units` | 미완료 유닛 목록 |
334
+ | `vc: Validate` | `vc validate` | 설정 파일 무결성 검증 |
335
+ | `vc: Context (JSON)` | `vc context <unitId> --json` | 읽기 전용 컨텍스트 조회 |
336
+
337
+ 유닛 ID가 필요한 Task는 VS Code 입력 대화상자(`${input:unitId}`)를 통해 프롬프트됩니다.
338
+
339
+ ### 권장 키보드 단축키
340
+
341
+ Task는 단축키 없이도 Command Palette에서 사용 가능하지만, 자주 사용하는 Task에 키를 바인딩하면 더 빠르게 접근할 수 있습니다. `keybindings.json`에 추가하세요 (`Ctrl+Shift+P` → **기본 설정: 바로 가기 키 열기 (JSON)**):
342
+
343
+ ```json
344
+ [
345
+ {
346
+ "key": "ctrl+shift+u",
347
+ "command": "workbench.action.tasks.runTask",
348
+ "args": "vc: Set Unit"
349
+ },
350
+ {
351
+ "key": "ctrl+shift+alt+u",
352
+ "command": "workbench.action.tasks.runTask",
353
+ "args": "vc: Set Unit (Dry Run)"
354
+ },
355
+ {
356
+ "key": "ctrl+shift+k",
357
+ "command": "workbench.action.tasks.runTask",
358
+ "args": "vc: Update Commit (HEAD)"
359
+ },
360
+ {
361
+ "key": "ctrl+shift+l",
362
+ "command": "workbench.action.tasks.runTask",
363
+ "args": "vc: List Units"
364
+ }
365
+ ]
366
+ ```
367
+
368
+ > **참고**: 키보드 단축키는 사용자 레벨 설정이며 다른 확장과 충돌할 수 있습니다. 선호에 따라 키 조합을 조정하세요.
369
+
370
+ ## 설정 (Configuration)
371
+
372
+ vibe-commander는 `vibe-commander.config.json`을 통해 어떤 프로젝트에든 적응합니다. 설정 파일은 유닛 ID 패턴, 문서 경로, 파싱 규칙, 커맨드 파일 구조를 정의합니다.
373
+
374
+ ### 최소 설정
375
+
376
+ ```json
377
+ {
378
+ "$schema": "https://vibe-commander/config-schema.json",
379
+ "version": 1,
380
+ "paths": {
381
+ "commands": "docs/commands.md",
382
+ "roadmap": "docs/roadmap.md",
383
+ "docRoots": {
384
+ "plan": "docs/plans",
385
+ "result": "docs/results"
386
+ }
387
+ },
388
+ "unitTypes": [
389
+ {
390
+ "key": "feature",
391
+ "displayName": "Feature",
392
+ "idPattern": "^FEAT-\\d+$",
393
+ "planDir": "plan",
394
+ "commandSection": "# Current Feature",
395
+ "collectDeps": true,
396
+ "headerTemplate": "### Feature: {{title}}\n- Plan: @{{planPath}}\n- Commit: -"
397
+ }
398
+ ]
399
+ }
400
+ ```
401
+
402
+ ### 설정 섹션
403
+
404
+ | 섹션 | 목적 |
405
+ |------|------|
406
+ | `paths` | 문서 디렉토리, 커맨드 파일, 로드맵 위치 |
407
+ | `unitTypes` | ID 패턴, 템플릿, 동작 방식을 포함한 유닛 유형 정의 |
408
+ | `docDiscovery` | 각 역할(plan, result, runbook)별 문서 탐색 방법 |
409
+ | `planParsing` | 계획서에서 제목, 의존성, 페어링 질문 추출 방법 |
410
+ | `backlogParsing` | `list-units`용 로드맵/백로그 파싱 방법 |
411
+ | `commitSearch` | Git 커밋 검색 전략 및 필터 |
412
+ | `commandSections` | 커맨드 파일 섹션 구분자 및 마커 설정 |
413
+ | `defaultSpecialRequests` | 모든 유닛에 추가되는 기본 지시사항 |
414
+ | `specialRequestsByType` | 유형별 추가 지시사항 |
415
+ | `customRequests` | `--request <key>`로 선택 가능한 이름 있는 요청 템플릿 |
416
+
417
+ ### 자동 감지 (Auto-Detection)
418
+
419
+ 기존 프로젝트의 경우, `vc init --from-existing`이 파일 트리를 스캔하여 감지합니다:
420
+
421
+ - 유닛 ID 패턴 (파일명에서 추출)
422
+ - 문서 디렉토리 구조
423
+ - 커맨드 파일의 섹션 헤더
424
+ - 로드맵 형식
425
+
426
+ ### 템플릿 변수
427
+
428
+ `headerTemplate`과 `docDiscovery`의 템플릿에서 사용 가능한 변수:
429
+
430
+ | 변수 | 설명 | 예시 |
431
+ |------|------|------|
432
+ | `{{unitId}}` | 원본 유닛 ID | `U-042[Mvp]` |
433
+ | `{{shortId}}` | 단계(phase) 제거 | `U-042` |
434
+ | `{{bareId}}` | 숫자만 | `042` |
435
+ | `{{title}}` | 전체 제목 (ID 포함) | `U-042[Mvp]: Add auth module` |
436
+ | `{{titleOnly}}` | ID 없는 제목 | `Add auth module` |
437
+ | `{{planPath}}` | 상대 계획서 경로 | `docs/plans/U-042[Mvp].md` |
438
+ | `{{phase}}` | 단계 문자열 | `Mvp` |
439
+ | `{{slug}}` | 케밥 케이스(kebab-case) | `u-042-mvp` |
440
+
441
+ ## 아키텍처
442
+
443
+ vibe-commander는 엄격한 의존성 방향을 가진 **4-레이어 아키텍처**를 따릅니다:
444
+
445
+ ```
446
+ Layer 4: 소비자(Consumers) ← 사람, AI 에이전트, 오케스트레이터
447
+ Layer 3: 어댑터(Adapters) ← CLI, SKILL 파일, stdin/stdout 파이프
448
+ Layer 2: 리졸버(Resolver) ← 설정 기반 프로젝트 구조 해석
449
+ Layer 1: 코어(Core) ← 순수 함수 (부수효과 없음, I/O 없음)
450
+ ```
451
+
452
+ - **코어(Core)** 함수는 순수합니다: JSON 입력, JSON 출력. `fs`도 `child_process`도 사용하지 않습니다.
453
+ - **리졸버(Resolver)**는 코드가 아닌 설정을 통해 프로젝트별 차이를 흡수합니다.
454
+ - **어댑터(Adapters)**가 모든 I/O를 처리합니다 — 파일 읽기, Git 명령, 사용자 상호작용.
455
+ - **프로덕션 의존성은 단 1개**: 런타임 검증을 위한 [Zod](https://v4.zod.dev/).
456
+
457
+ ## 소스에서 빌드하기 (Building from Source)
458
+
459
+ ### 사전 요구사항 (Prerequisites)
460
+
461
+ - **Node.js** >= 24.0.0 (LTS) — [다운로드](https://nodejs.org/)
462
+ - **npm** >= 11 (Node.js 24에 포함)
463
+ - **Git** — [다운로드](https://git-scm.com/)
464
+ - **Windows**: 릴리스 스크립트 실행 시 Git Bash 또는 WSL 권장
465
+
466
+ 환경 확인:
467
+
468
+ ```bash
469
+ node -v # 기대값: v24.x.x
470
+ npm -v # 기대값: 11.x.x
471
+ ```
472
+
473
+ ### 빌드 단계
474
+
475
+ ```bash
476
+ # 저장소 클론
477
+ git clone https://github.com/viilab/vibe-commander.git
478
+ cd vibe-commander
479
+
480
+ # 의존성 설치
481
+ npm install
482
+
483
+ # TypeScript 빌드 → dist/
484
+ npm run build
485
+ ```
486
+
487
+ 빌드 결과물은 `dist/` 디렉토리에 컴파일된 JavaScript(`.js`)와 TypeScript 선언(`.d.ts`) 파일로 생성됩니다.
488
+
489
+ ### 로컬 테스트
490
+
491
+ ```bash
492
+ # 로컬 테스트를 위해 글로벌 등록
493
+ npm link
494
+
495
+ # CLI 동작 확인
496
+ vc --help
497
+ vc --version
498
+
499
+ # 완료 후 해제
500
+ npm unlink -g vibe-commander
501
+ ```
502
+
503
+ > **Windows 참고**: `npm link`는 관리자 권한이 필요할 수 있습니다. 대안으로 개발 중에는 `npx tsx src/adapters/cli/index.ts -- --help`를 사용할 수 있습니다.
504
+
505
+ ### 클린 빌드
506
+
507
+ ```bash
508
+ # 이전 빌드 산출물 삭제 후 재빌드
509
+ rm -rf dist
510
+ npm run build
511
+ ```
512
+
513
+ ### PR 제출 전 체크리스트
514
+
515
+ 풀 리퀘스트를 제출하기 전에 전체 품질 게이트를 통과하는지 확인합니다:
516
+
517
+ ```bash
518
+ npm run check
519
+ ```
520
+
521
+ 타입체크 → 린트 → 포맷 검사 → 테스트 순서로 실행되며, 네 단계 모두 통과해야 합니다.
522
+
523
+ ### 패키지 구성물 (Package Contents)
524
+
525
+ npm 패키지에 포함되는 파일과 디렉토리:
526
+
527
+ | 경로 | 설명 |
528
+ |------|------|
529
+ | `dist/` | 컴파일된 JavaScript 및 TypeScript 선언 파일 |
530
+ | `skills/` | AI 에이전트용 SKILL 파일 (Cursor, Claude Code) |
531
+ | `schemas/` | 설정 검증 및 IDE 자동완성을 위한 JSON Schema |
532
+ | `examples/` | 예제 설정 파일 (Tauri, Next.js, Python) 및 VS Code Tasks 템플릿 |
533
+ | `AGENTS.md` | 에이전트 빠른 참조 (패키지에 번들됨) |
534
+ | `README.md` | 영문 문서 |
535
+ | `README.ko.md` | 한국어 문서 |
536
+ | `LICENSE` | MIT 라이선스 |
537
+
538
+ 패키지 구성물을 로컬에서 확인하려면:
539
+
540
+ ```bash
541
+ npm pack --dry-run
542
+ ```
543
+
544
+ ## 기여하기
545
+
546
+ ### 개발 환경 설정
547
+
548
+ [소스에서 빌드하기](#소스에서-빌드하기-building-from-source) 섹션의 사전 요구사항을 확인한 후:
549
+
550
+ ```bash
551
+ git clone https://github.com/viilab/vibe-commander.git
552
+ cd vibe-commander
553
+ npm install
554
+ ```
555
+
556
+ ### 사용 가능한 스크립트
557
+
558
+ ```bash
559
+ npm run dev # tsx로 개발 실행
560
+ npm run build # TypeScript 빌드
561
+ npm run test # Vitest 테스트 실행
562
+ npm run test:watch # Vitest 감시 모드
563
+ npm run test:coverage # 테스트 커버리지 리포트
564
+ npm run lint # ESLint 정적 분석
565
+ npm run lint:fix # ESLint 자동 수정
566
+ npm run typecheck # TypeScript 타입 체크
567
+ npm run format # Prettier 포매팅
568
+ npm run format:check # Prettier 포맷 검사 (수정 없이)
569
+ npm run check # 전체 품질 게이트 (타입체크 + 린트 + 포맷 + 테스트)
570
+ ```
571
+
572
+ ### 릴리스 절차
573
+
574
+ 릴리스는 npm 라이프사이클 훅(lifecycle hooks)을 사용하여 안전하고 자동화된 파이프라인으로 진행됩니다:
575
+
576
+ ```bash
577
+ # 드라이 런 — 게시 없이 모든 검증 통과 확인
578
+ npm run release:dry
579
+
580
+ # 패치 릴리스 (0.2.0 → 0.2.1)
581
+ npm run release:patch
582
+
583
+ # 마이너 릴리스 (0.2.0 → 0.3.0)
584
+ npm run release:minor
585
+
586
+ # 메이저 릴리스 (0.2.0 → 1.0.0)
587
+ npm run release:major
588
+ ```
589
+
590
+ 각 릴리스 명령은 자동으로:
591
+ 1. 커밋되지 않은 변경 사항 확인
592
+ 2. 전체 품질 게이트 실행 (`타입체크 + 린트 + 포맷 + 테스트`)
593
+ 3. 버전 범프 및 Git 태그 생성
594
+ 4. TypeScript 출력 빌드
595
+ 5. npm에 게시
596
+ 6. 버전 커밋과 태그를 Git에 푸시
597
+
598
+ **버전 전략(Version Strategy)**은 [유의적 버전(Semantic Versioning)](https://semver.org/)을 따릅니다:
599
+
600
+ | 변경 유형 | 버전 범프 | 예시 |
601
+ |-----------|----------|------|
602
+ | 버그 수정, 문서 | Patch | `0.2.0` → `0.2.1` |
603
+ | 새 기능 (하위 호환) | Minor | `0.2.0` → `0.3.0` |
604
+ | 호환성 깨지는 변경 | Major | `0.2.0` → `1.0.0` |
605
+
606
+ **릴리스 전 체크리스트**:
607
+ 1. npm 레지스트리 로그인 확인: `npm whoami`
608
+ 2. 전체 품질 게이트 통과: `npm run check`
609
+ 3. 빌드 성공: `npm run build`
610
+ 4. `README.md`와 `README.ko.md` 동기화 완료
611
+ 5. 패키지 구성물 확인: `npm pack --dry-run`
612
+
613
+ **npm 로그인** — 최초 게시 전 또는 인증 토큰이 만료되었을 때 필요합니다:
614
+
615
+ ```bash
616
+ # 로그인 (브라우저 인증 또는 자격 증명 입력)
617
+ npm login
618
+
619
+ # 로그인 확인
620
+ npm whoami
621
+ ```
622
+
623
+ **게시 실패 복구** — 릴리스 명령이 버전 범프와 git push까지 성공했지만 `npm publish`에서 실패한 경우(예: 401/404 에러), 버전이 이미 git에 태그되어 있으므로 범프 없이 게시만 재시도합니다:
624
+
625
+ ```bash
626
+ npm publish --access public
627
+ ```
628
+
629
+ ### 문서 동기화
630
+
631
+ 이 프로젝트는 두 개의 README 파일을 유지합니다: `README.md` (영문)와 `README.ko.md` (한국어). 문서를 업데이트할 때 양쪽 버전을 동기화해 주세요. 영문 버전이 npm 패키지 페이지의 기준(source of truth)입니다.
632
+
633
+ ### 프로젝트 원칙
634
+
635
+ - **설정 기반 범용성** — 프로젝트별 차이는 설정으로 흡수하며, 절대 하드코딩하지 않습니다
636
+ - **순수 함수 코어** — Layer 1은 부수효과가 없습니다 (JSON 입력 → JSON 출력)
637
+ - **점진적 기능(Graceful Degradation)** — 로드맵이 없어도 `set-unit`은 동작합니다. 런북이 없어도 나머지 문서는 수집됩니다.
638
+ - **최소 의존성** — 프로덕션 의존성은 1개(Zod). 나머지는 모두 Node.js 내장 모듈을 사용합니다.
639
+ - **에이전트 부품화** — CLI, SKILL 파일, stdin/stdout 파이프가 사람, 에이전트, 오케스트레이터를 동등하게 지원합니다.
640
+
641
+ ## 라이선스
642
+
643
+ [MIT](LICENSE) © [viilab](https://github.com/viilab)