superkit-mcp-server 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/tools/sessionManager.js +79 -10
- 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 +171 -171
- 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
|
+
|
|
@@ -4,11 +4,18 @@ export async function manageSession(command, rootPath = '.') {
|
|
|
4
4
|
const root = path.resolve(rootPath);
|
|
5
5
|
const pkgPath = path.join(root, 'package.json');
|
|
6
6
|
const getPackageInfo = async () => {
|
|
7
|
+
let name = root.split(path.sep).pop() || 'unnamed';
|
|
8
|
+
let version = '0.0.0';
|
|
9
|
+
const stack = [];
|
|
10
|
+
let scripts = [];
|
|
11
|
+
// 1. Node.js Check
|
|
7
12
|
try {
|
|
8
13
|
const data = await fs.readFile(pkgPath, 'utf8');
|
|
9
14
|
const pkg = JSON.parse(data);
|
|
15
|
+
name = pkg.name || name;
|
|
16
|
+
version = pkg.version || version;
|
|
17
|
+
scripts = Object.keys(pkg.scripts || {});
|
|
10
18
|
const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
|
|
11
|
-
const stack = [];
|
|
12
19
|
if (allDeps['next'])
|
|
13
20
|
stack.push("Next.js");
|
|
14
21
|
else if (allDeps['react'])
|
|
@@ -27,16 +34,69 @@ export async function manageSession(command, rootPath = '.') {
|
|
|
27
34
|
stack.push("Prisma");
|
|
28
35
|
if (allDeps['typescript'])
|
|
29
36
|
stack.push("TypeScript");
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
version: pkg.version || '0.0.0',
|
|
33
|
-
stack,
|
|
34
|
-
scripts: Object.keys(pkg.scripts || {})
|
|
35
|
-
};
|
|
37
|
+
if (stack.length === 0)
|
|
38
|
+
stack.push("Node.js");
|
|
36
39
|
}
|
|
37
|
-
catch
|
|
38
|
-
|
|
40
|
+
catch { }
|
|
41
|
+
// 2. Polyglot Checks
|
|
42
|
+
try {
|
|
43
|
+
const files = await fs.readdir(root);
|
|
44
|
+
// Python
|
|
45
|
+
if (files.includes('requirements.txt') || files.includes('Pipfile') || files.includes('pyproject.toml')) {
|
|
46
|
+
if (!stack.includes("Python"))
|
|
47
|
+
stack.push("Python");
|
|
48
|
+
if (files.includes('manage.py'))
|
|
49
|
+
stack.push("Django");
|
|
50
|
+
if (files.includes('requirements.txt')) {
|
|
51
|
+
const content = await fs.readFile(path.join(root, 'requirements.txt'), 'utf8');
|
|
52
|
+
if (content.includes('flask'))
|
|
53
|
+
stack.push("Flask");
|
|
54
|
+
if (content.includes('fastapi'))
|
|
55
|
+
stack.push("FastAPI");
|
|
56
|
+
if (content.includes('django') && !stack.includes("Django"))
|
|
57
|
+
stack.push("Django");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Go
|
|
61
|
+
if (files.includes('go.mod'))
|
|
62
|
+
stack.push("Go");
|
|
63
|
+
// Rust
|
|
64
|
+
if (files.includes('Cargo.toml'))
|
|
65
|
+
stack.push("Rust");
|
|
66
|
+
// Java / Kotlin
|
|
67
|
+
if (files.includes('pom.xml'))
|
|
68
|
+
stack.push("Java (Maven)");
|
|
69
|
+
if (files.includes('build.gradle') || files.includes('build.gradle.kts'))
|
|
70
|
+
stack.push("Java/Kotlin (Gradle)");
|
|
71
|
+
// PHP
|
|
72
|
+
if (files.includes('composer.json')) {
|
|
73
|
+
if (!stack.includes("PHP"))
|
|
74
|
+
stack.push("PHP");
|
|
75
|
+
try {
|
|
76
|
+
const composer = JSON.parse(await fs.readFile(path.join(root, 'composer.json'), 'utf8'));
|
|
77
|
+
const deps = { ...(composer.require || {}), ...(composer['require-dev'] || {}) };
|
|
78
|
+
if (deps['laravel/framework'])
|
|
79
|
+
stack.push("Laravel");
|
|
80
|
+
if (deps['symfony/framework-bundle'])
|
|
81
|
+
stack.push("Symfony");
|
|
82
|
+
}
|
|
83
|
+
catch { }
|
|
84
|
+
}
|
|
85
|
+
// Infrastructure
|
|
86
|
+
if (files.includes('Dockerfile') || files.includes('docker-compose.yml'))
|
|
87
|
+
stack.push("Docker");
|
|
88
|
+
if (files.some(f => f.endsWith('.tf')))
|
|
89
|
+
stack.push("Terraform");
|
|
39
90
|
}
|
|
91
|
+
catch { }
|
|
92
|
+
if (stack.length === 0)
|
|
93
|
+
stack.push("Generic");
|
|
94
|
+
return {
|
|
95
|
+
name,
|
|
96
|
+
version,
|
|
97
|
+
stack: Array.from(new Set(stack)),
|
|
98
|
+
scripts
|
|
99
|
+
};
|
|
40
100
|
};
|
|
41
101
|
const countFiles = async (dir) => {
|
|
42
102
|
let count = 0;
|
|
@@ -91,7 +151,16 @@ export async function manageSession(command, rootPath = '.') {
|
|
|
91
151
|
output += `📁 Project: ${info.name}\n`;
|
|
92
152
|
output += `📂 Path: ${root}\n`;
|
|
93
153
|
output += `🏷️ Type: ${info.stack.join(', ')}\n`;
|
|
94
|
-
|
|
154
|
+
// Check for active todos to determine status
|
|
155
|
+
let status = 'Idle';
|
|
156
|
+
try {
|
|
157
|
+
const todos = await fs.readdir(path.join(root, 'todos'));
|
|
158
|
+
const hasActive = todos.some(f => f.endsWith('.md') && !f.includes('template') && !f.includes('archive'));
|
|
159
|
+
if (hasActive)
|
|
160
|
+
status = 'Active';
|
|
161
|
+
}
|
|
162
|
+
catch { }
|
|
163
|
+
output += `📊 Status: ${status}\n\n`;
|
|
95
164
|
output += `🔧 Tech Stack:\n`;
|
|
96
165
|
for (const tech of info.stack)
|
|
97
166
|
output += ` • ${tech}\n`;
|
package/build/tools/todoTools.js
CHANGED
|
@@ -35,49 +35,49 @@ export async function createTodo(priority, title, problemStatement, criteriaArgs
|
|
|
35
35
|
const filename = `${nextId}-pending-${priority}-${sanitizedDesc}.md`;
|
|
36
36
|
const filePath = path.join(todosDir, filename);
|
|
37
37
|
const dateStr = new Date().toISOString().split('T')[0];
|
|
38
|
-
let content = `---
|
|
39
|
-
status: pending
|
|
40
|
-
priority: ${priority}
|
|
41
|
-
issue_id: "${nextId}"
|
|
42
|
-
tags: [generated, cleanup]
|
|
43
|
-
dependencies: []
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
# ${title}
|
|
47
|
-
|
|
48
|
-
## Problem Statement
|
|
49
|
-
|
|
50
|
-
**What's broken/missing:**
|
|
51
|
-
${problemStatement}
|
|
52
|
-
|
|
53
|
-
**Impact:**
|
|
54
|
-
This issue currently affects the system quality or functionality and needs to be addressed.
|
|
55
|
-
|
|
56
|
-
## Findings
|
|
57
|
-
- **Status:** Identified during workflow execution.
|
|
58
|
-
- **Priority:** ${priority}
|
|
59
|
-
- **System Impact:** This item is tracked to ensure continuous improvement of the codebase. Addressing it will contribute to overall system stability and feature completeness. The findings section provides context on origin and importance.
|
|
60
|
-
|
|
61
|
-
## Recommended Action
|
|
62
|
-
Implement the solution according to the acceptance criteria below.
|
|
63
|
-
|
|
64
|
-
## Acceptance Criteria
|
|
38
|
+
let content = `---
|
|
39
|
+
status: pending
|
|
40
|
+
priority: ${priority}
|
|
41
|
+
issue_id: "${nextId}"
|
|
42
|
+
tags: [generated, cleanup]
|
|
43
|
+
dependencies: []
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# ${title}
|
|
47
|
+
|
|
48
|
+
## Problem Statement
|
|
49
|
+
|
|
50
|
+
**What's broken/missing:**
|
|
51
|
+
${problemStatement}
|
|
52
|
+
|
|
53
|
+
**Impact:**
|
|
54
|
+
This issue currently affects the system quality or functionality and needs to be addressed.
|
|
55
|
+
|
|
56
|
+
## Findings
|
|
57
|
+
- **Status:** Identified during workflow execution.
|
|
58
|
+
- **Priority:** ${priority}
|
|
59
|
+
- **System Impact:** This item is tracked to ensure continuous improvement of the codebase. Addressing it will contribute to overall system stability and feature completeness. The findings section provides context on origin and importance.
|
|
60
|
+
|
|
61
|
+
## Recommended Action
|
|
62
|
+
Implement the solution according to the acceptance criteria below.
|
|
63
|
+
|
|
64
|
+
## Acceptance Criteria
|
|
65
65
|
`;
|
|
66
66
|
for (const criteria of criteriaArgs) {
|
|
67
67
|
content += `- [ ] ${criteria}\n`;
|
|
68
68
|
}
|
|
69
|
-
content += `
|
|
70
|
-
|
|
71
|
-
## Work Log
|
|
72
|
-
|
|
73
|
-
### ${dateStr} - Created
|
|
74
|
-
|
|
75
|
-
**By:** Agent
|
|
76
|
-
**Actions:**
|
|
77
|
-
- Auto-generated via createTodo MCP tool
|
|
78
|
-
|
|
79
|
-
## Notes
|
|
80
|
-
Source: Workflow automation
|
|
69
|
+
content += `
|
|
70
|
+
|
|
71
|
+
## Work Log
|
|
72
|
+
|
|
73
|
+
### ${dateStr} - Created
|
|
74
|
+
|
|
75
|
+
**By:** Agent
|
|
76
|
+
**Actions:**
|
|
77
|
+
- Auto-generated via createTodo MCP tool
|
|
78
|
+
|
|
79
|
+
## Notes
|
|
80
|
+
Source: Workflow automation
|
|
81
81
|
`;
|
|
82
82
|
await fs.writeFile(filePath, content);
|
|
83
83
|
return `✅ Created todo: ${filePath}\n ID: ${nextId}\n Priority: ${priority}\n Title: ${title}`;
|
|
@@ -9,16 +9,16 @@ describe('schemaValidator', () => {
|
|
|
9
9
|
});
|
|
10
10
|
describe('validatePrismaSchema', () => {
|
|
11
11
|
it('should detect bad model names and missing fields', async () => {
|
|
12
|
-
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
13
|
-
model user {
|
|
14
|
-
name String
|
|
15
|
-
}
|
|
16
|
-
model Post {
|
|
17
|
-
id String @id
|
|
18
|
-
userId String
|
|
19
|
-
createdAt DateTime
|
|
20
|
-
}
|
|
21
|
-
enum role { ADMIN, USER }
|
|
12
|
+
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
13
|
+
model user {
|
|
14
|
+
name String
|
|
15
|
+
}
|
|
16
|
+
model Post {
|
|
17
|
+
id String @id
|
|
18
|
+
userId String
|
|
19
|
+
createdAt DateTime
|
|
20
|
+
}
|
|
21
|
+
enum role { ADMIN, USER }
|
|
22
22
|
`);
|
|
23
23
|
const issues = await validatePrismaSchema('/mock.prisma');
|
|
24
24
|
expect(issues.some(i => i.includes("Model 'user' should be PascalCase"))).toBe(true);
|
|
@@ -47,11 +47,11 @@ describe('apiValidator', () => {
|
|
|
47
47
|
});
|
|
48
48
|
describe('checkApiCode', () => {
|
|
49
49
|
it('should detect missing api practices', async () => {
|
|
50
|
-
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
51
|
-
function handler() {
|
|
52
|
-
// no try, no status, no security check
|
|
53
|
-
return "hello";
|
|
54
|
-
}
|
|
50
|
+
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
51
|
+
function handler() {
|
|
52
|
+
// no try, no status, no security check
|
|
53
|
+
return "hello";
|
|
54
|
+
}
|
|
55
55
|
`);
|
|
56
56
|
const res = await checkApiCode('route.ts');
|
|
57
57
|
expect(res.issues.some(i => i.includes('No error handling'))).toBe(true);
|
|
@@ -59,14 +59,14 @@ describe('apiValidator', () => {
|
|
|
59
59
|
expect(res.passed.length).toBe(0);
|
|
60
60
|
});
|
|
61
61
|
it('should pass good practices', async () => {
|
|
62
|
-
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
63
|
-
import { z } from 'zod';
|
|
64
|
-
function handler(req, res) {
|
|
65
|
-
try {
|
|
66
|
-
const jwtToken = "123";
|
|
67
|
-
return res.status(200).send("hello");
|
|
68
|
-
} catch(e) {}
|
|
69
|
-
}
|
|
62
|
+
vi.mocked(fs.readFile).mockResolvedValue(`
|
|
63
|
+
import { z } from 'zod';
|
|
64
|
+
function handler(req, res) {
|
|
65
|
+
try {
|
|
66
|
+
const jwtToken = "123";
|
|
67
|
+
return res.status(200).send("hello");
|
|
68
|
+
} catch(e) {}
|
|
69
|
+
}
|
|
70
70
|
`);
|
|
71
71
|
const res = await checkApiCode('route.ts');
|
|
72
72
|
expect(res.passed.some(i => i.includes('Error handling'))).toBe(true);
|