Commit Graph

81 Commits

Author SHA1 Message Date
Yanxin Lu
e1f1c0f334 calendar: add EXDATE support for cancelling single occurrences of recurring events
event delete on a recurring event previously deleted the entire .ics file,
killing the whole series. Now requires --date (adds EXDATE) or --all (deletes
series) for recurring events, refusing to act without either flag.
2026-03-26 09:19:02 -07:00
Yanxin Lu
d2bc01f16c calendar: dedup todo lookups, robust khal search, cleanup improvements
- Replace _find_todo_id and inline UID lookups with _find_todo in
  complete/delete/edit (removes ~40 lines of duplicated logic)
- Handle khal search returning exit code 1 for no results
- Sync calendar before event list for fresh data
- Use shutil.rmtree for temp dir cleanup
- Use datetime.fromisoformat instead of manual format strings
2026-03-25 09:47:20 -07:00
Yanxin Lu
371209cf35 Merge branch 'main' of ssh://git.luyanxin.com:8103/lyx/youlu-openclaw-workspace
merge
2026-03-25 09:32:40 -07:00
Yanxin Lu
35f048dd83 calendar: add recurring events, event management, and safety rules
Add --rrule flag to send with DTSTART/BYDAY validation (RFC 5545).
Add event list (via khal) and event delete (safe single-event removal).
Document safety rules from 2026-03-25 incident: always dry-run recurring
events, never rm .ics files, space out SMTP sends.
2026-03-25 09:32:22 -07:00
ee7e5e39d7 Daily backup 2026-03-25 00:00:03 2026-03-25 00:00:03 -07:00
Yanxin Lu
810a9923f9 calendar: drop unnecessary --no-interactive flag from todo edit
todoman skips interactive mode automatically when changes are provided.
2026-03-24 21:58:52 -07:00
Yanxin Lu
734790a599 calendar: add todo edit command
Allow editing todo fields (due date, priority) in place via todoman,
instead of requiring delete + recreate. Updates all docs for consistency.
2026-03-24 21:56:23 -07:00
Yanxin Lu
20ee61498c daily summary removed 2026-03-24 15:36:46 -07:00
Yanxin Lu
a39233a299 daily summary 2026-03-24 14:55:59 -07:00
Yanxin Lu
a77d4afb43 memory: replace duplicated user background with reference to USER.md 2026-03-24 14:42:03 -07:00
Yanxin Lu
f51b14f51b remove avatar 2026-03-24 14:38:37 -07:00
Yanxin Lu
1b2db17967 user: update USER.md with context, partner info, and hobbies 2026-03-24 14:37:53 -07:00
Yanxin Lu
7630782553 resolve merge conflict in MEMORY.md: keep clean version 2026-03-24 12:48:54 -07:00
Yanxin Lu
9bfb620cea docs: update MEMORY.md and TOOLS.md for cron fix and cleanup
- Update backup section to reflect systemEvent fix (2026-03-24)
- Remove ephemeral "今日处理" snapshot from MEMORY.md
- Remove dead News Digest section from TOOLS.md
- Add OpenClaw Cron reference section to TOOLS.md
2026-03-24 12:46:30 -07:00
8d416abfa0 docs: 修复备份任务记录 + 精简 TOOLS.md 2026-03-24 10:15:57 -07:00
df7cdffc13 Daily backup 2026-03-24 10:02:50 2026-03-24 10:02:50 -07:00
33f0dac248 Daily backup 2026-03-24 09:58:36 -07:00
Yanxin Lu
b2ff8effd4 calendar: fix stale docs and remove unnecessary METHOD from todo add
- Remove duplicate email rule in TOOLS.md
- Add todo mutations to sync description in TOOLS.md
- Remove METHOD:REQUEST from todo add ICS (no longer emailed)
- Update todo check description in SKILL.md
2026-03-23 14:48:05 -07:00
Yanxin Lu
ab9f7da592 calendar: remove self-notification emails (CalDAV sync replaces them)
Remove three redundant email flows since all devices sync via CalDAV:
- Auto-adding mail@luyx.org as attendee on outgoing invites
- Forwarding invites to mail@luyx.org on accept/tentative
- Emailing todos to mail@luyx.org on todo add
2026-03-23 14:27:28 -07:00
48e179c8de Daily backup 2026-03-23 10:02:47 2026-03-23 10:02:47 -07:00
Yanxin Lu
13986aa3ab cleanup: remove old reminder system and unused crontab files
Todo management now lives entirely in skills/calendar/ via VTODO + todoman.
2026-03-23 09:53:49 -07:00
Yanxin Lu
31efcffb19 calendar: fix completed field name from todoman --porcelain output 2026-03-22 16:09:45 -07:00
Yanxin Lu
4ef7b1e05b calendar: use todoman --yes flag for delete instead of piping stdin 2026-03-22 16:03:12 -07:00
Yanxin Lu
912bcf53bd calendar: fix _days_until to handle Unix timestamps from todoman --porcelain 2026-03-22 15:50:43 -07:00
Yanxin Lu
cf8158c7cc calendar: update TESTING.md with todoman verification steps 2026-03-22 15:43:18 -07:00
Yanxin Lu
261544b50a docs: update TOOLS.md and MEMORY.md for calendar+todoman migration 2026-03-22 15:02:01 -07:00
Yanxin Lu
383b33cc30 calendar: use todoman for VTODO list/complete/delete/check
Replaces custom .ics parsing with todoman CLI (--porcelain for JSON).
todo add still uses icalendar directly (needs ICS creation + email).
Updates MIGRATION.md with todoman install/config instructions.
2026-03-22 15:00:20 -07:00
Yanxin Lu
1750a0d921 calendar: add migration guide from reminder_check.py to VTODO 2026-03-22 14:39:59 -07:00
Yanxin Lu
44fbbea29b VTODO skill 2026-03-22 14:10:54 -07:00
Yanxin Lu
ceb7af543b VTODO 2026-03-22 14:10:41 -07:00
Yanxin Lu
da26f84947 Merge branch 'main' of ssh://git.luyanxin.com:8103/lyx/youlu-openclaw-workspace
merge
2026-03-20 18:59:19 -07:00
Yanxin Lu
71672b31ca email-processor: fix concurrency bugs and several other issues
- Add fcntl file locking around read-modify-write cycles on both
  decision_history.json and pending_emails.json to prevent data
  corruption from parallel processes
- Pass --page-size 500 to himalaya envelope list to avoid silently
  missing emails beyond the default first page
- Use ollama.Client(host=...) so the config.json host setting is
  actually respected
- Fall back to sender-only matching in compute_confidence when LLM
  returns no valid taxonomy tags, instead of always returning 50%
- Fix _format_address to return empty string instead of literal
  "None" or "[]" for missing address fields
2026-03-20 18:58:13 -07:00
6bea16d391 Daily backup 2026-03-19 07:00 UTC 2026-03-19 00:00:47 -07:00
Yanxin Lu
4e3c6acab6 calendar-invite: strip METHOD from ICS before CalDAV storage
CalDAV servers (Migadu) reject ICS files with METHOD:REQUEST/REPLY
as it's an iTIP email concept, not a storage property. Strip it
when saving to local calendar, for both send and reply flows.
2026-03-18 14:54:33 -07:00
Yanxin Lu
b8ba4adec5 calendar-invite: add VALARM reminder, fix terminology, remove dead code
- Add 1-day reminder (VALARM) to all sent invites
- Fix datetime.utcnow() deprecation → datetime.now(timezone.utc)
- Rename "message ID" → "envelope ID" in SKILL.md for consistency
- Remove unused _himalaya() and _himalaya_with_account() helpers
2026-03-18 14:44:08 -07:00
Yanxin Lu
765825a8d1 using MIME instead of MML 2026-03-18 14:36:29 -07:00
c4125d1145 Merge branch 'main' of ssh://luyanxin.com:8103/lyx/youlu-openclaw-workspace
merge
2026-03-18 13:40:45 -07:00
0dea793b58 calendar sync 2026-03-18 13:40:04 -07:00
Yanxin Lu
de6528335c calendar invite 2026-03-18 13:36:25 -07:00
Yanxin Lu
d35e7b1475 Merge branch 'main' of ssh://git.luyanxin.com:8103/lyx/youlu-openclaw-workspace
merge
2026-03-13 11:19:23 -07:00
Yanxin Lu
36143fcd93 Add digest command to email processor
Read-only summary of recent decisions, grouped by action with
[auto]/[user] markers. Supports --recent N for multi-day lookback.
2026-03-13 11:17:43 -07:00
65872775e3 cleanup: remove all pilates monitor references from config files 2026-03-12 11:44:34 -07:00
9448abc8ab doc: remove deleted pilates monitor from MEMORY 2026-03-12 11:42:24 -07:00
d8191c9e86 doc: mark UCLA pilates monitor as deleted 2026-03-12 11:37:58 -07:00
17435aa7e4 doc: update backup config - remove workspace_backup.sh reference 2026-03-12 09:13:01 -07:00
c4b19b7664 Update: prune pilates monitor, update reminders, sync memory files 2026-03-12 09:10:56 -07:00
Yanxin Lu
3c54098b1d Remove scan_index, use envelope_id (IMAP UID) as single identifier
scan_index created confusion for the OpenClaw agent which would
sometimes reference emails by scan_index and sometimes by envelope_id.
Since himalaya's envelope ID is an IMAP UID (stable, never recycled),
it works as the sole identifier for review commands.
2026-03-07 22:01:02 -08:00
2c00649488 updated email processor 2026-03-05 16:24:35 -08:00
Yanxin Lu
723c47bbb3 Clean up stale comments, dead code, and code quality issues
- Remove dead code: unused PENDING_FILE, _extract_domain(), sender_domain
  field, imap_uid fallback, check_unseen_only config key
- Fix stale comments: removed tag references in README and docstrings,
  top_domains -> top_senders, 1-based number -> scan_index number
- Make _extract_email_address public (used by 3 modules)
- Extract _format_address helper to deduplicate from/to parsing
- Batch pending queue disk I/O in review act/accept (load once, save once)
- Reuse cleared pending dict in scan instead of redundant disk load
- Track envelope IDs during scan loop to catch duplicates
- Fix default confidence_threshold 75 -> 85 to match config and docs
- Update get_relevant_examples default n=10 -> n=5 to match caller
- Add graceful error for --recent with non-numeric value
2026-03-05 15:28:05 -08:00
Yanxin Lu
361e983b0f Stable review indices and deduplicate tag taxonomy
Review items now get a stable scan_index assigned during scan, so
sequential review commands don't target wrong emails after earlier
items are resolved. Indices reset on each new scan.

Deduplicate tag taxonomy from 21 to 14 tags: drop invoice/payment
(covered by billing), delivery (covered by shipping), discount/marketing
(covered by promotion), and generic notification/update tags.
2026-03-05 15:02:49 -08:00