Passer au contenu principal
Les plugins de plugins/* relient l’interface React au code natif de Syntheo Desktop. Cette page décrit ce que chaque plugin expose et quelles pages utilisateur relire quand il change. Pour la place des plugins dans l’ensemble du monorepo, voir Architecture.

Anatomie d’un plugin

Chaque dossier plugins/<nom> suit la même structure : Après toute modification des commandes d’un plugin, lancez codegen, puis mettez à jour permissions/default.toml et apps/desktop/src-tauri/capabilities/default.json (plugins/AGENTS.md). Tous les plugins sont enregistrés dans apps/desktop/src-tauri/src/lib.rs, avec trois exceptions conditionnelles :
  • agent et hooks ne sont pas chargés avec la feature app-store.
  • relay n’est chargé qu’en build de debug ou avec la feature devtools.
Le nom d’un plugin ne dit pas tout : notification affiche les notifications, notify surveille le système de fichiers. Les suffixes 2 (fs2, path2, opener2, store2, sidecar2, deeplink2) désignent des extensions maison d’un plugin Tauri officiel du même nom.

Inventaire

La colonne « Interface » indique si apps/desktop/src importe le paquet @syntheo/plugin-<nom>.

Capture, transcription et dictée

transcription

  • Chemin : plugins/transcription
  • Rôle : pilote la capture du micro et de l’audio système, la transcription en direct, la transcription par lot des fichiers importés et la rétention des segments audio en attente d’envoi. C’est le plugin le plus utilisé par l’interface.
  • Commandes principales :
    • Périphériques et niveaux : list_microphone_devices, list_speaker_devices, start_microphone_level_monitor, set_mic_muted, set_speaker_muted.
    • Capture : start_capture, stop_capture, stop_capture_for_session, retry_audio_capture, update_capture_config, update_capture_credentials, get_capture_state, get_capture_snapshot, get_capture_audio_gaps.
    • Reprise après arrêt : list_stopped_captures, list_capture_recoveries, marqueurs de cycle de vie (save_capture_lifecycle_marker…).
    • Transcription en direct : flush_live_transcript, render_transcript_segments, render_session_transcript.
    • Lot et import : start_transcription, stop_transcription, begin_audio_upload, append_audio_upload, refine_batch_transcript, save_batch_transcript, reconcile_refined_speaker_clusters.
    • Sous-titres : parse_subtitle, export_to_vtt.
    • Langues : is_supported_languages_live et _batch, suggest_providers_for_languages_live et _batch, list_documented_language_codes_live et _batch.
    • Audio en mémoire : list_capture_audio_chunks, delete_transcribed_capture_audio, delete_processed_session_audio.
  • Événements : CaptureLifecycleEvent, CaptureStatusEvent, CaptureDataEvent, LiveTranscriptPersistenceEvent, SessionAudioRetentionEvent, TranscriptionEvent.
  • Dépendances internes : crates/audio, crates/db-app, crates/language, crates/storage, crates/transcript, crates/transcription-core, crates/owhisper-client, crates/owhisper-interface ; plugins db, fs-sync, settings, store2, tray.
  • Pages de doc concernées : /meetings, /import-recordings, /languages, /ai-setup, /offline, /data-and-privacy, /troubleshooting.

dictation

  • Chemin : plugins/dictation
  • Rôle : enregistre la voix, l’envoie au serveur STT et insère le texte dans l’application active. L’insertion a une implémentation Linux et une Windows (src/insertion/).
  • Commandes : show, hide, set_phase, update_amplitude, start_recording, start_system_recording, stop_recording, cancel_recording, capture_target, insert_text.
  • Dépendances internes : crates/owhisper-client, crates/owhisper-interface, crates/audio.
  • Pages de doc concernées : /dictation.

detect

  • Chemin : plugins/detect
  • Rôle : repère les applications qui utilisent le micro, respecte le mode « Ne pas déranger », lit l’accessibilité des fenêtres de réunion pour envoyer ou capturer des messages de chat, et capture les partages d’écran.
  • Commandes : list_installed_applications, list_mic_using_applications, set_respect_do_not_disturb, set_ignored_bundle_ids, set_included_bundle_ids, set_mic_active_threshold, inspect_meeting_accessibility, send_meeting_chat_message, capture_meeting_chat_messages, capture_meeting_screen_share, get_preferred_languages, get_current_locale_identifier.
  • Événements : DetectEvent (MicDetected, MicStopped, MicMuteStateChanged, SleepStateChanged…).
  • Dépendances internes : crates/detect, crates/notification-interface ; plugins settings, windows.
  • Pages de doc concernées : /automatic-capture (sections « Détecter une réunion non planifiée », « Arrêter l’écoute », « Informer les participants », « Capturer les écrans partagés », et le tableau de disponibilité par plateforme).

Autres plugins audio

Données et contenu

db

  • Chemin : plugins/db
  • Rôle : expose la base SQLite à l’interface. Applique les migrations, exécute les requêtes et pousse les changements aux abonnés.
  • Commandes : execute, execute_transaction, execute_proxy, subscribe, unsubscribe, list_meetings, get_meeting, get_meeting_transcript, get_recurring_meeting_history, apply_session_ingest, get_startup_status, wait_until_ready.
  • Dépendances internes : crates/db-core, crates/db-app, crates/db-execute, crates/db-migrate, crates/db-reactive, crates/session-ingest, crates/agent-access.
  • Consommateurs : packages/db-tauri et l’interface ; les plugins session, contacts, template, export, local-api et transcription en dépendent côté Rust.
  • Pages de doc concernées : /meetings, /notes, /data-and-privacy.

session

  • Chemin : plugins/session
  • Rôle : écritures transactionnelles sur les notes et les dossiers.
  • Commandes : create_session, soft_delete_session, restore_deleted_session, add_session_participant, remove_session_participant, persist_chat_session_proposal, set_session_proposal_status, resolve_session_conflicts, move_session_contents, catalogue des pièces jointes et de l’audio (catalog_note_attachment, catalog_session_audio, tombstone_session_audio…), catalogue des dossiers (ensure_folder_catalog, rename_folder_catalog, update_folder_instructions, update_folder_workspace, update_folder_icon…).
  • Dépendances internes : crates/db-app ; plugin db.
  • Pages de doc concernées : /notes, /meetings, /chat (propositions issues du chat).

template

  • Chemin : plugins/template
  • Rôle : rend les prompts Jinja et enregistre le résultat de la génération.
  • Commandes : render, render_custom, get_template_source, summary_length_policy, dominant_language, prepare_generated_summary, compose_generated_summary, save_generated_summary, save_generated_title, apply_session_content_corrections.
  • Dépendances internes : crates/template-app, crates/template-app-legacy, crates/summary, crates/gbnf, crates/language, crates/db-app ; plugin db.
  • Pages de doc concernées : /customize-summaries, /languages (langue des résumés et des titres), /chat.

Autres plugins de données

Fenêtres et intégration système

windows

  • Chemin : plugins/windows
  • Rôle : ouvre, masque et anime les fenêtres et onglets, et pilote deux fenêtres superposées : la barre flottante et les sous-titres en direct.
  • Commandes : window_show, window_hide, window_navigate, window_emit_navigate, window_save_frame, window_restore_frame_animated, set_show_app_in_dock, webview_health_ack, floating_bar_show, floating_bar_hide, floating_bar_update, live_caption_show, live_caption_hide, live_caption_update.
  • Événements : Navigate, OpenTab, WindowDestroyed, VisibilityEvent, WebviewHealthCheck, FloatingBarStop, FloatingBarDictationAction, FloatingBarListeningAction, FloatingBarOpenMain, FloatingBarSettingsChange, LiveCaptionOverlayState…
  • Dépendances internes : crates/brand.
  • Pages de doc concernées : /automatic-capture (« Garder les commandes à portée de main »), /meetings.

Autres plugins système

Plugins internes, spécifiques à macOS ou hérités

Quand mettre à jour la documentation

  • Une commande ou un événement ajouté, renommé ou retiré : mettez à jour le tableau de cette page.
  • Un changement de comportement visible dans un plugin dont la colonne « Pages de doc concernées » n’est pas « aucune » : relisez ces pages.
  • Un plugin qui commence à être appelé par l’interface (par exemple audio-priority ou agent) : ajoutez les pages utilisateur concernées et la ligne correspondante dans Correspondance doc ↔ code.