SeaMeet Desktop est là — Enregistrez tout, ne manquez rien. Télécharger gratuitement →

Configuration de la synchronisation GitHub

Chapitre 38 : Configuration de la synchronisation GitHub

GitHub Sync transforme votre espace de travail SeaMeet en une arborescence Markdown privée et versionnée qui vit dans votre propre dépôt GitHub. Chaque fois que vous éditez une note, renommez un enregistrement ou modifiez une page wiki, SeaMeet valide silencieusement le changement en arrière-plan et le pousse vers GitHub. Ouvrez SeaMeet sur un autre ordinateur portable et vos notes sont extraites au premier lancement — pas de Dropbox au milieu, pas de serveur Seasalt dans la boucle. Le dépôt vous appartient, les données vous appartiennent et vous pouvez les parcourir directement sur github.com si vous le souhaitez.

Le modèle est simple : votre dépôt GitHub est le stockage. SeaMeet n'exécute pas de service de synchronisation. Il installe une petite application GitHub sur votre compte, obtient un token OAuth par utilisateur et utilise ce token pour pousser et extraire des commits Git directement. Comme le stockage est le niveau gratuit de GitHub — qui vous donne des dépôts privés illimités — la synchronisation est essentiellement gratuite. Et comme chaque espace de travail SeaMeet est son propre dépôt, vous pouvez garder les espaces de travail professionnels et personnels entièrement séparés.


Objectifs du chapitre

Après avoir lu ce chapitre, vous serez capable de :

  • Installer l'application GitHub SeaMeet sur votre compte ou organisation
  • Autoriser SeaMeet via OAuth et le laisser créer un dépôt de synchronisation privé pour vous
  • Lire la barre d'état de synchronisation et comprendre chaque état dans la machine d'état de synchronisation
  • Reconnaître quand OAuth s'est auto-actualisé en arrière-plan et quand vous devez ré-autoriser manuellement
  • Résoudre un conflit de synchronisation lorsque la même note a été éditée sur deux appareils
  • Ajuster le panneau Paramètres de synchronisation (auto-sync, intervalle de synchronisation, synchronisation au démarrage)
  • Dépanner les modes d'échec les plus courants

Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Un compte GitHub — le niveau gratuit convient ; vous n'avez pas besoin de GitHub Pro
  • Un droit de synchronisation actif — inclus avec les niveaux BYOK Pro et Sync Pro. Si votre niveau de facturation n'inclut pas la synchronisation, l'écran Paramètres de synchronisation affichera une bannière "S'abonner pour activer la synchronisation". Voir Chapitre 35 : Abonnement et facturation pour les détails du plan.
  • Un espace de travail ouvert dans SeaMeet — la synchronisation s'attache à l'espace de travail actif, pas à l'application dans son ensemble. Si vous avez plusieurs espaces de travail, chacun est son propre dépôt GitHub.
  • Un accès Internet fonctionnel — le flux de configuration ouvre GitHub dans votre navigateur par défaut

Un dépôt par espace de travail. SeaMeet crée un dépôt privé séparé pour chaque espace de travail que vous connectez. Cela maintient les notes professionnelles et personnelles proprement isolées et signifie que vous pouvez en déconnecter une sans toucher à l'autre.


Configuration étape par étape

La configuration initiale prend environ 90 secondes : autorisez SeaMeet sur GitHub, laissez-le créer votre dépôt, attendez le téléversement initial et c'est fait.

Étape 1 : Ouvrir les paramètres de synchronisation

  1. Cliquez sur l'icône d'engrenage Paramètres
  2. Ouvrez l'onglet Sync dans le rail de gauche
  3. Vous verrez la carte d'en-tête "Sync with GitHub"

Si vous ne voyez pas l'onglet Sync, votre niveau d'abonnement n'inclut pas la synchronisation — voir le chapitre 35 pour la mise à niveau.

Si vous voyez une bannière qui indique "Sauvegardez vos notes dans un dépôt GitHub privé avec BYOK Pro", vous avez un compte gratuit. Cliquez sur la bannière pour ouvrir la paywall, ou sautez le reste de ce chapitre jusqu'à ce que vous soyez abonné.

Étape 2 : Cliquez sur "Set Up GitHub Sync"

L'état vide des Paramètres de synchronisation affiche trois tuiles d'avantages ("Gratuit et privé", "Effectivement illimité", "Un dépôt par espace de travail") et un bouton principal Set Up GitHub Sync en bas.

Cliquez dessus. Votre navigateur par défaut s'ouvre sur une page d'autorisation GitHub.

Étape 3 : Installer l'application GitHub SeaMeet (une fois)

La première fois que vous autorisez SeaMeet, GitHub vous demandera d'installer l'application GitHub SeaMeet sur votre compte. C'est une étape unique par compte GitHub (ou par organisation, si vous voulez synchroniser vers un dépôt appartenant à une organisation).

Sur la page d'installation GitHub :

  1. Choisissez le compte ou l'organisation vers lequel vous voulez que SeaMeet écrive
  2. Choisissez soit "Tous les dépôts" ou "Seulement certains dépôts" — l'application SeaMeet a besoin des autorisations contents : write et administration : write pour pouvoir créer le dépôt de synchronisation en votre nom
  3. Cliquez sur Install & Authorize

GitHub vous renvoie à SeaMeet. Le panneau Paramètres de synchronisation affiche maintenant :

┌──────────────────────────────────────────────────────┐
│   ✓ Autorisé                                         │
│   ⟳ Création du dépôt et téléversement...            │
└──────────────────────────────────────────────────────┘

Pourquoi une application GitHub et non un simple token OAuth ? Les applications GitHub ont des autorisations fines par dépôt et des tokens de rafraîchissement rotatifs. SeaMeet n'a jamais qu'un accès en écriture aux dépôts que vous avez explicitement choisis, et le token d'accès OAuth expire toutes les 8 heures — même s'il fuyait, la fenêtre serait petite. (Voir la section Actualisation automatique OAuth ci-dessous pour comment SeaMeet rend cela invisible pour vous.)

Étape 4 : Création du dépôt (automatique)

SeaMeet appelle maintenant l'API GitHub en votre nom et :

  1. Crée un dépôt privé nommé d'après votre espace de travail (par exemple, seameet-work-notes)
  2. Initialise un dépôt Git local à l'intérieur de votre dossier d'espace de travail s'il n'en existe pas déjà un
  3. Exécute git init, écrit un .gitignore qui exclut les fichiers audio/vidéo/capture d'écran et effectue un commit initial
  4. Ajoute le nouveau dépôt GitHub comme origin
  5. Pousse le commit initial

Vous verrez la barre d'état en bas de la barre latérale passer à travers :

Création du dépôt...  →  Synchronisation...  →  Synchronisé · à l'instant

C'est fait. Votre espace de travail est maintenant sauvegardé par GitHub.

Étape 5 : La première synchronisation s'exécute automatiquement

À partir de maintenant, SeaMeet valide automatiquement toutes les 5 minutes (par défaut) chaque fois que vous avez des modifications non enregistrées, et pousse vers GitHub immédiatement après chaque commit. Au prochain lancement de SeaMeet, l'application extrait de GitHub avant même que vous ne commenciez à éditer — ainsi, les modifications effectuées sur un autre appareil apparaissent dès l'ouverture de l'application.


La machine d'état de synchronisation

Le SyncManager de SeaMeet exécute une petite machine d'état et diffuse son état actuel au renderer. La SyncStatusBar de la barre latérale et le panneau Paramètres de synchronisation lisent tous deux à partir de cet état. Comprendre les états vous aide à lire l'interface utilisateur avec précision.

                      ┌─────────────┐
                      │    idle     │ ◄──────┐
                      └──────┬──────┘        │
                             │ modif fichier │
                             ▼               │
                      ┌─────────────┐        │
                ┌────►│   pending   │        │
                │     └──────┬──────┘        │
       modif    │            │ timer commit  │
       fichier  │            ▼               │
                │     ┌─────────────┐        │
                │     │ committing  │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   pushing   │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   synced    │── 5s ──┘
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   pulling   │  (démarrage ou push-rejected)
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤  conflict   │  → utilisateur résout → syncing → synced
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   offline   │  → réseau revient → réessayer
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   timeout   │  → utilisateur clique Retry
                │     └─────────────┘
                │
                │     ┌────────────────┐
                └─────┤ token-expired  │ → carte ré-autoriser
                      └────────────────┘

Voici ce que chaque état signifie dans l'interface utilisateur :

ÉtatÉtiquette de barre d'étatCe que cela signifie
idle"Synchronisé · il y a 2 min"Rien en attente, dernier commit était propre
pending"En attente..."Vous avez des modifications non enregistrées ; le timer de commit se déclenchera au prochain intervalle
committing"Synchronisation..."Un commit Git est en cours localement
pushing"Envoi..."Commit local terminé ; envoi vers GitHub
pulling"Extraction..."Soit synchronisation au démarrage, soit le push a été rejeté et nous extrayons d'abord
syncing"Synchronisation..."Finalisation d'un rebase après résolution de conflit
synced"Synchronisé · à l'instant"Succès tout juste terminé ; affiché pendant 5 secondes, puis retourne à idle
conflict"Conflit de synchronisation"Local et distant ont tous deux édité le même fichier. L'UI fait surgir le flux de résolution de conflit.
error"Erreur de synchronisation"Une défaillance non liée au réseau, non liée à un conflit (par exemple, échec git). Réessaie automatiquement avec backoff exponentiel jusqu'à 5 fois.
offline"Hors ligne"Réseau inaccessible. Réessayera au prochain changement de fichier ou après 60 secondes.
timeout"Synchronisation expirée"Une commande git a pris plus de 60 secondes (voir Protection contre les timeouts de synchronisation ci-dessous)
token-expired"Ré-autoriser"L'actualisation OAuth a échoué et l'utilisateur doit ré-autoriser manuellement
installing-app"Installation de l'application GitHub..."En attente que l'utilisateur termine l'étape d'installation de l'application GitHub dans son navigateur
creating-repo"Création du dépôt..."Le flux de configuration crée le dépôt GitHub et pousse le commit initial

Si la barre d'état affiche un spinner, c'est une activité normale en arrière-plan. Si elle est ambre ou rouge, voir la section Dépannage ci-dessous.


Actualisation automatique OAuth

Les applications GitHub émettent des tokens d'accès utilisateur qui expirent toutes les 8 heures, plus un token de rafraîchissement valide pendant 6 mois. SeaMeet gère cela pour vous afin que vous n'ayez presque jamais à y penser.

Comment ça fonctionne :

  1. Lorsque SeaMeet est sur le point de pousser ou d'extraire, SyncManager._refreshTokenIfNeeded() vérifie si le token actuel expire dans les 5 prochaines minutes.
  2. Si oui, SeaMeet appelle le point de terminaison /login/oauth/access_token de GitHub avec le token de rafraîchissement stocké. GitHub renvoie un nouveau token d'accès et fait tourner le token de rafraîchissement. SeaMeet écrit les deux dans le fichier de token chiffré sur le disque.
  3. La commande Git s'exécute alors avec le token nouvellement actualisé. Vous ne voyez rien à l'écran — l'actualisation entière prend bien moins d'une seconde.

Gestion des échecs transitoires : Si l'appel d'actualisation échoue parce que le réseau est instable ou que GitHub a renvoyé un 5xx (un REFRESH_NETWORK_ERROR), SeaMeet ne jette pas le token existant. Au lieu de cela, la synchronisation passe à l'état offline et réessaie plus tard. C'est important car le token existant peut encore être valide pendant plusieurs minutes supplémentaires — le jeter sur un hoquet réseau transitoire vous déconnecterait inutilement de la synchronisation.

Fusion des actualisations concurrentes : GitHub fait tourner le token de rafraîchissement chaque fois que vous l'utilisez, donc deux actualisations concurrentes feraient une course et l'une invaliderait l'autre. SeaMeet effondre les appels d'actualisation concurrents en une seule Promise en vol (_refreshPromise) afin que la synchronisation au démarrage et le push-with-retry ne se battent jamais sur le token rotatif.

Quand l'actualisation échoue vraiment : Si GitHub renvoie REFRESH_TOKEN_EXPIRED — ce qui signifie que le token de rafraîchissement de 6 mois a expiré ou été révoqué — SeaMeet :

  1. Supprime le fichier de token chiffré du disque
  2. Entre dans l'état terminal token-expired
  3. Affiche une carte ambre dans les Paramètres de synchronisation :
┌──────────────────────────────────────────────────────┐
│ ⚠  L'autorisation GitHub a expiré. Veuillez          │
│    ré-autoriser pour reprendre la synchronisation.   │
│                                                      │
│  [ ↻ Ré-autoriser GitHub ]                           │
└──────────────────────────────────────────────────────┘

Cliquez sur Ré-autoriser GitHub. Vous êtes renvoyé dans le flux OAuth — mais comme l'application GitHub est déjà installée, c'est un clic unique pour confirmer et vous êtes prêt en environ 10 secondes. SeaMeet supprime alors tout token obsolète de votre git config local (l'ancien token peut être intégré dans l'URL d'origin) avant le prochain push, donc vous ne bouclez pas sur un identifiant mort.


Protection contre les timeouts de synchronisation

Les commandes Git peuvent se bloquer indéfiniment si un réseau devient silencieux à mi-transfert — un socket TCP peut rester dans un état semi-ouvert sans jamais lever d'erreur. SeaMeet enveloppe chaque push et pull Git dans un timeout AbortController de 60 secondes.

Si un push ou pull ne se termine pas en 60 secondes, SeaMeet :

  1. Avorte le sous-processus git
  2. Entre dans l'état timeout
  3. Affiche une carte ambre dans les Paramètres de synchronisation :
┌──────────────────────────────────────────────────────┐
│ ⚠  Synchronisation expirée. Cela peut être causé par │
│    un problème réseau ou une autorisation GitHub     │
│    expirée.                                          │
│                                                      │
│  [ ↻ Réessayer ]   [ Ré-autoriser GitHub ]           │
└──────────────────────────────────────────────────────┘

Réessayer exécute à nouveau commitNow. C'est le bon bouton à cliquer si vous pensez que votre réseau vient de tomber brièvement. Ré-autoriser GitHub exécute à nouveau le flux OAuth ; cliquez ceci si le timeout continue à se reproduire, ce qui signifie généralement que votre token est le problème plutôt que le réseau.

L'état revient automatiquement à idle après environ 30 secondes même si vous ne cliquez sur rien — la synchronisation réessayera au prochain changement de fichier.


Résolution de conflit

Un conflit se produit lorsque le même fichier a été édité sur deux appareils depuis la dernière synchronisation. Exemple : vous avez écrit un paragraphe dans meetings/2026-06-03-standup.md sur votre ordinateur portable, puis plus tard édité le même paragraphe sur la machine d'un ami. Lorsque le deuxième appareil pousse, GitHub rejette le push car les historiques divergent.

SeaMeet gère cela en :

  1. Extrayant les modifications distantes avec un rebase
  2. Détectant les marqueurs de conflit de fusion
  3. Entrant dans l'état conflict
  4. Faisant surgir le conflit dans la barre d'état de la barre latérale (qui devient cliquable) et dans le panneau de conflit des Paramètres de synchronisation

La modale de résolution de conflit

Cliquer sur la barre d'état lorsque la synchronisation est en conflict ouvre la Modale de résolution de conflit :

┌──────────────────────────────────────────────────────────┐
│  ⚠  Conflit de synchronisation        1 / 2         [×]  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  "2026-06-03-standup.md" a été modifié sur un autre app. │
│                                                          │
│  ┌────────────────────────┐  ┌────────────────────────┐  │
│  │ ✎  Éditer manuellement │  │ ✦  Fusion par Agent    │  │
│  └────────────────────────┘  └────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

Vous avez deux options :

Éditer manuellement — ouvre le fichier de conflit dans l'éditeur par défaut de votre système avec les marqueurs standard de Git <<<<<<< / ======= / >>>>>>> en place. Éditez le fichier pour les résoudre, enregistrez, puis revenez à SeaMeet et cliquez sur Terminé. SeaMeet met en scène le fichier résolu et continue le rebase.

Fusion par Agent (BYOK Pro uniquement, nécessite un Agent IA configuré) — envoie les deux versions à votre Agent IA configuré (GitHub Copilot ou Claude Code, voir Chapitre 36 : Guide de configuration BYOK) et lui demande de produire une version fusionnée qui conserve l'intention des deux côtés. La sortie de l'agent est mise en scène automatiquement ; vous verrez un spinner "Finalisation de la synchronisation..." pendant que le rebase se termine.

S'il y a plusieurs conflits à la fois, la modale affiche un compteur (1 / 2, 2 / 2) et des flèches chevron dans le panneau de conflit des Paramètres de synchronisation pour que vous puissiez les parcourir un par un.

Les options "Garder le mien" / "Garder le leur" / "Garder les deux" apparaissent comme des choix naturels lorsque vous êtes à l'intérieur de l'éditeur manuel : laissez uniquement le texte de votre version entre les marqueurs, uniquement le texte de la version distante, ou intercalez les deux. Le bouton Fusion par Agent fait effectivement "garder les deux, intelligemment".

Que se passe-t-il si vous faites une erreur ? Les conflits de synchronisation ne sont pas destructifs. Git conserve le contenu original "nôtre" et "leur" dans l'index, et getConflictVersions(filePath) peut récupérer l'un ou l'autre à tout moment pendant la résolution. Vous ne perdrez pas accidentellement de travail.


Le panneau Paramètres de synchronisation

Une fois connecté, les Paramètres de synchronisation (Paramètres → Sync) vous donnent un seul écran avec tout en un seul endroit :

┌─────────────────────────────────────────────────────────────┐
│  ✓ Sync & Backup                                            │
│  Vos notes et wiki sont automatiquement synchronisés vers   │
│  GitHub. Les enregistrements audio, vidéo et les captures   │
│  d'écran ne sont pas synchronisés.                          │
├─────────────────────────────────────────────────────────────┤
│  ⓘ  https://github.com/vous/seameet-work-notes              │
│  🕒 Dernière sync : il y a 4 minutes                        │
├─────────────────────────────────────────────────────────────┤
│  Auto-sync                                       [ ON  ◉ ]  │
│  Intervalle de sync                              [ 5 min ▾ ]│
│  Branche                                              main   │
│  Dernière sync                                   il y a 4 min│
├─────────────────────────────────────────────────────────────┤
│  Auto-sync sur modifications                     [ ON  ◉ ]  │
│  Sync au démarrage                               [ ON  ◉ ]  │
├─────────────────────────────────────────────────────────────┤
│  [ ⤓ Synchroniser maintenant ]                              │
├─────────────────────────────────────────────────────────────┤
│  [ ↗ Voir sur GitHub ]    [ Déconnecter ]                   │
└─────────────────────────────────────────────────────────────┘

Les contrôles, de haut en bas :

  • Auto-sync — bascule principale pour le timer de commit en arrière-plan. Désactivé signifie que SeaMeet ne valide que lorsque vous cliquez sur Synchroniser maintenant.
  • Intervalle de sync — à quelle fréquence le timer de commit se déclenche. Les choix sont 1 / 5 / 10 / 30 minutes. La valeur par défaut est 5 minutes. Un intervalle de 1 minute convient à la prise de notes active ; 30 minutes convient aux espaces de travail à faible édition où vous préférez regrouper les commits.
  • Branche — la branche Git vers laquelle SeaMeet synchronise. Presque toujours main. En lecture seule dans l'interface utilisateur.
  • Dernière sync — horodatage relatif du dernier push réussi.
  • Auto-sync sur modifications — lorsque activé, les pushs se produisent immédiatement après chaque commit local (le cas typique). Lorsque désactivé, SeaMeet valide localement mais ne pousse que lorsque vous cliquez sur Synchroniser maintenant. Utile si vous voulez regrouper les pushs (par exemple, sur une connexion comptée).
  • Sync au démarrage — lorsque activé, SeaMeet extrait de GitHub dès que l'application se lance. Recommandé sauf si vous avez une connexion très lente.
  • Synchroniser maintenant — force un cycle commit-and-push immédiat. N'attend pas le timer. Utile avant de fermer votre ordinateur portable.
  • Voir sur GitHub — ouvre le dépôt dans votre navigateur.
  • Déconnecter — efface le token OAuth stocké, supprime le fichier de token chiffré et supprime origin de votre dépôt Git local. Vos fichiers Markdown locaux et l'historique Git ne sont pas touchés — seul le lien vers GitHub est rompu.

Ce qui est synchronisé (et ce qui ne l'est pas)

C'est documenté dans l'index de la partie, mais cela vaut la peine d'être répété ici :

SynchroniséNon synchronisé
Notes (fichiers .md)Enregistrements audio (.webm, .mp3)
Pages wiki (fichiers .md)Enregistrements vidéo (.webm, .mp4)
Manifestes d'enregistrement (JSON métadonnées)Captures d'écran (.png, .jpg)
Résumés IA et transcriptionsGénérations IA mises en cache
Graphique des wikilinksParamètres de l'application
.gitignoreÉtat de brouillon de l'éditeur

Le .gitignore que SeaMeet écrit exclut toutes les grandes catégories binaires. C'est intentionnel : les dépôts privés gratuits de GitHub plafonnent à 1 Go, et une vidéo de 30 minutes mangerait cela à elle seule. SeaMeet garde les médias sur votre disque local et synchronise uniquement le Markdown léger.

Si vous voulez une synchronisation média complète, c'est le niveau Sync Pro — voir le chapitre 35.


Dépannage

"Authorization failed" juste après avoir cliqué sur Set Up GitHub Sync

Causes et corrections :

  • Bloqueur de fenêtre contextuelle — si aucune fenêtre de navigateur ne s'est ouverte, votre OS ou navigateur peut avoir bloqué le lancement. Cliquez à nouveau sur Set Up GitHub Sync et confirmez toutes les invites de fenêtre contextuelle.
  • Vous avez refusé les autorisations de l'application GitHub — revenez à travers le flux et acceptez les portées contents : write + administration : write. Sans administration : write, SeaMeet ne peut pas créer le dépôt pour vous.
  • Erreur de non-correspondance d'état — fermez les autres fenêtres SeaMeet qui pourraient courir sur le même flux OAuth, puis réessayez.

Erreur "Repo permissions" pendant la configuration

L'erreur indique quelque chose comme "L'application GitHub a la permission 'contents : read', mais a besoin de 'contents : write'." Cela signifie que vous avez installé une ancienne version de l'application.

Correction :

  1. Ouvrez github.com/settings/installations
  2. Trouvez SeaMeet dans la liste et cliquez sur Configurer
  3. Sous Autorisations de dépôt, changez Contents et Administration en Lecture et écriture
  4. Enregistrez, puis désinstallez et réinstallez l'application — GitHub n'applique les nouvelles autorisations qu'à la réinstallation
  5. Réexécutez Set Up GitHub Sync dans SeaMeet

"Could not reach GitHub" / synchronisation bloquée sur "Hors ligne"

Échec du réseau. SeaMeet réessayera automatiquement quand :

  • Vous effectuez un changement de fichier (déclenche une tentative de retry immédiate)
  • 60 secondes s'écoulent depuis le dernier retry

Si votre réseau est revenu et que la synchronisation affiche toujours Hors ligne après quelques minutes :

  1. Cliquez sur Synchroniser maintenant pour forcer une nouvelle tentative
  2. Si cela expire : vérifiez que votre pare-feu ne bloque pas github.com
  3. En dernier recours, redémarrez SeaMeet — la synchronisation au démarrage se déclenchera au lancement

Synchronisation bloquée sur "En attente"

Cela signifie généralement que le timer d'auto-commit ne s'est pas encore déclenché. Par défaut, il se déclenche toutes les 5 minutes. Vous ne voulez pas attendre ? Cliquez sur Synchroniser maintenant.

Si Synchroniser maintenant ne fait pas avancer la synchronisation au-delà de En attente, vérifiez :

  • Êtes-vous sur un niveau de facturation qui inclut la synchronisation ? Ouvrez les Paramètres de synchronisation — si vous voyez la bannière d'abonnement, la synchronisation est désactivée au niveau du droit.
  • Y a-t-il des modifications non validées en dehors de l'arborescence Markdown ? Le timer d'auto-commit ne se déclenche que lorsque _pendingChanges est non vide.

"Je vois la carte token-expired"

C'est la fin attendue du cycle de vie d'actualisation OAuth — votre token de rafraîchissement de 6 mois a expiré, ou vous avez révoqué l'application GitHub, ou vous avez changé votre mot de passe GitHub (ce qui invalide tous les tokens OAuth).

Correction : cliquez sur Ré-autoriser GitHub dans la carte. Le flux est le même que la configuration initiale mais saute l'étape d'installation de l'application GitHub (vous l'avez déjà installée). Prend environ 10 secondes.

Le panneau de résolution de conflit ne se ferme pas

Le panneau ne se ferme que lorsque tous les conflits dans la liste sont résolus. Si vous voyez le compteur (1 / 3), utilisez les flèches chevron dans le panneau de conflit des Paramètres de synchronisation pour parcourir les fichiers restants. Chacun a besoin d'une résolution explicite (édition manuelle + Terminé, ou Fusion par Agent).

Si le panneau insiste sur la présence de conflits mais que vous ne voyez aucun marqueur dans vos fichiers, cliquez sur Synchroniser maintenant — un état conflict obsolète sera effacé à la prochaine tentative de synchronisation réussie.

Boucles "Push rejeté"

Si la synchronisation alterne entre pushing et pulling à plusieurs reprises, GitHub rejette vos pushs car le distant continue d'avancer. Cela peut arriver si :

  • Une autre instance SeaMeet s'exécute contre le même dépôt et pousse plus rapidement que celle-ci ne peut rattraper — fermez l'autre instance.
  • Quelqu'un (ou un outil) valide dans le dépôt GitHub en dehors de SeaMeet — mettez l'outil externe en pause jusqu'à ce que votre clone local rattrape.

Notes de sécurité

Où le token OAuth est stocké : dans le trousseau de votre OS via l'API safeStorage d'Electron. Sur Windows, c'est DPAPI, sur macOS, c'est Keychain Services, sur Linux, c'est libsecret. Le blob chiffré est écrit dans <userData>/github-token.enc avec le mode de fichier 0o600. Le fichier contient le token d'accès, le token de rafraîchissement, l'horodatage d'expiration et l'ID client, le secret client et le slug de l'application GitHub.

Ce qui n'est pas stocké dans argv : le token OAuth n'est jamais passé comme argument -c http.extraHeader=... à git, car argv est visible pour les autres utilisateurs via ps aux. Au lieu de cela, l'en-tête Authorization est injecté via la variable d'environnement GIT_CONFIG_PARAMETERS, qui est privée pour le processus. Les autres utilisateurs sur la même machine ne peuvent pas voir votre token.

Ce qui se retrouve sur le disque dans le dépôt : des fichiers Markdown ordinaires. Pas de tokens, pas de secrets, pas d'identifiants. Le .gitignore exclut les fichiers multimédias, mais vous devriez toujours éviter de coller des secrets dans le corps des notes — ceux-ci se synchroniseront.

Révocation de l'accès : pour couper immédiatement l'accès de SeaMeet à un dépôt, désinstallez l'application GitHub SeaMeet à github.com/settings/installations. La prochaine tentative de synchronisation échouera avec token-expired et SeaMeet effacera son token local. Vos notes locales sont intactes.


Référence rapide

┌─────────────────────────────────────────────────────────────┐
│                   SYNCHRONISATION GITHUB                    │
│                   Référence rapide                          │
├─────────────────────────────────────────────────────────────┤
│  Ouvrir Paramètres Sync│ Paramètres → Sync                  │
│  Config première fois  │ Cliquer "Set Up GitHub Sync"       │
│  Portées requises      │ contents : write, admin : write    │
│  Nommage du dépôt      │ Un dépôt privé par espace travail  │
├─────────────────────────────────────────────────────────────┤
│  Intervalle sync défaut│ 5 minutes (1 / 5 / 10 / 30)        │
│  Forcer une sync       │ Bouton "Synchroniser maintenant"   │
│  Auto-sync sur push    │ Activé (bascule dans Paramètres)   │
│  Sync au démarrage     │ Activé (bascule dans Paramètres)   │
├─────────────────────────────────────────────────────────────┤
│  Marge actualis. OAuth │ 5 minutes avant expiration         │
│  Timeout commande git  │ 60 secondes (AbortController)      │
│  Limite auto-retry     │ 5 tentatives, backoff exp.         │
│  Stockage du token     │ Trousseau OS (safeStorage)         │
├─────────────────────────────────────────────────────────────┤
│  UI de conflit         │ Cliquer barre d'état en conflit    │
│  Résolution manuelle   │ Éditer marqueurs → Terminé         │
│  Fusion par Agent      │ BYOK Pro + Agent IA configuré      │
├─────────────────────────────────────────────────────────────┤
│  Déconnecter           │ Paramètres Sync → Déconnecter      │
│  Révoquer de GitHub    │ github.com/settings/installations  │
│  Voir le dépôt         │ Lien "Voir sur GitHub"             │
└─────────────────────────────────────────────────────────────┘

Dernière mise à jour : 2026-06-05

Chapitre 37 : Fournisseur GitHub Copilot | (fin du manuel — retour à l'Index)

Published: