Loading...
Loading...
Rút hệ thiết kế ĐANG CÓ của một dự án — từ code (token màu, thang kích thước, component) hoặc từ URL site đang chạy thành MỘT trang HTML tham chiếu kiểu Figma UI kit: foundations + component theo nhóm + màn mẫu mobile/desktop, đổi palette/sáng-tối/shape, copy token/HTML/hex. Giá trị lấy bằng cách CHẠY hàm token thật (hoặc đọc style thật bằng Playwright) chứ không gõ tay; có vòng KHÁM PHÁ tự đi theo link + bấm mở phần ẩn, bỏ trùng theo chữ ký, dừng khi bão hoà, và cổng PHỦ bắt mọi pattern tìm được phải có mặt trong kit (không dừng ở phần xương). Mẫu output chuẩn: references/ui-kit-reference.html. KHÁC hallmark (dựng/đổi thiết kế mới): skill này chỉ CHÉP LẠI hệ đang có, không sáng tác. Gọi khi user nói 'ui kit', 'figma ui kit bằng html', 'bóc design system ra', 'trang tham chiếu component', 'design token page', 'component gallery', 'style guide từ code', 'bóc trang này ra html kit', 'làm giàu kit', hoặc /ui-kit-from-code.
npx skill4agent add rheinmir/setup ui-kit-from-codehallmarkextract-siteweb-clonenguồn token (TS/CSS/Tailwind/Compose…) ──chạy thật──▶ JSON token ──▶ CSS vars --<ns>-<role> + --k
component trong code (kích thước, variant, tên kind) ──đọc──▶ class .<ns>-* chỉ dựa vào vars
URL gốc ──discover.mjs (link BFS · mở phần ẩn · chữ ký · bão hoà)──▶ inventory.json + crops ──▶ danh mục phải dựng
kit.html + inventory.json ──--coverage──▶ phủ 100% (data-sig / ui-kit-skip)
└──▶ ui-kit.html (7 phần bắt buộc) ──Playwright──▶ bằng chứng| Field | Required? | Ý nghĩa | |
|---|---|---|---|
| In | nguồn token | có | file/hàm sinh màu, chữ, shape, kích thước (vd |
| In | danh mục component | có | tên loại ( |
| In | nền tảng đích | có | mobile / desktop / cả hai, kèm kích thước khung thật |
| Out | | có | 1 file, mở bằng file:// được, có đủ 7 phần bên dưới |
| Out | báo cáo nguồn gốc | có | phần nào lấy từ code, phần nào vẽ theo spec |
| Out | bằng chứng Playwright | có | 0 lỗi JS, |
| Out | phiên bản trên kho kit | có (trừ | |
--<ns>-<role>--k:root.<ns>-*inventory.jsondata-sig="<sig>"<meta name="ui-kit-skip" content="<sig>:<lý do>;…">node references/discover.mjs --coverage inventory.json kit.htmlis-hoveris-focusis-activeis-on:hoverdata-sig-state="<sig>:<state>"ui-kit-skip"<sig>:<state>:lý do"outline:autoua: true--coveragediscover.mjs/robots.txtUser-agent: *--i-have-permissionsync-kit.pyvisibilityvNreferences/ui-kit-reference.html/playwright-verifyreferences/ui-kit-reference.html| # | Phần | Bắt buộc có | Trong file mẫu |
|---|---|---|---|
| 1 | Thanh điều khiển (sticky) | chọn palette (nếu app có nhiều) · sáng/tối · thang shape (nếu app có) · nút "Copy CSS token" cho khối | |
| 2 | Mục lục (sidebar, ẩn < 900px) | nhóm Nền tảng / Thành phần / Mẫu; tự tô mục đang xem (IntersectionObserver) | |
| 3 | Intro | eyebrow chỉ đường nguồn ( | |
| 4 | Nền tảng | (a) Màu: mọi vai trò, ô có chữ màu | |
| 5 | Thành phần | chia nhóm như app đang chia (vd Hành động · Điều hướng · Chứa nội dung · Nhập liệu · Phản hồi); mỗi thẻ | |
| 6 | Màn mẫu | ≥ 1 màn mobile và ≥ 1 màn desktop (khi app hỗ trợ) ở đúng kích thước khung của app, thu nhỏ bằng | |
| 7 | Script | bảng token nhúng dạng | |
prefers-reduced-motion:focus-visiblearia-labeloverflow-x:autofullPagediscover.mjs:hover*-hover.pngmouse.downmouse.up--hover-overlay--press-overlay--page-timeoutstoppedBy: page-budget--pages--includegetComputedStyle:root| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | judgment | codebase | tìm nguồn token, danh mục component + nhóm, kích thước khung mobile/desktop, tài liệu schema (nếu có) | danh sách neo | không có token → partial (xem Failure) |
| W01b | deterministic | URL gốc (app dev hoặc site) | vòng khám phá: | | |
| W01c | judgment | crops + ảnh trang | XEM mọi crop mới và ảnh toàn trang; gom pattern thành nhóm kit, ghi pattern bộ phân loại bỏ sót (vd tab hình thang, sơ đồ luồng) vào danh sách phải dựng | bảng pattern → nhóm → thẻ kit | — |
| W02 | deterministic | neo token | viết test/script tạm gọi hàm token thật, dump JSON (mọi palette × sáng/tối, size scale) → xoá file tạm | | chạy lỗi → parse tĩnh |
| W03 | effect | JSON | rút gọn thành | khối dữ liệu trong | — |
| W04 | judgment | component code | viết lại phần 4–5: mỗi component một class | phần 4–5 | thiếu số đo trong code → vẽ theo spec + khai (RULE-04) |
| W05 | judgment | quy tắc bố cục app | ghép phần 6: màn mobile + desktop từ class ở W04 | phần 6 | app 1 nền tảng → ghi lý do |
| W05b | deterministic | kit + inventory | | | THIẾU pattern → dựng thẻ; THIẾU |
| W06 | deterministic | file | Playwright: tải trang, đếm | ảnh + số liệu | lỗi → sửa, tối đa 3 vòng |
| W07 | judgment | ảnh | nhìn ảnh một lượt, sửa lỗi bố cục thấy được (chữ dồn dòng, mục lệch), chụp lại 1 lần | kit xong | — |
| W08 | judgment | kết quả | báo user: đường file, nội dung 7 phần, phần nào từ code / theo spec, bằng chứng W06, kết quả sync W09 | báo cáo | — |
| W09 | effect | kit đã PASS W05b + W06 | | | lỗi → "chưa sync, lý do" rc 0 (Failure) |
lib/zz-kit-dump.test.tswriteFileSync(<scratchpad>/tokens.json, …)npx vitest run lib/zz-kit-dump.test.tsrm/playwright-verifychromium.launch()goto(file://…/ui-kit.html)page.on("pageerror")screenshotclick('#mode button[data-v="dark"]')document.documentElement.scrollWidth - innerWidth| ID | Kind | Guard | Hành vi | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | conditional_required | token là CSS vars / Tailwind config / JSON (không phải hàm) | parse tĩnh thay cho chạy (W02) | — | W03 |
| B02 | conditional_required | app có tài liệu schema cho agent (vd | chip "tên trong code" ghi đúng tên field của schema, màn mẫu theo quy tắc trong tài liệu đó | không có → dùng tên component | W04 |
| B04 | conditional_required | nguồn là URL site đang chạy (không có code) | W02 thay bằng Playwright: đọc CSS vars ở | có code → skip | W03 |
| B05 | conditional_required | site cấm crawler (RULE-11) hoặc giao diện nằm sau đăng nhập | user tự lưu trang ("Webpage, Complete") vào một thư mục → | site cho phép crawl → W01b thường | W01c |
| B03 | user_optional | user muốn link chia sẻ ra ngoài kho kit private | đăng file lên Artifact/hosting user chọn; file vẫn giữ ở repo | mặc định: file local + kho kit private (W09) | W08 |
python3 -m pytest harness/tests/test_ui_kit_sync.pydata-sigui-kit-skippageerror = 0paletteOf()references/ui-kit-reference.html/learn/ai-for-homebuyers--pages 32 --saturate 4discover.mjsphủ 62/171 (36%)ui-kit-skipphủ 171/171 (100%)trạng thái 0/104175/175104/104discover.mjs.__fb-light-mode.__fb-dark-modescale(.98)--hover-overlay--press-overlay.module.css