12 KiB
12 KiB
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.11sur 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)
- Modules :
- Stemming français —
snowballstemmerinté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 modulesbackend/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 erreursassignment 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
DashboardStatsWidgetavec 4 cartes (fichiers, tags, taille, vaults) - Widget "Derniers fichiers ouverts" avec timestamps
- Widget
- Documentation OpenAPI enrichie — Tous les modèles Pydantic documentés (
Field(description=...))- Visible dans
/docs(Swagger UI) et/redoc
- Visible dans
- Documentation complète —
ANALYSE_REVIEW.md,AUDIT_TECHNIQUE.md,ROADMAP.md
Modifié
frontend/js/app.js— Nouveau système d'onglets (TabManager), dashboardfrontend/style.css— Dashboard, share view, webhooks UIbackend/main.py— Nouveaux endpoints share/webhooks/dashboardbackend/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 dansdata/audit.log, rotation 10MB
- Backup automatique avant écriture
- Sauvegarde du contenu original dans
.obsigate-backup/avant PUT/DELETE
- Sauvegarde du contenu original dans
- Backlinks panel — Fichiers avec wikilinks pointant vers le fichier courant
GET /api/file/{vault}/backlinks+ index inversé dansindexer.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
- Détection automatique des fichiers
- Syncthing conflicts dashboard — Vue dédiée dans l'UI
- IGNORED_DIRS configurable —
OBSIGATE_IGNORED_DIRS(liste séparée par virgules) - Timeout de session configurable —
OBSIGATE_ACCESS_TOKEN_TTL/OBSIGATE_REFRESH_TOKEN_TTL
Modifié
backend/main.py— +audit, +backup, +redaction, +backlinks endpoint, +conflicts endpointbackend/indexer.py— +backlink index, +IGNORED_DIRSbackend/auth/router.py— +IP rate limitingbackend/auth/jwt_handler.py— +configurable TTLbackend/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 complet —
manifest.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, syncfrontend/style.css— CodeMirror themes, auth forms, PWA UI, responsivedocker-compose.yml— auth env vars, data volume, non-root userbackend/main.py— auth middleware, file CRUD, code editor API, SSE, PWArequirements.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 (
) - 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'imagesbackend/image_processor.py— Prétraitement Markdown pour les syntaxes d'imagesGET /api/image/{vault}?path=— Serve images avec MIME typesPOST /api/attachments/rescan/{vault}— Rescan manuelHIDDEN_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é)
- Opérateurs :
- Recherche regex —
extractRegexSnippet()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, autocompletefrontend/app.js— Refonte recherche : nouveau système de requêtes, facettes, pagination, autocompletefrontend/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