ObsiGate/CHANGELOG.md

12 KiB
Raw Blame History

Changelog — ObsiGate

Toutes les modifications notables d'ObsiGate sont documentées dans ce fichier.

Format basé sur Keep a Changelog, et Semantic Versioning.


[1.7.0] — 2026-05-30

Ajouté

  • AI Editor Toolbar — Barre d'outils IA intégrée à l'éditeur CodeMirror
    • Menus dropdown : Edit (improve, fix spelling, shorter, longer, simplify), Tone (professional, casual), Translate (multi-langue), Generate (explain, summarize, continue), Custom Rewrite, Toolbox (to list, to table, frontmatter, to canvas)
    • Multi-provider : DeepSeek / OpenRouter / Gemini, configurable via .env
    • 16 endpoints REST : POST /api/ai/{edit|tone|translate|generate|rewrite|toolbox}
    • Auto-save silencieux (2s debounce) avec feedback visuel toast
    • Cache toolbar si pas de clé API configurée
    • Messages d'erreur clairs (401→clé invalide, etc.)
  • Graph view — Améliorations majeures
    • Header flat design 2 lignes responsives (titre flexible + recherche dédiée + barre statut)
    • Navigation historique ← → + ↑ Parent
    • Sticky panels : tuile info (top-left/right) avec métadonnées, preview pleine hauteur (droite)
    • Ctrl+survol → aperçu contenu formaté (via /raw) dans tooltip
    • Filtre par tag dans la vue graphe
    • Boutons close ✕ sur les panneaux
    • Fond hover foncé unifié

Modifié

  • backends/ai.py — Nouveau module IA backend
  • backends/ai_routes.py — Routes API pour l'éditeur IA
  • frontend/js/ai.js — Module frontend de la toolbar IA (404 lignes)
  • frontend/js/graph.js — Refonte complète : sticky panels, nav historique, aperçu markdown

[1.6.0] — 2026-05-29

Ajouté

  • Vue graphe des wikilinks — Canvas force-directed
    • Phase 1 : Full-vault view, filtre par tag, backlinks entrants, métriques de nœud
    • Phase 2 : Recherche visuelle, tooltips survol, couleurs adaptatives, slider profondeur (0-3)
    • Phase 3 : Filtre par type (dossier/fichier/.md/autre), mode focus, plein écran, export PNG
    • Phase 4 : Barnes-Hut O(n log n), cache graphe
  • sortedcontainers → O(log n) insert/remove dans l'index inversé
  • CI/CD Pipeline complet — Gitea Actions
    • Ruff linting (0 erreur)
    • Mypy type checking (0 erreur)
    • Pytest — 175 tests, 49% coverage
    • Bandit SAST — scan de sécurité
    • Pip-audit — vulnérabilités dépendances
    • Docker build — vérification image
    • Coverage artifact — uploadé via actions/upload-artifact@v3
    • Runner Gitea auto-hébergé (gitea/act_runner:0.2.11 sur Alpine/Proxmox)

Modifié

  • backend/search.py — Remplacement bisect → SortedList pour le vocabulaire
  • .gitea/workflows/ci.yml — Pipeline CI/CD complet

Corrigé

  • Résolution de 28 erreurs mypy pré-existantes
  • Fix lint ruff + faux positifs bandit + pip-audit non-bloquant

[1.5.1] — 2026-05-28

Ajouté

  • Split app.js (8 875 lignes) en 16 modules ES
    • Modules : state.js, utils.js, auth.js, ui.js (76KB), viewer.js (47KB), sidebar.js, search.js (45KB), config.js, dashboard.js, graph.js (33KB), sync.js, legacy.js, ai.js
    • Import/export validator CI (tests/frontend/validate-imports.mjs)
    • Tests unitaires frontend (tests/frontend/unit.test.mjs)
  • Stemming françaissnowballstemmer intégré au tokenizer
    • "manger" trouve "mangé", "mangeons", "mangeait"
    • Performance O(T) au lieu de O(S×T) — fix freeze 15min sur gros vaults
    • Crash guard : try/except snowballstemmer IndexError sur tokens exotiques

Modifié

  • frontend/js/app.js → entrypoint ES module important les 16 modules
  • backend/search.py — tokenizer avec FrenchStemmer

Corrigé

  • Nombreuses régressions post-split : imports manquants, exports oubliés, shadowing de variables
  • Réécriture state.js → mutable object (export const state = {...}) pour éviter les erreurs assignment to constant
  • Plus de 60 correctifs d'imports/exports validés par le validator CI
  • Tags de template {{...}} exclus du tag cloud via filtre configurable

[1.5.0] — 2026-05-26

Ajouté

  • Publication publique — Génération de lien partageable avec token unique (64-char hex)
    • Expiration configurable, lecture seule, sans authentification
    • backend/share.py + endpoints CRUD + vue publique /s/{token}
    • Export PDF via WeasyPrint (lazy import) dans la vue publique
    • Support fichiers non-Markdown dans la vue publique
  • Webhooks — Notifications HTTP POST vers services externes
    • Signature HMAC-SHA256 optionnelle
    • backend/webhooks.py + CRUD endpoints + UI dans Configuration
  • Dashboard statistiques — Métriques agrégées par vault
    • Widget DashboardStatsWidget avec 4 cartes (fichiers, tags, taille, vaults)
    • Widget "Derniers fichiers ouverts" avec timestamps
  • Documentation OpenAPI enrichie — Tous les modèles Pydantic documentés (Field(description=...))
    • Visible dans /docs (Swagger UI) et /redoc
  • Documentation complèteANALYSE_REVIEW.md, AUDIT_TECHNIQUE.md, ROADMAP.md

Modifié

  • frontend/js/app.js — Nouveau système d'onglets (TabManager), dashboard
  • frontend/style.css — Dashboard, share view, webhooks UI
  • backend/main.py — Nouveaux endpoints share/webhooks/dashboard
  • backend/search.py — Index inversé incrémental (hook pattern)

[1.4.0] — 2026-05-25

Ajouté

  • Rate limiting — IP-based (10 tentatives/15min) + lockout par compte (5 tentatives)
    • backend/ratelimit.py — RateLimiter thread-safe avec nettoyage périodique
    • Intégré à backend/auth/router.py
  • Secret redactor — Masquage automatique des secrets dans les aperçus
    • backend/secret_redactor.py — JWT, API keys, tokens GitHub, clés privées, connection strings
  • Audit log — Traçage des écritures/suppressions/changements de config
    • backend/audit.py — JSON lines dans data/audit.log, rotation 10MB
  • Backup automatique avant écriture
    • Sauvegarde du contenu original dans .obsigate-backup/ avant PUT/DELETE
  • Backlinks panel — Fichiers avec wikilinks pointant vers le fichier courant
    • GET /api/file/{vault}/backlinks + index inversé dans indexer.py
  • Gestion des conflits Syncthing
    • Détection automatique des fichiers .sync-conflict-*
    • Résolution : garder local, garder conflit
    • GET /api/conflicts, POST /api/conflicts/resolve
  • Syncthing conflicts dashboard — Vue dédiée dans l'UI
  • IGNORED_DIRS configurableOBSIGATE_IGNORED_DIRS (liste séparée par virgules)
  • Timeout de session configurableOBSIGATE_ACCESS_TOKEN_TTL / OBSIGATE_REFRESH_TOKEN_TTL

Modifié

  • backend/main.py — +audit, +backup, +redaction, +backlinks endpoint, +conflicts endpoint
  • backend/indexer.py — +backlink index, +IGNORED_DIRS
  • backend/auth/router.py — +IP rate limiting
  • backend/auth/jwt_handler.py — +configurable TTL
  • backend/watcher.py — +configurable IGNORED_DIRS

[1.3.0] — 2026-05-23

Ajouté

  • Authentification complète — JWT + Argon2id
    • Login/logout, refresh tokens, cookies httpOnly
    • Contrôle d'accès par vault
    • Interface d'administration : création/modification/suppression d'utilisateurs
    • "Se souvenir de moi", sessions persistantes
    • backend/auth/ — 5 modules (~600 lignes)
  • CodeMirror 6 — Éditeur de fichiers intégré
    • Syntax highlighting multi-langage
    • Sauvegarde, annulation, fallback textarea si CM6 échoue
    • Auto-sync frontmatter YAML
    • Find-in-page (Ctrl+F) avec regex, barre de navigation
  • PWA completmanifest.json, sw.js, icônes multi-tailles
    • Installation via bouton "Installer l'application"
    • Thème synchronisé entre fenêtres popout
    • Service Worker avec mise en cache
  • Synchronisation temps réel — Watchdog + SSE
    • Surveillance automatique des fichiers
    • Mise à jour incrémentale de l'index
    • SSE Manager avec reconnexion automatique
    • backend/watcher.py — watchdog observer avec debounce 2s
  • Drag & drop / rename — Menu contextuel arborescence
    • Création fichier/dossier, rename inline, suppression
    • Boutons d'action toujours visibles, support mobile long-press

Modifié

  • frontend/app.js — Refonte majeure : authentication flows, code editor, PWA, sync
  • frontend/style.css — CodeMirror themes, auth forms, PWA UI, responsive
  • docker-compose.yml — auth env vars, data volume, non-root user
  • backend/main.py — auth middleware, file CRUD, code editor API, SSE, PWA
  • requirements.txt — argon2-cffi, python-jose, python-multipart

[1.2.0] — 2026-05-18

Ajouté

  • Rendu d'images Obsidian — Support complet de toutes les syntaxes
    • Standard Markdown avec attributs HTML
    • Wiki-link embed (![[path/to/image.png]])
    • Markdown standard (![alt](path))
    • Résolution multi-stratégies (7 niveaux)
    • Indexation des attachements au démarrage
    • Cache de résolution pour performance
  • Système de fichiers cachés — Configuration par vault
    • includeHidden, hiddenWhitelist — UI + env vars
    • Filtrage côté client (hideHiddenFiles)

Ajouté

  • backend/attachment_indexer.py — Scan et indexation d'images
  • backend/image_processor.py — Prétraitement Markdown pour les syntaxes d'images
  • GET /api/image/{vault}?path= — Serve images avec MIME types
  • POST /api/attachments/rescan/{vault} — Rescan manuel
  • HIDDEN_FILES_GUIDE.md, IMAGE_RENDERING_GUIDE.md

[1.1.0] — 2026-05-15

Ajouté

  • Recherche TF-IDF avancée — Moteur complet avec index inversé
    • Opérateurs : tag:, vault:, title:, path:, ext:
    • Autocomplétion intelligente (fichiers, tags, historique)
    • Facettes, pagination, tri par pertinence
    • Snippets surlignés <mark>, accent-insensitive
    • Search history (localStorage, max 50, LIFO, dédupliqué)
  • Recherche regexextractRegexSnippet() avec surlignage
  • Recherches sauvegardées — CRUD API + sidebar UI
    • Sauvegarde/chargement/suppression de requêtes
  • Filtres de recherche — toggles (case, mot entier, regex), chemins
  • Onglets sidebar — vaults, tags, récents, saved searches
  • Auto-expand vault dans le filtre sidebar
  • Tree search — Filtrage temps réel de l'arborescence avec surlignage

Modifié

  • backend/search.py — Nouveau : InvertedIndex, TF-IDF, autocomplete
  • frontend/app.js — Refonte recherche : nouveau système de requêtes, facettes, pagination, autocomplete
  • frontend/style.css — Search results cards, autocomplete dropdown, tags

[1.0.0] — 2026-05-10

Ajouté

  • Première version stable — Porte d'entrée web pour vaults Obsidian
  • Multi-vault — Visualisation de plusieurs vaults simultanément
  • Arborescence — Navigation hiérarchique avec lazy-loading
  • Rendu Markdown — Conversion HTML via mistune (tables, task lists, footnotes, strikethrough)
  • Extraction YAML frontmatter — Tous les champs parsés avec carte pliable, badges, tags
  • Vue Source (raw) — Toggle markdown brut + frontmatter
  • Édition — PUT/DELETE fichiers via API
  • Breadcrumbs — Navigation avec auto-expand et highlight
  • TOC — Table des matières avec scroll spy et barre de progression
  • Thème clair/sombre — Toggle localStorage + synchronisé fenêtres popout
  • Popout — Fenêtre détachée pour affichage standalone
  • Configuration UI — Paramètres persistants par vault
  • Docker multi-stage — Image ~180MB, linux/amd64 + arm64 + arm/v7 + i386
  • Healthcheck — Endpoint /api/health
  • Headers sécurité — CSP, X-Frame-Options, XSS-Protection, Referrer-Policy
  • Path traversal protection_resolve_safe_path() symlink-aware
  • Security hardening — Utilisateur non-root (UID 1000)
  • Compression GZip (SSE-safe), Cache-Control immutable
  • build.sh — Script de build automatisé

Architecture

  • Backend : FastAPI 0.110.3, uvicorn 0.30.0, Python 3.11+
  • Frontend : Vanilla JS SPA (0 dépendances npm), CSS custom properties
  • Indexation : In-memory, mise à jour incrémentale, watcher watchdog
  • Recherche : TF-IDF inversé, sans I/O disque