superkit-mcp-server 1.1.4 → 1.2.0

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 (160) hide show
  1. package/ARCHITECTURE.md +102 -102
  2. package/README.md +71 -71
  3. package/SUPERKIT.md +168 -168
  4. package/agents/code-archaeologist.md +106 -106
  5. package/agents/coder.md +90 -90
  6. package/agents/data-engineer.md +28 -28
  7. package/agents/devops-engineer.md +242 -242
  8. package/agents/git-manager.md +203 -203
  9. package/agents/orchestrator.md +420 -420
  10. package/agents/penetration-tester.md +188 -188
  11. package/agents/performance-optimizer.md +187 -187
  12. package/agents/planner.md +270 -270
  13. package/agents/qa-automation-engineer.md +103 -103
  14. package/agents/quant-developer.md +32 -32
  15. package/agents/reviewer.md +100 -100
  16. package/agents/scout.md +222 -222
  17. package/agents/tester.md +274 -274
  18. package/agents/ui-designer.md +208 -208
  19. package/build/tools/todoTools.js +39 -39
  20. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  21. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  22. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  23. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  24. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  25. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  26. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  27. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  28. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  29. package/commands/README.md +122 -122
  30. package/commands/ask.toml +72 -72
  31. package/commands/brainstorm.toml +119 -119
  32. package/commands/chat.toml +73 -73
  33. package/commands/code-preview.toml +37 -37
  34. package/commands/code.toml +28 -28
  35. package/commands/content.toml +200 -200
  36. package/commands/cook.toml +77 -77
  37. package/commands/copywrite.toml +131 -131
  38. package/commands/db.toml +192 -192
  39. package/commands/debug.toml +166 -166
  40. package/commands/design.toml +158 -158
  41. package/commands/dev-rules.toml +14 -14
  42. package/commands/do.toml +117 -117
  43. package/commands/doc-rules.toml +14 -14
  44. package/commands/docs.toml +148 -148
  45. package/commands/fix.toml +440 -440
  46. package/commands/fullstack.toml +175 -175
  47. package/commands/git.toml +235 -235
  48. package/commands/help.toml +84 -84
  49. package/commands/integrate.toml +127 -127
  50. package/commands/journal.toml +136 -136
  51. package/commands/kit-setup.toml +40 -40
  52. package/commands/mcp.toml +183 -183
  53. package/commands/orchestration.toml +15 -15
  54. package/commands/plan.toml +171 -171
  55. package/commands/pm.toml +148 -148
  56. package/commands/pr.toml +50 -50
  57. package/commands/project.toml +32 -32
  58. package/commands/research.toml +117 -117
  59. package/commands/review-pr.toml +63 -63
  60. package/commands/review.toml +190 -190
  61. package/commands/scout-ext.toml +97 -97
  62. package/commands/scout.toml +79 -79
  63. package/commands/screenshot.toml +65 -65
  64. package/commands/session.toml +98 -98
  65. package/commands/skill.toml +384 -384
  66. package/commands/status.toml +22 -22
  67. package/commands/team.toml +56 -56
  68. package/commands/test.toml +164 -164
  69. package/commands/ticket.toml +70 -70
  70. package/commands/use.toml +106 -106
  71. package/commands/video.toml +83 -83
  72. package/commands/watzup.toml +71 -71
  73. package/commands/workflow.toml +14 -14
  74. package/package.json +35 -35
  75. package/skills/meta/README.md +30 -30
  76. package/skills/meta/api-design/SKILL.md +134 -134
  77. package/skills/meta/code-review/SKILL.md +44 -44
  78. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  79. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  80. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  81. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  82. package/skills/meta/compound-docs/SKILL.md +133 -133
  83. package/skills/meta/debug/SKILL.md +40 -40
  84. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  85. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  86. package/skills/meta/docker/SKILL.md +126 -126
  87. package/skills/meta/examples/supabase/SKILL.md +46 -46
  88. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  89. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  90. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  91. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  92. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  93. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  94. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  95. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  96. package/skills/meta/file-todos/SKILL.md +88 -88
  97. package/skills/meta/mobile/SKILL.md +140 -140
  98. package/skills/meta/nextjs/SKILL.md +101 -101
  99. package/skills/meta/performance/SKILL.md +130 -130
  100. package/skills/meta/react-patterns/SKILL.md +83 -83
  101. package/skills/meta/security/SKILL.md +114 -114
  102. package/skills/meta/session-resume/SKILL.md +96 -96
  103. package/skills/meta/tailwind/SKILL.md +139 -139
  104. package/skills/meta/testing/SKILL.md +43 -43
  105. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  106. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  107. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  108. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  109. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  110. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  111. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  112. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  113. package/skills/tech/alpha-vantage/references/options.md +93 -93
  114. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  115. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  116. package/skills/tech/financial-modeling/SKILL.md +18 -18
  117. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  118. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  119. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  120. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  121. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  122. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  123. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  124. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  125. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  126. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  127. package/skills/workflows/README.md +203 -203
  128. package/skills/workflows/adr.md +174 -174
  129. package/skills/workflows/changelog.md +74 -74
  130. package/skills/workflows/compound.md +323 -323
  131. package/skills/workflows/compound_health.md +74 -74
  132. package/skills/workflows/create-agent-skill.md +139 -139
  133. package/skills/workflows/cycle.md +144 -144
  134. package/skills/workflows/deploy-docs.md +84 -84
  135. package/skills/workflows/development-rules.md +42 -42
  136. package/skills/workflows/doc.md +95 -95
  137. package/skills/workflows/documentation-management.md +34 -34
  138. package/skills/workflows/explore.md +146 -146
  139. package/skills/workflows/generate_command.md +106 -106
  140. package/skills/workflows/heal-skill.md +97 -97
  141. package/skills/workflows/housekeeping.md +229 -229
  142. package/skills/workflows/kit-setup.md +102 -102
  143. package/skills/workflows/map-codebase.md +78 -78
  144. package/skills/workflows/orchestration-protocol.md +43 -43
  145. package/skills/workflows/plan-compound.md +439 -439
  146. package/skills/workflows/plan_review.md +269 -269
  147. package/skills/workflows/primary-workflow.md +37 -37
  148. package/skills/workflows/promote_pattern.md +86 -86
  149. package/skills/workflows/release-docs.md +82 -82
  150. package/skills/workflows/report-bug.md +135 -135
  151. package/skills/workflows/reproduce-bug.md +118 -118
  152. package/skills/workflows/resolve_pr.md +133 -133
  153. package/skills/workflows/resolve_todo.md +128 -128
  154. package/skills/workflows/review-compound.md +376 -376
  155. package/skills/workflows/skill-review.md +127 -127
  156. package/skills/workflows/specs.md +257 -257
  157. package/skills/workflows/triage-sprint.md +102 -102
  158. package/skills/workflows/triage.md +152 -152
  159. package/skills/workflows/work.md +399 -399
  160. package/skills/workflows/xcode-test.md +93 -93
package/agents/tester.md CHANGED
@@ -1,274 +1,274 @@
1
- # Tester Agent
2
-
3
- ## Role
4
- Write tests and ensure code quality.
5
-
6
- ## When to Use
7
- - Write unit tests
8
- - Integration tests
9
- - E2E tests
10
- - Test edge cases
11
- - Verify bug fixes
12
-
13
- ## Capabilities
14
-
15
- ### 1. Unit Testing
16
- - Test individual functions
17
- - Mock dependencies
18
- - Cover edge cases
19
- - Assert expected outcomes
20
-
21
- ### 2. Integration Testing
22
- - Test component interactions
23
- - API endpoint tests
24
- - Database integration
25
-
26
- ### 3. E2E Testing
27
- - User flow testing
28
- - Browser automation
29
- - Cross-browser testing
30
-
31
- ### 4. Test Strategy
32
- - Identify test cases
33
- - Prioritize by risk
34
- - Coverage analysis
35
-
36
- ## Test Patterns
37
-
38
- ### Unit Test Structure
39
- ```typescript
40
- describe('UserService', () => {
41
- describe('createUser', () => {
42
- it('should create user with valid data', async () => {
43
- // Arrange
44
- const userData = { name: 'John', email: 'john@test.com' };
45
-
46
- // Act
47
- const result = await userService.createUser(userData);
48
-
49
- // Assert
50
- expect(result.id).toBeDefined();
51
- expect(result.name).toBe('John');
52
- });
53
-
54
- it('should throw error for invalid email', async () => {
55
- // Arrange
56
- const userData = { name: 'John', email: 'invalid' };
57
-
58
- // Act & Assert
59
- await expect(userService.createUser(userData))
60
- .rejects.toThrow('Invalid email');
61
- });
62
- });
63
- });
64
- ```
65
-
66
- ### Mock Pattern
67
- ```typescript
68
- // Mock external service
69
- jest.mock('./emailService');
70
- const mockSendEmail = emailService.send as jest.Mock;
71
- mockSendEmail.mockResolvedValue({ success: true });
72
-
73
- // Verify mock called
74
- expect(mockSendEmail).toHaveBeenCalledWith({
75
- to: 'user@test.com',
76
- subject: 'Welcome'
77
- });
78
- ```
79
-
80
- ## Vitest Patterns
81
-
82
- > This project uses **Vitest** - API similar to Jest but faster.
83
-
84
- ### Basic Vitest Test
85
- ```typescript
86
- import { describe, it, expect, vi, beforeEach } from 'vitest';
87
- import { createUser } from '../user';
88
-
89
- describe('createUser', () => {
90
- it('should create user successfully', async () => {
91
- const user = await createUser({ name: 'John' });
92
- expect(user.id).toBeDefined();
93
- });
94
- });
95
- ```
96
-
97
- ### Vitest Mocking
98
- ```typescript
99
- import { vi } from 'vitest';
100
-
101
- // Mock module
102
- vi.mock('./emailService', () => ({
103
- sendEmail: vi.fn().mockResolvedValue({ success: true })
104
- }));
105
-
106
- // Spy on function
107
- const spy = vi.spyOn(console, 'log');
108
- spy.mockImplementation(() => {});
109
-
110
- // Clear mocks
111
- beforeEach(() => {
112
- vi.clearAllMocks();
113
- });
114
- ```
115
-
116
- ### Vitest vs Jest Cheatsheet
117
- | Jest | Vitest |
118
- |------|--------|
119
- | `jest.fn()` | `vi.fn()` |
120
- | `jest.mock()` | `vi.mock()` |
121
- | `jest.spyOn()` | `vi.spyOn()` |
122
- | `jest.useFakeTimers()` | `vi.useFakeTimers()` |
123
-
124
- ## Snapshot Testing
125
-
126
- ### When to Use Snapshots
127
- ✅ UI component output
128
- ✅ API response structure
129
- ✅ Config file generation
130
- ❌ Frequently changing data
131
- ❌ Random/date values
132
-
133
- ### Snapshot Example
134
- ```typescript
135
- import { describe, it, expect } from 'vitest';
136
-
137
- describe('UserCard', () => {
138
- it('should render correctly', () => {
139
- const html = renderUserCard({ name: 'John', role: 'Admin' });
140
- expect(html).toMatchSnapshot();
141
- });
142
- });
143
- ```
144
-
145
- ### Inline Snapshots
146
- ```typescript
147
- it('should format date', () => {
148
- expect(formatDate('2024-12-15')).toMatchInlineSnapshot(`"Dec 15, 2024"`);
149
- });
150
- ```
151
-
152
- ### Update Snapshots
153
- ```bash
154
- # Update all snapshots
155
- npm test -- -u
156
-
157
- # Update specific test
158
- npm test -- user.test.ts -u
159
- ```
160
-
161
- ## Test Coverage Targets
162
- | Type | Target |
163
- |------|--------|
164
- | Unit | 80%+ |
165
- | Integration | 60%+ |
166
- | E2E | Critical paths |
167
-
168
- ## Fake Timers
169
-
170
- ### Control Time in Tests
171
- ```typescript
172
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
173
-
174
- describe('Timer tests', () => {
175
- beforeEach(() => {
176
- vi.useFakeTimers();
177
- });
178
-
179
- afterEach(() => {
180
- vi.useRealTimers();
181
- });
182
-
183
- it('should call callback after delay', () => {
184
- const callback = vi.fn();
185
- setTimeout(callback, 1000);
186
-
187
- vi.advanceTimersByTime(1000);
188
- expect(callback).toHaveBeenCalled();
189
- });
190
-
191
- it('should work with dates', () => {
192
- vi.setSystemTime(new Date('2024-12-15'));
193
- expect(new Date().toISOString()).toContain('2024-12-15');
194
- });
195
- });
196
- ```
197
-
198
- ## API Mocking with MSW
199
-
200
- ### Mock Service Worker Setup
201
- ```typescript
202
- // mocks/handlers.ts
203
- import { http, HttpResponse } from 'msw';
204
-
205
- export const handlers = [
206
- http.get('/api/users', () => {
207
- return HttpResponse.json([
208
- { id: 1, name: 'John' },
209
- { id: 2, name: 'Jane' }
210
- ]);
211
- }),
212
-
213
- http.post('/api/users', async ({ request }) => {
214
- const body = await request.json();
215
- return HttpResponse.json({ id: 3, ...body }, { status: 201 });
216
- }),
217
- ];
218
- ```
219
-
220
- ### Use in Tests
221
- ```typescript
222
- // vitest.setup.ts
223
- import { setupServer } from 'msw/node';
224
- import { handlers } from './mocks/handlers';
225
-
226
- const server = setupServer(...handlers);
227
-
228
- beforeAll(() => server.listen());
229
- afterEach(() => server.resetHandlers());
230
- afterAll(() => server.close());
231
- ```
232
-
233
- ## Best Practices
234
- 1. AAA pattern: Arrange, Act, Assert
235
- 2. One assertion per test (ideally)
236
- 3. Descriptive test names
237
- 4. Test behavior, not implementation
238
- 5. Don't test external libraries
239
- 6. **Use Vitest for new tests**
240
- 7. **Snapshot for UI components**
241
- 8. **Use MSW for API mocking**
242
- 9. **Fake timers for time-dependent code**
243
-
244
- ## AI Prompting Tips
245
-
246
- When using AI to write tests:
247
-
248
- ```markdown
249
- ## Prompt Template
250
-
251
- "Write unit test for function [function name] in file [path].
252
- - Framework: Vitest
253
- - Mock: [dependencies to mock]
254
- - Cases: [happy path, error cases, edge cases]
255
- - Style: AAA pattern"
256
- ```
257
-
258
- ### Effective Prompt Examples
259
-
260
- ❌ **Bad:** "Write test for user.ts"
261
-
262
- ✅ **Good:** "Write Vitest unit tests for `createUser` function in `src/services/user.ts`. Mock database calls with vi.mock. Cover: valid input, invalid email, duplicate user."
263
-
264
- ### Tips
265
- 1. Specify framework (Vitest/Jest)
266
- 2. List specific test cases
267
- 3. Specify dependencies to mock
268
- 4. Mention AAA pattern if structure needed
269
-
270
- ## Related Agents
271
- - **Coder** - write code with tests
272
- - **Reviewer** - review test quality
273
-
274
-
1
+ # Tester Agent
2
+
3
+ ## Role
4
+ Write tests and ensure code quality.
5
+
6
+ ## When to Use
7
+ - Write unit tests
8
+ - Integration tests
9
+ - E2E tests
10
+ - Test edge cases
11
+ - Verify bug fixes
12
+
13
+ ## Capabilities
14
+
15
+ ### 1. Unit Testing
16
+ - Test individual functions
17
+ - Mock dependencies
18
+ - Cover edge cases
19
+ - Assert expected outcomes
20
+
21
+ ### 2. Integration Testing
22
+ - Test component interactions
23
+ - API endpoint tests
24
+ - Database integration
25
+
26
+ ### 3. E2E Testing
27
+ - User flow testing
28
+ - Browser automation
29
+ - Cross-browser testing
30
+
31
+ ### 4. Test Strategy
32
+ - Identify test cases
33
+ - Prioritize by risk
34
+ - Coverage analysis
35
+
36
+ ## Test Patterns
37
+
38
+ ### Unit Test Structure
39
+ ```typescript
40
+ describe('UserService', () => {
41
+ describe('createUser', () => {
42
+ it('should create user with valid data', async () => {
43
+ // Arrange
44
+ const userData = { name: 'John', email: 'john@test.com' };
45
+
46
+ // Act
47
+ const result = await userService.createUser(userData);
48
+
49
+ // Assert
50
+ expect(result.id).toBeDefined();
51
+ expect(result.name).toBe('John');
52
+ });
53
+
54
+ it('should throw error for invalid email', async () => {
55
+ // Arrange
56
+ const userData = { name: 'John', email: 'invalid' };
57
+
58
+ // Act & Assert
59
+ await expect(userService.createUser(userData))
60
+ .rejects.toThrow('Invalid email');
61
+ });
62
+ });
63
+ });
64
+ ```
65
+
66
+ ### Mock Pattern
67
+ ```typescript
68
+ // Mock external service
69
+ jest.mock('./emailService');
70
+ const mockSendEmail = emailService.send as jest.Mock;
71
+ mockSendEmail.mockResolvedValue({ success: true });
72
+
73
+ // Verify mock called
74
+ expect(mockSendEmail).toHaveBeenCalledWith({
75
+ to: 'user@test.com',
76
+ subject: 'Welcome'
77
+ });
78
+ ```
79
+
80
+ ## Vitest Patterns
81
+
82
+ > This project uses **Vitest** - API similar to Jest but faster.
83
+
84
+ ### Basic Vitest Test
85
+ ```typescript
86
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
87
+ import { createUser } from '../user';
88
+
89
+ describe('createUser', () => {
90
+ it('should create user successfully', async () => {
91
+ const user = await createUser({ name: 'John' });
92
+ expect(user.id).toBeDefined();
93
+ });
94
+ });
95
+ ```
96
+
97
+ ### Vitest Mocking
98
+ ```typescript
99
+ import { vi } from 'vitest';
100
+
101
+ // Mock module
102
+ vi.mock('./emailService', () => ({
103
+ sendEmail: vi.fn().mockResolvedValue({ success: true })
104
+ }));
105
+
106
+ // Spy on function
107
+ const spy = vi.spyOn(console, 'log');
108
+ spy.mockImplementation(() => {});
109
+
110
+ // Clear mocks
111
+ beforeEach(() => {
112
+ vi.clearAllMocks();
113
+ });
114
+ ```
115
+
116
+ ### Vitest vs Jest Cheatsheet
117
+ | Jest | Vitest |
118
+ |------|--------|
119
+ | `jest.fn()` | `vi.fn()` |
120
+ | `jest.mock()` | `vi.mock()` |
121
+ | `jest.spyOn()` | `vi.spyOn()` |
122
+ | `jest.useFakeTimers()` | `vi.useFakeTimers()` |
123
+
124
+ ## Snapshot Testing
125
+
126
+ ### When to Use Snapshots
127
+ ✅ UI component output
128
+ ✅ API response structure
129
+ ✅ Config file generation
130
+ ❌ Frequently changing data
131
+ ❌ Random/date values
132
+
133
+ ### Snapshot Example
134
+ ```typescript
135
+ import { describe, it, expect } from 'vitest';
136
+
137
+ describe('UserCard', () => {
138
+ it('should render correctly', () => {
139
+ const html = renderUserCard({ name: 'John', role: 'Admin' });
140
+ expect(html).toMatchSnapshot();
141
+ });
142
+ });
143
+ ```
144
+
145
+ ### Inline Snapshots
146
+ ```typescript
147
+ it('should format date', () => {
148
+ expect(formatDate('2024-12-15')).toMatchInlineSnapshot(`"Dec 15, 2024"`);
149
+ });
150
+ ```
151
+
152
+ ### Update Snapshots
153
+ ```bash
154
+ # Update all snapshots
155
+ npm test -- -u
156
+
157
+ # Update specific test
158
+ npm test -- user.test.ts -u
159
+ ```
160
+
161
+ ## Test Coverage Targets
162
+ | Type | Target |
163
+ |------|--------|
164
+ | Unit | 80%+ |
165
+ | Integration | 60%+ |
166
+ | E2E | Critical paths |
167
+
168
+ ## Fake Timers
169
+
170
+ ### Control Time in Tests
171
+ ```typescript
172
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
173
+
174
+ describe('Timer tests', () => {
175
+ beforeEach(() => {
176
+ vi.useFakeTimers();
177
+ });
178
+
179
+ afterEach(() => {
180
+ vi.useRealTimers();
181
+ });
182
+
183
+ it('should call callback after delay', () => {
184
+ const callback = vi.fn();
185
+ setTimeout(callback, 1000);
186
+
187
+ vi.advanceTimersByTime(1000);
188
+ expect(callback).toHaveBeenCalled();
189
+ });
190
+
191
+ it('should work with dates', () => {
192
+ vi.setSystemTime(new Date('2024-12-15'));
193
+ expect(new Date().toISOString()).toContain('2024-12-15');
194
+ });
195
+ });
196
+ ```
197
+
198
+ ## API Mocking with MSW
199
+
200
+ ### Mock Service Worker Setup
201
+ ```typescript
202
+ // mocks/handlers.ts
203
+ import { http, HttpResponse } from 'msw';
204
+
205
+ export const handlers = [
206
+ http.get('/api/users', () => {
207
+ return HttpResponse.json([
208
+ { id: 1, name: 'John' },
209
+ { id: 2, name: 'Jane' }
210
+ ]);
211
+ }),
212
+
213
+ http.post('/api/users', async ({ request }) => {
214
+ const body = await request.json();
215
+ return HttpResponse.json({ id: 3, ...body }, { status: 201 });
216
+ }),
217
+ ];
218
+ ```
219
+
220
+ ### Use in Tests
221
+ ```typescript
222
+ // vitest.setup.ts
223
+ import { setupServer } from 'msw/node';
224
+ import { handlers } from './mocks/handlers';
225
+
226
+ const server = setupServer(...handlers);
227
+
228
+ beforeAll(() => server.listen());
229
+ afterEach(() => server.resetHandlers());
230
+ afterAll(() => server.close());
231
+ ```
232
+
233
+ ## Best Practices
234
+ 1. AAA pattern: Arrange, Act, Assert
235
+ 2. One assertion per test (ideally)
236
+ 3. Descriptive test names
237
+ 4. Test behavior, not implementation
238
+ 5. Don't test external libraries
239
+ 6. **Use Vitest for new tests**
240
+ 7. **Snapshot for UI components**
241
+ 8. **Use MSW for API mocking**
242
+ 9. **Fake timers for time-dependent code**
243
+
244
+ ## AI Prompting Tips
245
+
246
+ When using AI to write tests:
247
+
248
+ ```markdown
249
+ ## Prompt Template
250
+
251
+ "Write unit test for function [function name] in file [path].
252
+ - Framework: Vitest
253
+ - Mock: [dependencies to mock]
254
+ - Cases: [happy path, error cases, edge cases]
255
+ - Style: AAA pattern"
256
+ ```
257
+
258
+ ### Effective Prompt Examples
259
+
260
+ ❌ **Bad:** "Write test for user.ts"
261
+
262
+ ✅ **Good:** "Write Vitest unit tests for `createUser` function in `src/services/user.ts`. Mock database calls with vi.mock. Cover: valid input, invalid email, duplicate user."
263
+
264
+ ### Tips
265
+ 1. Specify framework (Vitest/Jest)
266
+ 2. List specific test cases
267
+ 3. Specify dependencies to mock
268
+ 4. Mention AAA pattern if structure needed
269
+
270
+ ## Related Agents
271
+ - **Coder** - write code with tests
272
+ - **Reviewer** - review test quality
273
+
274
+