## Project Background Github Repository: `graphif/project-graph` Project Graph 是一款桌面级节点图绘制工具,用于头脑风暴、知识图谱、项目规划等场景的可视化思考。 ## Tech-stack - React (TypeScript) + Tauri (Rust) - Vite + pnpm (monorepo) + Nx - Canvas 2D - shadcn/ui + Tailwind CSS + 自研子窗口系统 - Jotai Rust 主要负责本地文件等系统能力;绝大部分业务逻辑在前端。 ## Structure ### Application - 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` 及附近 ### `app/src/core`(核心业务) | 路径 | 职责 | | --------------------------------- | ------------------------------------------------------------------------------- | | `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` 等 — 设置、主题、菜单、教程等全局服务 ### Packages(`/packages`) 前端复用的开源/内部库,例如: - `@graphif/serializer` — 实例序列化 - `@graphif/shapes` — 可序列化图形 - `@graphif/data-structures` — 可序列化数据结构 - `extprg` / `extprg-types` / `create-extprg` — 扩展工具链与类型 ### Agent skills 具体工作流见 `.agents/skills/`: - `type-check` — TypeScript 类型检查(**改代码后用这个,不要 build**) - `create-keybind` — 新增/修改快捷键 - `create-setting-item` — 新增/修改设置项 - `shadcn` / `ui` — UI 组件 - `suggest-lucide-icons` — 图标建议 ## Locales (`app/src/locales`) | 文件 | 说明 | | ------------ | ------------------------------------------------------------------ | | `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`**。 ## Coding guidelines - 正确性与清晰度优先;性能除非明确要求,否则次之。 - 不要写组织性/总结性注释;仅在「为什么这样写」不直观时解释 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-item` skill。 ## Commands 包管理:`pnpm`。常用: - 开发:`pnpm dev` - Lint:`pnpm lint` / `pnpm lint:fix` - 测试:`pnpm test`(vitest) - 类型检查:**使用 `type-check` skill**(`pnpm --filter @graphif/project-graph type-check`) **禁止** Agent 运行 `build` / `build:ci` / `build:no-tauri` / `tauri build` 等构建命令。验证改动用 type-check(及必要的 lint/test),不要 build。 ## Agent constraints - **依赖 API / 用法**:禁止用 shell 在 `node_modules` 里搜索、翻源码或类型定义。需要了解第三方库时,读取该项目的官方文档(优先 `llms.txt`,例如 `https:///llms.txt`),或使用已有 skill;不要 `grep` / `find` / `cat` `node_modules/**`。 - **实现方式**:禁止用 `python`、`python3`、`node -e`、`node --eval`、内联 shell 脚本等做文本处理或批量改文件。应直接用读/写/编辑文件的工具(Read / Write / Edit 等)完成;需要多文件改动时逐个编辑,不要写临时脚本。 - **构建**:禁止 build(见上);验证用 type-check skill。 ## Commit Message 使用 [Conventional Commits](https://www.conventionalcommits.org/),例如:`feat: ...`、`fix: ...`、`refactor: ...`。