feat(web): sélecteur de répertoire (parcourir au lieu de taper le chemin)
All checks were successful
CI / Build & test (Node 22) (push) Successful in 9m45s
CI / Build & test (Node 24) (push) Successful in 9m42s
CI / Pack & boot smoke (Node 22) (push) Successful in 9m44s

Ajoute un navigateur de dossiers réutilisable sur les deux champs qui
exigeaient un chemin absolu tapé à la main : « Répertoire de travail »
(nouvelle session) et « Chemin du dépôt » (ajout de repo). Un bouton
« Parcourir… » déplie un panneau inline ; le champ texte reste pour
taper/coller un chemin connu. Pour l'ajout de repo, les sous-dossiers
qui sont des dépôts git sont signalés par un badge.

Serveur : nouvel endpoint GET /api/v1/fs/list (authentifié par le hook
preValidation global), ne renvoie que des noms de sous-dossiers (jamais
de contenu de fichier). Valide le chemin via resolve() (clampe à la
racine, neutralise « .. »), masque les dotfiles par défaut (showHidden),
annote les dépôts git (markRepos), tolère les entrées illisibles.

Tests : packages/server/test/fs-routes.test.ts (10 cas — listing, tri,
hidden, markRepos, rejets 400/404, auth 401). Suite : 185/185 verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Johan LEROY
2026-06-17 13:04:10 +02:00
parent 8c45852232
commit 416e5577cb
9 changed files with 378 additions and 0 deletions

View File

@@ -106,6 +106,15 @@ const fr: typeof en = {
denied: 'Permission de notification refusée — activez-la dans les réglages du navigateur.',
unsupported: 'Le push nécessite HTTPS (ex. Tailscale Serve) ; sur iOS, installez dabord lapp sur lécran daccueil.',
},
fs: {
browse: 'Parcourir…',
up: 'Remonter',
useFolder: 'Utiliser ce dossier',
showHidden: 'Afficher les cachés',
loading: 'Chargement…',
empty: 'Aucun sous-dossier',
repoBadge: 'dépôt',
},
ws: {
reconnecting: 'Connexion perdue — reconnexion…',
},