start-vibing 2.0.8 → 2.0.10

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 (139) hide show
  1. package/README.md +177 -176
  2. package/dist/cli.js +38 -11
  3. package/package.json +42 -42
  4. package/template/.claude/CLAUDE.md +174 -152
  5. package/template/.claude/agents/01-orchestration/agent-selector.md +130 -123
  6. package/template/.claude/agents/01-orchestration/checkpoint-manager.md +142 -131
  7. package/template/.claude/agents/01-orchestration/context-manager.md +138 -124
  8. package/template/.claude/agents/01-orchestration/error-recovery.md +182 -176
  9. package/template/.claude/agents/01-orchestration/orchestrator.md +114 -107
  10. package/template/.claude/agents/01-orchestration/parallel-coordinator.md +141 -130
  11. package/template/.claude/agents/01-orchestration/task-decomposer.md +121 -118
  12. package/template/.claude/agents/01-orchestration/workflow-router.md +114 -111
  13. package/template/.claude/agents/02-typescript/bun-runtime-expert.md +197 -180
  14. package/template/.claude/agents/02-typescript/esm-resolver.md +193 -187
  15. package/template/.claude/agents/02-typescript/import-alias-enforcer.md +158 -149
  16. package/template/.claude/agents/02-typescript/ts-generics-helper.md +183 -165
  17. package/template/.claude/agents/02-typescript/ts-migration-helper.md +238 -227
  18. package/template/.claude/agents/02-typescript/ts-strict-checker.md +180 -162
  19. package/template/.claude/agents/02-typescript/ts-types-analyzer.md +199 -185
  20. package/template/.claude/agents/02-typescript/type-definition-writer.md +187 -183
  21. package/template/.claude/agents/02-typescript/zod-schema-designer.md +212 -197
  22. package/template/.claude/agents/02-typescript/zod-validator.md +158 -153
  23. package/template/.claude/agents/03-testing/playwright-assertions.md +265 -255
  24. package/template/.claude/agents/03-testing/playwright-e2e.md +247 -245
  25. package/template/.claude/agents/03-testing/playwright-fixtures.md +234 -240
  26. package/template/.claude/agents/03-testing/playwright-multi-viewport.md +256 -261
  27. package/template/.claude/agents/03-testing/playwright-page-objects.md +247 -247
  28. package/template/.claude/agents/03-testing/test-cleanup-manager.md +248 -256
  29. package/template/.claude/agents/03-testing/test-data-generator.md +254 -266
  30. package/template/.claude/agents/03-testing/tester-integration.md +278 -278
  31. package/template/.claude/agents/03-testing/tester-unit.md +207 -204
  32. package/template/.claude/agents/03-testing/vitest-config.md +287 -289
  33. package/template/.claude/agents/04-docker/container-health.md +255 -239
  34. package/template/.claude/agents/04-docker/deployment-validator.md +225 -217
  35. package/template/.claude/agents/04-docker/docker-compose-designer.md +281 -268
  36. package/template/.claude/agents/04-docker/docker-env-manager.md +235 -228
  37. package/template/.claude/agents/04-docker/docker-multi-stage.md +241 -229
  38. package/template/.claude/agents/04-docker/dockerfile-optimizer.md +208 -204
  39. package/template/.claude/agents/05-database/data-migration.md +0 -293
  40. package/template/.claude/agents/05-database/database-seeder.md +273 -270
  41. package/template/.claude/agents/05-database/mongodb-query-optimizer.md +230 -219
  42. package/template/.claude/agents/05-database/mongoose-aggregation.md +306 -280
  43. package/template/.claude/agents/05-database/mongoose-index-optimizer.md +182 -174
  44. package/template/.claude/agents/05-database/mongoose-schema-designer.md +267 -267
  45. package/template/.claude/agents/06-security/auth-session-validator.md +68 -65
  46. package/template/.claude/agents/06-security/input-sanitizer.md +80 -81
  47. package/template/.claude/agents/06-security/owasp-checker.md +97 -87
  48. package/template/.claude/agents/06-security/permission-auditor.md +100 -95
  49. package/template/.claude/agents/06-security/security-auditor.md +84 -82
  50. package/template/.claude/agents/06-security/sensitive-data-scanner.md +83 -85
  51. package/template/.claude/agents/07-documentation/api-documenter.md +136 -131
  52. package/template/.claude/agents/07-documentation/changelog-manager.md +105 -96
  53. package/template/.claude/agents/07-documentation/documenter.md +76 -73
  54. package/template/.claude/agents/07-documentation/domain-updater.md +81 -74
  55. package/template/.claude/agents/07-documentation/jsdoc-generator.md +114 -114
  56. package/template/.claude/agents/07-documentation/readme-generator.md +135 -132
  57. package/template/.claude/agents/08-git/branch-manager.md +58 -58
  58. package/template/.claude/agents/08-git/commit-manager.md +63 -61
  59. package/template/.claude/agents/08-git/pr-creator.md +76 -72
  60. package/template/.claude/agents/09-quality/code-reviewer.md +71 -64
  61. package/template/.claude/agents/09-quality/quality-checker.md +67 -67
  62. package/template/.claude/agents/10-research/best-practices-finder.md +89 -82
  63. package/template/.claude/agents/10-research/competitor-analyzer.md +106 -96
  64. package/template/.claude/agents/10-research/pattern-researcher.md +93 -86
  65. package/template/.claude/agents/10-research/research-cache-manager.md +76 -75
  66. package/template/.claude/agents/10-research/research-web.md +98 -91
  67. package/template/.claude/agents/10-research/tech-evaluator.md +101 -94
  68. package/template/.claude/agents/11-ui-ux/accessibility-auditor.md +136 -128
  69. package/template/.claude/agents/11-ui-ux/design-system-enforcer.md +125 -116
  70. package/template/.claude/agents/11-ui-ux/skeleton-generator.md +118 -120
  71. package/template/.claude/agents/11-ui-ux/ui-desktop.md +132 -126
  72. package/template/.claude/agents/11-ui-ux/ui-mobile.md +98 -94
  73. package/template/.claude/agents/11-ui-ux/ui-tablet.md +110 -111
  74. package/template/.claude/agents/12-performance/api-latency-analyzer.md +156 -149
  75. package/template/.claude/agents/12-performance/bundle-analyzer.md +113 -107
  76. package/template/.claude/agents/12-performance/memory-leak-detector.md +137 -126
  77. package/template/.claude/agents/12-performance/performance-profiler.md +115 -108
  78. package/template/.claude/agents/12-performance/query-optimizer.md +124 -116
  79. package/template/.claude/agents/12-performance/render-optimizer.md +154 -148
  80. package/template/.claude/agents/13-debugging/build-error-fixer.md +207 -188
  81. package/template/.claude/agents/13-debugging/debugger.md +149 -137
  82. package/template/.claude/agents/13-debugging/error-stack-analyzer.md +141 -131
  83. package/template/.claude/agents/13-debugging/network-debugger.md +208 -185
  84. package/template/.claude/agents/13-debugging/runtime-error-fixer.md +181 -173
  85. package/template/.claude/agents/13-debugging/type-error-resolver.md +185 -173
  86. package/template/.claude/agents/14-validation/final-validator.md +93 -83
  87. package/template/.claude/agents/_backup/analyzer.md +134 -125
  88. package/template/.claude/agents/_backup/code-reviewer.md +279 -272
  89. package/template/.claude/agents/_backup/commit-manager.md +219 -212
  90. package/template/.claude/agents/_backup/debugger.md +280 -271
  91. package/template/.claude/agents/_backup/documenter.md +237 -220
  92. package/template/.claude/agents/_backup/domain-updater.md +197 -194
  93. package/template/.claude/agents/_backup/final-validator.md +169 -164
  94. package/template/.claude/agents/_backup/orchestrator.md +149 -138
  95. package/template/.claude/agents/_backup/performance.md +232 -228
  96. package/template/.claude/agents/_backup/quality-checker.md +240 -240
  97. package/template/.claude/agents/_backup/research.md +315 -299
  98. package/template/.claude/agents/_backup/security-auditor.md +192 -186
  99. package/template/.claude/agents/_backup/tester.md +566 -564
  100. package/template/.claude/agents/_backup/ui-ux-reviewer.md +247 -242
  101. package/template/.claude/commands/feature.md +48 -48
  102. package/template/.claude/config/README.md +30 -30
  103. package/template/.claude/config/mcp-config.json +344 -330
  104. package/template/.claude/config/project-config.json +53 -53
  105. package/template/.claude/config/quality-gates.json +46 -46
  106. package/template/.claude/config/security-rules.json +45 -45
  107. package/template/.claude/config/testing-config.json +164 -168
  108. package/template/.claude/hooks/SETUP.md +126 -126
  109. package/template/.claude/hooks/run-hook.ts +176 -172
  110. package/template/.claude/hooks/stop-validator.ts +825 -353
  111. package/template/.claude/hooks/user-prompt-submit.ts +886 -794
  112. package/template/.claude/scripts/mcp-quick-install.ts +151 -151
  113. package/template/.claude/scripts/setup-mcps.ts +651 -628
  114. package/template/.claude/settings.json +275 -276
  115. package/template/.claude/skills/bun-runtime/SKILL.md +430 -430
  116. package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
  117. package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +431 -403
  118. package/template/.claude/skills/codebase-knowledge/domains/mcp-integration.md +295 -281
  119. package/template/.claude/skills/debugging-patterns/SKILL.md +485 -484
  120. package/template/.claude/skills/docker-patterns/SKILL.md +555 -547
  121. package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
  122. package/template/.claude/skills/final-check/SKILL.md +284 -284
  123. package/template/.claude/skills/git-workflow/SKILL.md +454 -454
  124. package/template/.claude/skills/mongoose-patterns/SKILL.md +499 -512
  125. package/template/.claude/skills/nextjs-app-router/SKILL.md +327 -337
  126. package/template/.claude/skills/performance-patterns/SKILL.md +547 -549
  127. package/template/.claude/skills/playwright-automation/SKILL.md +438 -438
  128. package/template/.claude/skills/quality-gate/SKILL.md +294 -294
  129. package/template/.claude/skills/react-patterns/SKILL.md +389 -376
  130. package/template/.claude/skills/research-cache/SKILL.md +222 -207
  131. package/template/.claude/skills/security-scan/SKILL.md +222 -222
  132. package/template/.claude/skills/shadcn-ui/SKILL.md +511 -520
  133. package/template/.claude/skills/tailwind-patterns/SKILL.md +465 -467
  134. package/template/.claude/skills/test-coverage/SKILL.md +467 -464
  135. package/template/.claude/skills/trpc-api/SKILL.md +434 -435
  136. package/template/.claude/skills/typescript-strict/SKILL.md +367 -368
  137. package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
  138. package/template/.claude/skills/zod-validation/SKILL.md +403 -405
  139. package/template/CLAUDE.md +25 -25
@@ -1,368 +1,367 @@
1
- ---
2
- name: typescript-strict
3
- description: TypeScript strict mode patterns and best practices. Index access, literal types, null checks, generics, type inference. Use when working with TypeScript files.
4
- allowed-tools: Read, Write, Edit, Grep, Glob, Bash
5
- ---
6
-
7
- # TypeScript Strict - Type Safety Patterns
8
-
9
- ## Purpose
10
-
11
- Expert guidance for TypeScript strict mode:
12
-
13
- - **Strict Null Checks** - Handle undefined/null properly
14
- - **Index Access** - Safe property access patterns
15
- - **Literal Types** - Const assertions and narrowing
16
- - **Generics** - Type-safe reusable patterns
17
- - **Type Guards** - Runtime type validation
18
-
19
- ---
20
-
21
- ## Critical tsconfig.json
22
-
23
- ```json
24
- {
25
- "compilerOptions": {
26
- "strict": true,
27
- "noUncheckedIndexedAccess": true,
28
- "noImplicitAny": true,
29
- "strictNullChecks": true,
30
- "strictFunctionTypes": true,
31
- "noImplicitReturns": true,
32
- "noFallthroughCasesInSwitch": true,
33
- "exactOptionalPropertyTypes": true,
34
- "noPropertyAccessFromIndexSignature": true
35
- }
36
- }
37
- ```
38
-
39
- ---
40
-
41
- ## Index Access Patterns
42
-
43
- ### Environment Variables
44
-
45
- ```typescript
46
- // WRONG - TS7053
47
- const port = process.env.PORT;
48
-
49
- // CORRECT - Use bracket notation
50
- const port = process.env['PORT'];
51
- const host = process.env['HOST'] ?? 'localhost';
52
- ```
53
-
54
- ### Object Property Access
55
-
56
- ```typescript
57
- interface Config {
58
- [key: string]: string | undefined;
59
- }
60
-
61
- const config: Config = { api: 'https://api.example.com' };
62
-
63
- // WRONG - Direct access
64
- const url = config.api;
65
-
66
- // CORRECT - Bracket access with check
67
- const url = config['api'];
68
- if (url) {
69
- fetch(url);
70
- }
71
- ```
72
-
73
- ### Array Access
74
-
75
- ```typescript
76
- const items = ['a', 'b', 'c'];
77
-
78
- // WRONG - Could be undefined
79
- const first = items[0].toUpperCase();
80
-
81
- // CORRECT - Check first
82
- const first = items[0];
83
- if (first) {
84
- console.log(first.toUpperCase());
85
- }
86
-
87
- // Or use non-null assertion if certain
88
- const guaranteed = items[0]!;
89
- ```
90
-
91
- ---
92
-
93
- ## Literal Types & Const Assertions
94
-
95
- ### String Literals
96
-
97
- ```typescript
98
- // WRONG - Type is string
99
- const status = 'pending';
100
-
101
- // CORRECT - Literal type
102
- const status = 'pending' as const;
103
- // type: "pending"
104
-
105
- // Object with literals
106
- const config = {
107
- mode: 'production' as const,
108
- level: 'high' as const,
109
- };
110
- ```
111
-
112
- ### Object Literals
113
-
114
- ```typescript
115
- // WRONG - Types are widened
116
- const endpoints = {
117
- users: '/api/users',
118
- posts: '/api/posts',
119
- };
120
- // type: { users: string; posts: string }
121
-
122
- // CORRECT - Exact types
123
- const endpoints = {
124
- users: '/api/users',
125
- posts: '/api/posts',
126
- } as const;
127
- // type: { readonly users: "/api/users"; readonly posts: "/api/posts" }
128
- ```
129
-
130
- ### Discriminated Unions
131
-
132
- ```typescript
133
- type Result<T> =
134
- | { success: true; data: T }
135
- | { success: false; error: string };
136
-
137
- function handleResult<T>(result: Result<T>) {
138
- if (result.success) {
139
- // TypeScript knows result.data exists here
140
- return result.data;
141
- } else {
142
- // TypeScript knows result.error exists here
143
- throw new Error(result.error);
144
- }
145
- }
146
- ```
147
-
148
- ---
149
-
150
- ## Null & Undefined Handling
151
-
152
- ### Optional Chaining
153
-
154
- ```typescript
155
- interface User {
156
- profile?: {
157
- avatar?: string;
158
- };
159
- }
160
-
161
- // CORRECT - Optional chaining
162
- const avatar = user.profile?.avatar ?? '/default.png';
163
- ```
164
-
165
- ### Nullish Coalescing
166
-
167
- ```typescript
168
- // WRONG - || treats 0, '', false as falsy
169
- const count = input || 10;
170
-
171
- // CORRECT - ?? only treats null/undefined as nullish
172
- const count = input ?? 10;
173
- ```
174
-
175
- ### Type Guards
176
-
177
- ```typescript
178
- // Custom type guard
179
- function isUser(value: unknown): value is User {
180
- return (
181
- typeof value === 'object' &&
182
- value !== null &&
183
- 'id' in value &&
184
- 'email' in value
185
- );
186
- }
187
-
188
- // Usage
189
- function processData(data: unknown) {
190
- if (isUser(data)) {
191
- // TypeScript knows data is User here
192
- console.log(data.email);
193
- }
194
- }
195
- ```
196
-
197
- ### Assertion Functions
198
-
199
- ```typescript
200
- function assertDefined<T>(value: T | undefined | null, message: string): asserts value is T {
201
- if (value === undefined || value === null) {
202
- throw new Error(message);
203
- }
204
- }
205
-
206
- // Usage
207
- const user = await getUser(id);
208
- assertDefined(user, `User ${id} not found`);
209
- // user is guaranteed to be defined after this
210
- console.log(user.name);
211
- ```
212
-
213
- ---
214
-
215
- ## Generic Patterns
216
-
217
- ### Constrained Generics
218
-
219
- ```typescript
220
- // Ensure T has an id property
221
- function findById<T extends { id: string }>(items: T[], id: string): T | undefined {
222
- return items.find((item) => item.id === id);
223
- }
224
-
225
- // Works with any type that has id
226
- interface User { id: string; name: string; }
227
- interface Post { id: string; title: string; }
228
-
229
- findById(users, '123'); // T is User
230
- findById(posts, '456'); // T is Post
231
- ```
232
-
233
- ### Infer Return Type
234
-
235
- ```typescript
236
- // Infer return type from callback
237
- function createFetcher<T>(fetcher: () => Promise<T>) {
238
- return {
239
- fetch: fetcher,
240
- refetch: () => fetcher(),
241
- };
242
- }
243
-
244
- // T is automatically inferred
245
- const userFetcher = createFetcher(async () => {
246
- const res = await fetch('/api/user');
247
- return res.json() as Promise<User>;
248
- });
249
- // userFetcher.fetch() returns Promise<User>
250
- ```
251
-
252
- ### Mapped Types
253
-
254
- ```typescript
255
- // Make all properties optional
256
- type Partial<T> = {
257
- [P in keyof T]?: T[P];
258
- };
259
-
260
- // Make all properties readonly
261
- type Readonly<T> = {
262
- readonly [P in keyof T]: T[P];
263
- };
264
-
265
- // Pick specific properties
266
- type Pick<T, K extends keyof T> = {
267
- [P in K]: T[P];
268
- };
269
-
270
- // Custom: Make specific properties required
271
- type RequireFields<T, K extends keyof T> = T & Required<Pick<T, K>>;
272
- ```
273
-
274
- ---
275
-
276
- ## Utility Types
277
-
278
- ```typescript
279
- // Exclude null/undefined
280
- type NonNullable<T> = T extends null | undefined ? never : T;
281
-
282
- // Extract function return type
283
- type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
284
-
285
- // Extract function parameters
286
- type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
287
-
288
- // Usage
289
- type UserSchema = z.infer<typeof userSchema>;
290
- type ApiResponse = Awaited<ReturnType<typeof fetchUser>>;
291
- ```
292
-
293
- ---
294
-
295
- ## Common Errors & Fixes
296
-
297
- ### TS2532: Object is possibly 'undefined'
298
-
299
- ```typescript
300
- // ERROR
301
- const name = user.profile.name;
302
-
303
- // FIX - Optional chaining
304
- const name = user.profile?.name ?? 'Unknown';
305
- ```
306
-
307
- ### TS2339: Property does not exist
308
-
309
- ```typescript
310
- // ERROR
311
- const env = process.env.NODE_ENV;
312
-
313
- // FIX - Bracket access
314
- const env = process.env['NODE_ENV'];
315
- ```
316
-
317
- ### TS7053: Index signature
318
-
319
- ```typescript
320
- // ERROR
321
- const value = obj[key];
322
-
323
- // FIX - Type assertion or bracket notation
324
- const value = (obj as Record<string, unknown>)[key];
325
- ```
326
-
327
- ---
328
-
329
- ## Agent Integration
330
-
331
- This skill is used by:
332
-
333
- - **ts-strict-checker** agent
334
- - **ts-types-analyzer** agent
335
- - **type-error-resolver** agent
336
- - **quality-checker** for typecheck validation
337
-
338
- ---
339
-
340
- ## Commands
341
-
342
- ```bash
343
- # Type check
344
- bun run typecheck
345
- bunx tsc --noEmit
346
-
347
- # Check specific file
348
- bunx tsc --noEmit path/to/file.ts
349
-
350
- # Generate types
351
- bunx tsc --declaration --emitDeclarationOnly
352
- ```
353
-
354
- ---
355
-
356
- ## FORBIDDEN
357
-
358
- 1. **`any` type** - Use `unknown` instead
359
- 2. **Non-null assertion without certainty** - Check first
360
- 3. **Type assertion to hide errors** - Fix the actual issue
361
- 4. **Ignoring strict errors** - Always fix properly
362
- 5. **`@ts-ignore` without explanation** - Use `@ts-expect-error` with comment
363
-
364
- ---
365
-
366
- ## Version
367
-
368
- - **v1.0.0** - Initial implementation based on TypeScript 5.x strict patterns
1
+ ---
2
+ name: typescript-strict
3
+ description: TypeScript strict mode patterns and best practices. Index access, literal types, null checks, generics, type inference. Use when working with TypeScript files.
4
+ allowed-tools: Read, Write, Edit, Grep, Glob, Bash
5
+ ---
6
+
7
+ # TypeScript Strict - Type Safety Patterns
8
+
9
+ ## Purpose
10
+
11
+ Expert guidance for TypeScript strict mode:
12
+
13
+ - **Strict Null Checks** - Handle undefined/null properly
14
+ - **Index Access** - Safe property access patterns
15
+ - **Literal Types** - Const assertions and narrowing
16
+ - **Generics** - Type-safe reusable patterns
17
+ - **Type Guards** - Runtime type validation
18
+
19
+ ---
20
+
21
+ ## Critical tsconfig.json
22
+
23
+ ```json
24
+ {
25
+ "compilerOptions": {
26
+ "strict": true,
27
+ "noUncheckedIndexedAccess": true,
28
+ "noImplicitAny": true,
29
+ "strictNullChecks": true,
30
+ "strictFunctionTypes": true,
31
+ "noImplicitReturns": true,
32
+ "noFallthroughCasesInSwitch": true,
33
+ "exactOptionalPropertyTypes": true,
34
+ "noPropertyAccessFromIndexSignature": true
35
+ }
36
+ }
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Index Access Patterns
42
+
43
+ ### Environment Variables
44
+
45
+ ```typescript
46
+ // WRONG - TS7053
47
+ const port = process.env.PORT;
48
+
49
+ // CORRECT - Use bracket notation
50
+ const port = process.env['PORT'];
51
+ const host = process.env['HOST'] ?? 'localhost';
52
+ ```
53
+
54
+ ### Object Property Access
55
+
56
+ ```typescript
57
+ interface Config {
58
+ [key: string]: string | undefined;
59
+ }
60
+
61
+ const config: Config = { api: 'https://api.example.com' };
62
+
63
+ // WRONG - Direct access
64
+ const url = config.api;
65
+
66
+ // CORRECT - Bracket access with check
67
+ const url = config['api'];
68
+ if (url) {
69
+ fetch(url);
70
+ }
71
+ ```
72
+
73
+ ### Array Access
74
+
75
+ ```typescript
76
+ const items = ['a', 'b', 'c'];
77
+
78
+ // WRONG - Could be undefined
79
+ const first = items[0].toUpperCase();
80
+
81
+ // CORRECT - Check first
82
+ const first = items[0];
83
+ if (first) {
84
+ console.log(first.toUpperCase());
85
+ }
86
+
87
+ // Or use non-null assertion if certain
88
+ const guaranteed = items[0]!;
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Literal Types & Const Assertions
94
+
95
+ ### String Literals
96
+
97
+ ```typescript
98
+ // WRONG - Type is string
99
+ const status = 'pending';
100
+
101
+ // CORRECT - Literal type
102
+ const status = 'pending' as const;
103
+ // type: "pending"
104
+
105
+ // Object with literals
106
+ const config = {
107
+ mode: 'production' as const,
108
+ level: 'high' as const,
109
+ };
110
+ ```
111
+
112
+ ### Object Literals
113
+
114
+ ```typescript
115
+ // WRONG - Types are widened
116
+ const endpoints = {
117
+ users: '/api/users',
118
+ posts: '/api/posts',
119
+ };
120
+ // type: { users: string; posts: string }
121
+
122
+ // CORRECT - Exact types
123
+ const endpoints = {
124
+ users: '/api/users',
125
+ posts: '/api/posts',
126
+ } as const;
127
+ // type: { readonly users: "/api/users"; readonly posts: "/api/posts" }
128
+ ```
129
+
130
+ ### Discriminated Unions
131
+
132
+ ```typescript
133
+ type Result<T> = { success: true; data: T } | { success: false; error: string };
134
+
135
+ function handleResult<T>(result: Result<T>) {
136
+ if (result.success) {
137
+ // TypeScript knows result.data exists here
138
+ return result.data;
139
+ } else {
140
+ // TypeScript knows result.error exists here
141
+ throw new Error(result.error);
142
+ }
143
+ }
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Null & Undefined Handling
149
+
150
+ ### Optional Chaining
151
+
152
+ ```typescript
153
+ interface User {
154
+ profile?: {
155
+ avatar?: string;
156
+ };
157
+ }
158
+
159
+ // CORRECT - Optional chaining
160
+ const avatar = user.profile?.avatar ?? '/default.png';
161
+ ```
162
+
163
+ ### Nullish Coalescing
164
+
165
+ ```typescript
166
+ // WRONG - || treats 0, '', false as falsy
167
+ const count = input || 10;
168
+
169
+ // CORRECT - ?? only treats null/undefined as nullish
170
+ const count = input ?? 10;
171
+ ```
172
+
173
+ ### Type Guards
174
+
175
+ ```typescript
176
+ // Custom type guard
177
+ function isUser(value: unknown): value is User {
178
+ return typeof value === 'object' && value !== null && 'id' in value && 'email' in value;
179
+ }
180
+
181
+ // Usage
182
+ function processData(data: unknown) {
183
+ if (isUser(data)) {
184
+ // TypeScript knows data is User here
185
+ console.log(data.email);
186
+ }
187
+ }
188
+ ```
189
+
190
+ ### Assertion Functions
191
+
192
+ ```typescript
193
+ function assertDefined<T>(value: T | undefined | null, message: string): asserts value is T {
194
+ if (value === undefined || value === null) {
195
+ throw new Error(message);
196
+ }
197
+ }
198
+
199
+ // Usage
200
+ const user = await getUser(id);
201
+ assertDefined(user, `User ${id} not found`);
202
+ // user is guaranteed to be defined after this
203
+ console.log(user.name);
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Generic Patterns
209
+
210
+ ### Constrained Generics
211
+
212
+ ```typescript
213
+ // Ensure T has an id property
214
+ function findById<T extends { id: string }>(items: T[], id: string): T | undefined {
215
+ return items.find((item) => item.id === id);
216
+ }
217
+
218
+ // Works with any type that has id
219
+ interface User {
220
+ id: string;
221
+ name: string;
222
+ }
223
+ interface Post {
224
+ id: string;
225
+ title: string;
226
+ }
227
+
228
+ findById(users, '123'); // T is User
229
+ findById(posts, '456'); // T is Post
230
+ ```
231
+
232
+ ### Infer Return Type
233
+
234
+ ```typescript
235
+ // Infer return type from callback
236
+ function createFetcher<T>(fetcher: () => Promise<T>) {
237
+ return {
238
+ fetch: fetcher,
239
+ refetch: () => fetcher(),
240
+ };
241
+ }
242
+
243
+ // T is automatically inferred
244
+ const userFetcher = createFetcher(async () => {
245
+ const res = await fetch('/api/user');
246
+ return res.json() as Promise<User>;
247
+ });
248
+ // userFetcher.fetch() returns Promise<User>
249
+ ```
250
+
251
+ ### Mapped Types
252
+
253
+ ```typescript
254
+ // Make all properties optional
255
+ type Partial<T> = {
256
+ [P in keyof T]?: T[P];
257
+ };
258
+
259
+ // Make all properties readonly
260
+ type Readonly<T> = {
261
+ readonly [P in keyof T]: T[P];
262
+ };
263
+
264
+ // Pick specific properties
265
+ type Pick<T, K extends keyof T> = {
266
+ [P in K]: T[P];
267
+ };
268
+
269
+ // Custom: Make specific properties required
270
+ type RequireFields<T, K extends keyof T> = T & Required<Pick<T, K>>;
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Utility Types
276
+
277
+ ```typescript
278
+ // Exclude null/undefined
279
+ type NonNullable<T> = T extends null | undefined ? never : T;
280
+
281
+ // Extract function return type
282
+ type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
283
+
284
+ // Extract function parameters
285
+ type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
286
+
287
+ // Usage
288
+ type UserSchema = z.infer<typeof userSchema>;
289
+ type ApiResponse = Awaited<ReturnType<typeof fetchUser>>;
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Common Errors & Fixes
295
+
296
+ ### TS2532: Object is possibly 'undefined'
297
+
298
+ ```typescript
299
+ // ERROR
300
+ const name = user.profile.name;
301
+
302
+ // FIX - Optional chaining
303
+ const name = user.profile?.name ?? 'Unknown';
304
+ ```
305
+
306
+ ### TS2339: Property does not exist
307
+
308
+ ```typescript
309
+ // ERROR
310
+ const env = process.env.NODE_ENV;
311
+
312
+ // FIX - Bracket access
313
+ const env = process.env['NODE_ENV'];
314
+ ```
315
+
316
+ ### TS7053: Index signature
317
+
318
+ ```typescript
319
+ // ERROR
320
+ const value = obj[key];
321
+
322
+ // FIX - Type assertion or bracket notation
323
+ const value = (obj as Record<string, unknown>)[key];
324
+ ```
325
+
326
+ ---
327
+
328
+ ## Agent Integration
329
+
330
+ This skill is used by:
331
+
332
+ - **ts-strict-checker** agent
333
+ - **ts-types-analyzer** agent
334
+ - **type-error-resolver** agent
335
+ - **quality-checker** for typecheck validation
336
+
337
+ ---
338
+
339
+ ## Commands
340
+
341
+ ```bash
342
+ # Type check
343
+ bun run typecheck
344
+ bunx tsc --noEmit
345
+
346
+ # Check specific file
347
+ bunx tsc --noEmit path/to/file.ts
348
+
349
+ # Generate types
350
+ bunx tsc --declaration --emitDeclarationOnly
351
+ ```
352
+
353
+ ---
354
+
355
+ ## FORBIDDEN
356
+
357
+ 1. **`any` type** - Use `unknown` instead
358
+ 2. **Non-null assertion without certainty** - Check first
359
+ 3. **Type assertion to hide errors** - Fix the actual issue
360
+ 4. **Ignoring strict errors** - Always fix properly
361
+ 5. **`@ts-ignore` without explanation** - Use `@ts-expect-error` with comment
362
+
363
+ ---
364
+
365
+ ## Version
366
+
367
+ - **v1.0.0** - Initial implementation based on TypeScript 5.x strict patterns