@su-record/vibe 2.10.2 → 2.12.1
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 +6 -0
- package/README.en.md +50 -28
- package/README.md +37 -9
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +12 -12
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/commands/codex-proxy.d.ts +1 -1
- package/dist/cli/commands/codex-proxy.js +11 -11
- package/dist/cli/commands/codex-proxy.js.map +1 -1
- package/dist/cli/commands/config.d.ts +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +22 -21
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/info.js +2 -2
- package/dist/cli/commands/init.d.ts +2 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +20 -16
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +1 -1
- package/dist/cli/commands/setup.js +24 -24
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +8 -7
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +28 -16
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/design/design-md-parser.d.ts +25 -0
- package/dist/cli/design/design-md-parser.d.ts.map +1 -0
- package/dist/cli/design/design-md-parser.js +86 -0
- package/dist/cli/design/design-md-parser.js.map +1 -0
- package/dist/cli/design/design-md-parser.test.d.ts +2 -0
- package/dist/cli/design/design-md-parser.test.d.ts.map +1 -0
- package/dist/cli/design/design-md-parser.test.js +149 -0
- package/dist/cli/design/design-md-parser.test.js.map +1 -0
- package/dist/cli/index.js +22 -23
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm/antigravity-commands.d.ts +25 -0
- package/dist/cli/llm/antigravity-commands.d.ts.map +1 -0
- package/dist/cli/llm/antigravity-commands.js +142 -0
- package/dist/cli/llm/antigravity-commands.js.map +1 -0
- package/dist/cli/llm/claude-commands.d.ts.map +1 -1
- package/dist/cli/llm/claude-commands.js +3 -1
- package/dist/cli/llm/claude-commands.js.map +1 -1
- package/dist/cli/llm/config.js +7 -7
- package/dist/cli/llm/config.js.map +1 -1
- package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
- package/dist/cli/llm/gemini-commands.js +7 -4
- package/dist/cli/llm/gemini-commands.js.map +1 -1
- package/dist/cli/llm/gpt-commands.d.ts.map +1 -1
- package/dist/cli/llm/gpt-commands.js +3 -3
- package/dist/cli/llm/gpt-commands.js.map +1 -1
- package/dist/cli/llm/help.js +4 -4
- package/dist/cli/llm/index.d.ts +1 -1
- package/dist/cli/llm/index.d.ts.map +1 -1
- package/dist/cli/llm/index.js +1 -1
- package/dist/cli/llm/index.js.map +1 -1
- package/dist/cli/llm.d.ts +2 -2
- package/dist/cli/llm.js +2 -2
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +18 -17
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/inline-skills.js +5 -5
- package/dist/cli/postinstall/inline-skills.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +14 -9
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/CodexHooks.d.ts +20 -0
- package/dist/cli/setup/CodexHooks.d.ts.map +1 -0
- package/dist/cli/setup/CodexHooks.js +50 -0
- package/dist/cli/setup/CodexHooks.js.map +1 -0
- package/dist/cli/setup/CodexHooks.test.d.ts +2 -0
- package/dist/cli/setup/CodexHooks.test.d.ts.map +1 -0
- package/dist/cli/setup/CodexHooks.test.js +23 -0
- package/dist/cli/setup/CodexHooks.test.js.map +1 -0
- package/dist/cli/setup/LegacyMigration.js +2 -2
- package/dist/cli/setup/ProjectSetup.d.ts +4 -4
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +21 -19
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup/index.d.ts +1 -0
- package/dist/cli/setup/index.d.ts.map +1 -1
- package/dist/cli/setup/index.js +1 -0
- package/dist/cli/setup/index.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +2 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/types.d.ts +7 -9
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.d.ts +5 -5
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +18 -14
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/cli/utils/cli-detector.test.d.ts +2 -0
- package/dist/cli/utils/cli-detector.test.d.ts.map +1 -0
- package/dist/cli/utils/cli-detector.test.js +51 -0
- package/dist/cli/utils/cli-detector.test.js.map +1 -0
- package/dist/infra/lib/ReviewRace.d.ts +4 -4
- package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
- package/dist/infra/lib/ReviewRace.js +16 -16
- package/dist/infra/lib/ReviewRace.js.map +1 -1
- package/dist/infra/lib/SkillRepository.js +7 -7
- package/dist/infra/lib/antigravity/auth.d.ts +18 -0
- package/dist/infra/lib/antigravity/auth.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/auth.js +32 -0
- package/dist/infra/lib/antigravity/auth.js.map +1 -0
- package/dist/infra/lib/antigravity/capabilities.d.ts +28 -0
- package/dist/infra/lib/antigravity/capabilities.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/capabilities.js +178 -0
- package/dist/infra/lib/antigravity/capabilities.js.map +1 -0
- package/dist/infra/lib/antigravity/chat.d.ts +34 -0
- package/dist/infra/lib/antigravity/chat.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/chat.js +160 -0
- package/dist/infra/lib/antigravity/chat.js.map +1 -0
- package/dist/infra/lib/antigravity/completion.d.ts +12 -0
- package/dist/infra/lib/antigravity/completion.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/completion.js +13 -0
- package/dist/infra/lib/antigravity/completion.js.map +1 -0
- package/dist/infra/lib/antigravity/constants.d.ts +8 -0
- package/dist/infra/lib/antigravity/constants.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/constants.js +11 -0
- package/dist/infra/lib/antigravity/constants.js.map +1 -0
- package/dist/infra/lib/antigravity/index.d.ts +13 -0
- package/dist/infra/lib/antigravity/index.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/index.js +12 -0
- package/dist/infra/lib/antigravity/index.js.map +1 -0
- package/dist/infra/lib/antigravity/models.d.ts +11 -0
- package/dist/infra/lib/antigravity/models.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/models.js +38 -0
- package/dist/infra/lib/antigravity/models.js.map +1 -0
- package/dist/infra/lib/antigravity/orchestration.d.ts +33 -0
- package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/orchestration.js +62 -0
- package/dist/infra/lib/antigravity/orchestration.js.map +1 -0
- package/dist/infra/lib/antigravity/types.d.ts +115 -0
- package/dist/infra/lib/antigravity/types.d.ts.map +1 -0
- package/dist/infra/lib/antigravity/types.js +5 -0
- package/dist/infra/lib/antigravity/types.js.map +1 -0
- package/dist/infra/lib/codex-proxy.d.ts +1 -1
- package/dist/infra/lib/codex-proxy.js +9 -9
- package/dist/infra/lib/codex-proxy.js.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.d.ts +6 -3
- package/dist/infra/lib/config/GlobalConfigManager.d.ts.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.js +47 -37
- package/dist/infra/lib/config/GlobalConfigManager.js.map +1 -1
- package/dist/infra/lib/config/GlobalConfigManager.test.d.ts +2 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.d.ts.map +1 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.js +9 -0
- package/dist/infra/lib/config/GlobalConfigManager.test.js.map +1 -0
- package/dist/infra/lib/constants.js +1 -1
- package/dist/infra/lib/constants.js.map +1 -1
- package/dist/infra/lib/gemini/auth.d.ts +3 -3
- package/dist/infra/lib/gemini/auth.js +9 -9
- package/dist/infra/lib/gemini/auth.js.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts +3 -3
- package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.js.map +1 -1
- package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +8 -8
- package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +1 -1
- package/dist/infra/lib/llm/auth/ConfigManager.js +2 -2
- package/dist/infra/lib/llm/auth/ConfigManager.js.map +1 -1
- package/dist/infra/lib/llm/auth/TokenRefresher.d.ts +1 -1
- package/dist/infra/lib/llm/auth/TokenRefresher.js +1 -1
- package/dist/infra/lib/llm/auth/index.js +1 -1
- package/dist/infra/lib/llm/auth/index.js.map +1 -1
- package/dist/infra/lib/llm/index.d.ts +1 -1
- package/dist/infra/lib/llm/index.js +1 -1
- package/dist/infra/lib/llm/types.d.ts +3 -3
- package/dist/infra/lib/llm/types.d.ts.map +1 -1
- package/dist/infra/lib/llm/types.js +1 -1
- package/dist/infra/lib/llm/utils/stream.js +1 -1
- package/dist/infra/lib/llm/utils/stream.js.map +1 -1
- package/dist/infra/lib/llm-availability.d.ts +5 -5
- package/dist/infra/lib/llm-availability.d.ts.map +1 -1
- package/dist/infra/lib/llm-availability.js +13 -10
- package/dist/infra/lib/llm-availability.js.map +1 -1
- package/dist/infra/lib/llm-availability.test.d.ts +2 -0
- package/dist/infra/lib/llm-availability.test.d.ts.map +1 -0
- package/dist/infra/lib/llm-availability.test.js +36 -0
- package/dist/infra/lib/llm-availability.test.js.map +1 -0
- package/dist/infra/lib/ui-ux/UiUxWorkflow.d.ts.map +1 -1
- package/dist/infra/lib/ui-ux/UiUxWorkflow.js +23 -5
- package/dist/infra/lib/ui-ux/UiUxWorkflow.js.map +1 -1
- package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
- package/dist/infra/orchestrator/AgentExecutor.js +30 -1
- package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
- package/dist/infra/orchestrator/AgentManifestCache.js +1 -1
- package/dist/infra/orchestrator/AgentManifestCache.js.map +1 -1
- package/dist/infra/orchestrator/BackgroundManager.js +2 -2
- package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +12 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.js +94 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.js.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +2 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +1 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js +37 -0
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +1 -0
- package/dist/infra/orchestrator/LLMCluster.d.ts +11 -11
- package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
- package/dist/infra/orchestrator/LLMCluster.js +22 -22
- package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts +3 -3
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +17 -17
- package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +2 -2
- package/dist/infra/orchestrator/SmartRouter.js +7 -7
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.test.js +74 -74
- package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
- package/dist/infra/orchestrator/agentDiscovery.d.ts +1 -1
- package/dist/infra/orchestrator/agentDiscovery.js +4 -4
- package/dist/infra/orchestrator/agentDiscovery.js.map +1 -1
- package/dist/infra/orchestrator/index.d.ts +17 -17
- package/dist/infra/orchestrator/index.d.ts.map +1 -1
- package/dist/infra/orchestrator/index.js +30 -30
- package/dist/infra/orchestrator/index.js.map +1 -1
- package/dist/infra/orchestrator/orchestrator.d.ts +4 -4
- package/dist/infra/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/infra/orchestrator/orchestrator.js +5 -5
- package/dist/infra/orchestrator/orchestrator.js.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.js +11 -0
- package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
- package/dist/infra/orchestrator/types.d.ts +7 -8
- package/dist/infra/orchestrator/types.d.ts.map +1 -1
- package/dist/infra/orchestrator/types.js +17 -18
- package/dist/infra/orchestrator/types.js.map +1 -1
- package/dist/tools/spec/specGenerator.d.ts +1 -1
- package/dist/tools/spec/specGenerator.js +1 -1
- package/hooks/antigravity-hooks.json +73 -0
- package/hooks/scripts/__tests__/codex-hook-adapter.test.js +31 -0
- package/hooks/scripts/__tests__/hook-payload.test.js +29 -0
- package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +63 -0
- package/hooks/scripts/codex-hook-adapter.js +124 -0
- package/hooks/scripts/codex-review-gate.js +7 -3
- package/hooks/scripts/devlog-gen.js +1 -1
- package/hooks/scripts/hook-payload.js +64 -0
- package/hooks/scripts/lib/dispatcher.js +20 -0
- package/hooks/scripts/llm-orchestrate.js +40 -44
- package/hooks/scripts/prompt-dispatcher.js +9 -9
- package/hooks/scripts/stop-notify.js +1 -1
- package/hooks/scripts/utils.js +1 -1
- package/package.json +1 -1
- package/skills/brand-assets/SKILL.md +11 -11
- package/skills/docs/SKILL.md +10 -5
- package/skills/event-comms/SKILL.md +1 -1
- package/skills/event-ops/SKILL.md +4 -4
- package/skills/spec/SKILL.md +29 -29
- package/skills/spec-review/SKILL.md +23 -23
- package/skills/tool-fallback/SKILL.md +2 -2
- package/skills/tool-fallback/rubrics/fallback-chain.md +2 -2
- package/skills/vibe.design/SKILL.md +183 -0
- package/skills/vibe.design/heuristics/code-extract.md +100 -0
- package/skills/vibe.design/references/README.md +39 -0
- package/skills/vibe.design/templates/DESIGN.md.template +100 -0
- package/skills/vibe.event/SKILL.md +1 -1
- package/skills/vibe.figma/SKILL.md +17 -1
- package/skills/vibe.review/SKILL.md +20 -13
- package/skills/vibe.run/SKILL.md +47 -30
- package/skills/vibe.spec/SKILL.md +4 -4
- package/skills/vibe.utils/SKILL.md +17 -17
- package/skills/vibe.verify/SKILL.md +20 -0
- package/hooks/gemini-hooks.json +0 -73
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-review
|
|
3
|
-
description: SPEC 품질 리뷰 본체 — GPT/
|
|
3
|
+
description: SPEC 품질 리뷰 본체 — GPT/Antigravity 크로스 검증, 100-point gate, Race Review(수렴 종료), Codex 적대 리뷰, 사용자 체크포인트.
|
|
4
4
|
when_to_use: spec 완료 후 또는 /vibe.spec Phase 4에서 체인. 직접 호출 금지.
|
|
5
5
|
user-invocable: false
|
|
6
6
|
tier: core
|
|
@@ -8,7 +8,7 @@ tier: core
|
|
|
8
8
|
|
|
9
9
|
# spec-review — SPEC Quality Review
|
|
10
10
|
|
|
11
|
-
Review and enhance SPEC with GPT/
|
|
11
|
+
Review and enhance SPEC with GPT/Antigravity cross-validation.
|
|
12
12
|
|
|
13
13
|
**Purpose:** Run this skill after `spec` to ensure accurate review execution. For large contexts, invoke in a new session.
|
|
14
14
|
|
|
@@ -38,7 +38,7 @@ Or via natural language trigger: "스펙 리뷰", "review spec", "명세 리뷰"
|
|
|
38
38
|
> CODEX_AVAILABLE=$(node "{{VIBE_PATH}}/hooks/scripts/codex-detect.js" 2>/dev/null || echo "unavailable")
|
|
39
39
|
> ```
|
|
40
40
|
>
|
|
41
|
-
> If `available`, `/codex:adversarial-review` is automatically invoked. If `unavailable`, falls back to the existing GPT+
|
|
41
|
+
> If `available`, `/codex:adversarial-review` is automatically invoked. If `unavailable`, falls back to the existing GPT+Antigravity workflow.
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
@@ -56,7 +56,7 @@ If the value is already the same, no-op.
|
|
|
56
56
|
```
|
|
57
57
|
/vibe.spec "feature" → SPEC created (Phase 3)
|
|
58
58
|
↓
|
|
59
|
-
Phase 4: spec-review skill (this) → Quality validation + GPT/
|
|
59
|
+
Phase 4: spec-review skill (this) → Quality validation + GPT/Antigravity review
|
|
60
60
|
↓
|
|
61
61
|
/vibe.run "feature"
|
|
62
62
|
```
|
|
@@ -246,7 +246,7 @@ Re-evaluating...
|
|
|
246
246
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
247
247
|
Score: 100/100 ✅ PASSED
|
|
248
248
|
|
|
249
|
-
✅ Quality Gate PASSED - proceeding to GPT/
|
|
249
|
+
✅ Quality Gate PASSED - proceeding to GPT/Antigravity review
|
|
250
250
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
251
251
|
```
|
|
252
252
|
|
|
@@ -285,7 +285,7 @@ How would you like to proceed?
|
|
|
285
285
|
|
|
286
286
|
---
|
|
287
287
|
|
|
288
|
-
## Step 3: Race Review (GPT +
|
|
288
|
+
## Step 3: Race Review (GPT + Antigravity Cross-Validation) - Convergence-Based (No Round Cap)
|
|
289
289
|
|
|
290
290
|
**RULES FOR RACE REVIEW:**
|
|
291
291
|
|
|
@@ -294,7 +294,7 @@ How would you like to proceed?
|
|
|
294
294
|
3. Run rounds sequentially (each round uses updated SPEC)
|
|
295
295
|
4. **No hard round cap** — loop until P1=0 AND no new findings (convergence)
|
|
296
296
|
|
|
297
|
-
> Race Mode reviews SPEC with GPT and
|
|
297
|
+
> Race Mode reviews SPEC with GPT and Antigravity in parallel, then cross-validates findings for higher confidence. The loop continues until quality converges naturally.
|
|
298
298
|
|
|
299
299
|
### Termination Rules
|
|
300
300
|
|
|
@@ -318,7 +318,7 @@ When the same findings repeat across rounds, the auto-apply loop has hit a wall.
|
|
|
318
318
|
|
|
319
319
|
Same findings repeated from Round {N-1}. Auto-applier cannot resolve:
|
|
320
320
|
|
|
321
|
-
| # | Issue | Severity | GPT |
|
|
321
|
+
| # | Issue | Severity | GPT | Antigravity | Reason it's stuck |
|
|
322
322
|
|---|-------|----------|-----|--------|-------------------|
|
|
323
323
|
| 1 | {issue title} | P1 | ✅ | ✅ | {e.g., "fix requires domain decision"} |
|
|
324
324
|
| 2 | {issue title} | P2 | ✅ | ❌ | {e.g., "conflicts with existing constraint"} |
|
|
@@ -371,7 +371,7 @@ To prevent LLM cosmetic noise from causing infinite loops while still reaching 1
|
|
|
371
371
|
|
|
372
372
|
### 3.1 Review Loop (No Round Cap)
|
|
373
373
|
|
|
374
|
-
**Run GPT +
|
|
374
|
+
**Run GPT + Antigravity in PARALLEL via Bash tool for each round. Stop when termination rules trigger.**
|
|
375
375
|
|
|
376
376
|
**🚨 IMPORTANT: SPEC content is too large for CLI arguments. Use --input file method (no pipe needed).**
|
|
377
377
|
|
|
@@ -388,7 +388,7 @@ To prevent LLM cosmetic noise from causing infinite loops while still reaching 1
|
|
|
388
388
|
**Step B: Script path:**
|
|
389
389
|
- `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
|
|
390
390
|
|
|
391
|
-
**Step C: Run GPT +
|
|
391
|
+
**Step C: Run GPT + Antigravity in PARALLEL (two separate Bash tool calls at once):**
|
|
392
392
|
|
|
393
393
|
```bash
|
|
394
394
|
# GPT review (Bash tool call 1)
|
|
@@ -396,16 +396,16 @@ node "[LLM_SCRIPT]" gpt orchestrate-json --input "[SCRATCHPAD]/spec-review-input
|
|
|
396
396
|
```
|
|
397
397
|
|
|
398
398
|
```bash
|
|
399
|
-
#
|
|
400
|
-
node "[LLM_SCRIPT]"
|
|
399
|
+
# Antigravity review (Bash tool call 2 - run in parallel with GPT)
|
|
400
|
+
node "[LLM_SCRIPT]" antigravity orchestrate-json --input "[SCRATCHPAD]/spec-review-input.json"
|
|
401
401
|
```
|
|
402
402
|
|
|
403
403
|
**🚨 MANDATORY: Replace `[SCRATCHPAD]` with the actual scratchpad directory path.**
|
|
404
404
|
**🚨 Replace `[N]` with the current round number (1, 2, 3, ...).**
|
|
405
405
|
**🚨 Replace `[LLM_SCRIPT]` with the resolved absolute path from Step B.**
|
|
406
|
-
**🚨 Run GPT and
|
|
406
|
+
**🚨 Run GPT and Antigravity calls in PARALLEL (two separate Bash tool calls at once).**
|
|
407
407
|
|
|
408
|
-
- Round 1: Write SPEC → Run GPT +
|
|
408
|
+
- Round 1: Write SPEC → Run GPT + Antigravity in parallel (full scope) → Cross-validate → Apply fixes → Update SPEC file
|
|
409
409
|
- Round 2: Write updated SPEC → Run (P1+P2 scope) → Cross-validate → Apply fixes → Update SPEC file
|
|
410
410
|
- Round 3+: Write updated SPEC → Run (P1-only scope) → Cross-validate → Apply fixes → Continue until P1=0 AND no new findings (or convergence detected)
|
|
411
411
|
|
|
@@ -438,7 +438,7 @@ Key changes found across {N} review rounds:
|
|
|
438
438
|
|
|
439
439
|
| # | Change | Source | Confidence |
|
|
440
440
|
|---|--------|--------|------------|
|
|
441
|
-
| 1 | {change1} | GPT+
|
|
441
|
+
| 1 | {change1} | GPT+Antigravity | 100% |
|
|
442
442
|
| 2 | {change2} | GPT only | 50% |
|
|
443
443
|
| ... | ... | ... | ... |
|
|
444
444
|
|
|
@@ -469,10 +469,10 @@ Model Results:
|
|
|
469
469
|
| Model | Issues | Duration |
|
|
470
470
|
|--------|--------|----------|
|
|
471
471
|
| GPT | 2 | 1823ms |
|
|
472
|
-
|
|
|
472
|
+
| Antigravity | 2 | 2156ms |
|
|
473
473
|
|
|
474
474
|
Cross-Validated Issues:
|
|
475
|
-
| Issue | GPT |
|
|
475
|
+
| Issue | GPT | Antigravity | Codex | Confidence |
|
|
476
476
|
|--------------------------|-----|--------|-------|------------|
|
|
477
477
|
| Missing retry logic | ✅ | ✅ | ✅ | 100% → P1 |
|
|
478
478
|
| Missing rate limiting | ✅ | ✅ | ✅ | 100% → P1 |
|
|
@@ -491,7 +491,7 @@ Auto-applying...
|
|
|
491
491
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
492
492
|
|
|
493
493
|
Cross-Validated Issues:
|
|
494
|
-
| Issue | GPT |
|
|
494
|
+
| Issue | GPT | Antigravity | Codex | Confidence |
|
|
495
495
|
|-----------------------------|-----|--------|-------|------------|
|
|
496
496
|
| Concurrent session unclear | ✅ | ❌ | ❌ | 50% → P2 |
|
|
497
497
|
|
|
@@ -517,14 +517,14 @@ Cross-Validated Issues: None
|
|
|
517
517
|
### Step 3.1: Codex Adversarial Review (When Codex Plugin Is Active)
|
|
518
518
|
|
|
519
519
|
> **Activation condition**: Automatically runs when Codex plugin is installed. Skipped if not installed.
|
|
520
|
-
> Runs **simultaneously** with GPT+
|
|
520
|
+
> Runs **simultaneously** with GPT+Antigravity Race Review for triple cross-validation.
|
|
521
521
|
|
|
522
522
|
Codex adversarial review **challenges the design decisions** in the SPEC:
|
|
523
523
|
- Validates whether an alternative architecture would be better
|
|
524
524
|
- Checks for over-engineering or under-engineering
|
|
525
525
|
- Identifies missing edge cases and non-functional requirements
|
|
526
526
|
|
|
527
|
-
**Execution (parallel with GPT+
|
|
527
|
+
**Execution (parallel with GPT+Antigravity Race):**
|
|
528
528
|
|
|
529
529
|
```
|
|
530
530
|
/codex:adversarial-review
|
|
@@ -533,7 +533,7 @@ Codex adversarial review **challenges the design decisions** in the SPEC:
|
|
|
533
533
|
**Result integration**: Add Codex column to the Race Review cross-validation table:
|
|
534
534
|
|
|
535
535
|
```markdown
|
|
536
|
-
| Issue | GPT |
|
|
536
|
+
| Issue | GPT | Antigravity | Codex | Confidence |
|
|
537
537
|
|-------|-----|--------|-------|------------|
|
|
538
538
|
| {issue} | ✅/❌ | ✅/❌ | ✅/❌ | {%} |
|
|
539
539
|
```
|
|
@@ -693,9 +693,9 @@ Expected (split): .vibe/features/{feature-name}/_index.feature
|
|
|
693
693
|
Please run /vibe.spec "{feature-name}" first to create the Feature file.
|
|
694
694
|
```
|
|
695
695
|
|
|
696
|
-
### GPT/
|
|
696
|
+
### GPT/Antigravity Call Failed
|
|
697
697
|
```
|
|
698
|
-
⚠️ WARNING: {GPT|
|
|
698
|
+
⚠️ WARNING: {GPT|Antigravity} call failed
|
|
699
699
|
|
|
700
700
|
Error: {error message}
|
|
701
701
|
|
|
@@ -87,8 +87,8 @@ Request → Check circuit
|
|
|
87
87
|
|
|
88
88
|
| Task Type | Primary → Secondary → Fallback |
|
|
89
89
|
|-----------|-------------------------------|
|
|
90
|
-
| architecture, debugging | GPT →
|
|
91
|
-
| uiux, code-analysis |
|
|
90
|
+
| architecture, debugging | GPT → Antigravity → Claude |
|
|
91
|
+
| uiux, code-analysis | Antigravity → GPT → Claude |
|
|
92
92
|
| code-gen, general | Claude only |
|
|
93
93
|
|
|
94
94
|
## Principles
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
| Task Type | Primary | Secondary | Fallback |
|
|
25
25
|
|-----------|---------|-----------|----------|
|
|
26
|
-
| Architecture, debugging | GPT |
|
|
27
|
-
| UI/UX, code analysis |
|
|
26
|
+
| Architecture, debugging | GPT | Antigravity | Claude direct |
|
|
27
|
+
| UI/UX, code analysis | Antigravity | GPT | Claude direct |
|
|
28
28
|
| Code generation, general | Claude | — | — |
|
|
29
29
|
|
|
30
30
|
**On 429 / rate limit**: skip to secondary immediately — no retry on rate-limited primary.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe.design
|
|
3
|
+
description: DESIGN.md(시각 품질 SSOT) 생성·검증·드리프트 검사·동기화. Figma 독립.
|
|
4
|
+
argument-hint: "init [--from=interview|code|reference|figma] | lint | verify | sync"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /vibe.design
|
|
9
|
+
|
|
10
|
+
**vibe 의 세 번째 SSOT — 시각 품질 계약 문서(`DESIGN.md`)** 의 라이프사이클을 전담한다.
|
|
11
|
+
|
|
12
|
+
> `CLAUDE.md`(코드) · `AGENTS.md`(빌드) 에 이은 시각 규약. **Figma 에 종속되지 않는다** — Figma 는 4 가지 입력 소스 중 하나.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/vibe.design init # 인터뷰 (디폴트)
|
|
18
|
+
/vibe.design init --from=interview # 대화형 9 섹션 작성
|
|
19
|
+
/vibe.design init --from=code # 기존 코드 토큰 역추출
|
|
20
|
+
/vibe.design init --from=reference --reference=linear # awesome-design-md 시드 선택
|
|
21
|
+
/vibe.design init --from=figma --file=<key> # /vibe.figma 위임 (옵션)
|
|
22
|
+
/vibe.design lint # Stitch 9 섹션 완전성 검증
|
|
23
|
+
/vibe.design verify [--files=<glob>] # 구현 ↔ DESIGN.md hex 드리프트 (v1)
|
|
24
|
+
/vibe.design sync # Figma 연결 시 양방향 동기화 (Should, Phase 2)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Philosophy
|
|
28
|
+
|
|
29
|
+
- **Figma 독립**: 모든 서브커맨드는 Figma 없이 동작. Figma 연결 시에만 sync 활성.
|
|
30
|
+
- **권유 > 강제**: DESIGN.md 부재 = 안내 메시지 1 회. `/vibe.run` · `/vibe.verify` 는 막지 않는다.
|
|
31
|
+
- **Stitch 9 섹션 표준**: 외부 에이전트 호환 (Google Stitch, awesome-design-md 생태계).
|
|
32
|
+
- **버전 frontmatter**: `<!-- design-md-version: 1 -->` 로 미래 호환.
|
|
33
|
+
- **루트 배치**: `CLAUDE.md` · `AGENTS.md` 와 동일하게 프로젝트 루트.
|
|
34
|
+
|
|
35
|
+
## Process
|
|
36
|
+
|
|
37
|
+
> **⏱️ Timer**: 시작 시 `getCurrentTime` 호출, `{start_time}` 으로 기록.
|
|
38
|
+
|
|
39
|
+
### Subcommand: `init`
|
|
40
|
+
|
|
41
|
+
**진입 조건**: 프로젝트 루트에 `DESIGN.md` 없음 (있으면 덮어쓰기 확인).
|
|
42
|
+
|
|
43
|
+
**경로 결정**:
|
|
44
|
+
|
|
45
|
+
| `--from` | 동작 |
|
|
46
|
+
|---------|------|
|
|
47
|
+
| 미지정 / `interview` | 대화형 9 섹션 인터뷰 (디폴트) |
|
|
48
|
+
| `code` | 기존 코드에서 토큰 역추출 → 인터뷰 보강 |
|
|
49
|
+
| `reference` | `--reference=<slug>` 로 시드 카탈로그 선택 → §1·§2·§3 시드 + §4–§9 단축 인터뷰 |
|
|
50
|
+
| `figma` | `/vibe.figma --emit-design-md` 위임 (Figma MCP 필요) |
|
|
51
|
+
|
|
52
|
+
**공통 출력**:
|
|
53
|
+
- 위치: `<프로젝트 루트>/DESIGN.md`
|
|
54
|
+
- 첫 줄: `<!-- design-md-version: 1 -->`
|
|
55
|
+
- 9 H2 섹션 (Visual Theme / Color Palette / Typography / Components / Layout / Depth / Do's & Don'ts / Responsive / Agent Prompt Guide)
|
|
56
|
+
- 템플릿: `templates/DESIGN.md.template`
|
|
57
|
+
|
|
58
|
+
#### `--from=interview` 흐름
|
|
59
|
+
|
|
60
|
+
1. 사용자가 9 섹션을 순차 답변 (브랜드 톤, 컬러, 폰트, 컴포넌트 스타일, 그리드, 그림자/뎁스, 금기, 브레이크포인트, 에이전트 가이드)
|
|
61
|
+
2. 빈 섹션은 템플릿 기본값(주석) 으로 채움
|
|
62
|
+
3. `DESIGN.md` 저장 + `lint` 자동 실행 → P1 없으면 성공
|
|
63
|
+
|
|
64
|
+
#### `--from=code` 흐름
|
|
65
|
+
|
|
66
|
+
1. `.vibe/config.json` 의 `stacks[].type` 으로 추출기 결정 (`heuristics/code-extract.md`)
|
|
67
|
+
2. v1 필수 패턴: **Tailwind config / CSS custom properties / styled-components theme**
|
|
68
|
+
3. 추출된 토큰을 §2·§3·§4 시드로 사용
|
|
69
|
+
4. 나머지 6 섹션은 단축 인터뷰 (≤3 질문) 또는 템플릿 기본값
|
|
70
|
+
|
|
71
|
+
#### `--from=reference` 흐름
|
|
72
|
+
|
|
73
|
+
1. `references/README.md` 시드 카탈로그에서 `--reference=<slug>` 매칭 (`linear`, `vercel`, `stripe` …)
|
|
74
|
+
2. 시드의 `style-preset` 한 줄 (예: `"minimal, neutral grays + electric purple accent, Inter Display"`) 로 §1·§2·§3 기본값 채움
|
|
75
|
+
3. §4–§9 는 단축 인터뷰 (≤3 질문)
|
|
76
|
+
4. 네트워크 차단 환경에서도 동작 (시드는 로컬 시드)
|
|
77
|
+
|
|
78
|
+
#### `--from=figma` 흐름
|
|
79
|
+
|
|
80
|
+
1. `/vibe.figma --emit-design-md --file=<key>` 호출 (위임)
|
|
81
|
+
2. 산출물(`DESIGN.md`) 받아서 lint 통과 확인
|
|
82
|
+
|
|
83
|
+
### Subcommand: `lint`
|
|
84
|
+
|
|
85
|
+
**입력**: 프로젝트 루트 `DESIGN.md`
|
|
86
|
+
|
|
87
|
+
**체크**:
|
|
88
|
+
- 9 섹션 모두 존재 (`lintMissingSections` from `design-md-parser.ts`)
|
|
89
|
+
- frontmatter 버전 주석 존재
|
|
90
|
+
- §2 (Color Palette) 에 최소 1 개 hex 토큰
|
|
91
|
+
- §9 (Agent Prompt Guide) 비어있지 않음
|
|
92
|
+
|
|
93
|
+
**출력**:
|
|
94
|
+
```
|
|
95
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
+
✅ DESIGN.md lint PASS
|
|
97
|
+
9 sections, 12 color tokens, version 1
|
|
98
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
또는:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
105
|
+
❌ DESIGN.md lint FAIL (P1: 2)
|
|
106
|
+
Missing: Typography, Responsive
|
|
107
|
+
→ Run /vibe.design init to regenerate, or edit DESIGN.md
|
|
108
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**성능 목표**: <200ms (100 줄 DESIGN.md 기준).
|
|
112
|
+
|
|
113
|
+
### Subcommand: `verify`
|
|
114
|
+
|
|
115
|
+
**입력**:
|
|
116
|
+
- 프로젝트 루트 `DESIGN.md` (없으면 안내 후 종료)
|
|
117
|
+
- `--files=<glob>` (기본: 최근 변경 파일 — `/vibe.verify` 의 changed-files 정책 따름)
|
|
118
|
+
|
|
119
|
+
**체크 (v1 범위)**:
|
|
120
|
+
- `extractHexTokens(DESIGN.md)` → 허용 토큰 셋
|
|
121
|
+
- `findHardcodedColors(files, allowed)` → 허용 셋 밖 hex = P1 후보
|
|
122
|
+
|
|
123
|
+
**v1 비범위** (Phase 2+):
|
|
124
|
+
- spacing / font-family 드리프트
|
|
125
|
+
- HSL/RGB/named color
|
|
126
|
+
- Tailwind arbitrary value `bg-[#xxxxxx]`
|
|
127
|
+
|
|
128
|
+
**출력**:
|
|
129
|
+
```
|
|
130
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
✅ DESIGN.md verify PASS (32 files scanned)
|
|
132
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
또는:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
139
|
+
❌ DESIGN.md verify FAIL (P1: 3 hex drifts)
|
|
140
|
+
src/Button.tsx:42 #FF5733 not in DESIGN.md tokens
|
|
141
|
+
src/Card.tsx:18 #123456 not in DESIGN.md tokens
|
|
142
|
+
src/Nav.tsx:7 #ABCDEF not in DESIGN.md tokens
|
|
143
|
+
→ Add to DESIGN.md §2 Color Palette, or replace with token
|
|
144
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**성능 목표**: <1s / 100 파일.
|
|
148
|
+
|
|
149
|
+
### Subcommand: `sync` (Should, Phase 2)
|
|
150
|
+
|
|
151
|
+
**진입 조건**: `~/.vibe/config.json#figma.token` 존재 + `--file=<key>` 또는 프로젝트에 figma 연결 메타.
|
|
152
|
+
|
|
153
|
+
**v1 동작**: "Phase 2 에서 활성됩니다. 현재는 `/vibe.figma --emit-design-md` 를 사용하세요." 메시지 후 종료.
|
|
154
|
+
|
|
155
|
+
## Integration
|
|
156
|
+
|
|
157
|
+
| Skill | 통합 지점 |
|
|
158
|
+
|------|---------|
|
|
159
|
+
| `/vibe.run` | UI 스택 진입 시 `DESIGN.md` 없으면 `### DESIGN.md Gate` 에서 권유 (ultrawork 시 silent skip) |
|
|
160
|
+
| `/vibe.verify` | `### 3.2 Visual Drift Detection` 에서 `vibe.design verify` 호출 — P1 → fail |
|
|
161
|
+
| `/vibe.review` | `### Phase 2.5 Visual P1 Baseline` 에서 DESIGN.md 우선, 없으면 WCAG AA 폴백 |
|
|
162
|
+
| `/vibe.figma` | WRITE 는 DESIGN.md 읽어 톤·팔레트 우선, READ 는 `--emit-design-md` 플래그로 출력 |
|
|
163
|
+
|
|
164
|
+
## Figma Credential Handling (init/sync only)
|
|
165
|
+
|
|
166
|
+
- 토큰 출처: `~/.vibe/config.json#figma.token` (chmod 0o600)
|
|
167
|
+
- 메모리 외 노출 금지. 로그에는 마지막 4 자만 노출 (`****abc1`)
|
|
168
|
+
- `--from=figma` · `sync` 외 서브커맨드는 토큰 읽지 않음
|
|
169
|
+
|
|
170
|
+
## Output
|
|
171
|
+
|
|
172
|
+
| 파일 | 생성/수정 |
|
|
173
|
+
|-----|---------|
|
|
174
|
+
| `<root>/DESIGN.md` | `init` / `sync` |
|
|
175
|
+
| 콘솔 리포트 | `lint` / `verify` |
|
|
176
|
+
|
|
177
|
+
## Heuristics & References
|
|
178
|
+
|
|
179
|
+
- 코드 역추출 패턴: `heuristics/code-extract.md`
|
|
180
|
+
- 시드 카탈로그: `references/README.md`
|
|
181
|
+
- 템플릿: `templates/DESIGN.md.template`
|
|
182
|
+
|
|
183
|
+
ARGUMENTS: $ARGUMENTS
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# vibe.design — Code Extract Heuristics
|
|
2
|
+
|
|
3
|
+
`/vibe.design init --from=code` 가 기존 코드에서 시각 토큰을 역추출할 때 따르는 패턴.
|
|
4
|
+
|
|
5
|
+
## v1 Required Patterns
|
|
6
|
+
|
|
7
|
+
v1 에서 **반드시 동작**해야 하는 추출기 (테스트 픽스처 보장):
|
|
8
|
+
|
|
9
|
+
### 1. Tailwind config
|
|
10
|
+
|
|
11
|
+
대상: `tailwind.config.{ts,js,cjs,mjs}` · `tailwind.config.*` · `app.config.ts` (Nuxt)
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// tailwind.config.ts
|
|
15
|
+
export default {
|
|
16
|
+
theme: {
|
|
17
|
+
extend: {
|
|
18
|
+
colors: {
|
|
19
|
+
primary: '#5E6AD2',
|
|
20
|
+
accent: '#10B981',
|
|
21
|
+
},
|
|
22
|
+
fontFamily: {
|
|
23
|
+
sans: ['Inter', 'system-ui'],
|
|
24
|
+
},
|
|
25
|
+
spacing: { '18': '4.5rem' },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
추출 결과:
|
|
32
|
+
- `§2 Color Palette` ← `theme.extend.colors.*`
|
|
33
|
+
- `§3 Typography` ← `theme.extend.fontFamily.*`
|
|
34
|
+
- `§5 Layout spacing scale` ← `theme.extend.spacing.*`
|
|
35
|
+
|
|
36
|
+
### 2. CSS custom properties (CSS variables)
|
|
37
|
+
|
|
38
|
+
대상: `**/*.css` · `**/*.scss` 의 `:root { --... }`
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
:root {
|
|
42
|
+
--color-primary: #5E6AD2;
|
|
43
|
+
--color-bg: #FFFFFF;
|
|
44
|
+
--font-sans: 'Inter', sans-serif;
|
|
45
|
+
--space-md: 16px;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
추출 결과:
|
|
50
|
+
- `--color-*` → `§2 Color Palette` (semantic 이름 유지)
|
|
51
|
+
- `--font-*` → `§3 Typography`
|
|
52
|
+
- `--space-*` · `--size-*` → `§5 Layout`
|
|
53
|
+
- `--shadow-*` · `--elevation-*` → `§6 Depth`
|
|
54
|
+
|
|
55
|
+
### 3. styled-components theme
|
|
56
|
+
|
|
57
|
+
대상: `**/theme.{ts,tsx,js}` · `ThemeProvider` 의 `theme={...}`
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
export const theme = {
|
|
61
|
+
colors: { primary: '#5E6AD2', bg: '#FFFFFF' },
|
|
62
|
+
typography: { fontFamily: 'Inter, sans-serif' },
|
|
63
|
+
spacing: [4, 8, 16, 24, 32],
|
|
64
|
+
};
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
추출 결과: 위 CSS-vars 와 동일 매핑.
|
|
68
|
+
|
|
69
|
+
## Documented-only Patterns (v1 비범위, Phase 2+)
|
|
70
|
+
|
|
71
|
+
문서로만 정리. 실제 추출기는 Phase 2 에서 구현.
|
|
72
|
+
|
|
73
|
+
| 패턴 | 위치 | Phase 2 계획 |
|
|
74
|
+
|-----|------|------------|
|
|
75
|
+
| PostCSS custom properties | `postcss.config.*` + `@custom-media` | Tailwind 추출기 확장 |
|
|
76
|
+
| SCSS variables | `**/*.scss` 의 `$variable` | CSS-vars 추출기 확장 |
|
|
77
|
+
| Emotion theme | `@emotion/react` ThemeProvider | styled-components 추출기 확장 |
|
|
78
|
+
| Vanilla Extract | `*.css.ts` `createTheme` | 신규 추출기 |
|
|
79
|
+
| Panda CSS / Linaria | `panda.config.ts` / `*.linaria.ts` | 신규 추출기 |
|
|
80
|
+
| Flutter ThemeData | `theme.dart` | 모바일 트랙 (Phase 3) |
|
|
81
|
+
| iOS asset catalog | `*.xcassets/Colors.xcassets` | 모바일 트랙 (Phase 3) |
|
|
82
|
+
| Android styles.xml | `res/values/colors.xml` | 모바일 트랙 (Phase 3) |
|
|
83
|
+
|
|
84
|
+
## Stack 매핑
|
|
85
|
+
|
|
86
|
+
`.vibe/config.json#stacks[].type` 으로 추출기 선택:
|
|
87
|
+
|
|
88
|
+
| Stack | v1 활성 추출기 |
|
|
89
|
+
|------|--------------|
|
|
90
|
+
| `typescript-react` / `typescript-nextjs` | Tailwind + CSS-vars + styled-components |
|
|
91
|
+
| `typescript-vue` / `typescript-nuxt` | Tailwind + CSS-vars |
|
|
92
|
+
| `typescript-svelte` / `typescript-astro` | Tailwind + CSS-vars |
|
|
93
|
+
| `typescript-angular` | CSS-vars (Tailwind 옵션) |
|
|
94
|
+
| `typescript-react-native` | styled-components (Theme 객체) |
|
|
95
|
+
| `dart-flutter` · `swift-ios` · `kotlin-android` | (Phase 3 — 문서만) |
|
|
96
|
+
|
|
97
|
+
## Fallback
|
|
98
|
+
|
|
99
|
+
추출 실패 또는 토큰 0 개 → 인터뷰 모드로 자동 폴백 (`--from=interview` 처럼 동작).
|
|
100
|
+
사용자에게 한 줄 안내: "코드에서 토큰을 찾지 못해 인터뷰로 전환합니다."
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# vibe.design — Reference Seeds
|
|
2
|
+
|
|
3
|
+
`awesome-design-md` 생태계에서 추출한 **로컬 시드 카탈로그**. 네트워크 없이도
|
|
4
|
+
`/vibe.design init --from=reference --reference=<slug>` 으로 §1·§2·§3 기본값을 시드한다.
|
|
5
|
+
|
|
6
|
+
각 시드의 `style-preset` 컬럼은 한 문장으로 시각 무드를 요약하며, init 시 §1 Visual
|
|
7
|
+
Theme + §2 Color Palette 의 primary/accent + §3 Typography family 의 기본값으로 변환된다.
|
|
8
|
+
나머지 §4–§9 는 단축 인터뷰(≤3 질문) 로 채운다.
|
|
9
|
+
|
|
10
|
+
## Catalog
|
|
11
|
+
|
|
12
|
+
| Slug | Style Preset | 주된 무드 |
|
|
13
|
+
|------|--------------|----------|
|
|
14
|
+
| `linear` | minimal, neutral grays + electric purple accent (#5E6AD2), Inter Display | 도구·정확·조용 |
|
|
15
|
+
| `vercel` | mono-light, pure black/white + zinc neutrals, Geist Sans | 미니멀·기술 |
|
|
16
|
+
| `stripe` | clean white + indigo accent (#635BFF), Sohne / Inter | 신뢰·전문 |
|
|
17
|
+
| `notion` | warm off-white (#FBFBFA) + charcoal text, system serif + sans | 따뜻·문서 |
|
|
18
|
+
| `github` | crisp white/dark + GitHub blue (#0969DA), system-ui | 개발자·정보밀도 |
|
|
19
|
+
| `apple` | premium white + space gray, SF Pro / system | 프리미엄·여백 |
|
|
20
|
+
| `figma` | dark canvas + multi-color accents, Inter | 창의·툴링 |
|
|
21
|
+
| `tailwind` | white + sky/cyan accent (#06B6D4), Inter | 유틸·교육 |
|
|
22
|
+
| `posthog` | playful peach + dark navy, Matter SQ | 친근·실험 |
|
|
23
|
+
| `supabase` | dark + emerald accent (#3ECF8E), Custom Sans | 모던·DB |
|
|
24
|
+
| `arc` | iridescent gradients + soft pastels, Inter Display | 미래·브라우저 |
|
|
25
|
+
| `clerk` | white + purple/violet accent, Inter | 인증·SaaS |
|
|
26
|
+
|
|
27
|
+
## Adding a new seed
|
|
28
|
+
|
|
29
|
+
1. 카탈로그 표에 한 줄 추가 (slug · style-preset · 무드)
|
|
30
|
+
2. `style-preset` 은 한 문장: `<intensity>, <palette>, <font family>`
|
|
31
|
+
3. 라이선스: 시드는 시각 규약 텍스트만 보유 (브랜드 로고/이미지 미포함)
|
|
32
|
+
|
|
33
|
+
## How `init --from=reference` uses these
|
|
34
|
+
|
|
35
|
+
1. `--reference=<slug>` 매칭 → `style-preset` 추출
|
|
36
|
+
2. `style-preset` 의 palette 토큰 → `DESIGN.md §2 Color Palette` 의 primary/accent 시드
|
|
37
|
+
3. font family → `§3 Typography` 의 Family 시드
|
|
38
|
+
4. intensity 문구 → `§1 Visual Theme` 의 한 문단 초안
|
|
39
|
+
5. `§4–§9` 는 단축 인터뷰 (컴포넌트 radius, spacing scale, breakpoints) 로 보강
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<!-- design-md-version: 1 -->
|
|
2
|
+
<!-- generated-by: vibe.design -->
|
|
3
|
+
<!-- format: Google Stitch 9-section standard -->
|
|
4
|
+
|
|
5
|
+
# DESIGN.md — Visual Quality SSOT
|
|
6
|
+
|
|
7
|
+
> 이 문서는 프로젝트의 시각 규약 단일 출처(SSOT)입니다.
|
|
8
|
+
> `CLAUDE.md`(코드) · `AGENTS.md`(빌드) 와 동급으로 외부 AI 에이전트가 직접 읽습니다.
|
|
9
|
+
> 수정 시 `/vibe.design lint` 로 9 섹션 완전성을 검증하세요.
|
|
10
|
+
|
|
11
|
+
## Visual Theme
|
|
12
|
+
|
|
13
|
+
> §1 — 브랜드 톤 한 문단 (분위기, 무드, 핵심 정서).
|
|
14
|
+
|
|
15
|
+
예시: "Minimal · neutral grays + single accent · 도구처럼 정확하고 조용한 인상."
|
|
16
|
+
|
|
17
|
+
## Color Palette
|
|
18
|
+
|
|
19
|
+
> §2 — hex 토큰 리스트 (이 섹션의 hex 만 verify 통과). semantic 이름 우선.
|
|
20
|
+
|
|
21
|
+
- Primary: `#000000`
|
|
22
|
+
- Background: `#FFFFFF`
|
|
23
|
+
- Text: `#1A1A1A`
|
|
24
|
+
- Border: `#E5E5E5`
|
|
25
|
+
- Accent: `#5E6AD2`
|
|
26
|
+
- Success: `#10B981`
|
|
27
|
+
- Warning: `#F59E0B`
|
|
28
|
+
- Error: `#EF4444`
|
|
29
|
+
|
|
30
|
+
## Typography
|
|
31
|
+
|
|
32
|
+
> §3 — 폰트 패밀리, 사이즈 스케일, 행간/자간.
|
|
33
|
+
|
|
34
|
+
- Family: `"Inter", -apple-system, system-ui, sans-serif`
|
|
35
|
+
- Display: 48 / 56 (weight 600)
|
|
36
|
+
- H1: 32 / 40 (weight 600)
|
|
37
|
+
- H2: 24 / 32 (weight 600)
|
|
38
|
+
- Body: 16 / 24 (weight 400)
|
|
39
|
+
- Caption: 14 / 20 (weight 400)
|
|
40
|
+
- Code: `"JetBrains Mono", monospace`
|
|
41
|
+
|
|
42
|
+
## Components
|
|
43
|
+
|
|
44
|
+
> §4 — 공용 컴포넌트의 시각 규약 (Button / Input / Card / Modal …).
|
|
45
|
+
|
|
46
|
+
- **Button**: radius 8px, padding 12px 20px, transition 150ms ease
|
|
47
|
+
- **Input**: radius 6px, border 1px solid Border, focus ring 2px Accent
|
|
48
|
+
- **Card**: radius 12px, padding 24px, background Background, border 1px solid Border
|
|
49
|
+
- **Modal**: max-width 480px, backdrop blur 8px, radius 16px
|
|
50
|
+
|
|
51
|
+
## Layout
|
|
52
|
+
|
|
53
|
+
> §5 — 그리드, 간격 스케일, 컨테이너 최대폭.
|
|
54
|
+
|
|
55
|
+
- Spacing scale: `4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 96`
|
|
56
|
+
- Container max-width: 1200px
|
|
57
|
+
- Section vertical rhythm: 96px (desktop) / 64px (mobile)
|
|
58
|
+
- Grid: 12-col, gutter 24px
|
|
59
|
+
|
|
60
|
+
## Depth
|
|
61
|
+
|
|
62
|
+
> §6 — 그림자, elevation, z-index 계층.
|
|
63
|
+
|
|
64
|
+
- elevation-0: none (flat)
|
|
65
|
+
- elevation-1: `0 1px 2px rgba(0,0,0,0.05)`
|
|
66
|
+
- elevation-2: `0 4px 8px rgba(0,0,0,0.08)`
|
|
67
|
+
- elevation-3: `0 12px 24px rgba(0,0,0,0.12)`
|
|
68
|
+
- z-index: base 0, dropdown 10, modal 100, toast 1000
|
|
69
|
+
|
|
70
|
+
## Do's & Don'ts
|
|
71
|
+
|
|
72
|
+
> §7 — 금기와 권장 사항 (visual P1 의 시드).
|
|
73
|
+
|
|
74
|
+
**DO**
|
|
75
|
+
- 색은 §2 Color Palette 의 토큰만 사용
|
|
76
|
+
- 모든 인터랙티브 요소에 focus ring (2px Accent)
|
|
77
|
+
- spacing 은 §5 scale 에서만 선택
|
|
78
|
+
|
|
79
|
+
**DON'T**
|
|
80
|
+
- hex 하드코딩 (`bg: #FF0000` 금지 — 토큰으로 §2 에 등록)
|
|
81
|
+
- 임의 그림자값 (반드시 §6 elevation 사용)
|
|
82
|
+
- 폰트 패밀리 임시 변경
|
|
83
|
+
|
|
84
|
+
## Responsive
|
|
85
|
+
|
|
86
|
+
> §8 — 브레이크포인트와 적응 규칙.
|
|
87
|
+
|
|
88
|
+
- Breakpoints: `sm: 640px`, `md: 768px`, `lg: 1024px`, `xl: 1280px`, `2xl: 1536px`
|
|
89
|
+
- Mobile-first 작성, `min-width` 미디어쿼리만 사용
|
|
90
|
+
- Section vertical rhythm: 96px (lg+) / 64px (sm/md)
|
|
91
|
+
- Touch target 최소 44×44px (mobile)
|
|
92
|
+
|
|
93
|
+
## Agent Prompt Guide
|
|
94
|
+
|
|
95
|
+
> §9 — UI 코드 생성 AI 에이전트를 위한 한 문단 가이드.
|
|
96
|
+
|
|
97
|
+
"UI 코드를 생성/수정할 때 §2 Color Palette · §3 Typography · §5 Layout spacing scale 의 토큰만 사용한다.
|
|
98
|
+
hex 하드코딩 시 §2 에 토큰을 추가하거나 기존 토큰으로 치환한다.
|
|
99
|
+
신규 컴포넌트는 §4 의 radius · padding 규칙을 따른다.
|
|
100
|
+
브레이크포인트는 §8 만 사용한다."
|
|
@@ -147,7 +147,7 @@ python output/serve.py
|
|
|
147
147
|
# - Timeline view with D-Day progress
|
|
148
148
|
# - Generate buttons per step
|
|
149
149
|
# - File preview links
|
|
150
|
-
# - API status (
|
|
150
|
+
# - API status (Antigravity/Aligo key validity)
|
|
151
151
|
# - Dark theme with community color coding
|
|
152
152
|
```
|
|
153
153
|
|
|
@@ -45,6 +45,8 @@ Step 1) 플래그 수집
|
|
|
45
45
|
hasNew = args에 "--new" 포함
|
|
46
46
|
hasTeach = args에 "--teach" 포함
|
|
47
47
|
hasNewState = args에 "--new-state" 포함 (Branch 3 전용: state 파일 무시하고 새로 그림)
|
|
48
|
+
hasEmitDesignMd = args에 "--emit-design-md" 포함 (Branch 1/2 전용: READ 완료 후 DESIGN.md 출력)
|
|
49
|
+
hasReadDesignMd = 프로젝트 루트에 DESIGN.md 존재 (Branch 3 전용: WRITE 시 톤·팔레트 우선 입력)
|
|
48
50
|
|
|
49
51
|
Step 2) 위치 인자 분류
|
|
50
52
|
positional = 모든 비-플래그 인자
|
|
@@ -218,6 +220,12 @@ Load skill `design-audit`
|
|
|
218
220
|
→ 5-dimension 점검 (a11y, performance, responsive, theming, AI slop)
|
|
219
221
|
→ P1 finding은 review 큐에 기록 (read-only)
|
|
220
222
|
|
|
223
|
+
⤵ Phase 6.5 (hasEmitDesignMd == true 시)
|
|
224
|
+
→ resolved tokens (Color/Typography/Spacing) + design-audit 산출물을
|
|
225
|
+
DESIGN.md (Stitch 9 섹션) 으로 정제해 프로젝트 루트에 저장
|
|
226
|
+
→ 첫 줄: `<!-- design-md-version: 1 -->`
|
|
227
|
+
→ `vibe.design lint` 자동 통과 확인
|
|
228
|
+
|
|
221
229
|
⛔ Phase 6 + design-audit 완료 전까지 "완료 요약" 출력 금지.
|
|
222
230
|
```
|
|
223
231
|
|
|
@@ -295,6 +303,11 @@ Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
|
|
|
295
303
|
Load skill `design-audit`
|
|
296
304
|
→ a11y는 항상 검증. 컨벤션 무시 모드여도 접근성은 양보 불가.
|
|
297
305
|
|
|
306
|
+
⤵ Phase 6.5 (hasEmitDesignMd == true 시)
|
|
307
|
+
→ resolved tokens + design-audit 산출물을
|
|
308
|
+
DESIGN.md (Stitch 9 섹션) 으로 정제해 프로젝트 루트에 저장
|
|
309
|
+
→ 첫 줄: `<!-- design-md-version: 1 -->`
|
|
310
|
+
|
|
298
311
|
⛔ Phase 6 + design-audit 완료 전까지 "완료 요약" 출력 금지.
|
|
299
312
|
```
|
|
300
313
|
|
|
@@ -353,8 +366,11 @@ Load skill `design-audit`
|
|
|
353
366
|
✅ 피처명 결정: mdArg 파일명에서 .md 제거한 값을 {feature}로 사용
|
|
354
367
|
|
|
355
368
|
2. Design context 로드 (non-interactive 기본)
|
|
369
|
+
- hasReadDesignMd == true (프로젝트 루트에 DESIGN.md 존재):
|
|
370
|
+
· §1 Visual Theme / §2 Color Palette / §3 Typography 를 톤·팔레트의
|
|
371
|
+
**1 차 입력**으로 사용 (`design-context.json` · plan.md 보다 우선)
|
|
356
372
|
- Read .vibe/design-context.json
|
|
357
|
-
· 존재 → 톤/팔레트 보강용으로 binding
|
|
373
|
+
· 존재 → 톤/팔레트 보강용으로 binding (DESIGN.md 가 있으면 보조)
|
|
358
374
|
· 없음 → plan.md의 "## 7. Look & Feel" 값으로 임시 컨텍스트 구성
|
|
359
375
|
- hasTeach == true 인 경우에만 Load skill `design-teach`로 인터랙티브 보강
|
|
360
376
|
|