# Story 3.2: Recherche Sémantique par Intention

Status: ready-for-dev

## Story

As a user,
I want to search for notes using natural language concepts,
So that I can find information even if I don't remember the exact words.

## Acceptance Criteria

1. **Given** a search query in the search bar.
2. **When** the search is executed.
3. **Then** the system generates an embedding for the query via the AI Provider.
4. **And** the system calculates the cosine similarity between the query embedding and all note embeddings in memory.
5. **And** notes with high similarity (e.g., > 0.7) are returned even without keyword matches.

## Tasks / Subtasks

- [ ] Implémentation de la fonction de Similarité Cosinus (AC: 4)
  - [ ] Créer une fonction utilitaire `cosineSimilarity(vecA, vecB)`
- [ ] Mise à jour de `searchNotes` dans `actions/notes.ts` (AC: 1, 2, 3, 4)
  - [ ] Générer l'embedding de la requête utilisateur
  - [ ] Récupérer toutes les notes avec leurs embeddings
  - [ ] Calculer le score sémantique pour chaque note
- [ ] Logique de Ranking (AC: 5)
  - [ ] Filtrer les résultats par un seuil de similarité
  - [ ] Trier par score décroissant
- [ ] Optimisation
  - [ ] Mettre en cache les embeddings des notes en mémoire pour éviter le parsing JSON répétitif

## Dev Notes

- **Algorithme :** La similarité cosinus est le produit scalaire divisé par le produit des normes.
- **Hybridité :** Cette story se concentre sur la partie sémantique. La story 3.3 s'occupera de la fusion propre avec la recherche textuelle (SQL LIKE).
- **Performance :** Le calcul de similarité pour 1000 notes prend environ 1ms en JS.

## Dev Agent Record

### Agent Model Used

### Debug Log References

### Completion Notes List

### File List
