Commit Graph

86 Commits

Author SHA1 Message Date
Antigravity
fb6823e25e fix(lab): ouvrir le bon diagramme sans F5 (?id alias ?canvas + tri canvases)
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:52:30 +00:00
Antigravity
4f950740eb feat: options de génération (thème/style/type) + masquer agents one-shot
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 23s
- Les agents créés par run-for-note ont frequency:'one-shot' et sont
  filtrés de la page /agents (NOT frequency:'one-shot' dans getAgents)
- Panneau slides : sélecteurs Thème (11 palettes) + Style (sharp/soft/rounded/pill)
- Panneau diagramme : sélecteurs Type (auto/flowchart/mindmap/timeline/
  org-chart/architecture/process-map) + Style (sketchy/austere/sketch+)
- Les valeurs sélectionnées sont transmises à l'API et injectées dans le prompt

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:45:57 +00:00
Antigravity
19d0b2759a fix: toast position bottom-right pour ne pas bloquer la navigation
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:27:07 +00:00
Antigravity
34a977b5c4 fix: runAgent fire-and-forget + polling sur la page /agents
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
Le bouton Play des cartes agents appelait runAgent (Server Action) qui
attendait executeAgent (~2-5 min) → spinner bloqué sans résultat.

- runAgent retourne immédiatement { success, agentId }
- agent-card.tsx lance un polling toutes les 3s sur GET
  /api/agents/run-for-note?agentId= jusqu'au statut terminal
- Toast persistant Sonner pendant la génération, mis à jour au résultat
- Cleanup automatique du polling au démontage

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:26:35 +00:00
Antigravity
75b08ef53b fix: génération asynchrone (fire-and-forget + polling)
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 23s
Le problème : la route POST /api/agents/run-for-note bloquait le thread
HTTP pendant toute la durée de génération (2-5 min), provoquant un
spinner infini sans résultat.

Solution :
- POST retourne immédiatement avec { agentId } et lance executeAgent
  en arrière-plan (fire-and-forget, sans await)
- GET /api/agents/run-for-note?agentId= retourne le statut de la
  dernière agentAction (running | success | failure) + canvasId/noteId
- Le client poll le statut toutes les 3 secondes jusqu'au résultat,
  le toast persistant Sonner se met à jour automatiquement
- Cleanup du polling au démontage du composant

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:21:28 +00:00
Antigravity
98e246e257 fix: force git reset on deploy + toast persistant de génération
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 23s
- Remplace git pull par git fetch + git reset --hard origin/main dans
  le workflow CI pour éviter les conflits avec les fichiers locaux
- Ajoute un toast Sonner persistant (duration: Infinity) dès le clic sur
  Générer, qui survit à la navigation et se met à jour en succès/erreur
  avec action directe (Télécharger / Ouvrir)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:15:38 +00:00
Antigravity
ff0b56f805 feat(ai-note): passer noteId au ContextualAIChat en mode liste (note-inline-editor)
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 3s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:11:21 +00:00
Antigravity
d1e08f64c8 feat(ai-note): ajouter boutons Générer slides/diagramme dans le panneau IA
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 3s
- Nouveau endpoint POST /api/agents/run-for-note : crée un agent one-shot
  (slide-generator ou excalidraw-generator) avec la note courante comme source
  et l'exécute immédiatement
- ContextualAIChat : prop noteId + section "Générer depuis cette note" avec
  deux boutons gradient (violet=slides, cyan=diagramme), spinner pendant la
  génération, bouton de téléchargement .pptx ou lien "Ouvrir dans le Lab"
  après succès
- note-editor.tsx : passage de note.id à ContextualAIChat
- i18n fr/en : nouvelles clés ai.generate.*

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 21:07:43 +00:00
Antigravity
129d5541e6 feat(agents): refonte complète slide-generator + excalidraw-generator
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 3s
Slide generator (generate_pptx):
- Pivot vers génération PowerPoint natif (pptxgenjs) au lieu de Reveal.js HTML
- 4 nouveaux layouts diagramme : timeline, process, comparison, metrics
- 2 nouveaux layouts image : image-content (texte + image), image-full (plein cadre)
- Redesign visuel de tous les layouts (cover split, section full-bleed, header band)
- Palettes corrigées : bg blanc sur toutes les palettes, contrastes réels
- fit:shrink systématique sur tous les textes pour éviter les débordements
- Extraction automatique des images des notes (Markdown/HTML) et injection dans le prompt IA
- Prompt IA renforcé : impose "style" et "theme" explicitement dans le JSON, impose ≥2 layouts diagramme
- Fix overlap timeline : zones de texte calculées sans collision avec les cercles
- Notification agent mise à jour : bouton download .pptx au lieu d'ouvrir HTML

Excalidraw generator:
- Layout Dagre/ELK pour graphes auto-positionnés
- Styles visuels : coloré, austère, sketch-plus (Virgil font)
- Zones/containers pour architecture-cloud
- Sanitisation du graphe et métriques de qualité de layout

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 20:55:15 +00:00
Antigravity
21fb56de3f feat(sidebar): drag-and-drop notebook reordering
- Add GripVertical handle (visible on hover) as reorder affordance
- Rows are now draggable; uses 'application/x-notebook' dataTransfer type
  to coexist with existing note-to-notebook drag ('text/plain')
- Drop indicator: thin primary-colored line above the insertion target
- Dragged item fades to 40% opacity during drag
- On drop: calls updateNotebookOrderOptimistic → POST /api/notebooks/reorder → persisted in DB
- draggingNbRef (useRef) used for stale-closure-safe detection in dragover handler
2026-05-03 21:06:34 +00:00
Antigravity
0ebf10344d feat(mcp): add all 4 note types, translate N8N docs to English, add N8N workflow examples
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 55s
- tools.js: expose type enum ['text','markdown','richtext','checklist'] in create_note & update_note
  - default changed from 'text' to 'richtext' (matches Prisma schema)
  - isMarkdown marked as deprecated in favour of type='markdown'
- N8N-CONFIG.md: full French → English translation
- N8N-WORKFLOWS.md: full French → English translation
- N8N-EXAMPLES.md: new comprehensive examples for all 22 MCP tools + workflow patterns
- n8n-workflow-mcp-reminder-bot.json: cron → get_due_reminders → Telegram → mark done
- n8n-workflow-mcp-email-to-note.json: IMAP → create_note → urgent Slack alert
- n8n-workflow-mcp-daily-digest.json: 8AM cron → notes + reminders digest → save + Slack
- n8n-workflow-mcp-webhook-to-note.json: universal webhook → create_note → respond
- notebooks-list.tsx: fix truncated notebook names (pe-24→pe-14), replace hover overlay with Tooltip
2026-05-03 20:49:11 +00:00
Antigravity
1ed7839334 fix: notebook name overflows sidebar on hover with bold + opaque background instead of tooltip overlay
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-03 19:43:57 +00:00
Antigravity
718f4c6900 perf: optimize MCP server (O(1) auth, compact JSON, trashedAt fix) + memento-note performance (lazy loading, server-side filtering, XSS fixes, dead code removal, security hardening)
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m35s
MCP Server:
- Fix validateApiKey: O(1) direct lookup by shortId instead of loading all keys
- Add trashedAt:null filter to ALL note queries (trashed notes leaked in results)
- Compact JSON output (~40% smaller responses)
- Bounded session cache (Map with MAX_SESSIONS=500) to prevent memory leaks
- PostgreSQL connection pooling (connection_limit=10)
- Rewrite all 22 tool descriptions in clear English
- Fix /sse fallback to proper 307 redirect

memento-note Performance:
- loading=lazy on all note images
- Split notebooksRefreshKey from global refreshKey (note CRUD no longer re-fetches notebooks)
- Remove searchKey from trash count deps (no re-fetch on every keystroke)
- Server-side notebookId filter in getAllNotes() (biggest win)
- Skip collaborator fetch for non-shared notes (eliminates N+1 API calls)
- next/dynamic for MarkdownContent + 4 modals (code-split remark/rehype/KaTeX)
- Memoize DOMPurify sanitize with useMemo

Security:
- XSS: DOMPurify sanitize in note-card and note-history-modal
- Auth anti-enumeration: uniform errors in auth.ts
- CRON_SECRET mandatory on cron endpoints
- Rate limiting on login (5 attempts/min per email)
- Centralized API auth helpers (requireAuth/requireAdmin)
- randomize-labels changed GET→POST
- Removed debug endpoints (/api/debug/config, /api/debug/test-chat)

Cleanup:
- Removed dead code: .backup-keep, settings-backup, fix-*.js, debug-theme, fix-labels route
- Removed sensitive console.error in auth.ts
- Ollama fetchWithTimeout (30s/60s AbortController)
- i18n: full Arabic translation, Farsi missing keys
- Masonry drag-and-drop fix (localOrderMap, cross-section block)
- Sidebar notebook tooltip on truncation
2026-05-03 18:41:38 +00:00
Antigravity
aee4b17306 feat: redesign AI test page with Ethereal Precision v2 (horizontal layout, ultra-wide) and fix Dockerfile OpenSSL issue
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 58s
2026-05-03 13:09:04 +00:00
Antigravity
b611ec874d Refactor Admin and Settings UI to Ethereal Precision aesthetic and improve note import/export functionality
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 1m4s
2026-05-03 12:51:25 +00:00
635e516616 fix(ai): live update for translation language input + preset sync
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 46s
2026-05-03 01:42:22 +02:00
a7c3251b49 fix(build): bypass TypeScript error in BubbleMenu blocking CI
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-03 01:38:16 +02:00
5375f874cd fix(chat): enlarge preview panel (max-h-64)
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 36s
2026-05-03 01:35:03 +02:00
0f48df114a fix(chat): buttons always visible on last msg + preview panel outside scroll zone
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
2026-05-03 01:28:54 +02:00
af6e7a2cdf fix(chat): scroll to preview on inject + sidebar restore + collapsible note list (Option A) 2026-05-03 01:23:08 +02:00
88ba0a561a fix(ui): revert resize panel + auto-hide meta sidebar when AI opens 2026-05-03 01:13:45 +02:00
82db722735 fix(chat): inject preview inline in chat tab + resizable note list panel 2026-05-03 01:05:23 +02:00
afa8043fd5 fix(chat): stop loading bubble early, no tab switch on inject, convert md->html in richtext 2026-05-03 00:55:02 +02:00
ad3af531b8 fix: replace Arabe with Persan in translation language list 2026-05-03 00:44:33 +02:00
bd4034777c feat(editor): AI modal preview/apply, translate lang picker, fix p-tag injection, explain modal - no UTF-8 corruption 2026-05-03 00:39:36 +02:00
54b7b4fcf1 fix(editor): custom image width parsing, fix image paste, add AI submenu features 2026-05-03 00:08:28 +02:00
d0387cd9a0 fix: extract images from rich text HTML to enable image description quick action
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 34s
2026-05-02 23:41:46 +02:00
01cf5ccad7 fix: prevent bubble menu from being cut off at the top of notes
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 34s
2026-05-02 23:37:13 +02:00
e4ca7ba497 feat: slash menu navigation, removed gutter button, fixed AI richtext format, added image resize
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 23:31:40 +02:00
6d6e12ba05 fix: move gutter button fully outside text margin and translate placeholder
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 33s
2026-05-02 22:50:39 +02:00
840a72948b style: make floating gutter button more dynamic and beautiful
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 33s
2026-05-02 22:47:13 +02:00
be8d8cb2ee feat: add floating gutter button (+) to trigger slash menu
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 33s
2026-05-02 22:41:20 +02:00
a44326b62b fix: remove super/subscript from slash menu, restore align cmds, complete i18n in BubbleToolbar
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 22:35:30 +02:00
045c98924d feat: add superscript/subscript to BubbleMenu + fix slash menu descriptions
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 45s
2026-05-02 22:30:38 +02:00
dfc2e7dc81 fix: reset category on menu reopen + superscript/subscript require text selection
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 22:26:04 +02:00
df791fc6c7 fix: render slash menu via React Portal under document.body - outside editor DOM hierarchy
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 22:22:21 +02:00
f7ff2f8dfd fix: slash menu - stopPropagation on mousedown blocks ProseMirror selectionUpdate
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
2026-05-02 22:20:48 +02:00
1bbfb775bc fix: slash menu tabs - use menuInteracting ref to block selectionUpdate during menu clicks
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 22:18:21 +02:00
e076601275 fix: slash menu tabs stay open (menuRef.contains check) + full i18n support
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 22:14:57 +02:00
8ef67dcc1f fix: slash menu tabs - prevent editor focus loss on click with onMouseDown preventDefault
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 43s
2026-05-02 22:10:56 +02:00
8e07594ba2 feat: slash menu - category tabs, Tab key navigation, auto-scroll, description search
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 45s
2026-05-02 22:06:30 +02:00
7b9534703c feat: improve slash command menu - new blocks, formatting, IA Note section, premium design
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
2026-05-02 21:55:11 +02:00
bd5391e3f2 fix: simplify note-input toolbar by using compact mode for label, type selector, and ai button
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 45s
2026-05-02 21:45:48 +02:00
dc5f6b77d9 fix: note-input toolbar overflow and rename Assistant IA to IA Note
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 46s
2026-05-02 21:38:56 +02:00
99d0583871 feat: IA Note — rename panel, add Resource tab + chat hover-actions
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
- Renamed 'AI Copilot' / 'Assistant IA' → 'IA Note' everywhere in UI
- Added 3rd 'Ressource' tab in IA Note panel with:
  * Optional URL field that scrapes page text (via new scrapePageText action)
  * Textarea for paste (markdown, HTML, plain text)
  * 3 integration modes: Remplacer / Compléter (AI) / Fusionner (AI)
  * Dual-format preview: Rendu + Markdown brut before applying
- Added hover-actions on assistant chat messages:
  * Remplacer / Compléter / Fusionner appear on hover
  * Triggers same preview/apply flow via resource tab
- New API route: POST /api/ai/enrich-from-resource
  * Supports complete and merge modes with language-aware prompts
- Extended scrape.ts with scrapePageText() (full content extraction)
2026-05-02 21:06:25 +02:00
547c5ffecb fix: stop triggerRefresh() after note creation to prevent stale cache overwrite in production
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
In production (Docker/Next.js standalone), getAllNotes() can return cached results
when called immediately after createNote(skipRevalidation:true). This caused newly
created notes to disappear after the cache reload overwrote the optimistic local state.

Fix: remove triggerRefresh() from both handleCreateNote (NotesTabsView) and
handleNoteCreated (HomeClient). The note is already added optimistically to local
state and does not need a server round-trip.
2026-05-02 20:28:03 +02:00
f93752de14 fix: dynamic note restore without page reload + fix note list sync bugs
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
- NoteHistoryModal: remove window.location.reload(), use onRestored(restored) callback
- NotesTabsView: revert sync derivation to useEffect, add prevNotesRef to detect
  server-side content changes (restore) vs local edits — fixes note disappear bug
  and cross-notebook notes appearing after refresh
- NoteInlineEditor key: include updatedAt so restoration remounts editor with fresh content
- note-card: render title/content/labels from note prop directly, not optimisticNote
2026-05-02 20:18:18 +02:00
a3651f1c96 fix: remove useEffect([note]) that was killing auto-save in NoteInlineEditor
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s
The useEffect synced local state from props but fired on every keystroke
because onChange updates the parent, which creates a new note prop reference.
This cleared the save timer and isDirty flag before auto-save could fire,
making notes unsavable in tabs view. The key prop with updatedAt already
handles the restore remount case.
2026-05-02 19:54:45 +02:00
3818eb8237 feat: note history modal with restore, diff comparison, and dynamic UI updates
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m14s
- Complete rewrite of note-history-modal: version list with inline restore/delete,
  split diff view with synced scrolling, rich preview for markdown/richtext/checklist
- Fix restore not updating editor: use key={id-updatedAt} on NoteInlineEditor to
  force remount on restore, and add sync useEffect to reset local state on prop changes
- Add sync useEffect in NoteEditor for external note updates
- Add historyEnabled to NOTE_LIST_SELECT (no more 'Activer' on every modal open)
- Replace browser confirm() with shadcn AlertDialog for delete confirmation
- Add i18n keys: currentVersion, compareVersions, diffTitle, diffSelectHint, deleteVersionDesc
- Install diff + @types/diff for visual line diffing
- Fix MasonryGrid render-phase sync to preserve local sizes
- Update notes-tabs-view merge logic for restored note propagation
- Remove debug console.log from restoreNoteVersion
2026-05-02 16:51:12 +02:00
Sepehr Ramezani
bd4dd0e9eb fix: show AI assistant button for all note types in card view toolbar
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 17:08:31 +02:00