style: formatage HTML index.html — indentation multi-lignes coherente
CI / lint (push) Failing after 1s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / security (push) Failing after -7s

This commit is contained in:
2026-06-15 14:55:36 -04:00
parent 0f4a7405db
commit 75a28da8d9
+356 -92
View File
@@ -904,7 +904,9 @@
<!-- Content Wrapper (tab bar + content area) --> <!-- Content Wrapper (tab bar + content area) -->
<div class="vault-context-bar" id="vault-context-bar"> <div class="vault-context-bar" id="vault-context-bar">
<span class="vault-context-pill" id="vault-context-pill">📂 Toutes les vaults</span> <span class="vault-context-pill" id="vault-context-pill"
>📂 Toutes les vaults</span
>
</div> </div>
<div class="content-wrapper"> <div class="content-wrapper">
<!-- Tab bar --> <!-- Tab bar -->
@@ -982,55 +984,108 @@
<!-- Quick Help --> <!-- Quick Help -->
<div class="quick-help" id="quick-help"> <div class="quick-help" id="quick-help">
<div class="qh-header"> <div class="qh-header">
<i data-lucide="keyboard" style="width:16px;height:16px"></i> <i
data-lucide="keyboard"
style="width: 16px; height: 16px"
></i>
<span>Raccourcis &amp; Astuces</span> <span>Raccourcis &amp; Astuces</span>
<button class="qh-toggle" id="qh-toggle" title="Masquer" aria-label="Masquer l'aide">&minus;</button> <button
class="qh-toggle"
id="qh-toggle"
title="Masquer"
aria-label="Masquer l'aide"
>
&minus;
</button>
</div> </div>
<div class="qh-body" id="qh-body"> <div class="qh-body" id="qh-body">
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+Shift+Space</span> <span class="qh-kbd"
<span class="qh-desc">Palette de commandes</span> >Ctrl+Shift+Space</span
>
<span class="qh-desc"
>Palette de commandes</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+Alt+Space</span> <span class="qh-kbd"
<span class="qh-desc">Palette de fichiers (navigation rapide)</span> >Ctrl+Alt+Space</span
>
<span class="qh-desc"
>Palette de fichiers (nav.
rapide)</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+K</span> <span class="qh-kbd">Ctrl+K</span>
<span class="qh-desc">Focus barre de recherche</span> <span class="qh-desc"
>Focus barre de recherche</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">/</span> <span class="qh-kbd">/</span>
<span class="qh-desc">Recherche rapide (hors champ texte)</span> <span class="qh-desc"
>Recherche rapide (hors champ
texte)</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+S</span> <span class="qh-kbd">Ctrl+S</span>
<span class="qh-desc">Sauvegarder le fichier ouvert</span> <span class="qh-desc"
>Sauvegarder le fichier
ouvert</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+F</span> <span class="qh-kbd">Ctrl+F</span>
<span class="qh-desc">Rechercher dans le document</span> <span class="qh-desc"
>Rechercher dans le
document</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Esc</span> <span class="qh-kbd">Esc</span>
<span class="qh-desc">Fermer l'editeur / modale</span> <span class="qh-desc"
>Fermer l'editeur / modale</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Ctrl+J</span> <span class="qh-kbd">Ctrl+J</span>
<span class="qh-desc">Completion IA inline (dans l'editeur)</span> <span class="qh-desc"
>Completion IA inline (dans
l'editeur)</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">Alt+I</span> <span class="qh-kbd">Alt+I</span>
<span class="qh-desc">Insertion rapide (editeur Forge)</span> <span class="qh-desc"
>Insertion rapide (editeur
Forge)</span
>
</div> </div>
<div class="qh-row"> <div class="qh-row">
<span class="qh-kbd">F1</span> <span class="qh-kbd">F1</span>
<span class="qh-desc">Aide de l'editeur Forge</span> <span class="qh-desc"
>Aide de l'editeur Forge</span
>
</div> </div>
<div class="qh-divider"></div> <div class="qh-divider"></div>
<div class="qh-tip"> <div class="qh-tip">
<i data-lucide="lightbulb" style="width:14px;height:14px"></i> <i
<span>Survolez un document avec <strong>Ctrl</strong> pour un apercu rapide. Cliquez sur <strong>Forge</strong> dans la barre d'outils pour l'editeur avance.</span> data-lucide="lightbulb"
style="
width: 14px;
height: 14px;
"
></i>
<span
>Survolez un document avec
<strong>Ctrl</strong> pour un
apercu rapide. Cliquez sur
<strong>Forge</strong> dans la
barre d'outils pour l'editeur
avance.</span
>
</div> </div>
</div> </div>
</div> </div>
@@ -1193,21 +1248,59 @@
<div class="editor-container"> <div class="editor-container">
<div class="editor-header"> <div class="editor-header">
<span class="editor-brand">ObsiGate</span> <span class="editor-brand">ObsiGate</span>
<input class="editor-title-input" id="editor-title-input" placeholder="Titre..." spellcheck="false" title="Titre (sync avec # Heading)"> <input
class="editor-title-input"
id="editor-title-input"
placeholder="Titre..."
spellcheck="false"
title="Titre (sync avec # Heading)"
/>
<span class="editor-sep">/</span> <span class="editor-sep">/</span>
<input class="editor-filename-input" id="editor-filename-input" placeholder="nom.md" spellcheck="false" title="Renommer le fichier"> <input
class="editor-filename-input"
id="editor-filename-input"
placeholder="nom.md"
spellcheck="false"
title="Renommer le fichier"
/>
<div class="editor-spacer"></div> <div class="editor-spacer"></div>
<span class="editor-save-dot ok" id="editor-save-dot"><span class="dot"></span><span id="editor-save-label">Saved</span></span> <span class="editor-save-dot ok" id="editor-save-dot"
<button class="editor-btn danger" id="editor-delete" title="Supprimer" aria-label="Supprimer">&#128465;</button> ><span class="dot"></span
<button class="editor-btn" id="editor-cancel" title="Annuler" aria-label="Annuler">&#10005;</button> ><span id="editor-save-label">Saved</span></span
<button class="editor-btn primary" id="editor-save" title="Sauvegarder" aria-label="Sauvegarder">&#10003;</button> >
<button
class="editor-btn danger"
id="editor-delete"
title="Supprimer"
aria-label="Supprimer"
>
&#128465;
</button>
<button
class="editor-btn"
id="editor-cancel"
title="Annuler"
aria-label="Annuler"
>
&#10005;
</button>
<button
class="editor-btn primary"
id="editor-save"
title="Sauvegarder"
aria-label="Sauvegarder"
>
&#10003;
</button>
</div> </div>
<div class="editor-body editor-body-cm" id="editor-body"> <div class="editor-body editor-body-cm" id="editor-body">
<div id="ai-toolbar-container"></div> <div id="ai-toolbar-container"></div>
</div> </div>
<div class="editor-footer"> <div class="editor-footer">
<span class="editor-stat-file" id="editor-stat-file"></span> <span class="editor-stat-file" id="editor-stat-file"></span>
<span class="editor-stat-words" id="editor-stat-words">0 words</span> <span class="editor-stat-words" id="editor-stat-words"
>0 words</span
>
</div> </div>
</div> </div>
</div> </div>
@@ -1233,32 +1326,87 @@
</div> </div>
<div class="editor-body help-body" id="config-body"> <div class="editor-body help-body" id="config-body">
<nav class="help-nav" id="config-nav"> <nav class="help-nav" id="config-nav">
<div class="help-nav-header"><div class="help-nav-title">Configuration</div></div> <div class="help-nav-header">
<div class="help-nav-title">Configuration</div>
</div>
<div class="help-nav-search-wrap"> <div class="help-nav-search-wrap">
<input type="text" class="help-nav-search" id="config-nav-search" placeholder="Rechercher..." autocomplete="off" spellcheck="false"> <input
<button class="help-search-clear" id="config-search-clear" title="Effacer" onclick="var s=document.getElementById('config-nav-search');if(s){s.value='';s.dispatchEvent(new Event('input'));s.focus();}">X</button> type="text"
class="help-nav-search"
id="config-nav-search"
placeholder="Rechercher..."
autocomplete="off"
spellcheck="false"
/>
<button
class="help-search-clear"
id="config-search-clear"
title="Effacer"
onclick="
var s =
document.getElementById(
'config-nav-search',
);
if (s) {
s.value = '';
s.dispatchEvent(new Event('input'));
s.focus();
}
"
>
X
</button>
</div> </div>
<ul class="help-nav-list"> <ul class="help-nav-list">
<li><a href="#cfg-search" class="help-nav-link">🔍 Recherche</a></li> <li>
<li><a href="#cfg-backend" class="help-nav-link">⚙️ Backend</a></li> <a href="#cfg-search" class="help-nav-link"
<li><a href="#cfg-sync" class="help-nav-link">🔄 Synchronisation</a></li> >🔍 Recherche</a
<li><a href="#cfg-diags" class="help-nav-link">🩺 Diagnostics</a></li> >
<li><a href="#cfg-ai" class="help-nav-link">🤖 IA</a></li> </li>
<li><a href="#cfg-about" class="help-nav-link">📦 A propos</a></li> <li>
<a href="#cfg-backend" class="help-nav-link"
>⚙️ Backend</a
>
</li>
<li>
<a href="#cfg-sync" class="help-nav-link"
>🔄 Synchronisation</a
>
</li>
<li>
<a href="#cfg-diags" class="help-nav-link"
>🩺 Diagnostics</a
>
</li>
<li>
<a href="#cfg-ai" class="help-nav-link"
>🤖 IA</a
>
</li>
<li>
<a href="#cfg-about" class="help-nav-link"
>📦 A propos</a
>
</li>
</ul> </ul>
</nav> </nav>
<div class="help-content" id="config-scroll"> <div class="help-content" id="config-scroll">
<div class="config-content"> <div class="config-content">
<!-- Performance Settings - Frontend --> <!-- Performance Settings - Frontend -->
<section class="config-section help-section" id="cfg-search"> <section
class="config-section help-section"
id="cfg-search"
>
<h2>Paramètres de recherche</h2> <h2>Paramètres de recherche</h2>
<p class="config-description"> <p class="config-description">
Ces paramètres s'appliquent immédiatement côté Ces paramètres s'appliquent immédiatement
client. côté client.
</p> </p>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-debounce" <label
class="config-label"
for="cfg-debounce"
>Délai debounce (ms)</label >Délai debounce (ms)</label
> >
<input <input
@@ -1296,7 +1444,9 @@
> >
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-min-query" <label
class="config-label"
for="cfg-min-query"
>Longueur min. requête</label >Longueur min. requête</label
> >
<input <input
@@ -1314,7 +1464,9 @@
> >
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-timeout" <label
class="config-label"
for="cfg-timeout"
>Timeout recherche (ms)</label >Timeout recherche (ms)</label
> >
<input <input
@@ -1345,7 +1497,8 @@
<label <label
class="config-label" class="config-label"
for="cfg-recent-limit" for="cfg-recent-limit"
>Nombre de fichiers dans l'historique</label >Nombre de fichiers dans
l'historique</label
> >
<input <input
type="number" type="number"
@@ -1357,8 +1510,8 @@
value="20" value="20"
/> />
<span class="config-hint" <span class="config-hint"
>Entre 5 et 100 fichiers (sauvegarde sur le >Entre 5 et 100 fichiers (sauvegarde sur
serveur)</span le serveur)</span
> >
</div> </div>
<div class="config-row"> <div class="config-row">
@@ -1377,7 +1530,8 @@
value="10" value="10"
/> />
<span class="config-hint" <span class="config-hint"
>Nombre maximum de versions backup conservees par fichier (1-50)</span >Nombre maximum de versions backup
conservees par fichier (1-50)</span
> >
</div> </div>
</section> </section>
@@ -1391,13 +1545,15 @@
> >
</h2> </h2>
<p class="config-description"> <p class="config-description">
Ces paramètres sont sauvegardés sur le serveur. Ces paramètres sont sauvegardés sur le
Certains nécessitent un redémarrage ou une serveur. Certains nécessitent un redémarrage
réindexation. ou une réindexation.
</p> </p>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-workers" <label
class="config-label"
for="cfg-workers"
>Workers de recherche</label >Workers de recherche</label
> >
<input <input
@@ -1410,7 +1566,8 @@
value="2" value="2"
/> />
<span class="config-hint" <span class="config-hint"
>Threads dédiés à la recherche (1-8)</span >Threads dédiés à la recherche
(1-8)</span
> >
</div> </div>
<div class="config-row"> <div class="config-row">
@@ -1454,7 +1611,9 @@
> >
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-tag-boost" <label
class="config-label"
for="cfg-tag-boost"
>Boost tags</label >Boost tags</label
> >
<input <input
@@ -1472,7 +1631,9 @@
> >
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-prefix-exp" <label
class="config-label"
for="cfg-prefix-exp"
>Expansions préfixe max</label >Expansions préfixe max</label
> >
<input <input
@@ -1485,8 +1646,8 @@
value="50" value="50"
/> />
<span class="config-hint" <span class="config-hint"
>Nombre max de tokens élargis par préfixe >Nombre max de tokens élargis par
(10-200)</span préfixe (10-200)</span
> >
</div> </div>
@@ -1516,9 +1677,9 @@
<section class="config-section help-section"> <section class="config-section help-section">
<h2>Filtrage de tags</h2> <h2>Filtrage de tags</h2>
<p class="config-description"> <p class="config-description">
Définissez les patterns de tags à masquer dans Définissez les patterns de tags à masquer
la sidebar. Vous pouvez utiliser des wildcards dans la sidebar. Vous pouvez utiliser des
pour cibler les tags de template. wildcards pour cibler les tags de template.
</p> </p>
<div <div
@@ -1547,19 +1708,23 @@
style="display: none" style="display: none"
> >
<small <small
>Regex : <code id="config-regex-code"></code >Regex :
<code id="config-regex-code"></code
></small> ></small>
</div> </div>
</section> </section>
<!-- Watcher / Synchronisation --> <!-- Watcher / Synchronisation -->
<section class="config-section help-section" id="cfg-sync"> <section
class="config-section help-section"
id="cfg-sync"
>
<h2>Synchronisation automatique</h2> <h2>Synchronisation automatique</h2>
<p class="config-description"> <p class="config-description">
Surveillance des fichiers en temps réel via Surveillance des fichiers en temps réel via
watchdog. Les modifications sont détectées watchdog. Les modifications sont détectées
automatiquement et l'index est mis à jour sans automatiquement et l'index est mis à jour
redémarrage. sans redémarrage.
</p> </p>
<div class="config-row"> <div class="config-row">
@@ -1574,7 +1739,9 @@
id="cfg-watcher-enabled" id="cfg-watcher-enabled"
checked checked
/> />
<span class="config-toggle-slider"></span> <span
class="config-toggle-slider"
></span>
</label> </label>
<span class="config-hint" <span class="config-hint"
>Activer/désactiver la surveillance >Activer/désactiver la surveillance
@@ -1592,12 +1759,14 @@
type="checkbox" type="checkbox"
id="cfg-watcher-polling" id="cfg-watcher-polling"
/> />
<span class="config-toggle-slider"></span> <span
class="config-toggle-slider"
></span>
</label> </label>
<span class="config-hint" <span class="config-hint"
>Forcer le mode polling au lieu de inotify >Forcer le mode polling au lieu de
natif (utile si le mode natif ne fonctionne inotify natif (utile si le mode natif ne
pas)</span fonctionne pas)</span
> >
</div> </div>
<div class="config-row"> <div class="config-row">
@@ -1616,8 +1785,8 @@
value="5" value="5"
/> />
<span class="config-hint" <span class="config-hint"
>Intervalle de scrutation en mode polling >Intervalle de scrutation en mode
(1-30 secondes)</span polling (1-30 secondes)</span
> >
</div> </div>
<div class="config-row"> <div class="config-row">
@@ -1659,10 +1828,10 @@
border-radius: 4px; border-radius: 4px;
" "
> >
i️ <strong>Note :</strong> Tous les fichiers sont i️ <strong>Note :</strong> Tous les fichiers
toujours indexés et cherchables. Ce paramètre sont toujours indexés et cherchables. Ce
contrôle uniquement leur visibilité dans paramètre contrôle uniquement leur
l'interface. visibilité dans l'interface.
</p> </p>
<div id="hidden-files-vault-list"> <div id="hidden-files-vault-list">
@@ -1683,7 +1852,10 @@
</section> </section>
<!-- Diagnostics --> <!-- Diagnostics -->
<section class="config-section help-section" id="cfg-diags"> <section
class="config-section help-section"
id="cfg-diags"
>
<h2>Diagnostics</h2> <h2>Diagnostics</h2>
<p class="config-description"> <p class="config-description">
Statistiques de l'index et du moteur de Statistiques de l'index et du moteur de
@@ -1707,37 +1879,116 @@
</section> </section>
<!-- Cles API AI --> <!-- Cles API AI -->
<section class="config-section help-section" id="cfg-ai"> <section
class="config-section help-section"
id="cfg-ai"
>
<h2>🤖 Cles API Intelligence Artificielle</h2> <h2>🤖 Cles API Intelligence Artificielle</h2>
<p class="config-description"> <p class="config-description">
Configurez vos cles API. Cliquez sur <strong>Tester</strong> pour charger les modeles. Configurez vos cles API. Cliquez sur
<strong>Tester</strong> pour charger les
modeles.
</p> </p>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-deepseek-key">DeepSeek API Key</label> <label
<input type="password" id="cfg-deepseek-key" class="config-input" placeholder="sk-..." autocomplete="off"> class="config-label"
<select id="cfg-deepseek-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select> for="cfg-deepseek-key"
>DeepSeek API Key</label
>
<input
type="password"
id="cfg-deepseek-key"
class="config-input"
placeholder="sk-..."
autocomplete="off"
/>
<select
id="cfg-deepseek-model"
class="config-select"
style="width: 200px"
>
<option value="">-- Modele --</option>
</select>
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-openrouter-key">OpenRouter API Key</label> <label
<input type="password" id="cfg-openrouter-key" class="config-input" placeholder="sk-or-..." autocomplete="off"> class="config-label"
<select id="cfg-openrouter-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select> for="cfg-openrouter-key"
>OpenRouter API Key</label
>
<input
type="password"
id="cfg-openrouter-key"
class="config-input"
placeholder="sk-or-..."
autocomplete="off"
/>
<select
id="cfg-openrouter-model"
class="config-select"
style="width: 200px"
>
<option value="">-- Modele --</option>
</select>
</div> </div>
<div class="config-row"> <div class="config-row">
<label class="config-label" for="cfg-gemini-key">Gemini API Key</label> <label
<input type="password" id="cfg-gemini-key" class="config-input" placeholder="AIza..." autocomplete="off"> class="config-label"
<select id="cfg-gemini-model" class="config-select" style="width:200px"><option value="">-- Modele --</option></select> for="cfg-gemini-key"
>Gemini API Key</label
>
<input
type="password"
id="cfg-gemini-key"
class="config-input"
placeholder="AIza..."
autocomplete="off"
/>
<select
id="cfg-gemini-model"
class="config-select"
style="width: 200px"
>
<option value="">-- Modele --</option>
</select>
</div> </div>
<div class="config-actions-row" style="margin-top:16px"> <div
<button class="config-btn-save" id="cfg-save-ai-keys">Sauvegarder</button> class="config-actions-row"
<button class="config-btn-secondary" id="cfg-test-ai-keys">Tester</button> style="margin-top: 16px"
<span id="cfg-ai-status" style="font-size:12px;color:var(--text-muted);margin-left:12px"></span> >
<button
class="config-btn-save"
id="cfg-save-ai-keys"
>
Sauvegarder
</button>
<button
class="config-btn-secondary"
id="cfg-test-ai-keys"
>
Tester
</button>
<span
id="cfg-ai-status"
style="
font-size: 12px;
color: var(--text-muted);
margin-left: 12px;
"
></span>
</div> </div>
</section> </section>
<!-- À propos --> <!-- À propos -->
<section class="config-section help-section" id="cfg-about"> <section
class="config-section help-section"
id="cfg-about"
>
<h2>📦 À propos</h2> <h2>📦 À propos</h2>
<div id="config-about" class="config-diagnostics"> <div
id="config-about"
class="config-diagnostics"
>
<div class="config-diag-loading"> <div class="config-diag-loading">
Chargement... Chargement...
</div> </div>
@@ -1748,8 +1999,8 @@
<section class="config-section help-section"> <section class="config-section help-section">
<h2>🔔 Webhooks</h2> <h2>🔔 Webhooks</h2>
<p class="config-description"> <p class="config-description">
Notifications HTTP vers des services externes Notifications HTTP vers des services
lors des changements de fichiers. externes lors des changements de fichiers.
</p> </p>
<div id="webhooks-list"></div> <div id="webhooks-list"></div>
<div class="config-add-row"> <div class="config-add-row">
@@ -4499,8 +4750,21 @@ curl -X POST https://votre-serveur.com/webhook \
<div class="mt-sheet-header"> <div class="mt-sheet-header">
<span class="mt-sheet-title">Fichiers ouverts</span> <span class="mt-sheet-title">Fichiers ouverts</span>
<div class="mt-sheet-actions"> <div class="mt-sheet-actions">
<button class="mt-sheet-close-all" id="mt-close-all" title="Fermer tout" aria-label="Fermer tous les fichiers">Fermer tout</button> <button
<button class="mt-sheet-close" id="mt-sheet-close" aria-label="Fermer">✕</button> class="mt-sheet-close-all"
id="mt-close-all"
title="Fermer tout"
aria-label="Fermer tous les fichiers"
>
Fermer tout
</button>
<button
class="mt-sheet-close"
id="mt-sheet-close"
aria-label="Fermer"
>
✕
</button>
</div> </div>
</div> </div>
<div class="mt-sheet-list" id="mt-tab-list"></div> <div class="mt-sheet-list" id="mt-tab-list"></div>