Imported from ximing/fabric-photo (
AGENTS.md). Install upstream withnpx skills add ximing/fabric-photo. Copyright stays with the author.
项目指令
1. 项目概览
- 仓库类型:pnpm workspace monorepo,纯前端图片编辑器,无后端依赖
- 三个 workspace 成员:
packages/core(@gmi/fp-core)— 编辑器内核:ProseMirror 式 state / step / transaction 架构,UI 无关packages/react(@gmi/fp-react)— Figma 式 React 组件包(顶栏/工具栏/选项条/画布/属性面板)demo(fabric-photo-demo,private)— Vite + React 演示站,GitHub Pages 部署源
2. 关键架构
- 不可变
Doc/EditorState是唯一事实源;一切修改都封装为Transaction(一组Step+ selection/mode/viewport 变更 + meta),经Editor.dispatch()落账 - dispatch 顺序固定:filterTransaction → apply → appendTransaction → 置 state → history 收账 → renderer 同步 → 事件 → 其余插件 onTransaction
History插件提供 undo/redo:step 反转(apply/invert 成对)+ before/after selection 快照;undo/redo 事务以addToHistory=false跳过收账- fabric 6 只是 state 的「渲染投影」:
FabricRenderer把 state 同步到画布;每种交互模式一个 controller,拖拽预览直改 fabric 对象、手势结束才提交 Step packages/react零编辑逻辑:组件是 state 的函数,经 hooks 订阅 core,所有操作走 core 的公开 API- core 支持无头模式(不传 container/renderer):state/step/transaction 全可用,单测即跑在此模式
3. 全局规则
- 包管理器统一使用 pnpm(
pnpm@10.33.0);Node 22(见.nvmrc) - 全部包 TypeScript strict;改动后必须通过
pnpm typecheck(即pnpm -r typecheck) - fabric 锁定 6.x,且只允许出现在
packages/core内部:core 的公开 API 与 react 包均不得暴露 fabric 类型 packages/react只允许 import@gmi/fp-core的公开 API(packages/core/src/index.ts导出面),不得触碰 core 内部路径- 测试用 vitest:core 为 node 环境(无头 Editor),react 为 jsdom +
@testing-library/react - 浏览器行为验证使用 kimi-webbridge(真实浏览器,非无头)
4. 开发入口
- 安装依赖:
pnpm install - 本地开发(demo,端口 9876):
pnpm dev - 构建全部包:
pnpm build - 构建 demo 站点(输出
dist-demo/):pnpm build:demo;本地预览:pnpm preview:demo - 测试:
pnpm test;类型检查:pnpm typecheck - core playground:
pnpm --filter @gmi/fp-core dev(端口 9877)
5. 局部规则导航
packages/core/AGENTS.md— 内核目录规则(Step/controller 约定、fabric 封装、无头模式)packages/react/AGENTS.md— React 包目录规则(零编辑逻辑、公开 API 边界、样式约定).Codex/rules/testing.md— 测试文件规则(编辑*.test.ts(x)时按需加载).Codex/rules/generated-dist.md— 构建产物规则(始终加载).catpaw/rules/— 以上规则的 CatPaw IDE 镜像,同名文件正文与.Codex体系保持一致scripts/ralph/— 自主编码 agent 工作流,自带 AGENTS.md,独立维护
6. 遗留
- 旧 fabric-photo(单包、fabric 1.7.3、「模块 + 命令」架构)已随 Phase 3 删除,历史见 git