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,76 @@
|
||||
// ══ 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)
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user