fix: bouton « Console ↗ » dans le panneau Spark #221
This commit is contained in:
+18
-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).
|
||||
|
||||
> **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=<id>`, 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é
|
||||
|
||||
+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.
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.docker.com/)
|
||||
[](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*
|
||||
|
||||
@@ -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.
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.docker.com/)
|
||||
[](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*
|
||||
|
||||
Generated
+1
-1
@@ -2626,7 +2626,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.76.0"
|
||||
version = "2.76.1"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"env_logger",
|
||||
|
||||
+1
-1
@@ -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"
|
||||
|
||||
@@ -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",
|
||||
|
||||
+20
-1
@@ -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=<id>`, 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)
|
||||
|
||||
@@ -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=<id de la discussion affichée>&app=<app hôte>` ;
|
||||
- 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.**
|
||||
@@ -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 @@
|
||||
' <span class="d-titre">Discussion principale</span>' +
|
||||
' <button type="button" class="d-btn" data-disc="liste">☰ Discussions</button>' +
|
||||
' <button type="button" class="d-btn" data-disc="nouvelle">+ Nouvelle</button>' +
|
||||
' <button type="button" class="d-btn" data-disc="console" title="Ouvrir la console Spark (agent.dracodev.net) dans un nouvel onglet, sur cette discussion">Console ↗</button>' +
|
||||
'</div>' +
|
||||
'<div class="draco-discussions" hidden></div>' +
|
||||
'<div class="draco-panneau-outils">' +
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -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": {
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user