Files
Momento/LABELS_SYSTEM_PLAN.md
Antigravity 280852914e
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
cleanup: remove unused components to trigger deployment
2026-05-10 13:25:06 +00:00

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:

  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é)

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é)

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

  • 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).