# 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`. > > **Vollzogen am 23.08.2026.** Mit Runde 8 wurde Livia zur Research- & Market-Intelligence- > Agentin, und die Exposé-Funktion ist vollständig aus der Anwendung entfernt worden — nicht > bloss nachgeordnet. Alle 23 Dateien aus Teil A sind gelöscht, die Eingriffe aus Teil B > ausgeführt. Dieses Manifest ist damit von der Vorsorge zur Wiedereinbau-Anleitung geworden. > > **Abweichungen gegenüber der ursprünglichen Annahme** — beim Wiedereinbau beachten: > - Livia ist **nicht** aus den Registern entfernt worden. Sie bleibt im Team, nur mit anderer > Rolle. Abschnitt 2.2 beschreibt einen Rückbau, der so nicht stattgefunden hat: die Einträge > in `agentWorkspaces.ts`, `teamAgents.ts`, `agentPhotos.ts` und `agentDirectory.ts` stehen > unverändert, dort wurde nur die Funktionsbezeichnung geändert. Das Team hat weiterhin fünf > Mitglieder; die Sitzordnung im Meetingraum ist unberührt. > - Die Weiterleitung bei Nora (Abschnitt 2.5) ist entfallen, weil sie ohne Exposé kein Ziel > mehr hatte. Mit Runde 8 fliessen Leads in die Gegenrichtung: Livia recherchiert, Nora > gleicht ab. > - Brunos Abschnitt «Lagebericht (von Livia)» steht unverändert — er hing an der Lage-, nicht > an der Exposé-Funktion. > - Zusätzlich entfernt, weil erst mit Runde 8 entstanden: `ExposeLeadSection.tsx`. > > 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 ``` 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 } /> ``` ### 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 Lagebericht (von Livia) ``` 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.