4157f8790d021fd585038107a1895b89fdd4492d
听娜娜讲故事
nana-story 是一个本地优先、纯 BYOK 的 AI 对话游戏。V1 聚焦一段可回溯、可分支、状态可重放的单角色纵切。
当前阶段
M0 契约基线已建立;M1 状态、投影与持久化主链已经接通,M2 正在进入真实模型循环。
目前包括:
- Tauri 2 + Vue 3 + TypeScript 工程;
- Rust workspace 与模块所有权边界;
- Rust 领域类型作为契约唯一事实来源;
- 生成的 JSON Schema 与 TypeScript DTO;
- canonical
PlayerViewfixture; - 最小娜娜内容包;
- 原子化状态 reducer,覆盖关系、许诺、知识、持有物、时钟与判定;
- 保持同一语义的内存与 SQLite StoryStore,支持事务追加、恢复和回溯分叉;
- 写入与恢复时的状态哈希校验;
RuntimeState → PlayerView脱敏投影与隐藏信息 canary 测试;TurnPlan → reducer → SQLite → PlayerView单轮提交链;- Turn 请求/结果校验、Fake Provider 与确定性世界书触发;
- 可交互的主演出屏、持有物/线索/许诺、关系与回溯面板。
浏览器模式继续使用确定性的本地 Turn adapter,方便无桌面壳开发;Tauri
模式已经通过 submit_turn 使用 SQLite 自动保存和恢复。当前桌面端 provider
仍是确定性的娜娜纵切实现,真实 LAPP 上下文编译、工具循环和动态演出快照仍在
后续 M2 中。
当前 Work 环境缺少 Rust 工具链,因此 Rust/Tauri 源码和测试尚未实际编译;
合并门必须在 Rust 1.96 环境补跑 pnpm verify:rust 与桌面启动冒烟。
开发
要求:
- Node.js 24+
- pnpm 10.29.2
- Rust 1.96
- 与本仓库同级的
lapp-rs,固定到lapp-rs.lock中的提交
workspace/
├─ lapp-rs/
└─ nana-story/
pnpm install
pnpm verify
pnpm tauri dev
只验证前端和已提交契约时可运行:
pnpm verify:web
边界
- 模型供应商协议与凭据处理属于
lapp-rs。 - 前端只接收
PlayerView,不会得到完整RuntimeState。 - V1 不使用向量记忆库、导演 Agent 或多个完整角色。
- 模型与前端都不能直接修改运行时状态。
Languages
Rust
87.1%
TypeScript
6.9%
CSS
2.8%
Vue
2.6%
JavaScript
0.5%