@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
@@ -44,6 +44,7 @@
44
44
  ❌ Server Function에 middleware 누락 금지 (인증 필요 시)
45
45
  ❌ handler 내부에서 수동 검증 금지 (inputValidator 사용)
46
46
  ❌ handler 내부에서 수동 인증 체크 금지 (middleware 사용)
47
+ ❌ 클라이언트에서 Server Function 직접 호출 금지 → TanStack Query 필수
47
48
  ```
48
49
 
49
50
  ### 코드 검색 금지 사항
@@ -53,6 +54,36 @@
53
54
  ✅ 코드베이스 검색 시 sgrep 사용 필수
54
55
  ```
55
56
 
57
+ ### Custom Hook 순서 금지 사항
58
+ ```
59
+ ❌ Custom Hook 내부 순서 무시 금지
60
+ ✅ 반드시 아래 순서 준수:
61
+ 1. State (useState, zustand store)
62
+ 2. Global Hooks (useParams, useNavigate, useQueryClient 등)
63
+ 3. React Query (useQuery → useMutation 순서)
64
+ 4. Event Handlers & Functions
65
+ 5. useMemo
66
+ 6. useEffect
67
+ ```
68
+
69
+ ### 코드 작성 규칙
70
+ ```
71
+ ✅ 모든 한글 텍스트는 UTF-8 인코딩 유지
72
+ ✅ 코드 묶음 단위로 한글 주석 작성 (너무 세세하게 X)
73
+ ✅ Prisma Multi-File 모든 요소에 한글 주석 필수
74
+ ```
75
+
76
+ ### Prisma Multi-File 구조 (필수)
77
+ ```
78
+ prisma/
79
+ ├── schema/
80
+ │ ├── +base.prisma # datasource, generator 설정
81
+ │ ├── +enum.prisma # 모든 enum 정의
82
+ │ ├── user.prisma # User 모델
83
+ │ ├── post.prisma # Post 모델
84
+ │ └── ... # 기타 모델별 파일
85
+ ```
86
+
56
87
  ---
57
88
 
58
89
  ## ✅ ALWAYS DO (필수 실행)
@@ -112,7 +143,7 @@ docs: API 문서 업데이트
112
143
  | 작업 | 문서 경로 | 필독 여부 |
113
144
  |------|----------|----------|
114
145
  | **전체 가이드** | `docs/README.md` | 🔴 필수 |
115
- | **Git 규칙** | `docs/git/index.md` | 🔴 필수 |
146
+ | **Git 규칙** | `docs/git/git.md` | 🔴 필수 |
116
147
  | **MCP 도구** | `docs/mcp/` | 🔴 필수 |
117
148
  | **Gemini Review** | `docs/skills/gemini-review/` | 🟡 복잡한 작업 시 |
118
149
  | **UI 개발** | `docs/design/` | 🟡 해당 시 |
@@ -243,17 +274,24 @@ export const Route = createFileRoute('/users')({
243
274
  })
244
275
  ```
245
276
 
246
- ### TanStack Query
277
+ ### TanStack Query (서버 연동 시 필수)
247
278
  ```tsx
279
+ // ✅ 데이터 조회: useQuery 필수
280
+ const getPosts = useServerFn(getServerPosts)
248
281
  const { data } = useQuery({
249
282
  queryKey: ['users'],
250
- queryFn: () => getUsers(),
283
+ queryFn: () => getPosts(),
251
284
  })
252
285
 
286
+ // ✅ 데이터 변경: useMutation 필수
287
+ const createPostFn = useServerFn(createPost)
253
288
  const mutation = useMutation({
254
- mutationFn: createUser,
289
+ mutationFn: createPostFn,
255
290
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['users'] }),
256
291
  })
292
+
293
+ // ❌ 금지: Server Function 직접 호출
294
+ // useEffect(() => { getPosts().then(setData) }, [])
257
295
  ```
258
296
 
259
297
  ---
@@ -273,7 +311,7 @@ const mutation = useMutation({
273
311
  ## 🔗 Quick Links
274
312
 
275
313
  - [문서 가이드](./docs/README.md)
276
- - [Git 규칙](./docs/git/index.md)
314
+ - [Git 규칙](./docs/git/git.md)
277
315
  - [MCP 가이드](./docs/mcp/index.md)
278
316
  - [디자인 가이드](./docs/design/index.md)
279
317
  - [아키텍처](./docs/architecture/architecture.md)
@@ -21,8 +21,9 @@ TanStack Start 애플리케이션의 기술 아키텍처 가이드입니다.
21
21
  │ │
22
22
  │ ┌────────────────────────────────────────────────────────────┐ │
23
23
  │ │ Server Functions │ │
24
- │ │ - createServerFn({ method: 'GET' }) → Queries │ │
25
- │ │ - createServerFn({ method: 'POST' }) → Mutations │ │
24
+ │ │ - src/functions/ → 글로벌 서버 함수 │ │
25
+ │ │ - routes/-functions/ → 페이지 전용 서버 함수 │ │
26
+ │ │ - middlewares/ → 공통 미들웨어 │ │
26
27
  │ └────────────────────────────┬───────────────────────────────┘ │
27
28
  │ │ │
28
29
  │ ┌────────────────────────────▼───────────────────────────────┐ │
@@ -54,10 +55,17 @@ my-app/
54
55
  │ ├── routes/ # 파일 기반 라우팅
55
56
  │ │ ├── __root.tsx # Root layout
56
57
  │ │ ├── index.tsx # Home (/)
58
+ │ │ ├── -functions/ # 글로벌 라우트 레벨 서버 함수
59
+ │ │ │ ├── index.ts # re-export
60
+ │ │ │ └── get-session.ts # 세션 조회 함수
57
61
  │ │ └── users/
58
62
  │ │ ├── index.tsx # /users
59
63
  │ │ ├── $id.tsx # /users/:id
60
64
  │ │ ├── route.tsx # route 설정 (선택)
65
+ │ │ ├── -functions/ # 페이지 전용 서버 함수
66
+ │ │ │ ├── index.ts # re-export
67
+ │ │ │ ├── get-users.ts # 사용자 목록 조회
68
+ │ │ │ └── create-user.ts # 사용자 생성
61
69
  │ │ ├── -components/ # 페이지 전용 컴포넌트
62
70
  │ │ │ └── user-card.tsx
63
71
  │ │ ├── -sections/ # 섹션 분리
@@ -65,6 +73,14 @@ my-app/
65
73
  │ │ │ └── user-filter-section.tsx
66
74
  │ │ └── -hooks/ # 페이지 전용 훅
67
75
  │ │ └── use-users.ts
76
+ │ ├── functions/ # 글로벌 서버 함수
77
+ │ │ ├── index.ts # re-export
78
+ │ │ ├── get-current-user.ts # 현재 사용자 조회
79
+ │ │ ├── validate-session.ts # 세션 검증
80
+ │ │ └── middlewares/ # 서버 함수 미들웨어
81
+ │ │ ├── index.ts # re-export
82
+ │ │ ├── auth.ts # 인증 미들웨어
83
+ │ │ └── rate-limit.ts # 레이트 리밋 미들웨어
68
84
  │ ├── components/ # 공통 컴포넌트
69
85
  │ │ └── ui/
70
86
  │ │ ├── button.tsx
@@ -117,6 +133,7 @@ my-app/
117
133
  routes/<route-name>/
118
134
  ├── index.tsx # 페이지 컴포넌트
119
135
  ├── route.tsx # route 설정 (loader, beforeLoad)
136
+ ├── -functions/ # 페이지 전용 서버 함수
120
137
  ├── -components/ # 페이지 전용 컴포넌트
121
138
  ├── -sections/ # 섹션 분리 (복잡한 경우)
122
139
  └── -hooks/ # 페이지 전용 훅
@@ -124,8 +141,9 @@ routes/<route-name>/
124
141
 
125
142
  **특징**:
126
143
  - `-` 접두사 폴더는 라우트에서 제외
127
- - 페이지별로 컴포넌트, 섹션, 훅을 분리
144
+ - 페이지별로 서버 함수, 컴포넌트, 섹션, 훅을 분리
128
145
  - Section은 UI 영역 단위, Component는 재사용 단위
146
+ - `-functions/`는 해당 페이지에서만 사용하는 서버 함수
129
147
 
130
148
  ```tsx
131
149
  // routes/users/index.tsx
@@ -204,7 +222,119 @@ export const createUser = createServerFn({ method: 'POST' })
204
222
  })
205
223
  ```
206
224
 
207
- ### 3. Database Layer (Data Access)
225
+ ### 3. Server Functions Layer
226
+
227
+ 서버 함수를 체계적으로 구성합니다. 파일당 하나의 서버 함수만 정의합니다.
228
+
229
+ ```
230
+ src/functions/ # 글로벌 서버 함수
231
+ ├── index.ts # re-export
232
+ ├── <function-name>.ts # 개별 서버 함수
233
+ └── middlewares/ # 서버 함수 미들웨어
234
+ ├── index.ts # re-export
235
+ └── <middleware-name>.ts # 개별 미들웨어
236
+
237
+ routes/<route-name>/-functions/ # 페이지 전용 서버 함수
238
+ ├── index.ts # re-export
239
+ └── <function-name>.ts # 개별 서버 함수
240
+ ```
241
+
242
+ **규칙**:
243
+ - **파일당 하나의 함수**: 각 파일에는 하나의 서버 함수만 정의
244
+ - **명확한 네이밍**: 파일명이 곧 함수의 역할 (`get-users.ts`, `create-user.ts`)
245
+ - **글로벌 vs 로컬**: 여러 페이지에서 사용 → `src/functions/`, 특정 페이지 전용 → `-functions/`
246
+
247
+ **글로벌 서버 함수** - 여러 페이지에서 공유:
248
+
249
+ ```typescript
250
+ // src/functions/get-current-user.ts
251
+ import { createServerFn } from '@tanstack/react-start'
252
+ import { prisma } from '@/database/prisma'
253
+ import { authMiddleware } from './middlewares'
254
+
255
+ export const getCurrentUser = createServerFn({ method: 'GET' })
256
+ .middleware([authMiddleware])
257
+ .handler(async ({ context }) => {
258
+ return prisma.user.findUnique({
259
+ where: { id: context.userId },
260
+ })
261
+ })
262
+ ```
263
+
264
+ ```typescript
265
+ // src/functions/index.ts
266
+ export { getCurrentUser } from './get-current-user'
267
+ export { validateSession } from './validate-session'
268
+ ```
269
+
270
+ **페이지 전용 서버 함수** - 특정 페이지에서만 사용:
271
+
272
+ ```typescript
273
+ // routes/users/-functions/get-users.ts
274
+ import { createServerFn } from '@tanstack/react-start'
275
+ import { prisma } from '@/database/prisma'
276
+
277
+ export const getUsers = createServerFn({ method: 'GET' })
278
+ .handler(async () => {
279
+ return prisma.user.findMany({
280
+ orderBy: { createdAt: 'desc' },
281
+ })
282
+ })
283
+ ```
284
+
285
+ ```typescript
286
+ // routes/users/-functions/create-user.ts
287
+ import { createServerFn } from '@tanstack/react-start'
288
+ import { prisma } from '@/database/prisma'
289
+ import { createUserSchema } from '@/services/user/schemas'
290
+
291
+ export const createUser = createServerFn({ method: 'POST' })
292
+ .inputValidator(createUserSchema)
293
+ .handler(async ({ data }) => {
294
+ return prisma.user.create({ data })
295
+ })
296
+ ```
297
+
298
+ ```typescript
299
+ // routes/users/-functions/index.ts
300
+ export { getUsers } from './get-users'
301
+ export { createUser } from './create-user'
302
+ ```
303
+
304
+ **미들웨어** - 공통 로직 재사용:
305
+
306
+ ```typescript
307
+ // src/functions/middlewares/auth.ts
308
+ import { createMiddleware } from '@tanstack/react-start'
309
+
310
+ export const authMiddleware = createMiddleware()
311
+ .server(async ({ next }) => {
312
+ const session = await getSession()
313
+ if (!session) {
314
+ throw new Error('Unauthorized')
315
+ }
316
+ return next({ context: { userId: session.userId } })
317
+ })
318
+ ```
319
+
320
+ ```typescript
321
+ // src/functions/middlewares/rate-limit.ts
322
+ import { createMiddleware } from '@tanstack/react-start'
323
+
324
+ export const rateLimitMiddleware = createMiddleware()
325
+ .server(async ({ next }) => {
326
+ // 레이트 리밋 로직
327
+ return next()
328
+ })
329
+ ```
330
+
331
+ ```typescript
332
+ // src/functions/middlewares/index.ts
333
+ export { authMiddleware } from './auth'
334
+ export { rateLimitMiddleware } from './rate-limit'
335
+ ```
336
+
337
+ ### 4. Database Layer (Data Access)
208
338
 
209
339
  Prisma를 통한 데이터 액세스를 담당합니다.
210
340