@su-record/vibe 2.5.11 → 2.5.13
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/CLAUDE.md +243 -0
- package/LICENSE +21 -21
- package/README.md +262 -262
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +189 -189
- package/agents/research/codebase-patterns-agent.md +147 -147
- package/agents/research/framework-docs-agent.md +178 -178
- package/agents/research/security-advisory-agent.md +203 -203
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +129 -129
- package/commands/vibe.analyze.md +356 -356
- package/commands/vibe.reason.md +329 -329
- package/commands/vibe.review.md +326 -326
- package/commands/vibe.run.md +1117 -1051
- package/commands/vibe.spec.md +1058 -1058
- package/commands/vibe.utils.md +353 -296
- package/commands/vibe.verify.md +375 -375
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +102 -102
- package/dist/cli/llm.js +144 -144
- package/dist/cli/mcp.d.ts +49 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +169 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/postinstall.js +180 -2
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/setup/GlobalInstaller.d.ts +24 -0
- package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -0
- package/dist/cli/setup/GlobalInstaller.js +130 -0
- package/dist/cli/setup/GlobalInstaller.js.map +1 -0
- package/dist/cli/setup/LanguageDetector.d.ts +16 -0
- package/dist/cli/setup/LanguageDetector.d.ts.map +1 -0
- package/dist/cli/setup/LanguageDetector.js +49 -0
- package/dist/cli/setup/LanguageDetector.js.map +1 -0
- package/dist/cli/setup/LegacyMigration.d.ts +25 -0
- package/dist/cli/setup/LegacyMigration.d.ts.map +1 -0
- package/dist/cli/setup/LegacyMigration.js +162 -0
- package/dist/cli/setup/LegacyMigration.js.map +1 -0
- package/dist/cli/setup/ProjectSetup.d.ts +30 -0
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -0
- package/dist/cli/setup/ProjectSetup.js +238 -0
- package/dist/cli/setup/ProjectSetup.js.map +1 -0
- package/dist/cli/setup/index.d.ts +14 -0
- package/dist/cli/setup/index.d.ts.map +1 -0
- package/dist/cli/setup/index.js +18 -0
- package/dist/cli/setup/index.js.map +1 -0
- package/dist/cli/setup.d.ts +10 -77
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +15 -592
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/DeepInit.d.ts +0 -2
- package/dist/lib/DeepInit.d.ts.map +1 -1
- package/dist/lib/DeepInit.js +24 -26
- package/dist/lib/DeepInit.js.map +1 -1
- package/dist/lib/IterationTracker.d.ts +0 -2
- package/dist/lib/IterationTracker.d.ts.map +1 -1
- package/dist/lib/IterationTracker.js +11 -13
- package/dist/lib/IterationTracker.js.map +1 -1
- package/dist/lib/ModelRouter.d.ts +0 -2
- package/dist/lib/ModelRouter.d.ts.map +1 -1
- package/dist/lib/ModelRouter.js +0 -2
- package/dist/lib/ModelRouter.js.map +1 -1
- package/dist/lib/OrchestrateWorkflow.d.ts +1 -3
- package/dist/lib/OrchestrateWorkflow.d.ts.map +1 -1
- package/dist/lib/OrchestrateWorkflow.js +1 -3
- package/dist/lib/OrchestrateWorkflow.js.map +1 -1
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/SkillFrontmatter.d.ts +0 -2
- package/dist/lib/SkillFrontmatter.d.ts.map +1 -1
- package/dist/lib/SkillFrontmatter.js +28 -30
- package/dist/lib/SkillFrontmatter.js.map +1 -1
- package/dist/lib/SkillQualityGate.d.ts +0 -2
- package/dist/lib/SkillQualityGate.d.ts.map +1 -1
- package/dist/lib/SkillQualityGate.js +9 -11
- package/dist/lib/SkillQualityGate.js.map +1 -1
- package/dist/lib/SkillRepository.d.ts +117 -0
- package/dist/lib/SkillRepository.d.ts.map +1 -0
- package/dist/lib/SkillRepository.js +477 -0
- package/dist/lib/SkillRepository.js.map +1 -0
- package/dist/lib/UltraQA.d.ts +0 -2
- package/dist/lib/UltraQA.d.ts.map +1 -1
- package/dist/lib/UltraQA.js +77 -79
- package/dist/lib/UltraQA.js.map +1 -1
- package/dist/lib/gemini-mcp.d.ts +10 -0
- package/dist/lib/gemini-mcp.d.ts.map +1 -0
- package/dist/lib/gemini-mcp.js +353 -0
- package/dist/lib/gemini-mcp.js.map +1 -0
- package/dist/lib/gpt-api.js +4 -4
- package/dist/lib/gpt-mcp.d.ts +10 -0
- package/dist/lib/gpt-mcp.d.ts.map +1 -0
- package/dist/lib/gpt-mcp.js +352 -0
- package/dist/lib/gpt-mcp.js.map +1 -0
- package/dist/lib/llm/auth/ApiKeyManager.d.ts +21 -0
- package/dist/lib/llm/auth/ApiKeyManager.d.ts.map +1 -0
- package/dist/lib/llm/auth/ApiKeyManager.js +43 -0
- package/dist/lib/llm/auth/ApiKeyManager.js.map +1 -0
- package/dist/lib/llm/auth/ConfigManager.d.ts +29 -0
- package/dist/lib/llm/auth/ConfigManager.d.ts.map +1 -0
- package/dist/lib/llm/auth/ConfigManager.js +67 -0
- package/dist/lib/llm/auth/ConfigManager.js.map +1 -0
- package/dist/lib/llm/auth/index.d.ts +25 -0
- package/dist/lib/llm/auth/index.d.ts.map +1 -0
- package/dist/lib/llm/auth/index.js +83 -0
- package/dist/lib/llm/auth/index.js.map +1 -0
- package/dist/lib/llm/index.d.ts +10 -0
- package/dist/lib/llm/index.d.ts.map +1 -0
- package/dist/lib/llm/index.js +12 -0
- package/dist/lib/llm/index.js.map +1 -0
- package/dist/lib/llm/types.d.ts +96 -0
- package/dist/lib/llm/types.d.ts.map +1 -0
- package/dist/lib/llm/types.js +17 -0
- package/dist/lib/llm/types.js.map +1 -0
- package/dist/lib/llm/utils/index.d.ts +6 -0
- package/dist/lib/llm/utils/index.d.ts.map +1 -0
- package/dist/lib/llm/utils/index.js +6 -0
- package/dist/lib/llm/utils/index.js.map +1 -0
- package/dist/lib/llm/utils/retry.d.ts +25 -0
- package/dist/lib/llm/utils/retry.d.ts.map +1 -0
- package/dist/lib/llm/utils/retry.js +72 -0
- package/dist/lib/llm/utils/retry.js.map +1 -0
- package/dist/lib/llm/utils/stream.d.ts +13 -0
- package/dist/lib/llm/utils/stream.d.ts.map +1 -0
- package/dist/lib/llm/utils/stream.js +110 -0
- package/dist/lib/llm/utils/stream.js.map +1 -0
- package/dist/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/lib/memory/MemorySearch.js +20 -20
- package/dist/lib/memory/MemoryStorage.js +64 -64
- package/dist/orchestrator/AgentExecutor.d.ts +23 -0
- package/dist/orchestrator/AgentExecutor.d.ts.map +1 -0
- package/dist/orchestrator/AgentExecutor.js +231 -0
- package/dist/orchestrator/AgentExecutor.js.map +1 -0
- package/dist/orchestrator/AgentManager.d.ts +73 -0
- package/dist/orchestrator/AgentManager.d.ts.map +1 -0
- package/dist/orchestrator/AgentManager.js +184 -0
- package/dist/orchestrator/AgentManager.js.map +1 -0
- package/dist/orchestrator/LLMCluster.d.ts +70 -0
- package/dist/orchestrator/LLMCluster.d.ts.map +1 -0
- package/dist/orchestrator/LLMCluster.js +91 -0
- package/dist/orchestrator/LLMCluster.js.map +1 -0
- package/dist/orchestrator/MultiLlmResearch.d.ts +27 -0
- package/dist/orchestrator/MultiLlmResearch.d.ts.map +1 -0
- package/dist/orchestrator/MultiLlmResearch.js +145 -0
- package/dist/orchestrator/MultiLlmResearch.js.map +1 -0
- package/dist/orchestrator/SessionStore.d.ts +41 -0
- package/dist/orchestrator/SessionStore.d.ts.map +1 -0
- package/dist/orchestrator/SessionStore.js +117 -0
- package/dist/orchestrator/SessionStore.js.map +1 -0
- package/dist/orchestrator/SmartRouter.d.ts +68 -0
- package/dist/orchestrator/SmartRouter.d.ts.map +1 -0
- package/dist/orchestrator/SmartRouter.js +256 -0
- package/dist/orchestrator/SmartRouter.js.map +1 -0
- package/dist/orchestrator/backgroundAgent.d.ts +10 -28
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
- package/dist/orchestrator/backgroundAgent.js +11 -346
- package/dist/orchestrator/backgroundAgent.js.map +1 -1
- package/dist/orchestrator/index.d.ts +3 -0
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +4 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +19 -154
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +90 -514
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/parallelResearch.d.ts +5 -12
- package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/orchestrator/parallelResearch.js +10 -193
- package/dist/orchestrator/parallelResearch.js.map +1 -1
- package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
- package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
- package/dist/tools/analytics/getUsageAnalytics.js +246 -0
- package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
- package/dist/tools/analytics/index.d.ts +5 -0
- package/dist/tools/analytics/index.d.ts.map +1 -0
- package/dist/tools/analytics/index.js +5 -0
- package/dist/tools/analytics/index.js.map +1 -0
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/getCodingGuide.d.ts +7 -0
- package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
- package/dist/tools/convention/getCodingGuide.js +69 -0
- package/dist/tools/convention/getCodingGuide.js.map +1 -0
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
- package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
- package/dist/tools/planning/analyzeRequirements.js +171 -0
- package/dist/tools/planning/analyzeRequirements.js.map +1 -0
- package/dist/tools/planning/createUserStories.d.ts +9 -0
- package/dist/tools/planning/createUserStories.d.ts.map +1 -0
- package/dist/tools/planning/createUserStories.js +124 -0
- package/dist/tools/planning/createUserStories.js.map +1 -0
- package/dist/tools/planning/featureRoadmap.d.ts +10 -0
- package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
- package/dist/tools/planning/featureRoadmap.js +207 -0
- package/dist/tools/planning/featureRoadmap.js.map +1 -0
- package/dist/tools/planning/generatePrd.d.ts +11 -0
- package/dist/tools/planning/generatePrd.d.ts.map +1 -0
- package/dist/tools/planning/generatePrd.js +161 -0
- package/dist/tools/planning/generatePrd.js.map +1 -0
- package/dist/tools/planning/index.d.ts +8 -0
- package/dist/tools/planning/index.d.ts.map +1 -0
- package/dist/tools/planning/index.js +8 -0
- package/dist/tools/planning/index.js.map +1 -0
- package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
- package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/analyzePrompt.js +150 -0
- package/dist/tools/prompt/analyzePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
- package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePrompt.js +110 -0
- package/dist/tools/prompt/enhancePrompt.js.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
- package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
- package/dist/tools/prompt/enhancePromptGemini.js +332 -0
- package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
- package/dist/tools/prompt/index.d.ts +7 -0
- package/dist/tools/prompt/index.d.ts.map +1 -0
- package/dist/tools/prompt/index.js +7 -0
- package/dist/tools/prompt/index.js.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
- package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
- package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
- package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
- package/dist/tools/reasoning/index.d.ts +5 -0
- package/dist/tools/reasoning/index.d.ts.map +1 -0
- package/dist/tools/reasoning/index.js +5 -0
- package/dist/tools/reasoning/index.js.map +1 -0
- package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
- package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
- package/dist/tools/thinking/analyzeProblem.js +55 -0
- package/dist/tools/thinking/analyzeProblem.js.map +1 -0
- package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
- package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
- package/dist/tools/thinking/breakDownProblem.js +145 -0
- package/dist/tools/thinking/breakDownProblem.js.map +1 -0
- package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
- package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
- package/dist/tools/thinking/createThinkingChain.js +44 -0
- package/dist/tools/thinking/createThinkingChain.js.map +1 -0
- package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
- package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
- package/dist/tools/thinking/formatAsPlan.js +78 -0
- package/dist/tools/thinking/formatAsPlan.js.map +1 -0
- package/dist/tools/thinking/index.d.ts +10 -0
- package/dist/tools/thinking/index.d.ts.map +1 -0
- package/dist/tools/thinking/index.js +10 -0
- package/dist/tools/thinking/index.js.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
- package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
- package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
- package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
- package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
- package/dist/tools/thinking/thinkAloudProcess.js +80 -0
- package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
- package/hooks/hooks.json +222 -222
- package/hooks/scripts/code-check.js +22 -22
- package/hooks/scripts/code-review.js +22 -22
- package/hooks/scripts/complexity.js +22 -22
- package/hooks/scripts/compound.js +23 -23
- package/hooks/scripts/context-save.js +33 -33
- package/hooks/scripts/generate-brand-assets.js +472 -0
- package/hooks/scripts/hud-multiline.js +262 -264
- package/hooks/scripts/hud-status.js +291 -293
- package/hooks/scripts/keyword-detector.js +214 -216
- package/hooks/scripts/llm-orchestrate.js +171 -171
- package/hooks/scripts/post-edit.js +97 -97
- package/hooks/scripts/post-tool-verify.js +210 -212
- package/hooks/scripts/pre-tool-guard.js +125 -127
- package/hooks/scripts/recall.js +22 -22
- package/hooks/scripts/session-start.js +30 -30
- package/hooks/scripts/skill-injector.js +191 -193
- package/hooks/scripts/utils.js +97 -97
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +83 -83
- package/skills/brand-assets.md +141 -0
- package/skills/commerce-patterns.md +361 -0
- package/skills/context7-usage.md +102 -102
- package/skills/e2e-commerce.md +304 -0
- package/skills/frontend-design.md +92 -0
- package/skills/git-worktree.md +181 -181
- package/skills/parallel-research.md +77 -77
- package/skills/priority-todos.md +239 -239
- package/skills/seo-checklist.md +244 -0
- package/skills/tool-fallback.md +190 -190
- package/skills/vibe-capabilities.md +161 -161
- package/vibe/constitution.md +227 -227
- package/vibe/rules/core/communication-guide.md +98 -98
- package/vibe/rules/core/development-philosophy.md +52 -52
- package/vibe/rules/core/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
package/skills/context7-usage.md
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Context7 plugin for latest library documentation. Auto-activates when docs, documentation, latest version, official docs, API reference, or library help is needed.
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Context7 Usage
|
|
6
|
-
|
|
7
|
-
Guide for searching latest library/framework documentation using Context7 plugin with subagent isolation.
|
|
8
|
-
|
|
9
|
-
## Why Subagent Approach?
|
|
10
|
-
|
|
11
|
-
| Approach | Problem |
|
|
12
|
-
|----------|---------|
|
|
13
|
-
| Direct plugin call | Docs content fills main context, causing bloat |
|
|
14
|
-
| Subagent isolation | Docs queried in separate context, only results returned |
|
|
15
|
-
|
|
16
|
-
**Benefits:**
|
|
17
|
-
|
|
18
|
-
- Prevents context bloat during long coding sessions
|
|
19
|
-
- Solves knowledge cutoff problem with latest docs
|
|
20
|
-
- Main context stays focused on implementation
|
|
21
|
-
|
|
22
|
-
## When to Use
|
|
23
|
-
|
|
24
|
-
| Situation | Example |
|
|
25
|
-
|-----------|---------|
|
|
26
|
-
| Latest API check | "React 19 use() hook usage" |
|
|
27
|
-
| Version differences | "Next.js 15 changes" |
|
|
28
|
-
| Official docs needed | "Prisma schema syntax" |
|
|
29
|
-
| Migration guide | "Vue 2 → Vue 3 migration" |
|
|
30
|
-
|
|
31
|
-
## How It Works
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
User asks library question
|
|
35
|
-
↓
|
|
36
|
-
Skill detects docs need
|
|
37
|
-
↓
|
|
38
|
-
Spawn docs-researcher subagent (haiku)
|
|
39
|
-
↓
|
|
40
|
-
Subagent calls context7 in isolated context
|
|
41
|
-
↓
|
|
42
|
-
Returns only relevant info to main context
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Usage
|
|
46
|
-
|
|
47
|
-
### Automatic (Recommended)
|
|
48
|
-
|
|
49
|
-
Just ask library/API questions naturally:
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
"How do I use React 19 use() hook?"
|
|
53
|
-
"What's new in Next.js 15?"
|
|
54
|
-
"Prisma many-to-many relation syntax"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
The skill auto-detects and spawns a docs-researcher subagent.
|
|
58
|
-
|
|
59
|
-
### Manual Command
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
/context7:docs <library> [query]
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Examples:
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
/context7:docs react hooks
|
|
69
|
-
/context7:docs next.js app router
|
|
70
|
-
/context7:docs prisma relations
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Implementation Pattern
|
|
74
|
-
|
|
75
|
-
When you detect a library/API documentation need, spawn a subagent:
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
Task tool call:
|
|
79
|
-
- subagent_type: Explore
|
|
80
|
-
- model: haiku
|
|
81
|
-
- prompt: "Use context7 to find [library] documentation about [topic]. Return only the relevant API usage examples and key points."
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
The subagent handles the context7 calls and returns a summary, keeping main context clean.
|
|
85
|
-
|
|
86
|
-
## Fallback Chain
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
context7 plugin not installed
|
|
90
|
-
↓
|
|
91
|
-
Prompt user: /plugin install context7
|
|
92
|
-
↓
|
|
93
|
-
If still unavailable: Web Search for official docs
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Installation
|
|
97
|
-
|
|
98
|
-
If context7 is not installed, guide user:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
/plugin install context7
|
|
102
|
-
```
|
|
1
|
+
---
|
|
2
|
+
description: Context7 plugin for latest library documentation. Auto-activates when docs, documentation, latest version, official docs, API reference, or library help is needed.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Context7 Usage
|
|
6
|
+
|
|
7
|
+
Guide for searching latest library/framework documentation using Context7 plugin with subagent isolation.
|
|
8
|
+
|
|
9
|
+
## Why Subagent Approach?
|
|
10
|
+
|
|
11
|
+
| Approach | Problem |
|
|
12
|
+
|----------|---------|
|
|
13
|
+
| Direct plugin call | Docs content fills main context, causing bloat |
|
|
14
|
+
| Subagent isolation | Docs queried in separate context, only results returned |
|
|
15
|
+
|
|
16
|
+
**Benefits:**
|
|
17
|
+
|
|
18
|
+
- Prevents context bloat during long coding sessions
|
|
19
|
+
- Solves knowledge cutoff problem with latest docs
|
|
20
|
+
- Main context stays focused on implementation
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
| Situation | Example |
|
|
25
|
+
|-----------|---------|
|
|
26
|
+
| Latest API check | "React 19 use() hook usage" |
|
|
27
|
+
| Version differences | "Next.js 15 changes" |
|
|
28
|
+
| Official docs needed | "Prisma schema syntax" |
|
|
29
|
+
| Migration guide | "Vue 2 → Vue 3 migration" |
|
|
30
|
+
|
|
31
|
+
## How It Works
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
User asks library question
|
|
35
|
+
↓
|
|
36
|
+
Skill detects docs need
|
|
37
|
+
↓
|
|
38
|
+
Spawn docs-researcher subagent (haiku)
|
|
39
|
+
↓
|
|
40
|
+
Subagent calls context7 in isolated context
|
|
41
|
+
↓
|
|
42
|
+
Returns only relevant info to main context
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
### Automatic (Recommended)
|
|
48
|
+
|
|
49
|
+
Just ask library/API questions naturally:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
"How do I use React 19 use() hook?"
|
|
53
|
+
"What's new in Next.js 15?"
|
|
54
|
+
"Prisma many-to-many relation syntax"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The skill auto-detects and spawns a docs-researcher subagent.
|
|
58
|
+
|
|
59
|
+
### Manual Command
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/context7:docs <library> [query]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Examples:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
/context7:docs react hooks
|
|
69
|
+
/context7:docs next.js app router
|
|
70
|
+
/context7:docs prisma relations
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Implementation Pattern
|
|
74
|
+
|
|
75
|
+
When you detect a library/API documentation need, spawn a subagent:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Task tool call:
|
|
79
|
+
- subagent_type: Explore
|
|
80
|
+
- model: haiku
|
|
81
|
+
- prompt: "Use context7 to find [library] documentation about [topic]. Return only the relevant API usage examples and key points."
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The subagent handles the context7 calls and returns a summary, keeping main context clean.
|
|
85
|
+
|
|
86
|
+
## Fallback Chain
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
context7 plugin not installed
|
|
90
|
+
↓
|
|
91
|
+
Prompt user: /plugin install context7
|
|
92
|
+
↓
|
|
93
|
+
If still unavailable: Web Search for official docs
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Installation
|
|
97
|
+
|
|
98
|
+
If context7 is not installed, guide user:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
/plugin install context7
|
|
102
|
+
```
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: e2e-commerce
|
|
3
|
+
description: "E2E test scenarios for commerce checkout and payment flows"
|
|
4
|
+
triggers: [e2e commerce, checkout test, payment test, order flow test]
|
|
5
|
+
priority: 65
|
|
6
|
+
---
|
|
7
|
+
# E2E Commerce Test Scenarios
|
|
8
|
+
|
|
9
|
+
Playwright-based E2E testing for commerce checkout flows.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- After implementing checkout/payment features
|
|
14
|
+
- Before production deployment
|
|
15
|
+
- CI/CD pipeline quality gate
|
|
16
|
+
- Regression testing after changes
|
|
17
|
+
|
|
18
|
+
## Test Scenarios
|
|
19
|
+
|
|
20
|
+
### 1. Happy Path - Complete Checkout
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// tests/e2e/checkout.spec.ts
|
|
24
|
+
import { test, expect } from '@playwright/test';
|
|
25
|
+
|
|
26
|
+
test.describe('Checkout Flow', () => {
|
|
27
|
+
test('complete purchase - happy path', async ({ page }) => {
|
|
28
|
+
// 1. Add to cart
|
|
29
|
+
await page.goto('/products/test-product');
|
|
30
|
+
await page.click('[data-testid="add-to-cart"]');
|
|
31
|
+
await expect(page.locator('[data-testid="cart-count"]')).toHaveText('1');
|
|
32
|
+
|
|
33
|
+
// 2. Go to cart
|
|
34
|
+
await page.click('[data-testid="cart-icon"]');
|
|
35
|
+
await expect(page).toHaveURL('/cart');
|
|
36
|
+
|
|
37
|
+
// 3. Proceed to checkout
|
|
38
|
+
await page.click('[data-testid="checkout-button"]');
|
|
39
|
+
await expect(page).toHaveURL('/checkout');
|
|
40
|
+
|
|
41
|
+
// 4. Fill shipping info
|
|
42
|
+
await page.fill('[name="name"]', 'Test User');
|
|
43
|
+
await page.fill('[name="phone"]', '010-1234-5678');
|
|
44
|
+
await page.fill('[name="address"]', 'Test Address 123');
|
|
45
|
+
|
|
46
|
+
// 5. Select payment method
|
|
47
|
+
await page.click('[data-testid="payment-card"]');
|
|
48
|
+
|
|
49
|
+
// 6. Complete payment (sandbox/mock)
|
|
50
|
+
await page.click('[data-testid="pay-button"]');
|
|
51
|
+
|
|
52
|
+
// 7. Verify order complete
|
|
53
|
+
await expect(page).toHaveURL(/\/orders\/\w+/);
|
|
54
|
+
await expect(page.locator('[data-testid="order-status"]')).toHaveText('결제 완료');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Stock Validation
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
test('prevent checkout when out of stock', async ({ page }) => {
|
|
63
|
+
// Setup: Product with stock = 1, another user reserves it
|
|
64
|
+
await page.goto('/products/low-stock-product');
|
|
65
|
+
await page.click('[data-testid="add-to-cart"]');
|
|
66
|
+
await page.goto('/checkout');
|
|
67
|
+
|
|
68
|
+
// Simulate stock depletion during checkout
|
|
69
|
+
await page.evaluate(async () => {
|
|
70
|
+
await fetch('/api/test/deplete-stock', { method: 'POST' });
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Attempt payment
|
|
74
|
+
await page.click('[data-testid="pay-button"]');
|
|
75
|
+
|
|
76
|
+
// Should show out of stock error
|
|
77
|
+
await expect(page.locator('[data-testid="error-message"]'))
|
|
78
|
+
.toContainText('재고가 부족합니다');
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Payment Failure Handling
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
test('handle payment failure gracefully', async ({ page }) => {
|
|
86
|
+
await page.goto('/products/test-product');
|
|
87
|
+
await page.click('[data-testid="add-to-cart"]');
|
|
88
|
+
await page.goto('/checkout');
|
|
89
|
+
|
|
90
|
+
// Fill form
|
|
91
|
+
await page.fill('[name="name"]', 'Test User');
|
|
92
|
+
await page.fill('[name="address"]', 'Test Address');
|
|
93
|
+
|
|
94
|
+
// Use test card that triggers failure
|
|
95
|
+
await page.fill('[name="card-number"]', '4000000000000002'); // Decline card
|
|
96
|
+
await page.click('[data-testid="pay-button"]');
|
|
97
|
+
|
|
98
|
+
// Verify error handling
|
|
99
|
+
await expect(page.locator('[data-testid="payment-error"]'))
|
|
100
|
+
.toContainText('결제가 거절되었습니다');
|
|
101
|
+
|
|
102
|
+
// Stock should be released
|
|
103
|
+
await page.goto('/products/test-product');
|
|
104
|
+
await expect(page.locator('[data-testid="stock-status"]'))
|
|
105
|
+
.not.toContainText('품절');
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 4. Duplicate Payment Prevention
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
test('prevent duplicate payment on double click', async ({ page }) => {
|
|
113
|
+
await page.goto('/checkout');
|
|
114
|
+
// Fill checkout form...
|
|
115
|
+
|
|
116
|
+
// Double click pay button rapidly
|
|
117
|
+
const payButton = page.locator('[data-testid="pay-button"]');
|
|
118
|
+
await Promise.all([
|
|
119
|
+
payButton.click(),
|
|
120
|
+
payButton.click(),
|
|
121
|
+
]);
|
|
122
|
+
|
|
123
|
+
// Wait for completion
|
|
124
|
+
await page.waitForURL(/\/orders\/\w+/);
|
|
125
|
+
|
|
126
|
+
// Verify only one order created
|
|
127
|
+
const orderId = page.url().split('/').pop();
|
|
128
|
+
const response = await page.request.get(`/api/orders?userId=test`);
|
|
129
|
+
const orders = await response.json();
|
|
130
|
+
|
|
131
|
+
expect(orders.filter(o => o.id === orderId)).toHaveLength(1);
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 5. Coupon Application
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
test('apply coupon and verify discount', async ({ page }) => {
|
|
139
|
+
await page.goto('/products/test-product'); // Price: 10,000
|
|
140
|
+
await page.click('[data-testid="add-to-cart"]');
|
|
141
|
+
await page.goto('/checkout');
|
|
142
|
+
|
|
143
|
+
// Original price
|
|
144
|
+
await expect(page.locator('[data-testid="total-price"]'))
|
|
145
|
+
.toHaveText('10,000원');
|
|
146
|
+
|
|
147
|
+
// Apply 10% coupon
|
|
148
|
+
await page.fill('[name="coupon"]', 'DISCOUNT10');
|
|
149
|
+
await page.click('[data-testid="apply-coupon"]');
|
|
150
|
+
|
|
151
|
+
// Verify discount applied
|
|
152
|
+
await expect(page.locator('[data-testid="discount-amount"]'))
|
|
153
|
+
.toHaveText('-1,000원');
|
|
154
|
+
await expect(page.locator('[data-testid="total-price"]'))
|
|
155
|
+
.toHaveText('9,000원');
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 6. Webhook Resilience
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
test('order completes even with webhook delay', async ({ page, request }) => {
|
|
163
|
+
// Configure webhook delay in test environment
|
|
164
|
+
await request.post('/api/test/configure-webhook', {
|
|
165
|
+
data: { delay: 5000 } // 5 second delay
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Complete checkout
|
|
169
|
+
await page.goto('/checkout');
|
|
170
|
+
// ... fill form
|
|
171
|
+
await page.click('[data-testid="pay-button"]');
|
|
172
|
+
|
|
173
|
+
// Should show processing state
|
|
174
|
+
await expect(page.locator('[data-testid="order-status"]'))
|
|
175
|
+
.toHaveText('처리 중');
|
|
176
|
+
|
|
177
|
+
// Wait for webhook
|
|
178
|
+
await page.waitForSelector('[data-testid="order-status"]:has-text("결제 완료")', {
|
|
179
|
+
timeout: 10000
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## CLI Usage
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Run all commerce e2e tests
|
|
188
|
+
/vibe.utils --e2e commerce
|
|
189
|
+
|
|
190
|
+
# Run specific scenario
|
|
191
|
+
/vibe.utils --e2e checkout-flow
|
|
192
|
+
|
|
193
|
+
# Run with visual recording
|
|
194
|
+
/vibe.utils --e2e commerce --record
|
|
195
|
+
|
|
196
|
+
# Run against staging
|
|
197
|
+
/vibe.utils --e2e commerce --env staging
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Test Environment Setup
|
|
201
|
+
|
|
202
|
+
### Mock PG Server
|
|
203
|
+
```typescript
|
|
204
|
+
// tests/mocks/pg-server.ts
|
|
205
|
+
import { setupServer } from 'msw/node';
|
|
206
|
+
import { http, HttpResponse } from 'msw';
|
|
207
|
+
|
|
208
|
+
export const pgMockServer = setupServer(
|
|
209
|
+
// Success response
|
|
210
|
+
http.post('/payments/authorize', () => {
|
|
211
|
+
return HttpResponse.json({
|
|
212
|
+
success: true,
|
|
213
|
+
transactionId: `txn_${Date.now()}`,
|
|
214
|
+
status: 'AUTHORIZED',
|
|
215
|
+
});
|
|
216
|
+
}),
|
|
217
|
+
|
|
218
|
+
// Failure simulation
|
|
219
|
+
http.post('/payments/authorize', ({ request }) => {
|
|
220
|
+
const body = request.json();
|
|
221
|
+
if (body.cardNumber === '4000000000000002') {
|
|
222
|
+
return HttpResponse.json({
|
|
223
|
+
success: false,
|
|
224
|
+
error: 'CARD_DECLINED',
|
|
225
|
+
}, { status: 400 });
|
|
226
|
+
}
|
|
227
|
+
}),
|
|
228
|
+
);
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Database Seeding
|
|
232
|
+
```typescript
|
|
233
|
+
// tests/fixtures/commerce.ts
|
|
234
|
+
export async function seedCommerceData(db: Database) {
|
|
235
|
+
// Create test products
|
|
236
|
+
await db.products.createMany([
|
|
237
|
+
{ id: 'test-product', name: 'Test Product', price: 10000, stock: 100 },
|
|
238
|
+
{ id: 'low-stock', name: 'Low Stock', price: 5000, stock: 1 },
|
|
239
|
+
]);
|
|
240
|
+
|
|
241
|
+
// Create test coupons
|
|
242
|
+
await db.coupons.create({
|
|
243
|
+
code: 'DISCOUNT10',
|
|
244
|
+
discountPercent: 10,
|
|
245
|
+
expiresAt: addDays(new Date(), 30),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## CI/CD Integration
|
|
251
|
+
|
|
252
|
+
```yaml
|
|
253
|
+
# .github/workflows/e2e.yml
|
|
254
|
+
name: E2E Commerce Tests
|
|
255
|
+
|
|
256
|
+
on:
|
|
257
|
+
pull_request:
|
|
258
|
+
paths:
|
|
259
|
+
- 'src/checkout/**'
|
|
260
|
+
- 'src/payment/**'
|
|
261
|
+
- 'src/cart/**'
|
|
262
|
+
|
|
263
|
+
jobs:
|
|
264
|
+
e2e:
|
|
265
|
+
runs-on: ubuntu-latest
|
|
266
|
+
steps:
|
|
267
|
+
- uses: actions/checkout@v4
|
|
268
|
+
|
|
269
|
+
- name: Install dependencies
|
|
270
|
+
run: npm ci
|
|
271
|
+
|
|
272
|
+
- name: Start test server
|
|
273
|
+
run: npm run start:test &
|
|
274
|
+
|
|
275
|
+
- name: Run E2E tests
|
|
276
|
+
run: npx playwright test tests/e2e/commerce/
|
|
277
|
+
|
|
278
|
+
- name: Upload test results
|
|
279
|
+
if: failure()
|
|
280
|
+
uses: actions/upload-artifact@v4
|
|
281
|
+
with:
|
|
282
|
+
name: playwright-report
|
|
283
|
+
path: playwright-report/
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Quality Checklist
|
|
287
|
+
|
|
288
|
+
### Must Pass (P0)
|
|
289
|
+
- [ ] Happy path checkout completes
|
|
290
|
+
- [ ] Payment failure releases stock
|
|
291
|
+
- [ ] Duplicate payment prevented
|
|
292
|
+
- [ ] Out of stock blocks checkout
|
|
293
|
+
|
|
294
|
+
### Should Pass (P1)
|
|
295
|
+
- [ ] Coupon calculation correct
|
|
296
|
+
- [ ] Webhook retry handled
|
|
297
|
+
- [ ] Cart merge on login works
|
|
298
|
+
- [ ] Partial refund processed
|
|
299
|
+
|
|
300
|
+
### Nice to Have (P2)
|
|
301
|
+
- [ ] Multiple payment methods
|
|
302
|
+
- [ ] Guest checkout flow
|
|
303
|
+
- [ ] Order cancellation
|
|
304
|
+
- [ ] Subscription renewal
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: "Production-grade frontend with bold aesthetic direction for UI-focused projects"
|
|
4
|
+
triggers: [frontend, ui design, aesthetic, beautiful ui, design system, ui quality, visual design]
|
|
5
|
+
priority: 70
|
|
6
|
+
---
|
|
7
|
+
# Frontend Design Skill
|
|
8
|
+
|
|
9
|
+
Create production-grade frontend with bold aesthetic direction.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- UI-focused projects requiring high visual quality
|
|
14
|
+
- Design system implementation
|
|
15
|
+
- User-facing features where aesthetics matter
|
|
16
|
+
|
|
17
|
+
## Core Principles
|
|
18
|
+
|
|
19
|
+
### 1. Typography
|
|
20
|
+
- Choose distinctive typefaces that set the tone
|
|
21
|
+
- Establish clear hierarchy through size, weight, and spacing
|
|
22
|
+
- Consider custom fonts that reflect brand personality
|
|
23
|
+
|
|
24
|
+
### 2. Color & Theme
|
|
25
|
+
- Develop unique color palettes beyond defaults
|
|
26
|
+
- Consider dark/light mode with intentional contrast
|
|
27
|
+
- Use color purposefully for hierarchy and emphasis
|
|
28
|
+
|
|
29
|
+
### 3. Motion & Animation
|
|
30
|
+
- Add meaningful micro-interactions
|
|
31
|
+
- Use motion to guide user attention
|
|
32
|
+
- Implement smooth transitions between states
|
|
33
|
+
|
|
34
|
+
### 4. Composition & Layout
|
|
35
|
+
- Create visual rhythm through spacing
|
|
36
|
+
- Use asymmetry and unconventional layouts when appropriate
|
|
37
|
+
- Balance density with breathing room
|
|
38
|
+
|
|
39
|
+
### 5. Visual Details
|
|
40
|
+
- Custom icons and illustrations
|
|
41
|
+
- Thoughtful shadows and depth
|
|
42
|
+
- Refined borders, corners, and surfaces
|
|
43
|
+
|
|
44
|
+
## Anti-Patterns to Avoid
|
|
45
|
+
|
|
46
|
+
- Generic Bootstrap/Tailwind defaults without customization
|
|
47
|
+
- Overused fonts (Inter, Roboto without styling)
|
|
48
|
+
- Predictable card-based layouts everywhere
|
|
49
|
+
- Stock photography without curation
|
|
50
|
+
- Safe, corporate color palettes
|
|
51
|
+
|
|
52
|
+
## Implementation Guidelines
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// Design token structure
|
|
56
|
+
const tokens = {
|
|
57
|
+
colors: {
|
|
58
|
+
primary: { /* custom palette */ },
|
|
59
|
+
semantic: { /* success, error, warning */ },
|
|
60
|
+
},
|
|
61
|
+
typography: {
|
|
62
|
+
fontFamily: { /* display, body, mono */ },
|
|
63
|
+
scale: { /* modular scale */ },
|
|
64
|
+
},
|
|
65
|
+
spacing: { /* consistent rhythm */ },
|
|
66
|
+
motion: { /* duration, easing */ },
|
|
67
|
+
};
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Quality Checklist
|
|
71
|
+
|
|
72
|
+
- [ ] Typography creates clear hierarchy
|
|
73
|
+
- [ ] Color palette is distinctive and accessible
|
|
74
|
+
- [ ] Animations are smooth (60fps)
|
|
75
|
+
- [ ] Layout works across breakpoints
|
|
76
|
+
- [ ] Empty/loading/error states are designed
|
|
77
|
+
- [ ] Dark mode (if applicable) is intentional
|
|
78
|
+
- [ ] Micro-interactions provide feedback
|
|
79
|
+
|
|
80
|
+
## Integration with Vibe
|
|
81
|
+
|
|
82
|
+
Use with `/vibe.utils --ui` for preview:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
/vibe.utils --ui "login form with bold typography and custom color scheme"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Resources
|
|
89
|
+
|
|
90
|
+
- [Refactoring UI](https://www.refactoringui.com/) - Design principles
|
|
91
|
+
- [Motion Design](https://motion.dev/) - Animation library
|
|
92
|
+
- [Radix Primitives](https://www.radix-ui.com/) - Accessible components
|