🎯 Objectif (goal de la session)
Créer un widget flottant intelligent pour DankMaterialShell. But : garder le cap face à l'IA — l'humain doit continuer à apprendre activement. Le widget apparaît selon des cycles pomodoro et pose des quiz à choix unique (QCM) sur les sujets préférés de l'utilisateur (configurés au premier setup). On commence par les QCM à choix unique.
Texte original : « j'aimerai creer un widget intelligent, le but est de garder le cap par rapport à l'IA en ce moment, l'humain n'arrive plus à apprendre des choses, on va creer un widget flottant qui va apparaitre pendant des temps suivant des cycle (pomodoro) pour selon les sujets de ma preference (premier setup) me pose des quiz , d'abord on va commencer par des quizz à choix unique »
📍 État de la session : phase BRAINSTORMING (design pas encore écrit)
On suit le process superpowers:brainstorming. Aucun code écrit. On a fini l'exploration du codebase et verrouillé 3 décisions d'architecture. Reste : finir l'exploration de 2 fichiers, présenter le design, l'écrire dans un spec doc, le faire valider, puis passer à writing-plans.
✅ Décisions verrouillées (via AskUserQuestion)
- Source des questions : HYBRIDE — banque locale JSON par défaut + toggle « Générer via IA » dans les réglages. Marche offline ET extensible.
- Présentation : CARTE FLOTTANTE EN COIN (bas-droit), interactive, persistante jusqu'à réponse (pas un toast éphémère). Moins intrusive qu'un modal centré.
- Hébergement : PLUGIN AUTONOME de type
daemon, dans quickshell/PLUGINS/QuizWidget/ (versionné) → déployé vers ~/.config/DankMaterialShell/plugins/. Isolé, n'altère pas le code cœur du shell, facilite les rebases avec upstream.
🧠 Compréhension de l'architecture (déjà explorée)
DankMaterialShell = shell Wayland en Quickshell (QML) + backend Go. Système de plugins complet documenté dans quickshell/PLUGINS/README.md.
Points clés pour ce projet :
- Plugin type
daemon : un PluginComponent chargé en arrière-plan (via Instantiator/Loader dans DMSShell.qml). Peut tenir des Timer, lancer des Process, réagir à des signaux. Exemple : quickshell/PLUGINS/WallpaperWatcherDaemon/.
- Fenêtre flottante : les plugins ont un accès QML complet → le daemon peut instancier sa propre
PanelWindow/overlay (pattern LazyLoader). Référence à étudier : module OSD (quickshell/Modules/OSD/) pour une overlay transitoire en coin/bord.
PopoutService (injecté auto via property var popoutService: null) : contrôle les popouts/modals natifs. Doc : quickshell/PLUGINS/POPOUT_SERVICE.md. (Utile mais ne fournit pas de « fenêtre custom » générique — on créera la nôtre.)
- Persistance des réglages :
PluginSettings + composants StringSetting/ToggleSetting/SelectionSetting/ListSettingWithInput, et API pluginService.savePluginData/loadPluginData. Parfait pour le « premier setup » des sujets. Nécessite permission settings_write.
- Appels externes / API :
Proc.runCommand(id, cmd[], cb(stdout, exitCode), debounceMs) depuis qs.Common — pour appeler l'API LLM (curl) sur le chemin IA.
- Thème : singleton
Theme (quickshell/Common/Theme.qml) ; widgets réutilisables dans quickshell/Widgets/ (StyledRect, StyledText, DankIcon, etc.). THEME_REFERENCE.md dans PLUGINS.
- Schéma plugin :
quickshell/PLUGINS/plugin-schema.json (à valider — PAS encore lu en détail).
📐 Esquisse de structure cible
quickshell/PLUGINS/QuizWidget/
├── plugin.json # type: daemon, permissions: [settings_read, settings_write]
├── QuizDaemon.qml # cycle pomodoro (Timer) + déclenche l'overlay
├── QuizOverlay.qml # PanelWindow flottante coin bas-droit + carte QCM
├── QuizSettings.qml # premier setup : sujets, durées pomodoro, toggle IA + clé API
├── QuizEngine.js # sélection question (banque locale) + parsing réponse IA
└── banks/ # banques JSON par sujet (ex: algorithmes.json)
⚙️ Defaults proposés (NON confirmés — à valider au design)
- Cadence pomodoro : travail 25 min → quiz à la fin du cycle (configurable : durée travail, on/off, pause).
- Provider IA : Anthropic Claude (l'utilisateur est un power-user Claude Code). Modèle rapide/éco par défaut (ex. Haiku). Clé API stockée dans les réglages du plugin. ⚠️ Au moment d'implémenter le chemin IA : consulter la skill
claude-api pour les IDs de modèles / pricing à jour.
- Flux QCM : question + N choix (radio) → sélection → submit → feedback correct/incorrect + explication → fermeture. Stats légères de session (répondu/correct) en option (YAGNI).
- Sujets : free-text ajoutés par l'utilisateur ; mappés vers fichiers de banque locale + prompts IA. Quelques sujets seed livrés.
▶️ Prochaines étapes (reprendre ici)
- Finir l'exploration : lire
quickshell/PLUGINS/plugin-schema.json (valider le manifest daemon) + module quickshell/Modules/OSD/ (modèle d'overlay flottante transitoire).
- Présenter le design (sections : archi, composants, flux de données, gestion d'erreurs, test) et le valider.
- Écrire le spec :
docs/superpowers/specs/2026-06-19-quiz-widget-design.md + commit.
- Self-review du spec, puis validation utilisateur.
- Passer à
superpowers:writing-plans pour le plan d'implémentation.
🔁 Comment reprendre sur le nouveau PC
- Repo :
titoo-dev/DankMaterialShell (fork). Upstream : AvengeMedia/DankMaterialShell.
- Branche de travail :
feat/dynamic-island (cette session y est ; à confirmer si on veut une branche dédiée feat/quiz-widget).
- Le goal hook est session-scoped : il ne suivra pas. Re-set avec
/goal <texte ci-dessus> si tu veux la même contrainte, ou continue simplement depuis ce ticket.
- Démarre la nouvelle session par : « Reprends le handoff de l'issue # » et pointe Claude vers ce ticket.
🤖 Handoff généré avec Claude Code
🎯 Objectif (goal de la session)
Créer un widget flottant intelligent pour DankMaterialShell. But : garder le cap face à l'IA — l'humain doit continuer à apprendre activement. Le widget apparaît selon des cycles pomodoro et pose des quiz à choix unique (QCM) sur les sujets préférés de l'utilisateur (configurés au premier setup). On commence par les QCM à choix unique.
📍 État de la session : phase BRAINSTORMING (design pas encore écrit)
On suit le process
superpowers:brainstorming. Aucun code écrit. On a fini l'exploration du codebase et verrouillé 3 décisions d'architecture. Reste : finir l'exploration de 2 fichiers, présenter le design, l'écrire dans un spec doc, le faire valider, puis passer àwriting-plans.✅ Décisions verrouillées (via AskUserQuestion)
daemon, dansquickshell/PLUGINS/QuizWidget/(versionné) → déployé vers~/.config/DankMaterialShell/plugins/. Isolé, n'altère pas le code cœur du shell, facilite les rebases avec upstream.🧠 Compréhension de l'architecture (déjà explorée)
DankMaterialShell = shell Wayland en Quickshell (QML) + backend Go. Système de plugins complet documenté dans
quickshell/PLUGINS/README.md.Points clés pour ce projet :
daemon: unPluginComponentchargé en arrière-plan (viaInstantiator/LoaderdansDMSShell.qml). Peut tenir desTimer, lancer desProcess, réagir à des signaux. Exemple :quickshell/PLUGINS/WallpaperWatcherDaemon/.PanelWindow/overlay (patternLazyLoader). Référence à étudier : module OSD (quickshell/Modules/OSD/) pour une overlay transitoire en coin/bord.PopoutService(injecté auto viaproperty var popoutService: null) : contrôle les popouts/modals natifs. Doc :quickshell/PLUGINS/POPOUT_SERVICE.md. (Utile mais ne fournit pas de « fenêtre custom » générique — on créera la nôtre.)PluginSettings+ composantsStringSetting/ToggleSetting/SelectionSetting/ListSettingWithInput, et APIpluginService.savePluginData/loadPluginData. Parfait pour le « premier setup » des sujets. Nécessite permissionsettings_write.Proc.runCommand(id, cmd[], cb(stdout, exitCode), debounceMs)depuisqs.Common— pour appeler l'API LLM (curl) sur le chemin IA.Theme(quickshell/Common/Theme.qml) ; widgets réutilisables dansquickshell/Widgets/(StyledRect,StyledText,DankIcon, etc.).THEME_REFERENCE.mddans PLUGINS.quickshell/PLUGINS/plugin-schema.json(à valider — PAS encore lu en détail).📐 Esquisse de structure cible
⚙️ Defaults proposés (NON confirmés — à valider au design)
claude-apipour les IDs de modèles / pricing à jour.quickshell/PLUGINS/plugin-schema.json(valider le manifestdaemon) + modulequickshell/Modules/OSD/(modèle d'overlay flottante transitoire).docs/superpowers/specs/2026-06-19-quiz-widget-design.md+ commit.superpowers:writing-planspour le plan d'implémentation.🔁 Comment reprendre sur le nouveau PC
titoo-dev/DankMaterialShell(fork). Upstream :AvengeMedia/DankMaterialShell.feat/dynamic-island(cette session y est ; à confirmer si on veut une branche dédiéefeat/quiz-widget)./goal <texte ci-dessus>si tu veux la même contrainte, ou continue simplement depuis ce ticket.🤖 Handoff généré avec Claude Code