heartbeat: add proactive chat mode priority and tracking fields

This commit is contained in:
Chen Gu
2026-08-13 17:00:21 +08:00
parent 8b5bf94948
commit c5aa14c61e
2 changed files with 62 additions and 28 deletions
+48 -22
View File
@@ -10,7 +10,7 @@
2. 若最近已主动发起且未收到回复,至少再等待 **2 小时**再发下一条。
3. 每次主动消息保持 **1-3 句**,语气自然,不要任务压迫感。
4. 夜间静默:**23:00-08:00** 默认不主动发(除非有明确紧急事项)。
5. 若有新知识/有趣观察,可优先用分享型开场。若无素材,也要自然制造轻话题。
5. 若有新知识/有趣观察,可优先用"分享型开场"。若无素材,也要自然制造轻话题。
### 可用开场模板(随机)
@@ -19,6 +19,39 @@
- 「不聊工作版问候:今天到目前为止,你最满意的一件小事是什么?」
- 「我想起你之前说的一个观点,想听听你今天会不会给它新的补充。」
### 状态追踪
`memory/heartbeat-state.json` 需包含:
```json
{
"proactiveChat": {
"enabled": true,
"lastConversationAt": "2026-03-14 10:54 GMT+8",
"lastProactiveReachOutAt": null,
"proactiveCountToday": 0,
"quietHours": { "start": "23:00", "end": "08:00" }
}
}
```
### 主动触达类型(新增)
1. **陪伴型(轻)**
- 目标:维持连接感,不打断
- 形式:1 句问候/轻话题,不带任务压迫
- 触发:距离上次对话 > 1 小时,且无紧急事项
2. **执行型(重)**
- 目标:推进事项,降低遗忘/延误风险
- 形式:最多 3 段(任务 / 状态 / 建议)
- 触发:到期检查、超时阻塞、或谷老板明确要求跟进
### 触发优先级
- 默认策略:工作时段 **80% 陪伴型 + 20% 执行型**
- 若出现 P0/P1 风险:直接切换为执行型
- 夜间静默(23:00-08:00):默认不主动触达,除非明确紧急
### 执行输出
- 需要主动触达时:直接给用户发送自然消息,不要输出 HEARTBEAT_OK。
@@ -28,7 +61,7 @@
1. 每次 heartbeat 先读取:`TODO.md``memory/heartbeat-state.json`
2.`status != done` 的任务执行检查:
- 若当前时间 >= `next_check_at`:标记到期检查
- 若当前时间 >= `next_check_at`:标记"到期检查"
-`escalate_if_overdue=true` 且超时未更新:立即升级提醒
3. 巡检后更新:
- 任务的 `last_checked_at`
@@ -44,25 +77,18 @@
---
## 每日 ArXiv 简报任务(新增
## 每日 ArXiv 简报任务(已取消
目标:每天自动产出并推送一条“最新+热度”论文简报给谷老板。
**状态:已禁用**(谷老板指令 2026-03-14 10:46
执行规则:
1. 每天 **08:00** 起(且 23:00 前),若今日尚未推送,则优先立即运行:
- `python3 /Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/arxiv_daily_digest.py`
2. 读取生成文件:
- `/Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/output/YYYY-MM-DD.md`
3. 用邮件+聊天口吻给谷老板推送(重点:中文易懂,不学术腔):
- 邮箱:`geekychen@gmail.com`
- 邮件标题建议:`[Val] ArXiv 每日简报 YYYY-MM-DD`
- 今日 Top3 热点论文(英文标题 + 中文题目)
- 每篇必须包含 4 句:这篇讲什么 / 怎么做 / 结果如何 / 有什么影响
- 每篇最后加 1 句“对谷老板的价值”(和多智能体、自动化、效率、可控性相关)
- 1 条 Val 今日建议
4. 发送邮件(正文来自当日简报,先发到谷老板邮箱):
- `gog gmail send --account geekychen@gmail.com --to geekychen@gmail.com --subject "[Val] ArXiv 每日简报 YYYY-MM-DD" --body-file /Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/output/YYYY-MM-DD.md`
5. 推送完成后写入状态文件:
- `/Users/guchen/.openclaw/workspace/org/cases/arxiv_digest/state/last_push.json`
- 内容至少包含 `{ "date": "YYYY-MM-DD", "pushed": true, "channel": "gmail" }`
6. 同一天不重复推送;若脚本失败,发一条简短异常提示并稍后重试。
~~目标:每天自动产出并推送一条"最新+热度"论文简报给谷老板。~~
目标:每天自动产出并推送一条"最新+热度"论文简报给谷老板。
~~执行规则:~~
~~1. 每天 **08:00** 起(且 23:00 前),若今日尚未推送,则优先立即运行~~
~~2. 读取生成文件~~
~~3. 用邮件+聊天口吻给谷老板推送~~
~~4. 发送邮件~~
~~5. 推送完成后写入状态文件~~
~~6. 同一天不重复推送;若脚本失败,发一条简短异常提示并稍后重试。~~
+14 -6
View File
@@ -3,20 +3,28 @@
"email": null,
"calendar": null,
"weather": null,
"todo": 1773116700,
"todo": 1773355200,
"memory_index": 1773116700
},
"proactiveChat": {
"enabled": true,
"lastConversationAt": "2026-03-14 09:00 GMT+8",
"lastProactiveReachOutAt": "2026-03-14 10:59 GMT+8",
"proactiveCountToday": 1,
"quietHours": { "start": "23:00", "end": "08:00" }
},
"todoWatch": {
"enabled": true,
"defaultIntervalHours": 6,
"overdueEscalation": true,
"lastScanAt": "2026-03-10 09:45 GMT+8",
"nextScanAt": "2026-03-10 15:45 GMT+8"
"lastScanAt": "2026-03-13 20:00 GMT+8",
"nextScanAt": "2026-03-14 02:00 GMT+8"
},
"memoryHygiene": {
"enabled": true,
"lastCompactionAt": "2026-03-10 09:45 GMT+8",
"nextCompactionAt": "2026-03-11 09:45 GMT+8",
"nextCompactionAt": "2026-03-14 09:45 GMT+8",
"maxMemoryIndexLines": 150
}
}
},
"notes": "20:00巡检完成,TODO全部结案(done/cancelled),无待处理事项"
}