test(ai): collecter toutes les requetes pour eviter la course avec l'hydratation d'historique
This commit is contained in:
+5
-1
@@ -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).
|
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
|
> **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
|
## [2.6.0] — 2026-09-16
|
||||||
|
|
||||||
### Ajouté
|
### Ajouté
|
||||||
|
|||||||
+3
-3
@@ -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.
|
**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.
|
||||||
|
|
||||||
[]()
|
[]()
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](https://opensource.org/licenses/MIT)
|
||||||
[](https://www.docker.com/)
|
[](https://www.docker.com/)
|
||||||
[](https://www.python.org/)
|
[](https://www.python.org/)
|
||||||
@@ -916,8 +916,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l
|
|||||||
|
|
||||||
## 📝 Changelog
|
## 📝 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*
|
||||||
|
|||||||
@@ -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.
|
**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.
|
||||||
|
|
||||||
[]()
|
[]()
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](https://opensource.org/licenses/MIT)
|
||||||
[](https://www.docker.com/)
|
[](https://www.docker.com/)
|
||||||
[](https://www.python.org/)
|
[](https://www.python.org/)
|
||||||
@@ -1085,8 +1085,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE)
|
|||||||
|
|
||||||
## 📝 Changelog
|
## 📝 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*
|
||||||
|
|||||||
Generated
+1
-1
@@ -2626,7 +2626,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "obsigate-desktop"
|
name = "obsigate-desktop"
|
||||||
version = "2.6.0"
|
version = "2.6.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "obsigate-desktop"
|
name = "obsigate-desktop"
|
||||||
version = "2.6.0"
|
version = "2.6.1"
|
||||||
description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian"
|
description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian"
|
||||||
authors = ["Bruno Charest"]
|
authors = ["Bruno Charest"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json",
|
"$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json",
|
||||||
"productName": "ObsiGate",
|
"productName": "ObsiGate",
|
||||||
"version": "2.6.0",
|
"version": "2.6.1",
|
||||||
"identifier": "com.obsigate.desktop",
|
"identifier": "com.obsigate.desktop",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../frontend",
|
"frontendDist": "../frontend",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# ObsiGate — Roadmap
|
# 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
|
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
|
||||||
> vers les fonctionnalités livrées.
|
> vers les fonctionnalités livrées.
|
||||||
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
|
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "obsigate",
|
"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.",
|
"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",
|
"main": "patch.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
|||||||
+16
-10
@@ -1371,10 +1371,15 @@ async function main() {
|
|||||||
stateMod.state.allVaults = [];
|
stateMod.state.allVaults = [];
|
||||||
stateMod.state.selectedContextVault = null;
|
stateMod.state.selectedContextVault = null;
|
||||||
stateMod.state.currentVault = 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) => {
|
globalThis.fetch = async (url) => {
|
||||||
lastUrl = String(url);
|
urls.push(String(url));
|
||||||
if (lastUrl.includes("/api/tree-search")) {
|
if (String(url).includes("/api/tree-search")) {
|
||||||
return {
|
return {
|
||||||
ok: true, status: 200,
|
ok: true, status: 200,
|
||||||
json: async () => ({ results: [{ path: "Café/note.md", type: "file" }] }),
|
json: async () => ({ results: [{ path: "Café/note.md", type: "file" }] }),
|
||||||
@@ -1392,13 +1397,13 @@ async function main() {
|
|||||||
b._onComposerInput();
|
b._onComposerInput();
|
||||||
const menu = b._panel.querySelector(".bookslm-mention-menu");
|
const menu = b._panel.querySelector(".bookslm-mention-menu");
|
||||||
let waited = 0;
|
let waited = 0;
|
||||||
while (!lastUrl.includes("tree-search") && waited < 500) {
|
while (!sawTreeSearchAll() && waited < 500) {
|
||||||
await sleep(20);
|
await sleep(20);
|
||||||
waited += 20;
|
waited += 20;
|
||||||
}
|
}
|
||||||
assert.ok(!menu.classList.contains("hidden"), "accented mention keeps the menu open");
|
assert.ok(!menu.classList.contains("hidden"), "accented mention keeps the menu open");
|
||||||
assert.ok(lastUrl.includes("vault=all"),
|
assert.ok(sawTreeSearchAll(),
|
||||||
`no vault -> searches all vaults (got last fetch "${lastUrl}")`);
|
`no vault -> searches all vaults (got ${JSON.stringify(urls)})`);
|
||||||
assert.equal(menu.querySelectorAll(".bookslm-menu-item").length, 1);
|
assert.equal(menu.querySelectorAll(".bookslm-menu-item").length, 1);
|
||||||
b._panel.remove();
|
b._panel.remove();
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
@@ -1687,10 +1692,10 @@ async function main() {
|
|||||||
const stateMod = await import(pathToFileURL(path.join(JS_DIR, "state.js")).href);
|
const stateMod = await import(pathToFileURL(path.join(JS_DIR, "state.js")).href);
|
||||||
const prev = stateMod.state.allVaults;
|
const prev = stateMod.state.allVaults;
|
||||||
stateMod.state.allVaults = [{ name: "FallbackVault" }];
|
stateMod.state.allVaults = [{ name: "FallbackVault" }];
|
||||||
let lastUrl = "";
|
const urls = [];
|
||||||
globalThis.fetch = async (url) => {
|
globalThis.fetch = async (url) => {
|
||||||
lastUrl = String(url);
|
urls.push(String(url));
|
||||||
if (lastUrl.includes("/files")) {
|
if (String(url).includes("/files")) {
|
||||||
return { ok: true, status: 200, json: async () => ({ files: [{ path: "a.md" }] }) };
|
return { ok: true, status: 200, json: async () => ({ files: [{ path: "a.md" }] }) };
|
||||||
}
|
}
|
||||||
return { ok: true, status: 200, json: async () => ({}) };
|
return { ok: true, status: 200, json: async () => ({}) };
|
||||||
@@ -1703,7 +1708,8 @@ async function main() {
|
|||||||
await b._showMentionMenu("");
|
await b._showMentionMenu("");
|
||||||
const menu = b._panel.querySelector(".bookslm-mention-menu");
|
const menu = b._panel.querySelector(".bookslm-mention-menu");
|
||||||
assert.ok(!menu.classList.contains("hidden"), "empty-query menu is shown");
|
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;
|
stateMod.state.allVaults = prev;
|
||||||
b._panel.remove();
|
b._panel.remove();
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
|
|||||||
Reference in New Issue
Block a user