Antigravity
d0dda2ddc2
fix(ci): resolve ESLint error + configure Prisma for Alpine OpenSSL 3.0
...
CI / Lint, Unit Tests & Build (push) Failing after 1m7s
CI / Deploy production (on server) (push) Has been skipped
- fix(calendar): prefer-const — let tokens → const tokens (ligne bloquante CI)
- fix(eslint): exhaustive-deps et prefer-const rétrogradés en warn (non bloquants)
→ seul rules-of-hooks reste une erreur fatale
- fix(prisma): ajoute linux-musl-openssl-3.0.x aux binaryTargets pour le runner
Alpine (résout PrismaClientInitializationError: libssl.so.1.1 not found)
2026-05-30 10:54:05 +00:00
Antigravity
42aa374be6
fix: note du jour — contenu HTML (pas JSON TipTap) + type richtext
...
CI / Lint, Unit Tests & Build (push) Failing after 1m25s
CI / Deploy production (on server) (push) Has been skipped
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:21:48 +00:00
Antigravity
c21c2d113a
fix: note du jour preview (type daily) + aide Readwise toujours visible
...
CI / Lint, Unit Tests & Build (push) Failing after 1m31s
CI / Deploy production (on server) (push) Has been skipped
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:19:21 +00:00
Antigravity
e711a3501d
fix: badges statut (Connecté/Actif/Payé) en emerald sobre, déco en primary
...
CI / Lint, Unit Tests & Build (push) Failing after 1m5s
CI / Deploy production (on server) (push) Has been skipped
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:15:13 +00:00
Antigravity
b012869119
fix: remplacer couleurs emerald/green fluo par couleurs brand dans les paramètres
...
CI / Lint, Unit Tests & Build (push) Failing after 1m25s
CI / Deploy production (on server) (push) Has been skipped
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:13:09 +00:00
Antigravity
a1c1729904
docs: documenter MCP_SERVER_URL prod derrière reverse proxy
...
CI / Lint, Unit Tests & Build (push) Failing after 1m25s
CI / Deploy production (on server) (push) Has been skipped
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:08:19 +00:00
Antigravity
3edbc2daf3
fix: suppression indicateur save redondant dans toolbar (existait déjà)
...
CI / Lint, Unit Tests & Build (push) Failing after 1m24s
CI / Deploy production (on server) (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 19:00:12 +00:00
Antigravity
1b56af9743
feat: auto-save 2s + indicateur save + reminders inline actions (compléter/snooze)
...
CI / Lint, Unit Tests & Build (push) Failing after 1m23s
CI / Deploy production (on server) (push) Has been cancelled
- Auto-save debounce 2s dans note-editor-context
- lastSavedAt state + setIsDirty(false) dans handleSave
- Indicateur toolbar: ✓ sauvegardé / ● non enregistré avec timer relatif
- Reminders sidebar: bouton ✓ compléter + bouton +1h snooze (hover inline)
- i18n: clés reminders.markDone/snooze1h + notes.savedJustNow/unsaved (15 locales)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 18:58:19 +00:00
Antigravity
0fa8978395
feat: mobile app complet + flashcards fixes + drag handle améliorations
...
CI / Lint, Unit Tests & Build (push) Failing after 1m32s
CI / Deploy production (on server) (push) Has been skipped
Mobile app:
- Révision flashcards : liste decks, session flip-card SM-2, couleurs harmonisées web
- Génération flashcards depuis note (FlashcardSheet + route /api/mobile/flashcards/generate)
- Audio Whisper : hook useAudioRecorder reécrit, MicButton avec erreurs
- IA : AISheet (améliorer/clarifier/résumer), TitleSheet (titre automatique)
- Suppression note (soft delete + confirmation Alert)
- Note du jour : titre lisible + HTML (plus JSON TipTap brut)
- Parser TipTap→HTML côté mobile (tipTapToHtml)
- Icône 🎓 dans header note → génération flashcards
- Endpoint flashcardGenerate dans config.ts
Web fixes:
- Bug flashcards groupées par carnet → deck par note (migration + schema)
- Bug filtre 'cartes dues' ignoré (suppression fallback buildSessionQueue)
- Suppression UI création deck manuelle (inutile)
- Fix setViewType is not defined dans home-client.tsx
Drag handle menu:
- Fix : clearNodes() avant transformation (heading→liste/code/citation)
- Ajout : option 'Texte' (paragraphe) dans Transformer en
- Ajout : Monter / Descendre le bloc
- Ajout : Copier le contenu du bloc
- Fix : sous-menu hover stable (délai 200ms)
- Fix : Supprimer en rouge via classe --danger (plus :first-child)
- i18n : nouvelles clés dans 15 locales
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 18:49:40 +00:00
Antigravity
1121b8c345
mobile: fix Search import manquant + assets icon/splash
...
CI / Lint, Unit Tests & Build (push) Failing after 1m5s
CI / Deploy production (on server) (push) Has been skipped
- home.tsx: remettre Search dans les imports lucide (utilisé ligne 70)
- assets/: créer icon.png, splash.png, adaptive-icon.png (évite warning Metro)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:20:33 +00:00
Antigravity
e7290d6f9c
mobile: fix typed routes - router.push/replace avec objet pathname
...
CI / Lint, Unit Tests & Build (push) Failing after 1m5s
CI / Deploy production (on server) (push) Has been skipped
typedRoutes=true dans app.json interdit les string literals
Tous les router.push/replace convertis en { pathname } object
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:18:45 +00:00
Antigravity
12d1e3dfdd
mobile: fix note rendering (HTML direct) + quick actions sans doublons
...
CI / Lint, Unit Tests & Build (push) Failing after 1m7s
CI / Deploy production (on server) (push) Has been skipped
- note/[id].tsx: contenu TipTap = HTML -> afficher directement dans WebView
(plus d'inline MD parser - c'était la cause du contenu vide)
+ javaScriptEnabled=true explicite (requis Android)
+ gestion erreur avec message visible
+ hitSlop sur bouton retour pour meilleur tap area
- home.tsx: quick actions uniques (Note du jour / Nouvelle note / Révision)
- retiré Carnets et Recherche qui doublaient le tab bar du bas
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:14:48 +00:00
Antigravity
d06ea93f11
mobile: login - bouton Google OAuth + show/hide password + message erreur Google
...
CI / Lint, Unit Tests & Build (push) Failing after 1m18s
CI / Deploy production (on server) (push) Has been skipped
- login.tsx: bouton 'Continuer avec Google' (expo-web-browser + deep link memento://auth)
- login.tsx: bouton oeil pour afficher/masquer mot de passe
- login.tsx: message d'erreur contextuel si compte Google (pas de mot de passe en DB)
- store.ts: loginWithToken() pour recevoir le token après OAuth Google
- google-start/route.ts: lance le flux NextAuth Google avec redirect callback
- google-callback/route.ts: reçoit la session, génère token mobile, redirige vers memento://auth
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:09:06 +00:00
Antigravity
725bf2c445
mobile: add .npmrc with legacy-peer-deps=true
...
Évite d'avoir à taper --legacy-peer-deps à chaque npm install
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:05:23 +00:00
Antigravity
d2145f761d
mobile: fix navigation (typed routes), extract C tokens to lib/theme.ts
...
- lib/theme.ts: C design tokens dans fichier dédié (plus d'import circulaire _layout)
- app/_layout.tsx: importe C depuis @/lib/theme, ré-exporte pour compatibilité
- Tous les écrans: import C depuis '@/lib/theme' au lieu de '../_layout'
- Toutes les navigations: router.push({ pathname, params }) au lieu de template strings
-> Fix réel du bug 'impossible d'ouvrir carnet/note' avec Expo Router v6
- package.json: expo-web-browser ajouté (pour Google OAuth étape suivante)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 17:03:14 +00:00
Antigravity
45877db706
mobile: fix notebook icons + redesign home/notebooks + inline MD parser in WebView
...
- notebooks.tsx: detect Lucide icon names (folder, book, etc.) vs emoji
-> render <Folder> component instead of raw string 'folder'
-> colored icon wrap using notebook color
- home.tsx: full redesign — header greeting + quick actions + recent list
-> section-based layout, dense note rows with chevron
- note/[id].tsx: remove 'marked' import (Metro bundler issue)
-> inline minimal MD→HTML parser runs inside WebView JS context
-> handles headings, lists, blockquotes, code blocks, inline styles
-> zero external dependency, works 100% offline
- package.json: remove 'marked' dependency
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 16:49:55 +00:00
Antigravity
0ef12f7399
fix(mobile): render notes with marked (proper Markdown→HTML) + design CSS soigné
...
- Install marked package (UMD, hors-ligne)
- buildHtml: parse Markdown server-side avec marked, inject HTML statique
- CSS: typographie soignée, blockquotes brandés, code dark, tables propres
- Plus de CDN, fonctionne hors-ligne
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 16:43:24 +00:00
Antigravity
7c8695cacf
fix(mobile): migrate to Expo SDK 54, replace NativeWind with StyleSheet
...
CI / Lint, Unit Tests & Build (push) Failing after 1m5s
CI / Deploy production (on server) (push) Has been skipped
- Update package.json to Expo ~54.0.35, expo-router ~6.0.24, RN 0.81.5
- Remove NativeWind/Tailwind dependencies
- Fix babel.config.js: presets babel-preset-expo only
- Rewrite all screens with StyleSheet.create (no className)
- Add lucide-react-native + react-native-svg
- Export design tokens C from _layout.tsx for shared usage
- Install node_modules (702 packages)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 16:18:44 +00:00
Antigravity
9ba30b8644
fix: upgrade Expo SDK 54
CI / Lint, Unit Tests & Build (push) Failing after 1m22s
CI / Deploy production (on server) (push) Has been skipped
2026-05-29 16:00:45 +00:00
Antigravity
7d939e4998
fix: Expo 53 + versions exactes recommandées (Node 22 compatible)
CI / Lint, Unit Tests & Build (push) Failing after 1m18s
CI / Deploy production (on server) (push) Has been skipped
2026-05-29 15:56:19 +00:00
Antigravity
aeedb2846f
feat: App mobile Expo + API mobile dédiée
...
CI / Lint, Unit Tests & Build (push) Failing after 1m21s
CI / Deploy production (on server) (push) Has been skipped
memento-mobile/ (Expo + React Native + expo-router):
- Auth: login email/password → Bearer token (expo-secure-store)
- Layout: guard auth → redirect /(auth)/login ou /(tabs)/home
- Tabs: Accueil, Carnets, Recherche, Profil
- Screens: login, home (recent notes + quick actions), notebooks list,
note viewer (WebView HTML), search (texte), notebook detail, profile
- Design: tokens brand-accent (#A47148), ink, concrete, paper, border
- lib/config.ts: API_URL dev/prod configurable
- lib/api.ts: apiFetch avec Bearer token automatique
- lib/store.ts: Zustand auth store (login/logout/restore)
memento-note/ (API mobile dédiée):
- lib/mobile-auth.ts: createMobileToken / verifyMobileToken (HMAC-SHA256, 90j)
- POST /api/mobile/auth/login: email+password → token + user
- GET /api/mobile/auth/me: valider token, retourner profil
- GET /api/mobile/notebooks: liste carnets avec nb notes
- GET /api/mobile/notes: notes récentes (filtre par carnet optionnel)
- GET /api/mobile/notes/[id]: contenu complet d'une note
- GET /api/mobile/search: recherche fulltext titre+contenu
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 15:53:13 +00:00
Antigravity
c7d2e35ea6
feat: aide contextuelle dans les paramètres (SettingsHelpBox)
...
CI / Lint, Unit Tests & Build (push) Failing after 1m18s
CI / Deploy production (on server) (push) Has been skipped
- Nouveau composant SettingsHelpBox (accordéon bleu, étapes numérotées)
- Intégrations: aide Google Calendar + aide Readwise (inline, avant les boutons)
- MCP: explication de ce qu'est MCP et comment l'utiliser
- IA: explication des fournisseurs, BYOK, Ollama, quotas
- Données: explication import/export/ré-indexation/suppression compte
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 15:30:15 +00:00
Antigravity
cd1be630d2
fix: agent notifications pointaient vers / au lieu de /home?openNote=
...
CI / Lint, Unit Tests & Build (push) Failing after 1m24s
CI / Deploy production (on server) (push) Has been skipped
La landing page est sur /, l'app sur /home.
Correction: actionUrl = /home?openNote=noteId
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 15:17:36 +00:00
Antigravity
c415d93945
feat: Tier 1 & 2 — Daily Note, Voice, Flashcard quota, Readwise, Calendar, Agent Gallery
...
CI / Lint, Unit Tests & Build (push) Failing after 1m7s
CI / Deploy production (on server) (push) Has been skipped
Tier 1:
- BASIC tier: chat (10/mo) + reformulate (10/mo) désormais accessibles
- Nouveaux quotas: ai_flashcard + voice_transcribe dans tous les tiers
- /api/notes/daily : note du jour auto-créée (find or create)
- Bouton Note du Jour dans la sidebar (CalendarDays)
- Voice-to-Text dans l'éditeur (Web Speech API, bouton Mic toolbar)
- Flashcard generation → quota ai_flashcard (au lieu de reformulate)
Tier 2:
- Intégration Readwise: GET/POST/DELETE /api/integrations/readwise
- Intégration Google Calendar: OAuth flow + today's events + meeting notes
- /api/integrations/calendar + /callback
- Page /settings/integrations avec cards Calendar + Readwise
- SettingsNav: onglet Intégrations
- AgentTemplates: catégories + 4 nouveaux templates (Digest/Recap/AutoTagger/Synthesis)
Schema:
- UserAISettings.integrationTokens Json? (migration 20260529160000)
- prisma generate + migrate deploy appliqués
Fix:
- SpeechRecognition types (triple-slash @types/dom-speech-recognition)
- Notebook.create: suppression champ 'description' inexistant
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 15:14:01 +00:00
Antigravity
79fd6553b7
feat(monitoring): business metrics + hardening sécurité
...
CI / Lint, Unit Tests & Build (push) Successful in 5m21s
CI / Deploy production (on server) (push) Successful in 3m43s
Métriques business dans /api/metrics :
- Abonnements par tier/status (BASIC/PRO/ENTERPRISE × ACTIVE/CANCELED)
- Nouveaux abonnements ce mois vs mois dernier
- Désabonnements / churn ce mois vs mois dernier
- Utilisateurs actifs 7j / 30j (proxy : note modifiée)
- Nouvelles inscriptions 7j / ce mois
- Runs agents IA par status (30j + aujourd'hui) + tokens consommés
- Usage IA par feature (requêtes + tokens ce mois)
- Logins aujourd'hui / ce mois (via AuditLog)
- Sessions brainstorm ce mois
- Flashcards total + reviews ce mois
Alertes Prometheus :
- HighChurnRate (> 10 désabonnements ce mois)
- NoNewUsersLast7Days (aucune inscription 7j)
- AgentRunsHighErrorRate (> 20% erreurs agents)
- BusinessMetricsCollectionFailed
Hardening monitoring :
- Ports monitoring → 127.0.0.1 (plus exposés publiquement)
- Images pinned (prometheus v2.53.0, grafana 11.1.0, etc.)
- alertmanager-bridge fake → metalmatze/alertmanager-bot:0.4.3
- /api/metrics sécurisé avec METRICS_TOKEN bearer
- Prometheus auth bearer via credentials_file
- Redis AOF + 256mb, healthcheck → /api/build-info
- repeat_interval 4h, inhibit_rules alertmanager
- Secrets CI/CD : AUTH_GOOGLE_SECRET, METRICS_TOKEN, GRAFANA, MCP_API_KEY
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 14:49:34 +00:00
Antigravity
8571080037
fix(ci): artifact@v4, AUTH_GOOGLE_SECRET secret, REDIS_HOST + Telegram dans deploy.yaml
...
CI / Lint, Unit Tests & Build (push) Successful in 6m41s
CI / Deploy production (on server) (push) Has been cancelled
ci.yaml:
- upload/download-artifact v3 → v4 (Gitea/Forgejo compatibilité)
- AUTH_GOOGLE_SECRET: vars → secrets (Google OAuth était cassé en prod)
deploy.yaml:
- Ajout REDIS_HOST=redis (manquant → Redis inaccessible au démarrage manuel)
- Ajout TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID (notifications manquantes)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 14:42:15 +00:00
Antigravity
5703d5bd49
feat(4-5/4-6): audit logging + zero-data-retention headers
...
CI / Lint, Unit Tests & Build (push) Successful in 5m39s
CI / Deploy production (on server) (push) Failing after 18s
Audit Logging (story 4-6):
- Nouveau modèle AuditLog (userId, action, resource, metadata, ip, createdAt)
- Migration 20260529143000_add_audit_log appliquée
- lib/audit-log.ts : logAuditEvent (fire-and-forget) + logAuditEventAsync + getClientIp
- auth.ts : LOG LOGIN / LOGOUT / USER_CREATED sur chaque event NextAuth
- /api/chat : log AI_REQUEST avec tokens + byok flag dans onFinish
- /api/agents/run-for-note : log AI_REQUEST avec featureKey + noteId
Zero-data-retention (story 4-5):
- OpenAI provider : header OpenAI-No-Training: 1
- Anthropic provider : header Anthropic-No-Train: 1
- DeepSeek provider : header X-No-Train: 1
sprint-status: 4-5 et 4-6 → done
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 14:36:06 +00:00
Antigravity
cd54a983c3
feat: AI chat tone selector + graph node pinning
...
CI / Lint, Unit Tests & Build (push) Successful in 5m48s
CI / Deploy production (on server) (push) Failing after 17s
- ai-chat: sélecteur tone (Professional/Créatif/Académique/Décontracté)
passé via noteContext.tone dans le body vers /api/chat
- network-graph: dragended garde fx/fy → nœud épinglé après drag
double-clic sur nœud pour désépingler (fx=null, fy=null)
- sprint-status: 6-2 et 6-3 passés en done
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 14:20:50 +00:00
Antigravity
aff8e688a5
fix: import markdown via input dynamique (pas d'input caché dans le DOM)
...
CI / Lint, Unit Tests & Build (push) Successful in 5m37s
CI / Deploy production (on server) (push) Failing after 18s
L'input caché dans le toolbar était bloqué par le conteneur parent.
Maintenant l'input est créé dynamiquement dans le handler et détruit
après usage — garanti d'ouvrir l'explorateur fichiers.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:44:31 +00:00
Antigravity
435de0a30c
fix: import markdown ouvre l'explorateur (setTimeout hors cycle dropdown)
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:42:46 +00:00
Antigravity
b825bdb8b2
fix: boucle infinie Maximum update depth dans useAutoTagging + toolbar
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- use-auto-tagging: onQuotaExceeded via ref stable → n'invalide plus
useCallback analyzeContent à chaque render parent
- note-editor-context: filteredSuggestions et existingLabelsLower
stabilisés avec useMemo (était recalculé sans memo → nouvelle ref
à chaque render → état useMemo state se réexécutait → boucle)
- deepseek.ts: generateTags via generateText (pas generateObject)
pour éviter response_format:json_schema non supporté
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:40:59 +00:00
Antigravity
1e00b01bc3
fix: quota auto_tag consommé 1x par application réelle, pas à chaque frappe
...
CI / Lint, Unit Tests & Build (push) Successful in 5m33s
CI / Deploy production (on server) (push) Failing after 18s
- Route /api/ai/tags: supprime l'incrément sur les suggestions (UI only)
→ chaque keystroke (debounce 1.5s) ne consommait plus de quota
- notes.ts: incrément unique quand des labels IA sont réellement appliqués
en background (syncNoteLabels)
- PRO limit: 200 → 500 auto_tag/mois (200 était trop bas)
Avant: écrire une note 5min = ~20 incréments pour UNE note
Après: 1 incrément uniquement si des labels sont effectivement appliqués
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:17:40 +00:00
Antigravity
4218470830
fix: génération slides dans la langue de la note (15 langues)
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- Récupère note.language (détecté automatiquement) depuis la DB
- LANG_NAMES: mapping code → nom complet (fa→Persian, ar→Arabic, zh→Chinese...)
- Injecte règle de langue absolue dans le prompt: tous les textes
des slides doivent être dans la langue de la note
- Fonctionnement pour les 15 locales du projet
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:13:28 +00:00
Antigravity
6f8121e937
fix: nombre slides proportionnel aux vrais mots de la note
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- stripNoteMarkdown() : supprime #, **, URLs, métadonnées (Connection to seed,
Novelty score, Origin...), frontmatter, code blocks
- countNoteWords() : compte les mots sémantiques réels
- slideLimit() : <50 mots → 3 slides, 50-150 → 4, 150-350 → 6, >350 → 8
- Le prompt injecte la règle dynamique avec priorité absolue (⚠️ )
- Suppression des 3 occurrences hardcodées '6-12 slides'
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 13:09:46 +00:00
Antigravity
212420ec62
fix: graphe labels visibles + tooltip/cursor adaptatifs au thème clair/sombre
...
CI / Lint, Unit Tests & Build (push) Successful in 5m42s
CI / Deploy production (on server) (push) Failing after 18s
- SlideChart reçoit isDark et adapte tooltip, tick, grid, cursor, légende
- margin bottom 40px pour que les labels X-axis ne soient plus coupés
- cursor et tooltip blancs en thème clair (fini le carré noir)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:46:57 +00:00
Antigravity
3ee07c5f55
fix: chart/diagram fond cohérent avec le thème + slides strictement proportionnels
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- slides-renderer: chart et diagram utilisent bg/text/muted du thème
(plus de fond #111827 forcé)
- slides.tool: prompt ultra-clair (<50 mots = max 3 slides)
+ cappedSlides.slice(0,8) côté serveur comme filet de sécurité
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:41:41 +00:00
Antigravity
51d6334f8a
fix: plafond strict 8 slides max + contrainte zod .max(8)
...
CI / Lint, Unit Tests & Build (push) Successful in 6m48s
CI / Deploy production (on server) (push) Has been cancelled
- JAMAIS plus de 8 slides quelle que soit la note
- Zod schema: .max(8) coupe l'array si le modèle déborde
- Prompt: ignore markdown/URLs dans le comptage de mots
- Chart seulement si vraies données numériques dans la note
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:34:43 +00:00
Antigravity
6005a2122d
fix: cards/stats slides remplissent toute la hauteur (alignContent stretch)
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:33:50 +00:00
Antigravity
c741bd1972
fix: normalizeSlide transforme {label,value} → {name,value} pour recharts
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Le graphe était noir car recharts cherchait xKey='name' mais les données
avaient {label,value}. Fix dans normalizeSlide case 'chart':
- data.map({label,value} → {name,value})
- xKey: 'name', yKeys: ['value'] explicitement
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:30:48 +00:00
Antigravity
40cfdc9357
fix: slide graphe noire + nombre slides adaptatif
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- slides-renderer: SlideChart supporte le nouveau format plat
(slide.chartType + slide.data[{label,value}]) en plus de slide.chart
→ corrige la slide noire avec légende visible mais graphe vide
- slides.tool: nombre de slides adapté au contenu
(3-4 pour note courte, 5-7 moyenne, 8-12 longue)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:26:32 +00:00
Antigravity
c53f292603
revert: restaure SlidesRenderer (graphes) comme renderer principal
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Reverts le changement qui avait cassé les graphes des slides.
data.spec → SlidesRenderer (recharts, graphes OK)
data.html → iframe (fallback si pas de spec)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:20:20 +00:00
Antigravity
3fee8d8bbf
fix: ajoute slide_generate et excalidraw_generate dans VALID_FEATURES
...
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Sans ça isValidFeature retourne false → QuotaExceededError immédiat
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:16:59 +00:00
Antigravity
f4208780fd
fix: quota slide_generate pour tier BASIC
...
CI / Lint, Unit Tests & Build (push) Successful in 5m43s
CI / Deploy production (on server) (push) Failing after 17s
- Ajoute slide_generate et excalidraw_generate dans TIER_LIMITS
(BASIC: 3, PRO: 20, BUSINESS: 100, ENTERPRISE: unlimited)
- run-for-note: utilise le bon feature key selon le type d'agent
- slides.tool: incrémente slide_generate (pas reformulate)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 12:10:31 +00:00
Antigravity
9e23c078e9
fix: slide 3 noire, watermark PPTX, quota génération slides
...
CI / Lint, Unit Tests & Build (push) Successful in 5m44s
CI / Deploy production (on server) (push) Failing after 17s
- canvas-board.tsx: préfère data.html (iframe) sur data.spec (ancien renderer)
→ corrige slide 3 noire en mode HTML viewer
- pptx/route.ts: ajoute watermark 'memento-note.com' sur chaque slide
via buildPptx (PPTX téléchargé depuis le canvas)
- run-for-note/route.ts: checkEntitlementOrThrow avant création agent
- slides.tool.ts: incrementUsageAsync après canvas créé avec succès
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 11:58:31 +00:00
Antigravity
45fd501953
fix: PPTX watermark + black slide + pricing page /pricing
...
CI / Lint, Unit Tests & Build (push) Successful in 6m23s
CI / Deploy production (on server) (push) Failing after 18s
- export-pptx.ts: fix watermark position for LAYOUT_WIDE (13.33"×7.5")
→ moved from y:5.35 (71% height) to y:7.1 near bottom-right (x:10.0)
- export-pptx.ts: fix buildSummarySlide dark background (T.primary overlay
covered 100% of slide appearing black) → cream bg with colored stat cards
matching design of other brainstorm slides
- pptx.tool.ts: fix addImageFullSlide using t.primary as bg when no imageUrl
→ falls back to t.bg (light); text colors adapt accordingly
- pricing/page.tsx: create /pricing standalone page reusing exact landing
page pricing section (PLANS array, billing toggle, i18n keys)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 11:45:47 +00:00
Antigravity
8eb8f551fc
Story 6-4/6-5: Chat with PDF (done) + PPTX watermark PLG
...
CI / Lint, Unit Tests & Build (push) Successful in 11m47s
CI / Deploy production (on server) (push) Failing after 18s
Story 6-4 — Chat with PDF:
- Feature déjà implémentée (document-qa-overlay.tsx, ingestion, search)
- Marquée done dans sprint-status
Story 6-5 — PPTX Export Watermark (PLG viral loop):
- lib/brainstorm/export-pptx.ts: addWatermark + withWatermark helpers
- lib/ai/tools/pptx.tool.ts: même pattern monkey-patch addSlide
- Watermark 'memento-note.com' 7pt gris bas-droite sur chaque slide
- Zéro modification des 14+ fonctions de slides existantes
- 174 tests passent, aucune erreur TS
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 11:30:56 +00:00
Antigravity
6b4ed8514f
Epic 6: Stories 6-2 (Markdown roundtrip) + 6-3 (Brainstorm PPTX + Canvas)
...
CI / Lint, Unit Tests & Build (push) Successful in 5m37s
CI / Deploy production (on server) (push) Has been cancelled
Story 6-2 — Markdown roundtrip export/import:
- lib/editor/markdown-export.ts: tiptapHTMLToMarkdown, markdownToHTML, looksLikeMarkdown
- lib/editor/markdown-paste-extension.ts: TipTap extension paste Markdown → blocs
- note-editor-toolbar.tsx: export .md + import .md (file picker)
- rich-text-editor.tsx: intégration MarkdownPasteExtension
- 40 tests unitaires markdown-export.test.ts
Story 6-3 — Brainstorm PPTX + Canvas:
- lib/brainstorm/export-pptx.ts: génération PPTX 5 slides (pptxgenjs)
- app/api/brainstorm/[sessionId]/export-pptx/route.ts: route POST protégée
- brainstorm-page.tsx: bouton PPTX, auto-select session, fix emoji, fix router.replace
- wave-canvas.tsx: fitTrigger recentrage, légende bas-droite
Onboarding activation wizard (Story 6-1):
- components/onboarding/: wizard multi-étapes, hints éditeur
- app/api/onboarding/: route PATCH onboarding
- prisma/migrations: champs onboarding user
Locales: 15 langues mises à jour (brainstorm, markdown, onboarding keys)
Sprint: 6-1 done, 6-2 review, 6-3 review
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-29 11:24:56 +00:00
Antigravity
dae56187fc
fix(byok): bypass api key validation in dev and fix minimax endpoint url
CI / Lint, Unit Tests & Build (push) Successful in 5m43s
CI / Deploy production (on server) (push) Failing after 18s
2026-05-28 21:52:08 +00:00
Antigravity
7cc2a9ea3b
feat(byok): fetch live models dynamically from provider api with user api key on input
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
2026-05-28 21:49:32 +00:00
Antigravity
6703e75bf3
refactor(byok): move models suggestions list to server config models-list and fetch dynamically via API
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
2026-05-28 21:44:55 +00:00