Skip to content

feat: external integration API (URL scheme + macOS distributed notifications)#457

Open
josepferrer wants to merge 2 commits into
Zackriya-Solutions:devtestfrom
josepferrer:feat/external-integration-api
Open

feat: external integration API (URL scheme + macOS distributed notifications)#457
josepferrer wants to merge 2 commits into
Zackriya-Solutions:devtestfrom
josepferrer:feat/external-integration-api

Conversation

@josepferrer
Copy link
Copy Markdown

Summary

  • Add meetily:// URL scheme for external control via tauri-plugin-deep-link (start, stop, toggle recording)
  • Add macOS distributed notifications (NSDistributedNotificationCenter) broadcasting 4 recording lifecycle events
  • All commands route to existing recording infrastructure — no new recording logic, no UI changes

Inbound API (URL Scheme)

URL Action
meetily://start-recording Start recording with default devices
meetily://start-recording?name=Team%20Standup Start with custom meeting name
meetily://stop-recording Stop recording and save
meetily://toggle-recording Start if idle, stop if recording

Outbound API (macOS Distributed Notifications)

Notification Payload
com.meetily.ai.recording.started { meeting_name }
com.meetily.ai.recording.stopped { meeting_name, folder_path }
com.meetily.ai.recording.error { error }
com.meetily.ai.transcription.completed { meeting_name, folder_path }

Files changed

  • Cargo.toml — added tauri-plugin-deep-link
  • tauri.conf.json — deep-link plugin config + permission
  • Info.plistCFBundleURLTypes for meetily:// scheme
  • package.json — added @tauri-apps/plugin-deep-link
  • New distributed_notifications.rs — macOS NSDistributedNotificationCenter via objc FFI
  • lib.rs — deep-link plugin registration + URL handler routing
  • recording_commands.rs — distributed notification posts at all event emission sites
  • transcription/worker.rstranscription-all-complete event + notification at true completion

Test plan

  • cargo check passes
  • pnpm run tauri:build produces working .app bundle
  • open "meetily://start-recording?name=Test" starts recording
  • open "meetily://stop-recording" stops recording
  • open "meetily://toggle-recording" toggles correctly
  • Distributed notification listener receives recording.started with correct payload
  • Distributed notification listener receives recording.stopped with meeting_name + folder_path
  • stop-recording when not recording is a silent no-op
  • start-recording when already recording is a silent no-op

🤖 Generated with Claude Code

josepferrer and others added 2 commits May 6, 2026 16:21
…bility

Tauri 2.11 introduced __tauri_command_name_ prefixed items alongside the
existing __cmd__ prefix. Since Cargo.lock is gitignored, fresh clones
resolve to Tauri 2.11+ and fail to compile. Adding both re-export variants
ensures the build works with any Tauri 2.x version.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tifications)

Add meetily:// URL scheme for external control and NSDistributedNotificationCenter
broadcasting for external observability. Enables automation tools, scripts, and
accessibility software to control and react to Meetily recording lifecycle.

Inbound (URL scheme - 3 commands):
- meetily://start-recording[?name=...] — start with optional meeting name
- meetily://stop-recording — stop and save
- meetily://toggle-recording — start if idle, stop if recording

Outbound (macOS distributed notifications - 4 events):
- com.meetily.ai.recording.started
- com.meetily.ai.recording.stopped
- com.meetily.ai.recording.error
- com.meetily.ai.transcription.completed

No new recording logic — all commands route to existing infrastructure.
No UI changes. No breaking changes. macOS-only for distributed notifications,
URL scheme works cross-platform via tauri-plugin-deep-link.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sujithatzackriya sujithatzackriya changed the base branch from main to devtest May 11, 2026 13:06
@sujithatzackriya
Copy link
Copy Markdown
Collaborator

Thank you for contributing @josepferrer We are reviewing this internally and will let you know the updates.

bobby-claw pushed a commit to NERV-es/meetily that referenced this pull request Jun 1, 2026
…ackriya-Solutions#457 Zackriya-Solutions#430 Zackriya-Solutions#470 Zackriya-Solutions#420

Ported from upstream Zackriya-Solutions/meetily:
- Zackriya-Solutions#475: Whisper vocabulary hints (meeting domain support)
- Zackriya-Solutions#478: Export transcripts as TXT/VTT with file-save dialog
- Zackriya-Solutions#457: Integration API via deep-link URL scheme + distributed notifications
- Zackriya-Solutions#430: Apple Speech engine (cfg-gated behind 'apple-speech' feature)
- Zackriya-Solutions#470: BlockNote v0.16 editor upgrade
- Zackriya-Solutions#420: Monochrome tray icon (proper macOS template image)

Apple Speech engine gated behind feature flag due to upstream
Send/Sync issues with objc2 types — enable with:
  cargo build --features apple-speech
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.

2 participants