Skip to content

feat: meeting recap email generation#110

Open
StevenLi-phoenix wants to merge 1 commit intomainfrom
pr/meeting-recap-102
Open

feat: meeting recap email generation#110
StevenLi-phoenix wants to merge 1 commit intomainfrom
pr/meeting-recap-102

Conversation

@StevenLi-phoenix
Copy link
Copy Markdown
Owner

Summary

  • Add MeetingRecapFormatter service that formats session data (overall summary, chunk summaries, transcript excerpt) into a structured meeting recap email body
  • Add MeetingRecapSheet view with subject preview, optional recipients field, copy-to-clipboard, and open-in-mail (mailto:) actions
  • Add envelope toolbar button in SessionDetailView (visible when session has summaries)
  • 13 unit tests covering subject formatting, body generation, duration display, time formatting, mailto URL construction

Test plan

  • Build succeeds (xcodebuild -scheme notetaker -configuration Debug CODE_SIGNING_ALLOWED=NO build)
  • All 13 MeetingRecapFormatterTests pass
  • Manual: open a session with summaries, click envelope icon, verify recap content
  • Manual: click "Copy" and paste into text editor
  • Manual: click "Open in Mail" and verify mail client opens with pre-filled content
  • Manual: verify envelope button hidden when session has no summaries

Closes #102

Add MeetingRecapFormatter service that formats session data (summary,
chunks, transcript excerpt) into a meeting recap email. MeetingRecapSheet
provides a preview with copy-to-clipboard and open-in-mail actions.
Toolbar button in SessionDetailView shows when summaries exist.

Closes #102
@claude
Copy link
Copy Markdown

claude bot commented Mar 28, 2026

✅ Claude Code Review: APPROVE

Feature is cleanly implemented using correct project patterns (nonisolated enum, Sendable data carrier, DS tokens, state reset on session change), has 13 unit tests covering all formatter paths, and presents no security or correctness issues.

@github-actions
Copy link
Copy Markdown
Contributor

⏸️ Auto-merge paused: 4 unchecked checkbox(es) in PR body. Merge will proceed automatically once all tasks are checked and a new push triggers the workflow.

@StevenLi-phoenix
Copy link
Copy Markdown
Owner Author

Notes — Meeting Recap Email (#102)

371 行、4 文件。

1. MeetingRecapFormatter

nonisolated enum + 纯格式化逻辑——完全可测试。

2. mailto: URL 方案

mailto: 是跨邮件客户端的最安全方式。注意:

  • subject 和 body 需要 URL encode(addingPercentEncoding(withAllowedCharacters:)
  • 长 body 可能超过 URL 长度限制(Safari 约 2000 字符,Mail.app 约 8000)
  • 建议对超长 recap,fallback 到"复制到剪贴板 + 打开 Mail.app"

3. 收件人自动填充

PR 是否从 ScheduledRecording.calendarEventIdentifier 获取参会者邮箱?这是 CalendarService 通过 EventKit EKEvent.attendees 可以做到的。非常有价值的自动化。

4. 与 Auto-export 集成

PR #86 的 auto-export pipeline 可以添加 "email recap" action type。录音结束 → 摘要生成 → 自动弹出 recap 邮件编辑器。

5. 格式改进建议

  • 支持 HTML 邮件格式(不仅仅是纯文本)——更好的可读性
  • Action items 用 checkbox 列表(- [ ] item
  • 底部添加"由 Notetaker 生成"签名(可通过 Settings 关闭)

@StevenLi-phoenix
Copy link
Copy Markdown
Owner Author

Email 生成安全注意

Meeting recap email 涉及敏感内容。建议:

  1. 预览步骤必须有(不要直接发送)
  2. 收件人列表不应从 transcript 自动提取(隐私风险)
  3. 考虑用 MFMailComposeViewController / NSSharingService 打开用户的邮件客户端,而非直接发送
  4. 这样避免了存储 SMTP 凭证的安全问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

会议回顾邮件自动生成 (Auto-generate Meeting Recap Email)

1 participant