> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntheo.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Données, export et plateforme

> Crates Rust de stockage SQLite, de fichiers, d'export, de prompts, de notifications et d'intégration système, avec les pages de documentation qui en dépendent.

Cette page couvre les crates de `crates/` qui gèrent les données, les fichiers, l'export PDF, les prompts du LLM, les notifications et quelques services système. L'organisation générale est décrite dans [Architecture](https://docs.syntheo.studio/fr/architecture.md).

Dans le workspace Cargo, chaque crate est déclarée sous un alias `syntheo-*` (par exemple `syntheo-db-app` pour `crates/db-app`). Les dépendances internes listées ci-dessous utilisent ces alias.

## Vue d'ensemble

| Crate | Rôle | Utilisée par | Pages de doc concernées |
| - | - | - | - |
| `crates/db-core` | Ouverture de la base SQLite (sqlx) | CLI, desktop, plugins `db`, `local-api`, `session`, `template`, `transcription`, `contacts`, crates `agent-access`, `session-ingest` | [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md) |
| `crates/db-change` | Suivi des tables modifiées | `db-core`, `db-reactive` | aucune |
| `crates/db-execute` | Exécution de requêtes SQL décrites en JSON | plugin `db`, `db-reactive` | aucune |
| `crates/db-reactive` | Requêtes « vivantes » rejouées à chaque changement | plugin `db` | aucune |
| `crates/db-migrate` | Moteur de migrations | `db-app`, `db-reactive`, plugin `db` | aucune |
| `crates/db-app` | Schéma, migrations et opérations métier sur `app.db` | CLI, desktop, plugins `db`, `local-api`, `session`, `template`, `transcription`, `contacts`, crates `agent-access`, `session-ingest` | voir [db-app](#db-app) |
| `crates/storage` | Dossiers de données et écriture sûre de fichiers | desktop, plugins `settings`, `store2`, `transcription`, crates `fs-sync-core`, `listener-core` | [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md), [Désinstaller](https://docs.syntheo.studio/fr/uninstall.md) |
| `crates/fs-sync-core` | Dossiers de sessions, pièces jointes et fichiers audio sur disque | plugin `fs-sync` | [Notes](https://docs.syntheo.studio/fr/notes.md), [Importer des enregistrements](https://docs.syntheo.studio/fr/import-recordings.md) |
| `crates/fs-format` | Format JSON des transcriptions sur disque | `fs-sync-core` | aucune |
| `crates/frontmatter` | Lecture et écriture de Markdown avec en-tête YAML | `fs-sync-core` | aucune |
| `crates/tiptap` | Conversion entre JSON Tiptap/ProseMirror et Markdown | `agent-access`, `fs-sync-core` | [CLI pour agents](https://docs.syntheo.studio/fr/agents/cli.md), [Serveur MCP](https://docs.syntheo.studio/fr/agents/mcp.md) |
| `crates/export-core` | Rendu PDF avec Typst | plugin `export` | [Notes](https://docs.syntheo.studio/fr/notes.md) |
| `crates/template-app` | Prompts du LLM (Askama) | plugin `template`, crate `transcript` | [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md), [Chat](https://docs.syntheo.studio/fr/chat.md), [Langues](https://docs.syntheo.studio/fr/languages.md) |
| `crates/template-app-legacy` | Ancien moteur de prompts MiniJinja (hérité) | plugin `template` | aucune |
| `crates/askama-utils` | Filtres et validation pour les gabarits Askama | `template-app` | [Langues](https://docs.syntheo.studio/fr/languages.md) |
| `crates/summary` | Politique de longueur et mise en forme du compte rendu généré | plugin `template` | [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md), [Notes](https://docs.syntheo.studio/fr/notes.md) |
| `crates/hooks` | Commandes shell lancées au début et à la fin de l'écoute | plugin `hooks` | aucune |
| `crates/notification` | Affichage des notifications natives (façade) | plugin `notification` | [Capture automatique](https://docs.syntheo.studio/fr/automatic-capture.md) |
| `crates/notification-interface` | Types communs des notifications | `notification`, backends, plugin `detect` | [Capture automatique](https://docs.syntheo.studio/fr/automatic-capture.md) |
| `crates/notification-linux` | Backend GTK (Linux) | `notification` | [Capture automatique](https://docs.syntheo.studio/fr/automatic-capture.md) |
| `crates/notification-windows` | Backend Win32 (Windows) | `notification` | [Capture automatique](https://docs.syntheo.studio/fr/automatic-capture.md) |
| `crates/notification-macos` | Backend Swift (macOS uniquement) | `notification` | aucune |
| `crates/shortcut-macos` | Raccourcis clavier globaux par event tap (macOS uniquement) | plugin `shortcut` | aucune |
| `crates/overlay-kit` | Panneaux et animations d'overlay (macOS uniquement) | plugin `permissions` | aucune |
| `crates/bundle` | Identifiant de bundle du processus parent (macOS uniquement) | plugin `permissions`, crate `detect` | aucune |
| `crates/brand` | Noms et identifiants du produit | desktop, plugins `store2`, `tray`, `windows`, crates `notification-linux`, `storage` | [Désinstaller](https://docs.syntheo.studio/fr/uninstall.md), [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md) |
| `crates/host` | Architecture CPU, version de l'OS, arrêt de processus | desktop | aucune |
| `crates/user-error` | Reconnaissance des erreurs dues au compte utilisateur | plugin `tracing`, crates `listener2-core`, `owhisper-client` | aucune |
| `crates/claude` | Pilotage de la CLI Claude Code | `agent-core` | aucune |
| `crates/codex` | Pilotage de la CLI Codex | `agent-core` | aucune |
| `crates/opencode` | Pilotage de la CLI OpenCode | `agent-core` | aucune |
| `crates/data` | Échantillons audio pour les tests | `audio-mock` ; dev-dependency ailleurs | aucune |
| `crates/xtask` | Tâches de build (`cargo xtask`) | outillage | aucune |

## Base de données

La base `app.db` est le cœur des données. Les crates se répartissent en couches : `db-core` ouvre la connexion, `db-migrate` applique le schéma fourni par `db-app`, et `db-change`, `db-execute` et `db-reactive` servent l'interface via le plugin `db` (voir [Plugins Tauri](https://docs.syntheo.studio/fr/code/plugins.md)).

### db-core

* **Chemin** : `crates/db-core`
* **Rôle** : ouvre un pool SQLite et y attache un `ChangeNotifier`.
* **API** : `Db` (`open`, `connect_memory`, `connect_local_read_write`, `connect_local_read_only`, `pool`, `change_notifier`), `DbOpenOptions`, `DbStorage`, `ManagedDb`.
* **Dépendances internes** : `syntheo-db-change`.
* **À noter** : la CLI ouvre la base avec `connect_local_read_only` (`apps/cli/src/db.rs`), ce qui garantit la lecture seule décrite dans [CLI pour agents](https://docs.syntheo.studio/fr/agents/cli.md).
* **Pages de doc concernées** : [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md), [CLI pour agents](https://docs.syntheo.studio/fr/agents/cli.md).

### db-app

* **Chemin** : `crates/db-app`, migrations SQL dans `crates/db-app/migrations`.
* **Rôle** : définit le schéma applicatif (`schema()`, `APP_MIGRATION_STEPS`, `prepare_schema`) et regroupe les opérations SQL partagées par l'application, la CLI et les plugins.
* **Dépendances internes** : `syntheo-db-core`, `syntheo-db-migrate`.

Les modules de `crates/db-app/src` et les pages qu'ils alimentent :

| Module | Contenu | Pages de doc concernées |
| - | - | - |
| `session_ops`, `session_lifecycle_ops`, `session_content_ops`, `session_move_ops`, `session_participant_ops` | Lecture, création, titre, résumé, transcription, déplacement entre dossiers et participants d'une session | [Réunions](https://docs.syntheo.studio/fr/meetings.md), [Notes](https://docs.syntheo.studio/fr/notes.md), [Contacts](https://docs.syntheo.studio/fr/contacts.md) |
| `session_review_ops` | Propositions de modification en attente et résolution des conflits | [Notes](https://docs.syntheo.studio/fr/notes.md), [CLI pour agents](https://docs.syntheo.studio/fr/agents/cli.md), [Serveur MCP](https://docs.syntheo.studio/fr/agents/mcp.md) |
| `session_transcript_ops`, `transcript_batch_ops`, `transcript_live_ops` | Transcriptions en direct et en lot, données de rendu | [Réunions](https://docs.syntheo.studio/fr/meetings.md), [Importer des enregistrements](https://docs.syntheo.studio/fr/import-recordings.md) |
| `summary_ops` | Corps du résumé généré, tags, file d'amélioration automatique | [Notes](https://docs.syntheo.studio/fr/notes.md), [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md) |
| `template_ops`, `template_types` | Modèles de compte rendu stockés en base | [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md) |
| `webhook_ops`, `webhook_types` | Endpoints de webhook, secrets et journal des livraisons | [Référence des webhooks](https://docs.syntheo.studio/fr/reference/webhooks.md) |
| `contact_ops` | Personnes et organisations | [Contacts](https://docs.syntheo.studio/fr/contacts.md) |
| `folder_catalog_ops`, `attachment_ops` | Dossiers et pièces jointes des notes et dossiers | [Notes](https://docs.syntheo.studio/fr/notes.md) |
| `managed_settings` | Paramètres imposés, dont la rétention audio limitée à « aucune » | [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md), [Sécurité](https://docs.syntheo.studio/fr/security.md) |
| `session_audio_ops`, `capture_lifecycle_ops`, `session_hold` | Marqueurs de capture et suivi de l'audio de session | [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md) |
| `session_purge` | Suppression locale d'une session | [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md) |
| `legacy_voiceprints` | Purge des empreintes vocales héritées d'anciennes versions | aucune |
| `pilot_usage_ops` | Lecture de mesures d'usage locales (horloges de capture) | aucune |

> [!NOTE]
>
> Ne décrivez pas le comportement du produit à partir du schéma SQL brut. Partez des opérations et de l'interface qui les utilisent.

### db-migrate

* **Chemin** : `crates/db-migrate`
* **Rôle** : applique une liste ordonnée de `MigrationStep` (`migrate`, `migrate_with_progress`), avec la portée `Plain` ou `CloudsyncAlter`.
* **Dépendances internes** : `syntheo-db-core`.
* **Pages de doc concernées** : aucune.

### db-change, db-execute, db-reactive

* **db-change** (`crates/db-change`) : `ChangeNotifier`, `TableChange` et `TableChangeKind` signalent les tables modifiées. Aucune dépendance interne.
* **db-execute** (`crates/db-execute`) : `DbExecutor` exécute une requête, une requête « proxy » ou une transaction décrite en JSON (`TransactionStatement`). Dépend de `syntheo-db-core`.
* **db-reactive** (`crates/db-reactive`) : `LiveQueryRuntime` extrait les tables lues par une requête (`extract_dependencies`, via `EXPLAIN`) et la rejoue quand l'une d'elles change. Le plugin `db` l'expose par les commandes `subscribe` et `unsubscribe`. Dépend de `syntheo-db-core`, `syntheo-db-change`, `syntheo-db-execute`, `syntheo-db-migrate`.
* **Pages de doc concernées** : aucune.

## Fichiers et stockage

### storage

* **Chemin** : `crates/storage`
* **Rôle** : calcule l'emplacement des données et écrit les fichiers sans suivre les liens symboliques.
* **API** :
  * `global::compute_default_base` : dossier de base. Le build stable utilise le dossier `syntheo` ; les autres identités (debug, configuration dev) utilisent leur identifiant de bundle.
  * `vault` : `settings.json`, clé `vault_path`, `consolidate_custom_vault`.
  * `safe_path` : `join_under_base`, `resolve_under_base`, `open_no_follow`, `write_no_follow`, `copy_no_follow`.
  * `session_tree` : parcours de l'arborescence des sessions (`walk_session_tree`, `find_session_dir`).
  * `fs` : `atomic_write`, `copy_dir_recursive`.
  * `windows_auth` : fichier `auth.dpapi` chiffré avec DPAPI, actif sous Windows uniquement.
  * `StorageRuntime` : trait qui fournit les bases globale et de coffre.
* **Dépendances internes** : `syntheo-brand`.
* **Pages de doc concernées** : [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md), [Désinstaller](https://docs.syntheo.studio/fr/uninstall.md).

### fs-sync-core

* **Chemin** : `crates/fs-sync-core`
* **Rôle** : gère les dossiers de sessions sur disque pour le plugin `fs-sync` : liste, création, renommage et déplacement de dossiers, lecture du contenu d'une session, pièces jointes, fichiers audio (`audio` : import dans une session, métadonnées, crêtes, détection de parole, suppression des orphelins expirés).
* **API** : `FsSyncCore` (`list_folders`, `move_session`, `create_folder`), modules `scan`, `session_content`, `folder`, `audio`, `path`.
* **Dépendances internes** : `syntheo-storage`, `syntheo-fs-format`, `syntheo-frontmatter`, `syntheo-tiptap`, `syntheo-audio-utils`, `syntheo-vad` ; `syntheo-data` en dev-dependency.
* **Pages de doc concernées** : [Notes](https://docs.syntheo.studio/fr/notes.md), [Importer des enregistrements](https://docs.syntheo.studio/fr/import-recordings.md), [Réunions](https://docs.syntheo.studio/fr/meetings.md).

### fs-format, frontmatter, tiptap

* **fs-format** (`crates/fs-format`) : types sérialisables du fichier de transcription (`TranscriptJson`, `TranscriptWithData`, `TranscriptWord`, `TranscriptSpeakerHint`). Aucune dépendance interne.
* **frontmatter** (`crates/frontmatter`) : `Document` analyse et sérialise un Markdown avec en-tête. Aucune dépendance interne.
* **tiptap** (`crates/tiptap`) : `tiptap_json_to_md`, `md_to_tiptap_json`, `tiptap_json_to_mdast`, `mdast_to_markdown`, `validate_tiptap_json`, module `merge`. Aucune dépendance interne. `crates/agent-access` l'utilise pour convertir le corps des notes en Markdown dans les sorties de la CLI et du serveur MCP.
* **Pages de doc concernées** : `tiptap` alimente [CLI pour agents](https://docs.syntheo.studio/fr/agents/cli.md), [Serveur MCP](https://docs.syntheo.studio/fr/agents/mcp.md) et [Référence de la CLI](https://docs.syntheo.studio/fr/reference/cli.md) ; `fs-format` et `frontmatter` : aucune.

## Export

### export-core

* **Chemin** : `crates/export-core`
* **Rôle** : produit le PDF d'une réunion avec Typst (`typst`, `typst-pdf`, polices de `typst-assets`).
* **API** : `export_pdf(path, input)`, `render_pdf(input)`, types `ExportInput`, `ExportMetadata`, `Transcript`, `TranscriptItem`, `ExportLabels` (libellés des sections dans la langue de l'interface).
* **Dépendances internes** : aucune.
* **À noter** : seul le PDF passe par cette crate. Les autres formats d'export de l'application (TXT, Markdown, Org) et l'export Markdown ou JSON de la CLI n'en dépendent pas.
* **Pages de doc concernées** : [Notes](https://docs.syntheo.studio/fr/notes.md) (section « Exporter une réunion »).

## Prompts et comptes rendus

### template-app

* **Chemin** : `crates/template-app`, gabarits dans `crates/template-app/assets/*.md.jinja`.
* **Rôle** : rend les prompts envoyés au LLM. Les gabarits sont compilés avec Askama.
* **API** : `render(Template)`, enum `Template` (`EnhanceSystem`, `EnhanceUser`, `TitleSystem`, `TitleUser`, `ChatSystem`, `ContextBlock`, `ToolSearchSessions`, `TranscriptPatchSystem`, `TranscriptPatchUser`, `ActivityCaptureSystem`, `DailySummarySystem`, `EventContactSystem`…), `EditableTemplate` (`EnhanceFormat`, `EnhanceUser`, `TitleUser`) et `template_source`.
* **Dépendances internes** : `syntheo-askama-utils`.
* **À noter** : le plugin `template` expose `render` et `get_template_source`. L'interface lit la source de `enhanceFormat` dans le formulaire du modèle « Automatique » (`apps/desktop/src/templates/auto-form.tsx`).
* **Pages de doc concernées** : [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md), [Notes](https://docs.syntheo.studio/fr/notes.md), [Chat](https://docs.syntheo.studio/fr/chat.md), [Langues](https://docs.syntheo.studio/fr/languages.md).

### askama-utils

* **Chemin** : `crates/askama-utils`
* **Rôle** : filtres partagés par les gabarits (`current_date`, `language`, `language_name`, `is_english`, `is_korean`) et extraction des variables utilisées (`extract`, `TemplateUsage`).
* **Dépendances internes** : aucune.
* **Pages de doc concernées** : [Langues](https://docs.syntheo.studio/fr/languages.md).

### summary

* **Chemin** : `crates/summary`
* **Rôle** : calcule la longueur cible du compte rendu selon la taille de la transcription et le nombre de sections du modèle, puis met en forme le texte généré (titre en première ligne, ligne de tags).
* **API** : `summary_length_policy`, `summary_length_policy_for_texts`, `prepare_generated_summary`, `compose_generated_summary`, `extract_tag_names`. Le plugin `template` les expose comme commandes.
* **Dépendances internes** : aucune.
* **Pages de doc concernées** : [Personnaliser les comptes rendus](https://docs.syntheo.studio/fr/customize-summaries.md), [Notes](https://docs.syntheo.studio/fr/notes.md).

### template-app-legacy

* **Chemin** : `crates/template-app-legacy`
* **Rôle** : ancien moteur MiniJinja hérité d'Anarlog, avec ses gabarits (`enhance`, `title`, `chat`, `auto_generate_tags`, `postprocess_transcript`, `highlight`).
* **Usage** : le plugin `template` initialise son environnement au démarrage et s'en sert pour la commande `render_custom`, qu'aucun code de `apps/desktop/src` n'appelle hors tests.
* **Dépendances internes** : aucune.
* **Pages de doc concernées** : aucune.

## Automatisation locale

### hooks

* **Chemin** : `crates/hooks`
* **Rôle** : exécute les commandes shell configurées pour un événement et renvoie leur résultat.
* **API** : `HooksConfig`, `HookDefinition`, `HookEvent` (`beforeListeningStarted`, `afterListeningStopped`), `run_hooks_for_event`, `HookResult`.
* **Usage** : le plugin `hooks` lit la configuration sous la clé `hooks` des paramètres et l'interface déclenche les événements depuis `apps/desktop/src/store/zustand/listener/general-live.ts`.
* **Dépendances internes** : aucune.
* **Pages de doc concernées** : aucune. Cette fonction n'est pas documentée côté utilisateur ; elle est distincte des [webhooks](https://docs.syntheo.studio/fr/reference/webhooks.md).

## Notifications

`crates/notification` est la façade appelée par le plugin `notification`. Elle déduplique les notifications par clé, conserve leur contexte et délègue l'affichage au backend de la plateforme, activé par la feature `legacy` (active par défaut et demandée par le plugin).

| Crate | Plateforme | Contenu |
| - | - | - |
| `crates/notification-interface` | toutes | Types `Notification`, `NotificationKey` (`mic_started`, `mic_stopped`, `calendar_event`), `NotificationAction`, `NotificationEvent`, `NotificationLabels`. Aucune dépendance interne. |
| `crates/notification` | toutes | `show`, `clear` et les gestionnaires `setup_*_handler`. Dépend de `syntheo-notification-interface` et du backend de la plateforme. |
| `crates/notification-linux` | Linux | Fenêtre GTK 3 (`gtk`, `gdk`, `pango`). Dépend de `syntheo-brand`, `syntheo-notification-interface`. |
| `crates/notification-windows` | Windows | Rendu Win32 (crate `windows`). Dépend de `syntheo-notification-interface`. |
| `crates/notification-macos` | macOS | Pont Swift (`swift-rs`). Dépend de `syntheo-notification-interface`. |

* **Pages de doc concernées** : [Capture automatique](https://docs.syntheo.studio/fr/automatic-capture.md) (notification de détection du microphone).

## Plateforme et identité

| Crate | API principale | Dépendances internes | Remarques |
| - | - | - | - |
| `crates/brand` | `PRODUCT_NAME`, `STABLE_BUNDLE_ID` (`fr.willisback.syntheo`), `DEV_BUNDLE_ID`, `APP_DATA_FOLDER` (`syntheo`), `CLI_COMMAND` (`syntheo`) | aucune | Source unique des noms. Tout changement touche [Désinstaller](https://docs.syntheo.studio/fr/uninstall.md) et [Données et confidentialité](https://docs.syntheo.studio/fr/data-and-privacy.md). |
| `crates/host` | `cpu_arch`, `long_os_version`, `kill_processes_by_matcher` | aucune | Le desktop l'utilise pour arrêter les processus sidecar (`apps/desktop/src-tauri/src/lib.rs`). |
| `crates/user-error` | `is_user_error_text` | aucune | Évite de journaliser comme erreurs les échecs dus au compte (crédits, clé d'API invalide). |
| `crates/shortcut-macos` | `Listener`, `EventTap`, `HotKey`, types de décision | aucune | macOS uniquement : dépendance cible `macos` du plugin `shortcut`. |
| `crates/overlay-kit` | modules `geometry`, `layout`, `placement`, `path`, `macos` | aucune | Le module `macos` n'existe que sur macOS. Utilisée par l'assistant de permissions macOS du plugin `permissions`. |
| `crates/bundle` | `get_ancestor_bundle_id`, `bundle_id_for_pid`, `read_bundle_info` | aucune | Code compilé sur macOS uniquement. |

* **Pages de doc concernées** : voir la colonne Remarques ; aucune pour `host`, `user-error`, `shortcut-macos`, `overlay-kit` et `bundle`.

## Intégrations d'agents de code

`crates/claude`, `crates/codex` et `crates/opencode` pilotent les CLI Claude Code, Codex et OpenCode : options, flux d'événements, sessions ou threads, vérification d'installation (`health_check_with_options`) et lecture ou écriture de leur configuration. `codex` et `opencode` exposent aussi des liens profonds (`new_thread_deeplink`, `open_project_deeplink`).

* **Dépendances internes** : `syntheo-cli-process` pour les trois.
* **Usage** : seule `crates/agent-core` les utilise, pour installer un hook de notification dans la configuration de chaque agent (commande `char … notify`, héritée d'Anarlog). `plugins/agent` expose `health_check`, `install_cli` et `uninstall_cli`, mais aucun code de `apps/desktop/src` n'importe `@syntheo/plugin-agent`.
* **Pages de doc concernées** : aucune. L'installation des compétences décrite dans [Compétences](https://docs.syntheo.studio/fr/agents/skills.md) ne passe pas par ces crates.

## Outillage et données de test

* **data** (`crates/data`) : échantillons audio WAV (anglais et coréen) inclus à la compilation. Dépendance normale de `crates/audio-mock`, dev-dependency de `audio-actual`, `audio-utils`, `fs-sync-core`, `owhisper-client`, `resampler` et `vad`. Pages de doc concernées : aucune.
* **xtask** (`crates/xtask`) : `cargo xtask prepare-binaries` compile `syntheo-cli` en release pour la cible courante (`TAURI_ENV_TARGET_TRIPLE` ou triple de l'hôte) et copie le binaire dans `apps/desktop/src-tauri/resources/cli/syntheo-cli-{triple}`. Alias défini dans `.cargo/config.toml`. Pages de doc concernées : aucune directement ; le binaire préparé est celui qu'embarque l'application (voir [Installation](https://docs.syntheo.studio/fr/installation.md)).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.