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.
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
Base de données
La baseapp.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).
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. - Pages de doc concernées : Données et confidentialité, CLI pour agents.
db-app
- Chemin :
crates/db-app, migrations SQL danscrates/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.
crates/db-app/src et les pages qu’ils alimentent :
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éePlainouCloudsyncAlter. - Dépendances internes :
syntheo-db-core. - Pages de doc concernées : aucune.
db-change, db-execute, db-reactive
- db-change (
crates/db-change) :ChangeNotifier,TableChangeetTableChangeKindsignalent les tables modifiées. Aucune dépendance interne. - db-execute (
crates/db-execute) :DbExecutorexécute une requête, une requête « proxy » ou une transaction décrite en JSON (TransactionStatement). Dépend desyntheo-db-core. - db-reactive (
crates/db-reactive) :LiveQueryRuntimeextrait les tables lues par une requête (extract_dependencies, viaEXPLAIN) et la rejoue quand l’une d’elles change. Le plugindbl’expose par les commandessubscribeetunsubscribe. Dépend desyntheo-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 dossiersyntheo; 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: fichierauth.dpapichiffré 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é, Désinstaller.
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), modulesscan,session_content,folder,audio,path. - Dépendances internes :
syntheo-storage,syntheo-fs-format,syntheo-frontmatter,syntheo-tiptap,syntheo-audio-utils,syntheo-vad;syntheo-dataen dev-dependency. - Pages de doc concernées : Notes, Importer des enregistrements, Réunions.
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) :Documentanalyse 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, modulemerge. Aucune dépendance interne.crates/agent-accessl’utilise pour convertir le corps des notes en Markdown dans les sorties de la CLI et du serveur MCP. - Pages de doc concernées :
tiptapalimente CLI pour agents, Serveur MCP et Référence de la CLI ;fs-formatetfrontmatter: aucune.
Export
export-core
- Chemin :
crates/export-core - Rôle : produit le PDF d’une réunion avec Typst (
typst,typst-pdf, polices detypst-assets). - API :
export_pdf(path, input),render_pdf(input), typesExportInput,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 (section « Exporter une réunion »).
Prompts et comptes rendus
template-app
- Chemin :
crates/template-app, gabarits danscrates/template-app/assets/*.md.jinja. - Rôle : rend les prompts envoyés au LLM. Les gabarits sont compilés avec Askama.
- API :
render(Template), enumTemplate(EnhanceSystem,EnhanceUser,TitleSystem,TitleUser,ChatSystem,ContextBlock,ToolSearchSessions,TranscriptPatchSystem,TranscriptPatchUser,ActivityCaptureSystem,DailySummarySystem,EventContactSystem…),EditableTemplate(EnhanceFormat,EnhanceUser,TitleUser) ettemplate_source. - Dépendances internes :
syntheo-askama-utils. - À noter : le plugin
templateexposerenderetget_template_source. L’interface lit la source deenhanceFormatdans le formulaire du modèle « Automatique » (apps/desktop/src/templates/auto-form.tsx). - Pages de doc concernées : Personnaliser les comptes rendus, Notes, Chat, Langues.
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.
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 plugintemplateles expose comme commandes. - Dépendances internes : aucune.
- Pages de doc concernées : Personnaliser les comptes rendus, Notes.
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
templateinitialise son environnement au démarrage et s’en sert pour la commanderender_custom, qu’aucun code deapps/desktop/srcn’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
hookslit la configuration sous la cléhooksdes paramètres et l’interface déclenche les événements depuisapps/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.
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).
- Pages de doc concernées : Capture automatique (notification de détection du microphone).
Plateforme et identité
- Pages de doc concernées : voir la colonne Remarques ; aucune pour
host,user-error,shortcut-macos,overlay-kitetbundle.
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-processpour les trois. - Usage : seule
crates/agent-coreles utilise, pour installer un hook de notification dans la configuration de chaque agent (commandechar … notify, héritée d’Anarlog).plugins/agentexposehealth_check,install_clietuninstall_cli, mais aucun code deapps/desktop/srcn’importe@syntheo/plugin-agent. - Pages de doc concernées : aucune. L’installation des compétences décrite dans Compétences 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 decrates/audio-mock, dev-dependency deaudio-actual,audio-utils,fs-sync-core,owhisper-client,resampleretvad. Pages de doc concernées : aucune. - xtask (
crates/xtask) :cargo xtask prepare-binariescompilesyntheo-clien release pour la cible courante (TAURI_ENV_TARGET_TRIPLEou triple de l’hôte) et copie le binaire dansapps/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).