feat(notes): liens internes, onglet Réseau, living blocks et consentement IA
Some checks failed
CI / Lint, Test & Build (push) Failing after 1m19s
CI / Deploy production (on server) (push) Has been skipped

Rend les liens entre notes visibles et persistants (sync NoteLink au save, auto-save, graphe réseau rafraîchi), ajoute living blocks, Memory Echo, recherche globale, consentement IA explicite et consolide les prototypes design en architectural-grid.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-05-24 14:27:29 +00:00
parent 077e665dfc
commit e2672cd2c2
323 changed files with 20670 additions and 42431 deletions

View File

@@ -9,6 +9,7 @@ import { X, Link2, Sparkles, Edit, Check } from 'lucide-react'
import { cn } from '@/lib/utils'
import { Note } from '@/lib/types'
import { useLanguage } from '@/lib/i18n/LanguageProvider'
import { useAiConsent } from '@/components/legal/ai-consent-provider'
interface FusionModalProps {
isOpen: boolean
@@ -31,6 +32,7 @@ export function FusionModal({
onConfirmFusion
}: FusionModalProps) {
const { t } = useLanguage()
const { requestAiConsent } = useAiConsent()
const [selectedNoteIds, setSelectedNoteIds] = useState<string[]>(notes.filter(n => n.id).map(n => n.id!))
const [customPrompt, setCustomPrompt] = useState('')
const [fusionPreview, setFusionPreview] = useState('')
@@ -52,8 +54,9 @@ export function FusionModal({
setFusionPreview('')
try {
// Call AI API to generate fusion
const consented = await requestAiConsent()
if (!consented) return
const res = await fetch('/api/ai/echo/fusion', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -81,7 +84,7 @@ export function FusionModal({
} finally {
setIsGenerating(false)
}
}, [selectedNoteIds, customPrompt])
}, [selectedNoteIds, customPrompt, requestAiConsent])
// Auto-generate fusion preview when modal opens with selected notes
useEffect(() => {