Merge branch 'main' of ssh://git.luyanxin.com:8103/lyx/youlu-openclaw-workspace
merging
This commit is contained in:
@@ -1,9 +1 @@
|
|||||||
# HEARTBEAT.md - Periodic Checks
|
# 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
|
|
||||||
|
|||||||
24
MEMORY.md
24
MEMORY.md
@@ -17,6 +17,11 @@ _这份文件记录持续性项目和重要状态,跨会话保留。_
|
|||||||
|
|
||||||
**规则**: 只报告有空位的课程,全满时静默。
|
**规则**: 只报告有空位的课程,全满时静默。
|
||||||
|
|
||||||
|
**重要说明(2026-02-26)**:
|
||||||
|
- Spring 2026 课程目前显示 "7 Spots Left" 但未真正开放报名(登录后显示 "registration not open")
|
||||||
|
- **真正开放的信号**: 空位数从 7 减少(有人开始报名)
|
||||||
|
- 监控脚本已更新注释,提醒未来注意此情况
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 2. 每日待办提醒系统
|
### 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)
|
### 邮件发送规则(v2)
|
||||||
|
|||||||
66
TOOLS.md
66
TOOLS.md
@@ -43,29 +43,63 @@ himalaya message write # 写新邮件(交互式)
|
|||||||
- **youlu@luyanxin.com → lu@luyx.org**: 直接发送,无需确认
|
- **youlu@luyanxin.com → lu@luyx.org**: 直接发送,无需确认
|
||||||
- 其他所有对外邮件: 仍需确认
|
- 其他所有对外邮件: 仍需确认
|
||||||
|
|
||||||
### News Digest 新闻摘要
|
### ~~News Digest 新闻摘要~~ (已停用)
|
||||||
|
|
||||||
**自动任务(Cron + Subagent):**
|
~~**自动任务(Cron + Subagent):**~~
|
||||||
- 时间:每天早上 5:00 AM (PST)
|
~~- 时间:每天早上 5:00 AM (PST)~~
|
||||||
- Cron ID: `cc95dcf3-0d6c-44f4-90af-76b836ca0c87`
|
~~- Cron ID: `cc95dcf3-0d6c-44f4-90af-76b836ca0c87`~~
|
||||||
- 模式:isolated subagent,thinking=low,timeout=5min
|
|
||||||
|
|
||||||
**本地配置:**
|
~~**本地配置:**~~
|
||||||
- 目录:`~/.openclaw/workspace/scripts/news_digest/`
|
~~- 目录:`~/.openclaw/workspace/scripts/news_digest/`~~
|
||||||
- 主脚本:`send_digest.py`
|
~~- 主脚本:`send_digest.py`~~
|
||||||
- 配置:`config.json`
|
~~- 配置:`config.json`~~
|
||||||
- 数据库:`news_digest.db`
|
~~- 数据库:`news_digest.db`~~
|
||||||
- 日志:`news_digest.log`
|
~~- 日志:`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
|
```bash
|
||||||
cd ~/.openclaw/workspace/scripts/news_digest
|
agent-browser open <url>
|
||||||
./send_digest.py
|
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/` — 每日处理日志
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -64,3 +64,26 @@
|
|||||||
2026-02-25T21:03:11-08:00
|
2026-02-25T21:03:11-08:00
|
||||||
2026-02-25T22:03:14-08:00
|
2026-02-25T22:03:14-08:00
|
||||||
2026-02-25T23:04:40-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
137
memory/2026-02-27-0527.md
Normal 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: 👌 已收到,会话清理完成。再见!
|
||||||
@@ -108,6 +108,10 @@ async def check_course(page, name, url):
|
|||||||
text_lower = text.lower()
|
text_lower = text.lower()
|
||||||
|
|
||||||
# Check if it's NOT full
|
# 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
|
is_full = "full" in text_lower
|
||||||
if is_full:
|
if is_full:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user