Github Repository: graphif/project-graph
Project Graph 是一款桌面级节点图绘制工具,用于头脑风暴、知识图谱、项目规划等场景的可视化思考。
- React (TypeScript) + Tauri (Rust)
- Vite + pnpm (monorepo) + Nx
- Canvas 2D
- shadcn/ui + Tailwind CSS + 自研子窗口系统
- Jotai
Rust 主要负责本地文件等系统能力;绝大部分业务逻辑在前端。
- Frontend Vite project:
/app - Rust / Tauri:
/app/src-tauri - UI components:
/app/src/components - i18n locales:
/app/src/locales - React state (Jotai 等):
/app/src/state.tsx及附近
| 路径 | 职责 |
|---|---|
Project.tsx |
单个工程/项目实例的入口与生命周期 |
Tab*.ts(x) / TabWorkspace.tsx |
标签页与工作区 |
loadAllServices.tsx |
注册/加载全部服务 |
algorithm/ |
通用算法与几何工具 |
stage/ |
舞台:Camera、Canvas、舞台对象(stageObject)、舞台管理(stageManager) |
render/ |
渲染:canvas2d、svg、3d、domElement |
service/ |
业务服务(见下) |
extension/ |
扩展系统运行时与 API |
fileSystemProvider/ |
文件系统抽象(草稿/本地文件等) |
interfaces/ |
核心接口(如 Service) |
subWindowOpen*.ts |
子窗口打开方式 |
service/ 主要子目录:
controlService/— 输入控制、快捷键、框选、自动布局等dataFileService/— 工程文件读写dataGenerateService/— 数据生成dataManageService/— 内容搜索、复制、AI、节点工具等feedbackService/— 特效、音效、舞台样式、颜色Settings.tsx等 — 设置、主题、菜单、教程等全局服务
前端复用的开源/内部库,例如:
@graphif/serializer— 实例序列化@graphif/shapes— 可序列化图形@graphif/data-structures— 可序列化数据结构extprg/extprg-types/create-extprg— 扩展工具链与类型
具体工作流见 .agents/skills/:
type-check— TypeScript 类型检查(改代码后用这个,不要 build)create-keybind— 新增/修改快捷键create-setting-item— 新增/修改设置项shadcn/ui— UI 组件suggest-lucide-icons— 图标建议
| 文件 | 说明 |
|---|---|
en.yml |
英文(手写维护) |
zh_CN.yml |
简体中文(手写维护) |
zh_TW.yml |
普通繁体中文 — 由 zh_CN.yml 自动生成(OpenCC),不要手改 |
zh_TWC.yml |
接地气繁体中文 — 手写维护,不是自动生成 |
id.yml |
印尼语(手写维护) |
新增文案时:改 en.yml / zh_CN.yml(及需要时的 zh_TWC.yml、id.yml),不要编辑 zh_TW.yml。
- 正确性与清晰度优先;性能除非明确要求,否则次之。
- 不要写组织性/总结性注释;仅在「为什么这样写」不直观时解释 why。
- 优先在已有文件中实现功能;仅在新的逻辑组件时新建文件,避免拆成大量小文件。
- 目录内使用
something.tsx,不要用单独的index.tsx。 - 错误处理(前端):
- 不要静默吞掉错误:禁止
catch {}或仅console.error后忽略 - 能不 catch 就不 catch,让调用方处理
- 需要忽略时用对话框提示用户(用户看不到控制台)
- 错误应向上传到 DOM(如
window),由ErrorHandler展示友好对话框 - 反例:
try { something() } catch (e) { console.error(e) }→ 直接something()
- 不要静默吞掉错误:禁止
- 错误处理(Rust / Tauri 命令):命令在运行中不能让进程因未捕获错误闪退,须在函数内妥善处理错误并返回给前端。
- UI:优先复用 shadcn 与
.agents/skills/ui中的约定(Dialog、toast等)。 - 快捷键 / 设置:分别遵循
create-keybind、create-setting-itemskill。
包管理:pnpm。常用:
- 开发:
pnpm dev - Lint:
pnpm lint/pnpm lint:fix - 测试:
pnpm test(vitest) - 类型检查:使用
type-checkskill(pnpm --filter @graphif/project-graph type-check)
禁止 Agent 运行 build / build:ci / build:no-tauri / tauri build 等构建命令。验证改动用 type-check(及必要的 lint/test),不要 build。
- 依赖 API / 用法:禁止用 shell 在
node_modules里搜索、翻源码或类型定义。需要了解第三方库时,读取该项目的官方文档(优先llms.txt,例如https://<pkg-docs>/llms.txt),或使用已有 skill;不要grep/find/catnode_modules/**。 - 实现方式:禁止用
python、python3、node -e、node --eval、内联 shell 脚本等做文本处理或批量改文件。应直接用读/写/编辑文件的工具(Read / Write / Edit 等)完成;需要多文件改动时逐个编辑,不要写临时脚本。 - 构建:禁止 build(见上);验证用 type-check skill。
使用 Conventional Commits,例如:feat: ...、fix: ...、refactor: ...。