5.2 KiB
5.2 KiB
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:
- Distinction visuelle - Tags IA vs User visuellement différents
- Nettoyage automatique - Les labels sont supprimés quand toutes leurs notes sont supprimées
- Régénération manuelle - L'utilisateur peut regenerate les labels IA manuellement via le panneau AI
- 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)
- Utilisateur crée une note
- En arrière-plan, le service analyse le contenu
- SI le carnet a des labels existants → suggère les labels existants
- SI aucun label ne match → suggère de NOUVEAUX labels
- Toast notification pour accepter/rejeter
Scénario 2: Création de labels IA pour tout le carnet (IA4)
- Utilisateur clique sur "Régénérer les labels IA" dans le panneau AI
- Système analyse TOUTES les notes du carnet
- Propose de nouveaux labels avec confiance
- 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
syncLabelsdoit 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é)
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 quandnoteLabels.length === 0 permanentDeleteNoteetemptyTrashpassent maintenantnotebookIdàsyncLabels
3. lib/types.ts ✅ (Modifié)
export interface Label {
id: string
name: string
color: LabelColorName
type?: 'ai' | 'user' // ← AJOUTÉ
// ...
}
4. lib/ai/services/auto-label-creation.service.ts ✅ (Modifié)
createLabels()assignetype: '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
useAutoLabelSuggestiona été décommenté - Le
AutoLabelSuggestionDialoga é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
AutoLabelSuggestionDialogdans 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
- Ajouter champ
typeà Label dans schema.prisma - Fixer bug syncLabels dans notes.ts
- Ajouter
typeà l'interface Label dans lib/types.ts - Mettre à jour AutoLabelCreationService avec type: 'ai'
- Créer composant TagBadge visuel (IA vs User)
- Intégrer filtrage par tags AND dans home-client.tsx (déjà existait)
- Ajouter option Régénérer labels dans AI panel
- Supprimer trigger automatique useAutoLabelSuggestion
Commandes Utiles
# 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:
npm run dev
Le site fonctionne en dev même avec des erreurs TS (juste un warning).