feat: 第一季九章完整剧本与引擎(chapters 4-9、相处线索报告替代七维评分、采样覆盖驱动支线插入、consent v2、报告页隐私区块完善)+ 跨 agent 断点修复
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
# 苍梧疑冢 · 互动剧情测评(MVP)
|
||||
# 苍梧疑冢 · 九章互动叙事
|
||||
|
||||
陌生人交友匹配 app 的冷启动载体:单人互动叙事("影游")。MVP 范围 = 影游第一幕(3 章)
|
||||
+ 人格画像报告 + 勋章分享卡,**不含匹配和聊天**。
|
||||
陌生人交友产品的单人互动叙事:第一季九章完整故事 + 初步相处线索报告 + 分享卡,**不含真实匹配和聊天**。
|
||||
|
||||
完整可玩剧本:[九章全文](docs/script/season1-full.md);时间线、选择点地图与伏笔回收:[整季说明](docs/script/season-design.md)。
|
||||
全季 49 个主线交互点、122 条按钮出口,保留第一幕十条自适应支线。前三章原文大体保留,补齐第四至九章并接通正式游玩入口。
|
||||
行为只能提供待验证的关系线索,不是已验证的人格量表或择偶预测模型。
|
||||
|
||||
产品共识见 `CONTEXT.md`,架构决策见 `docs/adr/0001`~`0004`,剧本母本见
|
||||
`docs/story-framework.md`(第 4 节是 Act 1 全部选择点地图)。
|
||||
@@ -13,6 +16,10 @@ pnpm install
|
||||
pnpm dev # 浏览器开发(无 API key 时自动降级 Mock,见下)
|
||||
pnpm build # 类型检查 + 产物构建
|
||||
pnpm verify # 无头校验:选择点地图对照母本 + 引擎三章流程 + 重玩语义(Mock)
|
||||
pnpm verify:season # 九章、全部新增选项、三种见证×三种治理结局、隐私隔离
|
||||
pnpm fetch:asr # 下载端侧 ASR 资产(sherpa-onnx WASM + SenseVoiceSmall 模型,约 250MB,进 public/asr/,已 gitignore)
|
||||
pnpm script:season # 从章节 JSON 生成完整剧本文档
|
||||
pnpm script:review # 更新全季评审包
|
||||
pnpm verify:live # 真 key 冒烟:C1-01 抽取 + C1-02 情绪签名 + 7 维 score(读 .env)
|
||||
pnpm lint # oxlint
|
||||
pnpm tauri dev # Tauri 桌面壳(Rust 工具链需先 source ~/.cargo/env)
|
||||
@@ -37,13 +44,16 @@ VITE_TYPESAFE_API_KEY=<your key>
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
content/chapters/ Act 1 三章剧情数据(JSON,选择点 ID/维度标签对母本第 4 节)
|
||||
content/chapters/ 第一季九章剧情数据(JSON,原三章 + 新增六章)
|
||||
src/engine/ 数据驱动剧情引擎(纯 TS,与 UI 解耦)
|
||||
types.ts 章节 schema:dialogue / choice / narration / cutscene / identity / chapterEnd
|
||||
engine.ts StoryEngine 状态机:节点推进、分支、情绪签名→场景变体、
|
||||
身份抽取(extractIdentity)与确认(confirmIdentity)、重玩
|
||||
eventStore.ts EventStore 接口(append-only,只有 append/list)+ localStorage 实现
|
||||
src/services/jev.ts JevClient 接口 + HttpJevClient / MockJevClient
|
||||
src/asr/ 端侧转写:ondevice.ts 引擎(Worker 内跑 sherpa-onnx WASM)、
|
||||
ondevice-asr.worker.ts、capture.ts 16k PCM 采集(AudioWorklet)、
|
||||
segment.ts 长音频切分(纯函数,verify 直测)
|
||||
src/ui/ 最简影游界面(对话框/选项/VoiceInput 语音输入/身份登记/场景变体渐变)
|
||||
src/ui/report/ 画像报告(Jev 7 维 score)、勋章映射、canvas 分享卡
|
||||
scripts/verify.ts 内容完整性与流程校验(Mock 回归)
|
||||
@@ -61,6 +71,13 @@ src-tauri/ Tauri 2 壳(iOS/Android/桌面共用)
|
||||
- **语音输入**:`VoiceInput` 组件优先用 Web Speech API(`zh-CN`,continuous +
|
||||
interimResults,实时转写),不支持的环境(如 Tauri WKWebView)优雅降级为文本框。
|
||||
只保留转写文本、不保存任何音频,天然符合 ADR-0004"特征提取后即焚"。
|
||||
- **端侧小模型转写(第一优先通路)**:`pnpm fetch:asr` 下载 sherpa-onnx WASM 运行时
|
||||
(k2-fsa 官方 vad-asr space 构建)+ SenseVoiceSmall int8(中英日韩粤,自带情感/事件
|
||||
标签)到 `public/asr/`(不进 git);首次使用懒加载进 CacheStorage(有进度提示),
|
||||
在 Web Worker 里本地解码——音频不出设备,ADR-0004"即焚"在最强意义上成立。模型未就绪/
|
||||
失败/浏览器不支持时静默退回 Web Speech 或录音上传通路。`VITE_ONDEVICE_ASR=0` 可关闭。
|
||||
资产获取脚本会把运行时 glue 内嵌的 Emscripten 打包清单改写为只含本项目的模型两个文件
|
||||
(普通 wasm/asr 运行时只导出流式 API,SenseVoice 必须用 vad-asr 构建的 Offline API)。
|
||||
- **C1-01 语音化身份登记**:馆长邀请自由介绍(称呼/年龄/城市/职业/学历),
|
||||
Jev 一次调用并行抽取:gender(choice)、age(score 分档)、occupation(choice)、
|
||||
education(choice)、city(noul 判断是否提及 + 城市 choice 兜底);
|
||||
@@ -72,9 +89,17 @@ src-tauri/ Tauri 2 壳(iOS/Android/桌面共用)
|
||||
|
||||
## 已知缺口
|
||||
|
||||
> 以下保留早期 MVP 的部署备注;九章内容与自适应支线路由现已接入。七维标量评分仍属试验性接口,不能将置信度当心理效度;真实偏好确认、匹配与聊天仍未实现。
|
||||
|
||||
- **CORS**:浏览器直连 `api.typesafe.ai` 可能有跨域限制,正式环境需加后端代理转发。
|
||||
- **Web Speech API 覆盖**:Chrome/Edge 可用,Tauri WKWebView 与 Firefox 不支持
|
||||
(自动降级文本框);原生端的正式 ASR 管线未接。
|
||||
- **端侧 WASM 需真机验证**:端侧转写(sherpa-onnx WASM + SenseVoiceSmall)的
|
||||
模型完整性、glue 打包清单改写、Offline 解码链路已在 node 垫片环境实跑通过
|
||||
(官方 zh 测试音频转出正确文本 + 情感/事件标签),但浏览器/WKWebView 里的
|
||||
完整链路(CacheStorage 下载、Worker blob URL、麦克风采集)只能真机验证;
|
||||
长音频(>28s)按静音谷切分是能量启发式,无 VAD 精确(vad-asr 运行时自带 VAD API,
|
||||
留作后续升级);SenseVoice 的 emotion/event 标签已透传但尚未接进讲述事件。
|
||||
- **Tauri SQLite 未实现**:`EventStore` 目前只有 localStorage 实现;原生端应用
|
||||
tauri-plugin-sql 实现同一接口(表只建 INSERT/SELECT,不建 UPDATE/DELETE 路径),
|
||||
预留位置见 `src/engine/eventStore.ts` 末尾注释。
|
||||
|
||||
Reference in New Issue
Block a user