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.
- package/.opencode/agents/sdd-coder.md +5 -4
- package/.opencode/agents/sdd-orchestrator.md +9 -8
- package/.opencode/agents/sdd-spec-writer.md +3 -4
- package/.opencode/commands/loop.md +1 -1
- package/.opencode/plugins/loop-enforcer.ts +0 -1
- package/.opencode/plugins/sdd-bridge.ts +1 -1
- package/.opencode/rules/sdd-global.md +9 -5
- package/.opencode/scripts/lint-charts.js +1 -2
- package/.opencode/skills/sdd-foundation-overview/SKILL.md +3 -4
- package/.opencode/skills/sdd-methodology/SKILL.md +8 -10
- package/.opencode/skills/sdd-quickstart/SKILL.md +5 -9
- package/.opencode/skills/shadcn-templates/SKILL.md +71 -15
- package/.opencode/templates/nextjs-shadcn/components.json +2 -1
- package/.opencode/tools/sdd_catalog.ts +335 -20
- package/.opencode/tools/sdd_core.ts +8 -6
- package/.opencode/tools/sdd_lucide.ts +112 -0
- package/README.md +1 -7
- package/opencode.json +0 -10
- package/package.json +1 -3
- package/.opencode/oh-my-design/design-md/11st/.verification.md +0 -37
- package/.opencode/oh-my-design/design-md/11st/DESIGN.md +0 -400
- package/.opencode/oh-my-design/design-md/17live/DESIGN.md +0 -467
- package/.opencode/oh-my-design/design-md/29cm/DESIGN.md +0 -495
- package/.opencode/oh-my-design/design-md/29cm/_promo.json +0 -23
- package/.opencode/oh-my-design/design-md/29cm/_research.md +0 -103
- package/.opencode/oh-my-design/design-md/3o3/.verification.md +0 -73
- package/.opencode/oh-my-design/design-md/3o3/DESIGN.md +0 -454
- package/.opencode/oh-my-design/design-md/91app/.verification.md +0 -25
- package/.opencode/oh-my-design/design-md/91app/DESIGN.md +0 -182
- package/.opencode/oh-my-design/design-md/abema/.verification.md +0 -64
- package/.opencode/oh-my-design/design-md/abema/DESIGN.md +0 -535
- package/.opencode/oh-my-design/design-md/ably/DESIGN.md +0 -646
- package/.opencode/oh-my-design/design-md/ably/_promo.json +0 -18
- package/.opencode/oh-my-design/design-md/ably/_research.md +0 -120
- package/.opencode/oh-my-design/design-md/accupass/.verification.md +0 -66
- package/.opencode/oh-my-design/design-md/accupass/DESIGN.md +0 -494
- package/.opencode/oh-my-design/design-md/adobe/.verification.md +0 -63
- package/.opencode/oh-my-design/design-md/adobe/DESIGN.md +0 -458
- package/.opencode/oh-my-design/design-md/airbnb/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/airbnb/DESIGN.md +0 -639
- package/.opencode/oh-my-design/design-md/airbnb/README.md +0 -23
- package/.opencode/oh-my-design/design-md/airbnb/preview-dark.html +0 -234
- package/.opencode/oh-my-design/design-md/airbnb/preview.html +0 -233
- package/.opencode/oh-my-design/design-md/airtable/.verification.md +0 -136
- package/.opencode/oh-my-design/design-md/airtable/DESIGN.md +0 -314
- package/.opencode/oh-my-design/design-md/airtable/README.md +0 -23
- package/.opencode/oh-my-design/design-md/airtable/preview-dark.html +0 -165
- package/.opencode/oh-my-design/design-md/airtable/preview.html +0 -164
- package/.opencode/oh-my-design/design-md/alipay/DESIGN.md +0 -506
- package/.opencode/oh-my-design/design-md/amazingtalker/.verification.md +0 -38
- package/.opencode/oh-my-design/design-md/amazingtalker/DESIGN.md +0 -434
- package/.opencode/oh-my-design/design-md/appier/DESIGN.md +0 -465
- package/.opencode/oh-my-design/design-md/apple/.verification.md +0 -162
- package/.opencode/oh-my-design/design-md/apple/DESIGN.md +0 -613
- package/.opencode/oh-my-design/design-md/apple/README.md +0 -24
- package/.opencode/oh-my-design/design-md/apple/preview-dark.html +0 -420
- package/.opencode/oh-my-design/design-md/apple/preview.html +0 -414
- package/.opencode/oh-my-design/design-md/baemin/.verification.md +0 -132
- package/.opencode/oh-my-design/design-md/baemin/DESIGN.md +0 -578
- package/.opencode/oh-my-design/design-md/baemin/README.md +0 -19
- package/.opencode/oh-my-design/design-md/baemin/_research.md +0 -84
- package/.opencode/oh-my-design/design-md/banksalad/DESIGN.md +0 -688
- package/.opencode/oh-my-design/design-md/banksalad/_promo.json +0 -29
- package/.opencode/oh-my-design/design-md/banksalad/_research.md +0 -190
- package/.opencode/oh-my-design/design-md/bilibili/DESIGN.md +0 -471
- package/.opencode/oh-my-design/design-md/bithumb/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/bithumb/DESIGN.md +0 -208
- package/.opencode/oh-my-design/design-md/bmw/.verification.md +0 -114
- package/.opencode/oh-my-design/design-md/bmw/DESIGN.md +0 -360
- package/.opencode/oh-my-design/design-md/bmw/README.md +0 -23
- package/.opencode/oh-my-design/design-md/bmw/preview-dark.html +0 -211
- package/.opencode/oh-my-design/design-md/bmw/preview.html +0 -210
- package/.opencode/oh-my-design/design-md/brandi/.verification.md +0 -29
- package/.opencode/oh-my-design/design-md/brandi/DESIGN.md +0 -414
- package/.opencode/oh-my-design/design-md/bunjang/DESIGN.md +0 -374
- package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/.live-inspect-proof.json +0 -260
- package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/fonts.json +0 -33
- package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/logo-icon.svg +0 -10
- package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/structure.json +0 -131
- package/.opencode/oh-my-design/design-md/bunjang/assets/_reference/tokens.json +0 -147
- package/.opencode/oh-my-design/design-md/cakeresume/.verification.md +0 -25
- package/.opencode/oh-my-design/design-md/cakeresume/DESIGN.md +0 -191
- package/.opencode/oh-my-design/design-md/cal/.verification.md +0 -145
- package/.opencode/oh-my-design/design-md/cal/DESIGN.md +0 -481
- package/.opencode/oh-my-design/design-md/cal/README.md +0 -23
- package/.opencode/oh-my-design/design-md/cal/preview-dark.html +0 -449
- package/.opencode/oh-my-design/design-md/cal/preview.html +0 -575
- package/.opencode/oh-my-design/design-md/catchtable/DESIGN.md +0 -341
- package/.opencode/oh-my-design/design-md/catchtable/_research.md +0 -54
- package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/.live-inspect-proof.json +0 -204
- package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/.live-inspect-raw.json +0 -22
- package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/fonts.json +0 -21
- package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/structure.json +0 -42
- package/.opencode/oh-my-design/design-md/catchtable/assets/_reference/tokens.json +0 -95
- package/.opencode/oh-my-design/design-md/cathay/.verification.md +0 -44
- package/.opencode/oh-my-design/design-md/cathay/DESIGN.md +0 -432
- package/.opencode/oh-my-design/design-md/channeltalk/DESIGN.md +0 -422
- package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/.live-inspect-proof.json +0 -320
- package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/fonts.json +0 -53
- package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/structure.json +0 -47
- package/.opencode/oh-my-design/design-md/channeltalk/assets/_reference/tokens.json +0 -78
- package/.opencode/oh-my-design/design-md/class101/DESIGN.md +0 -484
- package/.opencode/oh-my-design/design-md/classting/.verification.md +0 -32
- package/.opencode/oh-my-design/design-md/classting/DESIGN.md +0 -292
- package/.opencode/oh-my-design/design-md/classum/DESIGN.md +0 -279
- package/.opencode/oh-my-design/design-md/classum/assets/_reference/.live-inspect-proof.json +0 -72
- package/.opencode/oh-my-design/design-md/classum/assets/_reference/fonts.json +0 -20
- package/.opencode/oh-my-design/design-md/classum/assets/_reference/structure.json +0 -21
- package/.opencode/oh-my-design/design-md/classum/assets/_reference/tokens.json +0 -56
- package/.opencode/oh-my-design/design-md/claude/.verification.md +0 -106
- package/.opencode/oh-my-design/design-md/claude/DESIGN.md +0 -561
- package/.opencode/oh-my-design/design-md/claude/README.md +0 -24
- package/.opencode/oh-my-design/design-md/claude/preview-dark.html +0 -803
- package/.opencode/oh-my-design/design-md/claude/preview.html +0 -826
- package/.opencode/oh-my-design/design-md/clay/.verification.md +0 -129
- package/.opencode/oh-my-design/design-md/clay/DESIGN.md +0 -454
- package/.opencode/oh-my-design/design-md/clay/README.md +0 -23
- package/.opencode/oh-my-design/design-md/clay/preview-dark.html +0 -316
- package/.opencode/oh-my-design/design-md/clay/preview.html +0 -315
- package/.opencode/oh-my-design/design-md/clickhouse/.verification.md +0 -132
- package/.opencode/oh-my-design/design-md/clickhouse/DESIGN.md +0 -424
- package/.opencode/oh-my-design/design-md/clickhouse/README.md +0 -24
- package/.opencode/oh-my-design/design-md/clickhouse/preview-dark.html +0 -834
- package/.opencode/oh-my-design/design-md/clickhouse/preview.html +0 -786
- package/.opencode/oh-my-design/design-md/cloudflare/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/cloudflare/DESIGN.md +0 -637
- package/.opencode/oh-my-design/design-md/cohere/.verification.md +0 -136
- package/.opencode/oh-my-design/design-md/cohere/DESIGN.md +0 -409
- package/.opencode/oh-my-design/design-md/cohere/README.md +0 -24
- package/.opencode/oh-my-design/design-md/cohere/preview-dark.html +0 -803
- package/.opencode/oh-my-design/design-md/cohere/preview.html +0 -807
- package/.opencode/oh-my-design/design-md/coinbase/.verification.md +0 -116
- package/.opencode/oh-my-design/design-md/coinbase/DESIGN.md +0 -353
- package/.opencode/oh-my-design/design-md/coinbase/README.md +0 -23
- package/.opencode/oh-my-design/design-md/coinbase/preview-dark.html +0 -164
- package/.opencode/oh-my-design/design-md/coinbase/preview.html +0 -163
- package/.opencode/oh-my-design/design-md/coinone/.verification.md +0 -38
- package/.opencode/oh-my-design/design-md/coinone/DESIGN.md +0 -257
- package/.opencode/oh-my-design/design-md/composio/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/composio/DESIGN.md +0 -441
- package/.opencode/oh-my-design/design-md/composio/README.md +0 -24
- package/.opencode/oh-my-design/design-md/composio/preview-dark.html +0 -958
- package/.opencode/oh-my-design/design-md/composio/preview.html +0 -933
- package/.opencode/oh-my-design/design-md/cookpad/DESIGN.md +0 -394
- package/.opencode/oh-my-design/design-md/coupang/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/coupang/DESIGN.md +0 -557
- package/.opencode/oh-my-design/design-md/cursor/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/cursor/DESIGN.md +0 -460
- package/.opencode/oh-my-design/design-md/cursor/README.md +0 -24
- package/.opencode/oh-my-design/design-md/cursor/preview-dark.html +0 -393
- package/.opencode/oh-my-design/design-md/cursor/preview.html +0 -383
- package/.opencode/oh-my-design/design-md/dabang/DESIGN.md +0 -267
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/.live-inspect-proof.json +0 -145
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/fonts.json +0 -22
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/raw-capture-map.json +0 -718
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/raw-capture.json +0 -1125
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/structure.json +0 -53
- package/.opencode/oh-my-design/design-md/dabang/assets/_reference/tokens.json +0 -130
- package/.opencode/oh-my-design/design-md/danawa/.verification.md +0 -60
- package/.opencode/oh-my-design/design-md/danawa/DESIGN.md +0 -477
- package/.opencode/oh-my-design/design-md/dcard/.verification.md +0 -118
- package/.opencode/oh-my-design/design-md/dcard/DESIGN.md +0 -633
- package/.opencode/oh-my-design/design-md/dcard/README.md +0 -12
- package/.opencode/oh-my-design/design-md/dcard/_research/forum-1440px.png +0 -0
- package/.opencode/oh-my-design/design-md/dcard/_research.md +0 -133
- package/.opencode/oh-my-design/design-md/dell/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/dell/DESIGN.md +0 -636
- package/.opencode/oh-my-design/design-md/devsisters/.verification.md +0 -32
- package/.opencode/oh-my-design/design-md/devsisters/DESIGN.md +0 -282
- package/.opencode/oh-my-design/design-md/discord/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/discord/DESIGN.md +0 -604
- package/.opencode/oh-my-design/design-md/dji/DESIGN.md +0 -454
- package/.opencode/oh-my-design/design-md/drnow/.verification.md +0 -41
- package/.opencode/oh-my-design/design-md/drnow/DESIGN.md +0 -383
- package/.opencode/oh-my-design/design-md/dropbox/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/dropbox/DESIGN.md +0 -445
- package/.opencode/oh-my-design/design-md/duolingo/.verification.md +0 -20
- package/.opencode/oh-my-design/design-md/duolingo/DESIGN.md +0 -563
- package/.opencode/oh-my-design/design-md/elevenlabs/.verification.md +0 -128
- package/.opencode/oh-my-design/design-md/elevenlabs/DESIGN.md +0 -415
- package/.opencode/oh-my-design/design-md/elevenlabs/README.md +0 -23
- package/.opencode/oh-my-design/design-md/elevenlabs/preview-dark.html +0 -252
- package/.opencode/oh-my-design/design-md/elevenlabs/preview.html +0 -251
- package/.opencode/oh-my-design/design-md/expo/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/expo/DESIGN.md +0 -412
- package/.opencode/oh-my-design/design-md/expo/README.md +0 -24
- package/.opencode/oh-my-design/design-md/expo/preview-dark.html +0 -533
- package/.opencode/oh-my-design/design-md/expo/preview.html +0 -533
- package/.opencode/oh-my-design/design-md/fastcampus/DESIGN.md +0 -529
- package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/.live-inspect-proof.json +0 -950
- package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/fonts.json +0 -14
- package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/structure.json +0 -30
- package/.opencode/oh-my-design/design-md/fastcampus/assets/_reference/tokens.json +0 -109
- package/.opencode/oh-my-design/design-md/ferrari/.verification.md +0 -119
- package/.opencode/oh-my-design/design-md/ferrari/DESIGN.md +0 -447
- package/.opencode/oh-my-design/design-md/ferrari/README.md +0 -23
- package/.opencode/oh-my-design/design-md/ferrari/preview-dark.html +0 -1162
- package/.opencode/oh-my-design/design-md/ferrari/preview.html +0 -1122
- package/.opencode/oh-my-design/design-md/figma/.verification.md +0 -206
- package/.opencode/oh-my-design/design-md/figma/DESIGN.md +0 -534
- package/.opencode/oh-my-design/design-md/figma/README.md +0 -24
- package/.opencode/oh-my-design/design-md/figma/preview-dark.html +0 -822
- package/.opencode/oh-my-design/design-md/figma/preview.html +0 -832
- package/.opencode/oh-my-design/design-md/finda/.verification.md +0 -33
- package/.opencode/oh-my-design/design-md/finda/DESIGN.md +0 -413
- package/.opencode/oh-my-design/design-md/firstory/.verification.md +0 -70
- package/.opencode/oh-my-design/design-md/firstory/DESIGN.md +0 -487
- package/.opencode/oh-my-design/design-md/flex/DESIGN.md +0 -356
- package/.opencode/oh-my-design/design-md/flex/_research.md +0 -49
- package/.opencode/oh-my-design/design-md/flex/assets/_reference/.live-inspect-proof.json +0 -192
- package/.opencode/oh-my-design/design-md/flex/assets/_reference/.raw-inspect.json +0 -873
- package/.opencode/oh-my-design/design-md/flex/assets/_reference/fonts.json +0 -17
- package/.opencode/oh-my-design/design-md/flex/assets/_reference/structure.json +0 -58
- package/.opencode/oh-my-design/design-md/flex/assets/_reference/tokens.json +0 -75
- package/.opencode/oh-my-design/design-md/flo/.verification.md +0 -33
- package/.opencode/oh-my-design/design-md/flo/DESIGN.md +0 -349
- package/.opencode/oh-my-design/design-md/framer/.verification.md +0 -147
- package/.opencode/oh-my-design/design-md/framer/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/framer/README.md +0 -23
- package/.opencode/oh-my-design/design-md/framer/preview-dark.html +0 -902
- package/.opencode/oh-my-design/design-md/framer/preview.html +0 -883
- package/.opencode/oh-my-design/design-md/freee/.verification.md +0 -145
- package/.opencode/oh-my-design/design-md/freee/DESIGN.md +0 -620
- package/.opencode/oh-my-design/design-md/freee/README.md +0 -12
- package/.opencode/oh-my-design/design-md/freee/_research/vibes-storybook-1440px.png +0 -0
- package/.opencode/oh-my-design/design-md/freee/_research.md +0 -116
- package/.opencode/oh-my-design/design-md/fugle/.verification.md +0 -40
- package/.opencode/oh-my-design/design-md/fugle/DESIGN.md +0 -290
- package/.opencode/oh-my-design/design-md/funnow/.verification.md +0 -62
- package/.opencode/oh-my-design/design-md/funnow/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/gangnamunni/DESIGN.md +0 -677
- package/.opencode/oh-my-design/design-md/gangnamunni/_promo.json +0 -26
- package/.opencode/oh-my-design/design-md/gangnamunni/_research.md +0 -113
- package/.opencode/oh-my-design/design-md/genie/.verification.md +0 -29
- package/.opencode/oh-my-design/design-md/genie/DESIGN.md +0 -415
- package/.opencode/oh-my-design/design-md/github/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/github/DESIGN.md +0 -727
- package/.opencode/oh-my-design/design-md/gmarket/DESIGN.md +0 -534
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/.live-inspect-proof.json +0 -217
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/fonts.json +0 -41
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/raw-capture-bestsellers.json +0 -1929
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/raw-capture-home.json +0 -3675
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/structure.json +0 -65
- package/.opencode/oh-my-design/design-md/gmarket/assets/_reference/tokens.json +0 -210
- package/.opencode/oh-my-design/design-md/gogolook/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/gogolook/DESIGN.md +0 -155
- package/.opencode/oh-my-design/design-md/gogoro/DESIGN.md +0 -441
- package/.opencode/oh-my-design/design-md/google/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/google/DESIGN.md +0 -499
- package/.opencode/oh-my-design/design-md/greenvines/.verification.md +0 -72
- package/.opencode/oh-my-design/design-md/greenvines/DESIGN.md +0 -454
- package/.opencode/oh-my-design/design-md/greeting/.verification.md +0 -64
- package/.opencode/oh-my-design/design-md/greeting/DESIGN.md +0 -462
- package/.opencode/oh-my-design/design-md/grip/.verification.md +0 -36
- package/.opencode/oh-my-design/design-md/grip/DESIGN.md +0 -289
- package/.opencode/oh-my-design/design-md/hahow/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/hahow/DESIGN.md +0 -184
- package/.opencode/oh-my-design/design-md/hashicorp/.verification.md +0 -142
- package/.opencode/oh-my-design/design-md/hashicorp/DESIGN.md +0 -411
- package/.opencode/oh-my-design/design-md/hashicorp/README.md +0 -24
- package/.opencode/oh-my-design/design-md/hashicorp/preview-dark.html +0 -1202
- package/.opencode/oh-my-design/design-md/hashicorp/preview.html +0 -1193
- package/.opencode/oh-my-design/design-md/hogangnono/.verification.md +0 -33
- package/.opencode/oh-my-design/design-md/hogangnono/DESIGN.md +0 -349
- package/.opencode/oh-my-design/design-md/hp/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/hp/DESIGN.md +0 -563
- package/.opencode/oh-my-design/design-md/hyperconnect/.verification.md +0 -40
- package/.opencode/oh-my-design/design-md/hyperconnect/DESIGN.md +0 -393
- package/.opencode/oh-my-design/design-md/hyundaicard/.verification.md +0 -25
- package/.opencode/oh-my-design/design-md/hyundaicard/DESIGN.md +0 -201
- package/.opencode/oh-my-design/design-md/ibm/.verification.md +0 -102
- package/.opencode/oh-my-design/design-md/ibm/DESIGN.md +0 -464
- package/.opencode/oh-my-design/design-md/ibm/README.md +0 -24
- package/.opencode/oh-my-design/design-md/ibm/preview-dark.html +0 -443
- package/.opencode/oh-my-design/design-md/ibm/preview.html +0 -428
- package/.opencode/oh-my-design/design-md/ichef/DESIGN.md +0 -455
- package/.opencode/oh-my-design/design-md/ikala/.verification.md +0 -35
- package/.opencode/oh-my-design/design-md/ikala/DESIGN.md +0 -400
- package/.opencode/oh-my-design/design-md/imweb/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/imweb/DESIGN.md +0 -460
- package/.opencode/oh-my-design/design-md/inflearn/DESIGN.md +0 -453
- package/.opencode/oh-my-design/design-md/inflearn/_promo.json +0 -29
- package/.opencode/oh-my-design/design-md/inflearn/_research.md +0 -85
- package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/.live-inspect-proof-courses.json +0 -679
- package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/.live-inspect-proof.json +0 -448
- package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/fonts.json +0 -41
- package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/structure.json +0 -110
- package/.opencode/oh-my-design/design-md/inflearn/assets/_reference/tokens.json +0 -54
- package/.opencode/oh-my-design/design-md/intercom/.verification.md +0 -144
- package/.opencode/oh-my-design/design-md/intercom/DESIGN.md +0 -271
- package/.opencode/oh-my-design/design-md/intercom/README.md +0 -23
- package/.opencode/oh-my-design/design-md/intercom/preview-dark.html +0 -185
- package/.opencode/oh-my-design/design-md/intercom/preview.html +0 -184
- package/.opencode/oh-my-design/design-md/jandi/.verification.md +0 -26
- package/.opencode/oh-my-design/design-md/jandi/DESIGN.md +0 -382
- package/.opencode/oh-my-design/design-md/jkopay/.verification.md +0 -32
- package/.opencode/oh-my-design/design-md/jkopay/DESIGN.md +0 -283
- package/.opencode/oh-my-design/design-md/jobkorea/.verification.md +0 -30
- package/.opencode/oh-my-design/design-md/jobkorea/DESIGN.md +0 -349
- package/.opencode/oh-my-design/design-md/jumpit/DESIGN.md +0 -403
- package/.opencode/oh-my-design/design-md/jumpit/_research.md +0 -119
- package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/.live-inspect-proof.json +0 -182
- package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/fonts.json +0 -20
- package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/structure.json +0 -66
- package/.opencode/oh-my-design/design-md/jumpit/assets/_reference/tokens.json +0 -108
- package/.opencode/oh-my-design/design-md/kakao/.verification.md +0 -137
- package/.opencode/oh-my-design/design-md/kakao/DESIGN.md +0 -568
- package/.opencode/oh-my-design/design-md/kakao/README.md +0 -18
- package/.opencode/oh-my-design/design-md/kakao/_research.md +0 -98
- package/.opencode/oh-my-design/design-md/kakaobank/.verification.md +0 -133
- package/.opencode/oh-my-design/design-md/kakaobank/DESIGN.md +0 -602
- package/.opencode/oh-my-design/design-md/kakaopay/DESIGN.md +0 -603
- package/.opencode/oh-my-design/design-md/kakaopay/_promo.json +0 -22
- package/.opencode/oh-my-design/design-md/kakaopay/_research.md +0 -84
- package/.opencode/oh-my-design/design-md/kakaot/DESIGN.md +0 -507
- package/.opencode/oh-my-design/design-md/karrot/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/karrot/DESIGN.md +0 -494
- package/.opencode/oh-my-design/design-md/karrot/README.md +0 -18
- package/.opencode/oh-my-design/design-md/karrot/_research.md +0 -57
- package/.opencode/oh-my-design/design-md/kbank/DESIGN.md +0 -252
- package/.opencode/oh-my-design/design-md/kbank/assets/_reference/.live-inspect-proof.json +0 -215
- package/.opencode/oh-my-design/design-md/kbank/assets/_reference/.live-inspect-raw.json +0 -1
- package/.opencode/oh-my-design/design-md/kbank/assets/_reference/fonts.json +0 -20
- package/.opencode/oh-my-design/design-md/kbank/assets/_reference/structure.json +0 -151
- package/.opencode/oh-my-design/design-md/kbank/assets/_reference/tokens.json +0 -101
- package/.opencode/oh-my-design/design-md/kdan/.verification.md +0 -30
- package/.opencode/oh-my-design/design-md/kdan/DESIGN.md +0 -193
- package/.opencode/oh-my-design/design-md/kintone/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/kintone/DESIGN.md +0 -586
- package/.opencode/oh-my-design/design-md/kkbox/.verification.md +0 -27
- package/.opencode/oh-my-design/design-md/kkbox/DESIGN.md +0 -136
- package/.opencode/oh-my-design/design-md/kkday/DESIGN.md +0 -470
- package/.opencode/oh-my-design/design-md/kmong/.verification.md +0 -30
- package/.opencode/oh-my-design/design-md/kmong/DESIGN.md +0 -427
- package/.opencode/oh-my-design/design-md/krafton/.verification.md +0 -38
- package/.opencode/oh-my-design/design-md/krafton/DESIGN.md +0 -267
- package/.opencode/oh-my-design/design-md/kraken/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/kraken/DESIGN.md +0 -277
- package/.opencode/oh-my-design/design-md/kraken/README.md +0 -23
- package/.opencode/oh-my-design/design-md/kraken/preview-dark.html +0 -169
- package/.opencode/oh-my-design/design-md/kraken/preview.html +0 -168
- package/.opencode/oh-my-design/design-md/krds/.verification.md +0 -373
- package/.opencode/oh-my-design/design-md/krds/DESIGN.md +0 -1060
- package/.opencode/oh-my-design/design-md/kream/DESIGN.md +0 -432
- package/.opencode/oh-my-design/design-md/kream/assets/_reference/.live-inspect-proof.json +0 -289
- package/.opencode/oh-my-design/design-md/kream/assets/_reference/fonts.json +0 -26
- package/.opencode/oh-my-design/design-md/kream/assets/_reference/structure.json +0 -56
- package/.opencode/oh-my-design/design-md/kream/assets/_reference/tokens.json +0 -154
- package/.opencode/oh-my-design/design-md/kurly/.verification.md +0 -126
- package/.opencode/oh-my-design/design-md/kurly/DESIGN.md +0 -620
- package/.opencode/oh-my-design/design-md/laftel/.verification.md +0 -39
- package/.opencode/oh-my-design/design-md/laftel/DESIGN.md +0 -293
- package/.opencode/oh-my-design/design-md/lamborghini/.verification.md +0 -127
- package/.opencode/oh-my-design/design-md/lamborghini/DESIGN.md +0 -430
- package/.opencode/oh-my-design/design-md/lamborghini/README.md +0 -23
- package/.opencode/oh-my-design/design-md/lamborghini/preview-dark.html +0 -303
- package/.opencode/oh-my-design/design-md/lamborghini/preview.html +0 -381
- package/.opencode/oh-my-design/design-md/laundrygo/.verification.md +0 -60
- package/.opencode/oh-my-design/design-md/laundrygo/DESIGN.md +0 -434
- package/.opencode/oh-my-design/design-md/layerx/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/layerx/DESIGN.md +0 -615
- package/.opencode/oh-my-design/design-md/lezhin/.verification.md +0 -47
- package/.opencode/oh-my-design/design-md/lezhin/DESIGN.md +0 -348
- package/.opencode/oh-my-design/design-md/line/.verification.md +0 -137
- package/.opencode/oh-my-design/design-md/line/DESIGN.md +0 -467
- package/.opencode/oh-my-design/design-md/line/README.md +0 -12
- package/.opencode/oh-my-design/design-md/line/_research/home-1440px.png +0 -0
- package/.opencode/oh-my-design/design-md/line/_research.md +0 -65
- package/.opencode/oh-my-design/design-md/linear.app/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/linear.app/DESIGN.md +0 -642
- package/.opencode/oh-my-design/design-md/linear.app/README.md +0 -24
- package/.opencode/oh-my-design/design-md/linear.app/preview-dark.html +0 -383
- package/.opencode/oh-my-design/design-md/linear.app/preview.html +0 -373
- package/.opencode/oh-my-design/design-md/loom/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/loom/DESIGN.md +0 -396
- package/.opencode/oh-my-design/design-md/lovable/.verification.md +0 -154
- package/.opencode/oh-my-design/design-md/lovable/DESIGN.md +0 -423
- package/.opencode/oh-my-design/design-md/lovable/README.md +0 -24
- package/.opencode/oh-my-design/design-md/lovable/preview-dark.html +0 -349
- package/.opencode/oh-my-design/design-md/lovable/preview.html +0 -348
- package/.opencode/oh-my-design/design-md/lunit/DESIGN.md +0 -296
- package/.opencode/oh-my-design/design-md/lunit/assets/_reference/.live-inspect-proof.json +0 -249
- package/.opencode/oh-my-design/design-md/lunit/assets/_reference/fonts.json +0 -24
- package/.opencode/oh-my-design/design-md/lunit/assets/_reference/structure.json +0 -162
- package/.opencode/oh-my-design/design-md/lunit/assets/_reference/tokens.json +0 -115
- package/.opencode/oh-my-design/design-md/mastercard/.verification.md +0 -19
- package/.opencode/oh-my-design/design-md/mastercard/DESIGN.md +0 -587
- package/.opencode/oh-my-design/design-md/meituan/DESIGN.md +0 -466
- package/.opencode/oh-my-design/design-md/melon/.verification.md +0 -27
- package/.opencode/oh-my-design/design-md/melon/DESIGN.md +0 -179
- package/.opencode/oh-my-design/design-md/mercari/.verification.md +0 -155
- package/.opencode/oh-my-design/design-md/mercari/DESIGN.md +0 -514
- package/.opencode/oh-my-design/design-md/mercari/README.md +0 -12
- package/.opencode/oh-my-design/design-md/mercari/_research/home-1440px.png +0 -0
- package/.opencode/oh-my-design/design-md/mercari/_research.md +0 -137
- package/.opencode/oh-my-design/design-md/mercury/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/mercury/DESIGN.md +0 -589
- package/.opencode/oh-my-design/design-md/meta/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/meta/DESIGN.md +0 -615
- package/.opencode/oh-my-design/design-md/microsoft/.verification.md +0 -62
- package/.opencode/oh-my-design/design-md/microsoft/DESIGN.md +0 -508
- package/.opencode/oh-my-design/design-md/millie/DESIGN.md +0 -584
- package/.opencode/oh-my-design/design-md/minimax/.verification.md +0 -135
- package/.opencode/oh-my-design/design-md/minimax/DESIGN.md +0 -396
- package/.opencode/oh-my-design/design-md/minimax/README.md +0 -24
- package/.opencode/oh-my-design/design-md/minimax/preview-dark.html +0 -1262
- package/.opencode/oh-my-design/design-md/minimax/preview.html +0 -1248
- package/.opencode/oh-my-design/design-md/mintlify/.verification.md +0 -160
- package/.opencode/oh-my-design/design-md/mintlify/DESIGN.md +0 -472
- package/.opencode/oh-my-design/design-md/mintlify/README.md +0 -24
- package/.opencode/oh-my-design/design-md/mintlify/preview-dark.html +0 -409
- package/.opencode/oh-my-design/design-md/mintlify/preview.html +0 -398
- package/.opencode/oh-my-design/design-md/miricanvas/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/miricanvas/DESIGN.md +0 -464
- package/.opencode/oh-my-design/design-md/miro/.verification.md +0 -138
- package/.opencode/oh-my-design/design-md/miro/DESIGN.md +0 -319
- package/.opencode/oh-my-design/design-md/miro/README.md +0 -23
- package/.opencode/oh-my-design/design-md/miro/preview-dark.html +0 -174
- package/.opencode/oh-my-design/design-md/miro/preview.html +0 -173
- package/.opencode/oh-my-design/design-md/mistral.ai/.verification.md +0 -146
- package/.opencode/oh-my-design/design-md/mistral.ai/DESIGN.md +0 -390
- package/.opencode/oh-my-design/design-md/mistral.ai/README.md +0 -24
- package/.opencode/oh-my-design/design-md/mistral.ai/preview-dark.html +0 -806
- package/.opencode/oh-my-design/design-md/mistral.ai/preview.html +0 -805
- package/.opencode/oh-my-design/design-md/modusign/.verification.md +0 -58
- package/.opencode/oh-my-design/design-md/modusign/DESIGN.md +0 -524
- package/.opencode/oh-my-design/design-md/momoshop/.verification.md +0 -36
- package/.opencode/oh-my-design/design-md/momoshop/DESIGN.md +0 -322
- package/.opencode/oh-my-design/design-md/money-forward/DESIGN.md +0 -443
- package/.opencode/oh-my-design/design-md/mongodb/.verification.md +0 -145
- package/.opencode/oh-my-design/design-md/mongodb/DESIGN.md +0 -401
- package/.opencode/oh-my-design/design-md/mongodb/README.md +0 -23
- package/.opencode/oh-my-design/design-md/mongodb/preview-dark.html +0 -260
- package/.opencode/oh-my-design/design-md/mongodb/preview.html +0 -259
- package/.opencode/oh-my-design/design-md/muji/.verification.md +0 -20
- package/.opencode/oh-my-design/design-md/muji/DESIGN.md +0 -605
- package/.opencode/oh-my-design/design-md/musinsa/.verification.md +0 -59
- package/.opencode/oh-my-design/design-md/musinsa/DESIGN.md +0 -593
- package/.opencode/oh-my-design/design-md/mustit/.verification.md +0 -37
- package/.opencode/oh-my-design/design-md/mustit/DESIGN.md +0 -328
- package/.opencode/oh-my-design/design-md/myrealtrip/DESIGN.md +0 -494
- package/.opencode/oh-my-design/design-md/naver/.verification.md +0 -134
- package/.opencode/oh-my-design/design-md/naver/DESIGN.md +0 -582
- package/.opencode/oh-my-design/design-md/naverwebtoon/DESIGN.md +0 -477
- package/.opencode/oh-my-design/design-md/netflix/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/netflix/DESIGN.md +0 -572
- package/.opencode/oh-my-design/design-md/nexon/.verification.md +0 -27
- package/.opencode/oh-my-design/design-md/nexon/DESIGN.md +0 -389
- package/.opencode/oh-my-design/design-md/nhncloud/.verification.md +0 -23
- package/.opencode/oh-my-design/design-md/nhncloud/DESIGN.md +0 -207
- package/.opencode/oh-my-design/design-md/nike/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/nike/DESIGN.md +0 -588
- package/.opencode/oh-my-design/design-md/note/DESIGN.md +0 -346
- package/.opencode/oh-my-design/design-md/notion/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/notion/DESIGN.md +0 -557
- package/.opencode/oh-my-design/design-md/notion/README.md +0 -24
- package/.opencode/oh-my-design/design-md/notion/preview-dark.html +0 -372
- package/.opencode/oh-my-design/design-md/notion/preview.html +0 -364
- package/.opencode/oh-my-design/design-md/nvidia/.verification.md +0 -127
- package/.opencode/oh-my-design/design-md/nvidia/DESIGN.md +0 -550
- package/.opencode/oh-my-design/design-md/nvidia/README.md +0 -24
- package/.opencode/oh-my-design/design-md/nvidia/_research.md +0 -68
- package/.opencode/oh-my-design/design-md/nvidia/preview-dark.html +0 -374
- package/.opencode/oh-my-design/design-md/nvidia/preview.html +0 -366
- package/.opencode/oh-my-design/design-md/ohouse/.verification.md +0 -87
- package/.opencode/oh-my-design/design-md/ohouse/DESIGN.md +0 -635
- package/.opencode/oh-my-design/design-md/oliveyoung/DESIGN.md +0 -407
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/.live-inspect-proof.json +0 -158
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_best_capture.json +0 -644
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_detail_capture.json +0 -447
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_main.html +0 -419
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_main_capture.json +0 -1126
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/_search_capture.json +0 -912
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/fonts.json +0 -20
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/structure.json +0 -91
- package/.opencode/oh-my-design/design-md/oliveyoung/assets/_reference/tokens.json +0 -79
- package/.opencode/oh-my-design/design-md/ollama/.verification.md +0 -138
- package/.opencode/oh-my-design/design-md/ollama/DESIGN.md +0 -393
- package/.opencode/oh-my-design/design-md/ollama/README.md +0 -24
- package/.opencode/oh-my-design/design-md/ollama/preview-dark.html +0 -678
- package/.opencode/oh-my-design/design-md/ollama/preview.html +0 -678
- package/.opencode/oh-my-design/design-md/omnichat/.verification.md +0 -74
- package/.opencode/oh-my-design/design-md/omnichat/DESIGN.md +0 -499
- package/.opencode/oh-my-design/design-md/openai/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/openai/DESIGN.md +0 -641
- package/.opencode/oh-my-design/design-md/opencode.ai/.verification.md +0 -136
- package/.opencode/oh-my-design/design-md/opencode.ai/DESIGN.md +0 -425
- package/.opencode/oh-my-design/design-md/opencode.ai/README.md +0 -24
- package/.opencode/oh-my-design/design-md/opencode.ai/preview-dark.html +0 -366
- package/.opencode/oh-my-design/design-md/opencode.ai/preview.html +0 -357
- package/.opencode/oh-my-design/design-md/payco/.verification.md +0 -28
- package/.opencode/oh-my-design/design-md/payco/DESIGN.md +0 -267
- package/.opencode/oh-my-design/design-md/paypay/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/paypay/DESIGN.md +0 -656
- package/.opencode/oh-my-design/design-md/pchome/.verification.md +0 -38
- package/.opencode/oh-my-design/design-md/pchome/DESIGN.md +0 -439
- package/.opencode/oh-my-design/design-md/perplexity/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/perplexity/DESIGN.md +0 -546
- package/.opencode/oh-my-design/design-md/piccollage/.verification.md +0 -34
- package/.opencode/oh-my-design/design-md/piccollage/DESIGN.md +0 -320
- package/.opencode/oh-my-design/design-md/pinkoi/.verification.md +0 -147
- package/.opencode/oh-my-design/design-md/pinkoi/DESIGN.md +0 -639
- package/.opencode/oh-my-design/design-md/pinkoi/README.md +0 -12
- package/.opencode/oh-my-design/design-md/pinkoi/_research/browse-1440px.png +0 -0
- package/.opencode/oh-my-design/design-md/pinkoi/_research.md +0 -167
- package/.opencode/oh-my-design/design-md/pinterest/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/pinterest/DESIGN.md +0 -366
- package/.opencode/oh-my-design/design-md/pinterest/README.md +0 -23
- package/.opencode/oh-my-design/design-md/pinterest/preview-dark.html +0 -233
- package/.opencode/oh-my-design/design-md/pinterest/preview.html +0 -232
- package/.opencode/oh-my-design/design-md/pixiv/.verification.md +0 -20
- package/.opencode/oh-my-design/design-md/pixiv/DESIGN.md +0 -613
- package/.opencode/oh-my-design/design-md/pixnet/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/pixnet/DESIGN.md +0 -430
- package/.opencode/oh-my-design/design-md/posthog/.verification.md +0 -159
- package/.opencode/oh-my-design/design-md/posthog/DESIGN.md +0 -480
- package/.opencode/oh-my-design/design-md/posthog/README.md +0 -23
- package/.opencode/oh-my-design/design-md/posthog/preview-dark.html +0 -699
- package/.opencode/oh-my-design/design-md/posthog/preview.html +0 -749
- package/.opencode/oh-my-design/design-md/postype/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/postype/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/publy/DESIGN.md +0 -563
- package/.opencode/oh-my-design/design-md/qanda/.verification.md +0 -121
- package/.opencode/oh-my-design/design-md/qanda/DESIGN.md +0 -516
- package/.opencode/oh-my-design/design-md/ragic/.verification.md +0 -37
- package/.opencode/oh-my-design/design-md/ragic/DESIGN.md +0 -444
- package/.opencode/oh-my-design/design-md/rakuten/.verification.md +0 -60
- package/.opencode/oh-my-design/design-md/rakuten/DESIGN.md +0 -440
- package/.opencode/oh-my-design/design-md/ramp/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/ramp/DESIGN.md +0 -634
- package/.opencode/oh-my-design/design-md/rayark/.verification.md +0 -22
- package/.opencode/oh-my-design/design-md/rayark/DESIGN.md +0 -154
- package/.opencode/oh-my-design/design-md/raycast/.verification.md +0 -138
- package/.opencode/oh-my-design/design-md/raycast/DESIGN.md +0 -467
- package/.opencode/oh-my-design/design-md/raycast/README.md +0 -23
- package/.opencode/oh-my-design/design-md/raycast/preview-dark.html +0 -606
- package/.opencode/oh-my-design/design-md/raycast/preview.html +0 -688
- package/.opencode/oh-my-design/design-md/remember/.verification.md +0 -135
- package/.opencode/oh-my-design/design-md/remember/DESIGN.md +0 -504
- package/.opencode/oh-my-design/design-md/remember/_promo.json +0 -27
- package/.opencode/oh-my-design/design-md/remember/_research.md +0 -90
- package/.opencode/oh-my-design/design-md/renault/.verification.md +0 -139
- package/.opencode/oh-my-design/design-md/renault/DESIGN.md +0 -439
- package/.opencode/oh-my-design/design-md/renault/README.md +0 -23
- package/.opencode/oh-my-design/design-md/renault/preview-dark.html +0 -406
- package/.opencode/oh-my-design/design-md/renault/preview.html +0 -606
- package/.opencode/oh-my-design/design-md/replicate/.verification.md +0 -154
- package/.opencode/oh-my-design/design-md/replicate/DESIGN.md +0 -387
- package/.opencode/oh-my-design/design-md/replicate/README.md +0 -24
- package/.opencode/oh-my-design/design-md/replicate/preview-dark.html +0 -828
- package/.opencode/oh-my-design/design-md/replicate/preview.html +0 -831
- package/.opencode/oh-my-design/design-md/resend/.verification.md +0 -143
- package/.opencode/oh-my-design/design-md/resend/DESIGN.md +0 -440
- package/.opencode/oh-my-design/design-md/resend/README.md +0 -23
- package/.opencode/oh-my-design/design-md/resend/preview-dark.html +0 -355
- package/.opencode/oh-my-design/design-md/resend/preview.html +0 -354
- package/.opencode/oh-my-design/design-md/retool/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/retool/DESIGN.md +0 -645
- package/.opencode/oh-my-design/design-md/revolut/.verification.md +0 -140
- package/.opencode/oh-my-design/design-md/revolut/DESIGN.md +0 -319
- package/.opencode/oh-my-design/design-md/revolut/README.md +0 -23
- package/.opencode/oh-my-design/design-md/revolut/preview-dark.html +0 -234
- package/.opencode/oh-my-design/design-md/revolut/preview.html +0 -233
- package/.opencode/oh-my-design/design-md/richart/.verification.md +0 -41
- package/.opencode/oh-my-design/design-md/richart/DESIGN.md +0 -465
- package/.opencode/oh-my-design/design-md/ridi/.verification.md +0 -108
- package/.opencode/oh-my-design/design-md/ridi/DESIGN.md +0 -573
- package/.opencode/oh-my-design/design-md/riiid/.verification.md +0 -33
- package/.opencode/oh-my-design/design-md/riiid/DESIGN.md +0 -260
- package/.opencode/oh-my-design/design-md/ringle/.verification.md +0 -53
- package/.opencode/oh-my-design/design-md/ringle/DESIGN.md +0 -444
- package/.opencode/oh-my-design/design-md/robinhood/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/robinhood/DESIGN.md +0 -604
- package/.opencode/oh-my-design/design-md/runwayml/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/runwayml/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/runwayml/README.md +0 -24
- package/.opencode/oh-my-design/design-md/runwayml/preview-dark.html +0 -664
- package/.opencode/oh-my-design/design-md/runwayml/preview.html +0 -665
- package/.opencode/oh-my-design/design-md/salesforce/.verification.md +0 -66
- package/.opencode/oh-my-design/design-md/salesforce/DESIGN.md +0 -473
- package/.opencode/oh-my-design/design-md/sanity/.verification.md +0 -174
- package/.opencode/oh-my-design/design-md/sanity/DESIGN.md +0 -499
- package/.opencode/oh-my-design/design-md/sanity/README.md +0 -24
- package/.opencode/oh-my-design/design-md/sanity/preview-dark.html +0 -990
- package/.opencode/oh-my-design/design-md/sanity/preview.html +0 -1135
- package/.opencode/oh-my-design/design-md/sansan/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/sansan/DESIGN.md +0 -631
- package/.opencode/oh-my-design/design-md/sendbird/.verification.md +0 -67
- package/.opencode/oh-my-design/design-md/sendbird/DESIGN.md +0 -331
- package/.opencode/oh-my-design/design-md/sentry/.verification.md +0 -157
- package/.opencode/oh-my-design/design-md/sentry/DESIGN.md +0 -397
- package/.opencode/oh-my-design/design-md/sentry/README.md +0 -24
- package/.opencode/oh-my-design/design-md/sentry/preview-dark.html +0 -626
- package/.opencode/oh-my-design/design-md/sentry/preview.html +0 -951
- package/.opencode/oh-my-design/design-md/shinhancard/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/shinhancard/DESIGN.md +0 -421
- package/.opencode/oh-my-design/design-md/shopline/.verification.md +0 -34
- package/.opencode/oh-my-design/design-md/shopline/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/slack/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/slack/DESIGN.md +0 -635
- package/.opencode/oh-my-design/design-md/smarthr/DESIGN.md +0 -452
- package/.opencode/oh-my-design/design-md/smartnews/DESIGN.md +0 -360
- package/.opencode/oh-my-design/design-md/socar/DESIGN.md +0 -438
- package/.opencode/oh-my-design/design-md/socar/_promo.json +0 -28
- package/.opencode/oh-my-design/design-md/socar/_research.md +0 -55
- package/.opencode/oh-my-design/design-md/soomgo/.verification.md +0 -27
- package/.opencode/oh-my-design/design-md/soomgo/DESIGN.md +0 -326
- package/.opencode/oh-my-design/design-md/spacex/.verification.md +0 -132
- package/.opencode/oh-my-design/design-md/spacex/DESIGN.md +0 -415
- package/.opencode/oh-my-design/design-md/spacex/README.md +0 -23
- package/.opencode/oh-my-design/design-md/spacex/_research.md +0 -69
- package/.opencode/oh-my-design/design-md/spacex/preview-dark.html +0 -221
- package/.opencode/oh-my-design/design-md/spacex/preview.html +0 -220
- package/.opencode/oh-my-design/design-md/spoon/DESIGN.md +0 -492
- package/.opencode/oh-my-design/design-md/spotify/.verification.md +0 -128
- package/.opencode/oh-my-design/design-md/spotify/DESIGN.md +0 -489
- package/.opencode/oh-my-design/design-md/spotify/README.md +0 -23
- package/.opencode/oh-my-design/design-md/spotify/preview-dark.html +0 -231
- package/.opencode/oh-my-design/design-md/spotify/preview.html +0 -230
- package/.opencode/oh-my-design/design-md/starbucks/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/starbucks/DESIGN.md +0 -597
- package/.opencode/oh-my-design/design-md/stores/.verification.md +0 -61
- package/.opencode/oh-my-design/design-md/stores/DESIGN.md +0 -447
- package/.opencode/oh-my-design/design-md/stripe/.verification.md +0 -140
- package/.opencode/oh-my-design/design-md/stripe/DESIGN.md +0 -571
- package/.opencode/oh-my-design/design-md/stripe/README.md +0 -24
- package/.opencode/oh-my-design/design-md/stripe/preview-dark.html +0 -428
- package/.opencode/oh-my-design/design-md/stripe/preview.html +0 -419
- package/.opencode/oh-my-design/design-md/studio/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/studio/DESIGN.md +0 -602
- package/.opencode/oh-my-design/design-md/supabase/.verification.md +0 -145
- package/.opencode/oh-my-design/design-md/supabase/DESIGN.md +0 -389
- package/.opencode/oh-my-design/design-md/supabase/README.md +0 -24
- package/.opencode/oh-my-design/design-md/supabase/preview-dark.html +0 -977
- package/.opencode/oh-my-design/design-md/supabase/preview.html +0 -955
- package/.opencode/oh-my-design/design-md/superhuman/.verification.md +0 -184
- package/.opencode/oh-my-design/design-md/superhuman/DESIGN.md +0 -453
- package/.opencode/oh-my-design/design-md/superhuman/README.md +0 -23
- package/.opencode/oh-my-design/design-md/superhuman/preview-dark.html +0 -973
- package/.opencode/oh-my-design/design-md/superhuman/preview.html +0 -951
- package/.opencode/oh-my-design/design-md/surveycake/.verification.md +0 -31
- package/.opencode/oh-my-design/design-md/surveycake/DESIGN.md +0 -442
- package/.opencode/oh-my-design/design-md/tada/DESIGN.md +0 -579
- package/.opencode/oh-my-design/design-md/teamblind/.verification.md +0 -76
- package/.opencode/oh-my-design/design-md/teamblind/DESIGN.md +0 -497
- package/.opencode/oh-my-design/design-md/tesla/.verification.md +0 -149
- package/.opencode/oh-my-design/design-md/tesla/DESIGN.md +0 -501
- package/.opencode/oh-my-design/design-md/tesla/README.md +0 -23
- package/.opencode/oh-my-design/design-md/tesla/_research.md +0 -70
- package/.opencode/oh-my-design/design-md/tesla/preview-dark.html +0 -947
- package/.opencode/oh-my-design/design-md/tesla/preview.html +0 -925
- package/.opencode/oh-my-design/design-md/theverge/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/theverge/DESIGN.md +0 -500
- package/.opencode/oh-my-design/design-md/timee/.verification.md +0 -67
- package/.opencode/oh-my-design/design-md/timee/DESIGN.md +0 -444
- package/.opencode/oh-my-design/design-md/together.ai/.verification.md +0 -145
- package/.opencode/oh-my-design/design-md/together.ai/DESIGN.md +0 -389
- package/.opencode/oh-my-design/design-md/together.ai/README.md +0 -24
- package/.opencode/oh-my-design/design-md/together.ai/preview-dark.html +0 -892
- package/.opencode/oh-my-design/design-md/together.ai/preview.html +0 -897
- package/.opencode/oh-my-design/design-md/toss/.verification.md +0 -120
- package/.opencode/oh-my-design/design-md/toss/DESIGN.md +0 -698
- package/.opencode/oh-my-design/design-md/toss/README.md +0 -19
- package/.opencode/oh-my-design/design-md/toss-securities/DESIGN.md +0 -247
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-proof.json +0 -126
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-raw.json +0 -619
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/.live-inspect-stock.json +0 -525
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/fonts.json +0 -24
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/structure.json +0 -35
- package/.opencode/oh-my-design/design-md/toss-securities/assets/_reference/tokens.json +0 -87
- package/.opencode/oh-my-design/design-md/tossbank/DESIGN.md +0 -576
- package/.opencode/oh-my-design/design-md/trenbe/.verification.md +0 -32
- package/.opencode/oh-my-design/design-md/trenbe/DESIGN.md +0 -293
- package/.opencode/oh-my-design/design-md/triple/DESIGN.md +0 -481
- package/.opencode/oh-my-design/design-md/tumblbug/DESIGN.md +0 -578
- package/.opencode/oh-my-design/design-md/tving/DESIGN.md +0 -317
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/.live-inspect-proof.json +0 -131
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/LICENSE-NOTE.md +0 -37
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/attribution.md +0 -52
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/fonts.json +0 -31
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/screenshots/hero-desktop.png +0 -0
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/structure.json +0 -55
- package/.opencode/oh-my-design/design-md/tving/assets/_reference/tokens.json +0 -115
- package/.opencode/oh-my-design/design-md/uber/.verification.md +0 -128
- package/.opencode/oh-my-design/design-md/uber/DESIGN.md +0 -423
- package/.opencode/oh-my-design/design-md/uber/README.md +0 -24
- package/.opencode/oh-my-design/design-md/uber/preview-dark.html +0 -1120
- package/.opencode/oh-my-design/design-md/uber/preview.html +0 -1119
- package/.opencode/oh-my-design/design-md/ubie/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/ubie/DESIGN.md +0 -615
- package/.opencode/oh-my-design/design-md/uniqlo/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/uniqlo/DESIGN.md +0 -575
- package/.opencode/oh-my-design/design-md/upbit/DESIGN.md +0 -337
- package/.opencode/oh-my-design/design-md/upbit/_research.md +0 -83
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/.live-inspect-proof.json +0 -263
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/fonts.json +0 -18
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/raw-capture-exchange.json +0 -1901
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/raw-capture.json +0 -1121
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/structure.json +0 -52
- package/.opencode/oh-my-design/design-md/upbit/assets/_reference/tokens.json +0 -169
- package/.opencode/oh-my-design/design-md/upstage/DESIGN.md +0 -270
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/.live-inspect-proof.json +0 -157
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_brand-resource-center.json +0 -44
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_curated-samples.json +0 -310
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_raw-capture.json +0 -1560
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_root-vars.json +0 -76
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/_structure-raw.json +0 -298
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/fonts.json +0 -35
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/structure.json +0 -72
- package/.opencode/oh-my-design/design-md/upstage/assets/_reference/tokens.json +0 -183
- package/.opencode/oh-my-design/design-md/velog/.verification.md +0 -26
- package/.opencode/oh-my-design/design-md/velog/DESIGN.md +0 -196
- package/.opencode/oh-my-design/design-md/vercel/.verification.md +0 -134
- package/.opencode/oh-my-design/design-md/vercel/DESIGN.md +0 -523
- package/.opencode/oh-my-design/design-md/vercel/README.md +0 -24
- package/.opencode/oh-my-design/design-md/vercel/preview-dark.html +0 -368
- package/.opencode/oh-my-design/design-md/vercel/preview.html +0 -367
- package/.opencode/oh-my-design/design-md/voicetube/.verification.md +0 -34
- package/.opencode/oh-my-design/design-md/voicetube/DESIGN.md +0 -266
- package/.opencode/oh-my-design/design-md/voltagent/.verification.md +0 -159
- package/.opencode/oh-my-design/design-md/voltagent/DESIGN.md +0 -454
- package/.opencode/oh-my-design/design-md/voltagent/README.md +0 -24
- package/.opencode/oh-my-design/design-md/voltagent/preview-dark.html +0 -487
- package/.opencode/oh-my-design/design-md/voltagent/preview.html +0 -766
- package/.opencode/oh-my-design/design-md/wadiz/DESIGN.md +0 -415
- package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/.live-inspect-proof.json +0 -137
- package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/fonts.json +0 -17
- package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/structure.json +0 -35
- package/.opencode/oh-my-design/design-md/wadiz/assets/_reference/tokens.json +0 -80
- package/.opencode/oh-my-design/design-md/wanted/DESIGN.md +0 -575
- package/.opencode/oh-my-design/design-md/wanted/_promo.json +0 -31
- package/.opencode/oh-my-design/design-md/wanted/_research.md +0 -119
- package/.opencode/oh-my-design/design-md/wantedly/.verification.md +0 -53
- package/.opencode/oh-my-design/design-md/wantedly/DESIGN.md +0 -437
- package/.opencode/oh-my-design/design-md/warp/.verification.md +0 -156
- package/.opencode/oh-my-design/design-md/warp/DESIGN.md +0 -431
- package/.opencode/oh-my-design/design-md/warp/README.md +0 -23
- package/.opencode/oh-my-design/design-md/warp/preview-dark.html +0 -500
- package/.opencode/oh-my-design/design-md/warp/preview.html +0 -533
- package/.opencode/oh-my-design/design-md/watcha/DESIGN.md +0 -465
- package/.opencode/oh-my-design/design-md/wavve/DESIGN.md +0 -480
- package/.opencode/oh-my-design/design-md/wconcept/DESIGN.md +0 -556
- package/.opencode/oh-my-design/design-md/webflow/.verification.md +0 -151
- package/.opencode/oh-my-design/design-md/webflow/DESIGN.md +0 -330
- package/.opencode/oh-my-design/design-md/webflow/README.md +0 -23
- package/.opencode/oh-my-design/design-md/webflow/preview-dark.html +0 -147
- package/.opencode/oh-my-design/design-md/webflow/preview.html +0 -146
- package/.opencode/oh-my-design/design-md/wired/.verification.md +0 -21
- package/.opencode/oh-my-design/design-md/wired/DESIGN.md +0 -572
- package/.opencode/oh-my-design/design-md/wise/.verification.md +0 -141
- package/.opencode/oh-my-design/design-md/wise/DESIGN.md +0 -317
- package/.opencode/oh-my-design/design-md/wise/README.md +0 -23
- package/.opencode/oh-my-design/design-md/wise/preview-dark.html +0 -230
- package/.opencode/oh-my-design/design-md/wise/preview.html +0 -229
- package/.opencode/oh-my-design/design-md/x.ai/.verification.md +0 -140
- package/.opencode/oh-my-design/design-md/x.ai/DESIGN.md +0 -397
- package/.opencode/oh-my-design/design-md/x.ai/README.md +0 -24
- package/.opencode/oh-my-design/design-md/x.ai/preview-dark.html +0 -356
- package/.opencode/oh-my-design/design-md/x.ai/preview.html +0 -407
- package/.opencode/oh-my-design/design-md/xiaohongshu/DESIGN.md +0 -462
- package/.opencode/oh-my-design/design-md/yanolja/.verification.md +0 -83
- package/.opencode/oh-my-design/design-md/yanolja/DESIGN.md +0 -508
- package/.opencode/oh-my-design/design-md/yeogiotte/.verification.md +0 -210
- package/.opencode/oh-my-design/design-md/yeogiotte/DESIGN.md +0 -500
- package/.opencode/oh-my-design/design-md/yogiyo/DESIGN.md +0 -515
- package/.opencode/oh-my-design/design-md/yourator/.verification.md +0 -39
- package/.opencode/oh-my-design/design-md/yourator/DESIGN.md +0 -453
- package/.opencode/oh-my-design/design-md/zapier/.verification.md +0 -156
- package/.opencode/oh-my-design/design-md/zapier/DESIGN.md +0 -474
- package/.opencode/oh-my-design/design-md/zapier/README.md +0 -24
- package/.opencode/oh-my-design/design-md/zapier/preview-dark.html +0 -380
- package/.opencode/oh-my-design/design-md/zapier/preview.html +0 -372
- package/.opencode/oh-my-design/design-md/zigbang/DESIGN.md +0 -500
- package/.opencode/oh-my-design/design-md/zigbang/_promo.json +0 -16
- package/.opencode/oh-my-design/design-md/zigbang/_research.md +0 -101
- package/.opencode/oh-my-design/design-md/zigzag/DESIGN.md +0 -695
- package/.opencode/oh-my-design/design-md/zigzag/_promo.json +0 -23
- package/.opencode/oh-my-design/design-md/zigzag/_research.md +0 -64
- package/.opencode/oh-my-design/design-md/zozotown/.verification.md +0 -20
- package/.opencode/oh-my-design/design-md/zozotown/DESIGN.md +0 -578
- package/.opencode/oh-my-design/packages/mcp/dist/index.mjs +0 -21685
- package/.opencode/oh-my-design/packages/mcp/dist/index.mjs.map +0 -1
- package/.opencode/tools/extract-design-pattern.py +0 -182
- 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
|
|
600
|
-
"Radix), 'basecn' (akash3444/basecn, fork Base UI)
|
|
601
|
-
"primitivas animadas; para cada base se exponen sus 4 variantes JS-CSS/JS-TW/TS-CSS/TS-TW)
|
|
602
|
-
"
|
|
603
|
-
"
|
|
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).
|
|
762
|
-
"
|
|
763
|
-
"`name='
|
|
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 @
|
|
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
|
-
|
|
851
|
-
|
|
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
|
-
//
|
|
532
|
-
|
|
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
|
-
|
|
539
|
-
|
|
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.
|
|
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
|