superkit-mcp-server 1.2.2 → 1.2.3
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/security-auditor.md +3 -2
- package/agents/tester.md +274 -274
- package/agents/ui-designer.md +208 -208
- package/build/index.js +18 -9
- package/build/tools/__tests__/loggerTools.test.js +5 -5
- package/build/tools/archTools.js +2 -19
- package/build/tools/autoPreview.js +2 -2
- package/build/tools/compoundTools.js +4 -4
- package/build/tools/docsTools.js +5 -10
- package/build/tools/loggerTools.js +1 -1
- 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/build/tools/validators/convertRules.js +2 -2
- 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/doc.md +6 -6
- 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 -139
- 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
|
+
|
package/build/index.js
CHANGED
|
@@ -293,25 +293,34 @@ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
|
293
293
|
try {
|
|
294
294
|
const content = await fs.readFile(safePath, "utf-8");
|
|
295
295
|
const parsed = toml.parse(content);
|
|
296
|
-
|
|
296
|
+
let promptText = parsed?.prompt || `Execute the ${promptName} command.`;
|
|
297
|
+
// Resolve @{path} includes from super-kit package root
|
|
298
|
+
const includePattern = /@\{([^}]+)\}/g;
|
|
299
|
+
let match;
|
|
300
|
+
while ((match = includePattern.exec(promptText)) !== null) {
|
|
301
|
+
const includePath = match[1];
|
|
302
|
+
const resolvedPath = getSafePath(superKitRoot, includePath);
|
|
303
|
+
if (resolvedPath) {
|
|
304
|
+
try {
|
|
305
|
+
const includeContent = await fs.readFile(resolvedPath, "utf-8");
|
|
306
|
+
promptText = promptText.replace(match[0], includeContent);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
promptText = promptText.replace(match[0], `[File not found: ${includePath}]`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
297
313
|
// Load SUPERKIT.md for systematic inclusion
|
|
298
314
|
const superKitPath = path.join(superKitRoot, "SUPERKIT.md");
|
|
299
315
|
const superKitContent = await fs.readFile(superKitPath, "utf-8");
|
|
300
316
|
return {
|
|
301
317
|
description: parsed?.description || `Loaded command: ${promptName}`,
|
|
302
318
|
messages: [
|
|
303
|
-
{
|
|
304
|
-
role: "system", // Try standard system role if supported by the client
|
|
305
|
-
content: {
|
|
306
|
-
type: "text",
|
|
307
|
-
text: superKitContent,
|
|
308
|
-
},
|
|
309
|
-
},
|
|
310
319
|
{
|
|
311
320
|
role: "user",
|
|
312
321
|
content: {
|
|
313
322
|
type: "text",
|
|
314
|
-
text: promptText
|
|
323
|
+
text: `[SYSTEM INSTRUCTIONS - Follow these strictly]\n\n${superKitContent}\n\n[USER TASK]\n\n${promptText}`,
|
|
315
324
|
},
|
|
316
325
|
},
|
|
317
326
|
],
|
|
@@ -17,7 +17,7 @@ describe('Logger Tools', () => {
|
|
|
17
17
|
vi.setSystemTime(new Date('2026-03-04T00:00:00Z'));
|
|
18
18
|
const result = await logSkill('test-skill', 'manual', 'context', tempDir);
|
|
19
19
|
expect(result).toBe('Successfully logged skill usage for test-skill');
|
|
20
|
-
const logFile = path.join(tempDir, '
|
|
20
|
+
const logFile = path.join(tempDir, 'docs', 'agents', 'logs', 'skill_usage.log');
|
|
21
21
|
const content = await fs.readFile(logFile, 'utf-8');
|
|
22
22
|
expect(content).toContain('2026-03-04T00:00:00Z|test-skill|manual|context\n');
|
|
23
23
|
vi.useRealTimers();
|
|
@@ -27,7 +27,7 @@ describe('Logger Tools', () => {
|
|
|
27
27
|
vi.setSystemTime(new Date('2026-03-04T00:00:00Z'));
|
|
28
28
|
const result = await logWorkflow('test-workflow', 'session-123', tempDir);
|
|
29
29
|
expect(result).toBe('Successfully logged workflow usage for test-workflow');
|
|
30
|
-
const logFile = path.join(tempDir, '
|
|
30
|
+
const logFile = path.join(tempDir, 'docs', 'agents', 'logs', 'workflow_usage.log');
|
|
31
31
|
const content = await fs.readFile(logFile, 'utf-8');
|
|
32
32
|
expect(content).toContain('2026-03-04T00:00:00Z|test-workflow|session-123\n');
|
|
33
33
|
vi.useRealTimers();
|
|
@@ -36,13 +36,13 @@ describe('Logger Tools', () => {
|
|
|
36
36
|
vi.useFakeTimers();
|
|
37
37
|
vi.setSystemTime(new Date('2026-03-04T00:00:00Z')); // 1772582400 in seconds
|
|
38
38
|
await logWorkflow('test-workflow', '', tempDir);
|
|
39
|
-
const logFile = path.join(tempDir, '
|
|
39
|
+
const logFile = path.join(tempDir, 'docs', 'agents', 'logs', 'workflow_usage.log');
|
|
40
40
|
const content = await fs.readFile(logFile, 'utf-8');
|
|
41
41
|
expect(content).toContain('2026-03-04T00:00:00Z|test-workflow|1772582400\n');
|
|
42
42
|
vi.useRealTimers();
|
|
43
43
|
});
|
|
44
44
|
it('should rotate logs older than retention days', async () => {
|
|
45
|
-
const logDir = path.join(tempDir, '
|
|
45
|
+
const logDir = path.join(tempDir, 'docs', 'agents', 'logs');
|
|
46
46
|
await fs.mkdir(logDir, { recursive: true });
|
|
47
47
|
// Old log line (e.g. 100 days old)
|
|
48
48
|
const oldTimestamp = new Date();
|
|
@@ -61,7 +61,7 @@ describe('Logger Tools', () => {
|
|
|
61
61
|
expect(finalContent).toContain('context2');
|
|
62
62
|
});
|
|
63
63
|
it('should report if no logs need rotation', async () => {
|
|
64
|
-
const logDir = path.join(tempDir, '
|
|
64
|
+
const logDir = path.join(tempDir, 'docs', 'agents', 'logs');
|
|
65
65
|
await fs.mkdir(logDir, { recursive: true });
|
|
66
66
|
const newTimestamp = new Date();
|
|
67
67
|
newTimestamp.setDate(newTimestamp.getDate() - 10);
|
package/build/tools/archTools.js
CHANGED
|
@@ -102,29 +102,16 @@ export async function validateArchitecture(projectPath = '.') {
|
|
|
102
102
|
};
|
|
103
103
|
const expSkills = getExpected('skills');
|
|
104
104
|
const expWorkflows = getExpected('workflows');
|
|
105
|
-
const expScripts = getExpected('scripts');
|
|
106
105
|
const expPatterns = getExpected('patterns');
|
|
107
|
-
let actSkills = 0, actWorkflows = 0,
|
|
106
|
+
let actSkills = 0, actWorkflows = 0, actPatterns = 0;
|
|
108
107
|
try {
|
|
109
108
|
actSkills = (await fs.readdir(path.join(projectPath, 'skills'))).length;
|
|
110
109
|
}
|
|
111
110
|
catch { }
|
|
112
111
|
try {
|
|
113
|
-
const wfs = await fs.readdir(path.join(projectPath, '
|
|
112
|
+
const wfs = await fs.readdir(path.join(projectPath, 'skills', 'workflows'));
|
|
114
113
|
actWorkflows = wfs.filter(f => f.endsWith('.md') && f !== 'README.md').length;
|
|
115
114
|
}
|
|
116
|
-
catch {
|
|
117
|
-
// Fallback to workflows/
|
|
118
|
-
try {
|
|
119
|
-
const wfs = await fs.readdir(path.join(projectPath, 'workflows'));
|
|
120
|
-
actWorkflows = wfs.filter(f => f.endsWith('.md') && f !== 'README.md').length;
|
|
121
|
-
}
|
|
122
|
-
catch { }
|
|
123
|
-
}
|
|
124
|
-
try {
|
|
125
|
-
const scripts = await fs.readdir(path.join(projectPath, 'scripts'));
|
|
126
|
-
actScripts = scripts.filter(f => f.endsWith('.sh') || f.endsWith('.js') || f.endsWith('.ts')).length;
|
|
127
|
-
}
|
|
128
115
|
catch { }
|
|
129
116
|
try {
|
|
130
117
|
const patternsCont = await fs.readFile(path.join(projectPath, 'docs/solutions/patterns/critical-patterns.md'), 'utf8');
|
|
@@ -141,10 +128,6 @@ export async function validateArchitecture(projectPath = '.') {
|
|
|
141
128
|
out += `❌ Workflows mismatch: Doc says ${expWorkflows}, Found ${actWorkflows}\n`;
|
|
142
129
|
fail = true;
|
|
143
130
|
}
|
|
144
|
-
if (actScripts !== expScripts) {
|
|
145
|
-
out += `❌ Scripts mismatch: Doc says ${expScripts}, Found ${actScripts}\n`;
|
|
146
|
-
fail = true;
|
|
147
|
-
}
|
|
148
131
|
if (actPatterns !== expPatterns) {
|
|
149
132
|
out += `❌ Patterns mismatch: Doc says ${expPatterns}, Found ${actPatterns}\n`;
|
|
150
133
|
fail = true;
|
|
@@ -2,12 +2,12 @@ import * as fs from 'fs/promises';
|
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { spawn, execSync } from 'child_process';
|
|
5
|
-
const AGENT_DIR = path.resolve('
|
|
5
|
+
const AGENT_DIR = path.resolve('docs', 'agents');
|
|
6
6
|
const PID_FILE = path.join(AGENT_DIR, 'preview.pid');
|
|
7
7
|
const LOG_FILE = path.join(AGENT_DIR, 'preview.log');
|
|
8
8
|
export async function manageAutoPreview(action, port = 3000) {
|
|
9
9
|
const root = path.resolve('.');
|
|
10
|
-
// Ensure
|
|
10
|
+
// Ensure docs/agents dir exists
|
|
11
11
|
if (!existsSync(AGENT_DIR)) {
|
|
12
12
|
await fs.mkdir(AGENT_DIR, { recursive: true });
|
|
13
13
|
}
|
|
@@ -4,8 +4,8 @@ export async function compoundSearch(terms, projectPath = '.') {
|
|
|
4
4
|
const searchDirs = ['docs/solutions', 'docs/explorations', 'docs/decisions'].map(d => path.join(projectPath, d));
|
|
5
5
|
// Log usage
|
|
6
6
|
const logLine = `${new Date().toISOString().replace(/\.[0-9]{3}Z$/, 'Z')}|compound-search|manual|${terms.join(',')}\n`;
|
|
7
|
-
await fs.mkdir(path.join(projectPath, '
|
|
8
|
-
await fs.appendFile(path.join(projectPath, '
|
|
7
|
+
await fs.mkdir(path.join(projectPath, 'docs', 'agents', 'logs'), { recursive: true });
|
|
8
|
+
await fs.appendFile(path.join(projectPath, 'docs', 'agents', 'logs', 'compound_usage.log'), logLine);
|
|
9
9
|
const results = new Set();
|
|
10
10
|
async function searchInDir(dir) {
|
|
11
11
|
try {
|
|
@@ -54,8 +54,8 @@ export async function updateSolutionRef(files, projectPath = '.') {
|
|
|
54
54
|
const today = new Date().toISOString().split('T')[0];
|
|
55
55
|
let count = 0;
|
|
56
56
|
const logLine = `${new Date().toISOString().replace(/\.[0-9]{3}Z$/, 'Z')}|update-solution-ref|manual|${files.join(',')}\n`;
|
|
57
|
-
await fs.mkdir(path.join(projectPath, '
|
|
58
|
-
await fs.appendFile(path.join(projectPath, '
|
|
57
|
+
await fs.mkdir(path.join(projectPath, 'docs', 'agents', 'logs'), { recursive: true });
|
|
58
|
+
await fs.appendFile(path.join(projectPath, 'docs', 'agents', 'logs', 'compound_usage.log'), logLine);
|
|
59
59
|
let output = '';
|
|
60
60
|
for (const file of files) {
|
|
61
61
|
const fullPath = path.resolve(projectPath, file);
|
package/build/tools/docsTools.js
CHANGED
|
@@ -66,14 +66,9 @@ export async function checkDocsFreshness(skipDocs = false, projectPath = '.') {
|
|
|
66
66
|
let warnings = 0;
|
|
67
67
|
let output = `🔍 Checking documentation freshness for: ${commitMsg}\n`;
|
|
68
68
|
const changedFiles = changedFilesStr.split('\n');
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
71
|
-
output += "⚠️
|
|
72
|
-
warnings++;
|
|
73
|
-
}
|
|
74
|
-
const newWorkflows = changedFiles.filter(f => f.startsWith('.agent/workflows/') && f !== '.agent/workflows/README.md');
|
|
75
|
-
if (newWorkflows.length > 0 && !changedFiles.includes('.agent/workflows/README.md')) {
|
|
76
|
-
output += "⚠️ Workflows modified but .agent/workflows/README.md not updated.\n";
|
|
69
|
+
const newWorkflows = changedFiles.filter(f => f.startsWith('skills/workflows/') && f !== 'skills/workflows/README.md');
|
|
70
|
+
if (newWorkflows.length > 0 && !changedFiles.includes('skills/workflows/README.md')) {
|
|
71
|
+
output += "⚠️ Workflows modified but skills/workflows/README.md not updated.\n";
|
|
77
72
|
warnings++;
|
|
78
73
|
}
|
|
79
74
|
const codeChanged = changedFiles.some(f => /^(src|components|lib|app)\//.test(f));
|
|
@@ -91,7 +86,7 @@ export async function checkDocsFreshness(skipDocs = false, projectPath = '.') {
|
|
|
91
86
|
return output;
|
|
92
87
|
}
|
|
93
88
|
export async function discoverUndocumentedFolders(projectPath = '.') {
|
|
94
|
-
const roots = ["app", "lib", "backend", "
|
|
89
|
+
const roots = ["app", "lib", "backend", "src"];
|
|
95
90
|
const exclusions = ["node_modules", "__pycache__", ".git", "__tests__", "archive", ".vercel", ".next", "dist"];
|
|
96
91
|
const undocumented = [];
|
|
97
92
|
async function scanDir(dir, depth) {
|
|
@@ -132,7 +127,7 @@ export async function discoverUndocumentedFolders(projectPath = '.') {
|
|
|
132
127
|
return "✅ All key folders have README documentation.";
|
|
133
128
|
}
|
|
134
129
|
export async function validateFolderDocs(strict = false, targetFolders = [], projectPath = '.') {
|
|
135
|
-
const coreFolders = ["src", "
|
|
130
|
+
const coreFolders = ["src", "docs/solutions", "docs/architecture", "skills/workflows", "agents"];
|
|
136
131
|
const foldersToCheck = targetFolders.length > 0 ? targetFolders : coreFolders;
|
|
137
132
|
let exitCode = 0;
|
|
138
133
|
let output = "🔍 Validating hierarchical documentation...\n";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs/promises';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
function getLogDir(projectPath = '.') {
|
|
4
|
-
return path.join(projectPath, '
|
|
4
|
+
return path.join(projectPath, 'docs', 'agents', 'logs');
|
|
5
5
|
}
|
|
6
6
|
export async function logSkill(skill, trigger = 'manual', context = '', projectPath = '.') {
|
|
7
7
|
// Format timestamp like 2026-03-04T00:12:42Z (ISO 8601 without milliseconds)
|