Instruction file imported from amunan/P01 (
.cursor/rules/tauri.mdc). Copyright stays with the author.
Tauri 规则
本文为旧选型的候选框架参考,当前 Demo 使用 Electron + TypeScript。仅在明确评估 / 增加 Tauri 宿主时应用;当前提交与信息权限仍遵循 core.mdc、inference.mdc 和现行规范。
架构分层
前端 (React/TS) ←→ Tauri IPC ←→ Rust Core Engine ←→ Inference Layer
UI 渲染 command/event 状态 + 逻辑 AI 推理
- 前端只做 UI 渲染和用户交互,不持有游戏状态
- 游戏状态、规则校验、Prompt 组装全部在 Rust 侧
- 推理层通过 trait 抽象,Rust Core 不直接依赖具体推理实现
Tauri Command 设计
- 每个 command 对应一个明确的游戏操作,命名用
snake_case动词开头 - 输入/输出用
serde可序列化的 struct,不用裸String/serde_json::Value - 错误统一返回
Result<T, CommandError>,CommandError带code+message - 耗时操作(推理、存档 IO)必须
async,不阻塞 UI
#[tauri::command]
async fn submit_player_action(
state: State<'_, GameState>,
action: PlayerAction,
) -> Result<TurnResponse, CommandError> { ... }
Tauri Event(流式输出)
- 原始模型 token 保留在任务进程;通过 Tauri event 推送任务进度与已提交正文,前端不得把未校验增量当作剧情
- Event 命名格式:
game:{event_name},如game:beat_stream、game:turn_complete - Event payload 必须是可序列化的 struct
资源管理
- Story Package 开发态为明文目录,发布态打包加密
- Prompt 模板由 Rust 侧加载组装,不暴露给前端
- 加密密钥不在前端代码中出现
窗口与进程
- 主窗口负责游戏 UI
- 长时间推理不阻塞 UI,通过 async command + event 实现非阻塞
