@kood/claude-code 0.1.2 → 0.1.3

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 (61) hide show
  1. package/dist/index.js +12 -3
  2. package/package.json +2 -2
  3. package/templates/hono/CLAUDE.md +20 -2
  4. package/templates/hono/docs/architecture/architecture.md +909 -0
  5. package/templates/hono/docs/deployment/cloudflare.md +537 -190
  6. package/templates/hono/docs/deployment/docker.md +517 -0
  7. package/templates/hono/docs/deployment/index.md +181 -213
  8. package/templates/hono/docs/deployment/railway.md +416 -0
  9. package/templates/hono/docs/deployment/vercel.md +572 -0
  10. package/templates/hono/docs/git/git.md +285 -0
  11. package/templates/hono/docs/library/ai-sdk/index.md +427 -0
  12. package/templates/hono/docs/library/ai-sdk/openrouter.md +479 -0
  13. package/templates/hono/docs/library/ai-sdk/providers.md +468 -0
  14. package/templates/hono/docs/library/ai-sdk/streaming.md +447 -0
  15. package/templates/hono/docs/library/ai-sdk/structured-output.md +493 -0
  16. package/templates/hono/docs/library/ai-sdk/tools.md +513 -0
  17. package/templates/hono/docs/library/hono/env-setup.md +458 -0
  18. package/templates/hono/docs/library/hono/index.md +1 -0
  19. package/templates/hono/docs/library/pino/index.md +437 -0
  20. package/templates/hono/docs/library/prisma/cloudflare-d1.md +503 -0
  21. package/templates/hono/docs/library/prisma/config.md +362 -0
  22. package/templates/hono/docs/library/prisma/index.md +86 -13
  23. package/templates/hono/docs/skills/gemini-review/SKILL.md +116 -116
  24. package/templates/hono/docs/skills/gemini-review/references/checklists.md +125 -125
  25. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +191 -191
  26. package/templates/npx/CLAUDE.md +309 -0
  27. package/templates/npx/docs/git/git.md +307 -0
  28. package/templates/npx/docs/library/commander/index.md +164 -0
  29. package/templates/npx/docs/library/fs-extra/index.md +171 -0
  30. package/templates/npx/docs/library/prompts/index.md +253 -0
  31. package/templates/npx/docs/mcp/index.md +60 -0
  32. package/templates/npx/docs/skills/gemini-review/SKILL.md +220 -0
  33. package/templates/npx/docs/skills/gemini-review/references/checklists.md +134 -0
  34. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +301 -0
  35. package/templates/tanstack-start/CLAUDE.md +43 -5
  36. package/templates/tanstack-start/docs/architecture/architecture.md +134 -4
  37. package/templates/tanstack-start/docs/deployment/cloudflare.md +234 -51
  38. package/templates/tanstack-start/docs/deployment/index.md +322 -32
  39. package/templates/tanstack-start/docs/deployment/nitro.md +201 -20
  40. package/templates/tanstack-start/docs/deployment/railway.md +305 -153
  41. package/templates/tanstack-start/docs/deployment/vercel.md +353 -78
  42. package/templates/tanstack-start/docs/git/{index.md → git.md} +81 -7
  43. package/templates/tanstack-start/docs/guides/best-practices.md +203 -1
  44. package/templates/tanstack-start/docs/guides/env-setup.md +450 -0
  45. package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +472 -0
  46. package/templates/tanstack-start/docs/library/ai-sdk/index.md +264 -0
  47. package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +371 -0
  48. package/templates/tanstack-start/docs/library/ai-sdk/providers.md +403 -0
  49. package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +320 -0
  50. package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +454 -0
  51. package/templates/tanstack-start/docs/library/ai-sdk/tools.md +473 -0
  52. package/templates/tanstack-start/docs/library/pino/index.md +320 -0
  53. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +404 -0
  54. package/templates/tanstack-start/docs/library/prisma/config.md +377 -0
  55. package/templates/tanstack-start/docs/library/prisma/index.md +3 -1
  56. package/templates/tanstack-start/docs/library/prisma/schema.md +123 -25
  57. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +80 -2
  58. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +116 -116
  59. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +138 -144
  60. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +186 -187
  61. package/templates/hono/docs/git/index.md +0 -180
@@ -0,0 +1,164 @@
1
+ # Commander.js 가이드
2
+
3
+ > Node.js CLI 프레임워크
4
+
5
+ ---
6
+
7
+ ## 기본 설정
8
+
9
+ ```typescript
10
+ import { Command } from 'commander';
11
+
12
+ const program = new Command();
13
+
14
+ program
15
+ .name('my-cli')
16
+ .description('CLI description')
17
+ .version('1.0.0');
18
+
19
+ program.parse();
20
+ ```
21
+
22
+ ---
23
+
24
+ ## Options
25
+
26
+ ### 기본 옵션
27
+ ```typescript
28
+ program
29
+ .option('-t, --template <name>', 'template name')
30
+ .option('-f, --force', 'force overwrite')
31
+ .option('-v, --verbose', 'verbose output')
32
+ .action((options) => {
33
+ console.log(options.template); // string | undefined
34
+ console.log(options.force); // boolean | undefined
35
+ });
36
+ ```
37
+
38
+ ### 필수 옵션
39
+ ```typescript
40
+ program
41
+ .requiredOption('-c, --config <path>', 'config file path')
42
+ .action((options) => {
43
+ // options.config는 항상 존재
44
+ });
45
+ ```
46
+
47
+ ### 기본값
48
+ ```typescript
49
+ program
50
+ .option('-p, --port <number>', 'port number', '3000')
51
+ .option('-e, --env <name>', 'environment', 'development')
52
+ ```
53
+
54
+ ### 여러 값 수집
55
+ ```typescript
56
+ program
57
+ .option('-i, --include <path...>', 'include paths')
58
+ .action((options) => {
59
+ console.log(options.include); // string[]
60
+ });
61
+
62
+ // 사용: --include src lib tests
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Arguments
68
+
69
+ ```typescript
70
+ program
71
+ .argument('<source>', 'source file')
72
+ .argument('[destination]', 'destination file')
73
+ .action((source, destination, options) => {
74
+ console.log(source); // 필수
75
+ console.log(destination); // 선택
76
+ });
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Subcommands
82
+
83
+ ```typescript
84
+ program
85
+ .command('init')
86
+ .description('Initialize project')
87
+ .option('-t, --template <name>', 'template')
88
+ .action((options) => {
89
+ // init 명령어 처리
90
+ });
91
+
92
+ program
93
+ .command('build')
94
+ .description('Build project')
95
+ .action(() => {
96
+ // build 명령어 처리
97
+ });
98
+
99
+ // 사용: my-cli init --template react
100
+ // 사용: my-cli build
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Async Action
106
+
107
+ ```typescript
108
+ program
109
+ .action(async (options) => {
110
+ try {
111
+ await doSomething();
112
+ } catch (error) {
113
+ console.error(error);
114
+ process.exit(1);
115
+ }
116
+ });
117
+
118
+ // await 필요
119
+ await program.parseAsync();
120
+ ```
121
+
122
+ ---
123
+
124
+ ## Help 커스터마이징
125
+
126
+ ```typescript
127
+ program
128
+ .addHelpText('beforeAll', 'Custom header')
129
+ .addHelpText('afterAll', 'Custom footer');
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 전체 예시
135
+
136
+ ```typescript
137
+ #!/usr/bin/env node
138
+ import { Command } from 'commander';
139
+
140
+ const program = new Command();
141
+
142
+ program
143
+ .name('my-cli')
144
+ .description('My awesome CLI tool')
145
+ .version('1.0.0');
146
+
147
+ program
148
+ .option('-t, --template <name>', 'template name')
149
+ .option('-f, --force', 'overwrite existing files')
150
+ .option('--cwd <path>', 'working directory', process.cwd())
151
+ .action(async (options) => {
152
+ const { template, force, cwd } = options;
153
+
154
+ try {
155
+ // 실행 로직
156
+ await init({ template, force, cwd });
157
+ } catch (error) {
158
+ console.error('Error:', error.message);
159
+ process.exit(1);
160
+ }
161
+ });
162
+
163
+ program.parse();
164
+ ```
@@ -0,0 +1,171 @@
1
+ # fs-extra 가이드
2
+
3
+ > Node.js 파일 시스템 유틸리티 (fs 확장)
4
+
5
+ ---
6
+
7
+ ## 기본 Import
8
+
9
+ ```typescript
10
+ import fs from 'fs-extra';
11
+ import path from 'path';
12
+ ```
13
+
14
+ ---
15
+
16
+ ## 파일/디렉토리 존재 확인
17
+
18
+ ```typescript
19
+ // 존재 확인
20
+ const exists = await fs.pathExists('/path/to/file');
21
+
22
+ if (await fs.pathExists(targetDir)) {
23
+ // 이미 존재
24
+ }
25
+ ```
26
+
27
+ ---
28
+
29
+ ## 디렉토리 생성
30
+
31
+ ```typescript
32
+ // 재귀적 생성 (mkdir -p)
33
+ await fs.ensureDir('/path/to/nested/dir');
34
+
35
+ // 단일 생성
36
+ await fs.mkdir('/path/to/dir');
37
+ ```
38
+
39
+ ---
40
+
41
+ ## 파일/디렉토리 복사
42
+
43
+ ```typescript
44
+ // 파일 복사
45
+ await fs.copy('/src/file.txt', '/dest/file.txt');
46
+
47
+ // 디렉토리 복사 (재귀)
48
+ await fs.copy('/src/dir', '/dest/dir');
49
+
50
+ // 옵션
51
+ await fs.copy(src, dest, {
52
+ overwrite: true, // 덮어쓰기 (기본: true)
53
+ errorOnExist: false, // 존재 시 에러 (기본: false)
54
+ filter: (src) => { // 필터링
55
+ return !src.includes('node_modules');
56
+ },
57
+ });
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 파일/디렉토리 삭제
63
+
64
+ ```typescript
65
+ // 삭제 (rm -rf)
66
+ await fs.remove('/path/to/dir');
67
+
68
+ // 빈 디렉토리만 삭제
69
+ await fs.rmdir('/path/to/empty-dir');
70
+ ```
71
+
72
+ ---
73
+
74
+ ## 디렉토리 읽기
75
+
76
+ ```typescript
77
+ // 파일/폴더 목록
78
+ const items = await fs.readdir('/path/to/dir');
79
+ // ['file1.txt', 'folder1', 'file2.txt']
80
+
81
+ // stat으로 타입 확인
82
+ for (const item of items) {
83
+ const itemPath = path.join(dir, item);
84
+ const stat = await fs.stat(itemPath);
85
+
86
+ if (stat.isDirectory()) {
87
+ // 디렉토리
88
+ } else {
89
+ // 파일
90
+ }
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 파일 읽기/쓰기
97
+
98
+ ```typescript
99
+ // 읽기
100
+ const content = await fs.readFile('/path/to/file', 'utf-8');
101
+
102
+ // 쓰기
103
+ await fs.writeFile('/path/to/file', content, 'utf-8');
104
+
105
+ // JSON 읽기
106
+ const data = await fs.readJson('/path/to/file.json');
107
+
108
+ // JSON 쓰기
109
+ await fs.writeJson('/path/to/file.json', data, { spaces: 2 });
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 파일 정보
115
+
116
+ ```typescript
117
+ const stat = await fs.stat('/path/to/file');
118
+
119
+ stat.isFile(); // 파일 여부
120
+ stat.isDirectory(); // 디렉토리 여부
121
+ stat.size; // 파일 크기 (bytes)
122
+ stat.mtime; // 수정 시간
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 재귀 복사 패턴
128
+
129
+ ```typescript
130
+ const copyRecursive = async (
131
+ src: string,
132
+ dest: string,
133
+ ): Promise<{ files: number; directories: number }> => {
134
+ const counter = { files: 0, directories: 0 };
135
+
136
+ const copy = async (s: string, d: string): Promise<void> => {
137
+ const stat = await fs.stat(s);
138
+
139
+ if (stat.isDirectory()) {
140
+ await fs.ensureDir(d);
141
+ counter.directories++;
142
+
143
+ const items = await fs.readdir(s);
144
+ for (const item of items) {
145
+ await copy(path.join(s, item), path.join(d, item));
146
+ }
147
+ } else {
148
+ await fs.copy(s, d);
149
+ counter.files++;
150
+ }
151
+ };
152
+
153
+ await copy(src, dest);
154
+ return counter;
155
+ };
156
+ ```
157
+
158
+ ---
159
+
160
+ ## ESM에서 __dirname 사용
161
+
162
+ ```typescript
163
+ import { fileURLToPath } from 'url';
164
+ import path from 'path';
165
+
166
+ const __filename = fileURLToPath(import.meta.url);
167
+ const __dirname = path.dirname(__filename);
168
+
169
+ // 사용
170
+ const templatesDir = path.resolve(__dirname, '../templates');
171
+ ```
@@ -0,0 +1,253 @@
1
+ # prompts 가이드
2
+
3
+ > Interactive CLI prompts
4
+
5
+ ---
6
+
7
+ ## 기본 Import
8
+
9
+ ```typescript
10
+ import prompts from 'prompts';
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Text Input
16
+
17
+ ```typescript
18
+ const response = await prompts({
19
+ type: 'text',
20
+ name: 'name',
21
+ message: 'What is your name?',
22
+ initial: 'Anonymous',
23
+ });
24
+
25
+ console.log(response.name);
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Confirm (Yes/No)
31
+
32
+ ```typescript
33
+ const response = await prompts({
34
+ type: 'confirm',
35
+ name: 'confirmed',
36
+ message: 'Continue?',
37
+ initial: true,
38
+ });
39
+
40
+ if (response.confirmed) {
41
+ // Yes
42
+ }
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Select (단일 선택)
48
+
49
+ ```typescript
50
+ const response = await prompts({
51
+ type: 'select',
52
+ name: 'template',
53
+ message: 'Select a template:',
54
+ choices: [
55
+ { title: 'React', description: 'React framework', value: 'react' },
56
+ { title: 'Vue', description: 'Vue framework', value: 'vue' },
57
+ { title: 'Angular', description: 'Angular framework', value: 'angular' },
58
+ ],
59
+ initial: 0, // 첫 번째 선택
60
+ });
61
+
62
+ console.log(response.template); // 'react' | 'vue' | 'angular'
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Multiselect (다중 선택)
68
+
69
+ ```typescript
70
+ const response = await prompts({
71
+ type: 'multiselect',
72
+ name: 'features',
73
+ message: 'Select features:',
74
+ choices: [
75
+ { title: 'TypeScript', value: 'typescript', selected: true },
76
+ { title: 'ESLint', value: 'eslint' },
77
+ { title: 'Prettier', value: 'prettier' },
78
+ ],
79
+ min: 1, // 최소 1개 선택
80
+ max: 5, // 최대 5개 선택
81
+ hint: '- Space to select. Return to submit',
82
+ });
83
+
84
+ console.log(response.features); // ['typescript', 'eslint']
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Number Input
90
+
91
+ ```typescript
92
+ const response = await prompts({
93
+ type: 'number',
94
+ name: 'port',
95
+ message: 'Port number?',
96
+ initial: 3000,
97
+ min: 1,
98
+ max: 65535,
99
+ });
100
+
101
+ console.log(response.port); // number
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Password Input
107
+
108
+ ```typescript
109
+ const response = await prompts({
110
+ type: 'password',
111
+ name: 'secret',
112
+ message: 'Enter password:',
113
+ });
114
+
115
+ console.log(response.secret);
116
+ ```
117
+
118
+ ---
119
+
120
+ ## 취소 처리
121
+
122
+ ```typescript
123
+ const response = await prompts({
124
+ type: 'select',
125
+ name: 'template',
126
+ message: 'Select:',
127
+ choices: [...],
128
+ });
129
+
130
+ // Ctrl+C 또는 ESC 시 undefined
131
+ if (!response.template) {
132
+ console.log('Operation cancelled.');
133
+ process.exit(0);
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ## 연속 질문
140
+
141
+ ```typescript
142
+ const response = await prompts([
143
+ {
144
+ type: 'text',
145
+ name: 'name',
146
+ message: 'Project name?',
147
+ },
148
+ {
149
+ type: 'select',
150
+ name: 'template',
151
+ message: 'Template?',
152
+ choices: [...],
153
+ },
154
+ {
155
+ type: 'confirm',
156
+ name: 'git',
157
+ message: 'Initialize git?',
158
+ },
159
+ ]);
160
+
161
+ console.log(response.name);
162
+ console.log(response.template);
163
+ console.log(response.git);
164
+ ```
165
+
166
+ ---
167
+
168
+ ## 조건부 질문
169
+
170
+ ```typescript
171
+ const response = await prompts([
172
+ {
173
+ type: 'confirm',
174
+ name: 'useTypescript',
175
+ message: 'Use TypeScript?',
176
+ },
177
+ {
178
+ type: (prev) => prev ? 'confirm' : null, // 이전 답변이 true일 때만
179
+ name: 'strict',
180
+ message: 'Enable strict mode?',
181
+ },
182
+ ]);
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Autocomplete
188
+
189
+ ```typescript
190
+ const response = await prompts({
191
+ type: 'autocomplete',
192
+ name: 'package',
193
+ message: 'Search package:',
194
+ choices: [
195
+ { title: 'react' },
196
+ { title: 'react-dom' },
197
+ { title: 'react-router' },
198
+ { title: 'vue' },
199
+ { title: 'angular' },
200
+ ],
201
+ suggest: (input, choices) => {
202
+ return choices.filter((c) =>
203
+ c.title.toLowerCase().includes(input.toLowerCase())
204
+ );
205
+ },
206
+ });
207
+ ```
208
+
209
+ ---
210
+
211
+ ## 전체 예시
212
+
213
+ ```typescript
214
+ import prompts from 'prompts';
215
+
216
+ const run = async () => {
217
+ // 템플릿 선택
218
+ const { templates } = await prompts({
219
+ type: 'multiselect',
220
+ name: 'templates',
221
+ message: 'Select templates (space to select):',
222
+ choices: [
223
+ { title: 'Hono', value: 'hono' },
224
+ { title: 'TanStack Start', value: 'tanstack-start' },
225
+ ],
226
+ min: 1,
227
+ hint: '- Space to select. Return to submit',
228
+ });
229
+
230
+ if (!templates || templates.length === 0) {
231
+ console.log('Cancelled.');
232
+ process.exit(0);
233
+ }
234
+
235
+ // 덮어쓰기 확인
236
+ const { overwrite } = await prompts({
237
+ type: 'confirm',
238
+ name: 'overwrite',
239
+ message: 'Files exist. Overwrite?',
240
+ initial: false,
241
+ });
242
+
243
+ if (!overwrite) {
244
+ console.log('Cancelled.');
245
+ process.exit(0);
246
+ }
247
+
248
+ // 실행
249
+ console.log('Selected:', templates);
250
+ };
251
+
252
+ run();
253
+ ```
@@ -0,0 +1,60 @@
1
+ # MCP 도구 사용 가이드
2
+
3
+ ## ⛔ 프로젝트 시작 전 필수 확인
4
+
5
+ ### 1. Serena - 프로젝트 활성화 확인
6
+ ```
7
+ mcp__serena__get_current_config 호출하여 현재 프로젝트 확인
8
+ → 프로젝트 미활성화 시: mcp__serena__activate_project 실행
9
+ ```
10
+
11
+ ### 2. Sequential Thinking - 복잡한 문제 분석용
12
+ ```
13
+ 복잡한 로직, 아키텍처 설계, 디버깅 시 활용
14
+ ```
15
+
16
+ ### 3. sgrep - 코드베이스 검색용
17
+ ```
18
+ ❌ grep, rg 사용 금지
19
+ ✅ sgrep 사용 필수
20
+ ```
21
+
22
+ ---
23
+
24
+ ## 필수 MCP 도구
25
+
26
+ ### sgrep (코드 검색)
27
+ ```
28
+ ❌ 금지: grep, rg, find
29
+ ✅ 필수: sgrep
30
+ ```
31
+
32
+ **사용 상황**:
33
+ - 함수/클래스 정의 찾기
34
+ - 특정 패턴 검색
35
+ - 코드베이스 탐색
36
+
37
+ ### Sequential Thinking (복잡한 분석)
38
+ **사용 상황**:
39
+ - 복잡한 로직 분석
40
+ - 아키텍처 설계
41
+ - 디버깅 및 문제 해결
42
+ - 멀티스텝 작업 계획
43
+
44
+ ### Context7 (라이브러리 문서)
45
+ **사용 상황**:
46
+ - Commander 사용법 확인
47
+ - fs-extra API 확인
48
+ - prompts 옵션 확인
49
+ - 라이브러리 버전별 차이 확인
50
+
51
+ ---
52
+
53
+ ## 상황별 MCP 사용
54
+
55
+ | 상황 | 사용 MCP |
56
+ |------|----------|
57
+ | 코드 검색 | sgrep |
58
+ | 복잡한 분석 | Sequential Thinking |
59
+ | 라이브러리 문서 | Context7 |
60
+ | 프로젝트 컨텍스트 | Serena |