LabWired
Design circuits, run firmware, compare variants, and inspect the result in Playground. Open source. MCP for Claude or Codex. Free to try.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Keeps Figma, code, Storybook and docs in sync for a design system, and only asks a person when it should.
Live demo: https://seamline-five.vercel.app
Seamline certifies a design system across its four sources, lets NVIDIA Nemotron models on Nebius Token Factory repair the drift they are sure about, sends everything else to the design-system lead, and opens a real GitHub pull request whose ds-sync check stays red until those decisions are made.
It runs on GitHub's real Primer system: @primer/primitives, @primer/react, the Primer Web Figma file and Primer's Storybook stories.
Formerly DS Lab. The repo, the CLI (
ds-lab) and theds-synccheck keep their names.
Run of 2026-10-29 13:14 UTC · PR #19
Design systems drift in five ways, whatever the component: one side changes a value, a token is renamed, someone ships a hotfix, a new option appears on one side, or both sides change the same thing. Today's sync tools pick a winner ("Figma first" or "code first") and silently overwrite the other side's work. Seamline treats each kind of change differently.
| Kind of change | Who handles it | What happens |
|---|---|---|
| One side changes a value | Nemotron Ultra reads the commit and ticket | Applied if ≥ 85% sure, otherwise asks |
| A token is renamed | Nemotron Nano pairs old and new names | Applied or confirmed by a person |
| An urgent hotfix | Nemotron Ultra + the WCAG contrast check | Applied to the other side |
| A new option on one side | Nemotron Super researches it with Tavily | Proposed, never created alone |
| Both sides change the same thing | The lead | Always a person's call |
Guardrails: auto-apply only at ≥ 85% confidence, every change is logged and can be undone, three rejections of one kind pause auto-apply for it, and ds-sync re-certifies every PR.
src/demo/repair.ts): certify → repair → escalate, with an undo journal and a trust ledger.src/certify-primer.ts): shared tokens, links kept since last certification, Button properties by value, options in docs/code/Figma/Storybook, docs in Figma, WCAG AA text contrast.src/certify-catalog.ts, src/triage-catalog.ts): options, tokens and status checked across docs, code and the real Figma file; Nemotron Ultra suggests one fix per drifting component.src/review-screens.ts): Nemotron Super reads each screen three times (labels, icons, variants, row text) and proposes issues; Nemotron Ultra confirms or rejects each one. Only issues proposed in most reads and confirmed by Ultra are reported.src/certify-screens.ts): five GitHub screens (pull requests, PR, merge box, settings, danger zone) built from Primer Web instances in the Figma file. Seamline counts where each component is used and finds what breaks there: detached instances, colours set by hand, options code doesn't ship, text below AA contrast, tokens code doesn't have, components resized by hand.ds-lab pr, .github/workflows/ds-sync.yml): pushes the agent's workspace, opens the PR, and the check fails until the lead answers.lab/run_sandboxes.py): the same five changes synced four ways, each strategy in its own Token Factory Sandbox forked from one checkpoint.console/): one HTML page for the lead (Overview, Activity, Decisions, Report, Sources, How it works), role views for designers and engineers.server/server.mjs, Dockerfile): serves the console (ready for Nebius Serverless Endpoints) and turns "Send answers" into a real GitHub Actions run.src/llm/nebius.ts).nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B, thinking off): fast, frequent rename pairing.nvidia/Nemotron-3-Ultra-550b-a55b): judges which side is right from commits and tickets; summarises conflicts without picking a side; triages drift in the other 73 components.nvidia/nemotron-3-super-120b-a12b): reads Tavily research on other design systems and WCAG, writes the proposal for new options..github/workflows/deploy-nebius.yml deploys the console and the "Send answers" endpoint once a Nebius AI Cloud project exists. The hackathon credits cover Token Factory only, so the public demo runs on Vercel (same server image).Requirements: Node 22, gh (GitHub CLI) for pull requests, Python 3.11 + contree-sdk only for the sandbox benchmark.
npm install
cp .env.example .env # NEBIUS_API_KEY, TAVILY_API_KEY (and FIGMA_FILE_URL for links)
bash fixtures/get-primer.sh # downloads @primer/primitives and @primer/react
npx tsx src/cli.ts certify-primer # certify Primer Web (Button): 1,520+ checks
npx tsx src/console/export.ts # break → agent repair with Nemotron → console/data.json
npx tsx src/certify-catalog.ts # check all 74 components
npx tsx src/triage-catalog.ts # Nemotron Ultra suggestions for the ones that drift
node console/build.mjs # → console/index.html (open it in a browser)
npx tsx src/cli.ts pr --open # push the agent's workspace and open the ds-sync PR
npx tsx src/cli.ts pr --decide button-invisible-fg-color-rest=code --approve all # answer, CI goes green
node server/server.mjs # console + /api/decide on :8000
npx esbuild src/lab/component-lab.ts --bundle --platform=node --format=esm --outfile=out/sandbox/lab.mjs
python lab/run_sandboxes.py # the benchmark on Token Factory Sandboxes
npm test
agent-run.yml runs the whole agent every morning and opens the PR. Add repo secrets NEBIUS_API_KEY and TAVILY_API_KEY.apply-decisions.yml applies the lead's answers to the open PR. The console's "Send answers" triggers it through the server.deploy-nebius.yml builds the image (GHCR) and creates the Nebius Serverless endpoint. Add secrets NEBIUS_SA_ID, NEBIUS_SA_PUBLIC_KEY_ID, NEBIUS_SA_PRIVATE_KEY, NEBIUS_PROJECT_ID, optional GH_DISPATCH_TOKEN (fine-grained, Actions: write), and variables NEBIUS_PLATFORM, NEBIUS_PRESET (a CPU platform and preset from your project).NODE_USE_ENV_PROXY=1 npx tsx scripts/eval/side-bias.ts asks Nemotron Ultra the same Figma-vs-code conflict 5 times, then 5 more with the sides swapped, then 5 with no argument on either side. Result (29 Oct): it picked neither side in all 15, so it doesn't tilt towards designers or engineers, but its stored lean ("Figma", from one earlier run) isn't stable. The console now shows that lean as a hint with this result next to it, never pre-selected. Results: console/side-bias.json.
An override ("Override with a reason") lets the whole ds-sync check pass for 7 days, not just the overridden value.
Model confidence is the model's own estimate, not calibrated.
Deepest checks are on Button. It gets about 1,560 checks (1,564 in the 29 Oct run) (properties by value, Storybook stories, WCAG contrast). The other 73 components get lighter checks: options, tokens, colour tokens vs Figma, status. 31 of 74 have no Figma set, so they're checked against docs and code only: 17 have nothing to draw (utilities, layout, wrappers), 5 are deprecated, 2 exist in Figma under other names (Skeleton is split into SkeletonAvatar and SkeletonText; ConfirmationDialog is built on Dialog) and 7 are a real gap that the console lists under Decisions → Missing, where each one becomes a GitHub issue for a designer.
Storybook: Button gets the deep story checks; for the other components Seamline reads Primer's own stories (same version, 71 components have them) and checks that every non-default option in the docs appears in a story. It doesn't render the stories.
Nano is for mechanical work only. In triage tests it invented a commit, so judgment always goes to Ultra, and anything below 85% confidence goes to a person.
Figma is read, not written. The agent writes its fixes to the repo and the PR; applying them back into the Figma file is still manual.
Nebius Serverless is ready, not live. The workflow and image exist, but our credits cover Token Factory only, so the demo runs on Vercel with the same server.
Screens are read from an export. The screen inventory is exported from Figma with the plugin API and checked in the repo; there's no live Figma connection in CI. Contrast is checked in all 9 Primer colour modes. Meaning (labels, icons, variants) is proposed by Nemotron Super and confirmed by Nemotron Ultra; it was stable across two runs on our 3 planted meaning breaks, which is a small set. The test screens use Inter for edited labels because the plugin sandbox can't load SF Pro.
One design system. Everything is tuned on Primer; another system needs its own source adapters.
Accessibility: the agent blocks any fix that breaks WCAG AA text contrast, and the console's own text tokens meet AA in light and dark. It hasn't had a full screen-reader audit.
We planted breaks in the GitHub screens on purpose (fixtures/primer-web-notes/screens-planted.json) and ran the checks against them (test/screens.test.ts).
| Round | Planted | Found | What changed |
|---|---|---|---|
| 1 | 5 obvious breaks (detached Button, hand-set StateLabel colour, InlineMessage option code lacks, low-contrast text, token code lacks) | 5 of 5 | — |
| 2 | +2 subtle ones: a heading set to the exact hex of fgColor/default but unbound, and a Button squeezed to 24px instead of size=small | 5 of 7 | Missed both: the colour looked right and no rule compared sizes |
| 3 | same 7 | 7 of 7 | New rules: unbound text colour (and which token has that value), instance height vs its size option |
| 4 | +4 harder ones: a comment box set to white by hand (fine in light, white on white in dark), 13px padding, an instance whose main component was deleted, a deprecated Pagehead | 7 of 11 | Light mode only, no spacing rule, no idea what "deprecated" or "deleted" looks like |
| 5 | same 11 | 11 of 11 | Contrast in dark mode too (resolving Primer's mode variables), spacing vs Primer's scale, components missing from the library, deprecated status from the docs |
| 6 | +2 that need meaning, not rules: the Delete button shows the "opens elsewhere" icon, and the Archive row's danger button says "Save changes" | 11 of 13 | No rule can know what a label or icon means |
| 7 | same 13, Nemotron Super reading each screen (no thinking) | 12 of 13 | Caught the icon, missed the label |
| 8 | same 13, Super with thinking on | 13 of 13, but 3 false alarms in one read, 1 miss in another | The model doesn't answer the same way twice |
| 9 | same 13, Super with thinking, 3 reads per screen, keep what most reads agree on; contrast in all 9 Primer colour modes | 13 of 13, no false alarms | Majority vote; the dropped one-off flags are kept in console/screens-review.json |
Blind test (fixtures/primer-web-notes/screens-blind.json). After round 9 we froze the rules and the prompt and built a new screen, "New issue", with 6 new breaks (a Label border set by hand, a 2.85:1 caption, a primary button that says "Cancel", a 10px gap, a detached Label, a form background set by hand that only breaks in dark mode) and 6 decoys that look suspicious but are correct (an invisible small Button at its real 28px, a success InlineMessage, an attention Label...).
Fixing the meaning review (round 10). Three changes: temperature 0 so reads repeat; each element now gets the text of its own row and its sibling components instead of the whole screen (the Archive button used to see every row of the Danger zone); and a second model checks each candidate: Nemotron Super proposes, Nemotron Ultra confirms or rejects, and an issue is reported only if Super proposed it in most of 3 reads and Ultra confirms it.
It also found problems we didn't plant:
variant=pull request and size=normal exist in Figma but not in docs; SegmentedControl's size=medium is missing in code.fgColor/accent and fgColor/link on bgColor/default are 4.33:1 and fgColor/danger is 4.02:1, just under AA.The whole loop on the real repo, no hand edits in between: agent run → pull request → ds-sync red → the lead's answers → ds-sync green.
| Time (UTC) | What happened | Proof |
|---|---|---|
| 20:16 | agent-run started by hand (same job as the daily one): certify, Nemotron repairs, open the PR | run |
| 20:19 | PR #15 opened by the agent with 2 items waiting on a person | PR #15 |
| 20:19 | ds-sync fails, as it should while decisions are open | run |
| 20:20 | apply-decisions with the lead's answers (invisible button text: keep code; approve the rest), the same call "Send answers" makes | run |
| 20:20 | Commit "apply the design system lead's decisions" lands on the PR; ds-sync passes | run |
Recorded run (29 Oct, 08:26 UTC, PR #16). Same loop, recorded in the browser, this time answering in the live demo: "Keep code" on the conflict, "Create it" on the new option, then Send answers to the PR on seamline-five.vercel.app, which called the Vercel endpoint and started apply-decisions. The PR's commits show the agent's commit at ✗ 2/3 checks and the "apply the design system lead's decisions" commit at ✓ 3/3, with no manual step on GitHub. PR #16
What the test found. The first try (PR #14) showed that since the agent started opening PRs on its own, GitHub had been holding every ds-sync run on them as "action required" (runs opened by GITHUB_TOKEN need approval), so the check never actually ran on PRs #4–#13. Fixed: after opening the PR or applying answers, the workflow approves the held run and starts ds-sync on the branch itself. PR #15 above ran with the fix and needed no manual step.
src/mutation-screens.ts)Planted breaks are few and we chose them. So the rules are also tested with random ones: the script takes the real inventory of the six GitHub screens, applies one random break to a fresh copy (a text colour unbound, a colour set by hand on a component, text made too light, an off-scale gap, a component resized, detached, swapped for a deprecated one or for one that isn't in the library, a token code doesn't ship), re-runs the checks and asks two questions: did a finding of the right kind appear on the node we broke, and did anything appear anywhere else?
npm test runs a small version (seed 11, 6 per kind) on every push.
The project started on 6 October 2026, inside the submission period. Everything here was built for this hackathon: the drift engine, the agent and its guardrails, the Primer certification, the sandbox benchmark, the PR and CI flow, the console, the 74-component check and the Nebius deployment.
MIT, see LICENSE.