test(ai): collecter toutes les requetes pour eviter la course avec l'hydratation d'historique
CI / lint (push) Successful in 1m31s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 2m42s
CI / build (push) Successful in 55s
CI / e2e (push) Successful in 11m10s

This commit is contained in:
2026-09-16 20:22:15 -04:00
parent 4231f2e929
commit 0d4f43a8bf
10 changed files with 33 additions and 23 deletions
+5 -1
View File
@@ -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é
+3 -3
View File
@@ -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*
+3 -3
View File
@@ -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*
+1 -1
View File
@@ -1 +1 @@
2.6.0
2.6.1
+1 -1
View File
@@ -2626,7 +2626,7 @@ dependencies = [
[[package]]
name = "obsigate-desktop"
version = "2.6.0"
version = "2.6.1"
dependencies = [
"chrono",
"env_logger",
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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)**
+1 -1
View File
@@ -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": {
+16 -10
View File
@@ -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();