Files
EzVibeR/docs/usage/06-健康提醒.md
Claude Agent 205c57e9b7 Update: Usage
2026-06-20 14:55:47 +08:00

125 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 06 · 健康提醒
桌宠会按你设定的规则,**定时**弹气泡 + 弹系统通知Linux 走 `notify-send`macOS/Windows 走 tauri-plugin-notification
## 1. 默认规则
第一次启动时自动写入三条:
| 名称 | action_type | 间隔 | 优先级 | 静默时段 | 用途 |
|---|---|---|---|---|---|
| `remind_water` | remind_water | **90 秒** ⚠️ | 0 | 关 | 喝水提醒 |
| `remind_stretch` | remind_stretch | **180 秒** ⚠️ | 1 | 关 | 伸展提醒 |
| `remind_test` | remind_test | 120 秒 | 9 | 关 | 验证系统通知是否生效 |
> ⚠️ 90 秒 / 180 秒是**开发用**的短间隔。**生产请改成 45 分钟 / 60 分钟**(即 `interval_secs = 2700` / `3600`)。否则你会觉得桌宠在"轰炸"你。
>
> 改的方法:托盘 → 健康提醒 → 找到那一条 → 改"触发间隔(秒)"。详见 §4。
## 2. 如何进入「健康提醒」管理面板
**右键系统托盘图标 → 「健康提醒」**独立窗口800×500可调整大小
> 每次点都会**重建窗口**以读取最新配置。
## 3. 可用的 action_type
UI 下拉里内置 9 种:
| action_type | 含义 | 触发时 |
|---|---|---|
| `remind_water` | 喝水提醒 | 弹气泡"记得喝水~"等文案 + 通知 |
| `remind_stretch` | 伸展提醒 | 弹气泡"起来动一动~"等文案 + 通知 |
| `remind_eyes` | 用眼休息 | 远眺、闭眼等文案 |
| `remind_stand` | 站立提醒 | 起来走走 |
| `greet_morning` | 早安问候 | 早上 8-12 点 |
| `greet_afternoon` | 下午好 | 下午 12-18 点 |
| `greet_evening` | 晚安问候 | 晚上 18 点后 |
| `remind_test` | 测试通知 | 不分时段 |
| `remind_custom` | 自定义 | 不分时段 |
每种 action_type 都有内置的**多套随机文案**5+ 条),触发时随机抽一条,不重复。
> 这套文案存在 `brain.rs` 的 `FallbackCache` 里。如果你要新增自定义文案,目前需要改源码(本用户手册不涉及开发)。
## 4. 新增 / 编辑 / 删除
### 4.1 新增
**「+ 添加提醒」** → 弹窗填表:
| 字段 | 必填 | 说明 |
|---|---|---|
| **名称**name | ✅ | 唯一标识,不能跟现有重名;建议用英文 + 下划线 |
| **动作类型**action_type | ✅ | 上面 9 个之一 |
| **触发间隔(秒)**interval_secs | ✅ | 两次触发的最小间隔(必须 > 0 |
| **优先级**priority | ✅ | 0=最高,数字越大越低;同 tick 多个 fire 时不区分 |
| **是否启用静默时段**quiet_hours_enabled | — | 关掉则 24h 都会触发 |
| **静默开始小时** | 仅启用时 | 0-23含 |
| **静默结束小时** | 仅启用时 | 0-23不含 |
**确认** → 立即生效(**不用重启**)。
### 4.2 编辑
表格里点任意一行的 **「编辑」** 按钮(内置两条 `remind_water` / `remind_stretch` 也可编辑)→ 改完确认 → 立即生效。
> 💡 编辑支持**改名**——后端按 `old_name` 找,更新为新 name。
### 4.3 删除
**「删除」** → 确认 → 立即生效。
> ⚠️ 内置的 `remind_water` / `remind_stretch` 也能删(不会自动恢复)。删了想恢复就在「添加」里手动建一条。
## 5. 静默时段
举例:晚上 22:00 - 次日 08:00 不打扰
- `quiet_hours_enabled = true`
- `quiet_start_hour = 22`
- `quiet_end_hour = 8`
> 静默时段内**不触发提醒**,但**计时器会偷偷推进**到 80% 间隔。所以静默结束后**不会立刻轰炸**,而是大约 20% 间隔后补一次。
## 6. 触发后会发生什么
1. 60 秒定时循环检查每条 Behavior 距上次触发的时间
2. 到达间隔 + 不在静默时段 → 标记 `should_fire = true`
3.`brain.think(action_type, SystemReminder, None)`**不调 LLM**!走 FallbackCache 随机文案
4. 三个事同时发生:
- **聊天面板**:自动切到「🔔 提醒中心」视图,把这条提醒作为新消息
- **系统通知**弹一个原生通知Linux 通知中心 / macOS 通知中心 / Windows 操作中心)
- **情绪引擎**:注入 `TimePasses` 事件(不是 reminder 事件本身,但累计推进情绪衰减)
## 7. 手动触发(验证用)
聊天面板顶部有 **🔔** 按钮,但那是"跳到提醒中心"**不触发**。
**手动触发**目前需要从**聊天面板**里**没有**快捷按钮(已知缺口),但你可以通过**临时改短间隔**到 5 秒来测试通知。详见 [09-常见问题FAQ.md](09-常见问题FAQ.md) → "怎么手动测一次通知"。
> 或者调用 Rust 的 `trigger_reminder` Tauri 命令(开发者向,跳过)。
## 8. 后端权威
提醒事件流是**后端权威**
- 即使前端没启动 / 聊天面板关着,定时器照常跑
- 提醒消息**直接写入**提醒中心 jsonl不依赖前端 listener
- 前端只是**被动接收** `ezvibe:reminder` 事件来切视图
- 写盘和通知即使前端崩了也会发生
> 所以**不要怕关窗口丢提醒**。
## 9. 常见疑问
**Q: 怎么关掉所有提醒?**
A: 把所有行为的 `interval_secs` 改成超大值(如 `99999999`),或一条条删掉。**当前没有"全局开关"**。
**Q: 改完规则多久生效?**
A: 后端用 `reload_all_behaviors` 立即全量替换,**当前 tick 就生效**。不需要等下一次循环。
**Q: 静默时段是按哪个时区算?**
A: 本地时区(`chrono::Local::now().hour()`)。
**Q: 我能用 cron 表达式吗?**
A: 不能。当前只支持"每 N 秒" + 静默时段。
---
下一步:[07-LLM对话.md](07-LLM对话.md)。