From 0d4f43a8bf941095fb24210304ebb4b9878e7e94 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Wed, 16 Sep 2026 20:22:13 -0400 Subject: [PATCH] test(ai): collecter toutes les requetes pour eviter la course avec l'hydratation d'historique --- CHANGELOG.md | 6 +++++- README.fr.md | 6 +++--- README.md | 6 +++--- VERSION | 2 +- desktop/Cargo.lock | 2 +- desktop/Cargo.toml | 2 +- desktop/tauri.conf.json | 2 +- docs/ROADMAP.md | 2 +- package.json | 2 +- tests/frontend/ai.test.mjs | 26 ++++++++++++++++---------- 10 files changed, 33 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd5d954..729f187 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/), et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). > **En cours de développement** : les changements à venir sont listés dans la section -> [Unreleased](#unreleased). La dernière version livrée est **2.6.0**. +> [Unreleased](#unreleased). La dernière version livrée est **2.6.1**. --- @@ -14,6 +14,10 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.6.1] — 2026-09-16 + +--- + ## [2.6.0] — 2026-09-16 ### Ajouté diff --git a/README.fr.md b/README.fr.md index a03a879..87fb83b 100644 --- a/README.fr.md +++ b/README.fr.md @@ -4,7 +4,7 @@ **Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive. -[![Version](https://img.shields.io/badge/Version-2.6.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.6.1-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -916,8 +916,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l ## 📝 Changelog -Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.6.0). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.6.1). --- -*Projet : ObsiGate | Version : 2.6.0 | Dernière mise à jour : Juin 2026* +*Projet : ObsiGate | Version : 2.6.1 | Dernière mise à jour : Juin 2026* diff --git a/README.md b/README.md index f88554b..9ddc2c1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface. -[![Version](https://img.shields.io/badge/Version-2.6.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.6.1-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -1085,8 +1085,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) ## 📝 Changelog -See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.6.0). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.6.1). --- -*Project: ObsiGate | Version: 2.6.0 | Last updated: May 2026* +*Project: ObsiGate | Version: 2.6.1 | Last updated: May 2026* diff --git a/VERSION b/VERSION index e70b452..6a6a3d8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.0 +2.6.1 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index 1ebe213..891dbfc 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.6.0" +version = "2.6.1" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index 5f0481a..c7608cb 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.6.0" +version = "2.6.1" description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian" authors = ["Bruno Charest"] edition = "2021" diff --git a/desktop/tauri.conf.json b/desktop/tauri.conf.json index a289779..f7f9db5 100644 --- a/desktop/tauri.conf.json +++ b/desktop/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json", "productName": "ObsiGate", - "version": "2.6.0", + "version": "2.6.1", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 6e4f86b..63a3491 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.6.0 | **Dernière mise à jour :** 2026-09-16 +> **Version :** 2.6.1 | **Dernière mise à jour :** 2026-09-16 > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > vers les fonctionnalités livrées. > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** diff --git a/package.json b/package.json index 055323c..b13f008 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsigate", - "version": "2.6.0", + "version": "2.6.1", "description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.", "main": "patch.js", "directories": { diff --git a/tests/frontend/ai.test.mjs b/tests/frontend/ai.test.mjs index 8fe4bc4..084c975 100644 --- a/tests/frontend/ai.test.mjs +++ b/tests/frontend/ai.test.mjs @@ -1371,10 +1371,15 @@ async function main() { stateMod.state.allVaults = []; stateMod.state.selectedContextVault = null; stateMod.state.currentVault = null; - let lastUrl = ""; + // Collect every request: `new BooksLM()` also hydrates the AI history + // asynchronously, so the *last* URL is not necessarily the tree-search one. + const urls = []; + const sawTreeSearchAll = () => urls.some( + (u) => u.includes("/api/tree-search") && u.includes("vault=all"), + ); globalThis.fetch = async (url) => { - lastUrl = String(url); - if (lastUrl.includes("/api/tree-search")) { + urls.push(String(url)); + if (String(url).includes("/api/tree-search")) { return { ok: true, status: 200, json: async () => ({ results: [{ path: "Café/note.md", type: "file" }] }), @@ -1392,13 +1397,13 @@ async function main() { b._onComposerInput(); const menu = b._panel.querySelector(".bookslm-mention-menu"); let waited = 0; - while (!lastUrl.includes("tree-search") && waited < 500) { + while (!sawTreeSearchAll() && waited < 500) { await sleep(20); waited += 20; } assert.ok(!menu.classList.contains("hidden"), "accented mention keeps the menu open"); - assert.ok(lastUrl.includes("vault=all"), - `no vault -> searches all vaults (got last fetch "${lastUrl}")`); + assert.ok(sawTreeSearchAll(), + `no vault -> searches all vaults (got ${JSON.stringify(urls)})`); assert.equal(menu.querySelectorAll(".bookslm-menu-item").length, 1); b._panel.remove(); localStorage.clear(); @@ -1687,10 +1692,10 @@ async function main() { const stateMod = await import(pathToFileURL(path.join(JS_DIR, "state.js")).href); const prev = stateMod.state.allVaults; stateMod.state.allVaults = [{ name: "FallbackVault" }]; - let lastUrl = ""; + const urls = []; globalThis.fetch = async (url) => { - lastUrl = String(url); - if (lastUrl.includes("/files")) { + urls.push(String(url)); + if (String(url).includes("/files")) { return { ok: true, status: 200, json: async () => ({ files: [{ path: "a.md" }] }) }; } return { ok: true, status: 200, json: async () => ({}) }; @@ -1703,7 +1708,8 @@ async function main() { await b._showMentionMenu(""); const menu = b._panel.querySelector(".bookslm-mention-menu"); assert.ok(!menu.classList.contains("hidden"), "empty-query menu is shown"); - assert.ok(lastUrl.includes("FallbackVault"), "uses the fallback vault"); + assert.ok(urls.some((u) => u.includes("/files") && u.includes("FallbackVault")), + `uses the fallback vault (got ${JSON.stringify(urls)})`); stateMod.state.allVaults = prev; b._panel.remove(); localStorage.clear();