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>
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
---
|
||||
description: Analizează conversația și propune lecții de salvat
|
||||
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
|
||||
|
||||
@@ -15,6 +16,27 @@ Citește `.claude/rules/claude-learn-domains.md` pentru lista domeniilor disponi
|
||||
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ă:
|
||||
@@ -22,6 +44,7 @@ Identifică:
|
||||
- **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
|
||||
|
||||
@@ -85,9 +108,105 @@ Accept? [y/edit/+more]
|
||||
- Adaugă în `.claude/rules/claude-learn-domains.md`
|
||||
- Creează `.claude/rules/claude-learn-{domain}.md` cu frontmatter
|
||||
|
||||
### Pas 4: Generează Propuneri de Lecții
|
||||
### Pas 3.5: Detectare Semnal de Salvare
|
||||
|
||||
Ce să cauți:
|
||||
**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
|
||||
@@ -101,46 +220,64 @@ Ce să cauți:
|
||||
- Comportamente neașteptate
|
||||
- Anti-patterns descoperite
|
||||
|
||||
Format pentru fiecare insight:
|
||||
Format extins pentru fiecare insight:
|
||||
```
|
||||
**[PATTERN/GOTCHA] Titlu Scurt**
|
||||
**[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
|
||||
### Pas 5: Prezintă Utilizatorului (Extins)
|
||||
|
||||
```
|
||||
📚 Am identificat {N} lecții din această conversație:
|
||||
|
||||
1. [PATTERN] {Titlu}
|
||||
⭐ RECOMANDATE (semnal puternic):
|
||||
|
||||
1. [PATTERN] {Titlu} (explicit: "întotdeauna fă X")
|
||||
{Descriere scurtă}
|
||||
|
||||
2. [GOTCHA] {Titlu}
|
||||
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, 3] - Selectează specific
|
||||
- [all] - Toate
|
||||
- [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
|
||||
### 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:
|
||||
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}`):
|
||||
@@ -153,10 +290,12 @@ Format Pattern:
|
||||
---
|
||||
```
|
||||
|
||||
Format Gotcha:
|
||||
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}
|
||||
|
||||
@@ -171,6 +310,7 @@ 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ă
|
||||
|
||||
@@ -179,7 +319,9 @@ La sfârșitul fișierului domeniului, actualizează:
|
||||
- {N} patterns adăugate
|
||||
- {M} gotchas adăugate
|
||||
|
||||
Statistici {domain}: {X} patterns, {Y} gotchas total
|
||||
📈 Entries reinforced: {X}
|
||||
|
||||
Statistici {domain}: {P} patterns, {G} gotchas, {R} reinforcements total
|
||||
```
|
||||
|
||||
---
|
||||
@@ -195,6 +337,7 @@ Dacă argumentul este:
|
||||
|
||||
## 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)
|
||||
@@ -203,3 +346,12 @@ 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.
|
||||
|
||||
Reference in New Issue
Block a user