import { existsSync } from 'node:fs'; import { join } from 'node:path'; import { simpleGit, type SimpleGit } from 'simple-git'; import { config } from './config'; let git: SimpleGit | null = null; /** * Dépôt git du data_dir (versionning local de la source de vérité). * Initialisé au premier accès ; identité locale dédiée à l'app. * Le push vers une forge distante est volontairement hors périmètre (optionnel, manuel). */ export async function gitDonnees(): Promise { if (git) return git; const instance = simpleGit(config.dataDir); if (!existsSync(join(config.dataDir, '.git'))) { await instance.init(); } await instance.addConfig('user.name', 'veille-ia'); await instance.addConfig('user.email', 'veille-ia@app.local'); await instance.addConfig('commit.gpgsign', 'false'); git = instance; return git; } /** Commit atomique en français des chemins donnés (relatifs au data_dir). */ export async function committer(chemins: string[], message: string): Promise { const g = await gitDonnees(); await g.add(chemins); // Ne rien faire si aucun changement (écriture idempotente). const statut = await g.status(); if (statut.staged.length === 0) return; await g.commit(message); }