From 4230ac10522f72a376d04874965e7a7d9e3062f9 Mon Sep 17 00:00:00 2001 From: Spark Date: Thu, 22 Oct 2026 21:18:49 +0000 Subject: [PATCH] =?UTF-8?q?Panneau=20Spark=20:=20bouton=20=C2=AB=20Console?= =?UTF-8?q?=20=E2=86=97=20=C2=BB=20vers=20la=20console=20du=20service=20(0?= =?UTF-8?q?.28.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 13 +++++++++++++ app/config.py | 2 +- pyproject.toml | 2 +- static/js/draco-panneau.js | 23 +++++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3998c0e..bffe6f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 0.28.1 — 2026-10-22 + +### Ajouté — panneau Spark : bouton « Console ↗ » + +Bouton « Console ↗ » dans la barre des discussions du panneau +Spark (demande de Bruno) : 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=kanbante`, +déduite du sous-domaine). Panneau recopié octet-identique dans +les 4 apps (TikTak 0.59.1, Flowdeck 7.80.1, Kanbante 0.28.1, +ObsiGate 2.76.1). **Redéploiement Docker requis** pour l'activer. + ## 0.28.0 — 2026-10-22 ### Ajouté — émission d'événements vers le journal du service d'agents (Lot 2) diff --git a/app/config.py b/app/config.py index 5ad5f1e..1451ce4 100644 --- a/app/config.py +++ b/app/config.py @@ -113,7 +113,7 @@ from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent -APP_VERSION = "0.28.0" +APP_VERSION = "0.28.1" def _env_bool(name: str, default: bool) -> bool: diff --git a/pyproject.toml b/pyproject.toml index dd839bc..596f073 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kanbante" -version = "0.28.0" +version = "0.28.1" description = "Kanban project manager integrated with Gitea" requires-python = ">=3.11" dependencies = [ diff --git a/static/js/draco-panneau.js b/static/js/draco-panneau.js index 5a0d8ec..b954674 100644 --- a/static/js/draco-panneau.js +++ b/static/js/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);