superkit-mcp-server 1.2.4 → 1.2.6
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/ARCHITECTURE.md +102 -102
- package/README.md +71 -71
- package/SUPERKIT.md +168 -168
- package/agents/code-archaeologist.md +106 -106
- package/agents/coder.md +90 -90
- package/agents/data-engineer.md +28 -28
- package/agents/devops-engineer.md +242 -242
- package/agents/git-manager.md +203 -203
- package/agents/orchestrator.md +420 -420
- package/agents/penetration-tester.md +188 -188
- package/agents/performance-optimizer.md +187 -187
- package/agents/planner.md +270 -270
- package/agents/qa-automation-engineer.md +103 -103
- package/agents/quant-developer.md +32 -32
- package/agents/reviewer.md +100 -100
- package/agents/scout.md +222 -222
- package/agents/tester.md +274 -274
- package/agents/ui-designer.md +208 -208
- package/build/__tests__/test_apply_prompt_args.js +104 -0
- package/build/index.js +106 -45
- package/build/tools/todoTools.js +39 -39
- package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
- package/build/tools/validators/__tests__/convertRules.test.js +5 -5
- package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
- package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
- package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
- package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
- package/build/tools/validators/__tests__/securityScan.test.js +6 -6
- package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
- package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
- package/commands/README.md +122 -122
- package/commands/ask.toml +72 -72
- package/commands/brainstorm.toml +119 -119
- package/commands/chat.toml +77 -77
- package/commands/code-preview.toml +37 -37
- package/commands/code.toml +28 -28
- package/commands/content.toml +200 -200
- package/commands/cook.toml +77 -77
- package/commands/copywrite.toml +131 -131
- package/commands/db.toml +192 -192
- package/commands/debug.toml +166 -166
- package/commands/design.toml +158 -158
- package/commands/dev-rules.toml +14 -14
- package/commands/do.toml +117 -117
- package/commands/doc-rules.toml +14 -14
- package/commands/docs.toml +148 -148
- package/commands/fix.toml +440 -440
- package/commands/fullstack.toml +175 -175
- package/commands/git.toml +235 -235
- package/commands/help.toml +84 -84
- package/commands/integrate.toml +127 -127
- package/commands/journal.toml +136 -136
- package/commands/kit-setup.toml +40 -40
- package/commands/mcp.toml +183 -183
- package/commands/orchestration.toml +15 -15
- package/commands/plan.toml +206 -172
- package/commands/pm.toml +148 -148
- package/commands/pr.toml +50 -50
- package/commands/project.toml +32 -32
- package/commands/research.toml +117 -117
- package/commands/review-pr.toml +63 -63
- package/commands/review.toml +190 -190
- package/commands/scout-ext.toml +97 -97
- package/commands/scout.toml +79 -79
- package/commands/screenshot.toml +65 -65
- package/commands/session.toml +102 -102
- package/commands/skill.toml +384 -384
- package/commands/status.toml +22 -22
- package/commands/team.toml +56 -56
- package/commands/test.toml +164 -164
- package/commands/ticket.toml +70 -70
- package/commands/use.toml +106 -106
- package/commands/video.toml +83 -83
- package/commands/watzup.toml +71 -71
- package/commands/workflow.toml +14 -14
- package/package.json +35 -35
- package/skills/meta/README.md +30 -30
- package/skills/meta/api-design/SKILL.md +134 -134
- package/skills/meta/code-review/SKILL.md +44 -44
- package/skills/meta/code-review/checklists/pre-merge.md +25 -25
- package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
- package/skills/meta/code-review/workflows/performance-pass.md +27 -27
- package/skills/meta/code-review/workflows/security-pass.md +29 -29
- package/skills/meta/compound-docs/SKILL.md +133 -133
- package/skills/meta/debug/SKILL.md +40 -40
- package/skills/meta/debug/templates/bug-report.template.md +31 -31
- package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
- package/skills/meta/docker/SKILL.md +126 -126
- package/skills/meta/examples/supabase/SKILL.md +46 -46
- package/skills/meta/examples/supabase/references/best-practices.md +319 -319
- package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
- package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
- package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
- package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
- package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
- package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
- package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
- package/skills/meta/file-todos/SKILL.md +88 -88
- package/skills/meta/mobile/SKILL.md +140 -140
- package/skills/meta/nextjs/SKILL.md +101 -101
- package/skills/meta/performance/SKILL.md +130 -130
- package/skills/meta/react-patterns/SKILL.md +83 -83
- package/skills/meta/security/SKILL.md +114 -114
- package/skills/meta/session-resume/SKILL.md +96 -96
- package/skills/meta/tailwind/SKILL.md +139 -139
- package/skills/meta/testing/SKILL.md +43 -43
- package/skills/meta/testing/references/vitest-patterns.md +45 -45
- package/skills/meta/testing/templates/component-test.template.tsx +37 -37
- package/skills/tech/alpha-vantage/SKILL.md +142 -142
- package/skills/tech/alpha-vantage/references/commodities.md +153 -153
- package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
- package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
- package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
- package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
- package/skills/tech/alpha-vantage/references/options.md +93 -93
- package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
- package/skills/tech/alpha-vantage/references/time-series.md +157 -157
- package/skills/tech/financial-modeling/SKILL.md +18 -18
- package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
- package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
- package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
- package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
- package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
- package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
- package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
- package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
- package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
- package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
- package/skills/workflows/README.md +203 -203
- package/skills/workflows/adr.md +174 -174
- package/skills/workflows/changelog.md +74 -74
- package/skills/workflows/compound.md +323 -323
- package/skills/workflows/compound_health.md +74 -74
- package/skills/workflows/create-agent-skill.md +138 -138
- package/skills/workflows/cycle.md +144 -144
- package/skills/workflows/deploy-docs.md +84 -84
- package/skills/workflows/development-rules.md +42 -42
- package/skills/workflows/doc.md +95 -95
- package/skills/workflows/documentation-management.md +34 -34
- package/skills/workflows/explore.md +146 -146
- package/skills/workflows/generate_command.md +106 -106
- package/skills/workflows/heal-skill.md +97 -97
- package/skills/workflows/housekeeping.md +229 -229
- package/skills/workflows/kit-setup.md +102 -102
- package/skills/workflows/map-codebase.md +78 -78
- package/skills/workflows/orchestration-protocol.md +43 -43
- package/skills/workflows/plan-compound.md +439 -439
- package/skills/workflows/plan_review.md +269 -269
- package/skills/workflows/primary-workflow.md +37 -37
- package/skills/workflows/promote_pattern.md +86 -86
- package/skills/workflows/release-docs.md +82 -82
- package/skills/workflows/report-bug.md +135 -135
- package/skills/workflows/reproduce-bug.md +118 -118
- package/skills/workflows/resolve_pr.md +133 -133
- package/skills/workflows/resolve_todo.md +128 -128
- package/skills/workflows/review-compound.md +376 -376
- package/skills/workflows/skill-review.md +127 -127
- package/skills/workflows/specs.md +257 -257
- package/skills/workflows/triage-sprint.md +102 -102
- package/skills/workflows/triage.md +152 -152
- package/skills/workflows/work.md +399 -399
- package/skills/workflows/xcode-test.md +93 -93
package/agents/ui-designer.md
CHANGED
|
@@ -1,208 +1,208 @@
|
|
|
1
|
-
# UI/UX Designer Agent
|
|
2
|
-
|
|
3
|
-
## Role
|
|
4
|
-
Design user interface and experience.
|
|
5
|
-
|
|
6
|
-
## When to Use
|
|
7
|
-
- Design new UI components
|
|
8
|
-
- Improve UX flows
|
|
9
|
-
- Create mockups
|
|
10
|
-
- Design system
|
|
11
|
-
- Accessibility review
|
|
12
|
-
|
|
13
|
-
## Capabilities
|
|
14
|
-
|
|
15
|
-
### 1. UI Design
|
|
16
|
-
- Component design
|
|
17
|
-
- Layout structure
|
|
18
|
-
- Color schemes
|
|
19
|
-
- Typography
|
|
20
|
-
|
|
21
|
-
### 2. UX Design
|
|
22
|
-
- User flows
|
|
23
|
-
- Information architecture
|
|
24
|
-
- Usability patterns
|
|
25
|
-
- Accessibility
|
|
26
|
-
|
|
27
|
-
### 3. Design Systems
|
|
28
|
-
- Component library
|
|
29
|
-
- Design tokens
|
|
30
|
-
- Style guides
|
|
31
|
-
- Documentation
|
|
32
|
-
|
|
33
|
-
### 4. Responsive Design
|
|
34
|
-
- Breakpoints
|
|
35
|
-
- Mobile-first
|
|
36
|
-
- Adaptive layouts
|
|
37
|
-
|
|
38
|
-
## Design Principles
|
|
39
|
-
|
|
40
|
-
### Visual Hierarchy
|
|
41
|
-
1. Size (larger = more important)
|
|
42
|
-
2. Color (contrast draws attention)
|
|
43
|
-
3. Position (top-left = primary)
|
|
44
|
-
4. Spacing (grouping related items)
|
|
45
|
-
|
|
46
|
-
### Color Guidelines
|
|
47
|
-
```css
|
|
48
|
-
/* Primary palette */
|
|
49
|
-
--primary: #3B82F6;
|
|
50
|
-
--primary-dark: #2563EB;
|
|
51
|
-
--primary-light: #60A5FA;
|
|
52
|
-
|
|
53
|
-
/* Semantic colors */
|
|
54
|
-
--success: #10B981;
|
|
55
|
-
--warning: #F59E0B;
|
|
56
|
-
--error: #EF4444;
|
|
57
|
-
--info: #3B82F6;
|
|
58
|
-
|
|
59
|
-
/* Neutral */
|
|
60
|
-
--gray-50: #F9FAFB;
|
|
61
|
-
--gray-900: #111827;
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Typography Scale
|
|
65
|
-
```css
|
|
66
|
-
--text-xs: 0.75rem; /* 12px */
|
|
67
|
-
--text-sm: 0.875rem; /* 14px */
|
|
68
|
-
--text-base: 1rem; /* 16px */
|
|
69
|
-
--text-lg: 1.125rem; /* 18px */
|
|
70
|
-
--text-xl: 1.25rem; /* 20px */
|
|
71
|
-
--text-2xl: 1.5rem; /* 24px */
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Spacing Scale
|
|
75
|
-
```css
|
|
76
|
-
--space-1: 0.25rem; /* 4px */
|
|
77
|
-
--space-2: 0.5rem; /* 8px */
|
|
78
|
-
--space-4: 1rem; /* 16px */
|
|
79
|
-
--space-6: 1.5rem; /* 24px */
|
|
80
|
-
--space-8: 2rem; /* 32px */
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Accessibility Checklist
|
|
84
|
-
|
|
85
|
-
- [ ] Color contrast >= 4.5:1
|
|
86
|
-
- [ ] Focus indicators visible
|
|
87
|
-
- [ ] Alt text for images
|
|
88
|
-
- [ ] Keyboard navigation
|
|
89
|
-
- [ ] Screen reader compatible
|
|
90
|
-
- [ ] Touch targets >= 44px
|
|
91
|
-
|
|
92
|
-
## Component Patterns
|
|
93
|
-
|
|
94
|
-
### Button States
|
|
95
|
-
- Default
|
|
96
|
-
- Hover
|
|
97
|
-
- Active/Pressed
|
|
98
|
-
- Focused
|
|
99
|
-
- Disabled
|
|
100
|
-
- Loading
|
|
101
|
-
|
|
102
|
-
### Form Fields
|
|
103
|
-
- Label (required indicator)
|
|
104
|
-
- Input
|
|
105
|
-
- Helper text
|
|
106
|
-
- Error message
|
|
107
|
-
- Success state
|
|
108
|
-
|
|
109
|
-
## Dark Mode Guidelines
|
|
110
|
-
|
|
111
|
-
### CSS Variables Pattern
|
|
112
|
-
```css
|
|
113
|
-
:root {
|
|
114
|
-
/* Light mode (default) */
|
|
115
|
-
--bg-primary: #ffffff;
|
|
116
|
-
--bg-secondary: #f9fafb;
|
|
117
|
-
--text-primary: #111827;
|
|
118
|
-
--text-secondary: #6b7280;
|
|
119
|
-
--border: #e5e7eb;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
[data-theme="dark"] {
|
|
123
|
-
--bg-primary: #111827;
|
|
124
|
-
--bg-secondary: #1f2937;
|
|
125
|
-
--text-primary: #f9fafb;
|
|
126
|
-
--text-secondary: #9ca3af;
|
|
127
|
-
--border: #374151;
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Dark Mode Checklist
|
|
132
|
-
- [ ] All colors use CSS variables
|
|
133
|
-
- [ ] Images have dark variants or opacity
|
|
134
|
-
- [ ] Shadows reduced in dark mode
|
|
135
|
-
- [ ] Borders visible but subtle
|
|
136
|
-
- [ ] Focus states visible
|
|
137
|
-
- [ ] Charts/graphs adapted
|
|
138
|
-
|
|
139
|
-
### Theme Toggle
|
|
140
|
-
```typescript
|
|
141
|
-
function toggleTheme() {
|
|
142
|
-
const current = document.documentElement.dataset.theme;
|
|
143
|
-
document.documentElement.dataset.theme =
|
|
144
|
-
current === 'dark' ? 'light' : 'dark';
|
|
145
|
-
localStorage.setItem('theme', current === 'dark' ? 'light' : 'dark');
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Animation/Motion Guidelines
|
|
150
|
-
|
|
151
|
-
### Animation Principles
|
|
152
|
-
| Principle | Description |
|
|
153
|
-
|-----------|-------------|
|
|
154
|
-
| Duration | 150-300ms for micro, 300-500ms for page |
|
|
155
|
-
| Easing | `ease-out` for enter, `ease-in` for exit |
|
|
156
|
-
| Purpose | Guide attention, provide feedback |
|
|
157
|
-
|
|
158
|
-
### Common Animations
|
|
159
|
-
```css
|
|
160
|
-
/* Fade in */
|
|
161
|
-
@keyframes fadeIn {
|
|
162
|
-
from { opacity: 0; }
|
|
163
|
-
to { opacity: 1; }
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/* Slide up */
|
|
167
|
-
@keyframes slideUp {
|
|
168
|
-
from { transform: translateY(10px); opacity: 0; }
|
|
169
|
-
to { transform: translateY(0); opacity: 1; }
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/* Scale */
|
|
173
|
-
@keyframes scaleIn {
|
|
174
|
-
from { transform: scale(0.95); opacity: 0; }
|
|
175
|
-
to { transform: scale(1); opacity: 1; }
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### CSS Transition Utilities
|
|
180
|
-
```css
|
|
181
|
-
.transition-fast { transition: all 150ms ease-out; }
|
|
182
|
-
.transition-base { transition: all 200ms ease-out; }
|
|
183
|
-
.transition-slow { transition: all 300ms ease-out; }
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Reduce Motion
|
|
187
|
-
```css
|
|
188
|
-
@media (prefers-reduced-motion: reduce) {
|
|
189
|
-
*, *::before, *::after {
|
|
190
|
-
animation-duration: 0.01ms !important;
|
|
191
|
-
transition-duration: 0.01ms !important;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## Best Practices
|
|
197
|
-
1. Design for accessibility first
|
|
198
|
-
2. Use consistent spacing
|
|
199
|
-
3. Follow platform conventions
|
|
200
|
-
4. Test on real devices
|
|
201
|
-
5. Get user feedback
|
|
202
|
-
6. **Support dark mode from start**
|
|
203
|
-
7. **Respect prefers-reduced-motion**
|
|
204
|
-
|
|
205
|
-
## Related Agents
|
|
206
|
-
- **Coder** - implement designs
|
|
207
|
-
- **Fullstack Developer** - build complete UI
|
|
208
|
-
|
|
1
|
+
# UI/UX Designer Agent
|
|
2
|
+
|
|
3
|
+
## Role
|
|
4
|
+
Design user interface and experience.
|
|
5
|
+
|
|
6
|
+
## When to Use
|
|
7
|
+
- Design new UI components
|
|
8
|
+
- Improve UX flows
|
|
9
|
+
- Create mockups
|
|
10
|
+
- Design system
|
|
11
|
+
- Accessibility review
|
|
12
|
+
|
|
13
|
+
## Capabilities
|
|
14
|
+
|
|
15
|
+
### 1. UI Design
|
|
16
|
+
- Component design
|
|
17
|
+
- Layout structure
|
|
18
|
+
- Color schemes
|
|
19
|
+
- Typography
|
|
20
|
+
|
|
21
|
+
### 2. UX Design
|
|
22
|
+
- User flows
|
|
23
|
+
- Information architecture
|
|
24
|
+
- Usability patterns
|
|
25
|
+
- Accessibility
|
|
26
|
+
|
|
27
|
+
### 3. Design Systems
|
|
28
|
+
- Component library
|
|
29
|
+
- Design tokens
|
|
30
|
+
- Style guides
|
|
31
|
+
- Documentation
|
|
32
|
+
|
|
33
|
+
### 4. Responsive Design
|
|
34
|
+
- Breakpoints
|
|
35
|
+
- Mobile-first
|
|
36
|
+
- Adaptive layouts
|
|
37
|
+
|
|
38
|
+
## Design Principles
|
|
39
|
+
|
|
40
|
+
### Visual Hierarchy
|
|
41
|
+
1. Size (larger = more important)
|
|
42
|
+
2. Color (contrast draws attention)
|
|
43
|
+
3. Position (top-left = primary)
|
|
44
|
+
4. Spacing (grouping related items)
|
|
45
|
+
|
|
46
|
+
### Color Guidelines
|
|
47
|
+
```css
|
|
48
|
+
/* Primary palette */
|
|
49
|
+
--primary: #3B82F6;
|
|
50
|
+
--primary-dark: #2563EB;
|
|
51
|
+
--primary-light: #60A5FA;
|
|
52
|
+
|
|
53
|
+
/* Semantic colors */
|
|
54
|
+
--success: #10B981;
|
|
55
|
+
--warning: #F59E0B;
|
|
56
|
+
--error: #EF4444;
|
|
57
|
+
--info: #3B82F6;
|
|
58
|
+
|
|
59
|
+
/* Neutral */
|
|
60
|
+
--gray-50: #F9FAFB;
|
|
61
|
+
--gray-900: #111827;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Typography Scale
|
|
65
|
+
```css
|
|
66
|
+
--text-xs: 0.75rem; /* 12px */
|
|
67
|
+
--text-sm: 0.875rem; /* 14px */
|
|
68
|
+
--text-base: 1rem; /* 16px */
|
|
69
|
+
--text-lg: 1.125rem; /* 18px */
|
|
70
|
+
--text-xl: 1.25rem; /* 20px */
|
|
71
|
+
--text-2xl: 1.5rem; /* 24px */
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Spacing Scale
|
|
75
|
+
```css
|
|
76
|
+
--space-1: 0.25rem; /* 4px */
|
|
77
|
+
--space-2: 0.5rem; /* 8px */
|
|
78
|
+
--space-4: 1rem; /* 16px */
|
|
79
|
+
--space-6: 1.5rem; /* 24px */
|
|
80
|
+
--space-8: 2rem; /* 32px */
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Accessibility Checklist
|
|
84
|
+
|
|
85
|
+
- [ ] Color contrast >= 4.5:1
|
|
86
|
+
- [ ] Focus indicators visible
|
|
87
|
+
- [ ] Alt text for images
|
|
88
|
+
- [ ] Keyboard navigation
|
|
89
|
+
- [ ] Screen reader compatible
|
|
90
|
+
- [ ] Touch targets >= 44px
|
|
91
|
+
|
|
92
|
+
## Component Patterns
|
|
93
|
+
|
|
94
|
+
### Button States
|
|
95
|
+
- Default
|
|
96
|
+
- Hover
|
|
97
|
+
- Active/Pressed
|
|
98
|
+
- Focused
|
|
99
|
+
- Disabled
|
|
100
|
+
- Loading
|
|
101
|
+
|
|
102
|
+
### Form Fields
|
|
103
|
+
- Label (required indicator)
|
|
104
|
+
- Input
|
|
105
|
+
- Helper text
|
|
106
|
+
- Error message
|
|
107
|
+
- Success state
|
|
108
|
+
|
|
109
|
+
## Dark Mode Guidelines
|
|
110
|
+
|
|
111
|
+
### CSS Variables Pattern
|
|
112
|
+
```css
|
|
113
|
+
:root {
|
|
114
|
+
/* Light mode (default) */
|
|
115
|
+
--bg-primary: #ffffff;
|
|
116
|
+
--bg-secondary: #f9fafb;
|
|
117
|
+
--text-primary: #111827;
|
|
118
|
+
--text-secondary: #6b7280;
|
|
119
|
+
--border: #e5e7eb;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[data-theme="dark"] {
|
|
123
|
+
--bg-primary: #111827;
|
|
124
|
+
--bg-secondary: #1f2937;
|
|
125
|
+
--text-primary: #f9fafb;
|
|
126
|
+
--text-secondary: #9ca3af;
|
|
127
|
+
--border: #374151;
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Dark Mode Checklist
|
|
132
|
+
- [ ] All colors use CSS variables
|
|
133
|
+
- [ ] Images have dark variants or opacity
|
|
134
|
+
- [ ] Shadows reduced in dark mode
|
|
135
|
+
- [ ] Borders visible but subtle
|
|
136
|
+
- [ ] Focus states visible
|
|
137
|
+
- [ ] Charts/graphs adapted
|
|
138
|
+
|
|
139
|
+
### Theme Toggle
|
|
140
|
+
```typescript
|
|
141
|
+
function toggleTheme() {
|
|
142
|
+
const current = document.documentElement.dataset.theme;
|
|
143
|
+
document.documentElement.dataset.theme =
|
|
144
|
+
current === 'dark' ? 'light' : 'dark';
|
|
145
|
+
localStorage.setItem('theme', current === 'dark' ? 'light' : 'dark');
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Animation/Motion Guidelines
|
|
150
|
+
|
|
151
|
+
### Animation Principles
|
|
152
|
+
| Principle | Description |
|
|
153
|
+
|-----------|-------------|
|
|
154
|
+
| Duration | 150-300ms for micro, 300-500ms for page |
|
|
155
|
+
| Easing | `ease-out` for enter, `ease-in` for exit |
|
|
156
|
+
| Purpose | Guide attention, provide feedback |
|
|
157
|
+
|
|
158
|
+
### Common Animations
|
|
159
|
+
```css
|
|
160
|
+
/* Fade in */
|
|
161
|
+
@keyframes fadeIn {
|
|
162
|
+
from { opacity: 0; }
|
|
163
|
+
to { opacity: 1; }
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Slide up */
|
|
167
|
+
@keyframes slideUp {
|
|
168
|
+
from { transform: translateY(10px); opacity: 0; }
|
|
169
|
+
to { transform: translateY(0); opacity: 1; }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Scale */
|
|
173
|
+
@keyframes scaleIn {
|
|
174
|
+
from { transform: scale(0.95); opacity: 0; }
|
|
175
|
+
to { transform: scale(1); opacity: 1; }
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### CSS Transition Utilities
|
|
180
|
+
```css
|
|
181
|
+
.transition-fast { transition: all 150ms ease-out; }
|
|
182
|
+
.transition-base { transition: all 200ms ease-out; }
|
|
183
|
+
.transition-slow { transition: all 300ms ease-out; }
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Reduce Motion
|
|
187
|
+
```css
|
|
188
|
+
@media (prefers-reduced-motion: reduce) {
|
|
189
|
+
*, *::before, *::after {
|
|
190
|
+
animation-duration: 0.01ms !important;
|
|
191
|
+
transition-duration: 0.01ms !important;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Best Practices
|
|
197
|
+
1. Design for accessibility first
|
|
198
|
+
2. Use consistent spacing
|
|
199
|
+
3. Follow platform conventions
|
|
200
|
+
4. Test on real devices
|
|
201
|
+
5. Get user feedback
|
|
202
|
+
6. **Support dark mode from start**
|
|
203
|
+
7. **Respect prefers-reduced-motion**
|
|
204
|
+
|
|
205
|
+
## Related Agents
|
|
206
|
+
- **Coder** - implement designs
|
|
207
|
+
- **Fullstack Developer** - build complete UI
|
|
208
|
+
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { apply_prompt_args } from '../index.js';
|
|
3
|
+
describe('apply_prompt_args', () => {
|
|
4
|
+
describe('{{args}} substitution', () => {
|
|
5
|
+
it('should replace {{args}} with the provided user args', () => {
|
|
6
|
+
const result = apply_prompt_args('Task: {{args}}', 'Add user authentication');
|
|
7
|
+
expect(result).toBe('Task: Add user authentication');
|
|
8
|
+
});
|
|
9
|
+
it('should replace all occurrences of {{args}}', () => {
|
|
10
|
+
const result = apply_prompt_args('{{args}} and also {{args}}', 'hello');
|
|
11
|
+
expect(result).toBe('hello and also hello');
|
|
12
|
+
});
|
|
13
|
+
it('should replace {{args}} with an empty string when no args are provided', () => {
|
|
14
|
+
const result = apply_prompt_args('Task: {{args}}', '');
|
|
15
|
+
expect(result).toBe('Task: ');
|
|
16
|
+
});
|
|
17
|
+
it('should replace {{args}} with an empty string when args is only whitespace', () => {
|
|
18
|
+
const result = apply_prompt_args('Task: {{args}}', ' ');
|
|
19
|
+
expect(result).toBe('Task: ');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('{{#if args}} ... {{/if}} block (no else branch)', () => {
|
|
23
|
+
it('should include the block content when args is provided', () => {
|
|
24
|
+
const template = '{{#if args}}Task: {{args}}{{/if}}';
|
|
25
|
+
const result = apply_prompt_args(template, 'Fix bug');
|
|
26
|
+
expect(result).toBe('Task: Fix bug');
|
|
27
|
+
});
|
|
28
|
+
it('should remove the block entirely when args is empty', () => {
|
|
29
|
+
const template = 'Before\n{{#if args}}Task: {{args}}{{/if}}\nAfter';
|
|
30
|
+
const result = apply_prompt_args(template, '');
|
|
31
|
+
expect(result).toBe('Before\n\nAfter');
|
|
32
|
+
});
|
|
33
|
+
it('should remove the block entirely when args is only whitespace', () => {
|
|
34
|
+
const template = '{{#if args}}Task: {{args}}{{/if}}';
|
|
35
|
+
const result = apply_prompt_args(template, ' ');
|
|
36
|
+
expect(result).toBe('');
|
|
37
|
+
});
|
|
38
|
+
it('should handle multiline block content', () => {
|
|
39
|
+
const template = '{{#if args}}\n# Task\n**Input:** {{args}}\n{{/if}}';
|
|
40
|
+
const result = apply_prompt_args(template, 'Do something');
|
|
41
|
+
expect(result).toBe('\n# Task\n**Input:** Do something\n');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('{{#if args}} ... {{else}} ... {{/if}} block', () => {
|
|
45
|
+
it('should render the if-block when args is provided', () => {
|
|
46
|
+
const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
|
|
47
|
+
const result = apply_prompt_args(template, 'Add login');
|
|
48
|
+
expect(result).toBe('Task: Add login');
|
|
49
|
+
});
|
|
50
|
+
it('should render the else-block when args is empty', () => {
|
|
51
|
+
const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
|
|
52
|
+
const result = apply_prompt_args(template, '');
|
|
53
|
+
expect(result).toBe('No task provided.');
|
|
54
|
+
});
|
|
55
|
+
it('should render the else-block when args is only whitespace', () => {
|
|
56
|
+
const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
|
|
57
|
+
const result = apply_prompt_args(template, ' ');
|
|
58
|
+
expect(result).toBe('No task provided.');
|
|
59
|
+
});
|
|
60
|
+
it('should handle multiline if and else blocks', () => {
|
|
61
|
+
const template = [
|
|
62
|
+
'{{#if args}}',
|
|
63
|
+
'# Running: {{args}}',
|
|
64
|
+
'Execute the task above.',
|
|
65
|
+
'{{else}}',
|
|
66
|
+
'# Usage',
|
|
67
|
+
'Provide a task to run.',
|
|
68
|
+
'{{/if}}',
|
|
69
|
+
].join('\n');
|
|
70
|
+
const with_args = apply_prompt_args(template, 'Build the feature');
|
|
71
|
+
expect(with_args).toContain('# Running: Build the feature');
|
|
72
|
+
expect(with_args).not.toContain('# Usage');
|
|
73
|
+
const without_args = apply_prompt_args(template, '');
|
|
74
|
+
expect(without_args).toContain('# Usage');
|
|
75
|
+
expect(without_args).not.toContain('# Running:');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('edge cases', () => {
|
|
79
|
+
it('should return the template unchanged when it has no placeholders', () => {
|
|
80
|
+
const template = '# Plan\nThis is a static template.';
|
|
81
|
+
const result = apply_prompt_args(template, 'some args');
|
|
82
|
+
expect(result).toBe(template);
|
|
83
|
+
});
|
|
84
|
+
it('should handle a template with both {{args}} and {{#if args}} blocks', () => {
|
|
85
|
+
const template = [
|
|
86
|
+
'{{#if args}}',
|
|
87
|
+
'**Task:** {{args}}',
|
|
88
|
+
'{{else}}',
|
|
89
|
+
'**Task:** (none)',
|
|
90
|
+
'{{/if}}',
|
|
91
|
+
'',
|
|
92
|
+
'Details: {{args}}',
|
|
93
|
+
].join('\n');
|
|
94
|
+
const result = apply_prompt_args(template, 'Refactor auth');
|
|
95
|
+
expect(result).toContain('**Task:** Refactor auth');
|
|
96
|
+
expect(result).toContain('Details: Refactor auth');
|
|
97
|
+
expect(result).not.toContain('(none)');
|
|
98
|
+
});
|
|
99
|
+
it('should handle empty template string', () => {
|
|
100
|
+
const result = apply_prompt_args('', 'some args');
|
|
101
|
+
expect(result).toBe('');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|