Skip to main content
Glama
sevenyang129

flyu-design

by sevenyang129

flyu

Локальный клиент для дизайн-файлов: парсит файлы Sketch / Figma в единый DSL v3 и через встроенный MCP (HTTP, запускается вместе с приложением) открывает доступ к ним для Cursor / Claude, чтобы ИИ мог напрямую смотреть макеты, писать код, править макеты и экспортировать вырезанные ассеты.

Демо

https://github.com/user-attachments/assets/51cc93c6-8413-4c3b-8bfd-7fd135e26a3c

Лицензия: MIT. Сторонние уведомления — в NOTICE.md. Раскрытие уязвимостей — в SECURITY.md. Участие в разработке — в CONTRIBUTING.md.

Форматы файлов и товарные знаки Sketch / Figma принадлежат их правообладателям. Этот проект парсит импортированные вами файлы .sketch / .fig на вашей локальной машине, не включает лицензий от вендоров и не заявляет о связи с Figma, Inc. или Sketch B.V. Соблюдайте их условия обслуживания и импортируйте только те дизайн-файлы, которые вы вправе использовать. Реализация декодирования .fig — в crates/fig-kiwi-rs.

Документация для пользователей — в docs/user-guide.md (установка / функции / формулировки / устранение неполадок); детали инструментов MCP — в docs/write-tools-guide.md.

Related MCP server: ai-ready-ds-auditor

Разработка

pnpm install        # 安装依赖(postinstall 会把 better-sqlite3 编到 Electron ABI)
pnpm dev            # 启动 Electron + HMR
pnpm typecheck      # 类型检查(main + renderer + mcp + tests)
pnpm lint           # ESLint
pnpm test           # 单元 + 契约测试(tsx --test)
pnpm test:visual    # 渲染像素回归(改 import/render 后必跑)
pnpm build          # 构建到 out/(含 main/preload/renderer/mcp)
pnpm dist           # 打本机未签名 mac 双架构(arm64 + x64).dmg → release/

Сборка пакета (локально на macOS, без подписи)

pnpm dist           # build + electron-builder → release/flyu-*-mac-arm64.dmg + flyu-*-mac-x64.dmg
pnpm dist:dir       # 只打 arm64 .app 到 release/mac-arm64/(便于调试)

Две архитектуры: electron-builder собирает пакеты отдельно для каждой целевой архитектуры; better-sqlite3 перекомпилируется для каждой архитектуры отдельно (кросс-сборка x64 на хосте arm64 проверена и работает).

Результат — неподписанный пакет (identity: null), после установки приложение называется «非鱼». Если Gatekeeper блокирует локальный запуск: правый клик → «Открыть». Не запускайте одновременно с работающим pnpm dev (из-за блокировки одиночного экземпляра второй процесс сразу завершится).

MCP Server

Два способа подключения, один и тот же набор tools/prompts (29 Tool + 4 Prompt):

  • HTTP (рекомендуется): встроенный Streamable HTTP в клиенте, запускается вместе с приложением. Настройки → Конфигурация использования MCP → Копировать (URL + Bearer token). Порт по умолчанию 32677 и сохраняется постоянно; только если занят — сдвигается дальше; token хранится в userData/mcp-token (0600), можно перегенерировать.

  • stdio (запасной вариант, нужен локальный Node): node out/mcp/server.js. Требуется, чтобы БД уже существовала (клиент должен был запуститься хотя бы один раз).

Сборка stdio-входа

pnpm mcp:build      # esbuild 打包到 out/mcp/server.js
pnpm mcp:dev        # tsx 直跑(调试用)

Проверка (ручной тест JSON-RPC)

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | pnpm mcp:dev

Должен вернуться serverInfo: { name: "flyu-design", version: "1.0.0" }.

Ловушки локальной разработки на macOS (двойной ABI + подпись кода)

  1. Переключение ABI: better-sqlite3 в один момент времени может быть скомпилирован только под одну среду выполнения.

    • Для Electron: pnpm rebuild (через electron-rebuild)

    • Для прямого запуска Node (отладка MCP / тесты tsx): cd node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3 && ./node_modules/.bin/prebuild-install -r node

    • Симптом: при запуске под не ту среду появляется ошибка вида NODE_MODULE_VERSION 130 vs 127.

  2. Подпись кода: prebuilt-файл .node, скачанный из npm, на macOS 26+ убивается AMFI с ошибкой Invalid Page (SIGKILL, exit 137, stderr пуст). Исправление:

    codesign --remove-signature node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3/build/Release/better_sqlite3.node
    codesign --force --sign -       node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3/build/Release/better_sqlite3.node

    После каждого prebuild-install нужно повторять заново. При последующей сборке пакета это автоматизируется хуком afterSign в electron-builder.

Структура каталогов

src/
├── main/           Electron 主进程(DB / IPC / 渲染 / 导入导出)
│   ├── import/     双通道导入:sketch-*(.sketch)/ fig-*(.fig 本地,@open-pencil/core)
│   │               + html-to-dsl(HTML 生成)、collect-tokens(共享令牌统计)
│   ├── render/     渲染调度(fig 走 Skia 直渲;sketch 走 DSL→HTML→Chromium)
│   ├── export/     dsl-to-jsx / dsl-to-fig / vector-to-svg / code-snippets / cut-cache
│   ├── tokens/     设计令牌(L1 命名令牌 / L3 组件令牌 / tokenize)
│   ├── db/         SQLite(writers / write-ops / write-docs / restyle / migrations)
│   └── ipc/        渲染进程桥(files / folders / explorer / mcp-config / library)
├── preload/        contextBridge 桥
├── renderer/       React + AntD UI
├── mcp/            MCP Server:server.ts(stdio)+ tools.ts(聚合器)+ tools-*.ts(8 个域模块)
├── shared/         三端共享(DSL v3 类型 / IPC 通道 / 错误码 / 路径)
└── native/         fig-kiwi WASM(由 crates/ 编译)

crates/             Rust 原生(.fig Kiwi 解码)
resources/          打包图标 icon.png / icon.icns
docs/               用户教程 / 写能力设计与工具文档
scripts/            正式脚本(icons / wasm / 视觉回归)
tests/              单元与契约测试

Локальные данные времени выполнения — в пользовательском каталоге (~/Library/Application Support/flyu) и в опциональном .tokensave/ (в gitignore), артефакты сборки — в out/.

Текущее состояние

  • Импорт по двум каналам: локально .sketch / .fig (@open-pencil/core)

  • Единый DSL v3 + хранение в SQLite + группы версий

  • Рендеринг: fig — прямая отрисовка Skia; sketch/ai DSL→HTML→Chromium; degraded — явное сообщение

  • MCP 29 Tool + 4 Prompt (навигация/данные/визуал/код/вырезка ассетов/операции записи/семантические правки)

  • Возможности записи: транзакционные apply_operations / restyle_*(dryRun)/ create_from_html / fork_document / rollback

  • Экспорт: get_html (самодостаточный одиночный файл)/ get_code (JSX+Tailwind, vw/rem/tokenize)/ export_fig (неофициальная совместимость с .fig)/ download_assets (SVG/PNG/оригиналы)

  • Дизайн-токены: именованные токены L1 (fig variables/sketch styles, экспорт css/dtcg) + ревизия покрытия компонентных токенов L3

  • Установочные пакеты для Windows / Linux (конфигурация есть, релиз не выпущен)

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Bidirectional MCP bridge enabling AI assistants to draw UI on Figma canvas and read designs back as structured data or code tokens via localhost, requiring Figma Desktop.
    5
    981 npm
    264
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI IDEs to query Figma design tokens, component specs, and audit issues via MCP tools, without cloud subscriptions.
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    A local MCP server that lets AI assistants inspect, create, and update designs in Figma Desktop through a development plugin, requiring no Figma Personal Access Token or cloud services.
    12
    16 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP-compatible AI clients to read and modify the user's currently open Figma file by executing JavaScript in Figma's sandbox, all through a local bridge with status monitoring, node jumping, and automatic rollback on errors.
    1
    MIT