zugzbot 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (784) hide show
  1. package/.opencode/agents/sdd-coder.md +5 -4
  2. package/.opencode/agents/sdd-orchestrator.md +9 -8
  3. package/.opencode/agents/sdd-spec-writer.md +3 -4
  4. package/.opencode/commands/loop.md +1 -1
  5. package/.opencode/plugins/loop-enforcer.ts +0 -1
  6. package/.opencode/plugins/sdd-bridge.ts +1 -1
  7. package/.opencode/rules/sdd-global.md +9 -5
  8. package/.opencode/scripts/lint-charts.js +1 -2
  9. package/.opencode/skills/sdd-foundation-overview/SKILL.md +3 -4
  10. package/.opencode/skills/sdd-methodology/SKILL.md +8 -10
  11. package/.opencode/skills/sdd-quickstart/SKILL.md +5 -9
  12. package/.opencode/skills/shadcn-templates/SKILL.md +71 -15
  13. package/.opencode/templates/nextjs-shadcn/components.json +2 -1
  14. package/.opencode/tools/sdd_catalog.ts +335 -20
  15. package/.opencode/tools/sdd_core.ts +8 -6
  16. package/.opencode/tools/sdd_lucide.ts +112 -0
  17. package/README.md +1 -7
  18. package/opencode.json +0 -10
  19. package/package.json +1 -3
  20. package/.opencode/oh-my-design/design-md/11st/.verification.md +0 -37
  21. package/.opencode/oh-my-design/design-md/11st/DESIGN.md +0 -400
  22. package/.opencode/oh-my-design/design-md/17live/DESIGN.md +0 -467
  23. package/.opencode/oh-my-design/design-md/29cm/DESIGN.md +0 -495
  24. package/.opencode/oh-my-design/design-md/29cm/_promo.json +0 -23
  25. package/.opencode/oh-my-design/design-md/29cm/_research.md +0 -103
  26. package/.opencode/oh-my-design/design-md/3o3/.verification.md +0 -73
  27. package/.opencode/oh-my-design/design-md/3o3/DESIGN.md +0 -454
  28. package/.opencode/oh-my-design/design-md/91app/.verification.md +0 -25
  29. package/.opencode/oh-my-design/design-md/91app/DESIGN.md +0 -182
  30. package/.opencode/oh-my-design/design-md/abema/.verification.md +0 -64
  31. package/.opencode/oh-my-design/design-md/abema/DESIGN.md +0 -535
  32. package/.opencode/oh-my-design/design-md/ably/DESIGN.md +0 -646
  33. package/.opencode/oh-my-design/design-md/ably/_promo.json +0 -18
  34. package/.opencode/oh-my-design/design-md/ably/_research.md +0 -120
  35. package/.opencode/oh-my-design/design-md/accupass/.verification.md +0 -66
  36. package/.opencode/oh-my-design/design-md/accupass/DESIGN.md +0 -494
  37. package/.opencode/oh-my-design/design-md/adobe/.verification.md +0 -63
  38. package/.opencode/oh-my-design/design-md/adobe/DESIGN.md +0 -458
  39. package/.opencode/oh-my-design/design-md/airbnb/.verification.md +0 -143
  40. package/.opencode/oh-my-design/design-md/airbnb/DESIGN.md +0 -639
  41. package/.opencode/oh-my-design/design-md/airbnb/README.md +0 -23
  42. package/.opencode/oh-my-design/design-md/airbnb/preview-dark.html +0 -234
  43. package/.opencode/oh-my-design/design-md/airbnb/preview.html +0 -233
  44. package/.opencode/oh-my-design/design-md/airtable/.verification.md +0 -136
  45. package/.opencode/oh-my-design/design-md/airtable/DESIGN.md +0 -314
  46. package/.opencode/oh-my-design/design-md/airtable/README.md +0 -23
  47. package/.opencode/oh-my-design/design-md/airtable/preview-dark.html +0 -165
  48. package/.opencode/oh-my-design/design-md/airtable/preview.html +0 -164
  49. package/.opencode/oh-my-design/design-md/alipay/DESIGN.md +0 -506
  50. package/.opencode/oh-my-design/design-md/amazingtalker/.verification.md +0 -38
  51. package/.opencode/oh-my-design/design-md/amazingtalker/DESIGN.md +0 -434
  52. package/.opencode/oh-my-design/design-md/appier/DESIGN.md +0 -465
  53. package/.opencode/oh-my-design/design-md/apple/.verification.md +0 -162
  54. package/.opencode/oh-my-design/design-md/apple/DESIGN.md +0 -613
  55. package/.opencode/oh-my-design/design-md/apple/README.md +0 -24
  56. package/.opencode/oh-my-design/design-md/apple/preview-dark.html +0 -420
  57. package/.opencode/oh-my-design/design-md/apple/preview.html +0 -414
  58. package/.opencode/oh-my-design/design-md/baemin/.verification.md +0 -132
  59. package/.opencode/oh-my-design/design-md/baemin/DESIGN.md +0 -578
  60. package/.opencode/oh-my-design/design-md/baemin/README.md +0 -19
  61. package/.opencode/oh-my-design/design-md/baemin/_research.md +0 -84
  62. package/.opencode/oh-my-design/design-md/banksalad/DESIGN.md +0 -688
  63. package/.opencode/oh-my-design/design-md/banksalad/_promo.json +0 -29
  64. package/.opencode/oh-my-design/design-md/banksalad/_research.md +0 -190
  65. package/.opencode/oh-my-design/design-md/bilibili/DESIGN.md +0 -471
  66. package/.opencode/oh-my-design/design-md/bithumb/.verification.md +0 -31
  67. package/.opencode/oh-my-design/design-md/bithumb/DESIGN.md +0 -208
  68. package/.opencode/oh-my-design/design-md/bmw/.verification.md +0 -114
  69. package/.opencode/oh-my-design/design-md/bmw/DESIGN.md +0 -360
  70. package/.opencode/oh-my-design/design-md/bmw/README.md +0 -23
  71. package/.opencode/oh-my-design/design-md/bmw/preview-dark.html +0 -211
  72. package/.opencode/oh-my-design/design-md/bmw/preview.html +0 -210
  73. package/.opencode/oh-my-design/design-md/brandi/.verification.md +0 -29
  74. package/.opencode/oh-my-design/design-md/brandi/DESIGN.md +0 -414
  75. package/.opencode/oh-my-design/design-md/bunjang/DESIGN.md +0 -374
  76. package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/.live-inspect-proof.json +0 -260
  77. package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/fonts.json +0 -33
  78. package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/logo-icon.svg +0 -10
  79. package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/structure.json +0 -131
  80. package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/tokens.json +0 -147
  81. package/.opencode/oh-my-design/design-md/cakeresume/.verification.md +0 -25
  82. package/.opencode/oh-my-design/design-md/cakeresume/DESIGN.md +0 -191
  83. package/.opencode/oh-my-design/design-md/cal/.verification.md +0 -145
  84. package/.opencode/oh-my-design/design-md/cal/DESIGN.md +0 -481
  85. package/.opencode/oh-my-design/design-md/cal/README.md +0 -23
  86. package/.opencode/oh-my-design/design-md/cal/preview-dark.html +0 -449
  87. package/.opencode/oh-my-design/design-md/cal/preview.html +0 -575
  88. package/.opencode/oh-my-design/design-md/catchtable/DESIGN.md +0 -341
  89. package/.opencode/oh-my-design/design-md/catchtable/_research.md +0 -54
  90. package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/.live-inspect-proof.json +0 -204
  91. package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/.live-inspect-raw.json +0 -22
  92. package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/fonts.json +0 -21
  93. package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/structure.json +0 -42
  94. package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/tokens.json +0 -95
  95. package/.opencode/oh-my-design/design-md/cathay/.verification.md +0 -44
  96. package/.opencode/oh-my-design/design-md/cathay/DESIGN.md +0 -432
  97. package/.opencode/oh-my-design/design-md/channeltalk/DESIGN.md +0 -422
  98. package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/.live-inspect-proof.json +0 -320
  99. package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/fonts.json +0 -53
  100. package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/structure.json +0 -47
  101. package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/tokens.json +0 -78
  102. package/.opencode/oh-my-design/design-md/class101/DESIGN.md +0 -484
  103. package/.opencode/oh-my-design/design-md/classting/.verification.md +0 -32
  104. package/.opencode/oh-my-design/design-md/classting/DESIGN.md +0 -292
  105. package/.opencode/oh-my-design/design-md/classum/DESIGN.md +0 -279
  106. package/.opencode/oh-my-design/design-md/classum/assets/_reference/.live-inspect-proof.json +0 -72
  107. package/.opencode/oh-my-design/design-md/classum/assets/_reference/fonts.json +0 -20
  108. package/.opencode/oh-my-design/design-md/classum/assets/_reference/structure.json +0 -21
  109. package/.opencode/oh-my-design/design-md/classum/assets/_reference/tokens.json +0 -56
  110. package/.opencode/oh-my-design/design-md/claude/.verification.md +0 -106
  111. package/.opencode/oh-my-design/design-md/claude/DESIGN.md +0 -561
  112. package/.opencode/oh-my-design/design-md/claude/README.md +0 -24
  113. package/.opencode/oh-my-design/design-md/claude/preview-dark.html +0 -803
  114. package/.opencode/oh-my-design/design-md/claude/preview.html +0 -826
  115. package/.opencode/oh-my-design/design-md/clay/.verification.md +0 -129
  116. package/.opencode/oh-my-design/design-md/clay/DESIGN.md +0 -454
  117. package/.opencode/oh-my-design/design-md/clay/README.md +0 -23
  118. package/.opencode/oh-my-design/design-md/clay/preview-dark.html +0 -316
  119. package/.opencode/oh-my-design/design-md/clay/preview.html +0 -315
  120. package/.opencode/oh-my-design/design-md/clickhouse/.verification.md +0 -132
  121. package/.opencode/oh-my-design/design-md/clickhouse/DESIGN.md +0 -424
  122. package/.opencode/oh-my-design/design-md/clickhouse/README.md +0 -24
  123. package/.opencode/oh-my-design/design-md/clickhouse/preview-dark.html +0 -834
  124. package/.opencode/oh-my-design/design-md/clickhouse/preview.html +0 -786
  125. package/.opencode/oh-my-design/design-md/cloudflare/.verification.md +0 -21
  126. package/.opencode/oh-my-design/design-md/cloudflare/DESIGN.md +0 -637
  127. package/.opencode/oh-my-design/design-md/cohere/.verification.md +0 -136
  128. package/.opencode/oh-my-design/design-md/cohere/DESIGN.md +0 -409
  129. package/.opencode/oh-my-design/design-md/cohere/README.md +0 -24
  130. package/.opencode/oh-my-design/design-md/cohere/preview-dark.html +0 -803
  131. package/.opencode/oh-my-design/design-md/cohere/preview.html +0 -807
  132. package/.opencode/oh-my-design/design-md/coinbase/.verification.md +0 -116
  133. package/.opencode/oh-my-design/design-md/coinbase/DESIGN.md +0 -353
  134. package/.opencode/oh-my-design/design-md/coinbase/README.md +0 -23
  135. package/.opencode/oh-my-design/design-md/coinbase/preview-dark.html +0 -164
  136. package/.opencode/oh-my-design/design-md/coinbase/preview.html +0 -163
  137. package/.opencode/oh-my-design/design-md/coinone/.verification.md +0 -38
  138. package/.opencode/oh-my-design/design-md/coinone/DESIGN.md +0 -257
  139. package/.opencode/oh-my-design/design-md/composio/.verification.md +0 -143
  140. package/.opencode/oh-my-design/design-md/composio/DESIGN.md +0 -441
  141. package/.opencode/oh-my-design/design-md/composio/README.md +0 -24
  142. package/.opencode/oh-my-design/design-md/composio/preview-dark.html +0 -958
  143. package/.opencode/oh-my-design/design-md/composio/preview.html +0 -933
  144. package/.opencode/oh-my-design/design-md/cookpad/DESIGN.md +0 -394
  145. package/.opencode/oh-my-design/design-md/coupang/.verification.md +0 -141
  146. package/.opencode/oh-my-design/design-md/coupang/DESIGN.md +0 -557
  147. package/.opencode/oh-my-design/design-md/cursor/.verification.md +0 -141
  148. package/.opencode/oh-my-design/design-md/cursor/DESIGN.md +0 -460
  149. package/.opencode/oh-my-design/design-md/cursor/README.md +0 -24
  150. package/.opencode/oh-my-design/design-md/cursor/preview-dark.html +0 -393
  151. package/.opencode/oh-my-design/design-md/cursor/preview.html +0 -383
  152. package/.opencode/oh-my-design/design-md/dabang/DESIGN.md +0 -267
  153. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/.live-inspect-proof.json +0 -145
  154. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/fonts.json +0 -22
  155. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/raw-capture-map.json +0 -718
  156. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/raw-capture.json +0 -1125
  157. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/structure.json +0 -53
  158. package/.opencode/oh-my-design/design-md/dabang/assets/_reference/tokens.json +0 -130
  159. package/.opencode/oh-my-design/design-md/danawa/.verification.md +0 -60
  160. package/.opencode/oh-my-design/design-md/danawa/DESIGN.md +0 -477
  161. package/.opencode/oh-my-design/design-md/dcard/.verification.md +0 -118
  162. package/.opencode/oh-my-design/design-md/dcard/DESIGN.md +0 -633
  163. package/.opencode/oh-my-design/design-md/dcard/README.md +0 -12
  164. package/.opencode/oh-my-design/design-md/dcard/_research/forum-1440px.png +0 -0
  165. package/.opencode/oh-my-design/design-md/dcard/_research.md +0 -133
  166. package/.opencode/oh-my-design/design-md/dell/.verification.md +0 -21
  167. package/.opencode/oh-my-design/design-md/dell/DESIGN.md +0 -636
  168. package/.opencode/oh-my-design/design-md/devsisters/.verification.md +0 -32
  169. package/.opencode/oh-my-design/design-md/devsisters/DESIGN.md +0 -282
  170. package/.opencode/oh-my-design/design-md/discord/.verification.md +0 -21
  171. package/.opencode/oh-my-design/design-md/discord/DESIGN.md +0 -604
  172. package/.opencode/oh-my-design/design-md/dji/DESIGN.md +0 -454
  173. package/.opencode/oh-my-design/design-md/drnow/.verification.md +0 -41
  174. package/.opencode/oh-my-design/design-md/drnow/DESIGN.md +0 -383
  175. package/.opencode/oh-my-design/design-md/dropbox/.verification.md +0 -61
  176. package/.opencode/oh-my-design/design-md/dropbox/DESIGN.md +0 -445
  177. package/.opencode/oh-my-design/design-md/duolingo/.verification.md +0 -20
  178. package/.opencode/oh-my-design/design-md/duolingo/DESIGN.md +0 -563
  179. package/.opencode/oh-my-design/design-md/elevenlabs/.verification.md +0 -128
  180. package/.opencode/oh-my-design/design-md/elevenlabs/DESIGN.md +0 -415
  181. package/.opencode/oh-my-design/design-md/elevenlabs/README.md +0 -23
  182. package/.opencode/oh-my-design/design-md/elevenlabs/preview-dark.html +0 -252
  183. package/.opencode/oh-my-design/design-md/elevenlabs/preview.html +0 -251
  184. package/.opencode/oh-my-design/design-md/expo/.verification.md +0 -141
  185. package/.opencode/oh-my-design/design-md/expo/DESIGN.md +0 -412
  186. package/.opencode/oh-my-design/design-md/expo/README.md +0 -24
  187. package/.opencode/oh-my-design/design-md/expo/preview-dark.html +0 -533
  188. package/.opencode/oh-my-design/design-md/expo/preview.html +0 -533
  189. package/.opencode/oh-my-design/design-md/fastcampus/DESIGN.md +0 -529
  190. package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/.live-inspect-proof.json +0 -950
  191. package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/fonts.json +0 -14
  192. package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/structure.json +0 -30
  193. package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/tokens.json +0 -109
  194. package/.opencode/oh-my-design/design-md/ferrari/.verification.md +0 -119
  195. package/.opencode/oh-my-design/design-md/ferrari/DESIGN.md +0 -447
  196. package/.opencode/oh-my-design/design-md/ferrari/README.md +0 -23
  197. package/.opencode/oh-my-design/design-md/ferrari/preview-dark.html +0 -1162
  198. package/.opencode/oh-my-design/design-md/ferrari/preview.html +0 -1122
  199. package/.opencode/oh-my-design/design-md/figma/.verification.md +0 -206
  200. package/.opencode/oh-my-design/design-md/figma/DESIGN.md +0 -534
  201. package/.opencode/oh-my-design/design-md/figma/README.md +0 -24
  202. package/.opencode/oh-my-design/design-md/figma/preview-dark.html +0 -822
  203. package/.opencode/oh-my-design/design-md/figma/preview.html +0 -832
  204. package/.opencode/oh-my-design/design-md/finda/.verification.md +0 -33
  205. package/.opencode/oh-my-design/design-md/finda/DESIGN.md +0 -413
  206. package/.opencode/oh-my-design/design-md/firstory/.verification.md +0 -70
  207. package/.opencode/oh-my-design/design-md/firstory/DESIGN.md +0 -487
  208. package/.opencode/oh-my-design/design-md/flex/DESIGN.md +0 -356
  209. package/.opencode/oh-my-design/design-md/flex/_research.md +0 -49
  210. package/.opencode/oh-my-design/design-md/flex/assets/_reference/.live-inspect-proof.json +0 -192
  211. package/.opencode/oh-my-design/design-md/flex/assets/_reference/.raw-inspect.json +0 -873
  212. package/.opencode/oh-my-design/design-md/flex/assets/_reference/fonts.json +0 -17
  213. package/.opencode/oh-my-design/design-md/flex/assets/_reference/structure.json +0 -58
  214. package/.opencode/oh-my-design/design-md/flex/assets/_reference/tokens.json +0 -75
  215. package/.opencode/oh-my-design/design-md/flo/.verification.md +0 -33
  216. package/.opencode/oh-my-design/design-md/flo/DESIGN.md +0 -349
  217. package/.opencode/oh-my-design/design-md/framer/.verification.md +0 -147
  218. package/.opencode/oh-my-design/design-md/framer/DESIGN.md +0 -431
  219. package/.opencode/oh-my-design/design-md/framer/README.md +0 -23
  220. package/.opencode/oh-my-design/design-md/framer/preview-dark.html +0 -902
  221. package/.opencode/oh-my-design/design-md/framer/preview.html +0 -883
  222. package/.opencode/oh-my-design/design-md/freee/.verification.md +0 -145
  223. package/.opencode/oh-my-design/design-md/freee/DESIGN.md +0 -620
  224. package/.opencode/oh-my-design/design-md/freee/README.md +0 -12
  225. package/.opencode/oh-my-design/design-md/freee/_research/vibes-storybook-1440px.png +0 -0
  226. package/.opencode/oh-my-design/design-md/freee/_research.md +0 -116
  227. package/.opencode/oh-my-design/design-md/fugle/.verification.md +0 -40
  228. package/.opencode/oh-my-design/design-md/fugle/DESIGN.md +0 -290
  229. package/.opencode/oh-my-design/design-md/funnow/.verification.md +0 -62
  230. package/.opencode/oh-my-design/design-md/funnow/DESIGN.md +0 -431
  231. package/.opencode/oh-my-design/design-md/gangnamunni/DESIGN.md +0 -677
  232. package/.opencode/oh-my-design/design-md/gangnamunni/_promo.json +0 -26
  233. package/.opencode/oh-my-design/design-md/gangnamunni/_research.md +0 -113
  234. package/.opencode/oh-my-design/design-md/genie/.verification.md +0 -29
  235. package/.opencode/oh-my-design/design-md/genie/DESIGN.md +0 -415
  236. package/.opencode/oh-my-design/design-md/github/.verification.md +0 -21
  237. package/.opencode/oh-my-design/design-md/github/DESIGN.md +0 -727
  238. package/.opencode/oh-my-design/design-md/gmarket/DESIGN.md +0 -534
  239. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/.live-inspect-proof.json +0 -217
  240. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/fonts.json +0 -41
  241. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/raw-capture-bestsellers.json +0 -1929
  242. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/raw-capture-home.json +0 -3675
  243. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/structure.json +0 -65
  244. package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/tokens.json +0 -210
  245. package/.opencode/oh-my-design/design-md/gogolook/.verification.md +0 -31
  246. package/.opencode/oh-my-design/design-md/gogolook/DESIGN.md +0 -155
  247. package/.opencode/oh-my-design/design-md/gogoro/DESIGN.md +0 -441
  248. package/.opencode/oh-my-design/design-md/google/.verification.md +0 -61
  249. package/.opencode/oh-my-design/design-md/google/DESIGN.md +0 -499
  250. package/.opencode/oh-my-design/design-md/greenvines/.verification.md +0 -72
  251. package/.opencode/oh-my-design/design-md/greenvines/DESIGN.md +0 -454
  252. package/.opencode/oh-my-design/design-md/greeting/.verification.md +0 -64
  253. package/.opencode/oh-my-design/design-md/greeting/DESIGN.md +0 -462
  254. package/.opencode/oh-my-design/design-md/grip/.verification.md +0 -36
  255. package/.opencode/oh-my-design/design-md/grip/DESIGN.md +0 -289
  256. package/.opencode/oh-my-design/design-md/hahow/.verification.md +0 -31
  257. package/.opencode/oh-my-design/design-md/hahow/DESIGN.md +0 -184
  258. package/.opencode/oh-my-design/design-md/hashicorp/.verification.md +0 -142
  259. package/.opencode/oh-my-design/design-md/hashicorp/DESIGN.md +0 -411
  260. package/.opencode/oh-my-design/design-md/hashicorp/README.md +0 -24
  261. package/.opencode/oh-my-design/design-md/hashicorp/preview-dark.html +0 -1202
  262. package/.opencode/oh-my-design/design-md/hashicorp/preview.html +0 -1193
  263. package/.opencode/oh-my-design/design-md/hogangnono/.verification.md +0 -33
  264. package/.opencode/oh-my-design/design-md/hogangnono/DESIGN.md +0 -349
  265. package/.opencode/oh-my-design/design-md/hp/.verification.md +0 -21
  266. package/.opencode/oh-my-design/design-md/hp/DESIGN.md +0 -563
  267. package/.opencode/oh-my-design/design-md/hyperconnect/.verification.md +0 -40
  268. package/.opencode/oh-my-design/design-md/hyperconnect/DESIGN.md +0 -393
  269. package/.opencode/oh-my-design/design-md/hyundaicard/.verification.md +0 -25
  270. package/.opencode/oh-my-design/design-md/hyundaicard/DESIGN.md +0 -201
  271. package/.opencode/oh-my-design/design-md/ibm/.verification.md +0 -102
  272. package/.opencode/oh-my-design/design-md/ibm/DESIGN.md +0 -464
  273. package/.opencode/oh-my-design/design-md/ibm/README.md +0 -24
  274. package/.opencode/oh-my-design/design-md/ibm/preview-dark.html +0 -443
  275. package/.opencode/oh-my-design/design-md/ibm/preview.html +0 -428
  276. package/.opencode/oh-my-design/design-md/ichef/DESIGN.md +0 -455
  277. package/.opencode/oh-my-design/design-md/ikala/.verification.md +0 -35
  278. package/.opencode/oh-my-design/design-md/ikala/DESIGN.md +0 -400
  279. package/.opencode/oh-my-design/design-md/imweb/.verification.md +0 -61
  280. package/.opencode/oh-my-design/design-md/imweb/DESIGN.md +0 -460
  281. package/.opencode/oh-my-design/design-md/inflearn/DESIGN.md +0 -453
  282. package/.opencode/oh-my-design/design-md/inflearn/_promo.json +0 -29
  283. package/.opencode/oh-my-design/design-md/inflearn/_research.md +0 -85
  284. package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/.live-inspect-proof-courses.json +0 -679
  285. package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/.live-inspect-proof.json +0 -448
  286. package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/fonts.json +0 -41
  287. package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/structure.json +0 -110
  288. package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/tokens.json +0 -54
  289. package/.opencode/oh-my-design/design-md/intercom/.verification.md +0 -144
  290. package/.opencode/oh-my-design/design-md/intercom/DESIGN.md +0 -271
  291. package/.opencode/oh-my-design/design-md/intercom/README.md +0 -23
  292. package/.opencode/oh-my-design/design-md/intercom/preview-dark.html +0 -185
  293. package/.opencode/oh-my-design/design-md/intercom/preview.html +0 -184
  294. package/.opencode/oh-my-design/design-md/jandi/.verification.md +0 -26
  295. package/.opencode/oh-my-design/design-md/jandi/DESIGN.md +0 -382
  296. package/.opencode/oh-my-design/design-md/jkopay/.verification.md +0 -32
  297. package/.opencode/oh-my-design/design-md/jkopay/DESIGN.md +0 -283
  298. package/.opencode/oh-my-design/design-md/jobkorea/.verification.md +0 -30
  299. package/.opencode/oh-my-design/design-md/jobkorea/DESIGN.md +0 -349
  300. package/.opencode/oh-my-design/design-md/jumpit/DESIGN.md +0 -403
  301. package/.opencode/oh-my-design/design-md/jumpit/_research.md +0 -119
  302. package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/.live-inspect-proof.json +0 -182
  303. package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/fonts.json +0 -20
  304. package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/structure.json +0 -66
  305. package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/tokens.json +0 -108
  306. package/.opencode/oh-my-design/design-md/kakao/.verification.md +0 -137
  307. package/.opencode/oh-my-design/design-md/kakao/DESIGN.md +0 -568
  308. package/.opencode/oh-my-design/design-md/kakao/README.md +0 -18
  309. package/.opencode/oh-my-design/design-md/kakao/_research.md +0 -98
  310. package/.opencode/oh-my-design/design-md/kakaobank/.verification.md +0 -133
  311. package/.opencode/oh-my-design/design-md/kakaobank/DESIGN.md +0 -602
  312. package/.opencode/oh-my-design/design-md/kakaopay/DESIGN.md +0 -603
  313. package/.opencode/oh-my-design/design-md/kakaopay/_promo.json +0 -22
  314. package/.opencode/oh-my-design/design-md/kakaopay/_research.md +0 -84
  315. package/.opencode/oh-my-design/design-md/kakaot/DESIGN.md +0 -507
  316. package/.opencode/oh-my-design/design-md/karrot/.verification.md +0 -143
  317. package/.opencode/oh-my-design/design-md/karrot/DESIGN.md +0 -494
  318. package/.opencode/oh-my-design/design-md/karrot/README.md +0 -18
  319. package/.opencode/oh-my-design/design-md/karrot/_research.md +0 -57
  320. package/.opencode/oh-my-design/design-md/kbank/DESIGN.md +0 -252
  321. package/.opencode/oh-my-design/design-md/kbank/assets/_reference/.live-inspect-proof.json +0 -215
  322. package/.opencode/oh-my-design/design-md/kbank/assets/_reference/.live-inspect-raw.json +0 -1
  323. package/.opencode/oh-my-design/design-md/kbank/assets/_reference/fonts.json +0 -20
  324. package/.opencode/oh-my-design/design-md/kbank/assets/_reference/structure.json +0 -151
  325. package/.opencode/oh-my-design/design-md/kbank/assets/_reference/tokens.json +0 -101
  326. package/.opencode/oh-my-design/design-md/kdan/.verification.md +0 -30
  327. package/.opencode/oh-my-design/design-md/kdan/DESIGN.md +0 -193
  328. package/.opencode/oh-my-design/design-md/kintone/.verification.md +0 -21
  329. package/.opencode/oh-my-design/design-md/kintone/DESIGN.md +0 -586
  330. package/.opencode/oh-my-design/design-md/kkbox/.verification.md +0 -27
  331. package/.opencode/oh-my-design/design-md/kkbox/DESIGN.md +0 -136
  332. package/.opencode/oh-my-design/design-md/kkday/DESIGN.md +0 -470
  333. package/.opencode/oh-my-design/design-md/kmong/.verification.md +0 -30
  334. package/.opencode/oh-my-design/design-md/kmong/DESIGN.md +0 -427
  335. package/.opencode/oh-my-design/design-md/krafton/.verification.md +0 -38
  336. package/.opencode/oh-my-design/design-md/krafton/DESIGN.md +0 -267
  337. package/.opencode/oh-my-design/design-md/kraken/.verification.md +0 -143
  338. package/.opencode/oh-my-design/design-md/kraken/DESIGN.md +0 -277
  339. package/.opencode/oh-my-design/design-md/kraken/README.md +0 -23
  340. package/.opencode/oh-my-design/design-md/kraken/preview-dark.html +0 -169
  341. package/.opencode/oh-my-design/design-md/kraken/preview.html +0 -168
  342. package/.opencode/oh-my-design/design-md/krds/.verification.md +0 -373
  343. package/.opencode/oh-my-design/design-md/krds/DESIGN.md +0 -1060
  344. package/.opencode/oh-my-design/design-md/kream/DESIGN.md +0 -432
  345. package/.opencode/oh-my-design/design-md/kream/assets/_reference/.live-inspect-proof.json +0 -289
  346. package/.opencode/oh-my-design/design-md/kream/assets/_reference/fonts.json +0 -26
  347. package/.opencode/oh-my-design/design-md/kream/assets/_reference/structure.json +0 -56
  348. package/.opencode/oh-my-design/design-md/kream/assets/_reference/tokens.json +0 -154
  349. package/.opencode/oh-my-design/design-md/kurly/.verification.md +0 -126
  350. package/.opencode/oh-my-design/design-md/kurly/DESIGN.md +0 -620
  351. package/.opencode/oh-my-design/design-md/laftel/.verification.md +0 -39
  352. package/.opencode/oh-my-design/design-md/laftel/DESIGN.md +0 -293
  353. package/.opencode/oh-my-design/design-md/lamborghini/.verification.md +0 -127
  354. package/.opencode/oh-my-design/design-md/lamborghini/DESIGN.md +0 -430
  355. package/.opencode/oh-my-design/design-md/lamborghini/README.md +0 -23
  356. package/.opencode/oh-my-design/design-md/lamborghini/preview-dark.html +0 -303
  357. package/.opencode/oh-my-design/design-md/lamborghini/preview.html +0 -381
  358. package/.opencode/oh-my-design/design-md/laundrygo/.verification.md +0 -60
  359. package/.opencode/oh-my-design/design-md/laundrygo/DESIGN.md +0 -434
  360. package/.opencode/oh-my-design/design-md/layerx/.verification.md +0 -21
  361. package/.opencode/oh-my-design/design-md/layerx/DESIGN.md +0 -615
  362. package/.opencode/oh-my-design/design-md/lezhin/.verification.md +0 -47
  363. package/.opencode/oh-my-design/design-md/lezhin/DESIGN.md +0 -348
  364. package/.opencode/oh-my-design/design-md/line/.verification.md +0 -137
  365. package/.opencode/oh-my-design/design-md/line/DESIGN.md +0 -467
  366. package/.opencode/oh-my-design/design-md/line/README.md +0 -12
  367. package/.opencode/oh-my-design/design-md/line/_research/home-1440px.png +0 -0
  368. package/.opencode/oh-my-design/design-md/line/_research.md +0 -65
  369. package/.opencode/oh-my-design/design-md/linear.app/.verification.md +0 -143
  370. package/.opencode/oh-my-design/design-md/linear.app/DESIGN.md +0 -642
  371. package/.opencode/oh-my-design/design-md/linear.app/README.md +0 -24
  372. package/.opencode/oh-my-design/design-md/linear.app/preview-dark.html +0 -383
  373. package/.opencode/oh-my-design/design-md/linear.app/preview.html +0 -373
  374. package/.opencode/oh-my-design/design-md/loom/.verification.md +0 -31
  375. package/.opencode/oh-my-design/design-md/loom/DESIGN.md +0 -396
  376. package/.opencode/oh-my-design/design-md/lovable/.verification.md +0 -154
  377. package/.opencode/oh-my-design/design-md/lovable/DESIGN.md +0 -423
  378. package/.opencode/oh-my-design/design-md/lovable/README.md +0 -24
  379. package/.opencode/oh-my-design/design-md/lovable/preview-dark.html +0 -349
  380. package/.opencode/oh-my-design/design-md/lovable/preview.html +0 -348
  381. package/.opencode/oh-my-design/design-md/lunit/DESIGN.md +0 -296
  382. package/.opencode/oh-my-design/design-md/lunit/assets/_reference/.live-inspect-proof.json +0 -249
  383. package/.opencode/oh-my-design/design-md/lunit/assets/_reference/fonts.json +0 -24
  384. package/.opencode/oh-my-design/design-md/lunit/assets/_reference/structure.json +0 -162
  385. package/.opencode/oh-my-design/design-md/lunit/assets/_reference/tokens.json +0 -115
  386. package/.opencode/oh-my-design/design-md/mastercard/.verification.md +0 -19
  387. package/.opencode/oh-my-design/design-md/mastercard/DESIGN.md +0 -587
  388. package/.opencode/oh-my-design/design-md/meituan/DESIGN.md +0 -466
  389. package/.opencode/oh-my-design/design-md/melon/.verification.md +0 -27
  390. package/.opencode/oh-my-design/design-md/melon/DESIGN.md +0 -179
  391. package/.opencode/oh-my-design/design-md/mercari/.verification.md +0 -155
  392. package/.opencode/oh-my-design/design-md/mercari/DESIGN.md +0 -514
  393. package/.opencode/oh-my-design/design-md/mercari/README.md +0 -12
  394. package/.opencode/oh-my-design/design-md/mercari/_research/home-1440px.png +0 -0
  395. package/.opencode/oh-my-design/design-md/mercari/_research.md +0 -137
  396. package/.opencode/oh-my-design/design-md/mercury/.verification.md +0 -21
  397. package/.opencode/oh-my-design/design-md/mercury/DESIGN.md +0 -589
  398. package/.opencode/oh-my-design/design-md/meta/.verification.md +0 -21
  399. package/.opencode/oh-my-design/design-md/meta/DESIGN.md +0 -615
  400. package/.opencode/oh-my-design/design-md/microsoft/.verification.md +0 -62
  401. package/.opencode/oh-my-design/design-md/microsoft/DESIGN.md +0 -508
  402. package/.opencode/oh-my-design/design-md/millie/DESIGN.md +0 -584
  403. package/.opencode/oh-my-design/design-md/minimax/.verification.md +0 -135
  404. package/.opencode/oh-my-design/design-md/minimax/DESIGN.md +0 -396
  405. package/.opencode/oh-my-design/design-md/minimax/README.md +0 -24
  406. package/.opencode/oh-my-design/design-md/minimax/preview-dark.html +0 -1262
  407. package/.opencode/oh-my-design/design-md/minimax/preview.html +0 -1248
  408. package/.opencode/oh-my-design/design-md/mintlify/.verification.md +0 -160
  409. package/.opencode/oh-my-design/design-md/mintlify/DESIGN.md +0 -472
  410. package/.opencode/oh-my-design/design-md/mintlify/README.md +0 -24
  411. package/.opencode/oh-my-design/design-md/mintlify/preview-dark.html +0 -409
  412. package/.opencode/oh-my-design/design-md/mintlify/preview.html +0 -398
  413. package/.opencode/oh-my-design/design-md/miricanvas/.verification.md +0 -61
  414. package/.opencode/oh-my-design/design-md/miricanvas/DESIGN.md +0 -464
  415. package/.opencode/oh-my-design/design-md/miro/.verification.md +0 -138
  416. package/.opencode/oh-my-design/design-md/miro/DESIGN.md +0 -319
  417. package/.opencode/oh-my-design/design-md/miro/README.md +0 -23
  418. package/.opencode/oh-my-design/design-md/miro/preview-dark.html +0 -174
  419. package/.opencode/oh-my-design/design-md/miro/preview.html +0 -173
  420. package/.opencode/oh-my-design/design-md/mistral.ai/.verification.md +0 -146
  421. package/.opencode/oh-my-design/design-md/mistral.ai/DESIGN.md +0 -390
  422. package/.opencode/oh-my-design/design-md/mistral.ai/README.md +0 -24
  423. package/.opencode/oh-my-design/design-md/mistral.ai/preview-dark.html +0 -806
  424. package/.opencode/oh-my-design/design-md/mistral.ai/preview.html +0 -805
  425. package/.opencode/oh-my-design/design-md/modusign/.verification.md +0 -58
  426. package/.opencode/oh-my-design/design-md/modusign/DESIGN.md +0 -524
  427. package/.opencode/oh-my-design/design-md/momoshop/.verification.md +0 -36
  428. package/.opencode/oh-my-design/design-md/momoshop/DESIGN.md +0 -322
  429. package/.opencode/oh-my-design/design-md/money-forward/DESIGN.md +0 -443
  430. package/.opencode/oh-my-design/design-md/mongodb/.verification.md +0 -145
  431. package/.opencode/oh-my-design/design-md/mongodb/DESIGN.md +0 -401
  432. package/.opencode/oh-my-design/design-md/mongodb/README.md +0 -23
  433. package/.opencode/oh-my-design/design-md/mongodb/preview-dark.html +0 -260
  434. package/.opencode/oh-my-design/design-md/mongodb/preview.html +0 -259
  435. package/.opencode/oh-my-design/design-md/muji/.verification.md +0 -20
  436. package/.opencode/oh-my-design/design-md/muji/DESIGN.md +0 -605
  437. package/.opencode/oh-my-design/design-md/musinsa/.verification.md +0 -59
  438. package/.opencode/oh-my-design/design-md/musinsa/DESIGN.md +0 -593
  439. package/.opencode/oh-my-design/design-md/mustit/.verification.md +0 -37
  440. package/.opencode/oh-my-design/design-md/mustit/DESIGN.md +0 -328
  441. package/.opencode/oh-my-design/design-md/myrealtrip/DESIGN.md +0 -494
  442. package/.opencode/oh-my-design/design-md/naver/.verification.md +0 -134
  443. package/.opencode/oh-my-design/design-md/naver/DESIGN.md +0 -582
  444. package/.opencode/oh-my-design/design-md/naverwebtoon/DESIGN.md +0 -477
  445. package/.opencode/oh-my-design/design-md/netflix/.verification.md +0 -21
  446. package/.opencode/oh-my-design/design-md/netflix/DESIGN.md +0 -572
  447. package/.opencode/oh-my-design/design-md/nexon/.verification.md +0 -27
  448. package/.opencode/oh-my-design/design-md/nexon/DESIGN.md +0 -389
  449. package/.opencode/oh-my-design/design-md/nhncloud/.verification.md +0 -23
  450. package/.opencode/oh-my-design/design-md/nhncloud/DESIGN.md +0 -207
  451. package/.opencode/oh-my-design/design-md/nike/.verification.md +0 -21
  452. package/.opencode/oh-my-design/design-md/nike/DESIGN.md +0 -588
  453. package/.opencode/oh-my-design/design-md/note/DESIGN.md +0 -346
  454. package/.opencode/oh-my-design/design-md/notion/.verification.md +0 -141
  455. package/.opencode/oh-my-design/design-md/notion/DESIGN.md +0 -557
  456. package/.opencode/oh-my-design/design-md/notion/README.md +0 -24
  457. package/.opencode/oh-my-design/design-md/notion/preview-dark.html +0 -372
  458. package/.opencode/oh-my-design/design-md/notion/preview.html +0 -364
  459. package/.opencode/oh-my-design/design-md/nvidia/.verification.md +0 -127
  460. package/.opencode/oh-my-design/design-md/nvidia/DESIGN.md +0 -550
  461. package/.opencode/oh-my-design/design-md/nvidia/README.md +0 -24
  462. package/.opencode/oh-my-design/design-md/nvidia/_research.md +0 -68
  463. package/.opencode/oh-my-design/design-md/nvidia/preview-dark.html +0 -374
  464. package/.opencode/oh-my-design/design-md/nvidia/preview.html +0 -366
  465. package/.opencode/oh-my-design/design-md/ohouse/.verification.md +0 -87
  466. package/.opencode/oh-my-design/design-md/ohouse/DESIGN.md +0 -635
  467. package/.opencode/oh-my-design/design-md/oliveyoung/DESIGN.md +0 -407
  468. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/.live-inspect-proof.json +0 -158
  469. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_best_capture.json +0 -644
  470. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_detail_capture.json +0 -447
  471. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_main.html +0 -419
  472. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_main_capture.json +0 -1126
  473. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_search_capture.json +0 -912
  474. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/fonts.json +0 -20
  475. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/structure.json +0 -91
  476. package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/tokens.json +0 -79
  477. package/.opencode/oh-my-design/design-md/ollama/.verification.md +0 -138
  478. package/.opencode/oh-my-design/design-md/ollama/DESIGN.md +0 -393
  479. package/.opencode/oh-my-design/design-md/ollama/README.md +0 -24
  480. package/.opencode/oh-my-design/design-md/ollama/preview-dark.html +0 -678
  481. package/.opencode/oh-my-design/design-md/ollama/preview.html +0 -678
  482. package/.opencode/oh-my-design/design-md/omnichat/.verification.md +0 -74
  483. package/.opencode/oh-my-design/design-md/omnichat/DESIGN.md +0 -499
  484. package/.opencode/oh-my-design/design-md/openai/.verification.md +0 -21
  485. package/.opencode/oh-my-design/design-md/openai/DESIGN.md +0 -641
  486. package/.opencode/oh-my-design/design-md/opencode.ai/.verification.md +0 -136
  487. package/.opencode/oh-my-design/design-md/opencode.ai/DESIGN.md +0 -425
  488. package/.opencode/oh-my-design/design-md/opencode.ai/README.md +0 -24
  489. package/.opencode/oh-my-design/design-md/opencode.ai/preview-dark.html +0 -366
  490. package/.opencode/oh-my-design/design-md/opencode.ai/preview.html +0 -357
  491. package/.opencode/oh-my-design/design-md/payco/.verification.md +0 -28
  492. package/.opencode/oh-my-design/design-md/payco/DESIGN.md +0 -267
  493. package/.opencode/oh-my-design/design-md/paypay/.verification.md +0 -21
  494. package/.opencode/oh-my-design/design-md/paypay/DESIGN.md +0 -656
  495. package/.opencode/oh-my-design/design-md/pchome/.verification.md +0 -38
  496. package/.opencode/oh-my-design/design-md/pchome/DESIGN.md +0 -439
  497. package/.opencode/oh-my-design/design-md/perplexity/.verification.md +0 -21
  498. package/.opencode/oh-my-design/design-md/perplexity/DESIGN.md +0 -546
  499. package/.opencode/oh-my-design/design-md/piccollage/.verification.md +0 -34
  500. package/.opencode/oh-my-design/design-md/piccollage/DESIGN.md +0 -320
  501. package/.opencode/oh-my-design/design-md/pinkoi/.verification.md +0 -147
  502. package/.opencode/oh-my-design/design-md/pinkoi/DESIGN.md +0 -639
  503. package/.opencode/oh-my-design/design-md/pinkoi/README.md +0 -12
  504. package/.opencode/oh-my-design/design-md/pinkoi/_research/browse-1440px.png +0 -0
  505. package/.opencode/oh-my-design/design-md/pinkoi/_research.md +0 -167
  506. package/.opencode/oh-my-design/design-md/pinterest/.verification.md +0 -141
  507. package/.opencode/oh-my-design/design-md/pinterest/DESIGN.md +0 -366
  508. package/.opencode/oh-my-design/design-md/pinterest/README.md +0 -23
  509. package/.opencode/oh-my-design/design-md/pinterest/preview-dark.html +0 -233
  510. package/.opencode/oh-my-design/design-md/pinterest/preview.html +0 -232
  511. package/.opencode/oh-my-design/design-md/pixiv/.verification.md +0 -20
  512. package/.opencode/oh-my-design/design-md/pixiv/DESIGN.md +0 -613
  513. package/.opencode/oh-my-design/design-md/pixnet/.verification.md +0 -31
  514. package/.opencode/oh-my-design/design-md/pixnet/DESIGN.md +0 -430
  515. package/.opencode/oh-my-design/design-md/posthog/.verification.md +0 -159
  516. package/.opencode/oh-my-design/design-md/posthog/DESIGN.md +0 -480
  517. package/.opencode/oh-my-design/design-md/posthog/README.md +0 -23
  518. package/.opencode/oh-my-design/design-md/posthog/preview-dark.html +0 -699
  519. package/.opencode/oh-my-design/design-md/posthog/preview.html +0 -749
  520. package/.opencode/oh-my-design/design-md/postype/.verification.md +0 -61
  521. package/.opencode/oh-my-design/design-md/postype/DESIGN.md +0 -431
  522. package/.opencode/oh-my-design/design-md/publy/DESIGN.md +0 -563
  523. package/.opencode/oh-my-design/design-md/qanda/.verification.md +0 -121
  524. package/.opencode/oh-my-design/design-md/qanda/DESIGN.md +0 -516
  525. package/.opencode/oh-my-design/design-md/ragic/.verification.md +0 -37
  526. package/.opencode/oh-my-design/design-md/ragic/DESIGN.md +0 -444
  527. package/.opencode/oh-my-design/design-md/rakuten/.verification.md +0 -60
  528. package/.opencode/oh-my-design/design-md/rakuten/DESIGN.md +0 -440
  529. package/.opencode/oh-my-design/design-md/ramp/.verification.md +0 -21
  530. package/.opencode/oh-my-design/design-md/ramp/DESIGN.md +0 -634
  531. package/.opencode/oh-my-design/design-md/rayark/.verification.md +0 -22
  532. package/.opencode/oh-my-design/design-md/rayark/DESIGN.md +0 -154
  533. package/.opencode/oh-my-design/design-md/raycast/.verification.md +0 -138
  534. package/.opencode/oh-my-design/design-md/raycast/DESIGN.md +0 -467
  535. package/.opencode/oh-my-design/design-md/raycast/README.md +0 -23
  536. package/.opencode/oh-my-design/design-md/raycast/preview-dark.html +0 -606
  537. package/.opencode/oh-my-design/design-md/raycast/preview.html +0 -688
  538. package/.opencode/oh-my-design/design-md/remember/.verification.md +0 -135
  539. package/.opencode/oh-my-design/design-md/remember/DESIGN.md +0 -504
  540. package/.opencode/oh-my-design/design-md/remember/_promo.json +0 -27
  541. package/.opencode/oh-my-design/design-md/remember/_research.md +0 -90
  542. package/.opencode/oh-my-design/design-md/renault/.verification.md +0 -139
  543. package/.opencode/oh-my-design/design-md/renault/DESIGN.md +0 -439
  544. package/.opencode/oh-my-design/design-md/renault/README.md +0 -23
  545. package/.opencode/oh-my-design/design-md/renault/preview-dark.html +0 -406
  546. package/.opencode/oh-my-design/design-md/renault/preview.html +0 -606
  547. package/.opencode/oh-my-design/design-md/replicate/.verification.md +0 -154
  548. package/.opencode/oh-my-design/design-md/replicate/DESIGN.md +0 -387
  549. package/.opencode/oh-my-design/design-md/replicate/README.md +0 -24
  550. package/.opencode/oh-my-design/design-md/replicate/preview-dark.html +0 -828
  551. package/.opencode/oh-my-design/design-md/replicate/preview.html +0 -831
  552. package/.opencode/oh-my-design/design-md/resend/.verification.md +0 -143
  553. package/.opencode/oh-my-design/design-md/resend/DESIGN.md +0 -440
  554. package/.opencode/oh-my-design/design-md/resend/README.md +0 -23
  555. package/.opencode/oh-my-design/design-md/resend/preview-dark.html +0 -355
  556. package/.opencode/oh-my-design/design-md/resend/preview.html +0 -354
  557. package/.opencode/oh-my-design/design-md/retool/.verification.md +0 -21
  558. package/.opencode/oh-my-design/design-md/retool/DESIGN.md +0 -645
  559. package/.opencode/oh-my-design/design-md/revolut/.verification.md +0 -140
  560. package/.opencode/oh-my-design/design-md/revolut/DESIGN.md +0 -319
  561. package/.opencode/oh-my-design/design-md/revolut/README.md +0 -23
  562. package/.opencode/oh-my-design/design-md/revolut/preview-dark.html +0 -234
  563. package/.opencode/oh-my-design/design-md/revolut/preview.html +0 -233
  564. package/.opencode/oh-my-design/design-md/richart/.verification.md +0 -41
  565. package/.opencode/oh-my-design/design-md/richart/DESIGN.md +0 -465
  566. package/.opencode/oh-my-design/design-md/ridi/.verification.md +0 -108
  567. package/.opencode/oh-my-design/design-md/ridi/DESIGN.md +0 -573
  568. package/.opencode/oh-my-design/design-md/riiid/.verification.md +0 -33
  569. package/.opencode/oh-my-design/design-md/riiid/DESIGN.md +0 -260
  570. package/.opencode/oh-my-design/design-md/ringle/.verification.md +0 -53
  571. package/.opencode/oh-my-design/design-md/ringle/DESIGN.md +0 -444
  572. package/.opencode/oh-my-design/design-md/robinhood/.verification.md +0 -21
  573. package/.opencode/oh-my-design/design-md/robinhood/DESIGN.md +0 -604
  574. package/.opencode/oh-my-design/design-md/runwayml/.verification.md +0 -141
  575. package/.opencode/oh-my-design/design-md/runwayml/DESIGN.md +0 -431
  576. package/.opencode/oh-my-design/design-md/runwayml/README.md +0 -24
  577. package/.opencode/oh-my-design/design-md/runwayml/preview-dark.html +0 -664
  578. package/.opencode/oh-my-design/design-md/runwayml/preview.html +0 -665
  579. package/.opencode/oh-my-design/design-md/salesforce/.verification.md +0 -66
  580. package/.opencode/oh-my-design/design-md/salesforce/DESIGN.md +0 -473
  581. package/.opencode/oh-my-design/design-md/sanity/.verification.md +0 -174
  582. package/.opencode/oh-my-design/design-md/sanity/DESIGN.md +0 -499
  583. package/.opencode/oh-my-design/design-md/sanity/README.md +0 -24
  584. package/.opencode/oh-my-design/design-md/sanity/preview-dark.html +0 -990
  585. package/.opencode/oh-my-design/design-md/sanity/preview.html +0 -1135
  586. package/.opencode/oh-my-design/design-md/sansan/.verification.md +0 -21
  587. package/.opencode/oh-my-design/design-md/sansan/DESIGN.md +0 -631
  588. package/.opencode/oh-my-design/design-md/sendbird/.verification.md +0 -67
  589. package/.opencode/oh-my-design/design-md/sendbird/DESIGN.md +0 -331
  590. package/.opencode/oh-my-design/design-md/sentry/.verification.md +0 -157
  591. package/.opencode/oh-my-design/design-md/sentry/DESIGN.md +0 -397
  592. package/.opencode/oh-my-design/design-md/sentry/README.md +0 -24
  593. package/.opencode/oh-my-design/design-md/sentry/preview-dark.html +0 -626
  594. package/.opencode/oh-my-design/design-md/sentry/preview.html +0 -951
  595. package/.opencode/oh-my-design/design-md/shinhancard/.verification.md +0 -31
  596. package/.opencode/oh-my-design/design-md/shinhancard/DESIGN.md +0 -421
  597. package/.opencode/oh-my-design/design-md/shopline/.verification.md +0 -34
  598. package/.opencode/oh-my-design/design-md/shopline/DESIGN.md +0 -431
  599. package/.opencode/oh-my-design/design-md/slack/.verification.md +0 -21
  600. package/.opencode/oh-my-design/design-md/slack/DESIGN.md +0 -635
  601. package/.opencode/oh-my-design/design-md/smarthr/DESIGN.md +0 -452
  602. package/.opencode/oh-my-design/design-md/smartnews/DESIGN.md +0 -360
  603. package/.opencode/oh-my-design/design-md/socar/DESIGN.md +0 -438
  604. package/.opencode/oh-my-design/design-md/socar/_promo.json +0 -28
  605. package/.opencode/oh-my-design/design-md/socar/_research.md +0 -55
  606. package/.opencode/oh-my-design/design-md/soomgo/.verification.md +0 -27
  607. package/.opencode/oh-my-design/design-md/soomgo/DESIGN.md +0 -326
  608. package/.opencode/oh-my-design/design-md/spacex/.verification.md +0 -132
  609. package/.opencode/oh-my-design/design-md/spacex/DESIGN.md +0 -415
  610. package/.opencode/oh-my-design/design-md/spacex/README.md +0 -23
  611. package/.opencode/oh-my-design/design-md/spacex/_research.md +0 -69
  612. package/.opencode/oh-my-design/design-md/spacex/preview-dark.html +0 -221
  613. package/.opencode/oh-my-design/design-md/spacex/preview.html +0 -220
  614. package/.opencode/oh-my-design/design-md/spoon/DESIGN.md +0 -492
  615. package/.opencode/oh-my-design/design-md/spotify/.verification.md +0 -128
  616. package/.opencode/oh-my-design/design-md/spotify/DESIGN.md +0 -489
  617. package/.opencode/oh-my-design/design-md/spotify/README.md +0 -23
  618. package/.opencode/oh-my-design/design-md/spotify/preview-dark.html +0 -231
  619. package/.opencode/oh-my-design/design-md/spotify/preview.html +0 -230
  620. package/.opencode/oh-my-design/design-md/starbucks/.verification.md +0 -21
  621. package/.opencode/oh-my-design/design-md/starbucks/DESIGN.md +0 -597
  622. package/.opencode/oh-my-design/design-md/stores/.verification.md +0 -61
  623. package/.opencode/oh-my-design/design-md/stores/DESIGN.md +0 -447
  624. package/.opencode/oh-my-design/design-md/stripe/.verification.md +0 -140
  625. package/.opencode/oh-my-design/design-md/stripe/DESIGN.md +0 -571
  626. package/.opencode/oh-my-design/design-md/stripe/README.md +0 -24
  627. package/.opencode/oh-my-design/design-md/stripe/preview-dark.html +0 -428
  628. package/.opencode/oh-my-design/design-md/stripe/preview.html +0 -419
  629. package/.opencode/oh-my-design/design-md/studio/.verification.md +0 -21
  630. package/.opencode/oh-my-design/design-md/studio/DESIGN.md +0 -602
  631. package/.opencode/oh-my-design/design-md/supabase/.verification.md +0 -145
  632. package/.opencode/oh-my-design/design-md/supabase/DESIGN.md +0 -389
  633. package/.opencode/oh-my-design/design-md/supabase/README.md +0 -24
  634. package/.opencode/oh-my-design/design-md/supabase/preview-dark.html +0 -977
  635. package/.opencode/oh-my-design/design-md/supabase/preview.html +0 -955
  636. package/.opencode/oh-my-design/design-md/superhuman/.verification.md +0 -184
  637. package/.opencode/oh-my-design/design-md/superhuman/DESIGN.md +0 -453
  638. package/.opencode/oh-my-design/design-md/superhuman/README.md +0 -23
  639. package/.opencode/oh-my-design/design-md/superhuman/preview-dark.html +0 -973
  640. package/.opencode/oh-my-design/design-md/superhuman/preview.html +0 -951
  641. package/.opencode/oh-my-design/design-md/surveycake/.verification.md +0 -31
  642. package/.opencode/oh-my-design/design-md/surveycake/DESIGN.md +0 -442
  643. package/.opencode/oh-my-design/design-md/tada/DESIGN.md +0 -579
  644. package/.opencode/oh-my-design/design-md/teamblind/.verification.md +0 -76
  645. package/.opencode/oh-my-design/design-md/teamblind/DESIGN.md +0 -497
  646. package/.opencode/oh-my-design/design-md/tesla/.verification.md +0 -149
  647. package/.opencode/oh-my-design/design-md/tesla/DESIGN.md +0 -501
  648. package/.opencode/oh-my-design/design-md/tesla/README.md +0 -23
  649. package/.opencode/oh-my-design/design-md/tesla/_research.md +0 -70
  650. package/.opencode/oh-my-design/design-md/tesla/preview-dark.html +0 -947
  651. package/.opencode/oh-my-design/design-md/tesla/preview.html +0 -925
  652. package/.opencode/oh-my-design/design-md/theverge/.verification.md +0 -21
  653. package/.opencode/oh-my-design/design-md/theverge/DESIGN.md +0 -500
  654. package/.opencode/oh-my-design/design-md/timee/.verification.md +0 -67
  655. package/.opencode/oh-my-design/design-md/timee/DESIGN.md +0 -444
  656. package/.opencode/oh-my-design/design-md/together.ai/.verification.md +0 -145
  657. package/.opencode/oh-my-design/design-md/together.ai/DESIGN.md +0 -389
  658. package/.opencode/oh-my-design/design-md/together.ai/README.md +0 -24
  659. package/.opencode/oh-my-design/design-md/together.ai/preview-dark.html +0 -892
  660. package/.opencode/oh-my-design/design-md/together.ai/preview.html +0 -897
  661. package/.opencode/oh-my-design/design-md/toss/.verification.md +0 -120
  662. package/.opencode/oh-my-design/design-md/toss/DESIGN.md +0 -698
  663. package/.opencode/oh-my-design/design-md/toss/README.md +0 -19
  664. package/.opencode/oh-my-design/design-md/toss-securities/DESIGN.md +0 -247
  665. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-proof.json +0 -126
  666. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-raw.json +0 -619
  667. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-stock.json +0 -525
  668. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/fonts.json +0 -24
  669. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/structure.json +0 -35
  670. package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/tokens.json +0 -87
  671. package/.opencode/oh-my-design/design-md/tossbank/DESIGN.md +0 -576
  672. package/.opencode/oh-my-design/design-md/trenbe/.verification.md +0 -32
  673. package/.opencode/oh-my-design/design-md/trenbe/DESIGN.md +0 -293
  674. package/.opencode/oh-my-design/design-md/triple/DESIGN.md +0 -481
  675. package/.opencode/oh-my-design/design-md/tumblbug/DESIGN.md +0 -578
  676. package/.opencode/oh-my-design/design-md/tving/DESIGN.md +0 -317
  677. package/.opencode/oh-my-design/design-md/tving/assets/_reference/.live-inspect-proof.json +0 -131
  678. package/.opencode/oh-my-design/design-md/tving/assets/_reference/LICENSE-NOTE.md +0 -37
  679. package/.opencode/oh-my-design/design-md/tving/assets/_reference/attribution.md +0 -52
  680. package/.opencode/oh-my-design/design-md/tving/assets/_reference/fonts.json +0 -31
  681. package/.opencode/oh-my-design/design-md/tving/assets/_reference/screenshots/hero-desktop.png +0 -0
  682. package/.opencode/oh-my-design/design-md/tving/assets/_reference/structure.json +0 -55
  683. package/.opencode/oh-my-design/design-md/tving/assets/_reference/tokens.json +0 -115
  684. package/.opencode/oh-my-design/design-md/uber/.verification.md +0 -128
  685. package/.opencode/oh-my-design/design-md/uber/DESIGN.md +0 -423
  686. package/.opencode/oh-my-design/design-md/uber/README.md +0 -24
  687. package/.opencode/oh-my-design/design-md/uber/preview-dark.html +0 -1120
  688. package/.opencode/oh-my-design/design-md/uber/preview.html +0 -1119
  689. package/.opencode/oh-my-design/design-md/ubie/.verification.md +0 -21
  690. package/.opencode/oh-my-design/design-md/ubie/DESIGN.md +0 -615
  691. package/.opencode/oh-my-design/design-md/uniqlo/.verification.md +0 -21
  692. package/.opencode/oh-my-design/design-md/uniqlo/DESIGN.md +0 -575
  693. package/.opencode/oh-my-design/design-md/upbit/DESIGN.md +0 -337
  694. package/.opencode/oh-my-design/design-md/upbit/_research.md +0 -83
  695. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/.live-inspect-proof.json +0 -263
  696. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/fonts.json +0 -18
  697. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/raw-capture-exchange.json +0 -1901
  698. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/raw-capture.json +0 -1121
  699. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/structure.json +0 -52
  700. package/.opencode/oh-my-design/design-md/upbit/assets/_reference/tokens.json +0 -169
  701. package/.opencode/oh-my-design/design-md/upstage/DESIGN.md +0 -270
  702. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/.live-inspect-proof.json +0 -157
  703. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_brand-resource-center.json +0 -44
  704. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_curated-samples.json +0 -310
  705. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_raw-capture.json +0 -1560
  706. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_root-vars.json +0 -76
  707. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_structure-raw.json +0 -298
  708. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/fonts.json +0 -35
  709. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/structure.json +0 -72
  710. package/.opencode/oh-my-design/design-md/upstage/assets/_reference/tokens.json +0 -183
  711. package/.opencode/oh-my-design/design-md/velog/.verification.md +0 -26
  712. package/.opencode/oh-my-design/design-md/velog/DESIGN.md +0 -196
  713. package/.opencode/oh-my-design/design-md/vercel/.verification.md +0 -134
  714. package/.opencode/oh-my-design/design-md/vercel/DESIGN.md +0 -523
  715. package/.opencode/oh-my-design/design-md/vercel/README.md +0 -24
  716. package/.opencode/oh-my-design/design-md/vercel/preview-dark.html +0 -368
  717. package/.opencode/oh-my-design/design-md/vercel/preview.html +0 -367
  718. package/.opencode/oh-my-design/design-md/voicetube/.verification.md +0 -34
  719. package/.opencode/oh-my-design/design-md/voicetube/DESIGN.md +0 -266
  720. package/.opencode/oh-my-design/design-md/voltagent/.verification.md +0 -159
  721. package/.opencode/oh-my-design/design-md/voltagent/DESIGN.md +0 -454
  722. package/.opencode/oh-my-design/design-md/voltagent/README.md +0 -24
  723. package/.opencode/oh-my-design/design-md/voltagent/preview-dark.html +0 -487
  724. package/.opencode/oh-my-design/design-md/voltagent/preview.html +0 -766
  725. package/.opencode/oh-my-design/design-md/wadiz/DESIGN.md +0 -415
  726. package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/.live-inspect-proof.json +0 -137
  727. package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/fonts.json +0 -17
  728. package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/structure.json +0 -35
  729. package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/tokens.json +0 -80
  730. package/.opencode/oh-my-design/design-md/wanted/DESIGN.md +0 -575
  731. package/.opencode/oh-my-design/design-md/wanted/_promo.json +0 -31
  732. package/.opencode/oh-my-design/design-md/wanted/_research.md +0 -119
  733. package/.opencode/oh-my-design/design-md/wantedly/.verification.md +0 -53
  734. package/.opencode/oh-my-design/design-md/wantedly/DESIGN.md +0 -437
  735. package/.opencode/oh-my-design/design-md/warp/.verification.md +0 -156
  736. package/.opencode/oh-my-design/design-md/warp/DESIGN.md +0 -431
  737. package/.opencode/oh-my-design/design-md/warp/README.md +0 -23
  738. package/.opencode/oh-my-design/design-md/warp/preview-dark.html +0 -500
  739. package/.opencode/oh-my-design/design-md/warp/preview.html +0 -533
  740. package/.opencode/oh-my-design/design-md/watcha/DESIGN.md +0 -465
  741. package/.opencode/oh-my-design/design-md/wavve/DESIGN.md +0 -480
  742. package/.opencode/oh-my-design/design-md/wconcept/DESIGN.md +0 -556
  743. package/.opencode/oh-my-design/design-md/webflow/.verification.md +0 -151
  744. package/.opencode/oh-my-design/design-md/webflow/DESIGN.md +0 -330
  745. package/.opencode/oh-my-design/design-md/webflow/README.md +0 -23
  746. package/.opencode/oh-my-design/design-md/webflow/preview-dark.html +0 -147
  747. package/.opencode/oh-my-design/design-md/webflow/preview.html +0 -146
  748. package/.opencode/oh-my-design/design-md/wired/.verification.md +0 -21
  749. package/.opencode/oh-my-design/design-md/wired/DESIGN.md +0 -572
  750. package/.opencode/oh-my-design/design-md/wise/.verification.md +0 -141
  751. package/.opencode/oh-my-design/design-md/wise/DESIGN.md +0 -317
  752. package/.opencode/oh-my-design/design-md/wise/README.md +0 -23
  753. package/.opencode/oh-my-design/design-md/wise/preview-dark.html +0 -230
  754. package/.opencode/oh-my-design/design-md/wise/preview.html +0 -229
  755. package/.opencode/oh-my-design/design-md/x.ai/.verification.md +0 -140
  756. package/.opencode/oh-my-design/design-md/x.ai/DESIGN.md +0 -397
  757. package/.opencode/oh-my-design/design-md/x.ai/README.md +0 -24
  758. package/.opencode/oh-my-design/design-md/x.ai/preview-dark.html +0 -356
  759. package/.opencode/oh-my-design/design-md/x.ai/preview.html +0 -407
  760. package/.opencode/oh-my-design/design-md/xiaohongshu/DESIGN.md +0 -462
  761. package/.opencode/oh-my-design/design-md/yanolja/.verification.md +0 -83
  762. package/.opencode/oh-my-design/design-md/yanolja/DESIGN.md +0 -508
  763. package/.opencode/oh-my-design/design-md/yeogiotte/.verification.md +0 -210
  764. package/.opencode/oh-my-design/design-md/yeogiotte/DESIGN.md +0 -500
  765. package/.opencode/oh-my-design/design-md/yogiyo/DESIGN.md +0 -515
  766. package/.opencode/oh-my-design/design-md/yourator/.verification.md +0 -39
  767. package/.opencode/oh-my-design/design-md/yourator/DESIGN.md +0 -453
  768. package/.opencode/oh-my-design/design-md/zapier/.verification.md +0 -156
  769. package/.opencode/oh-my-design/design-md/zapier/DESIGN.md +0 -474
  770. package/.opencode/oh-my-design/design-md/zapier/README.md +0 -24
  771. package/.opencode/oh-my-design/design-md/zapier/preview-dark.html +0 -380
  772. package/.opencode/oh-my-design/design-md/zapier/preview.html +0 -372
  773. package/.opencode/oh-my-design/design-md/zigbang/DESIGN.md +0 -500
  774. package/.opencode/oh-my-design/design-md/zigbang/_promo.json +0 -16
  775. package/.opencode/oh-my-design/design-md/zigbang/_research.md +0 -101
  776. package/.opencode/oh-my-design/design-md/zigzag/DESIGN.md +0 -695
  777. package/.opencode/oh-my-design/design-md/zigzag/_promo.json +0 -23
  778. package/.opencode/oh-my-design/design-md/zigzag/_research.md +0 -64
  779. package/.opencode/oh-my-design/design-md/zozotown/.verification.md +0 -20
  780. package/.opencode/oh-my-design/design-md/zozotown/DESIGN.md +0 -578
  781. package/.opencode/oh-my-design/packages/mcp/dist/index.mjs +0 -21685
  782. package/.opencode/oh-my-design/packages/mcp/dist/index.mjs.map +0 -1
  783. package/.opencode/tools/extract-design-pattern.py +0 -182
  784. package/.opencode/tools/sdd_design.ts +0 -303
@@ -20,17 +20,27 @@ import path from "path"
20
20
  // TS-CSS / TS-TW) = 536 items. Fuente: /r/registry.json
21
21
  // oficial shadcn-compatible. Default variant para el stack
22
22
  // Next.js 16 + Tailwind v4 es TS-TW. TTL 1d.
23
+ // - blocks-so: https://blocks.so (ephraimduncan/blocks)
24
+ // 60+ bloques Radix prod-ready organizados en 11 categorias
25
+ // (stats, login, form-layout, file-upload, tables, dialogs,
26
+ // command-menu, sidebar, onboarding, ai, grid-list). Cada
27
+ // bloque incluye `categories[]` explicito en el JSON.
28
+ // Fuente: GitHub Contents API sobre /content/components.
29
+ // Default para forms/stats/tables/file-upload/dialogs/login/
30
+ // command-menu/onboarding/ai/grid-list. TTL 7d.
23
31
  //
24
32
  // Cache local:
25
33
  // - .openspec/cache/shadcn-index.json
26
34
  // - .openspec/cache/basecn-index.json
27
35
  // - .openspec/cache/reactbits-index.json
36
+ // - .openspec/cache/blocks-so-index.json
28
37
  // - .openspec/cache/blocks/<registry>/[<author>/]<name>.json
29
38
  //
30
39
  // Registries configurables via env:
31
40
  // - SDD_CATALOG_TTL_DAYS_AKASH (default 7)
32
41
  // - SDD_CATALOG_TTL_DAYS_BASECN (default 7)
33
42
  // - SDD_CATALOG_TTL_DAYS_REACTBITS (default 1)
43
+ // - SDD_CATALOG_TTL_DAYS_BLOCKSSO (default 7)
34
44
  //
35
45
  // Tools exportadas (prefijo opencode = "sdd_catalog_<export>"):
36
46
  // - list_blocks Lista componentes/bloques por registry, categoria, query.
@@ -42,6 +52,8 @@ import path from "path"
42
52
  // - reactbits: "Dither" (base, resuelve a Dither-TS-TW por default)
43
53
  // "Dither-JS-CSS" (variante canonica completa)
44
54
  // "https://reactbits.dev/r/Dither-TS-TW.json" (URL directa)
55
+ // - blocks-so: "stats-01", "login-03", "form-layout-02", etc.
56
+ // "https://blocks.so/r/stats-01.json" (URL directa)
45
57
  // ============================================================================
46
58
 
47
59
  // ---------------------------------------------------------------------------
@@ -135,6 +147,36 @@ const REACTBITS_CATEGORY_BY_BASE: Map<string, string> = (() => {
135
147
  return map
136
148
  })()
137
149
 
150
+ // ---------------------------------------------------------------------------
151
+ // blocks.so (ephraimduncan/blocks)
152
+ // ---------------------------------------------------------------------------
153
+ // Repo: ephraimduncan/blocks
154
+ // Public registry URL: https://blocks.so/r/<name>.json
155
+ // Categorias oficiales (11): ai, command-menu, dialogs, file-upload,
156
+ // form-layout, grid-list, login, onboarding, sidebar, stats, tables.
157
+ // Fuente de descubrimiento: GitHub Contents API sobre /content/components.
158
+ // Cada bloque es un .tsx bajo content/components/<category>/; el nombre
159
+ // canonico es `<category>-<NN>` (ej: stats-01, login-03, form-layout-02).
160
+ // Cada JSON de bloque incluye `categories[]` explicito y `target` para
161
+ // inyeccion Zero-Touch en el proyecto Next.js destino.
162
+ const BLOCKSSO_REPO = "ephraimduncan/blocks"
163
+ const BLOCKSSO_CATEGORIES_API =
164
+ `https://api.github.com/repos/${BLOCKSSO_REPO}/contents/content/components`
165
+ const BLOCKSSO_CATEGORY_FILES_API = (category: string) =>
166
+ `https://api.github.com/repos/${BLOCKSSO_REPO}/contents/content/components/${category}`
167
+ const BLOCKSSO_RAW = (name: string) =>
168
+ `https://raw.githubusercontent.com/${BLOCKSSO_REPO}/main/content/components/${name}.json`
169
+ const BLOCKSSO_INSTALL = (name: string) => `https://blocks.so/r/${name}.json`
170
+ const BLOCKSSO_PREVIEW = (category: string, name: string) =>
171
+ `https://blocks.so/${category}/${name}`
172
+ const BLOCKSSO_TTL_DAYS = Number(process.env.SDD_CATALOG_TTL_DAYS_BLOCKSSO || 7)
173
+
174
+ // Categorias oficiales de blocks.so (orden estable para la UI).
175
+ const BLOCKSSO_CATEGORIES = [
176
+ "ai", "command-menu", "dialogs", "file-upload", "form-layout",
177
+ "grid-list", "login", "onboarding", "sidebar", "stats", "tables"
178
+ ] as const
179
+
138
180
  // ---------------------------------------------------------------------------
139
181
  // Categorias (heuristica por nombre de archivo para Akash/Basecn)
140
182
  // ---------------------------------------------------------------------------
@@ -156,7 +198,7 @@ const CATEGORY_PREFIXES = [
156
198
  // Helpers
157
199
  // ============================================================================
158
200
 
159
- type RegistryName = "shadcn" | "basecn" | "reactbits"
201
+ type RegistryName = "shadcn" | "basecn" | "reactbits" | "blocks-so"
160
202
 
161
203
  const getRoot = (context: any): string => {
162
204
  if (context?.directory && context.directory !== "/") return context.directory
@@ -505,6 +547,208 @@ const resolveReactbitsSlug = (
505
547
  }
506
548
  }
507
549
 
550
+ // ---------------------------------------------------------------------------
551
+ // blocks.so index builder
552
+ // ---------------------------------------------------------------------------
553
+ //
554
+ // Estrategia de descubrimiento en 2 niveles (idempotente, TTL 7d):
555
+ // 1. Listar subdirectorios bajo /content/components/ (las 11 categorias).
556
+ // 2. Para cada categoria, listar archivos .tsx y derivar name canonico.
557
+ //
558
+ // Output: IndexEntry[] con category real (de la carpeta GitHub), install_url
559
+ // apuntando a https://blocks.so/r/<name>.json y preview_url al demo vivo.
560
+ //
561
+ // Para no saturar la GitHub API (rate limit 60/h sin token), cacheamos el
562
+ // indice completo durante 7d. Cualquier update en el repo se reflejara
563
+ // solo tras `force_refresh: true` o expiracion del TTL.
564
+
565
+ type GitHubContentEntry = {
566
+ name: string
567
+ path: string
568
+ size: number
569
+ sha: string
570
+ type: "dir" | "file"
571
+ }
572
+
573
+ const fetchGithubContents = async (
574
+ apiUrl: string,
575
+ repoLabel: string
576
+ ): Promise<GitHubContentEntry[]> => {
577
+ const res = await fetch(apiUrl, {
578
+ headers: {
579
+ "User-Agent": "zugzbot-sdd-catalog/1.0",
580
+ Accept: "application/vnd.github+json"
581
+ }
582
+ })
583
+ if (!res.ok) {
584
+ if (res.status === 403) {
585
+ throw new Error(
586
+ `GitHub API rate limit hit consultando ${repoLabel}. ` +
587
+ `Espera 1h o usa force_refresh=false con cache existente.`
588
+ )
589
+ }
590
+ if (res.status === 404) {
591
+ throw new Error(
592
+ `Repositorio ${repoLabel} no encontrado o ruta cambiada. ` +
593
+ `Verifica que ${apiUrl} siga vigente.`
594
+ )
595
+ }
596
+ throw new Error(`GitHub API ${res.status} ${res.statusText} consultando ${repoLabel}`)
597
+ }
598
+ return (await res.json()) as GitHubContentEntry[]
599
+ }
600
+
601
+ const buildBlocksSoIndex = async (
602
+ root: string,
603
+ forceRefresh: boolean
604
+ ): Promise<{ index: Index; refreshed: boolean; error?: string }> => {
605
+ const indexPath = getIndexPath(root, "blocks-so")
606
+ const ttl = ttlMs(BLOCKSSO_TTL_DAYS)
607
+
608
+ const cached = readJson<Index>(indexPath)
609
+ if (!forceRefresh && !isCacheStale(cached, ttl)) {
610
+ return { index: cached!, refreshed: false }
611
+ }
612
+
613
+ try {
614
+ const entries: IndexEntry[] = []
615
+
616
+ // Paso 1: listar las 11 categorias oficiales.
617
+ // Si la API falla 404 (ej: rama renombrada) usamos la lista hardcodeada
618
+ // como fallback para no romper el resto del catalogo.
619
+ let categories = [...BLOCKSSO_CATEGORIES] as readonly string[]
620
+ try {
621
+ const catEntries = await fetchGithubContents(
622
+ BLOCKSSO_CATEGORIES_API,
623
+ BLOCKSSO_REPO
624
+ )
625
+ const live = catEntries
626
+ .filter((e) => e.type === "dir")
627
+ .map((e) => e.name)
628
+ .filter((n) => !n.startsWith("_") && !n.startsWith("."))
629
+ if (live.length > 0) categories = live
630
+ } catch (e) {
631
+ if (!cached) throw e
632
+ }
633
+
634
+ // Paso 2: por cada categoria, enumerar .tsx (formato plano) O
635
+ // subdirectorios (formato multi-file, usado por sidebar) y derivar
636
+ // el name canonico. Estructuras mixtas soportadas:
637
+ // - ai/ ai-01.tsx ... ai-05.tsx
638
+ // - command-menu/ command-menu-01.tsx ... -03.tsx
639
+ // - dialogs/ dialog-01.tsx ... -12.tsx (prefijo singular)
640
+ // - login/ login-01.tsx ... -09.tsx
641
+ // - onboarding/ onboarding-01.tsx ... -07.tsx
642
+ // - stats/ stats-01.tsx ... -15.tsx
643
+ // - tables/ table-01.tsx ... -05.tsx (prefijo singular)
644
+ // - form-layout/ form-layout-01.tsx ... -05.tsx
645
+ // - grid-list/ grid-list-01.tsx ... -03.tsx
646
+ // - file-upload/ file-upload-01.tsx ... -06.tsx
647
+ // (+ file-upload-01/ subdir durante transicion)
648
+ // - sidebar/ sidebar-01/ ... sidebar-06/ (SUBDIRS multi-file)
649
+ //
650
+ // Si un mismo name aparece como .tsx Y como subdir (transicion en el
651
+ // repo fuente), preferimos el subdir (multi-file) y descartamos el .tsx
652
+ // huerfano. Esto evita entradas duplicadas en el indice.
653
+ const seenNames = new Set<string>()
654
+ const dedupEntries: IndexEntry[] = []
655
+
656
+ for (const cat of categories) {
657
+ let items: GitHubContentEntry[]
658
+ try {
659
+ items = await fetchGithubContents(
660
+ BLOCKSSO_CATEGORY_FILES_API(cat),
661
+ BLOCKSSO_REPO
662
+ )
663
+ } catch (e) {
664
+ // Si falla una categoria puntual, seguimos con las demas para no
665
+ // abortar el indice completo. Logueamos via error[] abajo.
666
+ continue
667
+ }
668
+ for (const it of items) {
669
+ // Ignorar archivos no-componente (index.ts, .DS_Store, etc.)
670
+ if (it.name.startsWith("index.")) continue
671
+ if (it.name.startsWith("_")) continue
672
+ if (it.name.startsWith(".")) continue
673
+
674
+ // Caso A: archivo .tsx plano. name = file sin extension.
675
+ if (it.type === "file" && it.name.endsWith(".tsx")) {
676
+ const name = it.name.replace(/\.tsx$/, "")
677
+ if (!name) continue
678
+ if (seenNames.has(name)) continue // dedup
679
+ seenNames.add(name)
680
+ dedupEntries.push({
681
+ name,
682
+ filename: it.name,
683
+ category: cat,
684
+ registry: "blocks-so",
685
+ author: "ephraimduncan",
686
+ description: `blocks.so ${cat} block (${name})`,
687
+ tags: [cat, "shadcn-registry", "blocks-so"],
688
+ install_url: BLOCKSSO_INSTALL(name),
689
+ preview_url: BLOCKSSO_PREVIEW(cat, name),
690
+ source: "github"
691
+ })
692
+ continue
693
+ }
694
+
695
+ // Caso B: subdirectorio (multi-file block, ej. sidebar-XX/).
696
+ // El nombre del subdir ES el canonical name del bloque.
697
+ // Sobrescribe cualquier .tsx huerfano con el mismo name.
698
+ if (it.type === "dir") {
699
+ const name = it.name
700
+ if (!name) continue
701
+ // Si ya vimos un .tsx con este name, lo removemos para
702
+ // reemplazarlo por la version multi-file (mas completa).
703
+ const existingIdx = dedupEntries.findIndex(
704
+ (e) => e.name === name && e.category === cat
705
+ )
706
+ if (existingIdx >= 0) dedupEntries.splice(existingIdx, 1)
707
+ seenNames.add(name)
708
+ dedupEntries.push({
709
+ name,
710
+ filename: `${name}/`,
711
+ category: cat,
712
+ registry: "blocks-so",
713
+ author: "ephraimduncan",
714
+ description: `blocks.so ${cat} block (${name}, multi-file)`,
715
+ tags: [cat, "shadcn-registry", "blocks-so", "multi-file"],
716
+ install_url: BLOCKSSO_INSTALL(name),
717
+ preview_url: BLOCKSSO_PREVIEW(cat, name),
718
+ source: "github"
719
+ })
720
+ continue
721
+ }
722
+ }
723
+ }
724
+
725
+ dedupEntries.sort((a, b) => {
726
+ if (a.category !== b.category) return a.category.localeCompare(b.category)
727
+ return a.name.localeCompare(b.name)
728
+ })
729
+ entries.push(...dedupEntries)
730
+
731
+ const index: Index = {
732
+ cached_at: new Date().toISOString(),
733
+ ttl_days: BLOCKSSO_TTL_DAYS,
734
+ source: `${BLOCKSSO_REPO} (${BLOCKSSO_CATEGORIES_API})`,
735
+ total: entries.length,
736
+ entries
737
+ }
738
+ writeJson(indexPath, index)
739
+ return { index, refreshed: true }
740
+ } catch (e) {
741
+ if (cached) {
742
+ return {
743
+ index: cached,
744
+ refreshed: false,
745
+ error: `Refresh fallo (${(e as Error).message}); usando cache de ${cached.cached_at}`
746
+ }
747
+ }
748
+ throw e
749
+ }
750
+ }
751
+
508
752
  // ---------------------------------------------------------------------------
509
753
  // Fetchers compartidos
510
754
  // ---------------------------------------------------------------------------
@@ -550,6 +794,8 @@ const normalizeBlock = (parsed: any, registry: RegistryName, name: string) => {
550
794
  installUrl = REACTBITS_INSTALL(name)
551
795
  } else if (registry === "basecn") {
552
796
  installUrl = BASECN_INSTALL(name)
797
+ } else if (registry === "blocks-so") {
798
+ installUrl = BLOCKSSO_INSTALL(name)
553
799
  } else {
554
800
  installUrl = AKASH_INSTALL(name)
555
801
  }
@@ -591,16 +837,22 @@ type ListResult = {
591
837
  hints?: string[]
592
838
  }
593
839
 
594
- const REGISTRIES_ALL: RegistryName[] = ["shadcn", "basecn", "reactbits"]
840
+ const REGISTRIES_ALL: RegistryName[] = ["shadcn", "basecn", "reactbits", "blocks-so"]
841
+
842
+
843
+
595
844
 
596
845
  export const list_blocks = tool({
597
846
  description:
598
847
  "Lista bloques/componentes del catalogo unificado sdd_catalog. " +
599
- "Soporta 3 registries con catalogo JSON oficial: 'shadcn' (akash3444/shadcn-ui-blocks, " +
600
- "Radix), 'basecn' (akash3444/basecn, fork Base UI) y 'reactbits' (reactbits.dev, " +
601
- "primitivas animadas; para cada base se exponen sus 4 variantes JS-CSS/JS-TW/TS-CSS/TS-TW). " +
602
- "Cachea en .openspec/cache/ con TTL por registry (7d shadcn/basecn, 1d reactbits). " +
603
- "Filtra por categoria (hero, footer, pricing, backgrounds, text, cards, etc) " +
848
+ "Soporta 4 registries con catalogo JSON oficial: 'shadcn' (akash3444/shadcn-ui-blocks, " +
849
+ "Radix), 'basecn' (akash3444/basecn, fork Base UI), 'reactbits' (reactbits.dev, " +
850
+ "primitivas animadas; para cada base se exponen sus 4 variantes JS-CSS/JS-TW/TS-CSS/TS-TW) " +
851
+ "y 'blocks-so' (ephraimduncan/blocks, 60+ bloques Radix prod-ready con categories[] explicito; " +
852
+ "default para stats, login, form-layout, file-upload, tables, dialogs, sidebar, " +
853
+ "command-menu, ai, onboarding, grid-list). " +
854
+ "Cachea en .openspec/cache/ con TTL por registry (7d shadcn/basecn/blocks-so, 1d reactbits). " +
855
+ "Filtra por categoria (hero, footer, pricing, backgrounds, text, cards, stats, login, etc) " +
604
856
  "y por query libre (substring sobre name/description/tags).",
605
857
  args: {
606
858
  category: tool.schema
@@ -615,10 +867,10 @@ export const list_blocks = tool({
615
867
  .optional()
616
868
  .describe("Busqueda libre por substring sobre name/filename/description. Opcional."),
617
869
  registry: tool.schema
618
- .enum(["shadcn", "basecn", "reactbits", "all"])
870
+ .enum(["shadcn", "basecn", "reactbits", "blocks-so", "all"])
619
871
  .optional()
620
872
  .default("all")
621
- .describe("Que catalogos consultar. 'all' = shadcn+basecn+reactbits."),
873
+ .describe("Que catalogos consultar. 'all' = shadcn+basecn+reactbits+blocks-so."),
622
874
  limit: tool.schema
623
875
  .number()
624
876
  .optional()
@@ -661,6 +913,24 @@ export const list_blocks = tool({
661
913
  "TS-TW (TypeScript + Tailwind v4). Para otra variante, pasa " +
662
914
  "`variant='JS-CSS'` a `sdd_catalog_get_block`."
663
915
  )
916
+ } else if (reg === "blocks-so") {
917
+ const { index, refreshed, error } = await buildBlocksSoIndex(
918
+ root,
919
+ args.force_refresh || false
920
+ )
921
+ cachedAt[reg] = index.cached_at
922
+ if (refreshed) {
923
+ // ok
924
+ }
925
+ if (error) errors.push(`[${reg}] ${error}`)
926
+ allEntries.push(...index.entries)
927
+ hints.push(
928
+ "[blocks-so] ephraimduncan/blocks (https://blocks.so). " +
929
+ "Default para sus 11 categorias: stats, login, form-layout, " +
930
+ "file-upload, tables, dialogs, sidebar, command-menu, ai, " +
931
+ "onboarding, grid-list. Install: `npx shadcn@latest add " +
932
+ "https://blocks.so/r/<name>.json --yes`."
933
+ )
664
934
  } else {
665
935
  const { index, refreshed, error } = await buildOrLoadIndex(
666
936
  root,
@@ -758,9 +1028,12 @@ export const get_block = tool({
758
1028
  "especifico del catalogo unificado. " +
759
1029
  "Para shadcn/basecn: `name='hero-06'`. " +
760
1030
  "Para reactbits: `name='Dither'` (resuelve a Dither-TS-TW por default) o " +
761
- "`name='Dither-JS-CSS'` (variante canonica completa). Tambien acepta URL " +
762
- "directa `name='https://reactbits.dev/r/Dither-TS-TW.json'` y namespace shadcn " +
763
- "`name='@acme/button'`. Cachea en .openspec/cache/blocks/<registry>/<name>.json. " +
1031
+ "`name='Dither-JS-CSS'` (variante canonica completa). " +
1032
+ "Para blocks-so: `name='stats-01'`. " +
1033
+ "Tambien acepta URL directa `name='https://reactbits.dev/r/Dither-TS-TW.json'` " +
1034
+ "o `name='https://blocks.so/r/stats-01.json'`, y namespace shadcn " +
1035
+ "`name='@acme/button'` (incluido `@blocks-so/stats-01`). " +
1036
+ "Cachea en .openspec/cache/blocks/<registry>/<name>.json. " +
764
1037
  "Devuelve `install_command` listo para ejecutar con `npx shadcn@latest add`.",
765
1038
  args: {
766
1039
  name: tool.schema
@@ -768,12 +1041,13 @@ export const get_block = tool({
768
1041
  .describe(
769
1042
  "Identificador del bloque. Formatos aceptados:\n" +
770
1043
  " - shadcn/basecn: 'hero-06', 'sidebar-07'\n" +
1044
+ " - blocks-so: 'stats-01', 'login-03', 'form-layout-02'\n" +
771
1045
  " - reactbits: 'Dither' (default TS-TW) o 'Dither-JS-CSS' (canonica)\n" +
772
- " - URL directa: 'https://reactbits.dev/r/Dither-TS-TW.json'\n" +
773
- " - Namespace shadcn: '@acme/button'"
1046
+ " - URL directa: 'https://reactbits.dev/r/Dither-TS-TW.json' o 'https://blocks.so/r/stats-01.json'\n" +
1047
+ " - Namespace shadcn: '@acme/button' o '@blocks-so/stats-01'"
774
1048
  ),
775
1049
  registry: tool.schema
776
- .enum(["auto", "shadcn", "basecn", "reactbits"])
1050
+ .enum(["auto", "shadcn", "basecn", "reactbits", "blocks-so"])
777
1051
  .optional()
778
1052
  .default("auto")
779
1053
  .describe(
@@ -823,6 +1097,18 @@ export const get_block = tool({
823
1097
  baseName = resolved.baseName
824
1098
  variant = resolved.variant
825
1099
  directUrl = url
1100
+ } else if (url.includes("blocks.so/r/")) {
1101
+ const m = url.match(/\/r\/([a-zA-Z0-9_.-]+)\.json/)
1102
+ if (!m) {
1103
+ return JSON.stringify({
1104
+ status: "ERROR",
1105
+ message: `URL blocks.so invalida: ${url}. Esperado patron /r/<name>.json.`,
1106
+ block: null
1107
+ }, null, 2)
1108
+ }
1109
+ registry = "blocks-so"
1110
+ canonicalName = m[1]
1111
+ directUrl = url
826
1112
  } else {
827
1113
  // URL generica shadcn: tratarla como shadcn (1 sola parte)
828
1114
  const m = url.match(/\/([a-zA-Z0-9_.-]+)\.json/)
@@ -838,7 +1124,8 @@ export const get_block = tool({
838
1124
  directUrl = url
839
1125
  }
840
1126
  } else if (rawName.startsWith("@")) {
841
- // Namespace shadcn @acme/item
1127
+ // Namespace shadcn @<author>/<item>. Detectamos @blocks-so y lo
1128
+ // redirigimos al registry blocks-so (canonicalName sin prefijo).
842
1129
  const m = rawName.match(/^@([a-zA-Z0-9_.-]+)\/(.+)$/)
843
1130
  if (!m) {
844
1131
  return JSON.stringify({
@@ -847,8 +1134,13 @@ export const get_block = tool({
847
1134
  block: null
848
1135
  }, null, 2)
849
1136
  }
850
- registry = "shadcn"
851
- canonicalName = `${m[1]}/${m[2]}`
1137
+ if (m[1] === "blocks-so" || m[1] === "blocks_so") {
1138
+ registry = "blocks-so"
1139
+ canonicalName = m[2]
1140
+ } else {
1141
+ registry = "shadcn"
1142
+ canonicalName = `${m[1]}/${m[2]}`
1143
+ }
852
1144
  } else {
853
1145
  // Auto-detectar: si contiene '-JS-' o '-TS-' seguido de CSS/TW, es reactbits canonica.
854
1146
  // Si el registry forzado es reactbits, resolver siempre.
@@ -866,6 +1158,9 @@ export const get_block = tool({
866
1158
  } else if (requestedReg === "basecn") {
867
1159
  registry = "basecn"
868
1160
  canonicalName = rawName
1161
+ } else if (requestedReg === "blocks-so") {
1162
+ registry = "blocks-so"
1163
+ canonicalName = rawName
869
1164
  } else {
870
1165
  registry = "shadcn"
871
1166
  canonicalName = rawName
@@ -897,6 +1192,19 @@ export const get_block = tool({
897
1192
  installCommand = `npx shadcn@latest add ${installUrl} --yes`
898
1193
  category = inferCategory(canonicalName)
899
1194
  notes = "Bloque Base UI (fork). Verifica que tu proyecto tenga Base UI instalado."
1195
+ } else if (registry === "blocks-so") {
1196
+ // blocks.so: el JSON crudo vive en /content/components/<category>/<name>.tsx
1197
+ // pero el contrato del arnes siempre expone el `name` canonico
1198
+ // (ej: "stats-01"), NO el path del repo. La URL raw debe apuntar al
1199
+ // archivo .tsx fuente para que `content` contenga el codigo completo.
1200
+ rawUrl = directUrl || BLOCKSSO_RAW(canonicalName)
1201
+ cachePath = path.resolve(getBlocksDir(root, "blocks-so"), `${canonicalName}.json`)
1202
+ installUrl = BLOCKSSO_INSTALL(canonicalName)
1203
+ const resolvedCategory = inferCategory(canonicalName)
1204
+ previewUrl = BLOCKSSO_PREVIEW(resolvedCategory, canonicalName)
1205
+ installCommand = `npx shadcn@latest add ${installUrl} --yes`
1206
+ category = resolvedCategory
1207
+ notes = "Bloque blocks.so (ephraimduncan/blocks). Formato shadcn registry estandar (registry:block). Compatible con stack nextjs-shadcn."
900
1208
  } else {
901
1209
  rawUrl = AKASH_RAW(canonicalName)
902
1210
  cachePath = path.resolve(getBlocksDir(root, "shadcn"), `${canonicalName}.json`)
@@ -989,10 +1297,10 @@ export const warm_index = tool({
989
1297
  "Pre-calienta (descarga) los indices de los registries soportados " +
990
1298
  "para evitar la latencia del primer list_blocks/get_block. " +
991
1299
  "Idempotente: si el cache existe y es fresco, no re-descarga. " +
992
- "TTL por registry: shadcn/basecn 7d, reactbits 1d.",
1300
+ "TTL por registry: shadcn/basecn/blocks-so 7d, reactbits 1d.",
993
1301
  args: {
994
1302
  registry: tool.schema
995
- .enum(["shadcn", "basecn", "reactbits", "all"])
1303
+ .enum(["shadcn", "basecn", "reactbits", "blocks-so", "all"])
996
1304
  .optional()
997
1305
  .default("all")
998
1306
  .describe("Que catalogos pre-calentar.")
@@ -1016,6 +1324,13 @@ export const warm_index = tool({
1016
1324
  ? `${reg} (re-descargado, ${index.total} bases)`
1017
1325
  : `${reg} (cache fresco de ${index.cached_at})`
1018
1326
  )
1327
+ } else if (reg === "blocks-so") {
1328
+ const { index, refreshed } = await buildBlocksSoIndex(root, false)
1329
+ warmed.push(
1330
+ refreshed
1331
+ ? `${reg} (re-descargado, ${index.total} bloques)`
1332
+ : `${reg} (cache fresco de ${index.cached_at})`
1333
+ )
1019
1334
  } else {
1020
1335
  const { index, refreshed } = await buildOrLoadIndex(root, reg, false)
1021
1336
  warmed.push(
@@ -2,7 +2,6 @@ import { tool } from "@opencode-ai/plugin"
2
2
  import fs from "fs"
3
3
  import path from "path"
4
4
  import { execSync } from "child_process"
5
- import { RECOMMENDED_BRANDS } from "./sdd_design"
6
5
 
7
6
  // Helper to safely resolve root directory (avoiding OpenCode bug where worktree is '/' in non-git repos)
8
7
  const getRoot = (context: any) => {
@@ -528,15 +527,18 @@ export const get_initial_session_data = tool({
528
527
  } catch (e) {}
529
528
  }
530
529
 
531
- // Get design recommendations
532
- const recommendations = RECOMMENDED_BRANDS
533
-
530
+ // Diseño por defecto: zinc nativo de Shadcn. El harness ya no inyecta
531
+ // marcas externas (oh-my-design removido en v1.4.0); si el usuario quiere
532
+ // custom tokens, lo hace explicitamente en F2 via edicion manual de globals.css.
534
533
  const response: any = {
535
534
  status: "SUCCESS",
536
535
  state: currentState,
537
536
  brainMemory,
538
- designRecommendations: recommendations,
539
- note: "Inicialización completada. No es necesario que llames a sdd_get_state, brain_read_memory o sdd_list_design_recommendations por separado."
537
+ design: {
538
+ default: "shadcn-zinc",
539
+ note: "Diseño por defecto = shadcn zinc nativo. Sin marcas externas."
540
+ },
541
+ note: "Inicialización completada. No es necesario que llames a sdd_get_state o brain_read_memory por separado."
540
542
  }
541
543
  if (cleanedCount > 0) {
542
544
  response.cleanedArtifacts = cleanedCount
@@ -0,0 +1,112 @@
1
+ import { tool } from "@opencode-ai/plugin"
2
+ import fs from "fs"
3
+ import path from "path"
4
+ import { execSync } from "child_process"
5
+
6
+ // ============================================================================
7
+ // SDD Lucide Icons Tool
8
+ // ============================================================================
9
+ //
10
+ // Validacion batch de iconos de Lucide React. Antes vivia en sdd_design.ts
11
+ // (junto con tools de oh-my-design). Se independizo para que sobreviva a
12
+ // la remocion de oh-my-design (sigue siendo util para spec-writer cuando
13
+ // declara iconos en el contract.json).
14
+ //
15
+ // Fuentes de validacion (en orden de prioridad):
16
+ // 1. node_modules/lucide-react: introspeccion real de los exports del paquete
17
+ // 2. static_common_list: ~110 iconos mas usados como fallback rapido
18
+ // 3. pascal_case_fallback: cualquier PascalCase se asume valido
19
+ // ============================================================================
20
+
21
+ const getRoot = (context: any): string => {
22
+ if (context?.directory && context.directory !== "/") return context.directory
23
+ if (context?.worktree && context.worktree !== "/") return context.worktree
24
+ if (context?.cwd && context.directory !== "/") return context.directory
25
+ return process.cwd()
26
+ }
27
+
28
+ // Lista de iconos comunes como fallback cuando lucide-react no esta instalado
29
+ // (ej. durante F1 cuando todavia no se ha corrido el bootstrap del target).
30
+ const COMMON_ICONS = new Set([
31
+ "Sun", "Moon", "Plus", "Trash2", "History", "Clock", "Calculator", "User", "Settings",
32
+ "Home", "ChevronLeft", "ChevronRight", "ChevronUp", "ChevronDown", "Search", "X", "Check",
33
+ "Edit", "Menu", "LogOut", "LogIn", "Lock", "Mail", "Phone", "MapPin", "Calendar", "Upload",
34
+ "Download", "ExternalLink", "Eye", "EyeOff", "AlertCircle", "CheckCircle", "Info", "HelpCircle",
35
+ "Bell", "Share2", "Copy", "File", "Folder", "Image", "Video", "Music", "Play", "Pause",
36
+ "Server", "Database", "Terminal", "Code", "Grid", "List", "Filter", "Heart", "Star",
37
+ "ArrowRight", "ArrowLeft", "ArrowUp", "ArrowDown", "RefreshCw", "Send", "Activity", "Briefcase",
38
+ "Camera", "Cloud", "Compass", "Cpu", "CreditCard", "DollarSign", "DownloadCloud", "Edit2", "Edit3",
39
+ "FileText", "Gift", "Globe", "Hash", "Key", "Laptop", "Map", "MessageCircle", "MessageSquare",
40
+ "Mic", "Monitor", "Package", "Paperclip", "Percent", "Power", "Printer", "Radio", "RotateCcw",
41
+ "Save", "Scissors", "Shield", "ShoppingBag", "ShoppingCart", "Slider", "Sliders", "Smartphone",
42
+ "Speaker", "Tablet", "Tag", "Target", "ThumbsUp", "ThumbsDown", "ToggleLeft", "ToggleRight",
43
+ "Trash", "TrendingUp", "TrendingDown", "Truck", "Tv", "Type", "Umbrella", "Unlock", "UploadCloud",
44
+ "Users", "Volume2", "VolumeX", "Wifi", "Wind", "Zap"
45
+ ])
46
+
47
+ export const validate_lucide_icons_batch = tool({
48
+ description:
49
+ "Valida un lote de nombres de iconos de Lucide React. " +
50
+ "Si el proyecto target tiene `lucide-react` instalado, introspecciona " +
51
+ "los exports reales. Si no, usa una lista estatica de iconos comunes " +
52
+ "(~110) o acepta cualquier PascalCase como fallback. " +
53
+ "Util para que el spec-writer valide iconos antes de declararlos en " +
54
+ "el contract.json (frontend.icons).",
55
+ args: {
56
+ icons: tool.schema
57
+ .array(tool.schema.string())
58
+ .describe("Lista de nombres de iconos a validar (ej: ['Sun', 'Moon', 'Plus']).")
59
+ },
60
+ async execute(args, context) {
61
+ const root = getRoot(context)
62
+ const results: Record<string, { valid: boolean; source: string }> = {}
63
+
64
+ let hasNodeModules = false
65
+ let exportsList: Set<string> | null = null
66
+
67
+ const lucidePath = path.resolve(root, "node_modules/lucide-react")
68
+ if (fs.existsSync(lucidePath)) {
69
+ try {
70
+ const nodeScript = `
71
+ const lucide = require('lucide-react');
72
+ console.log(JSON.stringify(Object.keys(lucide)));
73
+ `
74
+ const output = execSync(
75
+ `node -e "${nodeScript.replace(/"/g, '\\"')}"`,
76
+ { cwd: root, stdio: "pipe" }
77
+ ).toString()
78
+ const keys = JSON.parse(output) as string[]
79
+ exportsList = new Set(keys)
80
+ hasNodeModules = true
81
+ } catch (e) {
82
+ // lucide-react instalado pero introspeccion fallo: cae a fallback
83
+ }
84
+ }
85
+
86
+ for (const icon of args.icons) {
87
+ if (hasNodeModules && exportsList) {
88
+ results[icon] = {
89
+ valid: exportsList.has(icon),
90
+ source: "node_modules/lucide-react"
91
+ }
92
+ } else {
93
+ const isPascalCase = /^[A-Z][a-zA-Z0-9]*$/.test(icon)
94
+ const inCommon = COMMON_ICONS.has(icon)
95
+ results[icon] = {
96
+ valid: inCommon || isPascalCase,
97
+ source: inCommon ? "static_common_list" : "pascal_case_fallback"
98
+ }
99
+ }
100
+ }
101
+
102
+ return JSON.stringify(
103
+ {
104
+ status: "SUCCESS",
105
+ validatedAt: new Date().toISOString(),
106
+ results
107
+ },
108
+ null,
109
+ 2
110
+ )
111
+ }
112
+ })
package/README.md CHANGED
@@ -63,8 +63,6 @@ El desarrollo se ejecuta secuencialmente a través de cinco fases estrictas, con
63
63
 
64
64
  El arnés inyecta y habilita automáticamente varios servidores MCP avanzados en tu espacio de trabajo para dar soporte contextual al bot:
65
65
 
66
- * 📚 **`oh-my-design` (MCP de Diseño Offline)**:
67
- Servidor oficial que empaqueta **246 marcas de diseño icónicas** (Toss, Stripe, Supabase, Linear, etc.). Permite buscar especificaciones estéticas (`DESIGN.md`), paletas de colores exactas, tipografía y plantillas HTML interactivas de previsualización 100% offline (sin llamadas a APIs ni coste de tokens).
68
66
  * 🎨 **`shadcn` (MCP de Interfaz de Usuario)**:
69
67
  Permite explorar, buscar e instalar de forma instantánea componentes del registro oficial de Shadcn UI (botones, inputs, cards, dashboards completos) directamente desde la terminal.
70
68
  * 🔍 **`context7` (MCP de Consultas de Documentación)**:
@@ -161,11 +159,7 @@ Si deseas realizar modificaciones en este instalador o probar el código localme
161
159
  Para publicar una nueva versión de Zugzbot en el registro público de NPM:
162
160
 
163
161
  1. Incrementa la versión en el `package.json` de la raíz (ej. `1.0.1`).
164
- 2. Compila el servidor standalone de `oh-my-design` (si modificaste código TypeScript del MCP) ejecutando en la carpeta `.opencode/oh-my-design/packages/mcp`:
165
- ```bash
166
- npm run build
167
- ```
168
- 3. Inicia sesión y publica desde la raíz de tu proyecto:
162
+ 2. Inicia sesión y publica desde la raíz de tu proyecto:
169
163
  ```bash
170
164
  npm login
171
165
  npm publish --access public