Files
meeting-assistant/openspec/changes/add-macos-meeting-integrations/design.md
T
dh 2af7933a1b
PR and Push Build/Test / build-and-test (pull_request) Failing after 19m49s
feat(macos): enable meeting integrations
2026-08-06 08:19:26 +02:00

2.7 KiB

Context

The macOS build already bundles Swift helpers for audio and menu-bar controls. Calendar and screenshot integrations are currently replaced with no-op providers at compile time, while the ASR, diarization, speaker, OCR, and workflow-agent implementations themselves are portable.

Decisions

EventKit is the preferred macOS calendar source

A bundled Swift helper reads events through EventKit. This covers calendars exposed to macOS, including Outlook accounts synchronized into Calendar, without linking Windows COM into the portable target. If Calendar Full Access is denied, the managed client falls back to the already-authorized Calendar application's automation dictionary. The helper uses a stable permission-denied exit code rather than coupling the fallback to human-readable error text. The managed providers retain the existing Teams-marker and current-meeting selection rules.

Native AppKit owns the recording prompt

The same helper displays a record/skip AppKit alert and returns the selected response to the existing IMeetingStartPromptService callback. Recording policy remains in the existing scheduler/controller.

CoreGraphics captures the active app window

The helper resolves the frontmost application and captures its foremost on-screen window as PNG. The managed screenshot service continues to own attachment naming, note updates, OCR, cropping, attendee enrichment, retries, and waits.

Portable managed features stay managed

Screenshot OCR, speaker identity, Docker-backed FunASR, FunASR diarization, Whisper-local pyannote diarization, and the AppKit/WebKit workflow editor use the same managed implementations on macOS and Windows. Platform branching is limited to the native input providers.

Diagnostics report effective behavior

A read-only endpoint returns the host platform, concrete provider names, and effective enabled switches. This supplies deterministic proof without starting a recording or mutating meeting artifacts.

Windows compatibility

The Windows target keeps its existing conditional registrations and does not compile or invoke the macOS helper. Verification must build the Windows target in addition to the portable target and tests.

Verification

  • Regression tests prove macOS resolves real providers and reports enabled capabilities.
  • Provider behavior tests prove EventKit JSON maps to calendar metadata, native prompt responses reach the callback, and PNG screenshot output reaches the screenshot interface.
  • The Swift helper provides deterministic self-test output.
  • A live macOS instance proves health, provider diagnostics, native helper packaging, calendar access, and screenshot capture.
  • A Windows-target build proves the existing Windows client still compiles with its native providers.