feat: auto-generate action items from transcripts#57
Conversation
|
Block by #55 |
|
⏸️ Auto-merge paused: 6 unchecked checkbox(es) in PR body. Merge will proceed automatically once all tasks are checked and a new push triggers the workflow. |
Add LLM-powered action item extraction that runs in parallel with summary generation after recording ends. Includes structured JSON parsing with markdown fallback, grouped checklist UI, and export to Apple Reminders/Calendar via EventKit. - ActionItem SwiftData model + SchemaV7 migration - ActionItemParser with JSON + markdown checklist fallback - PromptBuilder.buildActionItemExtractionPrompt() for structured extraction - BackgroundSummaryService parallel dispatch (separate task dict) - LLMRole.actionItems for independent model profile config - ActionItemListView with collapsible grouped checklist - RemindersExportService for Apple Reminders/Calendar export - ActionItemMarkdownFormatter for clipboard export - 21 new tests (ActionItemParserTests + ActionItemMarkdownFormatterTests)
Use generateStructured() with JSON schema when the LLM engine supports it (OpenAI, Anthropic, Ollama). Falls back to free-text generation + ActionItemParser for engines without support. Depends on #55 (structured output support).
2a061e7 to
0a16320
Compare
|
⏸️ Auto-merge paused: 6 unchecked checkbox(es) in PR body. Merge will proceed automatically once all tasks are checked and a new push triggers the workflow. |
Review Notes — Auto-generate Action Items (#11)1370 行改动、21 文件,这是个大 PR。几个基于最新调研的建议: 1. 与结构化摘要合并PR #59 的 2. 竞品参考:Fireflies 的 agentic 模式Fireflies 最新版支持从 action items 自动创建 JIRA/Asana ticket。虽然我们暂时不需要做到这个程度,但 3. Apple Reminders 导出的权限EventKit 导出到 Reminders 需要 4. LLMRole.actionItems 的模型选择新增的 |
|
Manual: Record → Stop → Verify action items appear in session detail |
|
Manual: Export to Reminders → Verify items created in Reminders app |
|
inline warning真的是一个大天才,根本看不见。action直接占了这么大的UI的空间,我甚至找不到内容。 |
|
Manual: Export to Calendar → Verify events created for items with due dates |
… permissions - Auto-extraction disabled by default (actionItemExtractionEnabled in SummarizerConfig) - Settings > Summarization toggle to enable auto-extraction - Action items moved from inline section to toolbar popover (no longer steals content space) - Inline error text replaced with .alert() dialogs (visible feedback) - Success/empty result alerts for manual extraction - Calendar export hidden when no items have due dates - Added NSRemindersUsageDescription and reminders entitlement for Reminders export - Stricter prompt: only extracts explicit commitments, not topic summaries - State reset on session navigation (showActionItemsPopover, exportSuccessMessage)
✅ Claude Code Review: APPROVE
|
|
⏸️ Auto-merge paused: 1 unchecked checkbox(es) in PR body. Merge will proceed automatically once all tasks are checked and a new push triggers the workflow. |
Summary
EKReminder) and Calendar (EKEvent) via EventKitActionItemMarkdownFormatterLLMRole.actionItemsfor independent model profile configurationActionItemmodel +RecordingSession.actionItemsrelationshipNew files (8)
ActionItem.swift,SchemaV7.swift,ActionItemParser.swift,ActionItemMarkdownFormatter.swift,RemindersExportService.swift,ActionItemListView.swift,ActionItemParserTests.swift,ActionItemMarkdownFormatterTests.swiftModified files (13)
RecordingSession.swift,NotetakerMigrationPlan.swift,LLMModelProfile.swift,notetakerApp.swift,PromptBuilder.swift,SummarizerService.swift,BackgroundSummaryService.swift,RecordingViewModel.swift,SessionDetailView.swift,TranscriptExporter.swift,UnitTests.xctestplan,LLMModelProfileTests.swift,CLAUDE.mdCloses #11
Test plan
xcodebuild -scheme notetaker -configuration Debug build)🤖 Generated with Claude Code