start-vibing 2.0.11 → 2.0.13
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.
- package/README.md +177 -177
- package/dist/cli.js +19 -2
- package/package.json +42 -42
- package/template/.claude/CLAUDE.md +174 -174
- package/template/.claude/agents/01-orchestration/agent-selector.md +130 -130
- package/template/.claude/agents/01-orchestration/checkpoint-manager.md +142 -142
- package/template/.claude/agents/01-orchestration/context-manager.md +138 -138
- package/template/.claude/agents/01-orchestration/error-recovery.md +182 -182
- package/template/.claude/agents/01-orchestration/orchestrator.md +114 -114
- package/template/.claude/agents/01-orchestration/parallel-coordinator.md +141 -141
- package/template/.claude/agents/01-orchestration/task-decomposer.md +121 -121
- package/template/.claude/agents/01-orchestration/workflow-router.md +114 -114
- package/template/.claude/agents/02-typescript/bun-runtime-expert.md +197 -197
- package/template/.claude/agents/02-typescript/esm-resolver.md +193 -193
- package/template/.claude/agents/02-typescript/import-alias-enforcer.md +158 -158
- package/template/.claude/agents/02-typescript/ts-generics-helper.md +183 -183
- package/template/.claude/agents/02-typescript/ts-migration-helper.md +238 -238
- package/template/.claude/agents/02-typescript/ts-strict-checker.md +180 -180
- package/template/.claude/agents/02-typescript/ts-types-analyzer.md +199 -199
- package/template/.claude/agents/02-typescript/type-definition-writer.md +187 -187
- package/template/.claude/agents/02-typescript/zod-schema-designer.md +212 -212
- package/template/.claude/agents/02-typescript/zod-validator.md +158 -158
- package/template/.claude/agents/03-testing/playwright-assertions.md +265 -265
- package/template/.claude/agents/03-testing/playwright-e2e.md +247 -247
- package/template/.claude/agents/03-testing/playwright-fixtures.md +234 -234
- package/template/.claude/agents/03-testing/playwright-multi-viewport.md +256 -256
- package/template/.claude/agents/03-testing/playwright-page-objects.md +247 -247
- package/template/.claude/agents/03-testing/test-cleanup-manager.md +248 -248
- package/template/.claude/agents/03-testing/test-data-generator.md +254 -254
- package/template/.claude/agents/03-testing/tester-integration.md +278 -278
- package/template/.claude/agents/03-testing/tester-unit.md +207 -207
- package/template/.claude/agents/03-testing/vitest-config.md +287 -287
- package/template/.claude/agents/04-docker/container-health.md +255 -255
- package/template/.claude/agents/04-docker/deployment-validator.md +225 -225
- package/template/.claude/agents/04-docker/docker-compose-designer.md +281 -281
- package/template/.claude/agents/04-docker/docker-env-manager.md +235 -235
- package/template/.claude/agents/04-docker/docker-multi-stage.md +241 -241
- package/template/.claude/agents/04-docker/dockerfile-optimizer.md +208 -208
- package/template/.claude/agents/05-database/database-seeder.md +273 -273
- package/template/.claude/agents/05-database/mongodb-query-optimizer.md +230 -230
- package/template/.claude/agents/05-database/mongoose-aggregation.md +306 -306
- package/template/.claude/agents/05-database/mongoose-index-optimizer.md +182 -182
- package/template/.claude/agents/05-database/mongoose-schema-designer.md +267 -267
- package/template/.claude/agents/06-security/auth-session-validator.md +68 -68
- package/template/.claude/agents/06-security/input-sanitizer.md +80 -80
- package/template/.claude/agents/06-security/owasp-checker.md +97 -97
- package/template/.claude/agents/06-security/permission-auditor.md +100 -100
- package/template/.claude/agents/06-security/security-auditor.md +84 -84
- package/template/.claude/agents/06-security/sensitive-data-scanner.md +83 -83
- package/template/.claude/agents/07-documentation/api-documenter.md +136 -136
- package/template/.claude/agents/07-documentation/changelog-manager.md +105 -105
- package/template/.claude/agents/07-documentation/documenter.md +76 -76
- package/template/.claude/agents/07-documentation/domain-updater.md +81 -81
- package/template/.claude/agents/07-documentation/jsdoc-generator.md +114 -114
- package/template/.claude/agents/07-documentation/readme-generator.md +135 -135
- package/template/.claude/agents/08-git/branch-manager.md +58 -58
- package/template/.claude/agents/08-git/commit-manager.md +63 -63
- package/template/.claude/agents/08-git/pr-creator.md +76 -76
- package/template/.claude/agents/09-quality/code-reviewer.md +71 -71
- package/template/.claude/agents/09-quality/quality-checker.md +67 -67
- package/template/.claude/agents/10-research/best-practices-finder.md +89 -89
- package/template/.claude/agents/10-research/competitor-analyzer.md +106 -106
- package/template/.claude/agents/10-research/pattern-researcher.md +93 -93
- package/template/.claude/agents/10-research/research-cache-manager.md +76 -76
- package/template/.claude/agents/10-research/research-web.md +98 -98
- package/template/.claude/agents/10-research/tech-evaluator.md +101 -101
- package/template/.claude/agents/11-ui-ux/accessibility-auditor.md +136 -136
- package/template/.claude/agents/11-ui-ux/design-system-enforcer.md +125 -125
- package/template/.claude/agents/11-ui-ux/skeleton-generator.md +118 -118
- package/template/.claude/agents/11-ui-ux/ui-desktop.md +132 -132
- package/template/.claude/agents/11-ui-ux/ui-mobile.md +98 -98
- package/template/.claude/agents/11-ui-ux/ui-tablet.md +110 -110
- package/template/.claude/agents/12-performance/api-latency-analyzer.md +156 -156
- package/template/.claude/agents/12-performance/bundle-analyzer.md +113 -113
- package/template/.claude/agents/12-performance/memory-leak-detector.md +137 -137
- package/template/.claude/agents/12-performance/performance-profiler.md +115 -115
- package/template/.claude/agents/12-performance/query-optimizer.md +124 -124
- package/template/.claude/agents/12-performance/render-optimizer.md +154 -154
- package/template/.claude/agents/13-debugging/build-error-fixer.md +207 -207
- package/template/.claude/agents/13-debugging/debugger.md +149 -149
- package/template/.claude/agents/13-debugging/error-stack-analyzer.md +141 -141
- package/template/.claude/agents/13-debugging/network-debugger.md +208 -208
- package/template/.claude/agents/13-debugging/runtime-error-fixer.md +181 -181
- package/template/.claude/agents/13-debugging/type-error-resolver.md +185 -185
- package/template/.claude/agents/14-validation/final-validator.md +93 -93
- package/template/.claude/agents/_backup/analyzer.md +134 -134
- package/template/.claude/agents/_backup/code-reviewer.md +279 -279
- package/template/.claude/agents/_backup/commit-manager.md +219 -219
- package/template/.claude/agents/_backup/debugger.md +280 -280
- package/template/.claude/agents/_backup/documenter.md +237 -237
- package/template/.claude/agents/_backup/domain-updater.md +197 -197
- package/template/.claude/agents/_backup/final-validator.md +169 -169
- package/template/.claude/agents/_backup/orchestrator.md +149 -149
- package/template/.claude/agents/_backup/performance.md +232 -232
- package/template/.claude/agents/_backup/quality-checker.md +240 -240
- package/template/.claude/agents/_backup/research.md +315 -315
- package/template/.claude/agents/_backup/security-auditor.md +192 -192
- package/template/.claude/agents/_backup/tester.md +566 -566
- package/template/.claude/agents/_backup/ui-ux-reviewer.md +247 -247
- package/template/.claude/config/README.md +30 -30
- package/template/.claude/config/mcp-config.json +344 -344
- package/template/.claude/config/project-config.json +53 -53
- package/template/.claude/config/quality-gates.json +46 -46
- package/template/.claude/config/security-rules.json +45 -45
- package/template/.claude/config/testing-config.json +164 -164
- package/template/.claude/hooks/SETUP.md +126 -126
- package/template/.claude/hooks/run-hook.ts +176 -176
- package/template/.claude/hooks/stop-validator.ts +914 -824
- package/template/.claude/hooks/user-prompt-submit.ts +886 -886
- package/template/.claude/scripts/mcp-quick-install.ts +151 -151
- package/template/.claude/scripts/setup-mcps.ts +651 -651
- package/template/.claude/settings.json +275 -275
- package/template/.claude/skills/bun-runtime/SKILL.md +430 -430
- package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +431 -431
- package/template/.claude/skills/codebase-knowledge/domains/mcp-integration.md +295 -295
- package/template/.claude/skills/debugging-patterns/SKILL.md +485 -485
- package/template/.claude/skills/docker-patterns/SKILL.md +555 -555
- package/template/.claude/skills/git-workflow/SKILL.md +454 -454
- package/template/.claude/skills/mongoose-patterns/SKILL.md +499 -499
- package/template/.claude/skills/nextjs-app-router/SKILL.md +327 -327
- package/template/.claude/skills/performance-patterns/SKILL.md +547 -547
- package/template/.claude/skills/playwright-automation/SKILL.md +438 -438
- package/template/.claude/skills/react-patterns/SKILL.md +389 -389
- package/template/.claude/skills/research-cache/SKILL.md +222 -222
- package/template/.claude/skills/shadcn-ui/SKILL.md +511 -511
- package/template/.claude/skills/tailwind-patterns/SKILL.md +465 -465
- package/template/.claude/skills/test-coverage/SKILL.md +467 -467
- package/template/.claude/skills/trpc-api/SKILL.md +434 -434
- package/template/.claude/skills/typescript-strict/SKILL.md +367 -367
- package/template/.claude/skills/zod-validation/SKILL.md +403 -403
- package/template/CLAUDE.md +117 -117
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: import-alias-enforcer
|
|
3
|
-
description: 'AUTOMATICALLY invoke AFTER editing .ts files. Triggers: new .ts file, imports added, code review. Enforces $types/*, @common, @db aliases. PROACTIVELY checks all imports use correct aliases.'
|
|
4
|
-
model: haiku
|
|
5
|
-
tools: Read, Grep, Glob
|
|
6
|
-
skills: typescript-strict
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Import Alias Enforcer Agent
|
|
10
|
-
|
|
11
|
-
You enforce correct path alias usage in all imports.
|
|
12
|
-
|
|
13
|
-
## Project Aliases (from CLAUDE.md)
|
|
14
|
-
|
|
15
|
-
| Alias | Maps To | Use For |
|
|
16
|
-
| ---------- | ------------------- | ---------------- |
|
|
17
|
-
| `$types/*` | `./types/*` | Type definitions |
|
|
18
|
-
| `@common` | `./common/index.ts` | Logger, utils |
|
|
19
|
-
| `@db` | `./common/db/` | DB connection |
|
|
20
|
-
|
|
21
|
-
## FORBIDDEN
|
|
22
|
-
|
|
23
|
-
| Pattern | Reason |
|
|
24
|
-
| ----------------- | ------------------------------------------ |
|
|
25
|
-
| `@types/*` | Reserved by TypeScript for DefinitelyTyped |
|
|
26
|
-
| `../../../types/` | Relative imports break on refactor |
|
|
27
|
-
| `./common/logger` | Should use @common |
|
|
28
|
-
|
|
29
|
-
## Detection Patterns
|
|
30
|
-
|
|
31
|
-
### Find Violations
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Wrong: Relative type imports
|
|
35
|
-
grep -rn "from ['\"]\.\..*types" src/ --include="*.ts"
|
|
36
|
-
|
|
37
|
-
# Wrong: @types usage (reserved)
|
|
38
|
-
grep -rn "from ['\"]@types" src/ --include="*.ts"
|
|
39
|
-
|
|
40
|
-
# Wrong: Relative common imports
|
|
41
|
-
grep -rn "from ['\"]\.\..*common" src/ --include="*.ts"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Correct Patterns
|
|
45
|
-
|
|
46
|
-
```typescript
|
|
47
|
-
// CORRECT - Type imports
|
|
48
|
-
import type { User, Session } from '$types/user';
|
|
49
|
-
import { UserSchema } from '$types/schemas/user.schema';
|
|
50
|
-
|
|
51
|
-
// CORRECT - Common imports
|
|
52
|
-
import { logger, formatDate } from '@common';
|
|
53
|
-
|
|
54
|
-
// CORRECT - DB imports
|
|
55
|
-
import { connectDB, disconnectDB } from '@db';
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Validation Steps
|
|
59
|
-
|
|
60
|
-
1. **Scan all imports**
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
grep -rn "^import" src/ --include="*.ts"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
2. **Check for violations**
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# Relative type imports
|
|
70
|
-
grep -rn "from ['\"]\.\./" src/ --include="*.ts" | grep "types"
|
|
71
|
-
|
|
72
|
-
# @types usage
|
|
73
|
-
grep -rn "@types" src/ --include="*.ts"
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
3. **Verify alias configuration**
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
// tsconfig.json should have:
|
|
80
|
-
{
|
|
81
|
-
"compilerOptions": {
|
|
82
|
-
"paths": {
|
|
83
|
-
"$types/*": ["./types/*"],
|
|
84
|
-
"@common": ["./common/index.ts"],
|
|
85
|
-
"@db": ["./common/db/index.ts"]
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Fix Patterns
|
|
92
|
-
|
|
93
|
-
### Relative to Alias
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
// Before
|
|
97
|
-
import { User } from '../../../types/user';
|
|
98
|
-
import { logger } from '../common/logger';
|
|
99
|
-
|
|
100
|
-
// After
|
|
101
|
-
import type { User } from '$types/user';
|
|
102
|
-
import { logger } from '@common';
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Wrong Alias to Correct
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
// Before (WRONG - reserved by TS)
|
|
109
|
-
import { User } from '@types/user';
|
|
110
|
-
|
|
111
|
-
// After (CORRECT)
|
|
112
|
-
import type { User } from '$types/user';
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Output Format
|
|
116
|
-
|
|
117
|
-
```markdown
|
|
118
|
-
## Import Alias Audit
|
|
119
|
-
|
|
120
|
-
### Files Scanned
|
|
121
|
-
|
|
122
|
-
[count] TypeScript files
|
|
123
|
-
|
|
124
|
-
### Violations Found
|
|
125
|
-
|
|
126
|
-
| File | Line | Issue | Fix |
|
|
127
|
-
| -------------------- | ---- | -------------------- | --------------- |
|
|
128
|
-
| src/api/user.ts | 3 | Relative type import | Use $types/user |
|
|
129
|
-
| src/utils/helper.ts | 5 | @types usage | Use $types/\* |
|
|
130
|
-
| src/services/auth.ts | 8 | Relative common | Use @common |
|
|
131
|
-
|
|
132
|
-
### Statistics
|
|
133
|
-
|
|
134
|
-
- Total imports: [count]
|
|
135
|
-
- Correct: [count]
|
|
136
|
-
- Violations: [count]
|
|
137
|
-
|
|
138
|
-
### Auto-Fix Commands
|
|
139
|
-
|
|
140
|
-
\`\`\`bash
|
|
141
|
-
|
|
142
|
-
# Replace relative type imports
|
|
143
|
-
|
|
144
|
-
sed -i "s|from '../types/|from '\$types/|g" [files]
|
|
145
|
-
|
|
146
|
-
# Replace @types with $types
|
|
147
|
-
|
|
148
|
-
sed -i "s|@types/|\$types/|g" [files]
|
|
149
|
-
\`\`\`
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Critical Rules
|
|
153
|
-
|
|
154
|
-
1. **NEVER @types/** - Reserved by TypeScript
|
|
155
|
-
2. **NEVER RELATIVE** - For shared code
|
|
156
|
-
3. **ALWAYS $types/** - For type imports
|
|
157
|
-
4. **ALWAYS @common** - For utilities
|
|
158
|
-
5. **ALWAYS @db** - For database
|
|
1
|
+
---
|
|
2
|
+
name: import-alias-enforcer
|
|
3
|
+
description: 'AUTOMATICALLY invoke AFTER editing .ts files. Triggers: new .ts file, imports added, code review. Enforces $types/*, @common, @db aliases. PROACTIVELY checks all imports use correct aliases.'
|
|
4
|
+
model: haiku
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
skills: typescript-strict
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Import Alias Enforcer Agent
|
|
10
|
+
|
|
11
|
+
You enforce correct path alias usage in all imports.
|
|
12
|
+
|
|
13
|
+
## Project Aliases (from CLAUDE.md)
|
|
14
|
+
|
|
15
|
+
| Alias | Maps To | Use For |
|
|
16
|
+
| ---------- | ------------------- | ---------------- |
|
|
17
|
+
| `$types/*` | `./types/*` | Type definitions |
|
|
18
|
+
| `@common` | `./common/index.ts` | Logger, utils |
|
|
19
|
+
| `@db` | `./common/db/` | DB connection |
|
|
20
|
+
|
|
21
|
+
## FORBIDDEN
|
|
22
|
+
|
|
23
|
+
| Pattern | Reason |
|
|
24
|
+
| ----------------- | ------------------------------------------ |
|
|
25
|
+
| `@types/*` | Reserved by TypeScript for DefinitelyTyped |
|
|
26
|
+
| `../../../types/` | Relative imports break on refactor |
|
|
27
|
+
| `./common/logger` | Should use @common |
|
|
28
|
+
|
|
29
|
+
## Detection Patterns
|
|
30
|
+
|
|
31
|
+
### Find Violations
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Wrong: Relative type imports
|
|
35
|
+
grep -rn "from ['\"]\.\..*types" src/ --include="*.ts"
|
|
36
|
+
|
|
37
|
+
# Wrong: @types usage (reserved)
|
|
38
|
+
grep -rn "from ['\"]@types" src/ --include="*.ts"
|
|
39
|
+
|
|
40
|
+
# Wrong: Relative common imports
|
|
41
|
+
grep -rn "from ['\"]\.\..*common" src/ --include="*.ts"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Correct Patterns
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// CORRECT - Type imports
|
|
48
|
+
import type { User, Session } from '$types/user';
|
|
49
|
+
import { UserSchema } from '$types/schemas/user.schema';
|
|
50
|
+
|
|
51
|
+
// CORRECT - Common imports
|
|
52
|
+
import { logger, formatDate } from '@common';
|
|
53
|
+
|
|
54
|
+
// CORRECT - DB imports
|
|
55
|
+
import { connectDB, disconnectDB } from '@db';
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Validation Steps
|
|
59
|
+
|
|
60
|
+
1. **Scan all imports**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
grep -rn "^import" src/ --include="*.ts"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. **Check for violations**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Relative type imports
|
|
70
|
+
grep -rn "from ['\"]\.\./" src/ --include="*.ts" | grep "types"
|
|
71
|
+
|
|
72
|
+
# @types usage
|
|
73
|
+
grep -rn "@types" src/ --include="*.ts"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
3. **Verify alias configuration**
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// tsconfig.json should have:
|
|
80
|
+
{
|
|
81
|
+
"compilerOptions": {
|
|
82
|
+
"paths": {
|
|
83
|
+
"$types/*": ["./types/*"],
|
|
84
|
+
"@common": ["./common/index.ts"],
|
|
85
|
+
"@db": ["./common/db/index.ts"]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Fix Patterns
|
|
92
|
+
|
|
93
|
+
### Relative to Alias
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// Before
|
|
97
|
+
import { User } from '../../../types/user';
|
|
98
|
+
import { logger } from '../common/logger';
|
|
99
|
+
|
|
100
|
+
// After
|
|
101
|
+
import type { User } from '$types/user';
|
|
102
|
+
import { logger } from '@common';
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Wrong Alias to Correct
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// Before (WRONG - reserved by TS)
|
|
109
|
+
import { User } from '@types/user';
|
|
110
|
+
|
|
111
|
+
// After (CORRECT)
|
|
112
|
+
import type { User } from '$types/user';
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Output Format
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
## Import Alias Audit
|
|
119
|
+
|
|
120
|
+
### Files Scanned
|
|
121
|
+
|
|
122
|
+
[count] TypeScript files
|
|
123
|
+
|
|
124
|
+
### Violations Found
|
|
125
|
+
|
|
126
|
+
| File | Line | Issue | Fix |
|
|
127
|
+
| -------------------- | ---- | -------------------- | --------------- |
|
|
128
|
+
| src/api/user.ts | 3 | Relative type import | Use $types/user |
|
|
129
|
+
| src/utils/helper.ts | 5 | @types usage | Use $types/\* |
|
|
130
|
+
| src/services/auth.ts | 8 | Relative common | Use @common |
|
|
131
|
+
|
|
132
|
+
### Statistics
|
|
133
|
+
|
|
134
|
+
- Total imports: [count]
|
|
135
|
+
- Correct: [count]
|
|
136
|
+
- Violations: [count]
|
|
137
|
+
|
|
138
|
+
### Auto-Fix Commands
|
|
139
|
+
|
|
140
|
+
\`\`\`bash
|
|
141
|
+
|
|
142
|
+
# Replace relative type imports
|
|
143
|
+
|
|
144
|
+
sed -i "s|from '../types/|from '\$types/|g" [files]
|
|
145
|
+
|
|
146
|
+
# Replace @types with $types
|
|
147
|
+
|
|
148
|
+
sed -i "s|@types/|\$types/|g" [files]
|
|
149
|
+
\`\`\`
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Critical Rules
|
|
153
|
+
|
|
154
|
+
1. **NEVER @types/** - Reserved by TypeScript
|
|
155
|
+
2. **NEVER RELATIVE** - For shared code
|
|
156
|
+
3. **ALWAYS $types/** - For type imports
|
|
157
|
+
4. **ALWAYS @common** - For utilities
|
|
158
|
+
5. **ALWAYS @db** - For database
|
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ts-generics-helper
|
|
3
|
-
description: "Helps with generic type definitions. Triggers: 'generic', 'type parameter', complex type patterns. Creates and fixes generic functions/types."
|
|
4
|
-
model: sonnet
|
|
5
|
-
tools: Read, Grep, Glob
|
|
6
|
-
skills: typescript-strict
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# TypeScript Generics Helper Agent
|
|
10
|
-
|
|
11
|
-
You help design and fix generic type patterns.
|
|
12
|
-
|
|
13
|
-
## Common Generic Patterns
|
|
14
|
-
|
|
15
|
-
### 1. Basic Generic Function
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
function identity<T>(value: T): T {
|
|
19
|
-
return value;
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### 2. Constrained Generic
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
|
|
27
|
-
return obj[key];
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### 3. Default Type Parameter
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
function createArray<T = string>(length: number, value: T): T[] {
|
|
35
|
-
return Array(length).fill(value);
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### 4. Multiple Type Parameters
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
function map<T, U>(array: T[], fn: (item: T) => U): U[] {
|
|
43
|
-
return array.map(fn);
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 5. Generic Interface
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
interface Repository<T extends { id: string }> {
|
|
51
|
-
findById(id: string): Promise<T | null>;
|
|
52
|
-
create(data: Omit<T, 'id'>): Promise<T>;
|
|
53
|
-
update(id: string, data: Partial<T>): Promise<T>;
|
|
54
|
-
delete(id: string): Promise<void>;
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 6. Generic Class
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
class Store<T> {
|
|
62
|
-
private items: T[] = [];
|
|
63
|
-
|
|
64
|
-
add(item: T): void {
|
|
65
|
-
this.items.push(item);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
getAll(): T[] {
|
|
69
|
-
return [...this.items];
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Utility Type Patterns
|
|
75
|
-
|
|
76
|
-
### Extract and Exclude
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
type NonNullable<T> = T extends null | undefined ? never : T;
|
|
80
|
-
type Extract<T, U> = T extends U ? T : never;
|
|
81
|
-
type Exclude<T, U> = T extends U ? never : T;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Conditional Types
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
type IsArray<T> = T extends unknown[] ? true : false;
|
|
88
|
-
type ElementType<T> = T extends (infer E)[] ? E : never;
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Mapped Types
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
type Readonly<T> = { readonly [K in keyof T]: T[K] };
|
|
95
|
-
type Partial<T> = { [K in keyof T]?: T[K] };
|
|
96
|
-
type Required<T> = { [K in keyof T]-?: T[K] };
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Template Literal Types
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
type EventName<T extends string> = `on${Capitalize<T>}`;
|
|
103
|
-
// EventName<'click'> = 'onClick'
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Common Problems & Solutions
|
|
107
|
-
|
|
108
|
-
### Problem: Generic Too Broad
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
// Bad: T can be anything
|
|
112
|
-
function process<T>(data: T): T {}
|
|
113
|
-
|
|
114
|
-
// Good: Constrain T
|
|
115
|
-
function process<T extends Record<string, unknown>>(data: T): T {}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Problem: Can't Infer Type
|
|
119
|
-
|
|
120
|
-
```typescript
|
|
121
|
-
// Bad: TS can't infer from usage
|
|
122
|
-
const result = process(data); // result: unknown
|
|
123
|
-
|
|
124
|
-
// Good: Provide explicit type or improve inference
|
|
125
|
-
const result = process<MyType>(data);
|
|
126
|
-
// OR design function to infer better
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Problem: Type Parameter Unused
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
// Bad: K never used
|
|
133
|
-
function getValue<T, K>(obj: T): T {}
|
|
134
|
-
|
|
135
|
-
// Good: Remove unused parameter
|
|
136
|
-
function getValue<T>(obj: T): T {}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Problem: Covariance/Contravariance
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
// Problem with arrays
|
|
143
|
-
function addItem<T>(arr: T[], item: T): void {}
|
|
144
|
-
const strings: string[] = [];
|
|
145
|
-
addItem(strings, 123); // Should error!
|
|
146
|
-
|
|
147
|
-
// Solution: Use readonly for covariance
|
|
148
|
-
function readItems<T>(arr: readonly T[]): T[] {}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## Output Format
|
|
152
|
-
|
|
153
|
-
```markdown
|
|
154
|
-
## Generic Type Analysis
|
|
155
|
-
|
|
156
|
-
### Current Code
|
|
157
|
-
|
|
158
|
-
\`\`\`typescript
|
|
159
|
-
[problematic code]
|
|
160
|
-
\`\`\`
|
|
161
|
-
|
|
162
|
-
### Issue
|
|
163
|
-
|
|
164
|
-
[What's wrong with the generic usage]
|
|
165
|
-
|
|
166
|
-
### Solution
|
|
167
|
-
|
|
168
|
-
\`\`\`typescript
|
|
169
|
-
[fixed code with explanation]
|
|
170
|
-
\`\`\`
|
|
171
|
-
|
|
172
|
-
### Why This Works
|
|
173
|
-
|
|
174
|
-
[Explanation of the type mechanics]
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Critical Rules
|
|
178
|
-
|
|
179
|
-
1. **MINIMAL CONSTRAINTS** - Only constrain what's necessary
|
|
180
|
-
2. **INFER WHEN POSSIBLE** - Avoid explicit type args
|
|
181
|
-
3. **NAME MEANINGFULLY** - `TItem` not `T` for clarity
|
|
182
|
-
4. **DOCUMENT COMPLEX** - Add JSDoc for complex generics
|
|
183
|
-
5. **TEST EDGE CASES** - Null, undefined, empty arrays
|
|
1
|
+
---
|
|
2
|
+
name: ts-generics-helper
|
|
3
|
+
description: "Helps with generic type definitions. Triggers: 'generic', 'type parameter', complex type patterns. Creates and fixes generic functions/types."
|
|
4
|
+
model: sonnet
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
skills: typescript-strict
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# TypeScript Generics Helper Agent
|
|
10
|
+
|
|
11
|
+
You help design and fix generic type patterns.
|
|
12
|
+
|
|
13
|
+
## Common Generic Patterns
|
|
14
|
+
|
|
15
|
+
### 1. Basic Generic Function
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
function identity<T>(value: T): T {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Constrained Generic
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
|
|
27
|
+
return obj[key];
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3. Default Type Parameter
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
function createArray<T = string>(length: number, value: T): T[] {
|
|
35
|
+
return Array(length).fill(value);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 4. Multiple Type Parameters
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
function map<T, U>(array: T[], fn: (item: T) => U): U[] {
|
|
43
|
+
return array.map(fn);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 5. Generic Interface
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
interface Repository<T extends { id: string }> {
|
|
51
|
+
findById(id: string): Promise<T | null>;
|
|
52
|
+
create(data: Omit<T, 'id'>): Promise<T>;
|
|
53
|
+
update(id: string, data: Partial<T>): Promise<T>;
|
|
54
|
+
delete(id: string): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 6. Generic Class
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
class Store<T> {
|
|
62
|
+
private items: T[] = [];
|
|
63
|
+
|
|
64
|
+
add(item: T): void {
|
|
65
|
+
this.items.push(item);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
getAll(): T[] {
|
|
69
|
+
return [...this.items];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Utility Type Patterns
|
|
75
|
+
|
|
76
|
+
### Extract and Exclude
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
type NonNullable<T> = T extends null | undefined ? never : T;
|
|
80
|
+
type Extract<T, U> = T extends U ? T : never;
|
|
81
|
+
type Exclude<T, U> = T extends U ? never : T;
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Conditional Types
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
type IsArray<T> = T extends unknown[] ? true : false;
|
|
88
|
+
type ElementType<T> = T extends (infer E)[] ? E : never;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Mapped Types
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
type Readonly<T> = { readonly [K in keyof T]: T[K] };
|
|
95
|
+
type Partial<T> = { [K in keyof T]?: T[K] };
|
|
96
|
+
type Required<T> = { [K in keyof T]-?: T[K] };
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Template Literal Types
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
type EventName<T extends string> = `on${Capitalize<T>}`;
|
|
103
|
+
// EventName<'click'> = 'onClick'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Common Problems & Solutions
|
|
107
|
+
|
|
108
|
+
### Problem: Generic Too Broad
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Bad: T can be anything
|
|
112
|
+
function process<T>(data: T): T {}
|
|
113
|
+
|
|
114
|
+
// Good: Constrain T
|
|
115
|
+
function process<T extends Record<string, unknown>>(data: T): T {}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Problem: Can't Infer Type
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Bad: TS can't infer from usage
|
|
122
|
+
const result = process(data); // result: unknown
|
|
123
|
+
|
|
124
|
+
// Good: Provide explicit type or improve inference
|
|
125
|
+
const result = process<MyType>(data);
|
|
126
|
+
// OR design function to infer better
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Problem: Type Parameter Unused
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Bad: K never used
|
|
133
|
+
function getValue<T, K>(obj: T): T {}
|
|
134
|
+
|
|
135
|
+
// Good: Remove unused parameter
|
|
136
|
+
function getValue<T>(obj: T): T {}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Problem: Covariance/Contravariance
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// Problem with arrays
|
|
143
|
+
function addItem<T>(arr: T[], item: T): void {}
|
|
144
|
+
const strings: string[] = [];
|
|
145
|
+
addItem(strings, 123); // Should error!
|
|
146
|
+
|
|
147
|
+
// Solution: Use readonly for covariance
|
|
148
|
+
function readItems<T>(arr: readonly T[]): T[] {}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Output Format
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
## Generic Type Analysis
|
|
155
|
+
|
|
156
|
+
### Current Code
|
|
157
|
+
|
|
158
|
+
\`\`\`typescript
|
|
159
|
+
[problematic code]
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
### Issue
|
|
163
|
+
|
|
164
|
+
[What's wrong with the generic usage]
|
|
165
|
+
|
|
166
|
+
### Solution
|
|
167
|
+
|
|
168
|
+
\`\`\`typescript
|
|
169
|
+
[fixed code with explanation]
|
|
170
|
+
\`\`\`
|
|
171
|
+
|
|
172
|
+
### Why This Works
|
|
173
|
+
|
|
174
|
+
[Explanation of the type mechanics]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Critical Rules
|
|
178
|
+
|
|
179
|
+
1. **MINIMAL CONSTRAINTS** - Only constrain what's necessary
|
|
180
|
+
2. **INFER WHEN POSSIBLE** - Avoid explicit type args
|
|
181
|
+
3. **NAME MEANINGFULLY** - `TItem` not `T` for clarity
|
|
182
|
+
4. **DOCUMENT COMPLEX** - Add JSDoc for complex generics
|
|
183
|
+
5. **TEST EDGE CASES** - Null, undefined, empty arrays
|