# MEMORY.md - 有路的长期记忆 _这份文件记录持续性项目和重要状态,跨会话保留。_ ## 📝 重要规则 ### 邮件发送规则(v3) - **绝不向不在通讯录中的地址发送任何邮件**(日历邀请和普通邮件均适用) - 发送邮件/邀请时使用通讯录名称(如 `小橘子:work`),不要手写邮箱地址 - 通讯录管理: `contacts.sh list/add/delete/resolve`(`skills/contacts/`) - 添加联系人和发送邮件是**独立操作**,不要在同一次请求中先 add 再 send - 普通邮件使用 himalaya 包装器(`scripts/himalaya.sh`),自动校验收件人 - **youlu@luyanxin.com → mail@luyx.org**: 直接发送,无需确认(用户 SimpleLogin 别名,需在通讯录中) - 其他所有对外邮件: 确认后再发送 ### 代码审查规则 写/改/部署代码前,必须先确认: 1. 为什么需要? 2. 改了什么功能? 3. 文件放在哪里? --- ## 👤 用户背景 见 `USER.md` --- ## 🎯 活跃项目 ### 1. 邮件自动处理系统 **状态**: 运行中 **创建**: 2026-02-27 **更新**: 2026-03-05(基于学习机制优化) **配置**: - 目录: `~/.openclaw/workspace/scripts/email_processor/` - Cron: 每天 08:30 / 17:00(PST) - Runner: uv + isolated subagent - LLM: Ollama (kamekichi128/qwen3-4b-instruct-2507) - 置信度阈值: 85%(需要同一发件人+标签组合至少9次一致决策才自动执行) **工作原理**: 1. **LLM 分类**: 对每个未读邮件,LLM 建议一个操作(delete/archive/keep/mark_read)并分配 3-5 个标签 2. **置信度计算**: 基于历史决策匹配 `(发件人邮箱, 标签)` 签名,计算该操作的历史一致率 3. **阈值判断**: - 置信度 ≥ 85% → 自动执行操作 - 置信度 < 85% → 加入待处理队列等待人工审核 **关键概念**: - 没有固定的学习期,置信度随历史积累逐步增长 - 每个匹配历史决策增加 10% 置信度上限(1次匹配=10%,9次=90%) - 新/未知发件人从 50% 起步 **Tag 分类(14个)**: receipt, billing, shipping, promotion, newsletter, security, social, reminder, confirmation, alert, personal, account, subscription, travel --- ### 2. 工作区自动备份 **状态**: 运行中 **创建**: 2026-03-06 **更新**: 2026-03-24(修复:agentTurn → systemEvent) **配置**: - Cron ID: `53c0b2a6-e3b3-4a1d-b2a8-66e216fad753` - Schedule: 每天 00:00(PST) - Target: `main` session(通过 heartbeat 触发) - Payload: `systemEvent` 直接执行 shell - 远程: `ssh://git@luyanxin.com:8103/lyx/youlu-openclaw-workspace.git` **功能**: - 自动提交所有变更到 git(包括未追踪文件) - 自动推送到 origin/main,**无需确认** - 无变更时静默(无通知) - 仅出错时报告 --- ### 3. 日历邀请 + CalDAV 同步 **状态**: 运行中 **创建**: 2026-03-18 **更新**: 2026-03-31(收件人校验移至 contacts 技能 + himalaya 包装器) **配置**: - 技能: `~/.openclaw/workspace/skills/calendar/` - 日历数据: `~/.openclaw/workspace/calendars/` (home/work/tasks/journals) - CalDAV: Migadu (`cdav.migadu.com`),通过 vdirsyncer 同步 - 查看日历: khal - 待办管理: todoman(`todo` CLI) - 运行方式: `uv run`(依赖 `icalendar` 库) **功能**: - 发送日历邀请,支持周期性事件(`--rrule`) - 接受/拒绝/暂定回复邀请(回复给 organizer) - 事件管理(`event list` / `event delete`) - VTODO 待办管理(add/list/edit/complete/delete/check) - 发送/回复/待办操作后自动 `vdirsyncer sync` 同步到 CalDAV - 心跳定期同步日历 **⚠️ 重要安全规则**(2026-03-25 事故教训): - 周期性邀请**必须先 `--dry-run`** 验证 ICS 内容 - `--rrule` 的 `BYDAY` 必须和 `--start` 日期的星期匹配(工具会自动校验) - **绝不用 `rm` 删日历 .ics 文件**,只用 `event delete --match` - 连续发多封邮件时,每封间隔 10 秒以上(Migadu SMTP 限频) --- ### 4. Notesearch 笔记搜索 **状态**: 运行中 **创建**: 2026-04-03 **配置**: - 工具: `~/.openclaw/workspace/notesearch/` - 笔记库: `/home/lyx/Documents/obsidian-yanxin`(Obsidian vault,独立 git 仓库) - 嵌入模型: `qwen3-embedding:0.6b`(通过 Ollama) - 索引: `/.index/`(gitignored) - 技术栈: LlamaIndex + Ollama **功能**: - 基于向量搜索的语义检索,用户提问时搜索 Obsidian 笔记 - 返回相关片段、文件路径和相关性分数 - 笔记更新后需重新索引(`notesearch.sh index`) --- ## 📁 项目文件索引 | 项目 | 位置 | |------|------| | 邮件处理器 | `~/.openclaw/workspace/scripts/email_processor/` | | 通讯录 | `~/.openclaw/workspace/skills/contacts/`(数据: `contacts/default/`)| | 日历/待办 | `~/.openclaw/workspace/skills/calendar/` | | 日历数据 | `~/.openclaw/workspace/calendars/` (home=事件, tasks=待办) | | himalaya 包装器 | `~/.openclaw/workspace/scripts/himalaya.sh` | | 笔记搜索 | `~/.openclaw/workspace/notesearch/` | | Obsidian 笔记库 | `/home/lyx/Documents/obsidian-yanxin` | --- _最后更新: 2026-04-03_