@kood/claude-code 0.1.1 → 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 +81 -38
  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
package/dist/index.js CHANGED
@@ -36,29 +36,59 @@ var getTemplatesDir = () => {
36
36
  var getTemplatePath = (template) => {
37
37
  return path.join(getTemplatesDir(), template);
38
38
  };
39
- var copyTemplate = async (template, targetDir) => {
39
+ var copyRecursive = async (src, dest, counter) => {
40
+ const stat = await fs.stat(src);
41
+ if (stat.isDirectory()) {
42
+ await fs.ensureDir(dest);
43
+ counter.directories++;
44
+ const items = await fs.readdir(src);
45
+ for (const item of items) {
46
+ await copyRecursive(path.join(src, item), path.join(dest, item), counter);
47
+ }
48
+ } else {
49
+ await fs.copy(src, dest);
50
+ counter.files++;
51
+ }
52
+ };
53
+ var copySingleTemplate = async (template, targetDir) => {
40
54
  const templatePath = getTemplatePath(template);
41
55
  if (!await fs.pathExists(templatePath)) {
42
56
  throw new Error(`Template "${template}" not found at ${templatePath}`);
43
57
  }
44
- let files = 0;
45
- let directories = 0;
46
- const copyRecursive = async (src, dest) => {
47
- const stat = await fs.stat(src);
48
- if (stat.isDirectory()) {
49
- await fs.ensureDir(dest);
50
- directories++;
51
- const items = await fs.readdir(src);
52
- for (const item of items) {
53
- await copyRecursive(path.join(src, item), path.join(dest, item));
54
- }
55
- } else {
56
- await fs.copy(src, dest);
57
- files++;
58
+ const counter = { files: 0, directories: 0 };
59
+ const claudeMdSrc = path.join(templatePath, "CLAUDE.md");
60
+ if (await fs.pathExists(claudeMdSrc)) {
61
+ await fs.copy(claudeMdSrc, path.join(targetDir, "CLAUDE.md"));
62
+ counter.files++;
63
+ }
64
+ const docsSrc = path.join(templatePath, "docs");
65
+ const docsDest = path.join(targetDir, "docs");
66
+ if (await fs.pathExists(docsSrc)) {
67
+ if (await fs.pathExists(docsDest)) {
68
+ await fs.remove(docsDest);
58
69
  }
59
- };
60
- await copyRecursive(templatePath, targetDir);
61
- return { files, directories };
70
+ await copyRecursive(docsSrc, docsDest, counter);
71
+ }
72
+ return counter;
73
+ };
74
+ var copyMultipleTemplates = async (templates, targetDir) => {
75
+ const counter = { files: 0, directories: 0 };
76
+ const docsDir = path.join(targetDir, "docs");
77
+ if (await fs.pathExists(docsDir)) {
78
+ await fs.remove(docsDir);
79
+ }
80
+ for (const template of templates) {
81
+ const templatePath = getTemplatePath(template);
82
+ if (!await fs.pathExists(templatePath)) {
83
+ throw new Error(`Template "${template}" not found at ${templatePath}`);
84
+ }
85
+ await copyRecursive(
86
+ templatePath,
87
+ path.join(targetDir, "docs", template),
88
+ counter
89
+ );
90
+ }
91
+ return counter;
62
92
  };
63
93
  var checkExistingFiles = async (targetDir) => {
64
94
  const existingFiles = [];
@@ -116,14 +146,14 @@ var copySkills = async (template, targetDir) => {
116
146
  let files = 0;
117
147
  let directories = 0;
118
148
  const installedSkills = [];
119
- const copyRecursive = async (src, dest) => {
149
+ const copyRecursive2 = async (src, dest) => {
120
150
  const stat = await fs.stat(src);
121
151
  if (stat.isDirectory()) {
122
152
  await fs.ensureDir(dest);
123
153
  directories++;
124
154
  const items = await fs.readdir(src);
125
155
  for (const item of items) {
126
- await copyRecursive(path.join(src, item), path.join(dest, item));
156
+ await copyRecursive2(path.join(src, item), path.join(dest, item));
127
157
  }
128
158
  } else {
129
159
  await fs.copy(src, dest);
@@ -136,7 +166,7 @@ var copySkills = async (template, targetDir) => {
136
166
  const skillDestPath = path.join(targetSkillsDir, skill);
137
167
  const stat = await fs.stat(skillSrcPath);
138
168
  if (stat.isDirectory()) {
139
- await copyRecursive(skillSrcPath, skillDestPath);
169
+ await copyRecursive2(skillSrcPath, skillDestPath);
140
170
  installedSkills.push(skill);
141
171
  }
142
172
  }
@@ -157,7 +187,8 @@ var checkExistingSkills = async (targetDir, skills) => {
157
187
  // src/commands/init.ts
158
188
  var TEMPLATE_DESCRIPTIONS = {
159
189
  "tanstack-start": "TanStack Start + React \uD480\uC2A4\uD0DD \uD504\uB85C\uC81D\uD2B8",
160
- hono: "Hono \uC11C\uBC84 \uD504\uB808\uC784\uC6CC\uD06C \uD504\uB85C\uC81D\uD2B8"
190
+ hono: "Hono \uC11C\uBC84 \uD504\uB808\uC784\uC6CC\uD06C \uD504\uB85C\uC81D\uD2B8",
191
+ npx: "NPX CLI \uB3C4\uAD6C \uD504\uB85C\uC81D\uD2B8"
161
192
  };
162
193
  var init = async (options) => {
163
194
  const targetDir = options.cwd || process.cwd();
@@ -210,33 +241,45 @@ var init = async (options) => {
210
241
  process.exit(0);
211
242
  }
212
243
  }
244
+ const isSingleTemplate = templates.length === 1;
213
245
  let totalFiles = 0;
214
246
  let totalDirectories = 0;
215
247
  const allSkills = [];
216
- for (const template of templates) {
217
- logger.blank();
218
- logger.info(`Installing ${template} template...`);
219
- logger.step(`Target: ${targetDir}`);
220
- logger.blank();
221
- try {
222
- const result = await copyTemplate(template, targetDir);
223
- totalFiles += result.files;
224
- totalDirectories += result.directories;
248
+ logger.blank();
249
+ try {
250
+ if (isSingleTemplate) {
251
+ const template = templates[0];
252
+ logger.info(`Installing ${template} template...`);
253
+ logger.step(`Target: ${targetDir}`);
254
+ logger.blank();
255
+ const result = await copySingleTemplate(template, targetDir);
256
+ totalFiles = result.files;
257
+ totalDirectories = result.directories;
225
258
  logger.success(`${template}: ${result.files} files copied`);
226
259
  const availableSkills = await listAvailableSkills(template);
227
- if (availableSkills.length > 0) {
260
+ allSkills.push(...availableSkills);
261
+ } else {
262
+ logger.info(`Installing ${templates.length} templates...`);
263
+ logger.step(`Target: ${targetDir}/docs/`);
264
+ logger.blank();
265
+ const result = await copyMultipleTemplates(templates, targetDir);
266
+ totalFiles = result.files;
267
+ totalDirectories = result.directories;
268
+ for (const template of templates) {
269
+ logger.success(`${template}: installed to docs/${template}/`);
270
+ const availableSkills = await listAvailableSkills(template);
228
271
  for (const skill of availableSkills) {
229
272
  if (!allSkills.includes(skill)) {
230
273
  allSkills.push(skill);
231
274
  }
232
275
  }
233
276
  }
234
- } catch (error) {
235
- logger.error(
236
- `Failed to install ${template}: ${error instanceof Error ? error.message : "Unknown error"}`
237
- );
238
- process.exit(1);
239
277
  }
278
+ } catch (error) {
279
+ logger.error(
280
+ `Failed to install templates: ${error instanceof Error ? error.message : "Unknown error"}`
281
+ );
282
+ process.exit(1);
240
283
  }
241
284
  logger.blank();
242
285
  logger.success(`Total: ${totalFiles} files, ${totalDirectories} directories`);
@@ -303,7 +346,7 @@ var installAllSkills = async (templates, targetDir) => {
303
346
 
304
347
  // src/index.ts
305
348
  var program = new Command();
306
- program.name("claude-code").description("Claude Code documentation installer for projects").version("1.0.0");
349
+ program.name("claude-code").description("Claude Code documentation installer for projects").version("0.1.2");
307
350
  program.option(
308
351
  "-t, --template <names>",
309
352
  "template names (comma-separated: tanstack-start,hono)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kood/claude-code",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Claude Code documentation installer for projects",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",
@@ -44,4 +44,4 @@
44
44
  "engines": {
45
45
  "node": ">=18"
46
46
  }
47
- }
47
+ }
@@ -52,6 +52,24 @@
52
52
  ✅ 코드베이스 검색 시 sgrep 사용 필수
53
53
  ```
54
54
 
55
+ ### 코드 작성 규칙
56
+ ```
57
+ ✅ 모든 한글 텍스트는 UTF-8 인코딩 유지
58
+ ✅ 코드 묶음 단위로 한글 주석 작성 (너무 세세하게 X)
59
+ ✅ Prisma Multi-File 모든 요소에 한글 주석 필수
60
+ ```
61
+
62
+ ### Prisma Multi-File 구조 (필수)
63
+ ```
64
+ prisma/
65
+ ├── schema/
66
+ │ ├── +base.prisma # datasource, generator 설정
67
+ │ ├── +enum.prisma # 모든 enum 정의
68
+ │ ├── user.prisma # User 모델
69
+ │ ├── post.prisma # Post 모델
70
+ │ └── ... # 기타 모델별 파일
71
+ ```
72
+
55
73
  ---
56
74
 
57
75
  ## ✅ ALWAYS DO (필수 실행)
@@ -110,7 +128,7 @@ docs: API 문서 업데이트
110
128
 
111
129
  | 작업 | 문서 경로 | 필독 여부 |
112
130
  |------|----------|----------|
113
- | **Git 규칙** | `docs/git/index.md` | 🔴 필수 |
131
+ | **Git 규칙** | `docs/git/git.md` | 🔴 필수 |
114
132
  | **MCP 도구** | `docs/mcp/` | 🔴 필수 |
115
133
  | **Gemini Review** | `docs/skills/gemini-review/` | 🟡 복잡한 작업 시 |
116
134
  | **API 개발** | `docs/library/hono/` | 🔴 필수 |
@@ -371,6 +389,6 @@ const data = await res.json() // { users: [] }
371
389
  ## 🔗 Quick Links
372
390
 
373
391
  - [Hono 가이드](./docs/library/hono/index.md)
374
- - [Git 규칙](./docs/git/index.md)
392
+ - [Git 규칙](./docs/git/git.md)
375
393
  - [MCP 가이드](./docs/mcp/index.md)
376
394
  - [배포 가이드](./docs/deployment/index.md)