From 1743c8c101e0e68e415793f76c5f132f68d53359 Mon Sep 17 00:00:00 2001 From: Spark Date: Sun, 11 Oct 2026 12:46:54 -0400 Subject: [PATCH] =?UTF-8?q?chore(release):=20Kanbante=200.8.0=20=E2=80=94?= =?UTF-8?q?=20palette=20Ctrl+K=20et=20digest=20ObsiGate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 24 ++++++++++++++++++++++++ README.md | 8 ++++++++ pyproject.toml | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58fd364..0495ada 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## 0.8.0 — 2026-10-11 + +### Nouveautés +- **Palette de commandes** (issue #10) : `Ctrl+K` / `Cmd+K` (ou le + bouton ⌨️ dans la navigation) ouvre sur toutes les pages une + palette façon Linear/Raycast — actions de navigation, tous les + projets (filtrage local instantané) et recherche globale d'issues + annotées de leur colonne (nouvel endpoint `GET /api/palette?q=`). + Navigation entièrement au clavier (↑↓, Entrée, Échap). +- **Digest hebdo vers ObsiGate** (issue #13) : le résumé markdown + de la semaine (issues fermées enrichies de leurs titres, cartes en + cours/QA/révision, compteurs du journal) est composé + automatiquement le jour et l'heure choisis + (`KANBANTE_DIGEST_WEEKDAY` / `KANBANTE_DIGEST_TIME`) avec + notification ntfy — mais **jamais livré sans approbation** : + l'envoi se fait d'un clic sur `/digest`, vers le serveur MCP + d'ObsiGate (client MCP intégré : initialize + tools/call ; URL, + jeton, nom d'outil et gabarit JSON d'arguments configurables ; + bouton « Tester la connexion » qui liste les outils du serveur) + ou vers un webhook générique (`KANBANTE_DIGEST_WEBHOOK_URL`, + JSON `{title, markdown, week}`). + +11 tests ajoutés (121 au total). + ## 0.7.0 — 2026-10-11 ### Nouveauté diff --git a/README.md b/README.md index c4acec8..e0a63db 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ - ⏳ **Vieillissement + limites WIP** — badge d'ancienneté par colonne et limites souples configurables - 🎯 **Vue Focus** — tout ce qui est En cours / en QA / En révision, tous projets confondus (`/focus`) - 🖥️ **Wallboard** — mode TV plein écran (`/wall`) : rotation automatique entre les projets actifs, cartes en vol et compteurs en très grands caractères, rafraîchi en direct ; `?repo=Proprietaire/depot` fige un seul projet +- ⌨️ **Palette de commandes** — `Ctrl+K` (ou le bouton ⌨️) sur toutes les pages : actions, projets et recherche d'issues globale, 100 % clavier +- 🧠 **Digest hebdo → ObsiGate** — résumé markdown de la semaine (journal + focus) composé automatiquement, **livré seulement sur approbation** (page `/digest`) vers le serveur MCP d'ObsiGate (client MCP intégré, outil et gabarit d'arguments configurables) ou un webhook générique - ⚡ **Capture éclair** — page `/capture` (formulaire), endpoint `POST /api/capture` protégé par un jeton dédié, et écoute ntfy : un message publié sur le topic de capture devient une issue dans le dépôt par défaut - 🔀 **Réconciliation par étiquettes** — si l'étiquette `kanban:*` d'une issue change hors de Kanbante (dans Gitea, par un autre outil), le board adopte la colonne de l'étiquette au chargement et le journalise (source `gitea`). Une seule étiquette `kanban:*` fait foi ; aucune ou plusieurs = l'état local gagne - 🔍 **Recherche globale + Mes issues** — chercher dans toutes les issues de tous les projets (`/search`), et voir ce qui vous est assigné (`/my`) @@ -116,6 +118,9 @@ sudo systemctl enable --now docker | `KANBANTE_CAPTURE_REPO` | *(vide)* | Dépôt par défaut de la capture éclair (`Proprietaire/depot`) | | `KANBANTE_CAPTURE_TOKEN` | *(vide)* | Jeton dédié de `POST /api/capture` ; vide = endpoint désactivé (503) | | `KANBANTE_CAPTURE_NTFY_TOPIC` | *(vide)* | Topic ntfy écouté : chaque message devient une issue dans `KANBANTE_CAPTURE_REPO` | +| `KANBANTE_DIGEST_TIME` / `KANBANTE_DIGEST_WEEKDAY` | *(vide)* / `0` | Composition hebdo du digest (`HH:MM`, 0 = lundi) ; notification ntfy, jamais d'envoi automatique | +| `KANBANTE_OBSIGATE_MCP_URL` / `_TOKEN` / `_TOOL` / `_ARGS` | *(vide)* | Serveur MCP d'ObsiGate : URL, jeton optionnel, outil de création de note, gabarit JSON d'arguments (`{title}`, `{content}`) | +| `KANBANTE_DIGEST_WEBHOOK_URL` | *(vide)* | Webhook générique recevant le digest en JSON `{title, markdown, week}` | ## Sécurité @@ -160,6 +165,9 @@ kanbante/ | GET | `/focus` | En cours + QA + En révision, tous projets actifs | | GET | `/wall` | Wallboard plein écran (rotation des projets actifs ; `?repo=` pour un seul projet) | | GET | `/capture` | Page de capture éclair (formulaire + statut + instructions) | +| GET | `/api/palette` | Données de la palette Ctrl+K (projets + recherche d'issues `?q=`) | +| GET | `/digest` | Digest hebdo : aperçu, statut des cibles, approbation d'envoi | +| POST | `/digest/send` | Livrer le digest (cible `obsigate` ou `webhook`) — approbation explicite | | POST | `/api/capture` | Capture machine-à-machine (jeton `X-Capture-Token`, JSON ou texte : 1re ligne = titre) | | GET | `/activity` | Fil d'activité (journal d'événements, tous projets) | | POST | `/api/move` | Déplacer une issue (ordre persisté, synchro Gitea) | diff --git a/pyproject.toml b/pyproject.toml index 5a48047..402d0b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kanbante" -version = "0.7.0" +version = "0.8.0" description = "Kanban project manager integrated with Gitea" requires-python = ">=3.11" dependencies = [