fix(ai): espaces dans les noms de fichiers et chemins des liens (BUG-042)
Les noms/paths de l'assistant peuvent contenir des espaces ; la detection et la resolution les prennent desormais en charge de bout en bout : - liens markdown : cible avec espaces, encadree par <...> ou avec un "titre", et URL percent-encodees (%20) decodees ; - code inline : `Ma note.md` / `Mon dossier/Ma note.md` reconnus (_looksLikePath accepte les espaces, jeu de caracteres strict pour rejeter extraits de code et commandes shell) ; - mentions brutes : liees uniquement si presentes dans l'index du vault (_linkifySpacePaths + _confirmPathInCache), avec acceptation du plus long suffixe aligne sur un mot -> le mot de prose precedent n'est pas avale ; - _normalizeLinkPath : trim ; _renderMdLink : decodage %20. Tests : frontend IA 57/57 (+5), 9 suites JSDOM, validate-imports 36 modules, pytest 963 passed / 6 skipped.
This commit is contained in:
@@ -64,10 +64,28 @@ Avant d'agir, `_activatePath()` **résout** le chemin contre l'index du vault
|
||||
(segment de tête omis par le modèle), puis basename unique. Les chemins non
|
||||
résolus copient le nom au lieu d'ouvrir un lien mort — plus de `File not found`.
|
||||
|
||||
### 4. Espaces dans les noms de fichiers et les chemins (BUG-042)
|
||||
|
||||
Les noms de fichiers/dossiers pouvant contenir des espaces, la détection est
|
||||
adaptée :
|
||||
|
||||
- **Liens markdown** : la cible peut contenir des espaces, être encadrée par
|
||||
`<…>` ou porter un `"titre"` ; les URL percent-encodées (`%20`) sont décodées.
|
||||
- **Code inline** : `` `Ma note.md` `` / `` `Mon dossier/Ma note.md` `` sont
|
||||
reconnus (`_looksLikePath` accepte les espaces en gardant un jeu de caractères
|
||||
strict, ce qui rejette les extraits de code et commandes shell).
|
||||
- **Mentions brutes** : une mention avec espaces n'est liée **que si elle existe
|
||||
réellement dans l'index du vault** (`_linkifySpacePaths` +
|
||||
`_confirmPathInCache`), et l'acceptation se fait sur le **plus long suffixe
|
||||
aligné sur un mot** — ainsi « Ouvre Mon dossier/Ma note.md » ne crée pas de
|
||||
lien englobant « Ouvre » et la prose ordinaire n'est jamais liée à tort.
|
||||
|
||||
## Tests
|
||||
|
||||
- `tests/frontend/ai.test.mjs` : classification (`name`/`file`/`dir`), routage
|
||||
`_activatePath` (ouvre/révèle/copie), clic d'un lien « nom » → presse-papiers.
|
||||
`_activatePath` (ouvre/révèle/copie), clic d'un lien « nom » → presse-papiers,
|
||||
et prise en charge des espaces (code inline, liens markdown `%20`, mentions
|
||||
brutes liées uniquement si présentes dans l'index, résolution au clic).
|
||||
- `tests/test_bookslm.py` : `build_general_system_prompt` avec `app_context` +
|
||||
`recent_files` ; prompt inchangé sans contexte ; chat sur dossier vide ne
|
||||
renvoie plus 404.
|
||||
|
||||
Reference in New Issue
Block a user