This website requires JavaScript.
Explore
Help
Sign In
earthjasonlin
/
ai-mail-bot
Watch
1
Star
0
Fork
0
Code
Issues
Pull Requests
Actions
Packages
Projects
Releases
Wiki
Activity
94
Commits
1
Branch
0
Tags
51064e48aa0a76a5d2fa968c77c5140e04f44edd
Commit Graph
94 Commits
This Branch
This Branch
All Branches
feat: AI reply suggestions show as copyable code block, user edits before sending - Click suggestion -> show text in backtick code block (tap to copy) - Enter awaiting_reply state so user can edit/send like normal reply - No direct email sending on selection anymore - Tests: 3/3 passing
earthjasonlin
2026-07-17 20:23:59 +08:00
51064e48aa
feat: AI reply modes - full (formal email) and short (concise) - Split 'AI回复' button into 'AI完整回复' and 'AI简洁回复' - Full mode: complete email format with greeting/signature, 300 char limit - Short mode: brief text message style, 50 char limit - Style persists in conversation state for regen/hint consistency - Tests: 6/6 passing
earthjasonlin
2026-07-17 20:14:48 +08:00
ab2bf7facb
fix: restore links when returning to summary view _summary_keyboard was called without links param in VIEW_SUMM handler, causing extracted links to disappear after viewing original text.
earthjasonlin
2026-07-17 20:10:18 +08:00
2a9be9896f
fix: read Telegram caption field for media messages Telegram sends text in 'caption' field (not 'text') when message has media. Handle both cases: text or caption, with text taking priority.
earthjasonlin
2026-07-17 20:04:27 +08:00
2f29e03cec
fix: send reply immediately on media-only message, no accumulation - Remove accumulation logic: media-only now sends as reply directly - All 3 cases (text-only, media-only, text+media) send immediately - Tests: 4/4 passing
earthjasonlin
2026-07-17 19:53:38 +08:00
b2e219ece5
style: simplify media accumulation - silent accumulate, immediate send on text
earthjasonlin
2026-07-17 19:52:08 +08:00
131e440d6b
fix: add missing account_idx to save_email_context in tg_send_and_mark
earthjasonlin
2026-07-17 19:36:50 +08:00
4002dec33c
feat: support attachments in manual reply (photo/video/document/voice) - Add _extract_media: extract media info from Telegram messages - Add _download_tg_file: download files from Telegram API - Modify _handle_message: accumulate attachments in awaiting_reply, send with text - Modify _handle_update: process messages without text (media-only) - Modify smtp_client.send_reply: support MIME multipart with attachments - Add comprehensive tests (11 tests, all passing)
earthjasonlin
2026-07-17 19:04:27 +08:00
d76a119190
fix: save_conversation in CALLBACK_HINT, move AI hint to thread pool
earthjasonlin
2026-07-17 18:45:40 +08:00
d05277581c
fix: parse_mode always MarkdownV2, add MEMORY.md with project rules
earthjasonlin
2026-07-17 18:36:53 +08:00
fe24a07d15
fix: move regenerate to AI thread pool, fix parse_mode None error
earthjasonlin
2026-07-17 18:30:57 +08:00
0abb7de5d3
perf: reduce poll timeout to 1s and wait to 50ms for faster button response
earthjasonlin
2026-07-15 19:20:52 +08:00
5ca739456d
fix: reduce long-poll timeout to 2s, make mark_as_seen async to unblock TG sender
earthjasonlin
2026-07-15 19:15:27 +08:00
c26d8aa294
fix: clear all database tables on startup
earthjasonlin
2026-07-15 19:09:41 +08:00
c940a456bc
fix: clear processed_emails on startup to avoid stale state
earthjasonlin
2026-07-15 19:09:02 +08:00
b226f0b597
fix: add error logging for send_thinking failures in email poller
earthjasonlin
2026-07-15 19:02:59 +08:00
687e60ede4
fix: increase Telegram long-poll timeout to 5s and HTTP timeout to 15s
earthjasonlin
2026-07-15 18:51:04 +08:00
da1b266350
feat: show email subject and sender in all status messages
earthjasonlin
2026-07-15 18:39:58 +08:00
dcdfba11fa
refactor: split TG worker into poller (callbacks) and sender (email summaries) threads
earthjasonlin
2026-07-15 18:35:01 +08:00
2822075f2f
fix: process one queued email per poll cycle to keep callbacks responsive
earthjasonlin
2026-07-15 18:32:42 +08:00
2744d9dd77
fix: import is_uid_processed instead of is_uids_processed
earthjasonlin
2026-07-15 18:25:57 +08:00
17514302f9
fix: ensure data directory exists before DB connection in all threads
earthjasonlin
2026-07-15 18:18:24 +08:00
d42022cc2e
refactor: replace all in-memory state with SQLite database
earthjasonlin
2026-07-14 14:49:23 +08:00
54c4bf00fb
feat: AI generates plain_text field, view full text shows readable version instead of HTML
earthjasonlin
2026-07-14 14:37:12 +08:00
c3132f746a
fix: remove all body truncation, show full email text everywhere
earthjasonlin
2026-07-14 14:34:17 +08:00
dd7fc61fd4
prompt: detailed instructions for extracting unsubscribe links from promotional emails
earthjasonlin
2026-07-13 08:38:05 +08:00
5113d78662
fix: use threading.Event for immediate shutdown instead of sleep loops
earthjasonlin
2026-07-13 08:34:02 +08:00
8b885f1c4c
prompt: emphasize extracting unsubscribe links from promotional emails
earthjasonlin
2026-07-13 08:30:44 +08:00
8b577b4c12
fix: use ellipsis character instead of dots in status messages for MarkdownV2 compatibility
earthjasonlin
2026-07-13 08:28:23 +08:00
26468aa43d
fix: omit parse_mode from payload when None instead of sending null
earthjasonlin
2026-07-13 08:27:16 +08:00
98147e6a6c
fix: add parse_mode param to edit_message, status messages use plain text
earthjasonlin
2026-07-13 08:23:42 +08:00
bd5b824a6a
feat: three-stage status: 获取邮件中 -> 等待处理 -> AI思考中
earthjasonlin
2026-07-13 08:19:36 +08:00
01504e6295
feat: two-stage status messages: 获取邮件中 -> AI思考中
earthjasonlin
2026-07-13 08:15:25 +08:00
02b0941ed0
revert: use debug log for unselectable folders instead of warning
earthjasonlin
2026-07-13 08:11:30 +08:00
85b02651b9
fix: quote folder names in IMAP SELECT for folders with spaces
earthjasonlin
2026-07-13 08:10:39 +08:00
e74ae8be88
fix: mark_as_seen uses readonly=False to actually set Seen flag
earthjasonlin
2026-07-13 08:05:40 +08:00
f38259e4bb
fix: skip NoSelect folders, clean up debug logging
earthjasonlin
2026-07-13 08:04:26 +08:00
5368812e45
debug: add skip_uids logging to diagnose re-fetch issue
earthjasonlin
2026-07-13 07:54:13 +08:00
8c088ddff5
fix: never discard from _processing_uids to prevent re-fetching
earthjasonlin
2026-07-13 07:49:09 +08:00
0ec2048bc5
fix: skip already-processing UIDs at FETCH level to avoid downloading email content
earthjasonlin
2026-07-13 07:35:28 +08:00
155a6dfc53
fix: restore -FLAGS Seen after FETCH, protected by _processing_uids
earthjasonlin
2026-07-13 07:13:08 +08:00
d31ec18ea3
fix: add _processing_uids to prevent re-fetching emails being processed
earthjasonlin
2026-07-13 07:12:43 +08:00
02cf4b88b6
chore: remove accidental file
earthjasonlin
2026-07-13 06:57:28 +08:00
ae140df3fb
fix: login without selecting INBOX first so conn.list() returns all folders
earthjasonlin
2026-07-13 06:57:06 +08:00
e9398526e6
feat: scan all IMAP folders for unread emails, not just INBOX
earthjasonlin
2026-07-13 00:16:28 +08:00
479b855390
prompt: force simplified Chinese for all AI outputs except reply suggestions
earthjasonlin
2026-07-13 00:12:50 +08:00
46bc7c7057
fix: keep pending_uids until TG send completes to prevent duplicate processing
earthjasonlin
2026-07-12 23:51:45 +08:00
bbc43f8972
prompt: refine link extraction to exclude promotional links
earthjasonlin
2026-07-12 10:15:25 +08:00
87e4b0b01e
feat: show thinking indicator during AI processing, accept non-numeric verification codes
earthjasonlin
2026-07-11 22:54:06 +08:00
fc4c5a175c
fix: mark emails back as UNSEEN after FETCH to counter server auto-read
earthjasonlin
2026-07-11 22:45:31 +08:00
1c7d0c1b00
First
Previous
1
2
Next
Last