从图片或文字描述 → AI 分析 → 结构化设计 → Minecraft .schem → 3D 预览 → 自动粘贴到 Paper + FAWE 服务器。
v2.0 — 前端推倒重来, monorepo + React 19 + react-three-fiber + 4 步 Wizard。
图片/文字 → [Layer 1: 分析] AnalysisReport
→ [Layer 2: 设计] BuildPlan DSL ← 核心 IR
→ [Layer 3: 施工] Schematic + 3D预览 + 材料统计
Mineflayer Bot → Paper Server (FAWE)
.
├── apps/
│ └── web/ React 19 + Vite + TS 前端 (取代旧 frontend_new/)
├── packages/
│ ├── shared-types/ OpenAPI → TS 类型 (pnpm gen:types 生成)
│ └── api-client/ TanStack Query hooks, 走 vite proxy
├── backend/ FastAPI 后端 (Python 3.13)
│ ├── app/
│ ├── scripts/export-openapi.py
│ └── openapi.json (生成, 入 .gitignore)
├── bot/ Mineflayer 桥 (占位, 待实现)
├── package.json workspace 根
├── pnpm-workspace.yaml
└── tsconfig.base.json
- Node.js ≥ 20
- pnpm ≥ 9 (
npm i -g pnpm) - Python 3.13
- 一个运行中的 Paper + FAWE Minecraft 服务器
- 一个 LLM API key (OpenRouter / Anthropic / DeepSeek) — 留空则用 mock 关键字服务
# JS 部分
pnpm install
# Python 部分
cd backend
pip install -r requirements.txt
cd ..# 后端 (放 backend/.env)
cp .env.example backend/.env
# 编辑 backend/.env, 设置 AI_API_KEY
# 前端 (放 apps/web/.env, 可选)
cp apps/web/.env.example apps/web/.envpnpm gen:types这会:
- 跑
backend/scripts/export-openapi.py导出backend/openapi.json - 跑
openapi-typescript生成packages/shared-types/src/api.d.ts
改后端 Pydantic 模型后, 重新跑这条命令。
开 3 个终端:
# Terminal 1: 后端
pnpm backend:dev
# 跑在 http://localhost:8000
# Terminal 2: 前端
pnpm dev
# 跑在 http://localhost:5173 (Vite proxy /api → :8000)
# Terminal 3: Mineflayer bot (待实现)
cd bot
# node index.js # 这条命令现在会失败, 见 bot/README打开 http://localhost:5173, 4 步流程:
- 上传 — 拖入图片 / 输入文字
- 确认 — AI 返回建筑概要, 调整比例
- 预览 — R3F 3D 视图, 切层, 看材料
- 粘贴 — 设坐标, 发送给 bot
pnpm dev # 启动前端
pnpm build # 构建所有 workspace
pnpm typecheck # TS 检查所有
pnpm gen:types # 重新生成 OpenAPI → TS 类型
pnpm backend:openapi # 只导 openapi.json
pnpm backend:dev # 只跑后端- 三层分离: 分析 ≠ 设计 ≠ 施工
- 类型驱动: OpenAPI 单一来源, 前后端类型强一致
- Wizard 状态机: 4 步清晰流程, URL 可直达
- 零调试残留: 没有 hardcode 的 "2开间" 按钮指向不存在的文件
- 组件拆分: 旧
Viewer3D.vue383 行 → 拆成BlockColors/BlockShapes/useVoxelBuckets/VoxelMesh/ViewerCanvas/LayerToggle/MaterialLegend
bot/index.js待实现 (Mineflayer 入口)- 后端
services/llm_service.py是旧实现, 已被ai_service.py替代, 待删除 - 后端 v1
/api/assembly仍存在以防回滚, 后续 v2 稳定后可删 - 大图上传 (base64) 体积优化: 可改 presigned URL
- i18n: UI 仍用中文, 未抽离
- 单元测试: 4 步跑通后再补
-
apps/web/vite.config.ts代理指向:8000(不是:8006) - 主页没有 "2开间/5开间" 调试按钮
- 没有任何
any类型 -
Viewer3D.vue等价物被拆到 ≥ 4 个文件 -
pnpm typecheck通过 - 改后端字段后
pnpm gen:types同步生效 - README 写明 4 步流程