# dsh-dot 总体规划（2026-10-23；「现在在哪」更新于 2026-11-03，v0.12.0）

## 一句话

dot 是一个**在自己手机上过日子的角色**：有自己的手机、账号、作息；你是她 QQ 里的一个联系人；两次对话之间她在过自己的生活。能干活是附带的，不是主体。

## 现在在哪

| 层 | 状态 | 证据 |
|---|---|---|
| 手机（`phone`） | ✅ 开箱即用：自动下载/建 AVD/开机/接管（只接管自己的 AVD），live view 标签页，`mcp__dot-phone__*`；摄像头是虚拟场景，能往镜头前放图；存储建手机前可选（默认 16 GB） | 真机：装好 → 她自己装了 QQ、登录、回了消息；10-30 她的 8 GB 用满，扩容不生效，清理后剩 ~2 GB |
| 通知 → 叫醒 | ✅ 事件 + 快照模型，任何 App，按 App 静音，后台不冻结 | 真机：发出 → 叫醒 2–4 s（原 3.5 min） |
| 她回消息 | ✅ 一条 ~78 s；忙时来的消息攒到那轮结束一起给她（10-29 真机：`owner-message whileBusy:true`）；回复按行拆成多条、按字数停顿；能发表情包（存别人发的）和小黄脸 | 真机 10-29 |
| 幕间（`interlude`） | ✅ HDSI 移植：Canon、剧本、连续性、打算、web/vm/phone 三路"去看"（只读无审批） | 真机跑了 14 轮；0 次 browserIntent（剧情没给理由） |
| 联系人层（`dot`） | ✅ 定时结果→IM、审批/设备提醒、工作规则、通知唤醒 | 真机 |
| 电脑（`computer`） | ✅ 可选；网关加密钥、端口转发封死、实时画面一次性票据、按操作类型审批、审计 | `DSH_DOT_COMPUTER=off` |
| 她电脑上的 QQ（`qq`） | ✅ NapCat 或 SnowLuma（`/qq backend`），她用手机摄像头扫码登录（`/qq qr`）；只认她的号 | 10-30 真机：SnowLuma 连上、`mcp__dot-qq__*` 挂载，她自己扫码登录 |
| IM 通道 | ✅ QQ 连上时 dot 的提醒、幕间主动联系、她对你 QQ 消息的回答都走她的 QQ；没连上时退回 dsh-im 官方机器人。SnowLuma 下收发已实测（10-29，22 条进 38 条出）；`qq_send` 对陌生人的审批只有单元测试，没有陌生人来过 | 真机 10-29 |
| 自动召回（`memory` 的 RAG 层） | ✅ 0.12：每次叫醒前按叫醒她的话从 transcript 取原话注入；本机 bge-small-zh 默认（0.15.2 起换成 multilingual-e5-small；首次用时装库、走 hf-mirror 下模型），SiliconFlow / DashScope 可切，`/dot memory recall …` 一条命令切换 | 公开基准 108 题：74 → 96（0.15.2，真实代码路径，本机 e5）；真机未跑 |
| "玩"（点赞/评论/关注） | ✅ 代码在（playIntent → 正常轮次，Moltbook 守则），11-02 起默认开、内置 App 表按手机上装的收窄；发帖/私信不做 | 真机 0 次（之前默认关） |

## 架构（不再变的部分）

```
                 ┌─ phone ──── Android 模拟器 ── mcp__dot-phone__* ── 通知事件
dot (联系人层) ──┼─ computer ─ microVM（可选）── mcp__dot-vm__*
                 └─ interlude ─ 幕间：剧本/连续性/打算/去看/主动联系
          ▲ 叫醒（通知、定时、幕间观察）        ▼ 投递（dsh-im send / 未来 qq_send）
        她的会话（dsh 自己跑对话，人设 = Canon 段 + 工作规则段）
```

原则：**她只能看，不能瞒着你动**（幕间只读；有后果的动作走审批或不给）；**不替她做她该自己做的事**（装 App、登录后的日常）；**不重复造轮子**（模拟器、mobile-mcp、HDSI 预设、dsh-im、dsh 定时）；**可审计**。

## 分期

### P0 · 把"聊天"这条线做扎实（本周）

目标：你在 QQ 里和她聊一天，不漏、不串、不重复。

1. ~~**忙时攒消息**~~：已做（`held`/`releaseHeld`，`groupNotifications`），10-29 真机验证。
2. ~~夜间静音~~：撤回。`notifyHours` 默认不设，任何时候来通知都叫醒她（10-25，Kevin 没要过这个）。
3. **回消息的速度**：先接受 ~1 min（人也不秒回）；记录每次回复的耗时和工具调用数，一周后看数据再决定要不要快路。
4. **观察一周**：`calls.jsonl`、`web-context.jsonl`、两份审计日志。不加功能。已看到的：10-27/28 余额不足时幕间一天失败 133 次——现在失败后退避 5/10/20…60 分钟。

完成标准：连发 5 条她一次回齐；夜里不叫；一周内 0 条漏回（审计可查）。

### P1 · 让她"过日子"真的发生（下周）

目标：幕间不再只是躺床上；她会拿手机、会去看、会有话题。

1. **定时拿起手机**（`phoneCheckEveryMinutes`，活跃时段内，默认 30）：正常轮次，"看看手机有没有新消息/新动态，有事处理，没事 `DOT_SILENT`"。这是通知之外的兜底，也是她"刷手机"的来源。
2. ~~**`phoneApps` 填上**~~：内置常见 App 表，按她手机上装了什么生效（11-02）；`vmSites` 给电脑。
3. **她关注什么**：由你给（账号/话题），原样写进 Canon 的 `world`；或者等她在对话里自己长出来。我不编。
4. **intent 空转**：`intent` 轮只结算不新建（现在每天 7 轮 intent 滚自己）。
5. **幕间观察结果回流**：`webContext` 已进下一轮；检查剧本里有没有真的用上。

完成标准：一周内剧本里出现 ≥3 次"她在手机上看到的东西"；幕间 intent 轮 ≤ 2/天。→ 11-02 核对 ~/dot/interlude：phone-check 186 次；观察 phone 6 / web 4；剧本里小黑盒评论、番茄、手机存储都是真事；intents 已清空。达标。

### P2 · "玩"：轻动作（已做，待真机观察）

目标：点赞、评论、发帖、关注——在她的账号上，按她的人设，低频。

1. 提示词来源：社区（NapCat 陪伴机器人们的 proactive 提示、HDSI 社区的 agency 讨论），不自己写。
2. 机制：幕间产出 `playIntent`（想做什么、为什么、意愿值）→ dot 以**正常轮次**执行（不是只读观察）→ HDSI 的 agency 门控（活跃时段、意愿阈值、每日上限）。
3. 审批策略：点赞/评论/关注在白名单内不审批；发帖、私信陌生人、付款审批；账号资料改动不给。
4. 风险接受：小号，封了就封了。

完成标准：一周 ≤ N 次动作（N 你定），审计里每次都有"为什么"。

### P3 · 通道与第二设备（按需，不排期）

- ~~**NapCat 当她的"电脑端 QQ"**~~：已做（`dsh-dot/qq`，v0.6 起；v0.10 加 SnowLuma 后端），见 [qq.md](qq.md)。
- **dsh-im 官方机器人通道**：降级为可选（给想用的人），她的 IM 身份以真 QQ 为准。
- **真机 / PVE 24 小时**：`serial` 配置项接真安卓机（去模拟器检测、Mac 睡眠也在线）；或手机搬到 PVE 的 Redroid。等有需要。
- **NotificationListenerService APK**：只在 dumpsys 快照被证明会漏时做。

### 持续

- README/DESIGN 随代码；每个真机实测写进 DESIGN 的"验证情况"。
- 不做：长期记忆库、多个 dot、自我进化、自己的 IM/定时框架、替她装 App。

## 要你定的（按出现顺序）

| 决定 | 我的建议 |
|---|---|
| 夜间静音时段 | 跟 `activeHours` 走：08:00–23:00 |
| 回消息快路（NapCat）做不做 | P0 观察一周后用数据定 |
| 她关注什么（账号/话题） | 你给几个，或让她自己长 |
| "玩"的提示词从哪来 | 你指路，我去找 |
| "玩"的每日上限 N | 3 |
| 电脑组件以后留不留 | 留，可选 |

## 风险

- **平台检测 / 封号**：模拟器 + 自动化违反各家条款。小号、低频、不绕验证码。
- **模型成本**：每次叫醒一轮 + 幕间一天 ≤12 轮 + 定时看手机 ≤30 轮/天。flash 下可接受；换大模型前先看 `calls.jsonl` 的用量。
- **AGPL**：幕间提示词按 HDSI 原文，整包 AGPL；已在 README 写明。
- **单点**：Mac 睡眠 = 她下线。P3 的真机/PVE 解决。
