feat: IMAP mail sync with thread-to-contact matching (PRD §6.1)

Real IMAP connection via imapflow library:
- Connects to IMAP server (IMAPFlow, TLS on port 993)
- Fetches recent messages (configurable limit, default 20)
- Extracts: from, fromEmail, subject, date, snippet (200 chars)
- Thread-to-contact matching (PRD §6.1):
  1. Match sender email against persons table
  2. If no person match, extract domain and match against company.website
  3. Returns matchedCompany + matchedPerson for each email
- Audit-logged (action: crm.mailsync:imap)
- Zod validated (host, port, user, password, folder, limit)
- 502 on IMAP connection failure with detail
- 400 on validation failure

Tested: invalid creds → 502 'IMAP connection failed', missing host → 400
This commit is contained in:
Z User committed 2026-10-27 22:50:50 +00:00
1 parent 7acc0c5451
commit e45b68bb8b
1089 files changed
+260614

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
# 简历信息收集问题清单
分 3 轮问,不要一次性塞给用户。
## 第 1 轮:基本信息(必问)
1. 你的姓名 + 联系方式(手机、邮箱,可选 GitHub / 作品集)
2. 学历(学校 + 专业 + 学历层次 + 毕业年份;多段教育依次列)
3. 你目前 / 最近一份工作的:公司、岗位、起止时间
## 第 2 轮:经历主体(必问)
针对每段工作 / 实习 / 项目,按这个套路问:
- 这段经历你**主要负责什么**?
- 有哪些**具体的事情**是你独立或主导做的?(关键词:你"做了什么",不是"参与了什么")
- **结果如何**?有没有可以量化的数字(用户量、转化率、收入、效率提升、排名等)
- 这段经历你最得意的**一件事**是什么?
如果用户记不清数字,可以这样追问:
- "大致量级也可以,比如 10 万 / 百万 / 千万"
- "百分比记不清的话,给一个 range,比如『大约 20-30%』"
- "如果完全没办法估,我会标成『[需补具体数字]』,你后面填"
## 第 3 轮:补充信息(可选)
- 技能 / 工具:编程语言、框架、设计 / 数据 / 办公工具
- 语言能力:英语 / 其他语种 + 等级
- 证书 / 获奖:仅写有含金量的(CFA Level 2、ACM 区域赛、PMP 等)
- 兴趣 / 其他:除非真的有亮点(比如马拉松、独立游戏作品),否则不写
## 应届生补充问
- 校园经历(学生会、社团、志愿者)—— 但只挑能体现"领导 / 组织 / 推动力"的写
- 课程项目 —— 挑跟目标岗位相关的 1~2 个
- GPA / 排名 / 奖学金 —— 高于 3.5/4.0 或专业前 20% 才写
## 转行候选人补充问
- 你为什么想转到这个方向?
- 你已经为转行做了哪些准备(自学、项目、副业、证书)?
- 原岗位有哪些**可迁移技能**?(举具体例子)
把这些信息会用到一段简短的"个人简介 / Career Summary"里,化解 HR 看到转行简历时的困惑。