@kood/claude-code 0.2.5 → 0.3.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 (130) hide show
  1. package/dist/index.js +13 -8
  2. package/package.json +1 -1
  3. package/templates/.claude/agents/code-reviewer.md +371 -19
  4. package/templates/.claude/agents/dependency-manager.md +197 -0
  5. package/templates/.claude/agents/deployment-validator.md +136 -0
  6. package/templates/.claude/agents/git-operator.md +147 -0
  7. package/templates/.claude/agents/implementation-executor.md +202 -0
  8. package/templates/.claude/agents/lint-fixer.md +155 -0
  9. package/templates/.claude/agents/refactor-advisor.md +339 -29
  10. package/templates/.claude/commands/agent-creator.md +355 -0
  11. package/templates/.claude/commands/docs-creator.md +404 -163
  12. package/templates/.claude/commands/docs-refactor.md +400 -113
  13. package/templates/.claude/commands/execute.md +357 -185
  14. package/templates/.claude/commands/git-all.md +65 -71
  15. package/templates/.claude/commands/git-session.md +80 -64
  16. package/templates/.claude/commands/git.md +68 -72
  17. package/templates/.claude/commands/lint-fix.md +224 -109
  18. package/templates/.claude/commands/lint-init.md +142 -168
  19. package/templates/.claude/commands/plan.md +300 -84
  20. package/templates/.claude/commands/prd.md +497 -214
  21. package/templates/.claude/commands/pre-deploy.md +242 -0
  22. package/templates/.claude/commands/subagent-creator.md +118 -0
  23. package/templates/.claude/commands/version-update.md +45 -57
  24. package/templates/hono/CLAUDE.md +99 -54
  25. package/templates/hono/docs/guides/conventions.md +352 -0
  26. package/templates/hono/docs/guides/env-setup.md +347 -0
  27. package/templates/hono/docs/guides/getting-started.md +239 -0
  28. package/templates/hono/docs/library/hono/error-handling.md +20 -29
  29. package/templates/hono/docs/library/hono/index.md +25 -52
  30. package/templates/hono/docs/library/hono/middleware.md +16 -75
  31. package/templates/hono/docs/library/hono/rpc.md +7 -35
  32. package/templates/hono/docs/library/hono/validation.md +25 -45
  33. package/templates/hono/docs/library/t3-env/index.md +374 -0
  34. package/templates/npx/CLAUDE.md +165 -65
  35. package/templates/npx/docs/library/commander/index.md +10 -73
  36. package/templates/npx/docs/library/fs-extra/index.md +21 -113
  37. package/templates/npx/docs/library/prompts/index.md +30 -176
  38. package/templates/npx/docs/references/patterns.md +75 -48
  39. package/templates/tanstack-start/CLAUDE.md +101 -77
  40. package/templates/tanstack-start/docs/architecture.md +427 -0
  41. package/templates/tanstack-start/docs/design.md +558 -0
  42. package/templates/tanstack-start/docs/guides/conventions.md +132 -32
  43. package/templates/tanstack-start/docs/guides/env-setup.md +127 -62
  44. package/templates/tanstack-start/docs/guides/getting-started.md +81 -20
  45. package/templates/tanstack-start/docs/guides/hooks.md +241 -36
  46. package/templates/tanstack-start/docs/guides/routes.md +213 -61
  47. package/templates/tanstack-start/docs/guides/services.md +260 -24
  48. package/templates/tanstack-start/docs/library/better-auth/index.md +469 -16
  49. package/templates/tanstack-start/docs/library/t3-env/index.md +307 -0
  50. package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -21
  51. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +22 -35
  52. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +7 -24
  53. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +26 -39
  54. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +23 -26
  55. package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +32 -147
  56. package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +25 -167
  57. package/templates/tanstack-start/docs/library/tanstack-router/index.md +39 -74
  58. package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +46 -116
  59. package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +35 -154
  60. package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +32 -171
  61. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +7 -15
  62. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +16 -23
  63. package/templates/tanstack-start/docs/library/zod/complex-types.md +12 -31
  64. package/templates/tanstack-start/docs/library/zod/index.md +18 -35
  65. package/templates/tanstack-start/docs/library/zod/transforms.md +11 -25
  66. package/templates/tanstack-start/docs/library/zod/validation.md +12 -34
  67. package/templates/.claude/agents/debug-detective.md +0 -37
  68. package/templates/.claude/agents/test-writer.md +0 -41
  69. package/templates/.claude/commands/feedback.md +0 -199
  70. package/templates/.claude/commands/ts-fix.md +0 -176
  71. package/templates/.claude/skills/command-creator/LICENSE.txt +0 -202
  72. package/templates/.claude/skills/command-creator/SKILL.md +0 -245
  73. package/templates/.claude/skills/command-creator/scripts/init_command.py +0 -244
  74. package/templates/.claude/skills/command-creator/scripts/package_command.py +0 -125
  75. package/templates/.claude/skills/command-creator/scripts/quick_validate.py +0 -143
  76. package/templates/.claude/skills/frontend-design/SKILL.md +0 -310
  77. package/templates/.claude/skills/frontend-design/references/animation-patterns.md +0 -446
  78. package/templates/.claude/skills/frontend-design/references/colors-2026.md +0 -244
  79. package/templates/.claude/skills/frontend-design/references/typography-2026.md +0 -302
  80. package/templates/.claude/skills/gemini-review/SKILL.md +0 -118
  81. package/templates/.claude/skills/gemini-review/references/checklists.md +0 -129
  82. package/templates/.claude/skills/gemini-review/references/prompt-templates.md +0 -274
  83. package/templates/.claude/skills/skill-creator/LICENSE.txt +0 -202
  84. package/templates/.claude/skills/skill-creator/SKILL.md +0 -184
  85. package/templates/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  86. package/templates/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  87. package/templates/.claude/skills/skill-creator/scripts/quick_validate.py +0 -65
  88. package/templates/hono/docs/library/ai-sdk/index.md +0 -190
  89. package/templates/hono/docs/library/ai-sdk/openrouter.md +0 -111
  90. package/templates/hono/docs/library/ai-sdk/providers.md +0 -102
  91. package/templates/hono/docs/library/ai-sdk/streaming.md +0 -146
  92. package/templates/hono/docs/library/ai-sdk/structured-output.md +0 -161
  93. package/templates/hono/docs/library/ai-sdk/tools.md +0 -144
  94. package/templates/hono/docs/library/drizzle/cloudflare-d1.md +0 -247
  95. package/templates/hono/docs/library/drizzle/config.md +0 -167
  96. package/templates/hono/docs/library/drizzle/index.md +0 -259
  97. package/templates/hono/docs/library/hono/env-setup.md +0 -169
  98. package/templates/hono/docs/library/pino/index.md +0 -146
  99. package/templates/tanstack-start/docs/architecture/architecture.md +0 -243
  100. package/templates/tanstack-start/docs/deployment/cloudflare.md +0 -132
  101. package/templates/tanstack-start/docs/deployment/index.md +0 -163
  102. package/templates/tanstack-start/docs/deployment/nitro.md +0 -110
  103. package/templates/tanstack-start/docs/deployment/railway.md +0 -147
  104. package/templates/tanstack-start/docs/deployment/vercel.md +0 -135
  105. package/templates/tanstack-start/docs/design/components.md +0 -175
  106. package/templates/tanstack-start/docs/design/index.md +0 -151
  107. package/templates/tanstack-start/docs/design/safe-area.md +0 -118
  108. package/templates/tanstack-start/docs/design/tailwind-setup.md +0 -156
  109. package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +0 -472
  110. package/templates/tanstack-start/docs/library/ai-sdk/index.md +0 -264
  111. package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +0 -371
  112. package/templates/tanstack-start/docs/library/ai-sdk/providers.md +0 -403
  113. package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +0 -320
  114. package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +0 -454
  115. package/templates/tanstack-start/docs/library/ai-sdk/tools.md +0 -473
  116. package/templates/tanstack-start/docs/library/better-auth/2fa.md +0 -48
  117. package/templates/tanstack-start/docs/library/better-auth/advanced.md +0 -55
  118. package/templates/tanstack-start/docs/library/better-auth/plugins.md +0 -34
  119. package/templates/tanstack-start/docs/library/better-auth/session.md +0 -47
  120. package/templates/tanstack-start/docs/library/better-auth/setup.md +0 -41
  121. package/templates/tanstack-start/docs/library/drizzle/cloudflare-d1.md +0 -147
  122. package/templates/tanstack-start/docs/library/drizzle/config.md +0 -118
  123. package/templates/tanstack-start/docs/library/drizzle/crud.md +0 -205
  124. package/templates/tanstack-start/docs/library/drizzle/index.md +0 -79
  125. package/templates/tanstack-start/docs/library/drizzle/relations.md +0 -202
  126. package/templates/tanstack-start/docs/library/drizzle/schema.md +0 -154
  127. package/templates/tanstack-start/docs/library/drizzle/setup.md +0 -96
  128. package/templates/tanstack-start/docs/library/drizzle/transactions.md +0 -127
  129. package/templates/tanstack-start/docs/library/pino/index.md +0 -320
  130. /package/templates/hono/docs/{architecture/architecture.md → architecture.md} +0 -0
@@ -1,16 +1,40 @@
1
- # Service Layer
1
+ # Server Functions
2
2
 
3
- 도메인별 SDK/서비스 레이어 구조.
3
+ > TanStack Start 데이터 레이어 (Server Functions)
4
4
 
5
- ## 폴더 구조
5
+ <instructions>
6
+ @../library/tanstack-start/index.md
7
+ </instructions>
8
+
9
+ ---
10
+
11
+ <api_naming>
12
+
13
+ ## API 이름 (중요)
14
+
15
+ | ✅ 올바른 API | ❌ 잘못된 API | 설명 |
16
+ |-------------|-------------|------|
17
+ | `.inputValidator()` | ~~`.validator()`~~ | TanStack Start는 `inputValidator`만 지원 |
18
+ | `.middleware()` | - | Middleware 체이닝 |
19
+ | `.handler()` | - | 최종 handler 함수 |
20
+
21
+ **주의:** `validator`는 존재하지 않는 API입니다. 반드시 `inputValidator`를 사용하세요.
22
+
23
+ </api_naming>
24
+
25
+ ---
26
+
27
+ <folder_structure>
28
+
29
+ ## 서비스 폴더 구조
6
30
 
7
31
  ```
8
32
  services/
9
33
  ├── user/
10
- │ ├── index.ts # 진입점 (re-export)
11
- │ ├── schemas.ts # Zod 스키마
12
- │ ├── queries.ts # GET 요청 (읽기)
13
- │ └── mutations.ts # POST 요청 (쓰기)
34
+ │ ├── index.ts # 진입점 (re-export)
35
+ │ ├── schemas.ts # Zod 스키마
36
+ │ ├── queries.ts # GET (읽기)
37
+ │ └── mutations.ts # POST (쓰기)
14
38
  ├── auth/
15
39
  │ ├── index.ts
16
40
  │ ├── schemas.ts
@@ -23,6 +47,19 @@ services/
23
47
  └── mutations.ts
24
48
  ```
25
49
 
50
+ | 파일 | 용도 |
51
+ |------|------|
52
+ | `index.ts` | 모든 함수 re-export |
53
+ | `schemas.ts` | Zod 검증 스키마 |
54
+ | `queries.ts` | GET 요청 (읽기) |
55
+ | `mutations.ts` | POST/PUT/DELETE (쓰기) |
56
+
57
+ </folder_structure>
58
+
59
+ ---
60
+
61
+ <patterns>
62
+
26
63
  ## Schemas 파일
27
64
 
28
65
  ```typescript
@@ -44,7 +81,7 @@ export type CreateUserInput = z.infer<typeof createUserSchema>
44
81
  export type UpdateUserInput = z.infer<typeof updateUserSchema>
45
82
  ```
46
83
 
47
- ## Queries 파일
84
+ ## Queries 파일 (GET)
48
85
 
49
86
  ```typescript
50
87
  // services/user/queries.ts
@@ -71,7 +108,7 @@ export const getUserByEmail = createServerFn({ method: 'GET' })
71
108
  })
72
109
  ```
73
110
 
74
- ## Mutations 파일
111
+ ## Mutations 파일 (POST)
75
112
 
76
113
  ```typescript
77
114
  // services/user/mutations.ts
@@ -107,21 +144,7 @@ export * from './queries'
107
144
  export * from './mutations'
108
145
  ```
109
146
 
110
- ## 사용 예시
111
-
112
- ```typescript
113
- // routes/users/-hooks/use-users.ts
114
- import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
115
- import { getUsers, createUser, deleteUser } from '@/services/user'
116
- ```
117
-
118
- ## Database 폴더
119
-
120
- ```
121
- database/
122
- ├── prisma.ts # Prisma Client 싱글톤
123
- └── seed.ts # 시드 스크립트 (선택)
124
- ```
147
+ ## Database 파일
125
148
 
126
149
  ```typescript
127
150
  // database/prisma.ts
@@ -141,3 +164,216 @@ if (process.env.NODE_ENV !== 'production') {
141
164
  globalForPrisma.prisma = prisma
142
165
  }
143
166
  ```
167
+
168
+ </patterns>
169
+
170
+ ---
171
+
172
+ <middleware>
173
+
174
+ ## Middleware 패턴
175
+
176
+ ```typescript
177
+ // middleware/auth.ts
178
+ import { createMiddleware } from '@tanstack/react-start'
179
+ import { z } from 'zod'
180
+
181
+ export const authMiddleware = createMiddleware()
182
+ .middleware(async ({ next }) => {
183
+ const session = await getSession()
184
+ if (!session) {
185
+ throw new Error('Unauthorized')
186
+ }
187
+ return next({ context: { userId: session.userId } })
188
+ })
189
+
190
+ // Server Function with Middleware
191
+ export const getMyProfile = createServerFn({ method: 'GET' })
192
+ .middleware([authMiddleware])
193
+ .handler(async ({ context }) => {
194
+ return prisma.user.findUnique({
195
+ where: { id: context.userId },
196
+ })
197
+ })
198
+ ```
199
+
200
+ ## Middleware with inputValidator
201
+
202
+ ```typescript
203
+ // middleware/role-check.ts
204
+ import { createMiddleware } from '@tanstack/react-start'
205
+ import { z } from 'zod'
206
+
207
+ const roleSchema = z.object({
208
+ requiredRole: z.enum(['USER', 'ADMIN']),
209
+ })
210
+
211
+ export const roleMiddleware = createMiddleware()
212
+ .inputValidator(roleSchema)
213
+ .middleware(async ({ data, next }) => {
214
+ const session = await getSession()
215
+ if (session.role !== data.requiredRole) {
216
+ throw new Error('Forbidden')
217
+ }
218
+ return next()
219
+ })
220
+
221
+ // Usage
222
+ export const deleteUser = createServerFn({ method: 'POST' })
223
+ .middleware([
224
+ roleMiddleware.init({ requiredRole: 'ADMIN' }),
225
+ ])
226
+ .handler(async ({ data: id }) => {
227
+ return prisma.user.delete({ where: { id } })
228
+ })
229
+ ```
230
+
231
+ </patterns>
232
+
233
+ ---
234
+
235
+ <usage>
236
+
237
+ ## TanStack Query 연동
238
+
239
+ ```typescript
240
+ // routes/users/-hooks/use-users.ts
241
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
242
+ import { getUsers, createUser, deleteUser } from '@/services/user'
243
+
244
+ export const useUsers = () => {
245
+ const queryClient = useQueryClient()
246
+
247
+ const { data: users, isLoading } = useQuery({
248
+ queryKey: ['users'],
249
+ queryFn: () => getUsers(),
250
+ })
251
+
252
+ const createMutation = useMutation({
253
+ mutationFn: createUser,
254
+ onSuccess: () => {
255
+ queryClient.invalidateQueries({ queryKey: ['users'] })
256
+ },
257
+ })
258
+
259
+ const deleteMutation = useMutation({
260
+ mutationFn: deleteUser,
261
+ onSuccess: () => {
262
+ queryClient.invalidateQueries({ queryKey: ['users'] })
263
+ },
264
+ })
265
+
266
+ return {
267
+ users,
268
+ isLoading,
269
+ createUser: createMutation.mutate,
270
+ deleteUser: deleteMutation.mutate,
271
+ isCreating: createMutation.isPending,
272
+ isDeleting: deleteMutation.isPending,
273
+ }
274
+ }
275
+ ```
276
+
277
+ ## Form 연동
278
+
279
+ ```tsx
280
+ // routes/users/-components/create-user-form.tsx
281
+ import { useUsers } from '../-hooks/use-users'
282
+ import { useState } from 'react'
283
+ import { Button } from '@/components/ui/button'
284
+ import { Input } from '@/components/ui/input'
285
+
286
+ export const CreateUserForm = (): JSX.Element => {
287
+ const { createUser, isCreating } = useUsers()
288
+ const [email, setEmail] = useState('')
289
+ const [name, setName] = useState('')
290
+
291
+ const handleSubmit = (e: React.FormEvent) => {
292
+ e.preventDefault()
293
+ createUser(
294
+ { data: { email, name } },
295
+ {
296
+ onSuccess: () => {
297
+ setEmail('')
298
+ setName('')
299
+ },
300
+ }
301
+ )
302
+ }
303
+
304
+ return (
305
+ <form onSubmit={handleSubmit} className="space-y-4">
306
+ <Input
307
+ type="email"
308
+ placeholder="Email"
309
+ value={email}
310
+ onChange={(e) => setEmail(e.target.value)}
311
+ required
312
+ />
313
+ <Input
314
+ type="text"
315
+ placeholder="Name"
316
+ value={name}
317
+ onChange={(e) => setName(e.target.value)}
318
+ required
319
+ />
320
+ <Button type="submit" disabled={isCreating}>
321
+ {isCreating ? 'Creating...' : 'Create User'}
322
+ </Button>
323
+ </form>
324
+ )
325
+ }
326
+ ```
327
+
328
+ </usage>
329
+
330
+ ---
331
+
332
+ <method_chaining>
333
+
334
+ ## Method Chaining 순서
335
+
336
+ ```typescript
337
+ // ✅ 올바른 순서
338
+ createServerFn({ method: 'POST' })
339
+ .middleware([authMiddleware]) // 1. middleware (선택)
340
+ .inputValidator(createUserSchema) // 2. inputValidator (선택)
341
+ .handler(async ({ data }) => {}) // 3. handler (필수)
342
+
343
+ // ❌ 잘못된 순서 (TypeScript 에러)
344
+ createServerFn({ method: 'POST' })
345
+ .handler(async () => {}) // ❌ handler가 먼저
346
+ .inputValidator(schema) // ❌ inputValidator가 나중에
347
+
348
+ // ❌ 잘못된 API 이름 (존재하지 않음)
349
+ createServerFn({ method: 'POST' })
350
+ .validator(schema) // ❌ validator는 없음! inputValidator 사용
351
+ .handler(async ({ data }) => {})
352
+ ```
353
+
354
+ </method_chaining>
355
+
356
+ ---
357
+
358
+ <best_practices>
359
+
360
+ | 원칙 | 설명 |
361
+ |------|------|
362
+ | **파일 분리** | schemas, queries, mutations 분리 필수 |
363
+ | **진입점** | index.ts에서 모든 함수 re-export |
364
+ | **Validation** | POST/PUT/DELETE는 inputValidator 필수 |
365
+ | **Middleware** | 인증/권한은 middleware 사용 |
366
+ | **TanStack Query** | 클라이언트에서 직접 호출 금지, Query/Mutation 사용 |
367
+ | **에러 처리** | 명확한 에러 메시지 throw |
368
+
369
+ </best_practices>
370
+
371
+ ---
372
+
373
+ <sources>
374
+
375
+ - [TanStack Start Server Functions](https://tanstack.com/start/latest/docs/framework/react/guide/server-functions)
376
+ - [TanStack Start Middleware](https://tanstack.com/start/latest/docs/framework/react/guide/middleware)
377
+ - [TanStack Query Integration](https://tanstack.com/router/latest/docs/framework/react/guide/external-data-loading)
378
+
379
+ </sources>