Public Access
- Introduced MacOsDesktopControlManifest to manage desktop control configurations. - Implemented MacOsDesktopControlService to handle the lifecycle of the macOS helper process. - Created MacOsWorkflowRulesEditorWindowService for managing workflow rules through a native window. - Developed a Swift helper for macOS that integrates with AppKit and Carbon for menu-bar controls and global hotkeys. - Added support for recording lifecycle actions via HTTP endpoints, maintaining consistency with existing Windows functionality. - Enhanced user experience by allowing macOS users to start/stop recordings and access settings through a menu-bar interface. - Documented design decisions, implementation evidence, and verification tasks for the new macOS features.
5.0 KiB
5.0 KiB
Implementation Evidence
Automated
dotnet test MeetingAssistant.Tests/MeetingAssistant.Tests.csproj --filter FullyQualifiedName~MacOsDesktopControlManifestTests --no-restore- Passed: 1, Failed: 0.
dotnet build MeetingAssistant/MeetingAssistant.csproj -f net10.0 --no-restore- Passed and produced
Native/macos-desktop-controlsas an arm64 Mach-O executable.
- Passed and produced
openspec validate add-macos-desktop-controls --strict- Passed.
- Full portable test project:
- Passed: 427.
- Failed: 9 existing macOS/environment-dependent tests: Windows path expectations, unavailable GDI+, and user-environment key resolution.
- Whole solution:
- Cannot build the Windows target on macOS without enabling cross-Windows targeting (
NETSDK1100).
- Cannot build the Windows target on macOS without enabling cross-Windows targeting (
Runtime
- Installed the rebuilt application assembly and both native helpers into the existing local LaunchAgent application directory.
- LaunchAgent restarted successfully.
/healthreturnedok.macos-desktop-controlsran as a child companion process.- The helper manifest contained six configured hotkeys, including the unchanged defaults
Ctrl+Alt+M,Ctrl+Alt+L,Ctrl+Alt+Z, andCtrl+Alt+S. - A fresh default-profile recording request created the
20260724-2015meeting note and linked artifacts. - Screenshot evidence:
tmp/macos-desktop-recording-verification.png.
Live desktop-control proof (2026-07-24)
- The installed LaunchAgent ran:
.NET hostPID23023- native
macos-desktop-controlsPID23097
- The native helper manifest exposed:
Ctrl+Alt+M->/profiles/default/recording/toggleCtrl+Alt+L->/profiles/english/recording/toggleCtrl+Alt+Z->/profiles/default/recording/abortCtrl+Alt+S->/profiles/default/meetings/screenshot/capture
- Accessibility inspection of the real AppKit menu returned:
Meeting Assistant — idleOpen agentStart meeting recording (default)Start meeting recording (english)Exit
- Visible menu screenshot:
tmp/proof-macos-menu-idle.png- The menu visibly displays the macOS equivalents
⌃⌥Mand⌃⌥L.
- Clicking
Start meeting recording (default)through the real menu produced the sampled status transitionfalse,true,false, withlaunchProfile: default, and created:Meetings/Notes/20260724-2022-note.mdMeetings/Transcripts/20260724-2022-transcript.mdMeetings/Assistant Context/20260724-2022-context.md
- Posting the HID-level
Ctrl+Alt+Mcombination produced the sampled status transitionfalse,true,false, withlaunchProfile: default. - Posting the HID-level
Ctrl+Alt+Lcombination produced an active sampled state withlaunchProfile: english. - Raw sampled status evidence:
tmp/proof-menu-recording-status.jsonltmp/proof-hotkey-recording-status.jsonltmp/proof-english-hotkey-status.jsonl
Runtime limitation
The new recording did not remain active because the local audio capture process stopped shortly after artifact creation. The desktop-control helper, menu-bar item, endpoint routing, and meeting creation were verified; sustained audio capture was not.
Open agent regression and runtime proof
- Original deterministic regression:
MacOsApplicationRegistersARealInteractiveAgentWindow- Red result: portable registration resolved exactly
NoopWorkflowRulesEditorWindowService.
- Fix:
- macOS now registers
MacOsWorkflowRulesEditorWindowService. Open agentin the native helper creates an AppKitNSWindowtitledMeeting Summary Agent.- The window hosts a WebKit chat page backed by the existing
WorkflowRulesEditorChatViewModeland agent pipeline.
- macOS now registers
- Green regression:
- Passed: 1, Failed: 0.
- Live installed runtime:
- Clicking the actual menu item created an on-screen CoreGraphics window:
- owner:
macos-desktop-controls - title:
Meeting Summary Agent - layer:
0 - bounds:
756x714
- owner:
GET /diagnostics/settings-and-logsreturned the interactive agent HTML page.
- Clicking the actual menu item created an on-screen CoreGraphics window:
Open agent prompt execution proof (2026-07-25)
- Original live failure:
Meeting Summary Agent failed: No workflow rules editor API key configured.
- Root cause:
- The LaunchAgent did not inherit the interactive shell's model API key.
- Its configured
127.0.0.1:4021model endpoint had no running service.
- Runtime configuration:
- The protected LaunchAgent environment file now supplies the local LiteLLM gateway key.
MeetingAssistant__WorkflowRulesEditor__Endpointtargets the running local gateway on port4000.- The local gateway exposes the Responses-compatible
chatgpt-gpt-5.5model alias.
- Event-stream compatibility regression:
ClientReconstructsResponseFromServerSentEventsfailed before the fix withJsonReaderException.- The client now reconstructs completed response items from LiteLLM server-sent events.
- All 11
LiteLlmResponsesChatClientTestspass.
- Live installed proof:
POST /diagnostics/settings-and-logs/chatwithReply with exactly: key-okreturned{"role":"agent","content":"key-ok"}./healthreturned successfully after deployment.