github TypeScript re-analysis due

sevenyang129/flyu

github

非鱼是本地设计文件客户端。把 Sketch / Figma 设计稿导入进来,AI 就能直接看图、读结构、写代码——还能用大白话帮你改稿。一切都在本地,数据不上传。

maintainer
sevenyang129
license
MIT
first seen
2026-08-25
last seen
2026-08-25
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 29 tools
transport stdio · streamable-http · http counts 29 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • apply_operations
  • compare_render
  • compose_page
  • create_document
  • create_from_html
  • download_assets
  • export_fig
  • fork_document
  • get_code
  • get_component
  • get_component_tokens
  • get_design_tokens
  • get_html
  • get_node_dsl
  • get_page_outline
  • get_preview
  • get_styles
  • get_tokens
  • insert_html
  • list_files
  • list_pages
  • list_versions
  • map_components
  • restyle_colors
  • restyle_layout
  • restyle_text
  • rollback
  • search_nodes
  • set_token_override
code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 128

filesystem 37

  • fs (weak) sevenyang129-flyu-f01b0ba/scripts/inline-wasm.mjs :19 import { readFileSync, writeFileSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/scripts/visual-regression.ts :15 import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/scripts/visual-shot.cjs :15 require("fs").writeFileSync(outPng, img.toPNG());
  • fs sevenyang129-flyu-f01b0ba/src/main/bridge.ts :13 import { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/db/writers.ts :9 import { rmSync, unlinkSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/export/cut-cache.ts :11 import { mkdirSync, writeFileSync, readFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/export/scan-components.ts :8 import { readdirSync, readFileSync, statSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/import/persist-images.ts :9 import { mkdirSync, writeFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/import/sketch-import.ts :14 import { readFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/import/sketch-library.ts :5 import { readFileSync, readdirSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/index.ts :12 import { existsSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/ipc/files.ts :10 import { copyFile, mkdir, readFile, rm, stat } from "node:fs/promises";
  • fs sevenyang129-flyu-f01b0ba/src/main/ipc/mcp.ts :9 import { readFileSync, existsSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/mcp-token.ts :10 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/render/dispatch.ts :11 import { readFile } from "node:fs/promises";
  • fs sevenyang129-flyu-f01b0ba/src/main/render/fig-render-dispatch.ts :10 import { existsSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/render/local-fonts.ts :12 import { readFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/main/render/render-worker.ts :14 import { readFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/mcp/tools-assets.ts :12 import { mkdirSync, writeFileSync, copyFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/mcp/tools-code.ts :18 import { mkdirSync, writeFileSync, copyFileSync, readFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/mcp/tools-visual.ts :10 import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs sevenyang129-flyu-f01b0ba/src/shared/paths.ts :13 import { existsSync, mkdirSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/export/cut-cache.test.ts :7 import { readFileSync, mkdtempSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/export/scan-components.test.ts :4 import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/fixtures/vector-torture.ts :16 import { mkdtempSync, writeFileSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/create-from-html.test.ts :7 import { readFileSync, mkdtempSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/library-symbols.test.ts :4 import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/sketch-import.test.ts :7 import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/sketch-reimport.test.ts :9 import { mkdtempSync, writeFileSync, readFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/vector-torture.test.ts :8 import { rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/import/versions.test.ts :8 import { readFileSync, mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/main/folder-recursive-delete.test.ts :5 import { readFileSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/main/mcp-http.test.ts :6 import { mkdtempSync, rmSync, readFileSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/mcp/restyle.test.ts :9 import { readFileSync, mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/mcp/tools.contract.test.ts :7 import { readFileSync, writeFileSync, mkdtempSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/mcp/write-docs.test.ts :8 import { readFileSync, mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) sevenyang129-flyu-f01b0ba/tests/mcp/write-ops.test.ts :8 import { readFileSync, mkdtempSync, writeFileSync, rmSync } from "node:fs";

shell / exec 1

  • shell (weak) sevenyang129-flyu-f01b0ba/scripts/visual-regression.ts :13 import { execFileSync } from "node:child_process";

network 4

  • net sevenyang129-flyu-f01b0ba/src/main/bridge.ts :11 import { createServer, type Server } from "node:http";
  • net sevenyang129-flyu-f01b0ba/src/main/export/chromium-renderer.ts :91 return e.net.fetch(pathToFileURL(filePath).toString());
  • net sevenyang129-flyu-f01b0ba/src/shared/ipc-channels.ts :76 /** 触发图片 batch fetch(Main 内部自起后台队列,前端不主动调) */
  • net (weak) sevenyang129-flyu-f01b0ba/tests/main/mcp-http.test.ts :13 import type { Server } from "node:http";

database 18

  • db sevenyang129-flyu-f01b0ba/src/main/db/connection.ts :8 import Database from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/main/export/cut-cache.ts :12 import type { Database as DB } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/main/render/dispatch.ts :13 import type { Database as DB } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/main/render/fig-render-dispatch.ts :11 import type { Database as DB } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/main/tokens/design-tokens.ts :15 import type { Database as DB } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/mcp/server.ts :20 import type { Database as BSDatabase } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/mcp/tools-shared.ts :5 import type { Database as DB } from "better-sqlite3";
  • db sevenyang129-flyu-f01b0ba/src/mcp/tools.ts :19 import type { Database as DB } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/export/cut-cache.test.ts :11 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/import/create-from-html.test.ts :11 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/import/sketch-reimport.test.ts :14 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/import/versions.test.ts :13 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/main/folder-recursive-delete.test.ts :8 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/main/mcp-http.test.ts :15 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/mcp/restyle.test.ts :14 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/mcp/tools.contract.test.ts :11 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/mcp/write-docs.test.ts :13 import type { Database as BSDatabase } from "better-sqlite3";
  • db (weak) sevenyang129-flyu-f01b0ba/tests/mcp/write-ops.test.ts :13 import type { Database as BSDatabase } from "better-sqlite3";

tool registrations 29

  • download_assets sevenyang129-flyu-f01b0ba/src/mcp/tools-assets.ts :20
  • get_html sevenyang129-flyu-f01b0ba/src/mcp/tools-code.ts :34
  • get_code sevenyang129-flyu-f01b0ba/src/mcp/tools-code.ts :80
  • export_fig sevenyang129-flyu-f01b0ba/src/mcp/tools-code.ts :187
  • get_node_dsl sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :25
  • get_tokens sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :99
  • get_styles sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :118
  • get_design_tokens sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :147
  • set_token_override sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :184
  • get_component sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :228
  • get_component_tokens sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :281
  • map_components sevenyang129-flyu-f01b0ba/src/mcp/tools-data.ts :326
  • list_files sevenyang129-flyu-f01b0ba/src/mcp/tools-nav.ts :13
  • list_versions sevenyang129-flyu-f01b0ba/src/mcp/tools-nav.ts :41
  • list_pages sevenyang129-flyu-f01b0ba/src/mcp/tools-nav.ts :83
  • get_page_outline sevenyang129-flyu-f01b0ba/src/mcp/tools-nav.ts :101
  • search_nodes sevenyang129-flyu-f01b0ba/src/mcp/tools-nav.ts :151
  • restyle_colors sevenyang129-flyu-f01b0ba/src/mcp/tools-restyle.ts :21
  • restyle_text sevenyang129-flyu-f01b0ba/src/mcp/tools-restyle.ts :61
  • restyle_layout sevenyang129-flyu-f01b0ba/src/mcp/tools-restyle.ts :112
  • get_preview sevenyang129-flyu-f01b0ba/src/mcp/tools-visual.ts :19
  • compare_render sevenyang129-flyu-f01b0ba/src/mcp/tools-visual.ts :55
  • create_document sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :87
  • fork_document sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :105
  • compose_page sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :134
  • create_from_html sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :244
  • insert_html sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :304
  • apply_operations sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :363
  • rollback sevenyang129-flyu-f01b0ba/src/mcp/tools-write.ts :397

install hooks 1

  • postinstall sevenyang129-flyu-f01b0ba/package.json :24 electron-rebuild -f -w better-sqlite3

declared dependencies 40

  • @modelcontextprotocol/sdk@^1.29.0
  • @ant-design/icons@^6.3.2
  • @open-pencil/core@^0.13.2
  • better-sqlite3@^11.5.0
  • canvaskit-wasm@0.40.0
  • electron-log@^5.2.0
  • fflate@^0.8.3
  • svgpath@^2.6.0
  • zod@^4.4.3
  • zustand@^5.0.14
  • @electron/rebuild@^4.2.0
  • @types/better-sqlite3@^7.6.11
  • @types/node@^22.10.0
  • @types/pngjs@^6.0.5
  • @types/react@^18.3.12
  • @types/react-dom@^18.3.1
  • @vitejs/plugin-react@^4.3.4
  • antd@^5.22.0
  • electron@^33.2.0
  • electron-builder@^26.15.3
  • electron-vite@^2.3.0
  • esbuild@^0.28.1
  • eslint@^10.8.0
  • eslint-plugin-react-hooks@^7.1.1
  • pixelmatch@^7.2.0
  • pngjs@^7.0.0
  • react@^18.3.1
  • react-dom@^18.3.1
  • tsx@^4.23.1
  • typescript@^5.7.2
  • typescript-eslint@^8.66.0
  • vite@^5.4.11
  • wasm-bindgen@0.2
  • serde@1
  • serde-wasm-bindgen@0.6
  • serde_json@1
  • thiserror@1
  • console_error_panic_hook@0.1
  • flate2@1
  • ruzstd@0.7