fix: side peek des bases repasse en vanilla JS + largeur 1100px standard (v7.49.0)
FlowDeck CI / test (push) Failing after 3h13m58s
FlowDeck CI / lint (push) Successful in 2m12s
FlowDeck CI / docker (push) Skipped

- Panneau peek: les bindings Alpine (x-data absent du conteneur) rendaient
  loovverture et le redimensionnement inoperants -> cblage direct sur le document.
- Helper unique window.fdWirePeekResize (app.js): pointer capture, 300px-90vw,
  clic=fermer, largeur persiste fd_peek_width partagee entre les 4 peeks.
- database-table-container margin:0 (tableau colle a gauche, marge Library).
- .lib-container remonte dans app.css (trash etait pleine largeur), .db-index 1100px.
- ObsiGate verifie sans code: creation .xlsx OK (openpyxl, #186).
This commit is contained in:
2026-10-05 22:47:36 -04:00
parent 894004a1f5
commit 1d1cdbd618
63 changed files with 9473 additions and 393 deletions
+195
View File
@@ -109,6 +109,201 @@ GALLERY: dict[str, dict] = {
),
"allowed_tools": ["search_workspace", "read_document", "create_document", "write_blocks"],
},
# ── Vague 1 : skills 100 % locaux (aucun nouveau tool requis) ──────────
"veille-documentaire": {
"name": "Veille documentaire",
"icon": "🔎",
"description": "Repère les pages du workspace sans mise à jour récente et génère un digest d'entrée.",
"prompt_template": (
"Fais une veille documentaire du workspace :\n"
"1. Repère les documents dont le titre évoque une décision, un chantier ou un arbitrage "
"(search_workspace : « décision », « ADR », « roadmap », « spec », « bilan »).\n"
"2. Lis les plus pertinents (read_document) et note pour chacun : date de mise à jour, "
"statut (vivant / obsolète / contradictoire), propriétaire mentionné quand il existe.\n"
"3. Crée un document « Veille — <date> » (create_document) en 3 sections : "
"À valider (décisions non actées), À mettre à jour (docs dépassés par d'autres), "
"Cohérences (points de vue contradictoires entre documents).\n"
"4. Ne modifie aucun document : tu proposes, l'humain décide."
),
"allowed_tools": ["search_workspace", "read_document", "create_document", "write_blocks"],
},
"chasse-decisions": {
"name": "Chasse aux décisions",
"icon": "⚖️",
"description": " Rassemble en une page toutes les décisions prises dans le workspace, avec leur statut.",
"prompt_template": (
"Construis le registre des décisions du workspace :\n"
"1. Cherche les documents de décision (search_workspace : « décision », « arbitrage », "
"« choix de », « remplacement de »).\n"
"2. Lis-les (read_document) et extrais pour chacune : la décision, la date, la motivation, "
"les options écartées.\n"
"3. Crée un document « Registre des décisions » (create_document) en tableau : "
"Décision · Date · Motivation · Statut (actif / révoqué / jamais tranché).\n"
"4. Signale explicitement les sujets récurrents où aucune décision n'a été actée, "
"plutôt que de combler les trous."
),
"allowed_tools": ["search_workspace", "read_document", "create_document", "write_blocks"],
},
"onboarding-nouveau": {
"name": "Onboarding nouveau",
"icon": "🧭",
"description": "Génère un parcours de lecture ordonné pour une personne qui rejoint l'équipe.",
"prompt_template": (
"Prépare l'onboarding d'une nouvelle personne :\n"
"1. Repère les documents d'entrée : onboarding existant, README, architecture, process, "
"glossaire (search_workspace).\n"
"2. Lis-les (read_document) et classe-les par jour d'arrivée : Jour 1, Semaine 1, "
"Puis plus tard.\n"
"3. Crée un document « Onboarding — <prénom> » (create_document) : pour chaque étape, "
"le document à lire, ce qu'on doit en retenir, et 2 questions pour vérifier la compréhension.\n"
"4. Termine par les 5 questions qu'une personne doit savoir répondre à la fin de la semaine 1."
),
"allowed_tools": ["search_workspace", "read_document", "create_document", "write_blocks"],
},
"audit-base": {
"name": "Audit de base",
"icon": "🧹",
"description": "Audite une collection : colonnes vides, doublons, lignes sans propriétaire, propriétés inutilisées.",
"prompt_template": (
"Audite la collection demandée :\n"
"1. Lis son schéma et ses lignes (read_collection).\n"
"2. Détecte : propriétés jamais remplies, lignes sans propriétaire, doublons de titre, "
"valeurs incohérentes dans une même colonne, colonnes ajoutées puis abandonnées.\n"
"3. Crée un document « Audit — <collection> » (create_document) avec, par anomalie : "
"l'ampleur (nombre de lignes), des exemples concrets, et la correction proposée.\n"
"4. N'applique AUCUNE correction : liste d'abord, l'humain valide ensuite."
),
"allowed_tools": ["search_workspace", "read_collection", "read_page", "create_document", "write_blocks"],
},
"sprint-review": {
"name": "Revue de sprint",
"icon": "🏁",
"description": "Construit une revue de sprint depuis les issues Gitea : accompli, en retard, risques.",
"prompt_template": (
"Prépare la revue de sprint à partir des issues Gitea :\n"
"1. Lis les issues du dépôt (read_gitea_issues, state=all) et resynchronise si nécessaire (sync_gitea).\n"
"2. Classe-les : accompli (fermées), en retard (ouvertes et dépassées), à trier (sans label).\n"
"3. Croise avec les documents du workspace (search_workspace) pour voir si des décisions "
"changent la priorisation.\n"
"4. Crée un document « Revue de sprint — <période> » (create_document) : Accompli · En retard · "
"Risques · Prochaines priorités, avec le numéro d'issue pour chaque affirmation.\n"
"5. Ne ferme ni ne modifie aucune issue."
),
"allowed_tools": ["read_gitea_issues", "sync_gitea", "search_workspace",
"create_document", "write_blocks"],
},
# ── Vague 2 : skills web (web_search / fetch_url / search_code) ────────
"recherche-marche": {
"name": "Recherche marché",
"icon": "🌍",
"description": "Étudie un sujet de marché sur le web et produit une note sourcée avec alternatives.",
"prompt_template": (
"Produis une étude de marché sourcée sur « <sujet> » :\n"
"1. Cherche 3 requêtes distinctes (web_search) : le sujet lui-même, « <sujet> alternatives », "
"« <sujet> prix tarifs 2026 ».\n"
"2. Approfondis les 3 pages les plus prometteuses (fetch_url).\n"
"3. Crée un document « Marché — <sujet> » (create_document) : acteurs et positionnement, "
"grille tarifaire, forces/faiblesses, et 3 recommandations.\n"
"4. OBLIGATION : chaque affirmation porte sa source au format [titre — URL]. "
"Si une information n'est pas sourcée, écris « non vérifié » plutôt que d'inventer.\n"
"5. Indique la date de la recherche : ces données périment vite."
),
"allowed_tools": ["web_search", "fetch_url", "create_document", "write_blocks"],
},
"veille-techno": {
"name": "Veille technologique",
"icon": "🛰️",
"description": "Surveille l'actualité d'une techno : versions, ruptures, dépendances et advisories.",
"prompt_template": (
"Fais une veille technologique sur « <techno> » :\n"
"1. Web : dernières annonces et sorties de version (web_search).\n"
"2. GitHub : dépôts de référence et issues récentes résolues (search_code, kind=issues).\n"
"3. Approfondis les annonces importantes (fetch_url).\n"
"4. Crée un document « Veille — <techno> — <date> » (create_document) : "
"Nouveautés depuis le dernier point · Risques de rupture · Actions recommandées (mettre à jour / "
"surveiller / ignorer).\n"
"5. Une ligne par fait, avec [titre — URL]. Ne présente jamais une rumeur comme une release."
),
"allowed_tools": ["web_search", "fetch_url", "search_code",
"create_document", "write_blocks"],
},
"debug-web": {
"name": "Debug web",
"icon": "🐛",
"description": "Diagnostique un bug technique en croisant les docs, le code GitHub et les discussions.",
"prompt_template": (
"Diagnostique le problème suivant : <erreur / symptôme>.\n"
"1. Reformule le symptôme en une recherche web précise (web_search) : message d'erreur exact "
"+ bibliothèque + version.\n"
"2. Cherche si c'est un bug connu (search_code, kind=issues) et lis les discussions pertinentes (fetch_url).\n"
"3. Crée un document « Debug — <symptôme> » (create_document) : Cause probable (classée par "
"probabilité) · Vérifications à faire dans cet ordre · Correctif proposé.\n"
"4. Distingue clairement ce qui est vérifié par une source de ce qui est ton hypothèse."
),
"allowed_tools": ["web_search", "search_code", "fetch_url",
"create_document", "write_blocks"],
},
# ── Vague 3 : skills « pouvoir » ──────────────────────────────────────
"triage-incident": {
"name": "Triage d'incident",
"icon": "🚨",
"description": "Prend un incident décrit, ouvre un runbook pré-rempli et pose les premières questions de qualification.",
"prompt_template": (
"Traite l'incident suivant : <description>.\n"
"1. Qualifie avant de chercher : quel service, depuis quand, quel périmètre d'impact, "
"erreur observable. Les inconnues deviennent des questions, pas des suppositions.\n"
"2. Cherche les incidents similaires déjà résolus dans le workspace (search_workspace) "
"et les runbooks existants.\n"
"3. Crée un document « Incident — <titre court> » (create_document) : Symptôme · Impact · "
"Cause probable · Hypothèses classées · Étapes de résolution · Questions à poser à l'utilisateur.\n"
"4. Ne modifie aucun code ni aucune configuration : tu produis un runbook, pas un correctif.\n"
"5. Termine par les 3 informations qui feraient le plus progresser le diagnostic."
),
"allowed_tools": ["search_workspace", "read_document", "web_search",
"create_document", "write_blocks"],
},
"nettoyage-base": {
"name": "Nettoyage de base",
"icon": "🧽",
"description": "Prépare un plan de nettoyage d'une collection (doublons, valeurs vides) avec aperçu avant écriture.",
"prompt_template": (
"Prépare le nettoyage de la collection « <collection> » :\n"
"1. Lis son schéma et ses lignes (read_collection).\n"
"2. Identifie les corrections : lignes vides à supprimer, doublons à fusionner, "
"valeurs parasites à normaliser, propriétés obsolètes.\n"
"3. PRODUIRE UN APERÇU D'AVANT : pour chaque catégorie de correction, le nombre de lignes "
"concernées et 3 exemples concrets.\n"
"4. Règle absolue : n'applique AUCUNE modification avant validation explicite de l'utilisateur. "
"Le plan est le livrable.\n"
"5. Crée le document « Plan de nettoyage — <collection> » (create_document) avec le plan, "
"puis demande la validation."
),
"allowed_tools": ["search_workspace", "read_collection", "read_page",
"create_document", "write_blocks"],
},
"briefing-quotidien": {
"name": "Briefing quotidien",
"icon": "🌅",
"description": "Prépare le point du matin : activités de la veille, décisions en attente, blocages.",
"prompt_template": (
"Prépare le briefing du jour :\n"
"1. Activités : ce qui a bougé dans le workspace et le dépôt (read_gitea_issues, "
"search_workspace) — uniquement des faits datés.\n"
"2. Décisions en attente : documents de décision sans statut clair.\n"
"3. Blocages : tickets ouverts sans mouvement, sujets qui reviennent dans plusieurs documents.\n"
"4. Crée un document « Briefing — <date> » (create_document) en moins d'une page : "
"Hier en bref · À trancher aujourd'hui · Bloquants · Une chose à surveiller.\n"
"5. Si une section n'a aucun élément, écris « rien à signaler » plutôt que d'inventer."
),
"allowed_tools": ["search_workspace", "read_document", "read_gitea_issues",
"create_document", "write_blocks"],
},
}