Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fddbaec82e |
+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.78.2**.
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.79.0**.
|
||||
|
||||
---
|
||||
|
||||
@@ -14,6 +14,23 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
---
|
||||
|
||||
## [2.79.0] — 2026-10-26
|
||||
|
||||
### Ajouté
|
||||
|
||||
- **Panneau Spark : version du service d'agents visible en mode
|
||||
sidebar (#225)** — le pied du panneau Spark
|
||||
(`frontend/draco-panneau.js`, asset partagé des 4 applications)
|
||||
affiche la ligne discrète « Service d'agents vX », comme la
|
||||
console pleine page. La version est lue en direct dans la santé
|
||||
du service (`GET /healthz` de l'origine injectée par l'hôte), à
|
||||
l'ouverture du panneau, avec cache de session ; jamais une
|
||||
valeur codée en dur — service injoignable, rien d'affiché.
|
||||
Demande de Bruno (2026-10-26), carte fusion #64 ; même
|
||||
livraison : TikTak 0.61.3, Flowdeck 7.83.1, Kanbante 0.37.1.
|
||||
|
||||
---
|
||||
|
||||
## [2.78.2] — 2026-10-26
|
||||
|
||||
### Corrigé
|
||||
|
||||
+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.78.2).
|
||||
Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.79.0).
|
||||
|
||||
---
|
||||
|
||||
*Projet : ObsiGate | Version : 2.78.2 | Dernière mise à jour : Septembre 2026*
|
||||
*Projet : ObsiGate | Version : 2.79.0 | 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.78.2).
|
||||
See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.79.0).
|
||||
|
||||
---
|
||||
|
||||
*Project: ObsiGate | Version: 2.78.2 | Last updated: September 2026*
|
||||
*Project: ObsiGate | Version: 2.79.0 | Last updated: September 2026*
|
||||
|
||||
Generated
+1
-1
@@ -2626,7 +2626,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.78.2"
|
||||
version = "2.79.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"env_logger",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.78.2"
|
||||
version = "2.79.0"
|
||||
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.78.2",
|
||||
"version": "2.79.0",
|
||||
"identifier": "com.obsigate.desktop",
|
||||
"build": {
|
||||
"frontendDist": "../frontend",
|
||||
|
||||
+20
-1
@@ -1,6 +1,6 @@
|
||||
# ObsiGate — Roadmap
|
||||
|
||||
> **Version :** 2.78.2 | **Dernière mise à jour :** 2026-10-26
|
||||
> **Version :** 2.79.0 | **Dernière mise à jour :** 2026-10-26
|
||||
> **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,24 @@
|
||||
|
||||
## 🔵 En cours
|
||||
|
||||
### 225. Fusion — panneau Spark : version du service d'agents visible en mode sidebar
|
||||
|
||||
- **Effort :** ~0,1 jour | **Impact :** 🟢 | **Ouvert :** 2026-10-26 | **Statut :** ✅ livré le 2026-10-26 (version du hook — voir CHANGELOG ; redéploiement Docker requis)
|
||||
- **Fiche :** [features/fusion-panneau-version-agent-225.md](./features/fusion-panneau-version-agent-225.md)
|
||||
- **Description :** demande de Bruno (2026-10-26, carte fusion #64) : la
|
||||
version « Service d'agents vX », déjà visible dans la console pleine
|
||||
page, doit se lire aussi dans le **panneau natif des apps** (mode
|
||||
sidebar). Le pied du panneau Spark affiche désormais cette ligne,
|
||||
discrète et permanente, lue **en direct** dans la santé du service
|
||||
(`GET /healthz` de l'origine injectée par l'hôte) à l'ouverture du
|
||||
panneau, avec cache de session — jamais une valeur codée en dur ;
|
||||
service injoignable = rien d'affiché. Même livraison : TikTak
|
||||
0.61.3, Flowdeck 7.83.1, Kanbante 0.37.1.
|
||||
- **Sous-tâches :**
|
||||
- [x] Ligne de version dans le pied du panneau (canonique TikTak, propagée aux 4 apps)
|
||||
- [x] Test `tests/test_draco_barre.py::test_panneau_version_service_affichee_225` + épreuve comportementale jsdom sur les 4 copies
|
||||
- [x] Release publiée — CI verte à constater, redéploiement Docker (geste de Bruno)
|
||||
|
||||
### 224. Sécurité des dépendances — pip-audit vierge (brotli, filelock, opentelemetry-api, pypdf)
|
||||
|
||||
- **Effort :** ~0,1 jour | **Impact :** 🔴 | **Ouvert :** 2026-10-25 | **Statut :** ✅ livré le 2026-10-25 (version du hook — voir CHANGELOG ; redéploiement Docker requis)
|
||||
@@ -1150,6 +1168,7 @@
|
||||
| 170 | Assistant IA — tâches planifiées type cron (create/append/notify, interval/daily/once, tick 60 s, échec notifié) | Unreleased | [features/agent-phase4-166-168-170.md](./features/agent-phase4-166-168-170.md) |
|
||||
| BUG-119 | Panneau Spark — « mode console » bloqué par la CSP (`frame-src` sans l'origine du service d'agents) | 2.77.1 | [ISSUES_TODOLIST.md](./ISSUES_TODOLIST.md) |
|
||||
| BUG-120 | Menu inter-apps — les URL sœurs (`window.DRACO_URLS`) dérivent l'environnement de l'hôte de l'agent (`-dev` en dev), explicite prioritaire, Gitea inchangée (suite de #223) | 2.78.2 | [ISSUES_TODOLIST.md](./ISSUES_TODOLIST.md) |
|
||||
| 225 | Panneau Spark — version du service d'agents visible en mode sidebar (pied du panneau, lue en direct via `GET /healthz`) | 2.79.0 | [features/fusion-panneau-version-agent-225.md](./features/fusion-panneau-version-agent-225.md) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# #225 — Fusion : panneau Spark, version du service d'agents visible en mode sidebar
|
||||
|
||||
**Contexte.** La version « Service d'agents vX » du service d'agents
|
||||
est visible dans la console pleine page (pilule d'en-tête, rendue par
|
||||
le service lui-même), mais pas dans le **panneau natif des
|
||||
applications** (mode sidebar) — or c'est là que Bruno vit au
|
||||
quotidien. Demande de Bruno (2026-10-26), carte fusion #64 : la
|
||||
version doit se lire dans le panneau ouvert, sans ouvrir la console.
|
||||
|
||||
**Changement.** Dans `frontend/draco-panneau.js` — asset **vendangé**,
|
||||
maintenu en canonique dans TikTak et recopié dans les 4 applications
|
||||
(TikTak, Flowdeck, Kanbante, ObsiGate ; chaque copie garde son bloc
|
||||
d'injection d'origine propre à l'hôte, le corps est commun) :
|
||||
|
||||
- le pied du panneau gagne une ligne dédiée
|
||||
`.draco-panneau-version`, discrète (11,5 px, opacité 0,6,
|
||||
monochrome, aucun emoji), **masquée tant qu'aucune version n'est
|
||||
connue** ;
|
||||
- à l'ouverture du panneau, `chargerVersion()` interroge la santé
|
||||
du service — `GET /healthz` de l'origine que le panneau connaît
|
||||
déjà (celle injectée par l'hôte, ici `window.DRACO_URLS.agent`) —
|
||||
et affiche « Service d'agents vX » depuis le champ `version` de
|
||||
la réponse (la même source que la pilule de la console) ;
|
||||
- cache de session de 5 minutes, rafraîchissement au rythme des
|
||||
ouvertures du panneau (comme la vérification d'identité) ;
|
||||
- **jamais de valeur codée en dur** : réponse illisible ou service
|
||||
injoignable = la ligne reste masquée — pas de fausse version, pas
|
||||
d'erreur visible.
|
||||
|
||||
**Preuve.** Épreuve comportementale (jsdom) exécutée sur les 4
|
||||
copies avec le contrat d'injection de chaque hôte : santé joignable
|
||||
→ la ligne affiche « Service d'agents v0.38.0 » (version lue sur
|
||||
l'origine de l'agent) ; santé injoignable → rien d'affiché ; hôte
|
||||
sans injection → aucun appel. Test de garde :
|
||||
`tests/test_draco_barre.py::test_panneau_version_service_affichee_225`.
|
||||
|
||||
**Même livraison** (carte fusion #64) : TikTak 0.61.3, Flowdeck
|
||||
7.83.1, Kanbante 0.37.1. Côté ObsiGate, la prise d'effet attend le
|
||||
**redéploiement Docker** (geste de Bruno), comme les items panneau
|
||||
précédents.
|
||||
@@ -42,6 +42,7 @@
|
||||
var etatConnu = false;
|
||||
var root = null, msgsEl = null, etatEl = null, inputEl = null, sendBtn = null;
|
||||
var titreEl = null, tiroirEl = null;
|
||||
var versionEl = null, versionConnue = "", versionMaj = 0;
|
||||
|
||||
function domaine() {
|
||||
try { return localStorage.getItem("draco_domain") || "pro"; } catch (e) { return "pro"; }
|
||||
@@ -269,6 +270,7 @@
|
||||
' <input type="text" placeholder="Écrire à Spark…" autocomplete="off" aria-label="Message à Spark">' +
|
||||
' <button type="submit">Envoyer</button></form>' +
|
||||
' <div class="draco-panneau-note">Conversation réelle, sous-agents (J3) et missions longues (J5) vers les exécuteurs configurés ; toute écriture dans les apps passe par une approbation.</div>' +
|
||||
' <div class="draco-panneau-version" style="margin-top:6px;font-size:11.5px;opacity:.6" hidden></div>' +
|
||||
'</div>';
|
||||
document.body.appendChild(root);
|
||||
msgsEl = root.querySelector(".draco-panneau-msgs");
|
||||
@@ -277,6 +279,7 @@
|
||||
sendBtn = root.querySelector("button[type=submit]");
|
||||
titreEl = root.querySelector(".d-titre");
|
||||
tiroirEl = root.querySelector(".draco-discussions");
|
||||
versionEl = root.querySelector(".draco-panneau-version");
|
||||
root.querySelector(".fermer").addEventListener("click", fermer);
|
||||
root.querySelector('[data-disc="liste"]').addEventListener("click", basculerTiroir);
|
||||
root.querySelector('[data-disc="nouvelle"]').addEventListener("click", nouvelleDiscussion);
|
||||
@@ -331,6 +334,35 @@
|
||||
titreEl.title = titreEl.textContent;
|
||||
}
|
||||
|
||||
/* ── Version du service : lue en direct dans la santé de
|
||||
* l'agent (GET /healthz → champ « version », la même source que
|
||||
* la console) à l'origine que le panneau connaît déjà. Cache de
|
||||
* session (5 min), rafraîchie à l'ouverture du panneau, au même
|
||||
* rythme que la vérification d'identité. Jamais de valeur codée
|
||||
* en dur : source injoignable ou réponse illisible = la ligne
|
||||
* reste masquée — pas de fausse version, pas d'erreur visible. */
|
||||
function afficherVersion() {
|
||||
if (!versionEl) return;
|
||||
if (versionConnue) {
|
||||
versionEl.textContent = "Service d'agents v" + versionConnue;
|
||||
versionEl.hidden = false;
|
||||
}
|
||||
}
|
||||
function chargerVersion() {
|
||||
if (!API || !versionEl) return;
|
||||
if (versionConnue && Date.now() - versionMaj < 300000) { afficherVersion(); return; }
|
||||
fetch(API + "/healthz")
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (d) {
|
||||
if (d && typeof d.version === "string" && /^[0-9]+\.[0-9]+\.[0-9]+/.test(d.version)) {
|
||||
versionConnue = d.version;
|
||||
versionMaj = Date.now();
|
||||
afficherVersion();
|
||||
}
|
||||
})
|
||||
.catch(function () { /* service injoignable : rien d'affiché */ });
|
||||
}
|
||||
|
||||
function verifierIdentite() {
|
||||
if (etatConnu) return;
|
||||
fetch(API + "/api/v1/me", { credentials: "include" })
|
||||
@@ -807,6 +839,7 @@
|
||||
root.classList.add("open");
|
||||
appliquerTheme();
|
||||
verifierIdentite();
|
||||
chargerVersion();
|
||||
setTimeout(function () { inputEl.focus(); }, 300);
|
||||
}
|
||||
function fermer() { if (root) root.classList.remove("open"); }
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "obsigate",
|
||||
"version": "2.78.2",
|
||||
"version": "2.79.0",
|
||||
"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": {
|
||||
|
||||
@@ -129,3 +129,20 @@ def test_rail_mobile_vers_le_vrai_hamburger():
|
||||
assert 'matchMedia("(max-width: 768px)")' in html
|
||||
assert '"hamburger-btn"' in html
|
||||
assert '"sidebar-toggle-btn"' in html
|
||||
|
||||
|
||||
def test_panneau_version_service_affichee_225():
|
||||
# #225 : le pied du panneau Spark (mode sidebar) affiche la
|
||||
# version du service d'agents, comme la console pleine page.
|
||||
# La version est lue en direct dans la santé du service
|
||||
# (GET /healthz de l'origine injectée par l'hôte), à l'ouverture
|
||||
# du panneau ; jamais un littéral de version dans l'asset, et
|
||||
# source injoignable = ligne laissée masquée (rien d'affiché).
|
||||
panneau = (FRONTEND / "draco-panneau.js").read_text(encoding="utf-8")
|
||||
assert "draco-panneau-version" in panneau
|
||||
assert "chargerVersion" in panneau
|
||||
assert 'API + "/healthz"' in panneau
|
||||
assert '"Service d\'agents v" + versionConnue' in panneau
|
||||
# La ligne naît masquée et n'est démasquée qu'avec une version lue.
|
||||
assert 'class="draco-panneau-version"' in panneau
|
||||
assert "versionEl.hidden = false" in panneau
|
||||
|
||||
Reference in New Issue
Block a user