@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.
Files changed (266) hide show
  1. package/CLAUDE.md +6 -0
  2. package/README.en.md +50 -28
  3. package/README.md +37 -9
  4. package/dist/cli/auth.d.ts +2 -2
  5. package/dist/cli/auth.js +12 -12
  6. package/dist/cli/auth.js.map +1 -1
  7. package/dist/cli/commands/codex-proxy.d.ts +1 -1
  8. package/dist/cli/commands/codex-proxy.js +11 -11
  9. package/dist/cli/commands/codex-proxy.js.map +1 -1
  10. package/dist/cli/commands/config.d.ts +1 -1
  11. package/dist/cli/commands/config.d.ts.map +1 -1
  12. package/dist/cli/commands/config.js +22 -21
  13. package/dist/cli/commands/config.js.map +1 -1
  14. package/dist/cli/commands/info.js +2 -2
  15. package/dist/cli/commands/init.d.ts +2 -2
  16. package/dist/cli/commands/init.d.ts.map +1 -1
  17. package/dist/cli/commands/init.js +20 -16
  18. package/dist/cli/commands/init.js.map +1 -1
  19. package/dist/cli/commands/setup.d.ts +1 -1
  20. package/dist/cli/commands/setup.js +24 -24
  21. package/dist/cli/commands/setup.js.map +1 -1
  22. package/dist/cli/commands/skills.d.ts.map +1 -1
  23. package/dist/cli/commands/skills.js +8 -7
  24. package/dist/cli/commands/skills.js.map +1 -1
  25. package/dist/cli/commands/update.d.ts.map +1 -1
  26. package/dist/cli/commands/update.js +28 -16
  27. package/dist/cli/commands/update.js.map +1 -1
  28. package/dist/cli/design/design-md-parser.d.ts +25 -0
  29. package/dist/cli/design/design-md-parser.d.ts.map +1 -0
  30. package/dist/cli/design/design-md-parser.js +86 -0
  31. package/dist/cli/design/design-md-parser.js.map +1 -0
  32. package/dist/cli/design/design-md-parser.test.d.ts +2 -0
  33. package/dist/cli/design/design-md-parser.test.d.ts.map +1 -0
  34. package/dist/cli/design/design-md-parser.test.js +149 -0
  35. package/dist/cli/design/design-md-parser.test.js.map +1 -0
  36. package/dist/cli/index.js +22 -23
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/llm/antigravity-commands.d.ts +25 -0
  39. package/dist/cli/llm/antigravity-commands.d.ts.map +1 -0
  40. package/dist/cli/llm/antigravity-commands.js +142 -0
  41. package/dist/cli/llm/antigravity-commands.js.map +1 -0
  42. package/dist/cli/llm/claude-commands.d.ts.map +1 -1
  43. package/dist/cli/llm/claude-commands.js +3 -1
  44. package/dist/cli/llm/claude-commands.js.map +1 -1
  45. package/dist/cli/llm/config.js +7 -7
  46. package/dist/cli/llm/config.js.map +1 -1
  47. package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
  48. package/dist/cli/llm/gemini-commands.js +7 -4
  49. package/dist/cli/llm/gemini-commands.js.map +1 -1
  50. package/dist/cli/llm/gpt-commands.d.ts.map +1 -1
  51. package/dist/cli/llm/gpt-commands.js +3 -3
  52. package/dist/cli/llm/gpt-commands.js.map +1 -1
  53. package/dist/cli/llm/help.js +4 -4
  54. package/dist/cli/llm/index.d.ts +1 -1
  55. package/dist/cli/llm/index.d.ts.map +1 -1
  56. package/dist/cli/llm/index.js +1 -1
  57. package/dist/cli/llm/index.js.map +1 -1
  58. package/dist/cli/llm.d.ts +2 -2
  59. package/dist/cli/llm.js +2 -2
  60. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  61. package/dist/cli/postinstall/constants.js +18 -17
  62. package/dist/cli/postinstall/constants.js.map +1 -1
  63. package/dist/cli/postinstall/inline-skills.js +5 -5
  64. package/dist/cli/postinstall/inline-skills.js.map +1 -1
  65. package/dist/cli/postinstall/main.d.ts.map +1 -1
  66. package/dist/cli/postinstall/main.js +14 -9
  67. package/dist/cli/postinstall/main.js.map +1 -1
  68. package/dist/cli/setup/CodexHooks.d.ts +20 -0
  69. package/dist/cli/setup/CodexHooks.d.ts.map +1 -0
  70. package/dist/cli/setup/CodexHooks.js +50 -0
  71. package/dist/cli/setup/CodexHooks.js.map +1 -0
  72. package/dist/cli/setup/CodexHooks.test.d.ts +2 -0
  73. package/dist/cli/setup/CodexHooks.test.d.ts.map +1 -0
  74. package/dist/cli/setup/CodexHooks.test.js +23 -0
  75. package/dist/cli/setup/CodexHooks.test.js.map +1 -0
  76. package/dist/cli/setup/LegacyMigration.js +2 -2
  77. package/dist/cli/setup/ProjectSetup.d.ts +4 -4
  78. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  79. package/dist/cli/setup/ProjectSetup.js +21 -19
  80. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  81. package/dist/cli/setup/index.d.ts +1 -0
  82. package/dist/cli/setup/index.d.ts.map +1 -1
  83. package/dist/cli/setup/index.js +1 -0
  84. package/dist/cli/setup/index.js.map +1 -1
  85. package/dist/cli/setup.d.ts +2 -1
  86. package/dist/cli/setup.d.ts.map +1 -1
  87. package/dist/cli/setup.js +2 -1
  88. package/dist/cli/setup.js.map +1 -1
  89. package/dist/cli/types.d.ts +7 -9
  90. package/dist/cli/types.d.ts.map +1 -1
  91. package/dist/cli/utils/cli-detector.d.ts +5 -5
  92. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  93. package/dist/cli/utils/cli-detector.js +18 -14
  94. package/dist/cli/utils/cli-detector.js.map +1 -1
  95. package/dist/cli/utils/cli-detector.test.d.ts +2 -0
  96. package/dist/cli/utils/cli-detector.test.d.ts.map +1 -0
  97. package/dist/cli/utils/cli-detector.test.js +51 -0
  98. package/dist/cli/utils/cli-detector.test.js.map +1 -0
  99. package/dist/infra/lib/ReviewRace.d.ts +4 -4
  100. package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
  101. package/dist/infra/lib/ReviewRace.js +16 -16
  102. package/dist/infra/lib/ReviewRace.js.map +1 -1
  103. package/dist/infra/lib/SkillRepository.js +7 -7
  104. package/dist/infra/lib/antigravity/auth.d.ts +18 -0
  105. package/dist/infra/lib/antigravity/auth.d.ts.map +1 -0
  106. package/dist/infra/lib/antigravity/auth.js +32 -0
  107. package/dist/infra/lib/antigravity/auth.js.map +1 -0
  108. package/dist/infra/lib/antigravity/capabilities.d.ts +28 -0
  109. package/dist/infra/lib/antigravity/capabilities.d.ts.map +1 -0
  110. package/dist/infra/lib/antigravity/capabilities.js +178 -0
  111. package/dist/infra/lib/antigravity/capabilities.js.map +1 -0
  112. package/dist/infra/lib/antigravity/chat.d.ts +34 -0
  113. package/dist/infra/lib/antigravity/chat.d.ts.map +1 -0
  114. package/dist/infra/lib/antigravity/chat.js +160 -0
  115. package/dist/infra/lib/antigravity/chat.js.map +1 -0
  116. package/dist/infra/lib/antigravity/completion.d.ts +12 -0
  117. package/dist/infra/lib/antigravity/completion.d.ts.map +1 -0
  118. package/dist/infra/lib/antigravity/completion.js +13 -0
  119. package/dist/infra/lib/antigravity/completion.js.map +1 -0
  120. package/dist/infra/lib/antigravity/constants.d.ts +8 -0
  121. package/dist/infra/lib/antigravity/constants.d.ts.map +1 -0
  122. package/dist/infra/lib/antigravity/constants.js +11 -0
  123. package/dist/infra/lib/antigravity/constants.js.map +1 -0
  124. package/dist/infra/lib/antigravity/index.d.ts +13 -0
  125. package/dist/infra/lib/antigravity/index.d.ts.map +1 -0
  126. package/dist/infra/lib/antigravity/index.js +12 -0
  127. package/dist/infra/lib/antigravity/index.js.map +1 -0
  128. package/dist/infra/lib/antigravity/models.d.ts +11 -0
  129. package/dist/infra/lib/antigravity/models.d.ts.map +1 -0
  130. package/dist/infra/lib/antigravity/models.js +38 -0
  131. package/dist/infra/lib/antigravity/models.js.map +1 -0
  132. package/dist/infra/lib/antigravity/orchestration.d.ts +33 -0
  133. package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -0
  134. package/dist/infra/lib/antigravity/orchestration.js +62 -0
  135. package/dist/infra/lib/antigravity/orchestration.js.map +1 -0
  136. package/dist/infra/lib/antigravity/types.d.ts +115 -0
  137. package/dist/infra/lib/antigravity/types.d.ts.map +1 -0
  138. package/dist/infra/lib/antigravity/types.js +5 -0
  139. package/dist/infra/lib/antigravity/types.js.map +1 -0
  140. package/dist/infra/lib/codex-proxy.d.ts +1 -1
  141. package/dist/infra/lib/codex-proxy.js +9 -9
  142. package/dist/infra/lib/codex-proxy.js.map +1 -1
  143. package/dist/infra/lib/config/GlobalConfigManager.d.ts +6 -3
  144. package/dist/infra/lib/config/GlobalConfigManager.d.ts.map +1 -1
  145. package/dist/infra/lib/config/GlobalConfigManager.js +47 -37
  146. package/dist/infra/lib/config/GlobalConfigManager.js.map +1 -1
  147. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts +2 -0
  148. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts.map +1 -0
  149. package/dist/infra/lib/config/GlobalConfigManager.test.js +9 -0
  150. package/dist/infra/lib/config/GlobalConfigManager.test.js.map +1 -0
  151. package/dist/infra/lib/constants.js +1 -1
  152. package/dist/infra/lib/constants.js.map +1 -1
  153. package/dist/infra/lib/gemini/auth.d.ts +3 -3
  154. package/dist/infra/lib/gemini/auth.js +9 -9
  155. package/dist/infra/lib/gemini/auth.js.map +1 -1
  156. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts +3 -3
  157. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts.map +1 -1
  158. package/dist/infra/lib/llm/auth/AuthProfileManager.js.map +1 -1
  159. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +8 -8
  160. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +1 -1
  161. package/dist/infra/lib/llm/auth/ConfigManager.js +2 -2
  162. package/dist/infra/lib/llm/auth/ConfigManager.js.map +1 -1
  163. package/dist/infra/lib/llm/auth/TokenRefresher.d.ts +1 -1
  164. package/dist/infra/lib/llm/auth/TokenRefresher.js +1 -1
  165. package/dist/infra/lib/llm/auth/index.js +1 -1
  166. package/dist/infra/lib/llm/auth/index.js.map +1 -1
  167. package/dist/infra/lib/llm/index.d.ts +1 -1
  168. package/dist/infra/lib/llm/index.js +1 -1
  169. package/dist/infra/lib/llm/types.d.ts +3 -3
  170. package/dist/infra/lib/llm/types.d.ts.map +1 -1
  171. package/dist/infra/lib/llm/types.js +1 -1
  172. package/dist/infra/lib/llm/utils/stream.js +1 -1
  173. package/dist/infra/lib/llm/utils/stream.js.map +1 -1
  174. package/dist/infra/lib/llm-availability.d.ts +5 -5
  175. package/dist/infra/lib/llm-availability.d.ts.map +1 -1
  176. package/dist/infra/lib/llm-availability.js +13 -10
  177. package/dist/infra/lib/llm-availability.js.map +1 -1
  178. package/dist/infra/lib/llm-availability.test.d.ts +2 -0
  179. package/dist/infra/lib/llm-availability.test.d.ts.map +1 -0
  180. package/dist/infra/lib/llm-availability.test.js +36 -0
  181. package/dist/infra/lib/llm-availability.test.js.map +1 -0
  182. package/dist/infra/lib/ui-ux/UiUxWorkflow.d.ts.map +1 -1
  183. package/dist/infra/lib/ui-ux/UiUxWorkflow.js +23 -5
  184. package/dist/infra/lib/ui-ux/UiUxWorkflow.js.map +1 -1
  185. package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
  186. package/dist/infra/orchestrator/AgentExecutor.js +30 -1
  187. package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
  188. package/dist/infra/orchestrator/AgentManifestCache.js +1 -1
  189. package/dist/infra/orchestrator/AgentManifestCache.js.map +1 -1
  190. package/dist/infra/orchestrator/BackgroundManager.js +2 -2
  191. package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
  192. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +12 -0
  193. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +1 -0
  194. package/dist/infra/orchestrator/CodexAgentRuntime.js +94 -0
  195. package/dist/infra/orchestrator/CodexAgentRuntime.js.map +1 -0
  196. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +2 -0
  197. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +1 -0
  198. package/dist/infra/orchestrator/CodexAgentRuntime.test.js +37 -0
  199. package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +1 -0
  200. package/dist/infra/orchestrator/LLMCluster.d.ts +11 -11
  201. package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
  202. package/dist/infra/orchestrator/LLMCluster.js +22 -22
  203. package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
  204. package/dist/infra/orchestrator/MultiLlmResearch.d.ts +3 -3
  205. package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
  206. package/dist/infra/orchestrator/MultiLlmResearch.js +17 -17
  207. package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
  208. package/dist/infra/orchestrator/SmartRouter.d.ts +2 -2
  209. package/dist/infra/orchestrator/SmartRouter.js +7 -7
  210. package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
  211. package/dist/infra/orchestrator/SmartRouter.test.js +74 -74
  212. package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
  213. package/dist/infra/orchestrator/agentDiscovery.d.ts +1 -1
  214. package/dist/infra/orchestrator/agentDiscovery.js +4 -4
  215. package/dist/infra/orchestrator/agentDiscovery.js.map +1 -1
  216. package/dist/infra/orchestrator/index.d.ts +17 -17
  217. package/dist/infra/orchestrator/index.d.ts.map +1 -1
  218. package/dist/infra/orchestrator/index.js +30 -30
  219. package/dist/infra/orchestrator/index.js.map +1 -1
  220. package/dist/infra/orchestrator/orchestrator.d.ts +4 -4
  221. package/dist/infra/orchestrator/orchestrator.d.ts.map +1 -1
  222. package/dist/infra/orchestrator/orchestrator.js +5 -5
  223. package/dist/infra/orchestrator/orchestrator.js.map +1 -1
  224. package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
  225. package/dist/infra/orchestrator/parallelResearch.js +11 -0
  226. package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
  227. package/dist/infra/orchestrator/types.d.ts +7 -8
  228. package/dist/infra/orchestrator/types.d.ts.map +1 -1
  229. package/dist/infra/orchestrator/types.js +17 -18
  230. package/dist/infra/orchestrator/types.js.map +1 -1
  231. package/dist/tools/spec/specGenerator.d.ts +1 -1
  232. package/dist/tools/spec/specGenerator.js +1 -1
  233. package/hooks/antigravity-hooks.json +73 -0
  234. package/hooks/scripts/__tests__/codex-hook-adapter.test.js +31 -0
  235. package/hooks/scripts/__tests__/hook-payload.test.js +29 -0
  236. package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +63 -0
  237. package/hooks/scripts/codex-hook-adapter.js +124 -0
  238. package/hooks/scripts/codex-review-gate.js +7 -3
  239. package/hooks/scripts/devlog-gen.js +1 -1
  240. package/hooks/scripts/hook-payload.js +64 -0
  241. package/hooks/scripts/lib/dispatcher.js +20 -0
  242. package/hooks/scripts/llm-orchestrate.js +40 -44
  243. package/hooks/scripts/prompt-dispatcher.js +9 -9
  244. package/hooks/scripts/stop-notify.js +1 -1
  245. package/hooks/scripts/utils.js +1 -1
  246. package/package.json +1 -1
  247. package/skills/brand-assets/SKILL.md +11 -11
  248. package/skills/docs/SKILL.md +10 -5
  249. package/skills/event-comms/SKILL.md +1 -1
  250. package/skills/event-ops/SKILL.md +4 -4
  251. package/skills/spec/SKILL.md +29 -29
  252. package/skills/spec-review/SKILL.md +23 -23
  253. package/skills/tool-fallback/SKILL.md +2 -2
  254. package/skills/tool-fallback/rubrics/fallback-chain.md +2 -2
  255. package/skills/vibe.design/SKILL.md +183 -0
  256. package/skills/vibe.design/heuristics/code-extract.md +100 -0
  257. package/skills/vibe.design/references/README.md +39 -0
  258. package/skills/vibe.design/templates/DESIGN.md.template +100 -0
  259. package/skills/vibe.event/SKILL.md +1 -1
  260. package/skills/vibe.figma/SKILL.md +17 -1
  261. package/skills/vibe.review/SKILL.md +20 -13
  262. package/skills/vibe.run/SKILL.md +47 -30
  263. package/skills/vibe.spec/SKILL.md +4 -4
  264. package/skills/vibe.utils/SKILL.md +17 -17
  265. package/skills/vibe.verify/SKILL.md +20 -0
  266. package/hooks/gemini-hooks.json +0 -73
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spec-review
3
- description: SPEC 품질 리뷰 본체 — GPT/Gemini 크로스 검증, 100-point gate, Race Review(수렴 종료), Codex 적대 리뷰, 사용자 체크포인트.
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/Gemini cross-validation.
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+Gemini workflow.
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/Gemini review
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/Gemini review
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 + Gemini Cross-Validation) - Convergence-Based (No Round Cap)
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 Gemini in parallel, then cross-validates findings for higher confidence. The loop continues until quality converges naturally.
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 | Gemini | Reason it's stuck |
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 + Gemini in PARALLEL via Bash tool for each round. Stop when termination rules trigger.**
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 + Gemini in PARALLEL (two separate Bash tool calls at once):**
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
- # Gemini review (Bash tool call 2 - run in parallel with GPT)
400
- node "[LLM_SCRIPT]" gemini orchestrate-json --input "[SCRATCHPAD]/spec-review-input.json"
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 Gemini calls in PARALLEL (two separate Bash tool calls at once).**
406
+ **🚨 Run GPT and Antigravity calls in PARALLEL (two separate Bash tool calls at once).**
407
407
 
408
- - Round 1: Write SPEC → Run GPT + Gemini in parallel (full scope) → Cross-validate → Apply fixes → Update SPEC file
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+Gemini | 100% |
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
- | Gemini | 2 | 2156ms |
472
+ | Antigravity | 2 | 2156ms |
473
473
 
474
474
  Cross-Validated Issues:
475
- | Issue | GPT | Gemini | Codex | Confidence |
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 | Gemini | Codex | Confidence |
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+Gemini Race Review for triple cross-validation.
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+Gemini Race):**
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 | Gemini | Codex | Confidence |
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/Gemini Call Failed
696
+ ### GPT/Antigravity Call Failed
697
697
  ```
698
- ⚠️ WARNING: {GPT|Gemini} call failed
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 → Gemini → Claude |
91
- | uiux, code-analysis | Gemini → GPT → Claude |
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 | Gemini | Claude direct |
27
- | UI/UX, code analysis | Gemini | GPT | Claude direct |
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 (Gemini/Aligo key validity)
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