cleanup: remove old reminder system and unused crontab files
Todo management now lives entirely in skills/calendar/ via VTODO + todoman.
This commit is contained in:
@@ -1,117 +0,0 @@
|
||||
# Migration: reminder_check.py → calendar todo
|
||||
|
||||
## What's changing
|
||||
|
||||
| Before | After |
|
||||
|--------|-------|
|
||||
| `scripts/reminder_check.py` | `skills/calendar/scripts/calendar.sh todo` |
|
||||
| `reminders/active.md` (markdown table) | `calendars/tasks/*.ics` (RFC 5545 VTODO) |
|
||||
| Local only, no sync | CalDAV sync to all devices via vdirsyncer |
|
||||
| No native reminders | VALARM triggers on phone/desktop |
|
||||
| Cron reads markdown | Cron reads .ics via todoman |
|
||||
| Custom Python parsing | todoman for robust RFC 5545 VTODO handling |
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [ ] Install todoman (see below)
|
||||
- [ ] Configure todoman (see below)
|
||||
- [ ] `calendar.sh todo add --dry-run` works
|
||||
- [ ] `~/.openclaw/workspace/calendars/tasks/` directory exists (auto-created by `todo add`)
|
||||
- [ ] vdirsyncer has a `cal/tasks` pair configured
|
||||
- [ ] Live tests 8-12 from `TESTING.md` pass on the Linux machine
|
||||
|
||||
## Step 0: Install and configure todoman
|
||||
|
||||
### Install
|
||||
|
||||
```bash
|
||||
# Debian/Ubuntu (the agent's Linux machine)
|
||||
pip install todoman
|
||||
|
||||
# macOS (Homebrew)
|
||||
brew install todoman
|
||||
```
|
||||
|
||||
The CLI command is `todo`.
|
||||
|
||||
### Configure
|
||||
|
||||
Create `~/.config/todoman/config.py`:
|
||||
|
||||
```python
|
||||
path = "~/.openclaw/workspace/calendars/tasks/"
|
||||
date_format = "%Y-%m-%d"
|
||||
time_format = "%H:%M"
|
||||
default_due = 24
|
||||
default_priority = 0
|
||||
humanize = True
|
||||
```
|
||||
|
||||
### Verify
|
||||
|
||||
```bash
|
||||
# Should list todos (or show empty list without errors)
|
||||
todo list
|
||||
```
|
||||
|
||||
## Step 1: Migrate pending reminders
|
||||
|
||||
Two items are pending in `reminders/active.md`:
|
||||
|
||||
```bash
|
||||
SKILL_DIR=~/.openclaw/workspace/skills/calendar
|
||||
|
||||
$SKILL_DIR/scripts/calendar.sh todo add \
|
||||
--summary "跟进iui保险报销" \
|
||||
--due "2026-03-25" \
|
||||
--priority medium \
|
||||
--description "确认iui(人工授精)费用保险报销进度,避免过期"
|
||||
|
||||
$SKILL_DIR/scripts/calendar.sh todo add \
|
||||
--summary "打电话给progyny问iui报销" \
|
||||
--due "2026-04-04" \
|
||||
--priority medium \
|
||||
--description "询问iui报销相关事宜"
|
||||
```
|
||||
|
||||
Note: `todo add` emails each item to `mail@luyx.org`. This is expected.
|
||||
|
||||
Verify:
|
||||
```bash
|
||||
$SKILL_DIR/scripts/calendar.sh todo list
|
||||
```
|
||||
|
||||
## Step 2: Set up cron
|
||||
|
||||
Ask the agent to set up a daily cron job via `openclaw cron`:
|
||||
|
||||
> Set up a daily cron at 8:00 AM PST that runs:
|
||||
> `~/.openclaw/workspace/skills/calendar/scripts/calendar.sh todo check`
|
||||
> and emails the output to mail@luyx.org with subject "📋 今日待办清单"
|
||||
|
||||
The old `reminder_check.py` cron should be removed by the agent at the same time.
|
||||
|
||||
## Step 3: Verify
|
||||
|
||||
- [ ] `todo list` (todoman directly) shows both migrated items
|
||||
- [ ] `calendar.sh todo list` shows both items with Chinese priority labels
|
||||
- [ ] `vdirsyncer sync` completes without errors
|
||||
- [ ] Todos appear on phone/CalDAV client
|
||||
- [ ] Next morning's cron email arrives with the new format
|
||||
|
||||
## Step 4: Clean up
|
||||
|
||||
After a few days of successful operation:
|
||||
|
||||
```bash
|
||||
# Remove old reminder system
|
||||
rm scripts/reminder_check.py
|
||||
rm -r reminders/
|
||||
```
|
||||
|
||||
## Rollback
|
||||
|
||||
If something goes wrong, the old system is still intact until Step 4:
|
||||
- `reminders/active.md` is unchanged
|
||||
- `scripts/reminder_check.py` still works
|
||||
- Re-add the old cron entry to restore the previous behavior
|
||||
@@ -436,7 +436,7 @@ def _days_until(due_val):
|
||||
|
||||
|
||||
def _urgency_label(days):
|
||||
"""Urgency label with emoji, matching reminder_check.py style."""
|
||||
"""Urgency label with emoji."""
|
||||
if days is None:
|
||||
return "❓ 日期未知"
|
||||
elif days < 0:
|
||||
|
||||
Reference in New Issue
Block a user