docs(agenten): Fallakte Livia und Agenten-Briefing sichern
`LIVIA_PROFIL_UND_PROMPT.md` hält Livia als Exposé Master fest, wie sie vor Runde 8 war: Personalblatt, Aufgabenkatalog, Kanäle und Systeme, das Exposé-Dossier mit elf Bereichen und neun Pflichtfeldern, die `missingFacts`-Regel der Textmaschine — dazu ein System-Prompt, mit dem sich diese Fassung ausserhalb des Repositories rekonstruieren lässt. `archive/livia/` ergänzt die Beschreibung um die Wiederherstellung: die 23 Dateien der Exposé-Funktion als wörtliche Kopie im Original-Pfadlayout sowie ein Manifest jeder Stelle, an der Livia in geteilten Dateien verdrahtet war. Beides ist mit Runde 8 nicht überholt, sondern der Referenzstand: die Exposé-Funktion wurde nicht entfernt, sondern nachgeordnet. Das Manifest beschreibt allerdings den Rückbau eines vollständigen Entfernens und damit ein Szenario, das so nicht eingetreten ist. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
ba8dc39483
commit
2037e5a463
33 files changed
+4431
No files matched your search
@@ -0,0 +1,302 @@
|
||||
# Livia — Wiederherstellungspaket
|
||||
|
||||
> **Zweck:** Livia («Exposé Master», PO-ZD-21) und ihre Funktionalitäten werden aus der
|
||||
> Anwendung entfernt. Dieses Verzeichnis enthält alles, was für einen vollständigen
|
||||
> Wiedereinbau nötig ist — die Originaldateien im Original-Pfadlayout und ein Verzeichnis
|
||||
> sämtlicher Stellen, an denen Livia in gemeinsam genutzten Dateien verdrahtet war.
|
||||
>
|
||||
> **Angelegt am 21.08.2026, Stand Commit `5527448`** (2026-08-18, «fix(startseite): Porträts
|
||||
> scharf statt weich, besonders die hinteren»), Branch `agents6`.
|
||||
>
|
||||
> Fachliche Beschreibung und System-Prompt liegen separat in
|
||||
> [`../../LIVIA_PROFIL_UND_PROMPT.md`](../../LIVIA_PROFIL_UND_PROMPT.md).
|
||||
|
||||
---
|
||||
|
||||
## 0. Vor dem Rückbau: Git-Marke setzen
|
||||
|
||||
Dieses Paket ist die **zweite** Absicherung. Die erste und verlässlichste ist die
|
||||
Versionsgeschichte. Deshalb vor dem Entfernen:
|
||||
|
||||
```bash
|
||||
git tag -a livia-vor-rueckbau -m "Letzter Stand mit vollständiger Livia-Funktionalität"
|
||||
git push origin livia-vor-rueckbau
|
||||
```
|
||||
|
||||
Danach ist ein vollständiger Wiedereinbau jederzeit auch so möglich:
|
||||
|
||||
```bash
|
||||
# Einzelne Datei zurückholen
|
||||
git checkout livia-vor-rueckbau -- src/components/expose/
|
||||
|
||||
# Oder den kompletten Rückbau-Commit umkehren
|
||||
git revert <commit-des-rueckbaus>
|
||||
```
|
||||
|
||||
Das Archiv hier ist für den Fall gedacht, dass die Historie nicht zur Verfügung steht —
|
||||
etwa weil in einem anderen Repository, einem neuen Projekt oder aus einem Export heraus
|
||||
gearbeitet wird.
|
||||
|
||||
---
|
||||
|
||||
## 1. Teil A — Dateien, die ganz zu Livia gehören
|
||||
|
||||
Diese 23 Dateien haben ausserhalb von Livia keinen Zweck. Beim Rückbau werden sie gelöscht;
|
||||
beim Wiedereinbau werden sie aus `archive/livia/src/…` an dieselbe Stelle zurückkopiert.
|
||||
|
||||
| Datei | Rolle |
|
||||
|---|---|
|
||||
| `src/pages/supply/MyListings.tsx` | Livias Arbeitsplatz (Route `/supply/my-listings`) |
|
||||
| `src/components/expose/ExposeWizard.tsx` | Drei-Schritt-Assistent Hochladen → Exposé → Export |
|
||||
| `src/components/expose/ExposeFieldGroup.tsx` | Feldgruppe eines Dossier-Bereichs |
|
||||
| `src/components/expose/ExposeMediaManager.tsx` | Bild- und Dokumentenkuration |
|
||||
| `src/components/expose/LeadTable.tsx` | Leadliste aktiv / archiviert |
|
||||
| `src/components/expose/LeadWorkspace.tsx` | Arbeitsbereich unter dem geöffneten Lead |
|
||||
| `src/components/expose/index.ts` | Barrel |
|
||||
| `src/domain/expose.ts` | `ExposeDraft`, `ExposeImage`, `ExposeDocument`, `ExposeValues` |
|
||||
| `src/domain/exposeLead.ts` | `ExposeLead`, `ExposeLeadStatus` |
|
||||
| `src/provider/IExposeProvider.ts` | Provider-Schnittstelle Entwürfe |
|
||||
| `src/provider/MockupExposeProvider.ts` | Mock-Implementierung Entwürfe |
|
||||
| `src/provider/IExposeLeadProvider.ts` | Provider-Schnittstelle Leads |
|
||||
| `src/provider/MockupExposeLeadProvider.ts` | Mock-Implementierung Leads |
|
||||
| `src/services/exposeService.ts` | Vorbelegung, Bildimport, Speichern, Erstellen |
|
||||
| `src/services/exposeLeadService.ts` | Leads lesen, anlegen, archivieren |
|
||||
| `src/services/exposeExport.ts` | Vorschau (HTML), PDF (Druckdialog), Word (`.doc`) |
|
||||
| `src/services/ai/mock/exposeTextBuilder.ts` | **Deterministischer Textbaustein** (Kernstück) |
|
||||
| `src/hooks/useExpose.ts` | React-Query-Hooks für Entwürfe |
|
||||
| `src/hooks/useExposeLeads.ts` | React-Query-Hooks für Leads |
|
||||
| `src/lib/exposeFields.ts` | **Die 11 Bereiche und 9 Pflichtfelder** |
|
||||
| `src/mock-data/exposeLeads.ts` | Seed-Daten Leads |
|
||||
| `src/mock-data/agents/livia.ts` | Personaldossier |
|
||||
| `src/assets/team/livia.jpg` | Porträt |
|
||||
|
||||
Es gibt **keine** Barrel-Exporte in `src/domain/index.ts` oder `src/hooks/index.ts`, die
|
||||
angepasst werden müssten — geprüft. Der einzige Barrel ist `src/components/expose/index.ts`,
|
||||
und der verschwindet mit dem Ordner.
|
||||
|
||||
**Wiedereinbau Teil A:**
|
||||
```bash
|
||||
cp -r archive/livia/src/. src/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Teil B — Gemeinsam genutzte Dateien mit chirurgischen Eingriffen
|
||||
|
||||
Diese 16 Dateien bleiben bestehen; aus ihnen wird Livia herausgeschnitten. **Das ist der Teil,
|
||||
der bei einem Wiedereinbau ohne Notizen Arbeit macht** — deshalb steht hier jede Stelle einzeln.
|
||||
Die Zeilennummern beziehen sich auf Commit `5527448` und verschieben sich nach dem Rückbau.
|
||||
|
||||
### 2.1 Routing
|
||||
|
||||
**`src/App.tsx`** — zwei Zeilen (31 und 74):
|
||||
```tsx
|
||||
const MyListings = lazy(() => import('./pages/supply/MyListings'))
|
||||
```
|
||||
```tsx
|
||||
<Route path="/supply/my-listings" element={<MyListings />} />
|
||||
```
|
||||
|
||||
### 2.2 Zentrale Register — hier hängt am meisten dran
|
||||
|
||||
**`src/lib/agentWorkspaces.ts`** — eine einzige Zeile in `AGENT_WORKSPACES` (Zeile 28):
|
||||
```ts
|
||||
{ id: 'livia', name: 'Livia', role: 'Exposé Master', path: ROUTES.SUPPLY.AGENT_LIVIA },
|
||||
```
|
||||
> **Wichtig:** Diese Liste ist die zentrale Quelle für Sidebar (`appShellConfig.ts`),
|
||||
> globales Navigationsmenü (`GlobalNavMenu.tsx`), Willkommensdialog (`WelcomeDialog.tsx`) und
|
||||
> die Sitzplätze im 3D-Meetingraum der Startseite (`meetingRoomSeats.ts`). Ein Eintrag hier
|
||||
> entfernt Livia an allen vier Stellen zugleich — und bringt sie ebenso überall zurück.
|
||||
> Nach dem Rückbau ist das Team **vier** statt fünf Personen; die Sitzordnung im Meetingraum
|
||||
> ändert sich dadurch sichtbar.
|
||||
|
||||
**`src/mock-data/teamAgents.ts`** — drei Stellen:
|
||||
```ts
|
||||
import { liviaAgent } from './agents/livia' // Zeile 16
|
||||
```
|
||||
```ts
|
||||
liviaAgent, // in mockTeamAgents, Position 3
|
||||
```
|
||||
```ts
|
||||
LIVIA: 'livia', // in AGENT_IDS
|
||||
```
|
||||
|
||||
**`src/components/team/agentPhotos.ts`** — zwei Zeilen (21 und 62):
|
||||
```ts
|
||||
import livia from '../../assets/team/livia.jpg'
|
||||
```
|
||||
```ts
|
||||
livia,
|
||||
```
|
||||
|
||||
**`src/lib/constants.ts`** — Route und Fristwert:
|
||||
```ts
|
||||
AGENT_LIVIA: '/supply/my-listings', // Zeile 102
|
||||
export const STALE_EXPOSE_LEADS = 30 * 1000 // aggressive — Weiterleitungen sollen sofort erscheinen // Zeile 62
|
||||
```
|
||||
sowie der ganze Block «Livia — Leads und Exposé» (Zeilen 319–356):
|
||||
`EXPOSE_LEAD_TABS`, `ExposeLeadTab`, `EXPOSE_LEAD_TAB_LABELS`, `EXPOSE_STEPS`,
|
||||
`EXPOSE_IMAGE_CATEGORY_LABELS`, `EXPOSE_DOCUMENT_TYPE_LABELS`, `EXPOSE_TONALITY_LABELS`.
|
||||
Der Block liegt wörtlich in [`fragmente/constants_livia.ts.txt`](./fragmente/constants_livia.ts.txt).
|
||||
|
||||
### 2.3 KI-Schicht
|
||||
|
||||
Wörtlich in [`fragmente/aiService_livia.ts.txt`](./fragmente/aiService_livia.ts.txt).
|
||||
|
||||
| Datei | Was entfällt |
|
||||
|---|---|
|
||||
| `src/services/ai/IAIService.ts` | Block «Exposé texts (Livia)»: `ExposeTextSection`, `ExposeTonality`, `ExposeTextInput`, `ExposeTextResult` (Z. 200–232) und die Interface-Methode `generateExposeText` (Z. 281) |
|
||||
| `src/services/ai/mock/MockAIService.ts` | Importe `ExposeTextInput`/`ExposeTextResult` (Z. 17–18), Import `buildExposeText` (Z. 25), Implementierung `generateExposeText` (Z. 305–309) |
|
||||
| `src/services/ai/backend/BackendAIService.ts` | Importe (Z. 62–63) und die Delegation `generateExposeText` an den Mock (Z. 687–689) |
|
||||
|
||||
> Achtung beim Wiedereinbau: `generateExposeText` steht im **Interface** `IAIService`. Fehlt
|
||||
> die Methode in einer der beiden Implementierungen, bricht der Typecheck — beide zusammen
|
||||
> zurückbauen.
|
||||
|
||||
### 2.4 Auslastungsanzeige der Agenten
|
||||
|
||||
**`src/services/agentWorkloadService.ts`**:
|
||||
- `expose: 5` in `URGENT_FROM` (Z. 36)
|
||||
- Importe `ExposeLeadStatus` / `ExposeLead` (Z. 3–4) und das Feld `exposeLeads` in der
|
||||
Eingabe (Z. 51)
|
||||
- der ganze Block «Livia: weitergeleitete Leads» (Z. 117–128), inklusive der Sprachfassungen
|
||||
«Kein Exposé offen. Leite mir einen Lead weiter, dann lege ich los.» und
|
||||
«{n} Leads warten auf ein Exposé von mir.»
|
||||
|
||||
**`src/hooks/useAgentWorkload.ts`**: Import `useExposeLeads`, die Zeile
|
||||
`const { data: exposeLeads = [], isLoading: exposeLoading } = useExposeLeads()`, das Feld in
|
||||
`computeAgentWorkload({ … })`, die Abhängigkeitsliste und `exposeLoading` im `isLoading`.
|
||||
|
||||
Beides wörtlich in [`fragmente/workload_livia.ts.txt`](./fragmente/workload_livia.ts.txt).
|
||||
|
||||
### 2.5 Die Agentenkette Nora → Livia → Bruno
|
||||
|
||||
Das ist inhaltlich der heikelste Teil — hier verschwindet nicht nur Livia, sondern der
|
||||
sichtbare Beweis, dass die Agenten einander zuarbeiten.
|
||||
|
||||
**`src/components/market-leads/LeadDetail.tsx`** (Noras Seite):
|
||||
- Import `useCreateExposeLead` (Z. 5), `const forwardLead = useCreateExposeLead()` (Z. 42)
|
||||
- die Funktion `handleForward()` (Z. 62–77)
|
||||
- der Knopf **«An Livia zur Exposé-Erstellung weiterleiten»** (Z. 194–204) samt
|
||||
Mehrfachauswahl der Objekte und der Erfolgsmeldung
|
||||
«An Livia weitergeleitet — {n} Objekt(e) für {Firma}.»
|
||||
|
||||
Wörtlich in [`fragmente/leadDetail_weiterleitung.tsx.txt`](./fragmente/leadDetail_weiterleitung.tsx.txt).
|
||||
|
||||
**`src/components/visits/VisitPreparationDrawer.tsx`** (Brunos Briefing), Zeile 154:
|
||||
```tsx
|
||||
<SectionTitle>Lagebericht (von Livia)</SectionTitle>
|
||||
```
|
||||
Dazu das Feld in `src/domain/visitAssignment.ts` (Z. 27, Kommentar «Lagebericht, den Bruno bei
|
||||
Livia angefragt hat») und zwei Mocktexte in `src/mock-data/visitAssignments.ts` (Z. 46 und 84),
|
||||
die beide mit «Lagebericht von Livia: …» beginnen.
|
||||
|
||||
> **Entscheidung nötig** — siehe Abschnitt 4.
|
||||
|
||||
### 2.6 Mockdaten der Verwaltungsebene
|
||||
|
||||
| Datei | Livia-Anteil | Archivkopie |
|
||||
|---|---|---|
|
||||
| `src/mock-data/agentDirectory.ts` | Eintrag `id: 'livia'` (Z. 42–52) | im Fragment |
|
||||
| `src/mock-data/agentConnections.ts` | `AGENT_IDS.LIVIA` in vier `usedByAgentIds`-Listen (Z. 35, 205, 289, 380) — **nur die ID entfernen, nicht die Anbindung** | — |
|
||||
| `src/mock-data/agentProtocol.ts` | fünf Einträge (Z. 369–449, 691–703, 836–848, 945–956, 972–983) | [`fragmente/agentProtocol_livia.ts.txt`](./fragmente/agentProtocol_livia.ts.txt) |
|
||||
| `src/mock-data/agentWorkItems.ts` | `awi-livia-01` und `awi-livia-02` (Z. 1226–1498) | [`fragmente/agentWorkItems_livia.ts.txt`](./fragmente/agentWorkItems_livia.ts.txt) |
|
||||
|
||||
### 2.7 Tests
|
||||
|
||||
| Datei | Was bricht |
|
||||
|---|---|
|
||||
| `src/components/layout/__tests__/appShellConfig.test.ts` | Z. 52 erwartet `['Ferdi', 'Bruno', 'Livia', 'Nora', 'Sina']`; Z. 88 erwartet, dass `ROUTES.SUPPLY.AGENT_LIVIA` den Seitennamen «Livia» ergibt |
|
||||
| `src/services/__tests__/agentWorkloadService.test.ts` | verwendet `exposeLeads` in der Eingabe und prüft Livias Auslastungsbahn |
|
||||
|
||||
### 2.8 Hilfsskript
|
||||
|
||||
`scripts/build-agent-portraits.mjs` — Zuordnung `'image3.jpg': 'livia'` (Z. 51). Nur relevant,
|
||||
wenn die Porträts neu erzeugt werden.
|
||||
|
||||
---
|
||||
|
||||
## 3. Reihenfolge
|
||||
|
||||
**Rückbau** (von aussen nach innen, damit der Typecheck bei jedem Schritt hilft):
|
||||
1. `App.tsx` — Route heraus
|
||||
2. `agentWorkspaces.ts`, `teamAgents.ts`, `agentPhotos.ts` — aus den Registern nehmen
|
||||
3. `LeadDetail.tsx` — Weiterleitung, `useAgentWorkload.ts` + `agentWorkloadService.ts` — Bahn
|
||||
4. AI-Schicht (Interface **und** beide Implementierungen zusammen)
|
||||
5. Mockdaten (Directory, Connections, Protokoll, WorkItems)
|
||||
6. Tests anpassen
|
||||
7. `constants.ts` — Block und Route
|
||||
8. Erst jetzt die 23 Dateien aus Teil A löschen
|
||||
9. `npx tsc --noEmit && npm run lint && npm test`
|
||||
|
||||
**Wiedereinbau** (genau umgekehrt):
|
||||
1. `cp -r archive/livia/src/. src/`
|
||||
2. `constants.ts` aus dem Fragment ergänzen
|
||||
3. AI-Schicht (Interface und beide Implementierungen)
|
||||
4. Mockdaten aus den Fragmenten
|
||||
5. Register: `agentWorkspaces`, `teamAgents`, `agentPhotos`
|
||||
6. Auslastung, Weiterleitung bei Nora, Brunos Lagebericht-Abschnitt
|
||||
7. Route in `App.tsx`
|
||||
8. Tests zurück auf fünf Agenten
|
||||
9. `npx tsc --noEmit && npm run lint && npm test`
|
||||
|
||||
**Prüfung nach dem Wiedereinbau:** `/supply/my-listings` öffnen, einen Lead aufklappen,
|
||||
ein Pflichtfeld leeren (rote Umrandung erwartet), KI-Entwurf für den Objektbeschrieb auslösen
|
||||
(bei fehlendem Ausbaustandard darf **kein** Text entstehen, sondern die Lücke gemeldet werden),
|
||||
Export als PDF und Word auslösen. Zusätzlich bei Nora ein Signal an Livia weiterleiten und
|
||||
prüfen, ob der Lead auf Livias Seite erscheint.
|
||||
|
||||
---
|
||||
|
||||
## 4. Entscheidungen, die beim Rückbau zu treffen sind
|
||||
|
||||
Diese drei Punkte sind **keine** technischen Fragen — sie sollten bewusst entschieden und
|
||||
hier festgehalten werden, sonst fehlt beim Wiedereinbau die Begründung.
|
||||
|
||||
1. **Bleibt der Abschnitt «Lagebericht (von Livia)» in Brunos Besichtigungsbriefing?**
|
||||
Bleibt er stehen, zeigt das Briefing einen Lagebericht ohne Urheber — die Belegkette wird
|
||||
unklar. Wird er entfernt, verliert Brunos Briefing einen inhaltlichen Baustein. Empfehlung:
|
||||
Feld und Text belassen, aber die Beschriftung von «(von Livia)» auf «Lagebericht» ändern —
|
||||
der kleinste Eingriff, der beim Wiedereinbau in einer Zeile rückgängig ist.
|
||||
|
||||
2. **Bleibt bei Nora der Knopf «An Livia weiterleiten»?**
|
||||
Ohne Livia hat die Weiterleitung kein Ziel; der Knopf muss weg. Damit entfällt der
|
||||
sichtbare Übergabemoment zwischen zwei Agenten — in der Präsentation bisher das stärkste
|
||||
Argument. Wenn der Case später wieder gebraucht wird, ist dieser Knopf das Erste, was
|
||||
zurückkommen muss.
|
||||
|
||||
3. **Wie wird aus fünf Agenten vier?**
|
||||
Personalzahl, Sitzordnung im Meetingraum der Startseite, Willkommensdialog und die
|
||||
Reihenfolge «Ferdi, Bruno, Livia, Nora, Sina» hängen alle an `AGENT_WORKSPACES`. Technisch
|
||||
passiert das von selbst, optisch aber nicht folgenlos — die Startseite sollte nach dem
|
||||
Rückbau angeschaut werden.
|
||||
|
||||
---
|
||||
|
||||
## 5. Inhalt dieses Verzeichnisses
|
||||
|
||||
```
|
||||
archive/livia/
|
||||
├─ WIEDERHERSTELLUNG.md ← dieses Dokument
|
||||
├─ src/ ← 23 Originaldateien im Original-Pfadlayout
|
||||
│ ├─ pages/supply/MyListings.tsx
|
||||
│ ├─ components/expose/… (6 Dateien)
|
||||
│ ├─ domain/… (2)
|
||||
│ ├─ provider/… (4)
|
||||
│ ├─ services/… (3 + ai/mock/exposeTextBuilder.ts)
|
||||
│ ├─ hooks/… (2)
|
||||
│ ├─ lib/exposeFields.ts
|
||||
│ ├─ mock-data/… (2)
|
||||
│ └─ assets/team/livia.jpg
|
||||
└─ fragmente/ ← wörtliche Ausschnitte aus geteilten Dateien
|
||||
├─ constants_livia.ts.txt
|
||||
├─ aiService_livia.ts.txt
|
||||
├─ workload_livia.ts.txt
|
||||
├─ leadDetail_weiterleitung.tsx.txt
|
||||
├─ agentDirectory_livia.ts.txt
|
||||
├─ agentProtocol_livia.ts.txt
|
||||
└─ agentWorkItems_livia.ts.txt
|
||||
```
|
||||
|
||||
Fachliche Beschreibung, Aufgabenkatalog und System-Prompt: `LIVIA_PROFIL_UND_PROMPT.md` im
|
||||
Repo-Root.
|
||||
Reference in new issue
Block a user