Cette page t'a-t-elle aidé ?

Cette page t'a-t-elle aidé ?
Aide
Ce que Gilbert a appris récemment. Entrées datées plutôt que versionnées : pas de semver tant que le produit bouge à ce rythme.
Dernière mise à jour : 3 juin 2026
Corrigé (routines à l'heure locale).Une routine programmée à 9h00 tournait en fait à 11h00 l'été (10h00 l'hiver) : le calcul de la prochaine occurrence se faisait en UTC alors que l'UI annonçait « heure locale Europe/Paris ». Désormais les expressions cron sont interprétées en heure locale Europe/Pariset DST-aware : 9h reste 9h à Paris, été (CEST) comme hiver (CET). Plus de conversion UTC à faire de tête. Voir la syntaxe cron.
Corrigé (invitation + login Google).Un invité qui se connectait via « Continuer avec Google » au lieu de cliquer le magic link d'invitation n'était jamais rattaché au workspace cible et se retrouvait avec un workspace perso isolé. Le chemin OAuth consomme maintenant l'invitation en attente comme le magic link : tu arrives dans le bon workspace quel que soit ton mode de connexion. Zéro effet sur les connexions normales sans invitation.
Trois axes en parallèle : durcissement sécurité pour conserver le scope Gmail, refonte de la couche LLM pour que chaque appel respecte la config BYOLLM du workspace, et premier wedge production où Gilbert traite des emails forwardés par une Directrice via Postmark.
Ajouté (forward-to-Gilbert). Tu transfères un email à gilbert-<workspace>@solveholding.comavec ton intent en haut, Gilbert te répond avec un draft pro polish via Postmark. Le workspace porte le contexte (alias, signature, mode de sortie, rate cap), le membre porte l'exécution (identité, tokens OAuth perso, historique). Whitelist par membership : workspace_members.forward_alias_email. Les 3 colonnes sensibles de forward_runs (sujet, intent, draft) sont chiffrées AES-256-GCM côté DB.
Ajouté (« Former mon Gilbert »). Carte violet sur /console/workspaces/[id]/mails qui scanne tes 30 derniers Sent Gmail et entraîne un user_style_profile per-user global. Le polish d'email inbound réutilise ce profil pour drafter dans ton style à travers tous les workspaces où tu es membre. Privacy stricte : visible et utilisé uniquement par toi, aucun autre membre du workspace n'y accède.
Ajouté (invitations workspace).Le bouton grisé devient un vrai flow : l'admin saisit l'email, Supabase mint un magic link, Postmark envoie un email transactionnel d'invite (même si le user existe déjà), le callback auth attache la membership depuis user_metadata.pending_workspace_*. RBAC enforced server-side via workspaceMemberGuard ; supprimer le dernier admin est bloqué.
Ajouté (ModelTier). Chaque appel LLM passe par un tier abstrait fast / smart / premiumau lieu d'un nom de modèle hardcodé. Le mapping concret par provider (Haiku/Flash-Lite/mini, Sonnet/Flash/4o, Opus/Pro/4o) vit dans un seul endroit : quand un nouveau modèle sort, un seul fichier à toucher. Les routines gagnent une colonne model_tier (default smart).
Ajouté (BYOLLM complet).Les widgets embed B2B (Gerimalp, NAZ, Bayard) ne court-circuitent plus la config BYOLLM : le chatStream legacy passe par le SDK AI Vercel + getLLMClient(tier) comme tous les autres call sites. Un workspace qui pointe sur Google ou OpenAI ne paie plus silencieusement Anthropic via notre clé centrale.
Ajouté (multi-clés BYOLLM + fallback toggle). workspace_llm_config accepte désormais plusieurs entrées par provider, chacune avec un label (prod vs dev, clé par projet). Un nouveau flag workspaces.allow_central_fallbackpermet de désactiver le fallback silencieux vers la clé Anthropic centrale : le call fail-fast au lieu de transiter par notre infra — mode privacy strict pour les clients payants.
Ajouté (MCP Solve Learn). 19 tools learn_*permettent d'opérer Solve Learn end-to-end depuis n'importe quel client MCP : tenants, formations, sessions, membres. Détail sur /docs/mcp/solve-learn.
Corrigé (SSRF DNS rebinding, HIGH). safeFetch pré-checkait l'host avec dns.lookup mais undiciré-resolvait au moment du fetch — TOCTOU exploitable pour voler des credentials IAM via le metadata AWS sur Vercel Lambda. Fix : un safeDispatchermodule-level qui valide l'IP au connect step. Six nouveaux tests de régression couvrent les bypass (trailing dot, IPv4 décimal/hex, userinfo trick).
Sécurité (CASA Tier 2).Le dossier evidence pour l'App Defense Alliance est complet : Sprint 1 (CodeQL, Semgrep, Dependabot, premier scan), Sprint 2 (ASVS L2, OAuth scope justification, STRIDE 46 menaces / 9 composants), Sprint 3 (les 8 findings Semgrep clos, audit auth 121 routes : 0 missing). Verdict courant : 64 / 86 contrôles ASVS validés, 0 ❌. Soumission portail = dernière étape.
Ajouté. Gilbert passe et reçoit de vrais appels téléphoniquesvia Vapi. Il t'appelle quand une routine a besoin d'une décision, et tu peux rappeler le numéro Vapi pour parler des actions en attente. La feature démarre désactivée globalement (kill-switch admin). Tu actives ton numéro depuis /personal/settings/phone : OTP, puis PIN 4 chiffres, puis cap quotidien. Numéros chiffrés AES-256-GCM avec index aveugle HMAC, PIN bcrypt. Transcripts purgés à 30 jours par défaut (pg_cron). Détail complet sur /docs/phone-calls.
Ajouté (Custom Tools MCP). Tu peux maintenant connecter des serveurs MCP externes (Notion, Linear, self-hosted, tout ce qui parle JSON-RPC 2.0) à un workspace. Gilbert découvre les tools automatiquement via tools/list et les expose comme mcp_<slug>__<tool>. Les admins configurent depuis la Console. Les membres peuvent forker un serveur du workspace pour override le token ou restreindre la liste de tools, via /console/me/mcp-servers. Détail sur /docs/custom-tools.
Ajouté. Slash command /runtool <slug>__<tool> [json]qui exécute un tool MCP directement, sans passer par le LLM. La carte "Runs récents" sur l'edit du serveur affiche durée, statut et déclencheur.
Ajouté. Table gilbert.feature_flags et une petite lib typée pour les kill-switches. Premier flag : phone_calls_globally_enabled(off par défaut). L'admin route PATCH /api/admin/phone-calls/flag le bascule sans redeploy.
Changé. ToolCallCardaffiche les tool calls MCP avec le slug du serveur et le nom du tool namespacé. Sidebar docs et palette Cmd-K gagnent "Appels téléphoniques" et "Custom Tools (MCP)".
Corrigé."Test connection" MCP ne dump plus le body HTML upstream quand le serveur renvoie une page d'erreur (ex. 405 sur example.com). Les réponses HTML deviennent (HTML body omitted, N bytes). JSON et texte passent inchangés.
Ajouté. Layout chat 3 colonnes (conversations, chat, panneau preview). Une carte briefing du jour s'affiche en haut avec un résumé inbox, agenda, routines, et un CTA "rédiger une réponse" branché sur Gilbert. Nouvelle table briefings_history, briefing dismissible via PATCH /api/personal/briefings/[id]/dismiss.
Ajouté. Sidebar conversations (desktop) plus drawer mobile : tes threads sont à un clic. Carte mémoire: Gilbert te montre ce qu'il a retenu de toi, suppression avec undo optimiste. Quick actions context-aware avec cache stale-while-revalidate. QuickRoutineModal pour créer une routine inline (focus-trap, gated admin).
Ajouté. Tools MCP Solve Learn : lecture plus écritures whitelistées plus undo. Gilbert peut lire formations et sessions, et appliquer des edits scopés.
Ajouté. Widgets du panneau preview personal : briefing, routines, agenda, intégrations (vrais logos via react-icons). Header de conversation avec menu Renommer / Supprimer.
Ajouté. Page /admin/cron-health pour observer les jobs et débloquer les routines coincées. Scaffold env stability cross-projet avec helper backup-then-mutate et détection des scopes combinés Vercel.
Corrigé.Watchdog stream chat à 8s plus bouton retry quand Anthropic stalle. Carte intégrations "scopes incomplets" devient actionable (rerun OAuth avec prompt=consent). Suggestion chips ne doublonnent plus les quick actions. Leak de dossier guest tué (clear du token au claim plus nettoyage des zombies). PayPal webhook fail closed si PAYPAL_WEBHOOK_ID manque.
Ajouté. README interne à la racine avec le piège des deux projets Supabase et le quickstart port 3100. Route publique /docs/changelog (cette page). Fichier CHANGELOG.md. Page 404 en français avec trois portes de sortie vers les docs.
Ajouté. Cinq nouvelles pages docs orientées IT B2B : /docs/workspaces, /docs/agents, /docs/integrations, /docs/routines, /docs/mcp. Plus un tutoriel end-to-end pour les équipes IT. Sidebar restructurée en 6 sections (Démarrer, Concepts, Workspace, Intégrer, Étendre, Aide).
Ajouté. Palette de recherche Cmd-K sur toutes les pages docs (index statique titre plus ancre). Widget "C'était utile ?" en bas de chaque page docs avec capture docs_feedback dans PostHog.
Ajouté. Flow de confirmation 5 minutes pour publish_linkedin_post avec commande Telegram /cancel-linkedin <action_id>. Worker pg_cron chaque minute pour exécuter les pending actions. Status row dans le chat (tools / model / workspace inline), sous-titre dynamique selon les providers connectés, suggestions anchored aux tools.
Changé. Quickstart étape 1 : servir hello-gilbert.html via python3 -m http.serverau lieu d'ouvrir le fichier en double-clic. Ouvrir en file:// était bloqué par le frame-ancestors CSP de Gilbert. /docs/api documente le mode guest honnêtement. /docs/embed-iframe retire theme=auto qui était documenté mais pas implémenté. Une quarantaine de commits design-fix sur landing, console, chat, docs, routines, workspace (DESIGN.md voice, button variants, copy, accents français restaurés).
Corrigé. /embed/playground blank en prod : le bootstrap matchait le catch-all frame-ancestors 'none'. Le playground forge maintenant le JWT côté serveur et pointe l'iframe directement sur /embed?token=…. /api/chat ne leak plus le schema Anthropic interne sur un curl anonyme (STATIC_TOOLS projeté à { name, description, input_schema }). Erreurs upstream sanitisées avant le stream. runEmbedExchange splitté pour ne plus appeler cookies().set() depuis un Server Component (ISSUE-001 QA).
Sécurité. publish_linkedin_post retiré de la surface MCP (CSO P0), puis ré-exposé avec le confirm plus délai 5 minutes ci-dessus. Rate limit IP sur le TTS OpenAI anonyme et défense prompt-injection sur /api/improv.
Ajouté. Tracking PostHog Cloud EU branché sur les quatre apps produit, avec des points de mesure dans les flows Gilbert. Bridge MCP multi-provider : registry unifié, scopes user/workspace, précurseur des Custom Tools workspace-scoped du 25 mai.
Changé. Formule ROI de la landing publique retravaillée avec un modèle plus conservateur et défendable.
Corrigé. Le ignoreCommand Vercel survit aux SHA absents des clones shallow et tombe en repli sur VERCEL_GIT_PREVIOUS_SHA.
Ajouté. Parité CRUD Telegram entre groupe workspace et DM utilisateur. Tool slack_post_to_channel avec auto-mapping ; couplage broadcast / workspace channel avec warning privacy ; dérivation du scope des delivery_channels et toolset gating. Skeletons loading.tsx sur /chat, /console, /adminet l'arbre dossiers. Workflow CI build-check ; previews Vercel coupées.
Changé. Sprint 1 Wave 6 : intégrations splittées en user-strict vs workspace-shared, informé par le plan-design Wave 5. Wave 7 : helper resolveIntegrationet UI des canaux de sortie d'une routine.
Corrigé. Toolset des agents embed restreint pour privacy. Token --color-coral défini pour que bg-coral / text-coral rendent réellement.
Sécurité.Audit RLS sur le split routines : policies durcies et tests d'isolation ajoutés (T21).
Ajouté. Schema routines splitté en routines plus subscriptions plus runs. Auto-subscribe fanout et UI catalogue routines 2 tabs. Scaffolding Inngest (client plus worker stub plus handler Next.js) pour la queue durable. Dépendances Stripe / Resend / Inngest ajoutées. Checklist wipe d'état externe Sprint 0. Nav mobile responsive : burger sur la landing, avatar plus workspace compacts sur la top bar chat.
Changé. Pages console et APIs serveur adaptées au nouveau split routines.
Corrigé. package-lock.json re-synchronisé avec les deps optionnelles cross-platform.
Le produit bascule de "Gilbert personal avec workspaces en option" vers "le workspace est l'unité" : agents, repos, intégrations, routines et contexte Live OBS vivent sous un workspace, avec un switcher actif persisté.
Ajouté. Refonte workspace-primary, phases 2/3 (CRUD, agents, repos, intégrations). Routines de retour dans la sidebar avec CreateRoutineForm et bibliothèque de presets. Switcher workspace actif persisté (phase 6). Mode Live OBS avec contexte workspace.
Changé. /docs refondues pour le modèle workspace-primary plus cleanup typographie. Nav chat : boutons icônes Accueil/Console, panneau droit passe en full-width.
Corrigé. /api/cron/tick migré de Vercel cron vers pg_cron (contrainte plan Hobby). RLS enfin active sur personal_routines et personal_routine_runs. padding-right sur les <strong> dans Section et Callout.
Le produit se sépare proprement entre le consumer (/chat) et le B2B (/console), avec workspaces, routines et intégrations en first-class.
Ajouté. BYOLLM(Bring Your Own LLM) via une abstraction de provider : un workspace branche Anthropic, OpenAI, Gemini ou n'importe quel provider AI-SDK dont il a la clé. Site docs publiques avec Quickstart, Concepts, Troubleshooting (Phase 1+). Surface /console B2B pour admins workspace : agents, intégrations, routines, settings.
Ajouté. Multi-workspace avec intégrations scopées au workspace, email masqué dans le greeting pour éviter de leak de la PII. Wizard routines pour scheduled tasks : cron plus run LLM avec watchlog, actions par run et page globale.
Ajouté. /embed/playground : iframe sandbox publique plus token de test pour que les intégrateurs voient Gilbert avant de signer. /personal/pair et /personal/connect-google : flows pairing consumer. /embed vitrine quand chargé sans params (au lieu de casser).
Changé. Intégrations migrées sous /console/integrations. IntentSwitcher ne gère plus /chat (Phase 4). Landing CTAs polis (Phase 5). Prompts user-agnostiques et petit parser cron pour supporter les routines par workspace ; code Telegram splitté.
Corrigé. Queries /console/workspaces cassées par le nouveau schéma.
Ajouté. Intégration LinkedIn multi-tenant, branchée via MCP. Le flow de pairing inclut déconnexion, inspection du profil et un hint UX quand des scopes manquent.
Corrigé. Parsing des scopes LinkedIn, UX refresh_token, et timezone forcée à Europe/Paris sur les dates rendues.
Cette semaine branche Gilbert à Claude Code comme companion Telegram et web.
Ajouté. Install one-liner via curl … | bash depuis gilbert.solveholding.com (évite le rate limit raw-content de GitHub) qui pose le plugin dans Claude Code et déroule les credentials dans le vrai terminal du user. Endpoint MCP streamable HTTP: Claude Code, Cursor, ChatGPT ou n'importe quel client remote parle à Gilbert sans plugin stdio local.
Ajouté. Wizards /connect-claude (MCP basique) et /connect-cowork (bridge complet), splittés pour garder le flow simple simple. Tool LLM send_to_claudeavec une bulle "tool status" persistante. Commande Telegram /schedule pour drafts schedulés one-shot. Bridge multi-user Claude ↔ Gilbert avec clés API par user et création auto de topics Telegram. Reply-watcher qui persiste le feedback dans le repo (seed ibg-prisca).
Changé. Wizard unifié autour du connector HTTP ; le plugin stdio est retiré. Watcher code paths supprimés après la migration vers Routine fire.
Corrigé. Garde-fous anti-hallucination sur le reply path cowork-notify et sur /schedule. Messages de groupe Telegram pris en compte quand le bot est mentionné ou quoté, plus uniquement en DM. Désambiguïsation send_to_claude vs create_scheduled_draft. Classifier biaisé vers "complex" et Tier D self-aware pour ne pas sur-tooler les intents simples.
Sécurité. Fallback legacy COWORK_NOTIFY_SECRET supprimé.
Ajouté. Bridge bidirectionnel cowork ↔ Telegram avec routage par contexte (/api/cowork/notify). UX tool status bidirectionnelle : les users Telegram voient quand un tool tourne.
Ajouté. Pass SEO complet sur gilbert.solveholding.com : robots.txt, sitemap, manifest, metadataBase, cartes OG et Twitter (Couche A). Metadata par page avec OG / Twitter / canonical (Couche B). opengraph-image dynamique via next/og (Couche C). JSON-LD Organization plus SoftwareApplication (Couche D). Favicons multi-résolution (192 / 512) et application-name plus appleWebApp pour les sitelinks SERP cross-produits.
Corrigé. /billing/return wrappé en Suspense pour débloquer le prerender prod. OG image switchée sur un screenshot statique du hero (la version dynamique cassait au cold build Vercel). Safe-browsing : patterns CGU et anti-phishing centralisés sur les pages avec formulaire.
Sécurité. Hardening RLS et SHA-pinning CI cross écosystème.
Le pipeline personal grandit. Les pages bougent sous /chat, la mémoire conversationnelle arrive, le billing ship, et l'UX s'adapte à l'intent.
Ajouté. Mémoire conversationnelle (L1 plus L2 plus L3) : résumé court-terme, recap mid-terme, recall long-terme. Gilbert retient ce que vous avez discuté à travers les threads. Pipeline billing avec PayPal checkout, webhook et paywall. UX adaptative par intent, axe orthogonal au product_context: l'UI bouge (suggestions, surface de tools, copy) selon que tu drafts, schedule, ou debug.
Ajouté. 5 nouveaux tools Gmail/Calendar : drafts, read, search, range, create_event. Indicateur typing et streaming sur Telegram. product_contextpersonal avec route dossier dédiée. Signout server-side robuste plus middleware plus isolation du token guest pour qu'un user déconnecté ne réutilise pas par accident une session authentifiée.
Corrigé. Re-pair Telegram depuis le même chat_id sans hitter 23505 (duplicate-key). OAuth Google : force le consent screen quand les scopes sont incomplets ; préserve les scopes Google dans /save-token pour qu'un "linked then unlinked" ne se produise pas silencieusement.
Ajouté. Fondations du pipeline personal : migrations schema, flow OAuth Google, pairing Telegram. MVP personal (PR5-9) : tools Gmail/Cal, briefing journalier, cron, endpoints admin, 63 tests.
Ajouté. Inbound chat routé dans la boucle LLM avec un gate pending_action pour que les tools destructifs demandent confirmation. Design-review UI sur les pages personal.
Corrigé. Callback OAuth Google. Cron briefing déplacé de Vercel cron vers Supabase pg_cron pour débloquer le deploy sur le plan Hobby.
Premiers commits du service standalone solve-gilbert. Projet sorti du monorepo pour vivre à gilbert.solveholding.comet s'embarquer en iframe dans n'importe quel produit Solve.
Ajouté. Agent multi-tenant embarquable : /chat, /login, /embed, avec frame-ancestors CSP enforced partout sauf sur la surface embed. Exchange JWT SSO pour les sessions embed et dispatch webhook outbound signé HMAC.
Ajouté. Nav landing auth-aware et écran /login signed-in. Callback auth robuste qui supporte le flow Supabase token_hashet expose la raison d'une erreur. Rate limit chat (10/min plus cooldown 4s) avec countdown front-end. Favicon gilbert.png et UI login alignée sur la DA Gilbert.