diff --git a/CHANGELOG.md b/CHANGELOG.md index ef563e5..dd03f28 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.76.0**. +> [Unreleased](#unreleased). La dernière version livrée est **2.76.1**. --- @@ -14,6 +14,23 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.76.1] — 2026-10-22 + +### Ajouté + +- **Panneau Spark : bouton « Console ↗ » (#221, Fusion)** — la + barre des discussions du panneau Spark (asset vendangé, + octet-identique dans les 4 apps) gagne un bouton « Console ↗ » + qui ouvre la console web du service d'agents + (https://agent.dracodev.net/) dans un nouvel onglet, sur la + discussion actuellement affichée (`?disc=`, URL construite + au clic) et avec l'app d'origine (`?app=obsigate`, déduite du + sous-domaine `og`). Même livraison dans TikTak 0.59.1, + Flowdeck 7.80.1 et Kanbante 0.28.1. Redéploiement Docker + requis pour l'activer côté ObsiGate. + +--- + ## [2.76.0] — 2026-10-22 ### Ajouté diff --git a/README.fr.md b/README.fr.md index 7a624f2..f7d7cbd 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.76.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.76.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/) @@ -977,8 +977,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.76.0). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.76.1). --- -*Projet : ObsiGate | Version : 2.76.0 | Dernière mise à jour : Septembre 2026* +*Projet : ObsiGate | Version : 2.76.1 | Dernière mise à jour : Septembre 2026* diff --git a/README.md b/README.md index 42944b5..6b80c33 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.76.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.76.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/) @@ -1152,8 +1152,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.76.0). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.76.1). --- -*Project: ObsiGate | Version: 2.76.0 | Last updated: September 2026* +*Project: ObsiGate | Version: 2.76.1 | Last updated: September 2026* diff --git a/VERSION b/VERSION index 9445334..7c4107c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.76.0 +2.76.1 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index c0cf5f1..765a550 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.76.0" +version = "2.76.1" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index ba8f192..f52575a 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.76.0" +version = "2.76.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 e2acc08..ed0910c 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.76.0", + "version": "2.76.1", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 470f27f..386bb13 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.76.0 | **Dernière mise à jour :** 2026-10-22 +> **Version :** 2.76.1 | **Dernière mise à jour :** 2026-10-22 > **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)** @@ -30,6 +30,25 @@ ## 🔵 En cours +### 221. Fusion — panneau Spark : bouton « Console ↗ » vers la console du service + +- **Effort :** ~0,1 jour | **Impact :** 🟢 | **Ouvert :** 2026-10-22 | **Statut :** 🔵 en cours +- **Fiche :** [features/fusion-panneau-console-221.md](./features/fusion-panneau-console-221.md) +- **Description :** le panneau Spark (asset vendangé `frontend/draco-panneau.js`, + octet-identique dans les 4 apps) gagne un bouton « Console ↗ » dans sa barre + des discussions (demande de Bruno, 2026-10-22) : il ouvre la console web du + service d'agents (https://agent.dracodev.net/) dans un nouvel onglet, sur la + discussion actuellement affichée (`?disc=`, URL construite au clic) et + avec l'app d'origine (`?app=obsigate`, déduite du sous-domaine `og`). La + console consomme déjà ces deux paramètres (lien profond de discussion + + puce « Ouvert depuis »). Même livraison : TikTak 0.59.1, Flowdeck 7.80.1, + Kanbante 0.28.1. +- **Sous-tâches :** + - [x] Bouton + `ouvrirConsole()` / `appHote()` dans le panneau canonique + (TikTak), recopié octet-identique dans les 4 apps + - [x] Test `tests/test_draco_barre.py::test_panneau_bouton_console_221` + - [ ] CI verte + redéploiement Docker (geste de Bruno) + ### 220. Fusion — émission d'événements vers le journal du service d'agents (Lot 2, vague 5) - **Effort :** ~0,5 jour | **Impact :** 🟢 | **Ouvert :** 2026-10-22 | **Statut :** ✅ livré le 2026-10-22 (2.76.0, redéploiement Docker en attente) diff --git a/docs/features/fusion-panneau-console-221.md b/docs/features/fusion-panneau-console-221.md new file mode 100644 index 0000000..d051d1e --- /dev/null +++ b/docs/features/fusion-panneau-console-221.md @@ -0,0 +1,42 @@ +# #221 — Fusion : bouton « Console ↗ » dans le panneau Spark + +**Contexte.** Le panneau Spark (#218) et la console web du service +d'agents (Lot 2, https://agent.dracodev.net/) sont deux faces du même +service : mêmes discussions, mêmes approbations, mêmes missions. Il +manquait le lien de navigation entre les deux. Demande de Bruno +(2026-10-22) : un bouton dans le panneau qui ouvre la console. + +**Changement.** Dans `frontend/draco-panneau.js` — asset **vendangé**, +maintenu en canonique dans TikTak et recopié **octet-identique** dans +les 4 applications (TikTak, Flowdeck, Kanbante, ObsiGate) : + +- un bouton fantôme « Console ↗ » dans la barre des discussions, à + côté de « ☰ Discussions » et « + Nouvelle » (même classe `d-btn`, + donc visible en thème clair comme sombre, le panneau suivant le + thème de l'app hôte) ; +- au clic, `ouvrirConsole()` construit l'URL **à ce moment-là** (la + discussion peut avoir changé sans recharger le panneau) : + `https://agent.dracodev.net/?disc=&app=` ; +- la discussion vient de l'état du panneau (`convId`, repli + `sessionStorage draco_panneau_conv`) ; l'app hôte est déduite du + sous-domaine par `appHote()` (`og` → `obsigate`, `tiktak`, + `flowdeck`, `kanbante` ; hôte inconnu → pas de paramètre) ; +- ouverture en **nouvel onglet** (`window.open(..., "_blank", + "noopener")`). Sans discussion connue : lien simple vers la + racine de la console. + +La console consomme déjà les deux paramètres : `?disc=` ouvre la +discussion demandée (lien profond), `?app=` s'affiche en puce +« Ouvert depuis : … » dans « Ce que Spark voit ». + +**Vérifications.** Syntaxe JS (`node --check`), test fonctionnel de +la construction d'URL (4 cas : app connue/inconnue × discussion +présente/absente), test de non-régression +`tests/test_draco_barre.py::test_panneau_bouton_console_221` +(marqueurs du bouton et de la logique dans l'asset servi), somme +md5 commune des 4 copies : `c67cc2ab8e657b4e545fa93b28c3a0c4`. + +**Versions.** ObsiGate 2.76.1 (cette livraison) ; TikTak 0.59.1 et +Flowdeck 7.80.1 déployées automatiquement sur release ; Kanbante +0.28.1 publiée. **Activation côté ObsiGate : redéploiement Docker +par Bruno.** diff --git a/frontend/draco-panneau.js b/frontend/draco-panneau.js index 5a0d8ec..b954674 100644 --- a/frontend/draco-panneau.js +++ b/frontend/draco-panneau.js @@ -18,6 +18,10 @@ * Panneau v2 (Lot 1) : rendu Markdown, largeur réglable à la souris * (persistée), thème clair/sombre aligné sur l'app hôte * (html[data-theme], repli prefers-color-scheme, suivi en direct). + * Bouton « Console ↗ » (barre des discussions) : ouvre la console web + * du même service (agent.dracodev.net) dans un nouvel onglet, sur la + * discussion courante (?disc=) et avec l'app d'origine (?app=), + * déduite du sous-domaine de l'hôte. * États honnêtes : service injoignable / session non reconnue / LLM non * configuré / exécuteur non configuré sont affichés tels quels. */ (function () { @@ -44,6 +48,23 @@ catch (e) { return null; } } + /* ── Console web (même service, nouvel onglet) ─────────────── */ + function appHote() { + var h = (window.location.hostname || "").split(".")[0]; + var correspondance = { tiktak: "tiktak", flowdeck: "flowdeck", + kanbante: "kanbante", og: "obsigate" }; + return correspondance[h] || null; + } + function ouvrirConsole() { + var params = []; + var id = convId || convStockee(); + if (id) params.push("disc=" + encodeURIComponent(id)); + var app = appHote(); + if (app) params.push("app=" + encodeURIComponent(app)); + window.open(API + "/" + (params.length ? "?" + params.join("&") : ""), + "_blank", "noopener"); + } + /* ── Thème : suivre l'app hôte ─────────────────────────────── */ function themeHote() { var t = document.documentElement.getAttribute("data-theme"); @@ -122,6 +143,7 @@ ' Discussion principale' + ' ' + ' ' + + ' ' + '' + '' + '
' + @@ -145,6 +167,7 @@ root.querySelector(".fermer").addEventListener("click", fermer); root.querySelector('[data-disc="liste"]').addEventListener("click", basculerTiroir); root.querySelector('[data-disc="nouvelle"]').addEventListener("click", nouvelleDiscussion); + root.querySelector('[data-disc="console"]').addEventListener("click", ouvrirConsole); root.querySelector('[data-outil="aujourdhui"]').addEventListener("click", chargerAujourdhui); root.querySelector('[data-outil="approbations"]').addEventListener("click", chargerApprobations); root.querySelector('[data-outil="missions"]').addEventListener("click", ouvrirMissions); diff --git a/package.json b/package.json index 2577d39..e82f37d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsigate", - "version": "2.76.0", + "version": "2.76.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/test_draco_barre.py b/tests/test_draco_barre.py index 75c1268..de528f1 100644 --- a/tests/test_draco_barre.py +++ b/tests/test_draco_barre.py @@ -58,6 +58,23 @@ def test_panneau_spark_integre_218(): assert "https://agent.dracodev.net" in panneau +def test_panneau_bouton_console_221(): + # #221 : le panneau Spark (asset vendangé, octet-identique dans + # les 4 apps) porte un bouton « Console ↗ » qui ouvre la console + # web du service dans un nouvel onglet, sur la discussion + # courante (?disc=) et avec l'app d'origine (?app= déduite du + # sous-domaine : og → obsigate). + panneau = (FRONTEND / "draco-panneau.js").read_text(encoding="utf-8") + assert 'data-disc="console"' in panneau + assert "Console ↗" in panneau + assert "ouvrirConsole" in panneau + assert '"disc=" + encodeURIComponent(id)' in panneau + assert '"app=" + encodeURIComponent(app)' in panneau + assert 'og: "obsigate"' in panneau + assert 'window.open(API + "/"' in panneau + assert '"_blank", "noopener"' in panneau + + def test_csp_ouvre_le_service_d_agents_218(): # Le panneau parle au service d'agents : la CSP doit nommer son # hôte en connect-src, sans ouvrir de générique supplémentaire.