# Plan: Système de Labels Robuste (IA vs Utilisateur) **Statut**: En pause - les modifications n'ont pas été finalisées --- ## Objectif Créer un système de labels robuste qui distingue les labels générés par IA des labels créés par l'utilisateur, avec: 1. **Distinction visuelle** - Tags IA vs User visuellement différents 2. **Nettoyage automatique** - Les labels sont supprimés quand toutes leurs notes sont supprimées 3. **Régénération manuelle** - L'utilisateur peut regenerate les labels IA manuellement via le panneau AI 4. **Pas de suggestion auto** - Le dialogue de suggestion n'apparaît plus automatiquement --- ## Scénarios de Cycle de Vie des Labels ### Scénario 1: Création de note avec suggestions de labels par note (IA2 - Contextual Auto-Tag) 1. Utilisateur crée une note 2. En arrière-plan, le service analyse le contenu 3. SI le carnet a des labels existants → suggère les labels existants 4. SI aucun label ne match → suggère de NOUVEAUX labels 5. Toast notification pour accepter/rejeter ### Scénario 2: Création de labels IA pour tout le carnet (IA4) 1. Utilisateur clique sur "Régénérer les labels IA" dans le panneau AI 2. Système analyse TOUTES les notes du carnet 3. Propose de nouveaux labels avec confiance 4. Labels créés avec `type: "ai"` ### Scénario 3: Suppression d'une note (soft delete → trash) - Labels RESTENT sur la note - Restaurer la note → labels reviennent ### Scénario 4: Suppression permanente - `syncLabels` doit nettoyer les labels orphans ### Scénario 5: Suppression de la DERNIÈRE note avec un label - Label supprimé automatiquement --- ## Fichiers à Modifier (TODO) ### 1. `prisma/schema.prisma` ✅ (Modifié) ```prisma model Label { id String @id @default(cuid()) name String color String @default("gray") type String @default("user") // "ai" ou "user" ← AJOUTÉ notebookId String? userId String? // ... relations } ``` ### 2. `app/actions/notes.ts` ✅ (Modifié) - Bug fix `syncLabels`: nettoyage des orphans quand `noteLabels.length === 0` - `permanentDeleteNote` et `emptyTrash` passent maintenant `notebookId` à `syncLabels` ### 3. `lib/types.ts` ✅ (Modifié) ```typescript export interface Label { id: string name: string color: LabelColorName type?: 'ai' | 'user' // ← AJOUTÉ // ... } ``` ### 4. `lib/ai/services/auto-label-creation.service.ts` ✅ (Modifié) - `createLabels()` assigne `type: 'ai'` aux labels créés - L'upsert met à jour le type si le label existait déjà ### 5. `components/label-badge.tsx` ✅ (Modifié) - Tags AI: fond bleu Blueprint, icône Sparkles, indicateur pulsé - Tags User: style normal selon couleur ### 6. `components/home-client.tsx` ⚠️ (Modifié -却被还原) - Le trigger automatique `useAutoLabelSuggestion` a été décommenté - Le `AutoLabelSuggestionDialog` a été retiré du rendu ### 7. `components/contextual-ai-chat.tsx` ⚠️ (Modifié) - Ajout du state pour `regenerateLabelsLoading`, `autoLabelOpen`, `autoLabelNotebookId` - Ajout de la fonction `handleRegenerateLabels` - Ajout de la section "Organization" dans l'onglet Actions - Import de `AutoLabelSuggestionDialog` - Ajout du dialogue `AutoLabelSuggestionDialog` dans le rendu --- ## Problèmes Rencontrés ### Erreurs TypeScript (pré-existantes, non bloquantes pour nos changes) ``` app/(main)/settings/general/page.tsx:14:33 - error TS2322 app/api/chat/route.ts:276:21 - error TS2339 (chatModel) app/api/chat/route.ts:280:5 - error TS2353 (maxSteps) app/api/chat/route.ts:284:20 - error TS2339 (message) app/api/chat/route.ts:293:17 - error TS2551 (toDataStreamResponse) components/note-inline-editor.tsx:117:37 - error TS2339 (autoSave) ``` Ces erreurs sont dans des fichiers NON modifiés par cette tâche. ### Build bloque à cause des erreurs TS Le build Next.js échoue à cause des erreurs pré-existantes. --- ## TODO List - [x] Ajouter champ `type` à Label dans schema.prisma - [x] Fixer bug syncLabels dans notes.ts - [x] Ajouter `type` à l'interface Label dans lib/types.ts - [x] Mettre à jour AutoLabelCreationService avec type: 'ai' - [x] Créer composant TagBadge visuel (IA vs User) - [x] Intégrer filtrage par tags AND dans home-client.tsx (déjà existait) - [x] Ajouter option Régénérer labels dans AI panel - [x] Supprimer trigger automatique useAutoLabelSuggestion --- ## Commandes Utiles ```bash # Push schema vers DB (sans migration) cd memento-note && npx prisma db push # Regenerer Prisma client npx prisma generate # Lancer dev server npm run dev # Build (si les erreurs TS pré-existantes sont corrigées) npm run build ``` --- ## Erreurs à Corriger (Pré-existantes) ### 1. `app/(main)/settings/general/page.tsx` - `autoSave` manquant Le type de settings retourné par `getAISettings()` ne contient pas `autoSave` ### 2. `app/api/chat/route.ts` - API AI SDK incompatible Propriétés comme `chatModel`, `maxSteps`, `message`, `toDataStreamResponse` n'existent pas ### 3. `components/note-inline-editor.tsx` - `autoSave` manquant Même problème que settings general --- ## Solution Alternative Si le build ne passe pas, on peut lancer le dev server qui ignore les erreurs TypeScript: ```bash npm run dev ``` Le site fonctionne en dev même avec des erreurs TS (juste un warning).