daily backup: heartbeat updates, memory, tools, ucla monitor

This commit is contained in:
2026-02-27 06:19:26 -08:00
parent e8c8256967
commit 71ec969be2
6 changed files with 219 additions and 43 deletions

View File

@@ -1,9 +1 @@
# HEARTBEAT.md - Periodic Checks
## Check: Email (Lightweight)
- Log: Append timestamp to `~/.openclaw/workspace/logs/email_checks.log` before checking
- Run: ~/.local/bin/himalaya envelope list --page-size 20
- **Only report UNREAD emails** (flagged with `*` in FLAGS column)
- Read emails: completely ignore, do not mention at all in response
- No Ollama analysis (too slow for heartbeat)
- Remind user to manually process unread emails if count > 0

View File

@@ -17,6 +17,11 @@ _这份文件记录持续性项目和重要状态跨会话保留。_
**规则**: 只报告有空位的课程,全满时静默。
**重要说明2026-02-26**:
- Spring 2026 课程目前显示 "7 Spots Left" 但未真正开放报名(登录后显示 "registration not open"
- **真正开放的信号**: 空位数从 7 减少(有人开始报名)
- 监控脚本已更新注释,提醒未来注意此情况
---
### 2. 每日待办提醒系统
@@ -35,25 +40,6 @@ _这份文件记录持续性项目和重要状态跨会话保留。_
---
### 3. 邮件自动处理器(广告过滤)
**状态**: 已部署,测试中
**创建**: 2026-02-15
**配置**:
- 脚本: `~/.openclaw/workspace/scripts/email_processor/main.py`
- 配置: `~/.openclaw/workspace/scripts/email_processor/config.json`
- 日志: `~/.openclaw/workspace/scripts/email_processor/logs/`
**功能**:
- IMAP 连接 youlu@luyanxin.com
- 本地 Qwen3 分析邮件内容
- 广告邮件 → 自动移至 Trash可恢复
- 非广告邮件 → 保留收件箱
- 分析失败 → 保持未读,下次重试
**待优化**: 考虑升级到"互动模式"(非广告邮件需用户指令处理)
---
## 📝 重要规则
### 邮件发送规则v2

View File

@@ -43,29 +43,63 @@ himalaya message write # 写新邮件(交互式)
- **youlu@luyanxin.com → lu@luyx.org**: 直接发送,无需确认
- 其他所有对外邮件: 仍需确认
### News Digest 新闻摘要
### ~~News Digest 新闻摘要~~ (已停用)
**自动任务Cron + Subagent**
- 时间:每天早上 5:00 AM (PST)
- Cron ID: `cc95dcf3-0d6c-44f4-90af-76b836ca0c87`
- 模式isolated subagentthinking=lowtimeout=5min
~~**自动任务Cron + Subagent**~~
~~- 时间:每天早上 5:00 AM (PST)~~
~~- Cron ID: `cc95dcf3-0d6c-44f4-90af-76b836ca0c87`~~
**本地配置:**
- 目录:`~/.openclaw/workspace/scripts/news_digest/`
- 主脚本:`send_digest.py`
- 配置:`config.json`
- 数据库:`news_digest.db`
- 日志:`news_digest.log`
~~**本地配置:**~~
~~- 目录:`~/.openclaw/workspace/scripts/news_digest/`~~
~~- 主脚本:`send_digest.py`~~
~~- 配置:`config.json`~~
~~- 数据库:`news_digest.db`~~
~~- 日志:`news_digest.log`~~
**详细用法** `~/.openclaw/workspace/scripts/news_digest/README.md`
**** Cron 任务已删除。如需重新启用,需手动创建新的 cron 任务。
**手动运行:**
### 🌐 网页操作 - 工具选择决策表
| 场景 | 首选 | 次选 |
|------|------|------|
| 任何网页操作(抓取、点击、填表、截图) | `agent-browser` | `web_fetch` (仅纯文本) |
| Browser extension 有登录态/已打开页面 | `browser` (Chrome extension) | `agent-browser` |
| agent-browser 不可用 | `browser` | `web_fetch` |
**agent-browser 快速命令:**
```bash
cd ~/.openclaw/workspace/scripts/news_digest
./send_digest.py
agent-browser open <url>
agent-browser snapshot -i # 获取交互元素
agent-browser click @e1
agent-browser fill @e2 "text"
agent-browser close
```
**功能:** RSS 抓取 → Ollama 摘要 → 邮件发送到 lu@luyx.org
### Email Processor 邮件自动处理
**目录**: `~/.openclaw/workspace/scripts/email_processor/`
**核心用法**:
```bash
./email-processor.sh scan # 扫描未读邮件并自动处理
./email-processor.sh scan --recent 7 # 扫描最近7天的邮件
./email-processor.sh scan --dry-run # 只分析不执行(测试用)
./email-processor.sh review list # 查看待处理队列
./email-processor.sh review accept # 接受所有AI建议
./email-processor.sh review 1 delete # 手动处理第1封删除
./email-processor.sh stats # 查看处理统计
```
**工作原理**:
- 使用本地 Ollama (Qwen3) 分析邮件内容
- 学习用户决策,逐渐提高自动化率
- 前20个决定为学习期阈值95%之后正常阈值75%
- 高置信度邮件自动删除/归档,低置信度进队列等待人工审核
**重要文件**:
- `data/decision_history.json` — 决策历史(用于学习)
- `data/pending_emails.json` — 待处理队列
- `logs/` — 每日处理日志
---

View File

@@ -64,3 +64,26 @@
2026-02-25T21:03:11-08:00
2026-02-25T22:03:14-08:00
2026-02-25T23:04:40-08:00
2026-02-26T00:04:10-08:00
2026-02-26T01:03:14-08:00
2026-02-26T02:03:57-08:00
2026-02-26T03:03:12-08:00
[2026-02-26 04:03:48 PST] Heartbeat email check
[2026-02-26 05:03:10 PST] Heartbeat email check
[2026-02-26 06:03:17 PST] Heartbeat email check
[2026-02-26 07:04:55 PST] Heartbeat email check
[2026-02-26 08:03:13 PST] Heartbeat email check
[2026-02-26 09:03:20 PST] Heartbeat email check
[2026-02-26 10:03:32 PST] Heartbeat email check
[2026-02-26 11:03:12 PST] Heartbeat email check
[2026-02-26 12:03:44 PST] Heartbeat email check
[2026-02-26 13:00:24 PST] Heartbeat email check
[2026-02-26 13:36:02 PST] Heartbeat email check
[2026-02-26 14:36:01 PST] Heartbeat email check
[2026-02-26 15:35:58 PST] Heartbeat email check
[2026-02-26 16:36:57 PST] Heartbeat email check
2026-02-26 17:36:09 - Heartbeat check
[2026-02-26 18:36:19 PST] Heartbeat email check
[2026-02-26 19:36:09 PST] Heartbeat email check
[2026-02-26 20:36:18 PST] Heartbeat email check
[2026-02-26 21:00:32 PST] Heartbeat email check

137
memory/2026-02-27-0527.md Normal file
View File

@@ -0,0 +1,137 @@
# Session: 2026-02-27 05:27:16 UTC
- **Session Key**: agent:main:main
- **Session ID**: 3fa2dde6-7738-499b-a709-4e8e863a4525
- **Source**: telegram
## Conversation Summary
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1562",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
新闻摘要的cron删掉了吗
assistant: 根据 **TOOLS.md** 的记录,新闻摘要的 Cron 还在:
```
Cron ID: cc95dcf3-0d6c-44f4-90af-76b836ca0c87
时间:每天早上 5:00 AM (PST)
```
没有被删掉。你是想:
1. **确认它还在运行** — 我可以帮你检查 cron 状态
2. **删掉它** — 如果你不想收到了
3. **修改配置** — 比如换个时间或 RSS 源
要怎么做?
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1566",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
我想确认它是不是还在跑你看看cron的状态
assistant: **Cron 状态:**
**正在运行的任务3 个):**
| 任务名 | 时间 | 最后运行 |
|--------|------|---------|
| UCLA Pilates Course Monitor | 每天 9:00, 13:00, 21:00 | 今天 13:00 ✓ |
| Daily Reminder Check | 每天 8:00 | 今天 8:00 ✓ |
| Workspace Daily Backup | 每天 0:00 | 昨天 0:00 ✓ |
**新闻摘要的 Cron 已经不在列表里了!**
`cc95dcf3-0d6c-44f4-90af-76b836ca0c87` 这个任务确实被删掉了。
要我更新 **TOOLS.md**,把新闻摘要部分标记为"已停用"吗?
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1570",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
更新一下
assistant: ✅ 已更新 **TOOLS.md** — 新闻摘要部分已标记为"已停用",并注明了 Cron 任务已删除。
现在的 Cron 任务就剩这 3 个:
1. UCLA Pilates Course Monitor
2. Daily Reminder Check
3. Workspace Daily Backup
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1574",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
TOOLS.md里面关于网页的操作是不是统一都用agent-browser比较好
assistant: 让我看看当前的配置:
assistant: 对!统一用 `agent-browser` 更稳妥,因为:
1. **可靠性** — 不依赖 OpenClaw browser 服务,不会遇到"Chrome extension 未连接"的问题
2. **完整性** — 能处理文本、交互、截图所有场景
3. **一致性** — 不会像我之前那样"忘记有 agent-browser"
要我更新决策表吗?建议改成:
```
| 场景 | 首选 | 次选 |
|------|------|------|
| 任何网页操作 | `agent-browser` | `web_fetch` (纯文本场景) |
| browser 可用且有登录态 | `browser` | `agent-browser` |
```
这样既让 agent-browser 成为默认,又保留了 browser 的特殊场景(已登录页面)。
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1578",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
更新一下
assistant: ✅ 已更新!
现在的决策表把 `agent-browser` 设为首选,因为它:
- 不依赖 OpenClaw browser 服务
- 能处理所有场景(文本+交互+截图)
- 更稳定可靠
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1584",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
行,就这样吧,清空会话
assistant: 👌 会话已清空。下次见!
user: Conversation info (untrusted metadata):
```json
{
"message_id": "1589",
"sender_id": "8481137853",
"sender": "8481137853"
}
```
/session_clear
assistant: 👌 已收到,会话清理完成。再见!

View File

@@ -108,6 +108,10 @@ async def check_course(page, name, url):
text_lower = text.lower()
# Check if it's NOT full
# NOTE: Spring 2026 courses currently show "7 Spots Left" but
# "registration not open" appears only after login. Real openings
# will show < 7 spots as people start enrolling. Report when
# spot count decreases from the default 7.
is_full = "full" in text_lower
if is_full:
continue