Files
Benjamin SutterandClaude Opus 5 2037e5a463 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>
2026-08-22 00:35:57 +02:00

77 lines
3.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ══ src/services/ai/IAIService.ts — Typen (aktuell Zeilen 200–232) ══
// ── Exposé texts (Livia) ──────────────────────────────────────────────────────
/**
* Die Textabschnitte eines Exposés. Jeder lässt sich einzeln erzeugen —
* gesamthaft heisst schlicht: alle nacheinander (Runde 4, §8.5.2).
*/
export const ExposeTextSection = {
TITLE: 'TITLE',
TEASER: 'TEASER',
OBJECT: 'OBJECT',
LOCATION: 'LOCATION',
MUNICIPALITY: 'MUNICIPALITY',
FEATURES: 'FEATURES',
HIGHLIGHTS: 'HIGHLIGHTS',
} as const
export type ExposeTextSection = typeof ExposeTextSection[keyof typeof ExposeTextSection]
export type ExposeTonality = 'SACHLICH' | 'HOCHWERTIG' | 'EINLADEND'
export interface ExposeTextInput {
section: ExposeTextSection
tonality: ExposeTonality
/** Ausschliesslich belegte Angaben aus «Meine Objekte» — nichts Erfundenes. */
facts: Record<string, string | number | undefined>
}
export interface ExposeTextResult {
section: ExposeTextSection
text: string
/** Angaben, die für einen vollständigen Text fehlen — statt sie zu erfinden. */
missingFacts: string[]
}
// ══ src/services/ai/IAIService.ts — Methode im Interface (Zeile 281) ══
recommendPreMarketRent(input: PreMarketRentInput): Promise<AIResponse<PreMarketRentRecommendation>>
// Exposé-Texte (Livia) — pro Abschnitt auslösbar
generateExposeText(input: ExposeTextInput): Promise<AIResponse<ExposeTextResult>>
// Legacy methods
// ══ src/services/ai/mock/MockAIService.ts — Importe (17-18, 25) ══
ExposeTextInput,
ExposeTextResult,
import { buildExposeText } from './exposeTextBuilder'
// ══ src/services/ai/mock/MockAIService.ts — Implementierung (303-310) ══
}),
generateExposeText: (input: ExposeTextInput) =>
traceMock<ExposeTextResult>('generateExposeText', async () => {
await delay(SIMULATED_DELAY.medium)
return { data: buildExposeText(input), provenance: mockProvenance() }
}),
// ══ src/services/ai/backend/BackendAIService.ts — Importe (62-63) ══
ExposeTextInput,
ExposeTextResult,
// ══ src/services/ai/backend/BackendAIService.ts — Delegation (678-690) ══
},
// ── generateExposeText ──────────────────────────────────────────────────────
//
// Bewusst ohne eigenen LLM-Aufruf: der Text darf ausschliesslich auf erfassten
// Objektdaten beruhen (Runde 4, §8.5.2). Ein freies Sprachmodell würde genau
// die fehlenden Angaben plausibel ergänzen, die hier rot markiert gehören.
// Deshalb erzeugt auch im Backend-Betrieb der deterministische Builder den
// Entwurf; er nennt Lücken, statt sie zu füllen.
generateExposeText(input: ExposeTextInput): Promise<AIResponse<ExposeTextResult>> {
return MockAIService.generateExposeText(input)
},