"""MVP context keys. Values come from the Context Builder, never from Python prompt strings.""" from __future__ import annotations from placeholders import Placeholder, register def _from_ctx(key: str): return lambda ctx: (ctx or {}).get(key) or "" register( Placeholder( key="dialogue_context", description="Vom Context Builder zusammengestellter Dialog- und Space-Kontext.", data_class="B", resolver=_from_ctx("dialogue_context"), ) ) register( Placeholder( key="writing_profile", description="Aktueller Writing-Profile-Brief für Journal-Artefakte. Kein KI-Draft, keine Dialogsteuerung.", data_class="B", resolver=_from_ctx("writing_profile"), ) ) register( Placeholder( key="interaction_hint", description="Interaction Profile plus aktueller Dialogue State. Kein Writing Profile, keine Ableitung aus Nicht-Widersprechen.", data_class="C", resolver=_from_ctx("interaction_hint"), ) ) register( Placeholder( key="space_title", description="Titel des aktuellen Reflection Space.", data_class="C", resolver=_from_ctx("space_title"), ) ) register( Placeholder( key="existing_text", description="Bestehender Draft oder Entry, nur bei ausdrücklichem Regenerieren.", data_class="B", resolver=_from_ctx("existing_text"), ) ) register( Placeholder( key="source_text", description="Klartext für Entity Detection. Verlässt die Trusted Zone nur über den Detect-Provider.", data_class="B", resolver=_from_ctx("source_text"), ) ) register( Placeholder( key="known_labels", description="Bereits gemappte lokale Labels, damit Detection sie nicht neu vorschlägt.", data_class="C", resolver=_from_ctx("known_labels"), ) ) register( Placeholder( key="register_hint", description="Lokales Erzählregister für den Dialogzug. Kein zweiter Modellaufruf.", data_class="C", resolver=_from_ctx("register_hint"), ) ) register( Placeholder( key="review_package", description="Gebündeltes Profile-Review-Paket (derselbe Vertrag für API und Copy/Paste).", data_class="B", resolver=_from_ctx("review_package"), ) )