@kood/claude-code 0.5.3 → 0.5.4

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/dist/index.js +548 -340
  2. package/package.json +1 -1
  3. package/templates/.claude/agents/document-writer.md +71 -304
  4. package/templates/.claude/instructions/agent-patterns/index.md +7 -7
  5. package/templates/.claude/instructions/document-templates/ralph-templates.md +71 -0
  6. package/templates/.claude/instructions/index.md +14 -14
  7. package/templates/.claude/instructions/multi-agent/agent-roster.md +14 -14
  8. package/templates/.claude/instructions/multi-agent/index.md +4 -4
  9. package/templates/.claude/skills/docs-creator/AGENTS.md +54 -176
  10. package/templates/.claude/skills/docs-creator/SKILL.md +97 -463
  11. package/templates/.claude/skills/docs-refactor/AGENTS.md +61 -190
  12. package/templates/.claude/skills/docs-refactor/SKILL.md +66 -442
  13. package/templates/.claude/skills/execute/SKILL.md +540 -13
  14. package/templates/.claude/skills/plan/SKILL.md +83 -17
  15. package/templates/.claude/skills/ralph/SKILL.md +17 -14
  16. package/templates/.claude/skills/refactor/AGENTS.md +269 -0
  17. package/templates/.claude/skills/refactor/SKILL.md +424 -66
  18. package/templates/.claude/skills/stitch-design/README.md +34 -0
  19. package/templates/.claude/skills/stitch-design/SKILL.md +213 -0
  20. package/templates/.claude/skills/stitch-design/examples/DESIGN.md +154 -0
  21. package/templates/.claude/skills/stitch-loop/README.md +54 -0
  22. package/templates/.claude/skills/stitch-loop/SKILL.md +316 -0
  23. package/templates/.claude/skills/stitch-loop/examples/SITE.md +73 -0
  24. package/templates/.claude/skills/stitch-loop/examples/next-prompt.md +25 -0
  25. package/templates/.claude/skills/stitch-loop/resources/baton-schema.md +61 -0
  26. package/templates/.claude/skills/stitch-loop/resources/site-template.md +104 -0
  27. package/templates/.claude/skills/stitch-react/README.md +36 -0
  28. package/templates/.claude/skills/stitch-react/SKILL.md +323 -0
  29. package/templates/.claude/skills/stitch-react/examples/gold-standard-card.tsx +88 -0
  30. package/templates/.claude/skills/stitch-react/package-lock.json +231 -0
  31. package/templates/.claude/skills/stitch-react/package.json +16 -0
  32. package/templates/.claude/skills/stitch-react/resources/architecture-checklist.md +15 -0
  33. package/templates/.claude/skills/stitch-react/resources/component-template.tsx +37 -0
  34. package/templates/.claude/skills/stitch-react/resources/stitch-api-reference.md +14 -0
  35. package/templates/.claude/skills/stitch-react/resources/style-guide.json +24 -0
  36. package/templates/.claude/skills/stitch-react/scripts/fetch-stitch.sh +30 -0
  37. package/templates/.claude/skills/stitch-react/scripts/validate.js +77 -0
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: stitch:react
3
+ description: 디자인을 모듈형 React 컴포넌트로 변환
4
+ ---
5
+
6
+ <purpose>
7
+ 디자인 자산을 타입 안전하고 모듈화된 React 컴포넌트로 변환
8
+ </purpose>
9
+
10
+ ---
11
+
12
+ <trigger_conditions>
13
+
14
+ | 트리거 | 반응 |
15
+ |--------|------|
16
+ | "React 컴포넌트 생성" | 즉시 실행 |
17
+ | "디자인을 컴포넌트로" | 즉시 실행 |
18
+ | "UI 컴포넌트 구현" | 즉시 실행 |
19
+
20
+ </trigger_conditions>
21
+
22
+ ---
23
+
24
+ <workflow>
25
+
26
+ <step number="1">
27
+ <action>디자인 자산 분석</action>
28
+ <tools>Read</tools>
29
+ <details>
30
+ - 디자인 파일(Figma, Sketch, DESIGN.md) 읽기
31
+ - 색상, 타이포, 간격 정보 추출
32
+ - 컴포넌트 구조 파악
33
+ </details>
34
+ </step>
35
+
36
+ <step number="2">
37
+ <action>아키텍처 설계</action>
38
+ <tools>-</tools>
39
+ <details>
40
+ | 분류 | 위치 | 목적 |
41
+ |------|------|------|
42
+ | 컴포넌트 | `src/components/` | 재사용 가능 UI |
43
+ | 훅 | `src/hooks/` | 비즈니스 로직 분리 |
44
+ | 데이터 | `src/data/mockData.ts` | 정적 콘텐츠 |
45
+ | 타입 | `src/types/` | TypeScript 인터페이스 |
46
+ </details>
47
+ </step>
48
+
49
+ <step number="3">
50
+ <action>컴포넌트 구현</action>
51
+ <tools>Write</tools>
52
+ <details>
53
+ **원칙:**
54
+ - 하나의 파일 = 하나의 컴포넌트
55
+ - Props는 TypeScript 인터페이스로 정의
56
+ - Tailwind 클래스 사용 (하드코딩 금지)
57
+ - 접근성(a11y) 고려
58
+
59
+ **구조:**
60
+ ```typescript
61
+ interface ButtonProps {
62
+ readonly variant: 'primary' | 'secondary';
63
+ readonly children: React.ReactNode;
64
+ readonly onClick?: () => void;
65
+ }
66
+
67
+ export function Button({ variant, children, onClick }: ButtonProps) {
68
+ return (
69
+ <button
70
+ className={variant === 'primary' ? 'bg-primary' : 'bg-secondary'}
71
+ onClick={onClick}
72
+ >
73
+ {children}
74
+ </button>
75
+ );
76
+ }
77
+ ```
78
+ </details>
79
+ </step>
80
+
81
+ <step number="4">
82
+ <action>Tailwind 설정 동기화</action>
83
+ <tools>Edit</tools>
84
+ <details>
85
+ DESIGN.md의 색상/타이포 → `tailwind.config.ts`
86
+ ```typescript
87
+ export default {
88
+ theme: {
89
+ extend: {
90
+ colors: {
91
+ primary: '#3B82F6',
92
+ secondary: '#64748B',
93
+ },
94
+ },
95
+ },
96
+ }
97
+ ```
98
+ </details>
99
+ </step>
100
+
101
+ <step number="5">
102
+ <action>검증</action>
103
+ <tools>Bash</tools>
104
+ <details>
105
+ ```bash
106
+ # TypeScript 타입 체크
107
+ npx tsc --noEmit
108
+
109
+ # 린트
110
+ npx eslint src/
111
+
112
+ # 빌드 테스트
113
+ npm run build
114
+ ```
115
+ </details>
116
+ </step>
117
+
118
+ </workflow>
119
+
120
+ ---
121
+
122
+ <architecture_rules>
123
+
124
+ ## 금지
125
+
126
+ | 패턴 | 이유 |
127
+ |------|------|
128
+ | 단일 파일에 모든 컴포넌트 | 유지보수 어려움 |
129
+ | 하드코딩된 색상 (`#3B82F6`) | 테마 변경 불가 |
130
+ | 인라인 스타일 | 일관성 저하 |
131
+ | any 타입 | 타입 안전성 상실 |
132
+
133
+ ## 필수
134
+
135
+ | 패턴 | 이유 |
136
+ |------|------|
137
+ | 컴포넌트당 1파일 | 명확한 구조 |
138
+ | Tailwind 클래스 | 테마 통합 |
139
+ | TypeScript 인터페이스 | 타입 안전성 |
140
+ | Readonly Props | 불변성 보장 |
141
+
142
+ </architecture_rules>
143
+
144
+ ---
145
+
146
+ <examples>
147
+
148
+ ## Button 컴포넌트
149
+
150
+ **입력 (DESIGN.md):**
151
+ ```markdown
152
+ ### 버튼
153
+ - Primary: 파란색 배경, 흰색 텍스트
154
+ - Secondary: 회색 배경, 검은색 텍스트
155
+ - 모서리: 8px 라운드
156
+ - 패딩: 상하 12px, 좌우 24px
157
+ ```
158
+
159
+ **출력:**
160
+ ```typescript
161
+ // src/components/Button.tsx
162
+ interface ButtonProps {
163
+ readonly variant: 'primary' | 'secondary';
164
+ readonly children: React.ReactNode;
165
+ readonly onClick?: () => void;
166
+ readonly disabled?: boolean;
167
+ }
168
+
169
+ export function Button({
170
+ variant,
171
+ children,
172
+ onClick,
173
+ disabled
174
+ }: ButtonProps) {
175
+ const baseClasses = 'rounded-lg px-6 py-3 font-medium transition-colors';
176
+ const variantClasses = {
177
+ primary: 'bg-primary text-white hover:bg-primary-dark',
178
+ secondary: 'bg-secondary text-black hover:bg-secondary-dark',
179
+ };
180
+
181
+ return (
182
+ <button
183
+ className={`${baseClasses} ${variantClasses[variant]}`}
184
+ onClick={onClick}
185
+ disabled={disabled}
186
+ aria-disabled={disabled}
187
+ >
188
+ {children}
189
+ </button>
190
+ );
191
+ }
192
+ ```
193
+
194
+ ```typescript
195
+ // tailwind.config.ts
196
+ export default {
197
+ theme: {
198
+ extend: {
199
+ colors: {
200
+ primary: {
201
+ DEFAULT: '#3B82F6',
202
+ dark: '#2563EB',
203
+ },
204
+ secondary: {
205
+ DEFAULT: '#64748B',
206
+ dark: '#475569',
207
+ },
208
+ },
209
+ },
210
+ },
211
+ }
212
+ ```
213
+
214
+ ---
215
+
216
+ ## Card 컴포넌트
217
+
218
+ **입력:**
219
+ ```markdown
220
+ ### 카드
221
+ - 배경: 흰색
222
+ - 테두리: 연한 회색 1px
223
+ - 그림자: 부드러운 그림자
224
+ - 패딩: 24px
225
+ ```
226
+
227
+ **출력:**
228
+ ```typescript
229
+ // src/components/Card.tsx
230
+ interface CardProps {
231
+ readonly children: React.ReactNode;
232
+ readonly className?: string;
233
+ }
234
+
235
+ export function Card({ children, className = '' }: CardProps) {
236
+ return (
237
+ <div className={`bg-white border border-gray-200 rounded-xl p-6 shadow-sm ${className}`}>
238
+ {children}
239
+ </div>
240
+ );
241
+ }
242
+ ```
243
+
244
+ </examples>
245
+
246
+ ---
247
+
248
+ <custom_hook_pattern>
249
+
250
+ **비즈니스 로직 분리:**
251
+
252
+ ```typescript
253
+ // src/hooks/useUserData.ts
254
+ import { useState, useEffect } from 'react';
255
+
256
+ interface User {
257
+ readonly id: string;
258
+ readonly name: string;
259
+ }
260
+
261
+ export function useUserData(userId: string) {
262
+ const [user, setUser] = useState<User | null>(null);
263
+ const [loading, setLoading] = useState(true);
264
+
265
+ useEffect(() => {
266
+ async function fetchUser() {
267
+ const response = await fetch(`/api/users/${userId}`);
268
+ const data = await response.json();
269
+ setUser(data);
270
+ setLoading(false);
271
+ }
272
+ fetchUser();
273
+ }, [userId]);
274
+
275
+ return { user, loading };
276
+ }
277
+ ```
278
+
279
+ **컴포넌트에서 사용:**
280
+ ```typescript
281
+ // src/components/UserProfile.tsx
282
+ import { useUserData } from '@/hooks/useUserData';
283
+
284
+ export function UserProfile({ userId }: { userId: string }) {
285
+ const { user, loading } = useUserData(userId);
286
+
287
+ if (loading) return <div>Loading...</div>;
288
+ return <div>{user?.name}</div>;
289
+ }
290
+ ```
291
+
292
+ </custom_hook_pattern>
293
+
294
+ ---
295
+
296
+ <validation>
297
+
298
+ **체크리스트:**
299
+ - [ ] 컴포넌트당 1파일
300
+ - [ ] TypeScript 인터페이스 정의
301
+ - [ ] Props에 `readonly` 사용
302
+ - [ ] Tailwind 클래스만 사용 (하드코딩 금지)
303
+ - [ ] 접근성(aria-*) 속성 추가
304
+ - [ ] 비즈니스 로직은 Custom Hook으로 분리
305
+ - [ ] `tsc --noEmit` 통과
306
+ - [ ] `eslint` 통과
307
+
308
+ </validation>
309
+
310
+ ---
311
+
312
+ <best_practices>
313
+
314
+ | 원칙 | 방법 |
315
+ |------|------|
316
+ | **모듈화** | 작은 단위로 분리 |
317
+ | **타입 안전성** | `any` 금지, 명시적 타입 |
318
+ | **불변성** | `readonly` Props |
319
+ | **테마 통합** | Tailwind 설정 활용 |
320
+ | **접근성** | ARIA 속성, 시맨틱 HTML |
321
+ | **로직 분리** | UI ≠ 비즈니스 로직 |
322
+
323
+ </best_practices>
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React from 'react';
18
+ // Note for Agent: The '@' alias refers to the target project's src directory.
19
+ // Ensure src/data/mockData.ts is created before generating this component.
20
+ import { cardData } from '../data/mockData';
21
+
22
+ /**
23
+ * Gold Standard: ActivityCard
24
+ * This file serves as the definitive reference for the agent.
25
+ */
26
+ interface ActivityCardProps {
27
+ readonly id: string;
28
+ readonly username: string;
29
+ readonly action: 'MERGED' | 'COMMIT';
30
+ readonly timestamp: string;
31
+ readonly avatarUrl: string;
32
+ readonly repoName: string;
33
+ }
34
+
35
+ export const ActivityCard: React.FC<ActivityCardProps> = ({
36
+ username,
37
+ action,
38
+ timestamp,
39
+ avatarUrl,
40
+ repoName,
41
+ }) => {
42
+ const isMerged = action === 'MERGED';
43
+
44
+ return (
45
+ <div className='flex items-center justify-between gap-4 rounded-lg bg-surface-dark p-4 min-h-14 shadow-sm ring-1 ring-white/10'>
46
+ <div className='flex items-center gap-4 overflow-hidden'>
47
+ <div
48
+ className='aspect-square h-10 w-10 flex-shrink-0 rounded-full bg-cover bg-center bg-no-repeat'
49
+ style={{ backgroundImage: `url(${avatarUrl})` }}
50
+ aria-label={`Avatar for ${username}`}
51
+ />
52
+
53
+ <div className='flex flex-wrap items-center gap-x-2 gap-y-1 text-sm sm:text-base'>
54
+ <a
55
+ href='#'
56
+ className='font-semibold text-primary hover:underline truncate'
57
+ >
58
+ {username}
59
+ </a>
60
+
61
+ <span
62
+ className={`inline-block px-2 py-0.5 text-xs font-semibold rounded-full ${
63
+ isMerged
64
+ ? 'bg-purple-500/30 text-purple-300'
65
+ : 'bg-primary/30 text-primary'
66
+ }`}
67
+ >
68
+ {action}
69
+ </span>
70
+
71
+ <span className='text-white/60'>in</span>
72
+
73
+ <a href='#' className='text-primary hover:underline truncate'>
74
+ {repoName}
75
+ </a>
76
+ </div>
77
+ </div>
78
+
79
+ <div className='shrink-0'>
80
+ <p className='text-sm font-normal leading-normal text-white/50'>
81
+ {timestamp}
82
+ </p>
83
+ </div>
84
+ </div>
85
+ );
86
+ };
87
+
88
+ export default ActivityCard;
@@ -0,0 +1,231 @@
1
+ {
2
+ "name": "stitch-to-react-pro",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "stitch-to-react-pro",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "@swc/core": "^1.3.100"
12
+ },
13
+ "engines": {
14
+ "node": ">=18.0.0"
15
+ }
16
+ },
17
+ "node_modules/@swc/core": {
18
+ "version": "1.15.8",
19
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.8.tgz",
20
+ "integrity": "sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==",
21
+ "hasInstallScript": true,
22
+ "license": "Apache-2.0",
23
+ "dependencies": {
24
+ "@swc/counter": "^0.1.3",
25
+ "@swc/types": "^0.1.25"
26
+ },
27
+ "engines": {
28
+ "node": ">=10"
29
+ },
30
+ "funding": {
31
+ "type": "opencollective",
32
+ "url": "https://opencollective.com/swc"
33
+ },
34
+ "optionalDependencies": {
35
+ "@swc/core-darwin-arm64": "1.15.8",
36
+ "@swc/core-darwin-x64": "1.15.8",
37
+ "@swc/core-linux-arm-gnueabihf": "1.15.8",
38
+ "@swc/core-linux-arm64-gnu": "1.15.8",
39
+ "@swc/core-linux-arm64-musl": "1.15.8",
40
+ "@swc/core-linux-x64-gnu": "1.15.8",
41
+ "@swc/core-linux-x64-musl": "1.15.8",
42
+ "@swc/core-win32-arm64-msvc": "1.15.8",
43
+ "@swc/core-win32-ia32-msvc": "1.15.8",
44
+ "@swc/core-win32-x64-msvc": "1.15.8"
45
+ },
46
+ "peerDependencies": {
47
+ "@swc/helpers": ">=0.5.17"
48
+ },
49
+ "peerDependenciesMeta": {
50
+ "@swc/helpers": {
51
+ "optional": true
52
+ }
53
+ }
54
+ },
55
+ "node_modules/@swc/core-darwin-arm64": {
56
+ "version": "1.15.8",
57
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz",
58
+ "integrity": "sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==",
59
+ "cpu": [
60
+ "arm64"
61
+ ],
62
+ "license": "Apache-2.0 AND MIT",
63
+ "optional": true,
64
+ "os": [
65
+ "darwin"
66
+ ],
67
+ "engines": {
68
+ "node": ">=10"
69
+ }
70
+ },
71
+ "node_modules/@swc/core-darwin-x64": {
72
+ "version": "1.15.8",
73
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz",
74
+ "integrity": "sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==",
75
+ "cpu": [
76
+ "x64"
77
+ ],
78
+ "license": "Apache-2.0 AND MIT",
79
+ "optional": true,
80
+ "os": [
81
+ "darwin"
82
+ ],
83
+ "engines": {
84
+ "node": ">=10"
85
+ }
86
+ },
87
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
88
+ "version": "1.15.8",
89
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz",
90
+ "integrity": "sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==",
91
+ "cpu": [
92
+ "arm"
93
+ ],
94
+ "license": "Apache-2.0",
95
+ "optional": true,
96
+ "os": [
97
+ "linux"
98
+ ],
99
+ "engines": {
100
+ "node": ">=10"
101
+ }
102
+ },
103
+ "node_modules/@swc/core-linux-arm64-gnu": {
104
+ "version": "1.15.8",
105
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz",
106
+ "integrity": "sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==",
107
+ "cpu": [
108
+ "arm64"
109
+ ],
110
+ "license": "Apache-2.0 AND MIT",
111
+ "optional": true,
112
+ "os": [
113
+ "linux"
114
+ ],
115
+ "engines": {
116
+ "node": ">=10"
117
+ }
118
+ },
119
+ "node_modules/@swc/core-linux-arm64-musl": {
120
+ "version": "1.15.8",
121
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz",
122
+ "integrity": "sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==",
123
+ "cpu": [
124
+ "arm64"
125
+ ],
126
+ "license": "Apache-2.0 AND MIT",
127
+ "optional": true,
128
+ "os": [
129
+ "linux"
130
+ ],
131
+ "engines": {
132
+ "node": ">=10"
133
+ }
134
+ },
135
+ "node_modules/@swc/core-linux-x64-gnu": {
136
+ "version": "1.15.8",
137
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz",
138
+ "integrity": "sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==",
139
+ "cpu": [
140
+ "x64"
141
+ ],
142
+ "license": "Apache-2.0 AND MIT",
143
+ "optional": true,
144
+ "os": [
145
+ "linux"
146
+ ],
147
+ "engines": {
148
+ "node": ">=10"
149
+ }
150
+ },
151
+ "node_modules/@swc/core-linux-x64-musl": {
152
+ "version": "1.15.8",
153
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz",
154
+ "integrity": "sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==",
155
+ "cpu": [
156
+ "x64"
157
+ ],
158
+ "license": "Apache-2.0 AND MIT",
159
+ "optional": true,
160
+ "os": [
161
+ "linux"
162
+ ],
163
+ "engines": {
164
+ "node": ">=10"
165
+ }
166
+ },
167
+ "node_modules/@swc/core-win32-arm64-msvc": {
168
+ "version": "1.15.8",
169
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz",
170
+ "integrity": "sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==",
171
+ "cpu": [
172
+ "arm64"
173
+ ],
174
+ "license": "Apache-2.0 AND MIT",
175
+ "optional": true,
176
+ "os": [
177
+ "win32"
178
+ ],
179
+ "engines": {
180
+ "node": ">=10"
181
+ }
182
+ },
183
+ "node_modules/@swc/core-win32-ia32-msvc": {
184
+ "version": "1.15.8",
185
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz",
186
+ "integrity": "sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==",
187
+ "cpu": [
188
+ "ia32"
189
+ ],
190
+ "license": "Apache-2.0 AND MIT",
191
+ "optional": true,
192
+ "os": [
193
+ "win32"
194
+ ],
195
+ "engines": {
196
+ "node": ">=10"
197
+ }
198
+ },
199
+ "node_modules/@swc/core-win32-x64-msvc": {
200
+ "version": "1.15.8",
201
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz",
202
+ "integrity": "sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==",
203
+ "cpu": [
204
+ "x64"
205
+ ],
206
+ "license": "Apache-2.0 AND MIT",
207
+ "optional": true,
208
+ "os": [
209
+ "win32"
210
+ ],
211
+ "engines": {
212
+ "node": ">=10"
213
+ }
214
+ },
215
+ "node_modules/@swc/counter": {
216
+ "version": "0.1.3",
217
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
218
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
219
+ "license": "Apache-2.0"
220
+ },
221
+ "node_modules/@swc/types": {
222
+ "version": "0.1.25",
223
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
224
+ "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
225
+ "license": "Apache-2.0",
226
+ "dependencies": {
227
+ "@swc/counter": "^0.1.3"
228
+ }
229
+ }
230
+ }
231
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "react-components",
3
+ "version": "1.0.0",
4
+ "description": "Design-to-code prompt to React components for Stitch MCP",
5
+ "type": "module",
6
+ "scripts": {
7
+ "validate": "node scripts/validate.js",
8
+ "fetch": "bash scripts/fetch-stitch.sh"
9
+ },
10
+ "dependencies": {
11
+ "@swc/core": "^1.3.100"
12
+ },
13
+ "engines": {
14
+ "node": ">=18.0.0"
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ # Architecture Quality Gate
2
+
3
+ ### Structural integrity
4
+ - [ ] Logic extracted to custom hooks in `src/hooks/`.
5
+ - [ ] No monolithic files; strictly Atomic/Composite modularity.
6
+ - [ ] All static text/URLs moved to `src/data/mockData.ts`.
7
+
8
+ ### Type safety and syntax
9
+ - [ ] Props use `Readonly<T>` interfaces.
10
+ - [ ] File is syntactically valid TypeScript (no red squiggles).
11
+ - [ ] Placeholders from templates (e.g., `StitchComponent`) have been replaced with actual names.
12
+
13
+ ### Styling and theming
14
+ - [ ] Dark mode (`dark:`) applied to all color classes.
15
+ - [ ] No hardcoded hex values; use theme-mapped Tailwind classes.