skillstore-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -0
- package/data/bundles/devflow-complete.json +19 -0
- package/data/free-skills/devflow-agile/manifest.json +19 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/retro.md +23 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/review.md +21 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/sprint.md +30 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile/standup.md +20 -0
- package/data/free-skills/devflow-agile/plugin/commands/agile.md +35 -0
- package/data/free-skills/devflow-agile/plugin/commands/devflow.md +42 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/SKILL.md +93 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/assets/sample-output.md +182 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-architecture.md +361 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-code-guide.md +207 -0
- package/data/free-skills/devflow-agile/plugin/skills/developer/references/debugging-methodology.md +191 -0
- package/data/free-skills/devflow-agile/template/agents/agile-coach.md +76 -0
- package/data/free-skills/devflow-agile/template/workflows/agile-sprint-workflow.md +81 -0
- package/data/free-skills/devflow-bootstrap/manifest.json +8 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap/auto.md +31 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap.md +38 -0
- package/data/free-skills/devflow-bootstrap/plugin/commands/devflow.md +20 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/SKILL.md +56 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/assets/sample-output.md +216 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/architecture-decisions.md +254 -0
- package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/stack-templates.md +400 -0
- package/data/free-skills/devflow-bootstrap/template/agents/bootstrap-specialist.md +56 -0
- package/data/free-skills/devflow-bootstrap/template/workflows/bootstrap-workflow.md +70 -0
- package/data/free-skills/devflow-docs/manifest.json +8 -0
- package/data/free-skills/devflow-docs/plugin/commands/devflow.md +20 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs/generate.md +17 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs/parse.md +19 -0
- package/data/free-skills/devflow-docs/plugin/commands/docs.md +26 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/SKILL.md +59 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/assets/sample-output.md +114 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/extraction-techniques.md +115 -0
- package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/ocr-strategies.md +167 -0
- package/data/free-skills/devflow-docs/template/agents/docs-specialist.md +35 -0
- package/data/free-skills/devflow-docs/template/workflows/docs-workflow.md +70 -0
- package/data/free-skills/devflow-postproject/manifest.json +13 -0
- package/data/free-skills/devflow-postproject/plugin/commands/devflow.md +34 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/handover.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/retro.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject/support.md +21 -0
- package/data/free-skills/devflow-postproject/plugin/commands/postproject.md +32 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/SKILL.md +70 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/assets/sample-output.md +79 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/facilitation-techniques.md +178 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/lessons-learned-template.md +118 -0
- package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/retro-techniques.md +100 -0
- package/data/free-skills/devflow-postproject/template/agents/transition-manager.md +71 -0
- package/data/free-skills/devflow-postproject/template/workflows/transition-workflow.md +72 -0
- package/data/free-skills/devflow-presale/manifest.json +15 -0
- package/data/free-skills/devflow-presale/plugin/commands/devflow.md +47 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/analyze.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/estimate.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/price.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale/propose.md +30 -0
- package/data/free-skills/devflow-presale/plugin/commands/presale.md +42 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/SKILL.md +63 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/assets/sample-output.md +129 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/extraction-framework.md +140 -0
- package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/output-template.md +132 -0
- package/data/free-skills/devflow-presale/template/agents/presale-lead.md +83 -0
- package/data/free-skills/devflow-presale/template/agents/proposal-reviewer.md +63 -0
- package/data/free-skills/devflow-presale/template/workflows/presale-workflow.md +70 -0
- package/data/registry/categories.json +7 -0
- package/data/registry/packages.json +184 -0
- package/data/shared/framework/agents/brainstormer.md +74 -0
- package/data/shared/framework/agents/code-reviewer.md +87 -0
- package/data/shared/framework/agents/debugger.md +84 -0
- package/data/shared/framework/agents/docs-manager.md +55 -0
- package/data/shared/framework/agents/git-manager.md +59 -0
- package/data/shared/framework/agents/planner.md +68 -0
- package/data/shared/framework/agents/researcher.md +66 -0
- package/data/shared/framework/agents/tester.md +65 -0
- package/data/shared/framework/commands/cook/auto.md +27 -0
- package/data/shared/framework/commands/cook.md +45 -0
- package/data/shared/framework/commands/fix/ci.md +21 -0
- package/data/shared/framework/commands/fix/test.md +26 -0
- package/data/shared/framework/commands/fix/types.md +29 -0
- package/data/shared/framework/commands/fix.md +26 -0
- package/data/shared/framework/commands/git/cm.md +37 -0
- package/data/shared/framework/commands/git/pr.md +40 -0
- package/data/shared/framework/config/CLAUDE.md.template +26 -0
- package/data/shared/framework/config/settings.json +41 -0
- package/data/shared/framework/config/skillstore.config.json +29 -0
- package/data/shared/framework/hooks/discord-notify.sh +85 -0
- package/data/shared/framework/hooks/docs-sync.sh +53 -0
- package/data/shared/framework/hooks/modularization-hook.js +103 -0
- package/data/shared/framework/hooks/notification.js +94 -0
- package/data/shared/framework/hooks/quality-gate.js +109 -0
- package/data/shared/framework/hooks/scout-block.js +77 -0
- package/data/shared/framework/hooks/telegram-notify.sh +77 -0
- package/data/shared/framework/protocols/error-recovery.md +80 -0
- package/data/shared/framework/protocols/orchestration-protocol.md +112 -0
- package/data/shared/framework/quality/review-protocol.md +76 -0
- package/data/shared/framework/quality/verification-protocol.md +66 -0
- package/data/shared/framework/rules/development-rules.md +75 -0
- package/data/shared/framework/skills/backend-development/SKILL.md +77 -0
- package/data/shared/framework/skills/backend-development/assets/sample-output.md +175 -0
- package/data/shared/framework/skills/backend-development/references/advanced-patterns.md +180 -0
- package/data/shared/framework/skills/backend-development/references/api-design-guide.md +160 -0
- package/data/shared/framework/skills/backend-development/references/architecture-patterns.md +183 -0
- package/data/shared/framework/skills/backend-development/references/observability-resilience.md +155 -0
- package/data/shared/framework/skills/backend-development/references/troubleshooting.md +199 -0
- package/data/shared/framework/skills/codebase-analysis/SKILL.md +72 -0
- package/data/shared/framework/skills/codebase-analysis/assets/sample-output.md +263 -0
- package/data/shared/framework/skills/codebase-analysis/references/analysis-techniques.md +241 -0
- package/data/shared/framework/skills/codebase-analysis/references/dependency-mapping.md +280 -0
- package/data/shared/framework/skills/codebase-analysis/references/tech-debt-assessment.md +208 -0
- package/data/shared/framework/skills/databases/SKILL.md +72 -0
- package/data/shared/framework/skills/databases/assets/sample-output.md +212 -0
- package/data/shared/framework/skills/databases/references/advanced-data-patterns.md +259 -0
- package/data/shared/framework/skills/databases/references/query-optimization.md +214 -0
- package/data/shared/framework/skills/databases/references/schema-design.md +159 -0
- package/data/shared/framework/skills/databases/references/troubleshooting.md +214 -0
- package/data/shared/framework/skills/debugging-investigation/SKILL.md +84 -0
- package/data/shared/framework/skills/debugging-investigation/assets/sample-output.md +314 -0
- package/data/shared/framework/skills/debugging-investigation/references/systematic-debugging.md +197 -0
- package/data/shared/framework/skills/debugging-investigation/references/tool-specific-guides.md +202 -0
- package/data/shared/framework/skills/debugging-investigation/references/troubleshooting-patterns.md +196 -0
- package/data/shared/framework/skills/frontend-development/SKILL.md +67 -0
- package/data/shared/framework/skills/frontend-development/assets/sample-output.md +110 -0
- package/data/shared/framework/skills/frontend-development/references/component-patterns.md +112 -0
- package/data/shared/framework/skills/frontend-development/references/performance-guide.md +169 -0
- package/data/shared/framework/skills/frontend-development/references/routing-forms-realtime.md +374 -0
- package/data/shared/framework/skills/frontend-development/references/ssr-rsc-patterns.md +284 -0
- package/data/shared/framework/skills/frontend-development/references/troubleshooting.md +154 -0
- package/data/shared/framework/skills/mobile-development/SKILL.md +67 -0
- package/data/shared/framework/skills/mobile-development/assets/sample-output.md +382 -0
- package/data/shared/framework/skills/mobile-development/references/mobile-patterns.md +681 -0
- package/data/shared/framework/skills/mobile-development/references/mobile-performance.md +524 -0
- package/data/shared/framework/skills/mobile-development/references/troubleshooting.md +158 -0
- package/data/shared/framework/skills/security-audit/SKILL.md +83 -0
- package/data/shared/framework/skills/security-audit/assets/sample-output.md +451 -0
- package/data/shared/framework/skills/security-audit/references/owasp-checklist.md +580 -0
- package/data/shared/framework/skills/security-audit/references/secure-coding-patterns.md +433 -0
- package/data/shared/framework/skills/security-audit/references/vulnerability-remediation.md +331 -0
- package/data/shared/framework/skills/ui-generation/SKILL.md +70 -0
- package/data/shared/framework/skills/ui-generation/assets/sample-output.md +139 -0
- package/data/shared/framework/skills/ui-generation/references/accessibility-responsive.md +127 -0
- package/data/shared/framework/skills/ui-generation/references/compound-components.md +252 -0
- package/data/shared/framework/skills/ui-generation/references/generation-patterns.md +110 -0
- package/data/shared/framework/skills/ui-generation/references/storybook-design-system.md +278 -0
- package/data/shared/framework/skills/ui-generation/references/troubleshooting.md +198 -0
- package/data/shared/framework/workflows/documentation-management.md +58 -0
- package/data/shared/framework/workflows/primary-workflow.md +88 -0
- package/dist/commands/activate.d.ts +3 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +34 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/bundle.d.ts +3 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +64 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +99 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +37 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +30 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +35 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +68 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/download/cache.d.ts +3 -0
- package/dist/download/cache.d.ts.map +1 -0
- package/dist/download/cache.js +18 -0
- package/dist/download/cache.js.map +1 -0
- package/dist/download/client.d.ts +2 -0
- package/dist/download/client.d.ts.map +1 -0
- package/dist/download/client.js +58 -0
- package/dist/download/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/file-copier.d.ts +6 -0
- package/dist/installer/file-copier.d.ts.map +1 -0
- package/dist/installer/file-copier.js +32 -0
- package/dist/installer/file-copier.js.map +1 -0
- package/dist/installer/plugin-installer.d.ts +12 -0
- package/dist/installer/plugin-installer.d.ts.map +1 -0
- package/dist/installer/plugin-installer.js +33 -0
- package/dist/installer/plugin-installer.js.map +1 -0
- package/dist/installer/template-installer.d.ts +12 -0
- package/dist/installer/template-installer.d.ts.map +1 -0
- package/dist/installer/template-installer.js +45 -0
- package/dist/installer/template-installer.js.map +1 -0
- package/dist/license/crypto.d.ts +16 -0
- package/dist/license/crypto.d.ts.map +1 -0
- package/dist/license/crypto.js +50 -0
- package/dist/license/crypto.js.map +1 -0
- package/dist/license/license-store.d.ts +19 -0
- package/dist/license/license-store.d.ts.map +1 -0
- package/dist/license/license-store.js +99 -0
- package/dist/license/license-store.js.map +1 -0
- package/dist/license/validator.d.ts +32 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +81 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/registry/loader.d.ts +30 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +22 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/search-engine.d.ts +9 -0
- package/dist/registry/search-engine.d.ts.map +1 -0
- package/dist/registry/search-engine.js +30 -0
- package/dist/registry/search-engine.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +28 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +20 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +79 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# UI Generation Troubleshooting Guide
|
|
2
|
+
|
|
3
|
+
## Generated Component Not Matching Design
|
|
4
|
+
|
|
5
|
+
**Iteration strategies when output diverges from intent:**
|
|
6
|
+
|
|
7
|
+
1. **Visual diff analysis** — Screenshot the generated component, overlay on the design in Figma/browser DevTools.
|
|
8
|
+
- Identify specific gaps: spacing, font size, color, border radius, alignment.
|
|
9
|
+
- Provide concrete pixel/token corrections rather than vague "make it look right".
|
|
10
|
+
|
|
11
|
+
2. **Incremental refinement approach:**
|
|
12
|
+
- Start with layout structure (flexbox/grid) — get the skeleton right first.
|
|
13
|
+
- Then layer in typography and spacing (use design tokens, not raw values).
|
|
14
|
+
- Then colors and decorative properties.
|
|
15
|
+
- Finally interactive states (hover, focus, active, disabled).
|
|
16
|
+
|
|
17
|
+
3. **Reference-driven generation:**
|
|
18
|
+
- Provide a similar existing component as reference: "Match the card layout of ProductCard but with these differences..."
|
|
19
|
+
- Include design token names: "Use `--spacing-md` not `16px`".
|
|
20
|
+
- Specify breakpoint behavior explicitly if responsive layout matters.
|
|
21
|
+
|
|
22
|
+
4. **Validation checklist after generation:**
|
|
23
|
+
- [ ] Padding/margin matches design spec (within 2px tolerance).
|
|
24
|
+
- [ ] Typography uses correct font family, weight, size, line-height.
|
|
25
|
+
- [ ] Colors reference design tokens, not hardcoded hex values.
|
|
26
|
+
- [ ] Interactive states are implemented (hover, focus, disabled).
|
|
27
|
+
- [ ] Component handles edge cases: empty state, overflow text, loading state.
|
|
28
|
+
|
|
29
|
+
## Accessibility Audit Failures (WCAG)
|
|
30
|
+
|
|
31
|
+
**Common violations and fixes:**
|
|
32
|
+
|
|
33
|
+
1. **Missing alt text (WCAG 1.1.1):**
|
|
34
|
+
- Fix: Add `alt` to all `<img>`. Decorative images: `alt=""` and `role="presentation"`.
|
|
35
|
+
- Audit: `document.querySelectorAll('img:not([alt])')`.
|
|
36
|
+
|
|
37
|
+
2. **Insufficient color contrast (WCAG 1.4.3):**
|
|
38
|
+
- Minimum ratios: 4.5:1 normal text, 3:1 large text (18px+ or 14px bold).
|
|
39
|
+
- Fix: Use contrast checker: Chrome DevTools → color picker shows ratio.
|
|
40
|
+
- For generated components: validate all text/background pairs against tokens.
|
|
41
|
+
|
|
42
|
+
3. **Missing form labels (WCAG 1.3.1):**
|
|
43
|
+
- Every `<input>` needs an associated `<label>` (via `htmlFor`/`id` or wrapping).
|
|
44
|
+
- Fix: `<label htmlFor="email">Email</label><input id="email" />`.
|
|
45
|
+
- For icon-only buttons: add `aria-label="Close dialog"`.
|
|
46
|
+
|
|
47
|
+
4. **Keyboard navigation broken (WCAG 2.1.1):**
|
|
48
|
+
- All interactive elements must be reachable via Tab and operable via Enter/Space.
|
|
49
|
+
- Fix: Use semantic HTML (`<button>`, `<a>`, `<input>`) instead of `<div onClick>`.
|
|
50
|
+
- Custom components: add `tabIndex={0}`, `role="button"`, `onKeyDown` handler.
|
|
51
|
+
|
|
52
|
+
5. **Missing focus indicators (WCAG 2.4.7):**
|
|
53
|
+
- Fix: Never set `outline: none` without a visible replacement.
|
|
54
|
+
- Use `focus-visible` for keyboard-only focus rings: `:focus-visible { outline: 2px solid var(--color-focus); }`.
|
|
55
|
+
|
|
56
|
+
**Automated audit command:**
|
|
57
|
+
```bash
|
|
58
|
+
# Install and run axe-core
|
|
59
|
+
npx @axe-core/cli http://localhost:3000/page
|
|
60
|
+
# Or in browser: axe DevTools extension
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Responsive Breakpoint Issues
|
|
64
|
+
|
|
65
|
+
**Debugging workflow:**
|
|
66
|
+
1. Open DevTools → Toggle device toolbar → test each breakpoint.
|
|
67
|
+
2. Check for horizontal overflow: `document.documentElement.scrollWidth > document.documentElement.clientWidth`.
|
|
68
|
+
3. Identify the breaking element: add `* { outline: 1px solid red; }` temporarily.
|
|
69
|
+
|
|
70
|
+
**Common issues:**
|
|
71
|
+
1. **Fixed widths inside flex containers** — Element has `width: 400px` that exceeds viewport on mobile.
|
|
72
|
+
- Fix: Use `max-width: 100%` or relative units.
|
|
73
|
+
2. **Missing viewport meta tag** — `<meta name="viewport" content="width=device-width, initial-scale=1">`.
|
|
74
|
+
3. **Breakpoint gaps** — Styles defined for `>768px` and `<480px` but nothing in between.
|
|
75
|
+
- Fix: Use mobile-first approach: base styles for mobile, `min-width` queries for larger.
|
|
76
|
+
4. **Images not responsive** — Fixed dimensions on `<img>`.
|
|
77
|
+
- Fix: `img { max-width: 100%; height: auto; }`.
|
|
78
|
+
|
|
79
|
+
**Breakpoint testing checklist:**
|
|
80
|
+
- [ ] 320px (small phone)
|
|
81
|
+
- [ ] 375px (standard phone)
|
|
82
|
+
- [ ] 768px (tablet portrait)
|
|
83
|
+
- [ ] 1024px (tablet landscape / small desktop)
|
|
84
|
+
- [ ] 1280px+ (desktop)
|
|
85
|
+
|
|
86
|
+
## Dark Mode Inconsistencies
|
|
87
|
+
|
|
88
|
+
**Token coverage checklist:**
|
|
89
|
+
1. **Enumerate all color tokens** — Every color must have a dark mode counterpart.
|
|
90
|
+
```css
|
|
91
|
+
:root { --bg-primary: #ffffff; --text-primary: #1a1a1a; }
|
|
92
|
+
[data-theme="dark"] { --bg-primary: #1a1a1a; --text-primary: #e5e5e5; }
|
|
93
|
+
```
|
|
94
|
+
2. **Hardcoded colors** — Search for any hex/rgb values not using tokens.
|
|
95
|
+
- Audit: Search codebase for `#[0-9a-f]{3,8}` or `rgb(` outside of token definitions.
|
|
96
|
+
3. **Shadows and borders** — Often forgotten in dark mode. Dark shadows on dark backgrounds are invisible.
|
|
97
|
+
- Fix: Use lighter shadows or subtle borders in dark mode.
|
|
98
|
+
4. **Images and icons** — SVG icons using `currentColor` adapt automatically. Raster images may need dark variants.
|
|
99
|
+
- Fix: Use `filter: invert(1)` for simple icons, or provide separate dark assets.
|
|
100
|
+
5. **Third-party components** — Libraries may not respect your theme tokens.
|
|
101
|
+
- Fix: Override library CSS variables or wrap in a themed container.
|
|
102
|
+
|
|
103
|
+
**Testing approach:**
|
|
104
|
+
- Toggle between modes rapidly to catch elements that flash or don't transition.
|
|
105
|
+
- Check in both modes: form inputs, modals, tooltips, dropdowns (easily missed).
|
|
106
|
+
|
|
107
|
+
## Cross-Browser Rendering Differences
|
|
108
|
+
|
|
109
|
+
**Common discrepancies and fixes:**
|
|
110
|
+
|
|
111
|
+
1. **Safari flexbox bugs** — `flex-basis: auto` behaves differently; `gap` in flexbox not supported in older Safari.
|
|
112
|
+
- Fix: Use explicit `flex` shorthand, use margin instead of `gap` for broader support.
|
|
113
|
+
2. **Firefox font rendering** — Fonts appear thinner/different weight.
|
|
114
|
+
- Fix: Use `-moz-osx-font-smoothing: grayscale` for consistency.
|
|
115
|
+
3. **CSS Grid in older browsers** — Partial support for features like `subgrid`.
|
|
116
|
+
- Fix: Use `@supports (grid-template-rows: subgrid)` for progressive enhancement.
|
|
117
|
+
4. **Scrollbar styling** — `::-webkit-scrollbar` only works in Chromium/Safari.
|
|
118
|
+
- Fix: Use `scrollbar-width` and `scrollbar-color` for Firefox, keep webkit prefix for others.
|
|
119
|
+
|
|
120
|
+
**Testing approach:**
|
|
121
|
+
```bash
|
|
122
|
+
# Quick cross-browser testing
|
|
123
|
+
npx playwright test --project=chromium --project=firefox --project=webkit
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## TypeScript Type Errors in Generated Components
|
|
127
|
+
|
|
128
|
+
**Common errors and fixes:**
|
|
129
|
+
|
|
130
|
+
1. **Props type mismatch** — Component expects `string` but receives `string | undefined`.
|
|
131
|
+
- Fix: Add optional chaining in JSX or provide default value in destructuring.
|
|
132
|
+
2. **Event handler types** — `(e: any)` loses type safety.
|
|
133
|
+
- Fix: Use specific types: `React.ChangeEvent<HTMLInputElement>`, `React.MouseEvent<HTMLButtonElement>`.
|
|
134
|
+
3. **Ref typing** — `useRef` returns wrong type.
|
|
135
|
+
- Fix: `const ref = useRef<HTMLDivElement>(null)` — specify the element type.
|
|
136
|
+
4. **Children prop missing** — `Type '{ children: Element; }' is not assignable`.
|
|
137
|
+
- Fix: Use `React.PropsWithChildren<MyProps>` or add `children: React.ReactNode` to props.
|
|
138
|
+
5. **Generic component constraints** — Generated generic components lack proper bounds.
|
|
139
|
+
- Fix: `<T extends Record<string, unknown>>` instead of `<T>` for object props.
|
|
140
|
+
|
|
141
|
+
**Quick type check:**
|
|
142
|
+
```bash
|
|
143
|
+
npx tsc --noEmit --pretty
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## CSS-in-JS Hydration Mismatches
|
|
147
|
+
|
|
148
|
+
**Symptoms:** Flash of unstyled content (FOUC), className mismatch warnings, styles missing on first render.
|
|
149
|
+
|
|
150
|
+
**Causes and fixes by library:**
|
|
151
|
+
|
|
152
|
+
1. **styled-components / Emotion:**
|
|
153
|
+
- Server and client generate different class names due to different insertion order.
|
|
154
|
+
- Fix: Configure SSR style extraction. For styled-components: use `ServerStyleSheet` in `_document.tsx`.
|
|
155
|
+
- Fix: For Emotion with Next.js: use `@emotion/cache` + `CacheProvider` in app wrapper.
|
|
156
|
+
|
|
157
|
+
2. **CSS Modules with dynamic imports:**
|
|
158
|
+
- Styles load after component renders, causing flash.
|
|
159
|
+
- Fix: Ensure CSS is imported at the top level, not inside dynamic import boundaries.
|
|
160
|
+
|
|
161
|
+
3. **Tailwind CSS with SSR:**
|
|
162
|
+
- Purged classes differ between server and client builds.
|
|
163
|
+
- Fix: Ensure `content` paths in `tailwind.config.js` cover all template files consistently.
|
|
164
|
+
|
|
165
|
+
## Z-Index Stacking Context Issues
|
|
166
|
+
|
|
167
|
+
**Symptoms:** Modal appears behind overlay, dropdown hidden by sibling, tooltip clipped.
|
|
168
|
+
|
|
169
|
+
**Diagnosis:**
|
|
170
|
+
1. Open DevTools → select the hidden element → check its stacking context.
|
|
171
|
+
2. An element creates a new stacking context when it has: `position` + `z-index`, `opacity < 1`, `transform`, `filter`, `will-change`, `isolation: isolate`.
|
|
172
|
+
3. Z-index only competes within the same stacking context — a `z-index: 9999` inside a low-context parent won't beat `z-index: 1` in a higher context.
|
|
173
|
+
|
|
174
|
+
**Fix patterns:**
|
|
175
|
+
1. **Use a z-index token scale** — Define levels in design tokens:
|
|
176
|
+
```css
|
|
177
|
+
--z-dropdown: 100;
|
|
178
|
+
--z-sticky: 200;
|
|
179
|
+
--z-modal-backdrop: 300;
|
|
180
|
+
--z-modal: 400;
|
|
181
|
+
--z-popover: 500;
|
|
182
|
+
--z-toast: 600;
|
|
183
|
+
```
|
|
184
|
+
2. **Portal for modals/tooltips** — Render in a top-level DOM node outside the component tree to escape stacking contexts. Use `createPortal` in React.
|
|
185
|
+
3. **Avoid unnecessary stacking contexts** — Don't add `transform: translateZ(0)` or `will-change` without reason; they create new contexts.
|
|
186
|
+
4. **`isolation: isolate`** — Use on component root to contain z-index within component scope without leaking.
|
|
187
|
+
|
|
188
|
+
**Audit stacking contexts:**
|
|
189
|
+
```javascript
|
|
190
|
+
// Log all stacking context creators on the page
|
|
191
|
+
document.querySelectorAll('*').forEach(el => {
|
|
192
|
+
const style = getComputedStyle(el);
|
|
193
|
+
if (style.zIndex !== 'auto' || parseFloat(style.opacity) < 1 ||
|
|
194
|
+
style.transform !== 'none' || style.filter !== 'none') {
|
|
195
|
+
console.log(el, 'z-index:', style.zIndex, 'opacity:', style.opacity);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Documentation Management
|
|
2
|
+
|
|
3
|
+
Process for keeping documentation in sync with the codebase.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Documentation Structure
|
|
8
|
+
|
|
9
|
+
Standard docs in `docs/`:
|
|
10
|
+
|
|
11
|
+
| File | Content | Update when |
|
|
12
|
+
|------|---------|-------------|
|
|
13
|
+
| `architecture.md` | System architecture, components, data flow | Adding/modifying components, new integrations |
|
|
14
|
+
| `setup.md` | Local dev setup, environment requirements | Adding dependencies, env vars, tools |
|
|
15
|
+
| `deployment.md` | Deploy process, environments, rollback | Changing CI/CD, infrastructure |
|
|
16
|
+
| `api.md` | API documentation | Adding/modifying endpoints |
|
|
17
|
+
| `changelog.md` | Version history | Each release/feature/bugfix |
|
|
18
|
+
|
|
19
|
+
## Auto-Update Triggers
|
|
20
|
+
|
|
21
|
+
### Required updates
|
|
22
|
+
- New feature implemented → `architecture.md` + `changelog.md`
|
|
23
|
+
- API endpoint added/modified → `api.md`
|
|
24
|
+
- Environment variable added → `setup.md`
|
|
25
|
+
- Deployment process changed → `deployment.md`
|
|
26
|
+
|
|
27
|
+
### Recommended updates
|
|
28
|
+
- Important bug fix → `changelog.md`
|
|
29
|
+
- Dependency upgrade → `changelog.md`
|
|
30
|
+
- Configuration change → `setup.md`
|
|
31
|
+
|
|
32
|
+
### No update needed
|
|
33
|
+
- Refactoring with no behavior change
|
|
34
|
+
- Code style/formatting changes
|
|
35
|
+
- Test-only changes
|
|
36
|
+
|
|
37
|
+
## Update Protocol
|
|
38
|
+
|
|
39
|
+
1. **Check existing docs** — Read related files
|
|
40
|
+
2. **Identify sections to update** — Only modify affected parts
|
|
41
|
+
3. **Update incrementally** — DO NOT rewrite entirely
|
|
42
|
+
4. **Verify links** — Ensure references remain valid
|
|
43
|
+
5. **Keep concise** — Bullet points > paragraphs
|
|
44
|
+
|
|
45
|
+
## Staleness Detection
|
|
46
|
+
|
|
47
|
+
Docs need review if:
|
|
48
|
+
- Doc file not updated in > 30 days but source code has changed
|
|
49
|
+
- Git log shows many commits but no docs update
|
|
50
|
+
- Hook `docs-sync.sh` detects code change without docs change
|
|
51
|
+
|
|
52
|
+
## Quality Standards
|
|
53
|
+
|
|
54
|
+
- Docs must allow a NEW developer to understand and contribute
|
|
55
|
+
- Each doc file < 500 lines (split if larger)
|
|
56
|
+
- Use relative links for file references
|
|
57
|
+
- Code examples only when needed for clarification (not as filler)
|
|
58
|
+
- Keep tone concise, technical, actionable
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Primary Workflow
|
|
2
|
+
|
|
3
|
+
Mandatory development process — 5 sequential steps with quality gates.
|
|
4
|
+
|
|
5
|
+
**Reference:** `rules/development-rules.md` | `protocols/orchestration-protocol.md` | `protocols/error-recovery.md`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Step 1: Plan
|
|
10
|
+
|
|
11
|
+
**Agent:** `planner`
|
|
12
|
+
**Required:** Yes — do not implement without a plan.
|
|
13
|
+
|
|
14
|
+
- Analyze requirements, research codebase
|
|
15
|
+
- Create plan with task breakdown
|
|
16
|
+
- Review plan with user before proceeding
|
|
17
|
+
- **Skip if:** User provides a clear plan or task is simple (< 30 minutes)
|
|
18
|
+
|
|
19
|
+
## Step 2: Implement
|
|
20
|
+
|
|
21
|
+
**Agent:** Main agent or role-specific agent
|
|
22
|
+
**Input:** Plan from Step 1
|
|
23
|
+
|
|
24
|
+
- Implement according to plan, one task at a time
|
|
25
|
+
- After each task: run build/compile to verify syntax
|
|
26
|
+
- DO NOT create new files when existing files can be edited
|
|
27
|
+
- DO NOT implement outside the scope of the plan
|
|
28
|
+
- Commit after each task is complete (if user agrees)
|
|
29
|
+
|
|
30
|
+
## Step 3: Test
|
|
31
|
+
|
|
32
|
+
**Agent:** `tester`
|
|
33
|
+
**Required:** Yes — do not skip testing.
|
|
34
|
+
|
|
35
|
+
- Run existing test suite (regression check)
|
|
36
|
+
- Verify test coverage for new code
|
|
37
|
+
- If test fails:
|
|
38
|
+
- Attempt 1: Fix code based on test output
|
|
39
|
+
- Attempt 2: Check if the test itself is wrong
|
|
40
|
+
- Attempt 3: Escalate to user (per `error-recovery.md`)
|
|
41
|
+
- DO NOT use fake data, mocks, or tricks to pass tests
|
|
42
|
+
|
|
43
|
+
## Step 4: Review
|
|
44
|
+
|
|
45
|
+
**Agent:** `code-reviewer`
|
|
46
|
+
**Required:** Yes when config.strictness >= "balanced"
|
|
47
|
+
|
|
48
|
+
- Review code quality, security, performance
|
|
49
|
+
- Check task completeness (all TODOs done?)
|
|
50
|
+
- If critical issues:
|
|
51
|
+
- Return to Step 2 to fix
|
|
52
|
+
- Then Step 3 again
|
|
53
|
+
- Loop max 2 times, then escalate
|
|
54
|
+
|
|
55
|
+
## Step 5: Document
|
|
56
|
+
|
|
57
|
+
**Agent:** `docs-manager`
|
|
58
|
+
**Required:** When there are API changes, architecture changes, or new features
|
|
59
|
+
|
|
60
|
+
- Update related docs
|
|
61
|
+
- Update changelog if applicable
|
|
62
|
+
- Not required for minor bugfixes
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Workflow Diagram
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Plan → Implement → Test → Review → Document
|
|
70
|
+
↑ |
|
|
71
|
+
└── Fix ──┘ (max 2 loops)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Quality Gates
|
|
75
|
+
|
|
76
|
+
| Gate | Pass condition |
|
|
77
|
+
|------|---------------|
|
|
78
|
+
| After Plan | User approves plan |
|
|
79
|
+
| After Implement | Build passes, no syntax errors |
|
|
80
|
+
| After Test | All tests pass |
|
|
81
|
+
| After Review | No critical issues, or issues fixed |
|
|
82
|
+
| After Document | Docs updated for significant changes |
|
|
83
|
+
|
|
84
|
+
## Override Rules
|
|
85
|
+
|
|
86
|
+
- User can skip any step by explicitly stating so
|
|
87
|
+
- Simple fixes (< 10 LOC): can skip Plan and Review
|
|
88
|
+
- Hotfixes: can skip Document (but create a TODO to update later)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activate.d.ts","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SA+BxB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { activateLicense } from "../license/license-store.js";
|
|
4
|
+
import { logger } from "../utils/logger.js";
|
|
5
|
+
export const activateCommand = new Command("activate")
|
|
6
|
+
.description("Activate a license key")
|
|
7
|
+
.argument("<license-key>", "License key (format: SS-TIER-HASH-TS-SIG)")
|
|
8
|
+
.action(async (licenseKey) => {
|
|
9
|
+
logger.info("Validating license key...");
|
|
10
|
+
const result = await activateLicense(licenseKey);
|
|
11
|
+
if (result.success) {
|
|
12
|
+
logger.success(result.message);
|
|
13
|
+
if (result.tier) {
|
|
14
|
+
console.log(chalk.dim(`Tier: ${chalk.bold(result.tier)}`));
|
|
15
|
+
switch (result.tier) {
|
|
16
|
+
case "FREE":
|
|
17
|
+
console.log(chalk.dim("Access: Free preview skills only"));
|
|
18
|
+
break;
|
|
19
|
+
case "SINGLE":
|
|
20
|
+
console.log(chalk.dim("Access: All skills in licensed package"));
|
|
21
|
+
break;
|
|
22
|
+
case "BUNDLE":
|
|
23
|
+
console.log(chalk.dim("Access: All skills in all packages"));
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
logger.error(result.message);
|
|
30
|
+
console.log(chalk.dim("\nFormat: SS-{TIER}-{HASH}-{TIMESTAMP}-{SIGNATURE}"));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=activate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,eAAe,EAAE,2CAA2C,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,EAAE;IACnC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,MAAM;oBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;oBACjE,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;oBAC7D,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAChE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,aAAa,SA6DtB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import fse from "fs-extra";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { getPackage } from "../registry/loader.js";
|
|
7
|
+
import { installPlugin } from "../installer/plugin-installer.js";
|
|
8
|
+
import { installTemplate } from "../installer/template-installer.js";
|
|
9
|
+
import { logger } from "../utils/logger.js";
|
|
10
|
+
import { getBundlesPath, isNpmMode } from "../utils/paths.js";
|
|
11
|
+
import { downloadPackage } from "../download/client.js";
|
|
12
|
+
import { loadLicenseStore } from "../license/license-store.js";
|
|
13
|
+
export const bundleCommand = new Command("install-bundle")
|
|
14
|
+
.description("Install a bundle of skill packages")
|
|
15
|
+
.argument("<bundle>", "Bundle name (e.g., devflow-complete)")
|
|
16
|
+
.option("--as-plugin", "Install all as plugin")
|
|
17
|
+
.option("--as-template", "Install all as template")
|
|
18
|
+
.option("-d, --dir <dir>", "Target project directory", process.cwd())
|
|
19
|
+
.action(async (bundleName, opts) => {
|
|
20
|
+
const bundlePath = join(getBundlesPath(), `${bundleName}.json`);
|
|
21
|
+
if (!(await fse.pathExists(bundlePath))) {
|
|
22
|
+
logger.error(`Bundle "${bundleName}" not found.`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const bundle = await fse.readJson(bundlePath);
|
|
26
|
+
const mode = opts.asTemplate ? "template" : "plugin";
|
|
27
|
+
console.log(chalk.bold(`\nInstalling bundle: ${bundle.displayName}\n`));
|
|
28
|
+
console.log(chalk.dim(`Packages: ${bundle.packages.join(", ")}`));
|
|
29
|
+
console.log(chalk.dim(`Mode: ${mode}\n`));
|
|
30
|
+
for (const pkgName of bundle.packages) {
|
|
31
|
+
const name = pkgName.replace("@skillstore/", "");
|
|
32
|
+
const pkg = await getPackage(pkgName);
|
|
33
|
+
if (!pkg) {
|
|
34
|
+
logger.warn(`Package ${pkgName} not found, skipping.`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Download from Supabase if in npm mode
|
|
38
|
+
let sourceDir;
|
|
39
|
+
if (isNpmMode()) {
|
|
40
|
+
const store = await loadLicenseStore();
|
|
41
|
+
if (store.licenses.length > 0) {
|
|
42
|
+
const license = store.licenses.find((l) => l.tier === "BUNDLE") ||
|
|
43
|
+
store.licenses[0];
|
|
44
|
+
const spinner = ora(`Downloading ${name}...`).start();
|
|
45
|
+
try {
|
|
46
|
+
sourceDir = await downloadPackage(name, pkg.version, license.key);
|
|
47
|
+
spinner.succeed(`Downloaded ${name}`);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
spinner.fail(`Download failed: ${err.message}`);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const result = mode === "plugin"
|
|
56
|
+
? await installPlugin(name, opts.dir, sourceDir)
|
|
57
|
+
: await installTemplate(name, opts.dir, sourceDir);
|
|
58
|
+
if (result.success) {
|
|
59
|
+
logger.success(`${pkg.displayName}: ${result.message}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
console.log(chalk.bold.green("\nBundle installation complete!\n"));
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,SA4HvB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import { getPackage } from "../registry/loader.js";
|
|
5
|
+
import { installPlugin } from "../installer/plugin-installer.js";
|
|
6
|
+
import { installTemplate } from "../installer/template-installer.js";
|
|
7
|
+
import { addInstalledPackage } from "../utils/config.js";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
9
|
+
import { checkPackageAccess } from "../license/validator.js";
|
|
10
|
+
import { isNpmMode } from "../utils/paths.js";
|
|
11
|
+
import { downloadPackage } from "../download/client.js";
|
|
12
|
+
import { loadLicenseStore } from "../license/license-store.js";
|
|
13
|
+
export const installCommand = new Command("install")
|
|
14
|
+
.description("Install a skill package into your project")
|
|
15
|
+
.argument("<package>", "Package name (e.g., devflow-presale)")
|
|
16
|
+
.option("--as-plugin", "Install as plugin (skills + commands only)")
|
|
17
|
+
.option("--as-template", "Install as template (agents + skills + commands + workflows)")
|
|
18
|
+
.option("--free-only", "Install only free skills (no license required)")
|
|
19
|
+
.option("-d, --dir <dir>", "Target project directory", process.cwd())
|
|
20
|
+
.action(async (packageName, opts) => {
|
|
21
|
+
// Normalize package name
|
|
22
|
+
const name = packageName.replace("@skillstore/", "");
|
|
23
|
+
const pkg = await getPackage(`@skillstore/${name}`);
|
|
24
|
+
if (!pkg) {
|
|
25
|
+
logger.error(`Package "${name}" not found. Run 'skillstore list' to see available packages.`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// License check
|
|
29
|
+
const access = await checkPackageAccess(pkg.name, pkg.skills.map((s) => s.name), pkg.freeSkills || []);
|
|
30
|
+
if (!access.allowed && !opts.freeOnly) {
|
|
31
|
+
console.log(chalk.red(`\n License required for ${chalk.bold(pkg.displayName)}\n`));
|
|
32
|
+
if (access.blockedSkills.length > 0) {
|
|
33
|
+
console.log(chalk.yellow(" Blocked skills:"));
|
|
34
|
+
for (const skill of access.blockedSkills) {
|
|
35
|
+
console.log(chalk.yellow(` - ${skill}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (access.freeSkillsAvailable.length > 0) {
|
|
39
|
+
console.log(chalk.green("\n Free skills available:"));
|
|
40
|
+
for (const skill of access.freeSkillsAvailable) {
|
|
41
|
+
console.log(chalk.green(` - ${skill}`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log(chalk.cyan(`\n Price: $${pkg.price.single} ${pkg.price.currency} | Activate: skillstore activate <license-key>`));
|
|
45
|
+
console.log(chalk.dim(` Or install free only: skillstore install ${name} --free-only\n`));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
if (opts.freeOnly) {
|
|
49
|
+
logger.info(chalk.yellow("Installing free skills only (--free-only mode)"));
|
|
50
|
+
if (access.freeSkillsAvailable.length > 0) {
|
|
51
|
+
console.log(chalk.dim(" Free skills: " + access.freeSkillsAvailable.join(", ")));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Default to plugin mode
|
|
55
|
+
const mode = opts.asTemplate ? "template" : "plugin";
|
|
56
|
+
// Download paid package from Supabase if in npm mode
|
|
57
|
+
let sourceDir;
|
|
58
|
+
if (isNpmMode() && !opts.freeOnly) {
|
|
59
|
+
const store = await loadLicenseStore();
|
|
60
|
+
if (store.licenses.length === 0) {
|
|
61
|
+
logger.error("No license found. Run: skillstore activate <license-key>");
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
// Use highest tier license
|
|
65
|
+
const license = store.licenses.find((l) => l.tier === "BUNDLE") ||
|
|
66
|
+
store.licenses[0];
|
|
67
|
+
const spinner = ora("Downloading package...").start();
|
|
68
|
+
try {
|
|
69
|
+
sourceDir = await downloadPackage(name, pkg.version, license.key);
|
|
70
|
+
spinner.succeed("Package downloaded");
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
spinner.fail(`Download failed: ${err.message}`);
|
|
74
|
+
logger.error("Check your internet connection and license key.");
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
logger.info(`Installing ${chalk.bold(pkg.displayName)} as ${chalk.cyan(mode)}...`);
|
|
79
|
+
const result = mode === "plugin"
|
|
80
|
+
? await installPlugin(name, opts.dir, sourceDir)
|
|
81
|
+
: await installTemplate(name, opts.dir, sourceDir);
|
|
82
|
+
if (result.success) {
|
|
83
|
+
logger.success(result.message);
|
|
84
|
+
await addInstalledPackage({
|
|
85
|
+
name: pkg.name,
|
|
86
|
+
version: pkg.version,
|
|
87
|
+
mode,
|
|
88
|
+
installedAt: new Date().toISOString(),
|
|
89
|
+
projectDir: opts.dir,
|
|
90
|
+
});
|
|
91
|
+
console.log(chalk.dim(`\nInstalled to: ${opts.dir}/.claude/`));
|
|
92
|
+
console.log(chalk.dim("Open Claude Code in this project to start using the skills.\n"));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logger.error("Installation failed.");
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC7D,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;KACnE,MAAM,CAAC,eAAe,EAAE,8DAA8D,CAAC;KACvF,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,IAAI,EAAE,EAAE;IAC1C,yBAAyB;IACzB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,+DAA+D,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC7B,GAAG,CAAC,UAAU,IAAI,EAAE,CACrB,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CACvE,CAAC;QAEF,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACvD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,gDAAgD,CACtG,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,8CAA8C,IAAI,gBAAgB,CACnE,CACF,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAC/D,CAAC;QACF,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,IAAI,GACR,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE1C,qDAAqD;IACrD,IAAI,SAA6B,CAAC;IAClC,IAAI,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,2BAA2B;QAC3B,MAAM,OAAO,GACX,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CACT,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACtE,CAAC;IAEF,MAAM,MAAM,GACV,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;QAChD,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,mBAAmB,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI;YACJ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,UAAU,EAAE,IAAI,CAAC,GAAG;SACrB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,GAAG,WAAW,CAAC,CAClD,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SA+CpB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { loadRegistry, getPackagesByCategory } from "../registry/loader.js";
|
|
4
|
+
export const listCommand = new Command("list")
|
|
5
|
+
.description("List all available skill packages")
|
|
6
|
+
.option("-c, --category <category>", "Filter by category")
|
|
7
|
+
.action(async (opts) => {
|
|
8
|
+
const { packages, categories } = await loadRegistry();
|
|
9
|
+
const filtered = opts.category
|
|
10
|
+
? await getPackagesByCategory(opts.category)
|
|
11
|
+
: packages;
|
|
12
|
+
if (filtered.length === 0) {
|
|
13
|
+
console.log(chalk.yellow("No packages found."));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.bold("\n📦 SkillStore Packages\n"));
|
|
17
|
+
for (const pkg of filtered) {
|
|
18
|
+
const cat = categories.find((c) => c.id === pkg.category);
|
|
19
|
+
console.log(chalk.bold.cyan(pkg.displayName) +
|
|
20
|
+
chalk.dim(` (${pkg.name}) v${pkg.version}`));
|
|
21
|
+
console.log(` ${pkg.description}`);
|
|
22
|
+
console.log(chalk.dim(` Category: ${cat?.name ?? pkg.category}`) +
|
|
23
|
+
chalk.dim(` | Skills: ${pkg.skills.length}`) +
|
|
24
|
+
chalk.dim(` | Price: $${pkg.price.single} ${pkg.price.currency}`));
|
|
25
|
+
console.log(chalk.dim(" Free preview: ") +
|
|
26
|
+
chalk.green(pkg.freeSkills.join(", ")));
|
|
27
|
+
console.log(chalk.dim(" Skills:"));
|
|
28
|
+
for (const skill of pkg.skills) {
|
|
29
|
+
const isFree = pkg.freeSkills.includes(skill.name);
|
|
30
|
+
const tag = isFree ? chalk.green(" [FREE]") : "";
|
|
31
|
+
console.log(` - ${skill.name}${tag}: ${skill.description}`);
|
|
32
|
+
}
|
|
33
|
+
console.log();
|
|
34
|
+
}
|
|
35
|
+
console.log(chalk.dim(`Total: ${filtered.length} package(s), ${filtered.reduce((sum, p) => sum + p.skills.length, 0)} skill(s)\n`));
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA8BtB,CAAC"}
|