Files
claude-plugins/plugins/learn/commands/analyze.md
Claude Agent 7aafcd5562 feat: v2.1.0 - Selective saving, cleanup command, and SessionEnd hook
New features:
- /learn:analyze now uses signal detection to save only valuable lessons
  - Explicit commands: "ține minte", "remember", "memorează"
  - Stated preferences: "întotdeauna", "always", "never"
  - Repeated corrections (2+ times)
  - Historical references: "cum am discutat", "as we discussed"
- New /learn:cleanup command for memory hygiene
  - Scoring system for entry quality
  - Conservative mode with confirmation
  - Upgrade option to rewrite entries
- SessionEnd hook shows reminder on /exit, /clear, Ctrl+D
- Metadata tracking: source, confidence, reinforced, trigger

Changes:
- analyze.md: Added Pas 3.5 for signal detection
- cleanup.md: New command for reviewing/deleting entries
- hooks.json: Changed from Stop to SessionEnd
- scripts/session-end-reminder.sh: New reminder script
- Templates updated with metadata fields
- Documentation updated for v2.1.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 23:12:31 +00:00

358 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: Analizează conversația și propune lecții de salvat (cu filtrare selectivă)
argument-hint: [auto|patterns|gotchas] - Detectare automată sau categorie specifică
---
# Analiză Conversație pentru Lecții
Examinează conversația curentă și identifică insights pentru documentație.
**Salvează doar lecții cu semnal clar** - nu one-off fixes.
## Workflow
### Pas 0: Încarcă Configurația Domeniilor
Citește `.claude/rules/claude-learn-domains.md` pentru lista domeniilor disponibile.
Dacă fișierul nu există, creează-l din template cu domeniile implicite:
- backend, frontend, database, testing, deployment, global
### Pas 0.5: Verifică Reinforcement pentru Entries Existente
Înainte de a căuta lecții noi, verifică dacă conversația validează entries existente:
1. Încarcă toate entries din domeniile relevante (bazat pe fișierele din conversație)
2. Pentru fiecare entry, verifică dacă:
- Problema descrisă a fost întâlnită ȘI soluția a funcționat
- Pattern-ul a fost aplicat cu succes
- Utilizatorul a menționat/confirmat un gotcha salvat
3. Dacă găsește match-uri, actualizează:
- Incrementează `Reinforced` count
- Actualizează `Last Reinforced` la data curentă
4. Raportează la final (dacă există):
```
📈 Entries validate în această sesiune:
- [backend] "API Error Handling" - reinforced (3→4)
- [frontend] "Vue Watch Pattern" - reinforced (1→2)
```
### Pas 1: Scanează Conversația
Identifică:
- **Fișiere accesate**: toate path-urile din Read, Edit, Write, Glob, Grep
- **Tool calls cu erori** → potențiale gotchas
- **Soluții aplicate** → potențiale patterns
- **Decizii tehnice** → posibile reguli noi
- **Mesaje utilizator** → comenzi explicite, corecții, preferințe
### Pas 2: Detectează Domeniul
#### 2.1 Extrage Path-uri
Colectează toate path-urile fișierelor din conversație:
```
src/api/users.ts
src/api/middleware/auth.ts
tests/api/users.test.ts
```
#### 2.2 Match-uiește cu Domeniile
Pentru fiecare path, verifică contra patterns din config:
- `src/api/**/*.ts` → backend
- `tests/**/*.test.ts` → testing
#### 2.3 Determină Domeniul Predominant
Alege domeniul cu cele mai multe match-uri.
Dacă egalitate → preferă în ordine: backend > frontend > database > testing > deployment > global
#### 2.4 Prezintă Utilizatorului
```
📁 Domeniu detectat: backend (bazat pe src/api/users.ts, src/api/middleware/auth.ts)
Este corect? [y/n/altul]
```
Răspunsuri posibile:
- **y** → continuă cu domeniul detectat
- **n** → listează toate domeniile disponibile pentru selecție
- **altul** sau **nume-nou** → creează domeniu nou (vezi Pas 3)
### Pas 3: Creare Domeniu Nou (dacă e cazul)
Când utilizatorul introduce un nume de domeniu care nu există:
#### 3.1 Propune Patterns Automat
Bazat pe path-urile din conversație, generalizează:
```
scripts/deploy.sh → scripts/**/*.sh
ansible/roles/web/tasks/main.yml → ansible/**/*.yml
```
Algoritm:
1. Extrage primele 2 nivele de directoare: `scripts/`, `ansible/`
2. Extrage extensia: `.sh`, `.yml`
3. Generează glob: `{dir}**/*{ext}`
#### 3.2 Prezintă pentru Confirmare
```
📁 Domeniu nou: "devops"
Bazat pe fișierele din conversație, propun aceste patterns:
scripts/**/*.sh
ansible/**/*.yml
Accept? [y/edit/+more]
```
#### 3.3 Salvează Domeniul
- Adaugă în `.claude/rules/claude-learn-domains.md`
- Creează `.claude/rules/claude-learn-{domain}.md` cu frontmatter
### Pas 3.5: Detectare Semnal de Salvare
**CRITIC**: Înainte de a propune lecții, verifică dacă există SEMNAL CLAR că lecția merită salvată.
#### Categorii de Semnal (în ordine de prioritate)
##### A. Comandă Explicită (Source: explicit, Confidence: high) - SCOR: +100
Caută în mesajele utilizatorului fraze de tip "ține minte":
**Română:**
- "ține minte", "memorează", "reține", "să nu uiți", "notează-ți"
- "salvează asta", "adaugă în memorie"
**Engleză:**
- "remember", "remember this", "don't forget", "keep in mind"
- "note this", "save this"
**Acțiune:** Salvează IMEDIAT cu source=explicit, confidence=high
##### B. Preferință Explicită (Source: explicit, Confidence: high) - SCOR: +80
Caută pattern-uri de tip regulă permanentă:
**Română:**
- "întotdeauna fă X", "niciodată nu Y", "mereu să fie Z"
- "de acum înainte", "regula e că", "standard e să"
**Engleză:**
- "always do X", "never do Y", "from now on"
- "the rule is", "standard is to", "we always"
##### C. Corecție Repetată (Source: repeated, Confidence: high) - SCOR: +70
Detectează când utilizatorul corectează ACEEAȘI problemă de mai multe ori:
**Română:**
- "nu, fă-o așa", "greșit, e X nu Y", "am mai spus"
- "din nou", "încă o dată", "iar ai făcut", "te-am corectat"
**Engleză:**
- "no, do it like this", "wrong, it's X not Y", "I said before"
- "again", "once more", "I already told you"
**Condiție:** Găsește 2+ corecții pe același subiect → salvează cu source=repeated
##### D. Referință Istorică (Source: inferred, Confidence: medium) - SCOR: +50
Când utilizatorul referă discuții anterioare:
**Română:**
- "cum am discutat", "așa cum am făcut data trecută", "nu uita că"
- "știi deja", "am stabilit că", "după cum știi"
**Engleză:**
- "as we discussed", "like we did before", "don't forget that"
- "you know", "we agreed", "as you know"
**Acțiune:** Salvează CU VERIFICARE - întreabă utilizatorul dacă vrea să salveze
##### E. Pattern Dedus din Erori (Source: inferred, Confidence: medium/low) - SCOR: +30
Detectare din erori și soluții (comportamentul actual).
**Criteriu de Incluziune** (CE să salveze):
- Eroare care a apărut de mai multe ori în conversație
- Soluție care rezolvă o clasă de probleme (nu un singur fișier)
- Configurație care a necesitat research/documentație
- Workaround pentru bug cunoscut
**Criteriu de Excludere** (CE să NU salveze) - SCOR: 0:
- Fix pentru o greșeală de tipar/typo
- Eroare de path sau import greșit (one-time fix)
- Bug specific unui singur fișier fără pattern general
- Ajustări de valori hardcodate
- Syntax errors simple
#### Calculare Scor de Semnal
| Semnal | Puncte |
|--------|--------|
| Comandă explicită ("ține minte") | +100 (auto-salvare) |
| Preferință explicită ("întotdeauna") | +80 |
| Corecție repetată (2+ ori) | +70 |
| Referință istorică | +50 |
| Eroare rezolvată cu pattern general | +30 |
| Configurație descoperită | +30 |
| Eroare one-time | +5 |
| Typo/fix banal | 0 |
**Praguri:**
- **< 30 puncte**: NU se propune (filtrat automat)
- **30-50 puncte**: Se propune cu "Low confidence"
- **50-80 puncte**: Se propune normal
- **80+ puncte**: Marcat ca "Recommended"
### Pas 4: Generează Propuneri de Lecții (cu Metadata)
Pentru fiecare insight identificat cu scor >= 30, generează:
#### Patterns (Soluții Repetabile)
- Abordări care au funcționat bine
- Configurații utile descoperite
- Tehnici noi aplicate cu succes
- Workflow-uri eficiente
#### Gotchas (Capcane de Evitat)
- Erori întâlnite și cum s-au rezolvat
- Confuzii cauzate de documentație
- Comportamente neașteptate
- Anti-patterns descoperite
Format extins pentru fiecare insight:
```
**[PATTERN/GOTCHA] Titlu Scurt** ⭐ Recommended | ⚠️ Low confidence
- **Categorie**: patterns | gotchas
- **Source**: explicit | inferred | repeated
- **Confidence**: high | medium | low
- **Scor**: {punctaj}
- **Semnal detectat**: "{fraza/contextul care a declanșat}"
- **Descriere**: Ce s-a învățat
- **Context**: În ce situație e relevant
- **Exemplu**: Cod sau pași concreți
- **Tags**: [tag1, tag2, tag3]
```
### Pas 5: Prezintă Utilizatorului (Extins)
```
📚 Am identificat {N} lecții din această conversație:
⭐ RECOMANDATE (semnal puternic):
1. [PATTERN] {Titlu} (explicit: "întotdeauna fă X")
{Descriere scurtă}
2. [GOTCHA] {Titlu} (repeated: corectat de 3 ori)
{Descriere scurtă}
⚠️ POSIBILE (semnal slab):
3. [PATTERN] {Titlu} (inferred: eroare rezolvată)
{Descriere scurtă}
❌ EXCLUSE (one-time fixes, nu se salvează):
- Fix typo în auth.ts
- Import path corectat în utils.ts
📁 Domeniu: {domain}
Care dintre acestea vrei să le salvez?
- [1, 2] - Selectează specific (implicit: doar recomandate)
- [1, 2, 3] - Include și cele cu semnal slab
- [all] - Toate (inclusiv cele slabe)
- [none] - Niciuna
- [edit N] - Modifică propunerea N
```
### Pas 6: Salvează în Fișierul Domeniului (cu Metadata)
Salvează în `.claude/rules/claude-learn-{domain}.md`
Dacă fișierul nu există, creează-l din template cu frontmatter corect.
Format Pattern (extins):
```markdown
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Description**: {descriere}
**Example** (`{file}:{lines}`):
\```{language}
{code}
\```
**Tags**: {tags}
---
```
Format Gotcha (extins):
```markdown
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Problem**: {problema}
**Solution**: {soluția}
**Tags**: {tags}
---
```
### Pas 7: Actualizează Statistici
La sfârșitul fișierului domeniului, actualizează:
- Incrementează Total Patterns/Gotchas
- Actualizează Last Session la data curentă
- Incrementează Sessions Recorded
- Actualizează Total Reinforcements (dacă s-au făcut în Pas 0.5)
### Pas 8: Confirmă
```
✅ Salvat în claude-learn-{domain}.md:
- {N} patterns adăugate
- {M} gotchas adăugate
📈 Entries reinforced: {X}
Statistici {domain}: {P} patterns, {G} gotchas, {R} reinforcements total
```
---
## Argument: $ARGUMENTS
Dacă argumentul este:
- `auto` sau gol → detectează toate categoriile
- `patterns` → focus doar pe patterns
- `gotchas` → focus doar pe gotchas
---
## Compatibilitate Înapoi
### Format Vechi de Memorie
Dacă există fișierul vechi `claude-learn-memory.md` fără frontmatter:
```
⚠️ Detectat format vechi de memorie (claude-learn-memory.md)
Vrei să migrez memoria existentă către noul sistem cu domenii? [y/n]
- y → rulează /learn:import pe fișierul vechi
- n → continuă fără migrare
```
### Entries Fără Metadata
Entries vechi fără câmpurile noi (Source, Confidence, Reinforced, Trigger) sunt tratate ca:
- Source: inferred
- Confidence: medium
- Reinforced: 0
- Trigger: ""
La prima editare sau reinforcement, metadata va fi adăugată automat.