# Modus Echo — Bundle aus Transkript erweitern

Du erweiterst eine bereits vorbereitete Präsentation still und themenkonform anhand eines Transkripts der ersten Kunden-Minuten. Stefan ist beim Kunden und will einen Befehl absetzen, dann durch das Bundle blättern. Zero-Question-Durchlauf, harte Themen-Filter, Auto-Backup, knapper Diff-Report.

## Wann greift Modus Echo

- Slash-Command `/echo <pfad-zur-präsentation> <pfad-zum-transkript>`
- Natural-Language: Wort „Transkript" oder „Echo" + Datei-Hinweis (Pfad/Name) + Bezug auf bestehende Präsentation

**Beispiele aus Stefans Sprachgebrauch:**

- „Hier ist das Transkript, bitte berücksichtige das in der Präsentation, die ich heute mit Mustermann GmbH habe — Anpassung vornehmen."
- „Echo-Lauf für die MUST-1-Präsentation, Transkript liegt unter `<inbox>/transkript-2026-05-04.txt`."
- „Pack die Punkte aus dem Transkript in die Präsentation für den Termin morgen mit Sarah."

## Eingabe — Transkript-Formen

Echo akzeptiert nur fertige Text-Dateien (`.txt`, `.md`). Drei Formen werden erkannt:

**Form 1 — Mehrsprecher-Dialog**

```
Stefan: Wie sehen Sie die aktuelle Lage bei den Lieferanten?
Kunde: Wir haben zwei kritische Engpässe …
```

Behandlung: Sprecher-Markierungen erkennen, Beiträge aller Sprecher gleichwertig analysieren. Stefan-Statements im Dialog **nicht** automatisch als explizite Anweisung werten — Dialog ist Dialog.

**Form 2 — Einsprecher (Kunde)**

```
Wir haben in den letzten Wochen drei Themen entdeckt: …
```

Behandlung: Alles ist Kunden-Input, Themen extrahieren, gegen Whitelist matchen.

**Form 3 — Stefan-Solo, evtl. mit expliziten Anweisungen**

```
Wir haben über Lieferanten-Engpässe gesprochen. Der Kunde will außerdem
über die Migrations-Strategie reden. Bitte ergänze in Slide 3 einen Bullet
zu den drei kritischen Lieferanten-Themen, und füge nach Slide 5 ein
neues Beispiel-Slide ein zur Migrations-Strategie.
```

Behandlung: Heuristik trennt **explizite Anweisung** von **Gesprächs-Material**:

- Erste Person Singular + Imperativ + Slide-/Thema-Bezug → explizite Anweisung
- Beispiele: „bitte ergänze", „füg ein", „mach das Slide", „ich will dass auf Slide X …"
- Explizite Anweisungen haben Priorität: höhere Konfidenz angenommen, Whitelist-Override **außer** bei `locked`-Slides.
- Restliches Material wird als implizites Gesprächs-Material behandelt (Standard-Schwellen, Standard-Filter).

## Ablauf

### Schritt 1 — Pfad-Resolution

Aus dem User-Prompt die richtige Präsentation finden:

1. Glob über alle Präsentations-Pfade:
   - `02 Projekte/*/Termine/*/Praesentation/`
   - `02 Projekte/*/Praesentationen/*/`
   - `03 Bereiche/*/Termine/*/Praesentation/`
   - `03 Bereiche/*/Praesentationen/*/`
   - `04 Ressourcen/*/Praesentationen/*/`
2. Fuzzy-Match gegen Prompt-Tokens (Kunden-Name, Themen-Name, Wörter wie „Mustermann GmbH", „MUST-1").
3. Datums-Filter:
   - „heute" → `<YYYY-MM-DD>` von today
   - „morgen" → today+1
   - „letzte Woche" / „gestern" / „am 30.04." → entsprechend parsen
   - kein Datum genannt → Recency-Sortierung (jüngstes Bundle gewinnt)
4. Genau ein Treffer: nehmen.
5. Mehrere Treffer: einmalige Klärungs-Zeile mit Top-3 (legitime Ausnahme zum Zero-Question-Prinzip — sonst nicht lösbar).
6. Kein Treffer: harter Abbruch mit Liste der zuletzt geänderten Bundles.

### Schritt 2 — Pflicht-Reads

Wie in allen Modi: Branding, Designsystem-Einstieg, Tokens, Hauptkarte. Echo greift hier nichts an, was nicht durch das Designsystem gedeckt ist.

### Schritt 3 — Transkript laden

Datei lesen, UTF-8 erwartet. Bei UTF-16 oder Latin-1: einmal kurz zur Kenntnis nehmen, dann decoden. Bei beschädigtem Encoding: harter Abbruch mit Hinweis.

Form (1, 2, 3) bestimmen anhand Sprecher-Markierungen und Erste-Person-Konstruktionen.

### Schritt 4 — Original-Bundle einlesen

Slide-Files aus `_runtime/src/slides-*.jsx` plus `_runtime/src/app.jsx → TEMPLATES` parsen. Pro Slide auslesen:

- Slide-ID (`// id: …` oder Datei-Name als Fallback)
- Echo-Tag (`// echo: erweiterbar | ersetzbar | locked` oder Layout-Default)
- Echo-Anchor (`// echo-anchor: vor | nach`, optional)
- Slide-Layout (`cover`, `agenda`, `content`, …)
- Slide-Titel und Bullet-/Body-Text (für Themen-Match)

Wenn `_runtime/echo-config.json` existiert: Tags daraus überschreiben Kommentar-Tags.

### Schritt 5 — Themen-Extraktion und -Filterung

Aus Transkript-Material:

1. Themen extrahieren (Knot-Themen, kein Mikro-Splitter).
2. Themen-Filter anwenden (siehe `themen-filter.md`):
   - Privates raus (Familie, Wochenende, Hobbies ohne Geschäftsbezug)
   - Off-Topic raus (außerhalb der Präsentations-Story)
3. Pro übrig gebliebenem Thema: Konfidenz-Schätzung gegen das beste passende Slide.

### Schritt 6 — Edits planen

Pro Thema entscheiden:

- **In-Place-Erweiterung** in `erweiterbar`-Slot, wenn Konfidenz ≥ 0.6 und Slide thematisch passt.
- **Ersetzung** in `ersetzbar`-Slot, wenn Konfidenz ≥ 0.7 und Slide thematisch klar betroffen.
- **Insertion** eines neuen Slides, wenn Konfidenz ≥ 0.8, Thema in keinem Slot sinnvoll passt, aber zur Story gehört. Maximal **zwei** neue Slides pro Echo-Lauf (auch bei mehr passenden Themen — Stefan kann nicht mehr verarbeiten).
- **`locked`-Slots:** ignorieren. Auch bei expliziter Stefan-Anweisung. Sicherheits-Anker.
- **Explizite Stefan-Anweisungen** aus Form 3: Schwellen ignorieren (Stefan ist Boss), aber `locked` weiter respektieren.

Wenn keine Themen die Schwellen erreichen: **gar nichts ändern**. Erfolgs-Meldung mit „Keine Edits, Themen aus Transkript haben Schwelle nicht erreicht oder waren off-topic" plus Liste der gefilterten Themen für Stefans Kontrolle.

Detail zu Schwellen und Whitelist: [whitelist-und-konfidenz.md](whitelist-und-konfidenz.md). Detail zum Filter: [themen-filter.md](themen-filter.md).

### Schritt 7 — Backup und Edit ausführen

Backup vor jeder Änderung:

```
python "<SKILL_ROOT>/scripts/echo_helper.py" \
  --bundle "<Bundle-Pfad>" \
  --action backup
```

Backup landet in `<Bundle>/_echo-backups/echo-backup-<YYYY-MM-DD-HHMM>.zip`. Rolling, max. 5.

Dann: Slide-Edits vornehmen (JSX-Files editieren, neue Slides einfügen mit Slide-ID-Generierung aus Thema).

### Schritt 8 — Linting

```
python "<SKILL_ROOT>/scripts/update_lint.py" \
  --bundle "<Bundle-Pfad>"
```

Bei Echo-eigenen Verstößen: **Rollback aus Backup** und Echo-Lauf gilt als gescheitert. Im Output: konkrete Verstöße + „Echo-Lauf abgebrochen, Original wiederhergestellt".

### Schritt 9 — Build

```
cd "<Bundle-Pfad>/_runtime" && (build.cmd || build.sh)
```

Bei Build-Fehler: Rollback aus Backup, Lauf gescheitert.

### Schritt 10 — Diff-Report

```
python "<SKILL_ROOT>/scripts/echo_helper.py" \
  --bundle "<Bundle-Pfad>" \
  --action diff-report \
  --transkript "<Pfad>"
```

Erzeugt `<Bundle-Pfad>/echo-diff-<YYYY-MM-DD-HHMM>.md` und gibt den Inhalt im Skill-Output aus.

**Format:**

```
# Echo-Diff — 2026-05-04 14:23

Quelle: transkript-2026-05-04.txt (4.821 Zeichen, Form: Mehrsprecher-Dialog)
Bundle: <projekt-beratung>/Mustermann/Termine/2026-05-04 Lieferanten-Audit/Praesentation/

Geändert:
- Slide 3 (erweiterbar): Bullet "Engpass China-Ost-Route" ergänzt (Konfidenz 0.81)
- Slide 5 (erweiterbar): Beispiel-Bullet ersetzt durch konkretes Lieferanten-Trio aus Gespräch (Konfidenz 0.74)
- Slide 6 NEU eingefügt nach Slide 5 (Konfidenz 0.85): Migrations-Strategie

Unverändert (Echo-Tag locked oder kein passendes Material): 1, 2, 4, 7, 8

Backup: _echo-backups/echo-backup-2026-05-04-1423.zip
```

Optional zweite Sektion (nur bei unsicheren Verwerfungen mit Konfidenz 0.4–0.7):

```
Verworfen, evtl. relevant:
- "Marketing-Budget für Q3" (außerhalb der Präsentations-Story, Konfidenz 0.55)
```

## Was Echo bewusst nicht tut

- **Keine Audio-Aufnahme.** Stefan bringt fertiges Transkript mit.
- **Keine Frage stellen außer bei Pfad-Mehrdeutigkeit.** Zero-Question-Prinzip.
- **Kein `locked`-Slide anfassen.** Auch nicht bei expliziter Stefan-Anweisung.
- **Keine mehr als 2 neuen Slides.** Stefan kann beim Kunden nicht 5 neue Slides verarbeiten.
- **Keine Layout-Defaults überschreiben.** Echo arbeitet innerhalb des bestehenden Designsystems.
- **Kein PowerPoint-Bundle anfassen.** Echo läuft nur auf HTML-Bundles. PPTX-Update geht über Modus Update mit händischer PowerPoint-Bearbeitung.

## Fertig-Kriterium Modus Echo

- Bundle ist editiert, gebaut, startet weiter per Doppelklick
- Diff-Report im Skill-Output und als Datei neben dem Bundle
- Backup-ZIP in `_echo-backups/`
- Stefan blättert durch das Bundle und sieht die Änderungen
