@rslsp1/fa-app-tools 7.0.1 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/szenen.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Z as PublishFinding, ac as SchemaError, Y as PublishCheckResult, aj as SzenenElementType, a2 as ReferenceResolver, ap as TargetModelResolution, I as ElementSnapshot, w as DerivationInputMode, M as ImageProvenance, s as DerivationFailure, n as DerivableType, N as NotDerivable, p as DerivationConflict, u as DerivationFollowUp, B as DraftChainMeta, q as DerivationDiagnostic, o as DerivationAssessment, h as ContextChainPort, a as AuthoritativeSzenenStore, ai as SzenenElementStore, v as DerivationImage, al as SzenenQueries, ah as SzenenCommands, ar as UnusableProposal } from './storeContract-DNggXiZl.js';
1
+ import { I as ElementSnapshot, Z as PublishFinding, ac as SchemaError, Y as PublishCheckResult, aj as SzenenElementType, a2 as ReferenceResolver, ap as TargetModelResolution, w as DerivationInputMode, M as ImageProvenance, s as DerivationFailure, n as DerivableType, N as NotDerivable, p as DerivationConflict, u as DerivationFollowUp, B as DraftChainMeta, q as DerivationDiagnostic, o as DerivationAssessment, h as ContextChainPort, a as AuthoritativeSzenenStore, ai as SzenenElementStore, v as DerivationImage, al as SzenenQueries, ah as SzenenCommands, ar as UnusableProposal } from './storeContract-DNggXiZl.js';
2
2
  export { A as ALL_PUBLISH_RULES, C as CHAIN_EDGES, b as CHAIN_LINK_FIELDS, c as CatalogueEntry, d as ChainLinkField, e as ChainTarget, f as ChainVerdict, g as CompiledSchemas, i as ContractCheck, j as ContractCheckResult, k as ContractRunResult, l as ContractViolation, m as CreateElementInput, D as DERIVABLE_TYPES, r as DerivationEnvelope, t as DerivationFailureClass, x as DerivationPolicyPayload, y as DerivationProposal, z as DraftChainLink, E as DraftFork, F as DraftRecord, G as ElementMetadata, H as ElementRecord, J as ElementStoreContractHarness, K as ElementVersionValidation, L as FindingSeverity, O as OptionalCommand, P as PROBE_VERSION_ID, Q as ParentRelation, R as PreferredHeadOutcome, S as PreferredHeadResolution, T as PreferredHeadSelection, U as PreferredHeadSource, V as ProjectionState, W as ProjectionStatus, X as PublishCheckInput, _ as PublishRejected, $ as PublishVersionInput, a0 as PublishedVersion, a1 as REFERENCE_FIELD, a3 as ResolvePreferredHeadOptions, a4 as ResolvedVersion, a5 as ReviseMetadataInput, a6 as STYLE_PAYLOAD, a7 as STYLE_PAYLOAD_V2, a8 as SZENEN_ELEMENT_TYPES, a9 as SceneDerivationInput, aa as SceneDerivationOutcome, ab as SceneDerivationOutput, ad as SchemaValidationResult, ae as SetPreferredHeadInput, af as StoreAuthority, ag as SzenenCommandResult, ak as SzenenProjection, am as TargetModelCandidate, an as TargetModelQueries, ao as TargetModelQuery, aq as UnsupportedSchemaError, as as VersionDag, at as VersionDagError, au as VersionNode, av as VersionParentLink, aw as WriteConflict, ax as WriteDraftInput, ay as assessDerivationResponse, az as buildDerivationSystemInstruction, aA as buildDerivationUserPrompt, aB as buildVersionDag, aC as checkChainTargets, aD as checkDerivationResponse, aE as checkDraftChainMeta, aF as collectVersionRefs, aG as compileSchemas, aH as createSimulationSceneDerivationPort, aI as describeTargetModelFailure, aJ as elementStoreContractChecks, aK as formatSchemaErrors, aL as getSzenenSchemas, aM as isOk, aN as isProjectionCurrent, aO as linkFor, aP as parseDerivationResponse, aQ as preferredVersionId, aR as resolvePreferredHead, aS as resolveTargetModelOver, aT as resolverFromQueries, aU as runElementStoreContract, aV as runPublishChecks, aW as runSceneDerivation, aX as showChain, aY as validateAgainst, aZ as validateDerivationInput, a_ as validateElementVersion, a$ as validatePayload, b0 as withReference } from './storeContract-DNggXiZl.js';
3
3
  import { T as TextGenerationPort, Q as QueryResult, C as CommandResult } from './contracts-DdYOMBl9.js';
4
4
  export { S as SIMULATION_PROVIDER, c as TextGenerationRequest, d as TextGenerationResult, g as createFakeTextGenerationPort, h as createSimulationTextGenerationPort, s as simulatedAnswerFor } from './contracts-DdYOMBl9.js';
@@ -6,6 +6,362 @@ import { g as HFStateSnapshot, F as FlowGenerateText } from './hfEventTypes-fAdA
6
6
  export { C as CreateFlowTextGenerationPortOptions, r as createFlowTextGenerationPort } from './hfEventTypes-fAdA-0A9.js';
7
7
  import React__default from 'react';
8
8
 
9
+ /** Präfix aller Events dieser Domain im gemeinsamen HF-Event-Kanal. */
10
+ declare const SZENEN_EVENT_PREFIX = "szenen.";
11
+ declare const SZENEN_EVENT_TYPES: {
12
+ readonly elementCreated: "szenen.element_created";
13
+ readonly elementRetired: "szenen.element_retired";
14
+ readonly metadataRevised: "szenen.element_metadata_revised";
15
+ readonly draftWritten: "szenen.element_draft_written";
16
+ readonly versionPublished: "szenen.element_version_published";
17
+ readonly preferredHeadSelected: "szenen.element_preferred_head_selected";
18
+ /**
19
+ * Ein Prompt-Ableitungslauf — Stufe 3, S6 (E-3b).
20
+ *
21
+ * Ein Lauf ist **kein Element**: keine Version, kein DAG, nicht
22
+ * referenzierbar. Er liegt trotzdem im selben autoritativen Log, weil er
23
+ * append-only und unveränderlich ist — genau die Form, die ein Ereignislog
24
+ * nativ trägt — und weil MySQL sonst zu einem zweiten fachlichen Speicher
25
+ * würde, den D-62 abgeschafft hat.
26
+ *
27
+ * Der Elementreducer ignoriert diesen Typ (`default:`-Zweig); die Läufe
28
+ * werden mit `collectPromptRuns` gelesen.
29
+ */
30
+ readonly promptRunRecorded: "szenen.prompt_run_recorded";
31
+ /**
32
+ * Ein Szenen-Rekonstruktionslauf — Stufe 6.5 (D-71).
33
+ *
34
+ * Derselbe Bauplan und dieselbe Begründung wie beim Prompt-Lauf: append-only,
35
+ * unveränderlich, **kein Element** — keine Version, kein DAG, nicht
36
+ * referenzierbar. Er liegt im autoritativen Log, weil er genau die Form hat,
37
+ * die ein Ereignislog nativ trägt.
38
+ *
39
+ * Bewusst ein zweiter Lauftyp und **kein** gemeinsamer: Ein Prompt-Lauf geht
40
+ * von einer veröffentlichten Shot-Version aus, ein Rekonstruktionslauf von
41
+ * einer Referenz, die noch zu gar keinem Element gehört. Sie in einen Typ zu
42
+ * zwingen hieße, beiden ihre Herkunftsfelder zu nehmen.
43
+ *
44
+ * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig).
45
+ */
46
+ readonly sceneDerivationRecorded: "szenen.scene_derivation_recorded";
47
+ /**
48
+ * Ein ausdrücklich ausgelöster Lauf gegen den **echten** Provider.
49
+ *
50
+ * Er kostet Geld und wird deshalb nie beiläufig gefahren. Das Ereignis hält
51
+ * fest, was tatsächlich bezahlt wurde: wie viele Modellaufrufe, mit welchem
52
+ * Ausgang, in welcher Umgebung und von wem ausgelöst.
53
+ *
54
+ * Es ersetzt **nicht** die einzelnen Läufe — die werden regulär als
55
+ * `prompt_run_recorded` bzw. `scene_derivation_recorded` protokolliert. Es
56
+ * ist die Klammer darüber und der Grund, warum jemand später nachlesen kann,
57
+ * ob der Durchstich stattgefunden hat, ohne ihn erneut zu bezahlen.
58
+ */
59
+ readonly providerCheckRecorded: "szenen.provider_check_recorded";
60
+ /**
61
+ * Eine geprüfte Arbeitsfassung eines fehlgeschlagenen Rekonstruktionslaufs —
62
+ * Stufe 6.6 (D-99).
63
+ *
64
+ * Sie ist **kein Lauf**: kein Provideraufruf, keine Kosten, kein Zielmodell.
65
+ * Sie ist die lokal geprüfte Korrektur eines bereits bezahlten Ergebnisses
66
+ * und zeigt über `run_id` auf ihren Ursprung. Der `raw_output` jenes Laufs
67
+ * bleibt unangetastet — deshalb ein eigenes Ereignis statt einer Änderung am
68
+ * bestehenden, das es ohnehin nicht geben dürfte (D-71).
69
+ *
70
+ * Mehrere Rettungen zum selben Lauf sind zulässig und erwartet: Jede
71
+ * Korrekturrunde ist nachvollziehbare Arbeit, kein Update der vorigen.
72
+ *
73
+ * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig).
74
+ */
75
+ readonly sceneDerivationRecoveryRecorded: "szenen.scene_derivation_recovery_recorded";
76
+ /**
77
+ * Ein bezahlter Bildgenerierungsauftrag beginnt — Stufe 6.7 (D-119).
78
+ *
79
+ * Append-only wie jedes andere Ereignis dieser Domain, geschrieben **vor**
80
+ * dem Provideraufruf. Es traegt **keine Bilddaten** — nur die Kennung, mit
81
+ * der die spaetere kanonische Batch-Persistenz (`saveGeneratedAssetBatch`,
82
+ * Teil C) wiedergefunden wird. Ein Crash zwischen diesem Ereignis und
83
+ * `imageGenerationFinished` loescht den Auftrag nicht: Er bleibt lesbar,
84
+ * ohne dass irgendein automatischer Retry darauf reagiert.
85
+ *
86
+ * Gilt nur fuer `generated_in_app` — ein externer Import (D-108/D-117)
87
+ * ruft keinen Provider und braucht deshalb kein `started`; sein Nachweis
88
+ * ist das gespeicherte Library-Item selbst.
89
+ *
90
+ * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig); gelesen
91
+ * wird mit `collectImageGenerationOrders`.
92
+ */
93
+ readonly imageGenerationStarted: "szenen.image_generation_started";
94
+ /**
95
+ * Derselbe Bildgenerierungsauftrag endet — Stufe 6.7 (D-119).
96
+ *
97
+ * Erscheint erst **nach** der kanonischen Batch-Persistenz: Ein technischer
98
+ * Fehler zwischen Provideraufruf und Speichern darf nie als `succeeded`
99
+ * protokolliert werden, nur weil der Provider geantwortet hat. Traegt
100
+ * ebenfalls keine Bilddaten — nur Status, Zaehlung und die Item-Kennung,
101
+ * falls eine entstand.
102
+ */
103
+ readonly imageGenerationFinished: "szenen.image_generation_finished";
104
+ /**
105
+ * Ein Bild-Batch ist kanonisch gespeichert — Stufe 6.9.2, Gate D
106
+ * (D-6.9.2-6).
107
+ *
108
+ * Erscheint erst, **nachdem** jedes Bild des Batches im Bildbestand liegt
109
+ * (`hfUploadImage` + `image_added`, dieselbe Reihenfolge wie
110
+ * `hfImageLibrary.putImage`) — kein Bild gilt als vorhanden, bevor sein
111
+ * Upload bestätigt ist (R3). Trägt bewusst **keine Bilddaten**, nur den
112
+ * vollständigen Metadatennachweis, den `listBatchesForPromptRun()` /
113
+ * `getBatch()` ohne MySQL rekonstruieren können müssen: `item_id`,
114
+ * `prompt_run_id`, `generation_batch_id`, `source_kind`, je Bild
115
+ * `position`, `media_ref`, `asset_id`, `model`, `seed`, `width`/`height`.
116
+ *
117
+ * Additiv wie jedes Ereignis dieser Domain: ein zweiter Batch desselben
118
+ * Laufs ist ein **weiteres** Ereignis mit derselben `item_id`, nicht eine
119
+ * Änderung am ersten (D-113/D-121 — ein Lauf bleibt ein Item). Gilt für
120
+ * `generated_in_app` **und** `external_import` — nur `source_kind`
121
+ * unterscheidet die beiden Schreiber (D-116/D-117/D-120).
122
+ *
123
+ * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig); gelesen
124
+ * wird mit `collectImageBatches` (`imageBatchStore.ts`).
125
+ */
126
+ readonly imageBatchPersisted: "szenen.image_batch_persisted";
127
+ /**
128
+ * Ein vorbereiteter Promptvorgang — der Durchstich „Szene → ChatGPT → Lauf".
129
+ *
130
+ * Der bestehende Promptpfad ruft das Modell selbst
131
+ * (`runPromptDerivation()`); ein aufrufendes Chatmodell formuliert dagegen
132
+ * **zwischen** zwei Werkzeugaufrufen. Damit zerfaellt der eine Vorgang in
133
+ * zwei, und der zweite braucht genau den Stand, den der erste eingefroren
134
+ * hat — sonst loeste der Abschluss die inzwischen geaenderte Szene neu auf
135
+ * und der Lauf behauptete eine Herkunft, die er nicht hat (D-22).
136
+ *
137
+ * Deshalb ein eigenes Ereignis und **kein** fluechtiger Prozesszustand: Der
138
+ * Snapshot ueberlebt Neustart, Hostwechsel und Sitzungsende, weil er im
139
+ * selben autoritativen Log liegt wie der Lauf, der daraus entsteht.
140
+ *
141
+ * Der Elementreducer ignoriert diesen Typ (`default:`-Zweig); gelesen wird
142
+ * mit `collectPromptOperations` (`scenePromptOperation.ts`).
143
+ */
144
+ readonly promptOperationPrepared: "szenen.prompt_operation_prepared";
145
+ /**
146
+ * Ein Bildauftrag wartet auf einen ausfuehrenden Flow-Host.
147
+ *
148
+ * Die vorhandene Auftragshistorie (`imageGenerationStarted`) beginnt
149
+ * **unmittelbar vor** dem Provideraufruf und kennt deshalb keinen wartenden
150
+ * Auftrag. Genau der entsteht hier: Ein Chatmodell beauftragt ueber MCP ein
151
+ * Bild, der Auftrag wird dauerhaft abgelegt, und der Werkzeugaufruf endet
152
+ * sofort mit seiner Kennung — er haelt keine Antwort minutenlang offen.
153
+ *
154
+ * Traegt **keinen** Prompt: Der steht im referenzierten Lauf, und ihn hier
155
+ * zu kopieren waere eine zweite Wahrheit ueber denselben eingefrorenen Text
156
+ * (D-103).
157
+ */
158
+ readonly imageJobRequested: "szenen.image_job_requested";
159
+ /**
160
+ * Ein Flow-Host beansprucht einen wartenden Bildauftrag.
161
+ *
162
+ * Ein append-only Log kennt kein Lock: Zwei Tabs koennen beide anhaengen.
163
+ * Deshalb ist die Uebernahme **nicht** der Append, sondern das Ergebnis
164
+ * einer deterministischen Schiedsregel darueber (`winningClaimOf`) — der
165
+ * erste Anspruch in Logreihenfolge gewinnt, und jeder Host liest nach
166
+ * seinem Append erneut, bevor er einen bezahlten Provideraufruf startet.
167
+ * Ein unterlegener Anspruch bleibt sichtbar stehen; er wird nicht geloescht,
168
+ * weil das Log das nicht kann und weil der Versuch ein Beleg ist.
169
+ */
170
+ readonly imageJobClaimed: "szenen.image_job_claimed";
171
+ /**
172
+ * Der Bildauftrag ist erledigt — mit dem Ausgang, den der Host gesehen hat.
173
+ *
174
+ * Getrennt von `imageGenerationFinished`: Jenes gehoert zum bezahlten
175
+ * Provideraufruf, dieses zur Zustellung. Ein Auftrag kann fehlschlagen,
176
+ * **bevor** ein Provider gerufen wurde (abgelehntes Profil), und dann gibt
177
+ * es kein `imageGenerationFinished`, das den Wartenden erloesen wuerde.
178
+ */
179
+ readonly imageJobSettled: "szenen.image_job_settled";
180
+ };
181
+ /** Ein einzelnes Bild innerhalb von `ImageBatchPersistedPayload` (D-6.9.2-6). */
182
+ interface ImageBatchPersistedImage {
183
+ position: number;
184
+ /** Im aktuellen Host auflösbarer Locator — hier die HF-Bildkennung (D-93). */
185
+ media_ref: string;
186
+ /** Fachlich stabile Identität, soweit bekannt — hier identisch mit `media_ref` (D-118). */
187
+ asset_id?: string;
188
+ /**
189
+ * Der **bestätigte** MIME-Typ der abgelegten Datei — Review 2026-08-18 §5 P2.
190
+ *
191
+ * Additiv nachgetragen, weil der Batch ihn beim Schreiben kennt, ihn aber
192
+ * nicht führte: Der Lesepfad musste die Dateiendung deshalb über zwei
193
+ * Varianten erraten. Geraten wird nichts mehr — der Typ stammt aus den
194
+ * tatsächlichen Bildbytes (`typAusBytes`), nicht aus einer Annahme, und
195
+ * bestimmt den Pfad `images/<id>.<ext>`, unter dem die Datei liegt.
196
+ *
197
+ * Optional, weil ältere Ereignisse ihn nicht tragen; für die fällt der
198
+ * Lesepfad auf den Bestandseintrag zurück.
199
+ */
200
+ mime_type?: string | null;
201
+ model?: string | null;
202
+ /** Nur gesetzt, wenn der Provider ihn tatsächlich zurückliefert (D-107). */
203
+ seed?: number | null;
204
+ width?: number | null;
205
+ height?: number | null;
206
+ }
207
+ /** Nutzlast von `imageBatchPersisted` — geschrieben nach bestätigtem Bild-Upload. */
208
+ interface ImageBatchPersistedPayload {
209
+ item_id: string;
210
+ prompt_run_id: string;
211
+ generation_batch_id: string;
212
+ source_kind: 'generated_in_app' | 'external_import';
213
+ title: string;
214
+ images: readonly ImageBatchPersistedImage[];
215
+ created_at: string;
216
+ }
217
+ /**
218
+ * Ein Event, wie der Reducer es sieht.
219
+ *
220
+ * Nur `type`, `payload` und `clientId` sind fachlich. `ts` dient allein der
221
+ * **Lesereihenfolge** des Logs und darf nie eine fachliche Vorrangfrage
222
+ * entscheiden — sonst wäre es `MAX(ts)` durch die Hintertür (§2.5, R-3).
223
+ */
224
+ interface ElementEvent<P = unknown> {
225
+ type: string;
226
+ payload: P;
227
+ clientId: string;
228
+ ts: number;
229
+ }
230
+ /** Ein Befund beim Falten: etwas ist widersprüchlich, aber der Zustand bleibt lesbar. */
231
+ interface ReducerFinding {
232
+ code: 'unbekanntes_element' | 'version_doppelt' | 'version_veraendert' | 'draft_fork' | 'metadata_fork' | 'preferred_head_fork' | 'element_doppelt';
233
+ element_id: string;
234
+ message: string;
235
+ }
236
+ /** Abgeleiteter Zustand über alle Elemente. */
237
+ interface ElementStoreState {
238
+ elements: ReadonlyMap<string, ElementSnapshot>;
239
+ findings: readonly ReducerFinding[];
240
+ }
241
+ /**
242
+ * Faltet den Event-Log zum Elementzustand.
243
+ *
244
+ * Der Reducer ist rein: gleiche Events, gleicher Zustand — unabhängig von der
245
+ * Eingabereihenfolge.
246
+ *
247
+ * @param events Alle bekannten Szenen-Events; fremde Typen werden übergangen.
248
+ */
249
+ declare function reduceElementEvents(events: readonly ElementEvent[]): ElementStoreState;
250
+ /** Aktuelle Revision des Entwurfs. `0`, wenn keiner existiert. */
251
+ declare function draftRevisionOf(snapshot: ElementSnapshot | null | undefined): number;
252
+ /**
253
+ * Quellrevision eines gelesenen Event-Logs (D-62 §2.4, D-63 §1.1.2).
254
+ *
255
+ * Die Projektion darf sich nur dann `current` nennen, wenn sie belegen kann,
256
+ * **bis wohin** sie reicht. Dieser Beleg ist die Quellrevision, und sie muss
257
+ * zwei Eigenschaften haben: aus dem Log allein berechenbar (sonst wäre sie eine
258
+ * zweite Buchführung) und für zwei verschiedene Logstände verschieden.
259
+ *
260
+ * Beides leistet `Anzahl@größter-Zeitstempel`. Der Log ist append-only — es
261
+ * verschwindet nie ein Event —, also wächst die Anzahl bei jedem Schreibvorgang.
262
+ * Der Zeitstempel kommt dazu, weil er den Stand für einen Menschen lesbar macht;
263
+ * entscheidend ist die Anzahl.
264
+ *
265
+ * Bewusst **kein** Hash über die Payloads: der wäre teurer und würde
266
+ * Gleichheit über die Zeit versprechen, die der Log ohnehin schon garantiert.
267
+ * Und bewusst hier, nicht im Server: der Projektor rechnet damit, und wer den
268
+ * Stand prüfen will, soll dieselbe Rechnung fahren (R-2).
269
+ */
270
+ declare function logRevisionOf(events: readonly ElementEvent[]): string;
271
+ /** Aktuelle Revision der Preferred-Head-Auswahl eines Kontexts. `0`, wenn keine existiert. */
272
+ declare function preferredHeadRevisionOf(events: readonly ElementEvent[], elementId: string, contextId: string): number;
273
+
274
+ /** Aktuelle Fassung des Dateiformats. */
275
+ declare const SZENEN_SNAPSHOT_SCHEMA_VERSION = 1;
276
+ /** Namenspräfix des Snapshots im Namensraum bzw. im Dateilog. */
277
+ declare const SZENEN_SNAPSHOT_PREFIX = "szenen-state-";
278
+ /** Dateiname des Snapshots in einem dateigestützten Log (dort gibt es nur einen). */
279
+ declare const SZENEN_SNAPSHOT_FILE = "szenen-state.json";
280
+ /**
281
+ * Was ein Snapshot über die von ihm aufgenommenen Ereignisse aussagt.
282
+ *
283
+ * Redundant zu `events` — und genau deshalb da: Stimmen `count` und `max_ts`
284
+ * nicht mit dem Inhalt überein, ist die Datei beschädigt, und das muss laut
285
+ * auffallen statt eine falsche Revision zu erzeugen (Regel 4).
286
+ */
287
+ interface SzenenSnapshotConsumed {
288
+ count: number;
289
+ max_ts: number;
290
+ /**
291
+ * Die Dateinamen (ohne Verzeichnis), aus denen dieser Snapshot entstand.
292
+ *
293
+ * **Warum nicht der Zeitstempel als Schnitt.** Naheliegend waere „alles mit
294
+ * `ts > consumed.max_ts` ist neu" — dieselbe Regel, mit der die FA App gegen
295
+ * `consolidatedAt` filtert. Sie ist hier aber **falsch**: Beide Kanaele
296
+ * vergeben `ts = Math.max(wallTs, letzterTs)`, also *monoton*, aber nicht
297
+ * *streng* monoton. Zwei Ereignisse derselben Millisekunde tragen denselben
298
+ * Zeitstempel; getrennt werden sie ueber die laufende Nummer im Dateinamen.
299
+ * Nimmt der Lauf das eine auf und wird das andere unmittelbar danach
300
+ * geschrieben, verwuerfe ein `ts >`-Schnitt das zweite fuer immer — genau der
301
+ * stille Datenverlust, gegen den D-136 antritt. Gefunden vom Dateikanal-Test.
302
+ *
303
+ * Der Dateiname ist dagegen eindeutig, und er ist in beiden Kanaelen
304
+ * derselbe: `createFileEventChannel` schreibt ausdruecklich dieselben Namen
305
+ * wie `writeHFEvent` (`<ts>_<seq><uuid>.json`).
306
+ */
307
+ paths: readonly string[];
308
+ }
309
+ interface SzenenSnapshot {
310
+ schema_version: number;
311
+ consumed: SzenenSnapshotConsumed;
312
+ events: readonly ElementEvent[];
313
+ }
314
+ /** Dateiname eines Snapshots, der bis `maxTs` reicht. */
315
+ declare function szenenSnapshotFilename(maxTs: number): string;
316
+ /** Erkennt einen Snapshot-Dateinamen — nicht den ganzen Pfad. */
317
+ declare function istSzenenSnapshotDatei(name: string): boolean;
318
+ /**
319
+ * Baut einen Snapshot aus dem bisherigen Snapshot und den neu aufgenommenen
320
+ * Ereignissen.
321
+ *
322
+ * Die Reihenfolge ist die Lesereihenfolge des Logs: erst das Ältere. Mehrere
323
+ * Faltungen entscheiden „der erste gilt" (`collectPromptRuns`,
324
+ * `collectImageGenerationOrders`), deshalb ist sie fachlich und nicht kosmetisch.
325
+ */
326
+ declare function buildSzenenSnapshot(base: SzenenSnapshot | null, neue: readonly ElementEvent[], neuePfade?: readonly string[]): SzenenSnapshot;
327
+ /**
328
+ * Liest einen Snapshot aus geparstem JSON — laut, nie tolerant.
329
+ *
330
+ * Ein halb gelesener Snapshot wäre schlimmer als gar keiner: Er machte die
331
+ * Quellrevision kleiner, als sie ist, und damit liefe die monotone
332
+ * Projektionsschranke aus PR 341 rückwärts. Also `throw`, kein Default
333
+ * (Regel 4).
334
+ */
335
+ declare function parseSzenenSnapshot(raw: unknown, herkunft: string): SzenenSnapshot;
336
+ /** Das Ergebnis eines Lesevorgangs „Snapshot + ausstehende Ereignisse". */
337
+ interface SzenenLeseErgebnis {
338
+ events: readonly ElementEvent[];
339
+ /**
340
+ * Ausstehende Ereignisse, die der Snapshot bereits enthaelt.
341
+ *
342
+ * Regelfall `0`. Groesser wird es, wenn ein Archivierungs-Batch scheiterte —
343
+ * der Lauf laesst solche Dateien ausdruecklich in `events/` liegen. Sie hier
344
+ * mitzuzaehlen ergaebe eine zu grosse Revision und Doppeleintraege in den
345
+ * Faltungen; deshalb werden sie am Schnitt verworfen und **gezaehlt**, damit
346
+ * eine unerwartete Zahl auffaellt statt zu verschwinden.
347
+ */
348
+ bereitsImSnapshot: number;
349
+ }
350
+ /**
351
+ * Fuegt Snapshot und ausstehende Ereignisse zu dem zusammen, was ein Kanal
352
+ * zurueckgibt.
353
+ *
354
+ * **Der Schnitt liegt nicht hier**, sondern dort, wo die Dateinamen bekannt
355
+ * sind: Ein Leser siebt seine Dateien vorher ueber `istBereitsAufgenommen`
356
+ * bzw. `aufgenommeneDateien` aus. Diese Funktion setzt nur noch zusammen —
357
+ * Snapshot zuerst, denn das ist die Lesereihenfolge des Logs, und mehrere
358
+ * Faltungen entscheiden „der erste gilt".
359
+ *
360
+ * @param bereitsImSnapshot Wie viele ausstehende Ereignisse der Aufrufer beim
361
+ * Aussieben verworfen hat. Nur zur Meldung.
362
+ */
363
+ declare function mergeSnapshotAndPending(snapshot: SzenenSnapshot | null, pending: readonly ElementEvent[], bereitsImSnapshot?: number): SzenenLeseErgebnis;
364
+
9
365
  /** Rohes JSON-Schema, wie es in der Spezifikation steht. */
10
366
  type RawSchema = Record<string, unknown>;
11
367
  /** Alle Typschemas der Domain, geschluesselt nach Dateiname wie in der Quelle. */
@@ -632,311 +988,99 @@ interface VisibilityNode {
632
988
  state: string;
633
989
  reason?: string;
634
990
  confidence?: string;
635
- assumption?: boolean;
636
- }
637
- interface PromptRunOutput {
638
- positive: string;
639
- negative: string | null;
640
- /** Pflicht (D-55) — die Erläuterung für den Menschen. */
641
- feedback: string;
642
- visibility: {
643
- basis: string;
644
- nodes: readonly VisibilityNode[];
645
- assumptions: readonly string[];
646
- };
647
- notes: readonly string[];
648
- }
649
- /** Warum ein Lauf gescheitert ist — die Klassen aus §4.9.1. */
650
- type RunFailureClass = 'response_parse' | 'response_schema' | 'safety_blocked' | 'finish_reason' | 'empty_content' | 'provider_error';
651
- interface RunFailure {
652
- class: RunFailureClass;
653
- message: string;
654
- provider_detail?: unknown;
655
- }
656
- /**
657
- * Ergebnis eines Laufs — **beide Ausgänge werden gespeichert**.
658
- *
659
- * Ein Fehlerlauf ist der Nachweis, dass eine bestimmte Kombination beim
660
- * Provider anstößt (D-23 §6). Ihn zu verwerfen hieße, genau diese Information
661
- * zu vernichten.
662
- */
663
- type PromptRunOutcome = {
664
- status: 'succeeded';
665
- output: PromptRunOutput;
666
- raw_output: string;
667
- model_id: string;
668
- provider: string;
669
- } | {
670
- status: 'failed';
671
- failure: RunFailure;
672
- raw_output: string | null;
673
- model_id: string;
674
- provider: string;
675
- };
676
- /**
677
- * Der Systemprompt des Renderers.
678
- *
679
- * Bewusst als eigene Funktion und mitgespeichert: D-22 verlangt, dass ein Lauf
680
- * einfriert, unter welchen Annahmen er entstand — der Systemprompt gehört dazu.
681
- * Ändert er sich, ist an einem alten Lauf noch erkennbar, was damals galt.
682
- */
683
- declare function buildSystemInstruction(input: RendererInput): string;
684
- /** Die Nutzernachricht: die Renderer-Eingabe als JSON (D-47). */
685
- declare function buildUserPrompt(input: RendererInput): string;
686
- /**
687
- * Löst das JSON aus dem Text.
688
- *
689
- * Bewusst **ohne** die für Prosa gedachte Bereinigung aus `cleanAiResponse`
690
- * (D-56): Sie ist für Fließtext gebaut und darf ein JSON-Dokument nicht
691
- * anfassen. Erlaubt ist einzig, einen umschließenden Markdown-Codeblock zu
692
- * entfernen — das ist keine Interpretation des Inhalts, sondern das Auspacken
693
- * eines Umschlags.
694
- */
695
- declare function parseRunResponse(raw: string): {
696
- ok: true;
697
- value: unknown;
698
- } | {
699
- ok: false;
700
- message: string;
701
- };
702
- /**
703
- * Prüft die geparste Antwort gegen ihr Schema **und** gegen die Pflichtdiagnosen.
704
- *
705
- * Handgeschrieben und nicht über die JSON-Schema-Registry: Die Registry führt
706
- * die **Elementtypen** der Domain (`schemas/`), und die Antwort des Renderers
707
- * ist kein Elementtyp. Sie dort einzuhängen hieße, den Schemasatz um etwas zu
708
- * erweitern, das nie versioniert oder referenziert wird.
709
- */
710
- declare function checkRunResponse(value: unknown, input: RendererInput): {
711
- ok: true;
712
- output: PromptRunOutput;
713
- } | {
714
- ok: false;
715
- message: string;
716
- };
717
- /**
718
- * Führt den Prompt-Ableitungslauf aus.
719
- *
720
- * Gibt **immer** ein Ergebnis zurück — `succeeded` oder `failed`. Ein
721
- * technischer Ausfall des Ports (Netz, Konfiguration) wirft dagegen; er ist
722
- * kein Lauf, sondern ein Betriebsfehler und darf nicht als „das Modell hat
723
- * abgelehnt" gespeichert werden.
724
- */
725
- declare function runPromptDerivation(input: RendererInput, port: TextGenerationPort): Promise<PromptRunOutcome & {
726
- system_prompt: string;
727
- }>;
728
-
729
- /** Präfix aller Events dieser Domain im gemeinsamen HF-Event-Kanal. */
730
- declare const SZENEN_EVENT_PREFIX = "szenen.";
731
- declare const SZENEN_EVENT_TYPES: {
732
- readonly elementCreated: "szenen.element_created";
733
- readonly elementRetired: "szenen.element_retired";
734
- readonly metadataRevised: "szenen.element_metadata_revised";
735
- readonly draftWritten: "szenen.element_draft_written";
736
- readonly versionPublished: "szenen.element_version_published";
737
- readonly preferredHeadSelected: "szenen.element_preferred_head_selected";
738
- /**
739
- * Ein Prompt-Ableitungslauf — Stufe 3, S6 (E-3b).
740
- *
741
- * Ein Lauf ist **kein Element**: keine Version, kein DAG, nicht
742
- * referenzierbar. Er liegt trotzdem im selben autoritativen Log, weil er
743
- * append-only und unveränderlich ist — genau die Form, die ein Ereignislog
744
- * nativ trägt — und weil MySQL sonst zu einem zweiten fachlichen Speicher
745
- * würde, den D-62 abgeschafft hat.
746
- *
747
- * Der Elementreducer ignoriert diesen Typ (`default:`-Zweig); die Läufe
748
- * werden mit `collectPromptRuns` gelesen.
749
- */
750
- readonly promptRunRecorded: "szenen.prompt_run_recorded";
751
- /**
752
- * Ein Szenen-Rekonstruktionslauf — Stufe 6.5 (D-71).
753
- *
754
- * Derselbe Bauplan und dieselbe Begründung wie beim Prompt-Lauf: append-only,
755
- * unveränderlich, **kein Element** — keine Version, kein DAG, nicht
756
- * referenzierbar. Er liegt im autoritativen Log, weil er genau die Form hat,
757
- * die ein Ereignislog nativ trägt.
758
- *
759
- * Bewusst ein zweiter Lauftyp und **kein** gemeinsamer: Ein Prompt-Lauf geht
760
- * von einer veröffentlichten Shot-Version aus, ein Rekonstruktionslauf von
761
- * einer Referenz, die noch zu gar keinem Element gehört. Sie in einen Typ zu
762
- * zwingen hieße, beiden ihre Herkunftsfelder zu nehmen.
763
- *
764
- * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig).
765
- */
766
- readonly sceneDerivationRecorded: "szenen.scene_derivation_recorded";
767
- /**
768
- * Ein ausdrücklich ausgelöster Lauf gegen den **echten** Provider.
769
- *
770
- * Er kostet Geld und wird deshalb nie beiläufig gefahren. Das Ereignis hält
771
- * fest, was tatsächlich bezahlt wurde: wie viele Modellaufrufe, mit welchem
772
- * Ausgang, in welcher Umgebung und von wem ausgelöst.
773
- *
774
- * Es ersetzt **nicht** die einzelnen Läufe — die werden regulär als
775
- * `prompt_run_recorded` bzw. `scene_derivation_recorded` protokolliert. Es
776
- * ist die Klammer darüber und der Grund, warum jemand später nachlesen kann,
777
- * ob der Durchstich stattgefunden hat, ohne ihn erneut zu bezahlen.
778
- */
779
- readonly providerCheckRecorded: "szenen.provider_check_recorded";
780
- /**
781
- * Eine geprüfte Arbeitsfassung eines fehlgeschlagenen Rekonstruktionslaufs —
782
- * Stufe 6.6 (D-99).
783
- *
784
- * Sie ist **kein Lauf**: kein Provideraufruf, keine Kosten, kein Zielmodell.
785
- * Sie ist die lokal geprüfte Korrektur eines bereits bezahlten Ergebnisses
786
- * und zeigt über `run_id` auf ihren Ursprung. Der `raw_output` jenes Laufs
787
- * bleibt unangetastet — deshalb ein eigenes Ereignis statt einer Änderung am
788
- * bestehenden, das es ohnehin nicht geben dürfte (D-71).
789
- *
790
- * Mehrere Rettungen zum selben Lauf sind zulässig und erwartet: Jede
791
- * Korrekturrunde ist nachvollziehbare Arbeit, kein Update der vorigen.
792
- *
793
- * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig).
794
- */
795
- readonly sceneDerivationRecoveryRecorded: "szenen.scene_derivation_recovery_recorded";
796
- /**
797
- * Ein bezahlter Bildgenerierungsauftrag beginnt — Stufe 6.7 (D-119).
798
- *
799
- * Append-only wie jedes andere Ereignis dieser Domain, geschrieben **vor**
800
- * dem Provideraufruf. Es traegt **keine Bilddaten** — nur die Kennung, mit
801
- * der die spaetere kanonische Batch-Persistenz (`saveGeneratedAssetBatch`,
802
- * Teil C) wiedergefunden wird. Ein Crash zwischen diesem Ereignis und
803
- * `imageGenerationFinished` loescht den Auftrag nicht: Er bleibt lesbar,
804
- * ohne dass irgendein automatischer Retry darauf reagiert.
805
- *
806
- * Gilt nur fuer `generated_in_app` — ein externer Import (D-108/D-117)
807
- * ruft keinen Provider und braucht deshalb kein `started`; sein Nachweis
808
- * ist das gespeicherte Library-Item selbst.
809
- *
810
- * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig); gelesen
811
- * wird mit `collectImageGenerationOrders`.
812
- */
813
- readonly imageGenerationStarted: "szenen.image_generation_started";
814
- /**
815
- * Derselbe Bildgenerierungsauftrag endet — Stufe 6.7 (D-119).
816
- *
817
- * Erscheint erst **nach** der kanonischen Batch-Persistenz: Ein technischer
818
- * Fehler zwischen Provideraufruf und Speichern darf nie als `succeeded`
819
- * protokolliert werden, nur weil der Provider geantwortet hat. Traegt
820
- * ebenfalls keine Bilddaten — nur Status, Zaehlung und die Item-Kennung,
821
- * falls eine entstand.
822
- */
823
- readonly imageGenerationFinished: "szenen.image_generation_finished";
824
- /**
825
- * Ein Bild-Batch ist kanonisch gespeichert — Stufe 6.9.2, Gate D
826
- * (D-6.9.2-6).
827
- *
828
- * Erscheint erst, **nachdem** jedes Bild des Batches im Bildbestand liegt
829
- * (`hfUploadImage` + `image_added`, dieselbe Reihenfolge wie
830
- * `hfImageLibrary.putImage`) — kein Bild gilt als vorhanden, bevor sein
831
- * Upload bestätigt ist (R3). Trägt bewusst **keine Bilddaten**, nur den
832
- * vollständigen Metadatennachweis, den `listBatchesForPromptRun()` /
833
- * `getBatch()` ohne MySQL rekonstruieren können müssen: `item_id`,
834
- * `prompt_run_id`, `generation_batch_id`, `source_kind`, je Bild
835
- * `position`, `media_ref`, `asset_id`, `model`, `seed`, `width`/`height`.
836
- *
837
- * Additiv wie jedes Ereignis dieser Domain: ein zweiter Batch desselben
838
- * Laufs ist ein **weiteres** Ereignis mit derselben `item_id`, nicht eine
839
- * Änderung am ersten (D-113/D-121 — ein Lauf bleibt ein Item). Gilt für
840
- * `generated_in_app` **und** `external_import` — nur `source_kind`
841
- * unterscheidet die beiden Schreiber (D-116/D-117/D-120).
842
- *
843
- * Der Elementreducer ignoriert auch diesen Typ (`default:`-Zweig); gelesen
844
- * wird mit `collectImageBatches` (`imageBatchStore.ts`).
845
- */
846
- readonly imageBatchPersisted: "szenen.image_batch_persisted";
847
- };
848
- /** Ein einzelnes Bild innerhalb von `ImageBatchPersistedPayload` (D-6.9.2-6). */
849
- interface ImageBatchPersistedImage {
850
- position: number;
851
- /** Im aktuellen Host auflösbarer Locator — hier die HF-Bildkennung (D-93). */
852
- media_ref: string;
853
- /** Fachlich stabile Identität, soweit bekannt — hier identisch mit `media_ref` (D-118). */
854
- asset_id?: string;
855
- /**
856
- * Der **bestätigte** MIME-Typ der abgelegten Datei — Review 2026-08-18 §5 P2.
857
- *
858
- * Additiv nachgetragen, weil der Batch ihn beim Schreiben kennt, ihn aber
859
- * nicht führte: Der Lesepfad musste die Dateiendung deshalb über zwei
860
- * Varianten erraten. Geraten wird nichts mehr — der Typ stammt aus den
861
- * tatsächlichen Bildbytes (`typAusBytes`), nicht aus einer Annahme, und
862
- * bestimmt den Pfad `images/<id>.<ext>`, unter dem die Datei liegt.
863
- *
864
- * Optional, weil ältere Ereignisse ihn nicht tragen; für die fällt der
865
- * Lesepfad auf den Bestandseintrag zurück.
866
- */
867
- mime_type?: string | null;
868
- model?: string | null;
869
- /** Nur gesetzt, wenn der Provider ihn tatsächlich zurückliefert (D-107). */
870
- seed?: number | null;
871
- width?: number | null;
872
- height?: number | null;
873
- }
874
- /** Nutzlast von `imageBatchPersisted` — geschrieben nach bestätigtem Bild-Upload. */
875
- interface ImageBatchPersistedPayload {
876
- item_id: string;
877
- prompt_run_id: string;
878
- generation_batch_id: string;
879
- source_kind: 'generated_in_app' | 'external_import';
880
- title: string;
881
- images: readonly ImageBatchPersistedImage[];
882
- created_at: string;
883
- }
884
- /**
885
- * Ein Event, wie der Reducer es sieht.
886
- *
887
- * Nur `type`, `payload` und `clientId` sind fachlich. `ts` dient allein der
888
- * **Lesereihenfolge** des Logs und darf nie eine fachliche Vorrangfrage
889
- * entscheiden — sonst wäre es `MAX(ts)` durch die Hintertür (§2.5, R-3).
890
- */
891
- interface ElementEvent<P = unknown> {
892
- type: string;
893
- payload: P;
894
- clientId: string;
895
- ts: number;
991
+ assumption?: boolean;
896
992
  }
897
- /** Ein Befund beim Falten: etwas ist widersprüchlich, aber der Zustand bleibt lesbar. */
898
- interface ReducerFinding {
899
- code: 'unbekanntes_element' | 'version_doppelt' | 'version_veraendert' | 'draft_fork' | 'metadata_fork' | 'preferred_head_fork' | 'element_doppelt';
900
- element_id: string;
901
- message: string;
993
+ interface PromptRunOutput {
994
+ positive: string;
995
+ negative: string | null;
996
+ /** Pflicht (D-55) — die Erläuterung für den Menschen. */
997
+ feedback: string;
998
+ visibility: {
999
+ basis: string;
1000
+ nodes: readonly VisibilityNode[];
1001
+ assumptions: readonly string[];
1002
+ };
1003
+ notes: readonly string[];
902
1004
  }
903
- /** Abgeleiteter Zustand über alle Elemente. */
904
- interface ElementStoreState {
905
- elements: ReadonlyMap<string, ElementSnapshot>;
906
- findings: readonly ReducerFinding[];
1005
+ /** Warum ein Lauf gescheitert ist — die Klassen aus §4.9.1. */
1006
+ type RunFailureClass = 'response_parse' | 'response_schema' | 'safety_blocked' | 'finish_reason' | 'empty_content' | 'provider_error';
1007
+ interface RunFailure {
1008
+ class: RunFailureClass;
1009
+ message: string;
1010
+ provider_detail?: unknown;
907
1011
  }
908
1012
  /**
909
- * Faltet den Event-Log zum Elementzustand.
1013
+ * Ergebnis eines Laufs — **beide Ausgänge werden gespeichert**.
910
1014
  *
911
- * Der Reducer ist rein: gleiche Events, gleicher Zustand — unabhängig von der
912
- * Eingabereihenfolge.
1015
+ * Ein Fehlerlauf ist der Nachweis, dass eine bestimmte Kombination beim
1016
+ * Provider anstößt (D-23 §6). Ihn zu verwerfen hieße, genau diese Information
1017
+ * zu vernichten.
1018
+ */
1019
+ type PromptRunOutcome = {
1020
+ status: 'succeeded';
1021
+ output: PromptRunOutput;
1022
+ raw_output: string;
1023
+ model_id: string;
1024
+ provider: string;
1025
+ } | {
1026
+ status: 'failed';
1027
+ failure: RunFailure;
1028
+ raw_output: string | null;
1029
+ model_id: string;
1030
+ provider: string;
1031
+ };
1032
+ /**
1033
+ * Der Systemprompt des Renderers.
913
1034
  *
914
- * @param events Alle bekannten Szenen-Events; fremde Typen werden übergangen.
1035
+ * Bewusst als eigene Funktion und mitgespeichert: D-22 verlangt, dass ein Lauf
1036
+ * einfriert, unter welchen Annahmen er entstand — der Systemprompt gehört dazu.
1037
+ * Ändert er sich, ist an einem alten Lauf noch erkennbar, was damals galt.
915
1038
  */
916
- declare function reduceElementEvents(events: readonly ElementEvent[]): ElementStoreState;
917
- /** Aktuelle Revision des Entwurfs. `0`, wenn keiner existiert. */
918
- declare function draftRevisionOf(snapshot: ElementSnapshot | null | undefined): number;
1039
+ declare function buildSystemInstruction(input: RendererInput): string;
1040
+ /** Die Nutzernachricht: die Renderer-Eingabe als JSON (D-47). */
1041
+ declare function buildUserPrompt(input: RendererInput): string;
919
1042
  /**
920
- * Quellrevision eines gelesenen Event-Logs (D-62 §2.4, D-63 §1.1.2).
1043
+ * Löst das JSON aus dem Text.
921
1044
  *
922
- * Die Projektion darf sich nur dann `current` nennen, wenn sie belegen kann,
923
- * **bis wohin** sie reicht. Dieser Beleg ist die Quellrevision, und sie muss
924
- * zwei Eigenschaften haben: aus dem Log allein berechenbar (sonst wäre sie eine
925
- * zweite Buchführung) und für zwei verschiedene Logstände verschieden.
1045
+ * Bewusst **ohne** die für Prosa gedachte Bereinigung aus `cleanAiResponse`
1046
+ * (D-56): Sie ist für Fließtext gebaut und darf ein JSON-Dokument nicht
1047
+ * anfassen. Erlaubt ist einzig, einen umschließenden Markdown-Codeblock zu
1048
+ * entfernen — das ist keine Interpretation des Inhalts, sondern das Auspacken
1049
+ * eines Umschlags.
1050
+ */
1051
+ declare function parseRunResponse(raw: string): {
1052
+ ok: true;
1053
+ value: unknown;
1054
+ } | {
1055
+ ok: false;
1056
+ message: string;
1057
+ };
1058
+ /**
1059
+ * Prüft die geparste Antwort gegen ihr Schema **und** gegen die Pflichtdiagnosen.
926
1060
  *
927
- * Beides leistet `Anzahl@größter-Zeitstempel`. Der Log ist append-only — es
928
- * verschwindet nie ein Event —, also wächst die Anzahl bei jedem Schreibvorgang.
929
- * Der Zeitstempel kommt dazu, weil er den Stand für einen Menschen lesbar macht;
930
- * entscheidend ist die Anzahl.
1061
+ * Handgeschrieben und nicht über die JSON-Schema-Registry: Die Registry führt
1062
+ * die **Elementtypen** der Domain (`schemas/`), und die Antwort des Renderers
1063
+ * ist kein Elementtyp. Sie dort einzuhängen hieße, den Schemasatz um etwas zu
1064
+ * erweitern, das nie versioniert oder referenziert wird.
1065
+ */
1066
+ declare function checkRunResponse(value: unknown, input: RendererInput): {
1067
+ ok: true;
1068
+ output: PromptRunOutput;
1069
+ } | {
1070
+ ok: false;
1071
+ message: string;
1072
+ };
1073
+ /**
1074
+ * Führt den Prompt-Ableitungslauf aus.
931
1075
  *
932
- * Bewusst **kein** Hash über die Payloads: der wäre teurer und würde
933
- * Gleichheit über die Zeit versprechen, die der Log ohnehin schon garantiert.
934
- * Und bewusst hier, nicht im Server: der Projektor rechnet damit, und wer den
935
- * Stand prüfen will, soll dieselbe Rechnung fahren (R-2).
1076
+ * Gibt **immer** ein Ergebnis zurück — `succeeded` oder `failed`. Ein
1077
+ * technischer Ausfall des Ports (Netz, Konfiguration) wirft dagegen; er ist
1078
+ * kein Lauf, sondern ein Betriebsfehler und darf nicht als „das Modell hat
1079
+ * abgelehnt" gespeichert werden.
936
1080
  */
937
- declare function logRevisionOf(events: readonly ElementEvent[]): string;
938
- /** Aktuelle Revision der Preferred-Head-Auswahl eines Kontexts. `0`, wenn keine existiert. */
939
- declare function preferredHeadRevisionOf(events: readonly ElementEvent[], elementId: string, contextId: string): number;
1081
+ declare function runPromptDerivation(input: RendererInput, port: TextGenerationPort): Promise<PromptRunOutcome & {
1082
+ system_prompt: string;
1083
+ }>;
940
1084
 
941
1085
  /** Ein protokollierter Lauf, so wie er im Ereignis steht. */
942
1086
  /**
@@ -1824,19 +1968,58 @@ declare const UNCHECKED_PUBLISH_RULES: readonly string[];
1824
1968
  */
1825
1969
  declare function createHfElementStore(options: CreateHfElementStoreOptions): AuthoritativeSzenenStore & ChainQueries;
1826
1970
 
1971
+ /**
1972
+ * Der HF-Kanal kann mehr als der hostneutrale `ElementEventChannel`: Er kann
1973
+ * seinen Kopf-Commit nennen und gegen ihn schreiben.
1974
+ *
1975
+ * Das ist **keine** Erweiterung des allgemeinen Vertrags. Ein Kanal ohne
1976
+ * Versionsbegriff — der Dateilog, der Speicherkanal — kann das nicht, und
1977
+ * fordern darf es deshalb nur, wer es wirklich braucht: die exklusive
1978
+ * Auftragsuebernahme (Kette `szenen-mcp-chatgpt-flow`).
1979
+ */
1980
+ interface RevisionAwareEventChannel extends ElementEventChannel {
1981
+ /** Der aktuelle Kopf-Commit des Bestands. */
1982
+ readHead(): Promise<string>;
1983
+ /**
1984
+ * Die Ereignisse **bei genau dieser Revision**.
1985
+ *
1986
+ * Der Unterschied zu `readEvents()` ist die Dateiliste: Sie wird an die
1987
+ * Revision gebunden, statt „irgendwann waehrend der Anfrage" zu gelten. Nur
1988
+ * damit passt der gelesene Stand zu dem `parentCommit`, gegen den danach
1989
+ * geschrieben wird — sonst koennte die Liste ein Ereignis uebersehen, das
1990
+ * beim Kopf schon da war, und der Schreibvorgang ginge trotzdem durch.
1991
+ */
1992
+ readEventsAt(revision: string): Promise<readonly ElementEvent[]>;
1993
+ /**
1994
+ * Anhaengen, aber nur wenn der Bestand noch auf `parentCommit` steht.
1995
+ *
1996
+ * Wirft `HfPreconditionFailedError`, wenn nicht — und schreibt dann nichts.
1997
+ */
1998
+ appendEventAt(type: string, payload: unknown, parentCommit: string): Promise<void>;
1999
+ }
1827
2000
  interface CreateHfEventChannelOptions {
1828
2001
  /** HF-Namespace mit abschließendem Schrägstrich, wie in `hfStateService`. */
1829
2002
  namespace: string;
1830
2003
  token: string;
1831
2004
  /**
1832
- * Nur Events ab diesem Zeitpunkt lesen. Vorgabe `0` — der vollständige Log.
2005
+ * Nur Events ab diesem Zeitpunkt lesen. Vorgabe `0` — ab dem Snapshot.
1833
2006
  *
1834
- * Ein Snapshot-Mechanismus wie `loadHFState` für Bilder gibt es für Elemente
1835
- * noch nicht; solange bleibt der volle Log die einzige Wahrheit. Das ist der
1836
- * Punkt, an dem der Server später beschleunigt (R-2), ohne die einzige
1837
- * Stelle zu werden, an der eine Invariante gilt.
2007
+ * Seit D-136 Schritt B gibt es den Snapshot-Mechanismus, den diese Option
2008
+ * lange vorwegnahm: `szenen-state-<ts>.json` trägt die vom Verdichtungslauf
2009
+ * aufgenommenen Ereignisse, und der Kanal liest danach nur noch, was seither
2010
+ * dazukam. Ein ausdrücklich gesetztes `sinceTs` gilt zusätzlich — es kann den
2011
+ * Schnitt nur nach hinten schieben, nie vor den Snapshot zurück.
1838
2012
  */
1839
2013
  sinceTs?: number;
2014
+ /**
2015
+ * Den Snapshot übergehen und den vollen `events/`-Bestand lesen.
2016
+ *
2017
+ * Für den Verdichtungslauf selbst und für Diagnosewerkzeuge. Im Normalbetrieb
2018
+ * **nicht** setzen: Nach einer Verdichtung liegt der grösste Teil des Logs
2019
+ * im Snapshot, und ohne ihn läse der Kanal einen unvollständigen Stand — also
2020
+ * eine zu kleine Quellrevision (D-62 §2.4).
2021
+ */
2022
+ ohneSnapshot?: boolean;
1840
2023
  }
1841
2024
  /**
1842
2025
  * Baut einen `ElementEventChannel` auf dem HF-Dataset.
@@ -1844,7 +2027,7 @@ interface CreateHfEventChannelOptions {
1844
2027
  * Erfordert nur einen HF-Token — kein Server, keine Datenbank. Das ist die
1845
2028
  * Zusage von R-2 für Flow-FA Pure.
1846
2029
  */
1847
- declare function createHfEventChannel(options: CreateHfEventChannelOptions): ElementEventChannel;
2030
+ declare function createHfEventChannel(options: CreateHfEventChannelOptions): RevisionAwareEventChannel;
1848
2031
 
1849
2032
  interface InMemoryEventChannel extends ElementEventChannel {
1850
2033
  /** Der rohe Log, für Prüfungen. */
@@ -1860,6 +2043,15 @@ interface CreateInMemoryEventChannelOptions {
1860
2043
  now?: () => number;
1861
2044
  /** Gemeinsamer Log, wenn mehrere Clients denselben Kanal teilen. */
1862
2045
  shared?: ElementEvent[];
2046
+ /**
2047
+ * Ein bereits verdichteter Stand (D-136 Schritt B).
2048
+ *
2049
+ * Der Kanalvertrag lautet seither „Snapshot + ausstehende Ereignisse", und er
2050
+ * gilt für alle drei Implementierungen. Ohne diese Option liesse sich das
2051
+ * hier nicht prüfen — und der Contract-Test wäre genau an der Stelle blind,
2052
+ * an der ein Verdichtungslauf den Bestand verändert.
2053
+ */
2054
+ snapshot?: SzenenSnapshot | null;
1863
2055
  }
1864
2056
  declare function createInMemoryEventChannel(options?: CreateInMemoryEventChannelOptions): InMemoryEventChannel;
1865
2057
 
@@ -2262,6 +2454,190 @@ interface CreateImageGenerationPortOptions {
2262
2454
  /** Der gemeinsame Bildgenerierungs-Port. */
2263
2455
  declare function createImageGenerationPort(options: CreateImageGenerationPortOptions): SzenenImageGenerationPort;
2264
2456
 
2457
+ /** Nutzlast von `imageJobRequested` — geschrieben beim MCP-Auftrag. */
2458
+ interface ImageJobRequestedPayload {
2459
+ job_id: string;
2460
+ prompt_run_id: string;
2461
+ /** Das Zielmodell, mit dem ausgefuehrt werden soll — ausdruecklich (D-131). */
2462
+ execution_target_model_key: string;
2463
+ /** Dessen Ausfuehrungsprofil; die Faehigkeiten kommen von dort, nicht vom MCP. */
2464
+ execution_profile_id: string;
2465
+ image_count: number;
2466
+ aspect_ratio?: string;
2467
+ /** Wer beauftragt hat — der kanonische Nutzerschluessel des Aufrufers. */
2468
+ requested_by: string;
2469
+ /**
2470
+ * Die Kennung des Bestands, in dem dieser Auftrag gilt — `hf:<namespace>`
2471
+ * bzw. `file:<verzeichnis>`, dieselbe Form, an der die Projektionsschranke
2472
+ * misst.
2473
+ *
2474
+ * Ein Auftrag ist an Nutzer **und** Bestand gebunden. Ein Host auf einem
2475
+ * anderen Bestand sieht ihn gar nicht erst; einer, der ihn doch faende,
2476
+ * schriebe sein Ergebnis dorthin, wo der Auftraggeber nicht sucht.
2477
+ */
2478
+ store_id: string;
2479
+ created_at: string;
2480
+ }
2481
+ /** Nutzlast von `imageJobClaimed` — der Anspruch eines Flow-Hosts. */
2482
+ interface ImageJobClaimedPayload {
2483
+ job_id: string;
2484
+ claim_id: string;
2485
+ /** Der Client, der beansprucht — zwei Tabs sind zwei Clients. */
2486
+ client_id: string;
2487
+ claimed_at: string;
2488
+ }
2489
+ /** Nutzlast von `imageJobSettled` — der Ausgang der Zustellung. */
2490
+ interface ImageJobSettledPayload {
2491
+ job_id: string;
2492
+ claim_id: string;
2493
+ status: 'succeeded' | 'partial' | 'failed' | 'rejected';
2494
+ /** Der Batch des bezahlten Aufrufs, sofern einer entstand. */
2495
+ generation_batch_id?: string;
2496
+ /** Das Library-Item des Batches, sofern eines entstand. */
2497
+ item_id?: string;
2498
+ produced_count?: number;
2499
+ diagnostic?: string;
2500
+ settled_at: string;
2501
+ }
2502
+ /**
2503
+ * Der Auftrag, wie ein Leser ihn sieht.
2504
+ *
2505
+ * `claimed` heisst „ein Host fuehrt aus **oder** ist dabei abgebrochen" — aus
2506
+ * dem Log allein ist das nicht unterscheidbar, genau wie bei `started` in
2507
+ * `ImageGenerationOrder`. Das ist Absicht und kein Mangel: Ein Zustand, der
2508
+ * beides trennte, muesste eine Lebendigkeit behaupten, die niemand belegt.
2509
+ */
2510
+ interface ImageJob {
2511
+ job_id: string;
2512
+ prompt_run_id: string;
2513
+ execution_target_model_key: string;
2514
+ execution_profile_id: string;
2515
+ image_count: number;
2516
+ aspect_ratio?: string;
2517
+ requested_by: string;
2518
+ store_id: string;
2519
+ created_at: string;
2520
+ status: 'pending' | 'claimed' | 'succeeded' | 'partial' | 'failed' | 'rejected';
2521
+ /** Der massgebliche Anspruch — der erste in Logreihenfolge. */
2522
+ claim?: ImageJobClaimedPayload;
2523
+ /** Alle Anspruechenden, auch die unterlegenen. Ein Versuch ist ein Beleg. */
2524
+ claim_attempts: readonly ImageJobClaimedPayload[];
2525
+ generation_batch_id?: string;
2526
+ item_id?: string;
2527
+ produced_count?: number;
2528
+ diagnostic?: string;
2529
+ settled_at?: string;
2530
+ }
2531
+ /**
2532
+ * Liest alle Bildauftraege aus dem Ereignislog.
2533
+ *
2534
+ * Drei Durchgaenge in fester Reihenfolge — Auftrag, Anspruch, Abschluss —,
2535
+ * damit ein Ereignis nie einen Auftrag erfindet, den es nicht gibt: Ein
2536
+ * Anspruch oder Abschluss ohne `requested` wird ignoriert, genauso wie
2537
+ * `collectImageGenerationOrders` ein `finished` ohne `started` ignoriert.
2538
+ */
2539
+ declare function collectImageJobs(events: readonly ElementEvent[]): readonly ImageJob[];
2540
+ /** Alle Auftraege eines Prompt-Laufs, in Erfassungsreihenfolge. */
2541
+ declare function jobsForPromptRun(events: readonly ElementEvent[], runId: string): readonly ImageJob[];
2542
+ /** Ein einzelner Auftrag, oder `null`. */
2543
+ declare function findImageJob(events: readonly ElementEvent[], jobId: string): ImageJob | null;
2544
+ /**
2545
+ * Ob dieser Anspruch der massgebliche ist.
2546
+ *
2547
+ * Die eine Frage, die ein Flow-Host nach seinem Append stellen muss, bevor er
2548
+ * einen bezahlten Aufruf startet.
2549
+ */
2550
+ declare function claimWon(job: ImageJob | null, claimId: string): boolean;
2551
+ /**
2552
+ * Die Kennung des Bild-Batches eines Auftrags.
2553
+ *
2554
+ * **Aus der Auftragskennung abgeleitet und nicht gewuerfelt.** Damit ist ein
2555
+ * zweiter Ausfuehrungsversuch desselben Auftrags auch dann noch harmlos, wenn
2556
+ * er die Schiedsregel umginge: `collectImageGenerationOrders` haelt das erste
2557
+ * `started` je `generation_batch_id` fest und ignoriert jedes weitere. Zwei
2558
+ * unabhaengige Sicherungen fuer denselben teuren Fehler sind hier
2559
+ * angemessen — der Schaden ist bezahlte Rechenzeit, nicht ein Logeintrag.
2560
+ */
2561
+ declare function generationBatchIdOf(jobId: string): string;
2562
+
2563
+ /**
2564
+ * Was der Auftragskanal braucht.
2565
+ *
2566
+ * `readHead`, `readEventsAt` und `appendEventAt` sind **Pflicht**, nicht
2567
+ * optional: Ohne sie gibt es keine verbindliche Uebernahme, und ein Host, der
2568
+ * sie nicht hat, darf einen bezahlten Auftrag nicht uebernehmen. Ein
2569
+ * optionaler Rueckfall auf blosses `appendEvent` waere genau die Fassung, die
2570
+ * zwei Clients beide gewinnen liess.
2571
+ */
2572
+ interface ImageJobChannel {
2573
+ readEvents(): Promise<readonly ElementEvent[]>;
2574
+ /**
2575
+ * Der schlichte Anhang — fuer den **Abschluss**.
2576
+ *
2577
+ * Er braucht kein CAS: Nur der Gewinner schreibt ihn, und die Faltung
2578
+ * akzeptiert ohnehin nur den Abschluss des massgeblichen Anspruchs.
2579
+ */
2580
+ appendEvent(type: string, payload: unknown): Promise<void>;
2581
+ /** Der aktuelle Kopf-Commit des Bestands. */
2582
+ readHead(): Promise<string>;
2583
+ /** Die Ereignisse bei genau dieser Revision — die Liste ist daran gebunden. */
2584
+ readEventsAt(revision: string): Promise<readonly ElementEvent[]>;
2585
+ /** Anhaengen, aber nur wenn der Bestand noch auf `parentCommit` steht. */
2586
+ appendEventAt(type: string, payload: unknown, parentCommit: string): Promise<void>;
2587
+ }
2588
+ /** Die Ausgaenge einer Uebernahme. */
2589
+ type ClaimAndRunResult =
2590
+ /** Uebernommen und ausgefuehrt — der Ausgang steht im Auftrag. */
2591
+ {
2592
+ kind: 'ok';
2593
+ job: ImageJob;
2594
+ }
2595
+ /**
2596
+ * Ein anderer Client hat den Auftrag. **Kein Fehler**: Genau dafuer gibt es
2597
+ * die Schiedsregel, und dieser Client hat nichts bezahlt.
2598
+ */
2599
+ | {
2600
+ kind: 'lost';
2601
+ job: ImageJob;
2602
+ message: string;
2603
+ }
2604
+ /** Fachlich abgelehnt — falscher Zustand, falscher Bestand, kein Auftrag. */
2605
+ | {
2606
+ kind: 'rejected';
2607
+ message: string;
2608
+ }
2609
+ /** Technisch gescheitert; der Bestand ist in Ordnung, der Zugriff nicht. */
2610
+ | {
2611
+ kind: 'error';
2612
+ message: string;
2613
+ retryable: boolean;
2614
+ };
2615
+ interface SzenenImageJobPort {
2616
+ /** Die Auftraege eines Prompt-Laufs, aus dem autoritativen Log. */
2617
+ listJobs(runId: string): Promise<QueryResult<readonly ImageJob[]>>;
2618
+ /** Beansprucht einen wartenden Auftrag und fuehrt ihn als Gewinner aus. */
2619
+ claimAndRun(jobId: string): Promise<ClaimAndRunResult>;
2620
+ }
2621
+ interface CreateImageJobPortOptions {
2622
+ channel: ImageJobChannel;
2623
+ /** Der bestehende Bildgenerierungs-Port dieses Hosts (D-116/D-119). */
2624
+ imageGeneration: SzenenImageGenerationPort;
2625
+ /**
2626
+ * Die Bestandskennung dieses Hosts — `hf:<namespace>`.
2627
+ *
2628
+ * Sie wird gegen die des Auftrags geprueft. Nutzer, Umgebung und Bestand
2629
+ * muessen zusammenpassen; ein Host, der einen fremden Auftrag ausfuehrte,
2630
+ * schriebe sein Ergebnis in einen Bestand, in dem es niemand sucht.
2631
+ */
2632
+ storeId: string;
2633
+ /** Diese Sitzung. Zwei Tabs sind zwei Clients — sonst sind sie ununterscheidbar. */
2634
+ clientId: string;
2635
+ newClaimId?: () => string;
2636
+ now?: () => Date;
2637
+ }
2638
+ /** Der Uebernahmeweg als Port. */
2639
+ declare function createImageJobPort(options: CreateImageJobPortOptions): SzenenImageJobPort;
2640
+
2265
2641
  /** Eine benannte Seedliste, wie der Nutzer sie im Dropdown sieht. */
2266
2642
  interface SeedVorlage {
2267
2643
  /** Fehlt bei der eingebauten Vorlage — sie liegt in keinem Speicher. */
@@ -3068,6 +3444,16 @@ interface SzenenViewPort {
3068
3444
  * Bildlauf starten und das Ergebnis danach verlieren.
3069
3445
  */
3070
3446
  imageGeneration?: SzenenImageGenerationPort;
3447
+ /**
3448
+ * Bildauftraege aus dem Chat uebernehmen — fehlt, wo es nichts auszufuehren
3449
+ * gibt.
3450
+ *
3451
+ * Haengt an denselben zwei Voraussetzungen wie `imageGeneration`: ohne
3452
+ * Provider und ohne kanonischen Schreibweg darf ein Host keinen bezahlten
3453
+ * Auftrag uebernehmen (D-122). Zusaetzlich braucht er den autoritativen
3454
+ * Kanal, denn die Uebernahme ist ein Append mit Gegenlesen.
3455
+ */
3456
+ imageJobs?: SzenenImageJobPort;
3071
3457
  }
3072
3458
  /**
3073
3459
  * Die Fähigkeiten eines Ports, wie die View sie abfragt.
@@ -3088,6 +3474,8 @@ interface SzenenViewCapabilities {
3088
3474
  imageOrderHistory: boolean;
3089
3475
  imageBatchWrite: boolean;
3090
3476
  imageGeneration: boolean;
3477
+ /** Bildauftraege aus dem Chat uebernehmen (Kette szenen-mcp-chatgpt-flow). */
3478
+ imageJobs: boolean;
3091
3479
  }
3092
3480
  declare function capabilitiesOf(port: SzenenViewPort): SzenenViewCapabilities;
3093
3481
  /**
@@ -3222,6 +3610,42 @@ interface GruppierbaresBild extends LibraryImage {
3222
3610
  * Locator-Position aufsteigend; die ist stabil, der Zeitstempel wäre es nicht.
3223
3611
  */
3224
3612
  declare function gruppiereZuItems(bilder: readonly GruppierbaresBild[]): readonly LibraryImageItem[];
3613
+ /** Ein Galerieeintrag, wie ihn `metadata.gallery` einer Library-Zeile fuehrt. */
3614
+ interface BestandsGalerieEintrag {
3615
+ file?: string | null;
3616
+ }
3617
+ /** Eine Library-Zeile, wie sie `/api/storage/:user/library` ausliefert. */
3618
+ interface BestandsItem {
3619
+ id: string;
3620
+ title?: string | null;
3621
+ timestamp?: number | null;
3622
+ gallery?: readonly BestandsGalerieEintrag[] | null;
3623
+ }
3624
+ /**
3625
+ * Der Locator eines Bildes — dieselbe Bildung wie `locatorVon()` auf dem
3626
+ * Server und beim Hochladen nach HF: bei einem Bild die blosse Kennung, bei
3627
+ * mehreren `${id}-${position}`. `locatorTeile` oben zerlegt genau das wieder.
3628
+ */
3629
+ declare function locatorAus(itemId: string, position: number, anzahl: number): string;
3630
+ /** Der MIME-Typ aus der Dateiendung — dieselben drei Faelle wie serverseitig. */
3631
+ declare function mimeTypAus(dateiname: string): string;
3632
+ /**
3633
+ * Library-Zeilen → Werke fuer den Bildwaehler.
3634
+ *
3635
+ * @param items Der Bestand, wie ihn der Library-Lesepfad liefert.
3636
+ * @param options `search` filtert am Titel, `limit` zaehlt **Werke** (nicht
3637
+ * Bilder), `thumbUrl` bildet die Vorschauquelle aus dem
3638
+ * Dateinamen — der Host reicht sie herein, damit diese Funktion
3639
+ * keine Adresse kennt.
3640
+ *
3641
+ * Ein Item ohne lesbaren Galerieeintrag ist kein leeres Werk, sondern gar
3642
+ * keins: eine Karte ohne Bild waere nur eine Sackgasse.
3643
+ */
3644
+ declare function itemsAusBestand(items: readonly BestandsItem[], options?: {
3645
+ search?: string;
3646
+ limit?: number;
3647
+ thumbUrl?: (dateiname: string) => string;
3648
+ }): readonly LibraryImageItem[];
3225
3649
 
3226
3650
  interface VorschauLauf {
3227
3651
  /** Wird `true`, sobald der Aufrufer das Ergebnis nicht mehr braucht. */
@@ -3444,6 +3868,17 @@ interface CreateFlowSzenenViewPortOptions {
3444
3868
  imageContextId?: () => string | null;
3445
3869
  /** Kennung je abgelegtem Batch-Bild. Ersetzbar, damit ein Test nicht würfelt. */
3446
3870
  newBatchImageId?: (generationBatchId: string, position: number) => string;
3871
+ /**
3872
+ * Diese Sitzung — die Kennung, mit der dieser Host einen Bildauftrag
3873
+ * beansprucht (Kette `szenen-mcp-chatgpt-flow`).
3874
+ *
3875
+ * **Zwei Tabs müssen zwei Clients sein**, sonst kann die Schiedsregel den
3876
+ * Doppelklick nicht vom zweiten Tab unterscheiden. Vorgabe ist deshalb eine
3877
+ * frisch gezogene Kennung je Portinstanz, kein stabiler Gerätewert.
3878
+ */
3879
+ imageJobClientId?: string;
3880
+ /** Anspruchskennung je Übernahme. Ersetzbar, damit ein Test nicht würfelt. */
3881
+ newImageJobClaimId?: () => string;
3447
3882
  }
3448
3883
  /**
3449
3884
  * Complete Flow adapter for the shared SzenenView: authoritative HF elements
@@ -3785,6 +4220,164 @@ interface TargetModelChoices {
3785
4220
  */
3786
4221
  declare function selectableTargetModels(queries: VisibilityQueries, contextChain: readonly (string | null)[]): Promise<QueryResult<TargetModelChoices>>;
3787
4222
 
4223
+ /**
4224
+ * Der Anbieter, der in einem so entstandenen Lauf steht.
4225
+ *
4226
+ * `mcp_client` und nicht `openai`/`chatgpt`: Was der Server sicher weiss, ist
4227
+ * dass **sein MCP-Aufrufer** formuliert hat. Welcher Anbieter dahinter steht,
4228
+ * sagt ihm niemand — und ein geratener Anbietername waere im Lauf spaeter
4229
+ * nicht mehr von einem belegten zu unterscheiden (D-107).
4230
+ */
4231
+ declare const MCP_CLIENT_PROVIDER = "mcp_client";
4232
+ /**
4233
+ * Die Modellkennung, wenn der Host keine belegte liefert — und das tut er nie.
4234
+ *
4235
+ * Bewusst ein sprechender Platzhalter statt einer Modellversion: `model_id`
4236
+ * ist das Feld, an dem ein Leser ablesen soll, **womit** formuliert wurde.
4237
+ * Eine dort eingetragene Selbstauskunft saehe aus wie eine belegte Kennung.
4238
+ * Die Selbstauskunft steht deshalb in `execution_origin.declared_model_id` und
4239
+ * traegt dort sichtbar, dass sie unbelegt ist.
4240
+ */
4241
+ declare const UNVERIFIED_MODEL_ID = "mcp-client-unspecified";
4242
+ /**
4243
+ * Die Herkunft der Ausfuehrung, so ehrlich wie sie belegbar ist.
4244
+ *
4245
+ * Additiv am Lauf und nicht in `model_id`/`provider` versteckt: Der
4246
+ * Unterschied zwischen „das war Modell X" und „der Aufrufer sagt, es war
4247
+ * Modell X" ist genau der, um den es geht.
4248
+ */
4249
+ interface PromptExecutionOrigin {
4250
+ /** Wer den Lauf eingereicht hat — hier immer der MCP-Werkzeugweg. */
4251
+ host: 'mcp';
4252
+ /** Was der Aufrufer ueber sich selbst gesagt hat, unveraendert und unbelegt. */
4253
+ declared_model_id?: string;
4254
+ /**
4255
+ * Ob die unten mitgegebene Renderer-Anweisung die tatsaechliche
4256
+ * Systemnachricht des formulierenden Chats war.
4257
+ *
4258
+ * Sie war es nie: Der MCP reicht sie als Werkzeugergebnis heraus; was im
4259
+ * Chat als Systemprompt stand, kennt der Server nicht. Das Feld steht
4260
+ * trotzdem im Lauf, weil `system_prompt` sonst genau so gelesen wuerde.
4261
+ */
4262
+ renderer_instruction_was_system_prompt: false;
4263
+ }
4264
+ /** Der Antwortvertrag, den der Aufrufer erfuellen muss — maschinenlesbar. */
4265
+ interface PromptResponseContract {
4266
+ format: 'json';
4267
+ /** Pflichtfelder der Antwort, wie `checkRunResponse()` sie prueft. */
4268
+ required_fields: readonly string[];
4269
+ /** Ob ein Negativ-Prompt zugesagt ist (sonst muss `negative` null bleiben). */
4270
+ negative_prompt_allowed: boolean;
4271
+ /** Jeder dieser Knoten muss in `visibility.nodes` erscheinen (D-21). */
4272
+ node_ids: readonly string[];
4273
+ /** Die Sprache, in der `positive` formuliert wird. */
4274
+ prompt_language: string;
4275
+ }
4276
+ /** Ein vorbereiteter Promptvorgang — dauerhaft unter `operation_id`. */
4277
+ interface PreparedPromptOperation {
4278
+ operation_id: string;
4279
+ /** Die eingefrorene Szene: genau ein Entwurfs- oder Versionsstand (D-135). */
4280
+ scene: FrozenSceneState;
4281
+ context_id: string | null;
4282
+ /** Die Arbeitsanweisung des Nutzers, soweit eine gegeben wurde. */
4283
+ user_instruction: string | null;
4284
+ /** Der eingefrorene `RendererInput` — woertlich der des bestehenden Pfads. */
4285
+ renderer_input: RendererInput;
4286
+ /**
4287
+ * Die Renderer-Anweisung (`buildSystemInstruction`).
4288
+ *
4289
+ * Sie ist **Material fuer den Aufrufer**, nicht sein Systemprompt. Beim
4290
+ * Abschluss landet sie unveraendert in `system_prompt` des Laufs, weil das
4291
+ * Feld seit Stufe 3 genau diese Anweisung fuehrt.
4292
+ */
4293
+ renderer_instruction: string;
4294
+ /** Die Nutzernachricht: die Renderer-Eingabe als JSON (D-47). */
4295
+ renderer_payload: string;
4296
+ response_contract: PromptResponseContract;
4297
+ prepared_by: string;
4298
+ created_at: string;
4299
+ }
4300
+ /** Nutzlast von `promptOperationPrepared`. */
4301
+ type PromptOperationPreparedPayload = PreparedPromptOperation;
4302
+ /** Liest alle vorbereiteten Vorgaenge aus dem Ereignislog. */
4303
+ declare function collectPromptOperations(events: readonly ElementEvent[]): readonly PreparedPromptOperation[];
4304
+ /** Ein einzelner vorbereiteter Vorgang, oder `null`. */
4305
+ declare function findPromptOperation(events: readonly ElementEvent[], operationId: string): PreparedPromptOperation | null;
4306
+ interface PreparePromptOperationInput {
4307
+ sceneElementId: string;
4308
+ operationId: string;
4309
+ store: ChainQueries;
4310
+ resolver: ReferenceResolver;
4311
+ contextChain: readonly (string | null)[];
4312
+ contextId: string | null;
4313
+ userInstruction?: string | null;
4314
+ preparedBy: string;
4315
+ now?: () => Date;
4316
+ }
4317
+ type PreparePromptOperationResult = {
4318
+ kind: 'ok';
4319
+ operation: PreparedPromptOperation;
4320
+ } | FreezeFailure;
4321
+ /**
4322
+ * Friert den Arbeitsstand einer Szene ein und baut daraus den Vorgang.
4323
+ *
4324
+ * Ruft **kein** Modell — hier entstehen keine Kosten. Das Einfrieren ist
4325
+ * woertlich `freezeSceneWorkingState()`, also derselbe Zwei-Durchgang-Vergleich
4326
+ * mit denselben drei Ausgaengen wie im bestehenden Pfad (D-97/D-135). Ein
4327
+ * Konflikt bleibt ein Konflikt, kein „nochmal versuchen".
4328
+ */
4329
+ declare function preparePromptOperation(input: PreparePromptOperationInput): Promise<PreparePromptOperationResult>;
4330
+ /**
4331
+ * Der Antwortvertrag, abgelesen an derselben Eingabe wie die Anweisung.
4332
+ *
4333
+ * Bewusst abgelesen und nicht danebengeschrieben: Was `checkRunResponse()
4334
+ * prueft, entscheidet allein `promptRun.ts`. Ein hier gepflegter zweiter
4335
+ * Katalog liefe irgendwann auseinander, und der Aufrufer bekaeme einen
4336
+ * Vertrag, den die Pruefung nicht kennt.
4337
+ */
4338
+ declare function responseContractOf(input: RendererInput): PromptResponseContract;
4339
+ interface CompletePromptOperationInput {
4340
+ operation: PreparedPromptOperation;
4341
+ /** Die Antwort des aufrufenden Modells, woertlich. */
4342
+ response: string;
4343
+ runId: string;
4344
+ /** Was der Aufrufer ueber sein eigenes Modell sagt — unbelegt (D-107). */
4345
+ declaredModelId?: string | null;
4346
+ now?: () => Date;
4347
+ }
4348
+ type CompletePromptOperationResult = {
4349
+ kind: 'ok';
4350
+ record: PromptRunRecord;
4351
+ } | {
4352
+ kind: 'rejected';
4353
+ message: string;
4354
+ };
4355
+ /**
4356
+ * Macht aus der Antwort des Aufrufers einen normalen Promptlauf.
4357
+ *
4358
+ * **Eine ungueltige Antwort wird nicht als gescheiterter Lauf abgelegt.** Das
4359
+ * ist der eine bewusste Unterschied zum Providerpfad, und er hat einen Grund:
4360
+ * Dort belegt ein `failed` einen **bezahlten** Aufruf, der sich nicht
4361
+ * wiederholen laesst, ohne noch einmal zu kosten (D-23 §6). Hier hat niemand
4362
+ * bezahlt — der Aufrufer hat nur falsch formuliert und kann es unter derselben
4363
+ * `operation_id` sofort richtig tun. Ein Fehlerlauf waere hier kein Nachweis,
4364
+ * sondern Muell im autoritativen Bestand, und er wuerde die Wiederholung
4365
+ * ausserdem als Konflikt blockieren.
4366
+ */
4367
+ declare function completePromptOperation(input: CompletePromptOperationInput): CompletePromptOperationResult;
4368
+ /**
4369
+ * Der Lauf, der aus diesem Vorgang schon entstanden ist — oder `null`.
4370
+ *
4371
+ * Grundlage der Idempotenz: Derselbe Vorgang mit derselben Antwort liefert
4372
+ * denselben Lauf; eine **andere** Antwort unter derselben Kennung ist ein
4373
+ * Konflikt und kein zweiter Lauf. Verglichen wird die woertliche Antwort aus
4374
+ * `raw_output` — es braucht keinen Fingerabdruck neben etwas, das der Lauf
4375
+ * ohnehin vollstaendig traegt.
4376
+ */
4377
+ declare function runOfOperation(runs: readonly PromptRunRecord[], operationId: string): PromptRunRecord | null;
4378
+ /** Ob eine eingereichte Antwort woertlich die des bereits gespeicherten Laufs ist. */
4379
+ declare function sameResponseAs(run: PromptRunRecord, response: string): boolean;
4380
+
3788
4381
  interface CreateHfImageBatchPersistenceOptions {
3789
4382
  namespace: string;
3790
4383
  token: string;
@@ -3945,4 +4538,4 @@ interface SzenenViewProps {
3945
4538
  }
3946
4539
  declare const SzenenView: React__default.FC<SzenenViewProps>;
3947
4540
 
3948
- export { type AttachLibraryItemInput, type AttachLibraryItemResult, AuthoritativeSzenenStore, CATALOGUE_TYPES, CapabilityAnchorError, type CapabilityFlag, type CapabilityFlagName, type CapabilityReason, type CapabilityReport, type CapabilityReportInput, type CapabilityScope, type CapabilityState, type ChainQueries, type ClientDerivationChannel, type ClientDerivationStore, ContextChainPort, type CreateBrowserTextGenerationPortOptions, type CreateClientDerivationPortOptions, type CreateClientRunPortOptions, type CreateFlowSzenenViewPortOptions, type CreateHfElementStoreOptions, type CreateHfEventChannelOptions, type CreateHfImageBatchHistoryOptions, type CreateHfImageBatchPersistenceOptions, type CreateImageGenerationPortOptions, type CreateMemoryViewPortOptions, DEFAULT_SEED_VORLAGE, DerivableType, DerivationAssessment, DerivationConflict, DerivationDiagnostic, DerivationFailure, DerivationImage, DerivationInputMode, type DeriveItemInput, type DerivedItem, type DerivedLineage, type DerivedRelationship, type DerivedSzenenReference, type DifferentialResult, type DifferentialStep, type Divergence, DraftChainMeta, ELEMENT_VERSION_SCHEMA_FILE, type ElementEvent, type ElementEventChannel, ElementSnapshot, type ElementStoreState, type ExecutableImageModel, type ExecutionTargetModel, type ExistingSzenenItem, FLOW_EXECUTION_PATH, type FlowGenerateImage, type FlowGenerateImageParams, FlowGenerateText, type FreezeDraftChainInput, type FreezeFailure, type FreezeResult, type FreezeSceneResult, type FreezeSceneSuccess, type FreezeSceneWorkingStateInput, type FreezeSuccess, type FrozenChainNode, type FrozenSceneState, type GeneratedImage, type GruppierbaresBild, type HfImageStore, type HfImageStoreOptions, type IdFactory, type ImageBatchPersistedImage, type ImageBatchPersistedPayload, type ImageExecutionProfile, type ImageExecutionRoute, type ImageExecutionTargetModelReader, type ImageGenerationBatchPersistence, type ImageGenerationEventChannel, type ImageGenerationFinishedPayload, type ImageGenerationOrder, type ImageGenerationProviderPort, type ImageGenerationResult, type ImageGenerationRunReader, type ImageGenerationStartedPayload, type ImageHostCapability, type ImageModelChoice, type ImageModelParameters, ImageProvenance, type ImageProviderInput, type ImportBatchImageInput, type ImportBatchInput, type InMemoryEventChannel, type InputError, type IntegrityVerdict, type ItemDerivationFailure, type ItemDerivationFailureClass, type ItemDerivationResult, type ItemMedium, type LibraryImage, type LibraryImageItem, type NodeContribution, NotDerivable, type Notice, type NoticeTone, PROMPT_RULE_EFFECT, type PromptBatchImageRef, type PromptBatchOrigin, type PromptDiagnostic, type PromptEffect, type PromptImageBatch, type PromptRunOutcome, type PromptRunOutput, type PromptRunPersistencePort, type PromptRunRecord, type PromptRunRecordedPayload, type ProviderCheckRecord, type ProviderCheckRecordedPayload, type ProviderCheckResult, PublishCheckResult, PublishFinding, RULES_WITHOUT_CAPABILITY_EFFECT, RULE_SCOPES, type RawSchema, type RecordedDerivationInput, type RecordedProposal, type RecoveryStatus, type ReducerFinding, ReferenceResolver, type RendererInput, type ResolveFailure, type ResolveResult, type ResolveScenePayloadInput, type ResolveShotInput, type ResolveShotPayloadInput, ResolveTechnicalError, type ResolvedCamera, type ResolvedNode, type ResolvedPlacement, type RunEventChannel, type RunFailure, type RunFailureClass, type RunItemReference, SZENEN_EVENT_PREFIX, SZENEN_EVENT_TYPES, SZENEN_ITEM_PREFIX, SZENEN_SCHEMAS, type SaveRunAsItemInput, type SceneDerivationPersistencePort, type SceneDerivationRecord, type SceneDerivationRecordedPayload, type SceneDerivationRecoveryRecord, type SceneDerivationRecoveryRecordedPayload, SchemaError, type SeedVorlage, type SeedZuordnung, type SeedZuordnungEintrag, type SelectableTargetModel, type StartImageGenerationInput, type StartRunFromSceneInput, type StartRunInput, type StepState, type SzenenArea, type SzenenAreaId, type SzenenBatchOrigin, type SzenenBatchOriginFailure, type SzenenBatchOriginVerdict, type SzenenBatchSourceKind, SzenenCommands, SzenenElementStore, SzenenElementType, type SzenenImageBatchHistoryPort, type SzenenImageBatchWritePort, type SzenenImageGenerationPort as SzenenImageGenerationPortContract, type SzenenImageLibraryPort, type SzenenItemPort, type SzenenMediaPort, SzenenQueries, type SzenenRunPort, type SzenenSeedTemplatePort, SzenenView, type SzenenViewCapabilities, type SzenenViewPort, type SzenenViewProps, TargetModelResolution, TextGenerationPort, UNCHECKED_PUBLISH_RULES, UPLOAD_MAX_BYTES, type UnselectableTargetModel, UnusableProposal, type VersionMedium, type VisibilityNode, type ZipBild, areasFor, batchesForPromptRun, bildPfad, buildSystemInstruction, buildUserPrompt, callOptional, capabilitiesOf, capabilityGate, capabilityReport, catalogueFor, checkCreateElementInput, checkElementType, checkImageExecutionProfile, checkImageExecutionProfiles, checkImageModelParameters, checkOptionalId, checkParents, checkPayloadPresent, checkPromptRunRecord, checkPublishVersionInput, checkRequiredId, checkReviseMetadataInput, checkRevision, checkRunResponse, checkSceneDerivationRecord, checkSceneDerivationRecoveryRecord, checkSetPreferredHeadInput, checkSzenenBatchOrigin, checkTitle, checkWriteDraftInput, collectImageBatches, collectImageGenerationOrders, collectPromptRuns, collectProviderChecks, collectSceneDerivationRecoveries, collectSceneDerivations, createBrowserTextGenerationPort, createClientDerivationPort, createClientRunPort, createEventLogDerivationPersistence, createEventLogRunPersistence, createFlowImageProvider, createFlowSzenenViewPort, createHfElementStore, createHfEventChannel, createHfImageBatchHistory, createHfImageBatchWrite, createHfImageGenerationBatchPersistence, createHfImageLibrary, createHfImageStore, createImageGenerationPort, createInMemoryEventChannel, createMemoryViewPort, derivationPoliciesOf, deriveItemFromRun, deriveLineage, describableContent, diagnosticOfFinding, diagnosticOfSchemaError, differentialSteps, draftRevisionOf, executableImageModels, findExecutableImageModel, findImageBatch, findImageGenerationOrder, findPromptRun, findProviderCheck, findSceneDerivation, findSceneDerivationRecovery, firstError, formatSeedListe, freezeDraftChain, freezeSceneWorkingState, gesamtHerkunft, gruppiereZuItems, hasPlacementCapability, isKnownElementType, isSzenenItemId, istZipDatei, itemIdForRun, ladeVorschauen, leseBilderAusZip, locatorTeile, logRevisionOf, mergeSzenenBatchOrigin, mitDefaultVorlage, noticeFor, ordersForPromptRun, ordneSeedsZu, parseRunResponse, parseSeedListe, preferredHeadRevisionOf, promptDiagnosticsOf, publishedHeadsOf, recoveriesForRun, recoveryStatusOf, reduceElementEvents, resolveArea, resolveScenePayload, resolveShot, resolveShotPayload, roundOfRun, rulesWithoutPromptEffect, runPromptDerivation, runStoreDifferential, sceneOnlyCapabilities, scopeOfPath, seedFehlerText, selectableTargetModels, totalModelCalls, typAusBytes, unclassifiedPublishRules, unsupportedReason };
4541
+ export { type AttachLibraryItemInput, type AttachLibraryItemResult, AuthoritativeSzenenStore, type BestandsGalerieEintrag, type BestandsItem, CATALOGUE_TYPES, CapabilityAnchorError, type CapabilityFlag, type CapabilityFlagName, type CapabilityReason, type CapabilityReport, type CapabilityReportInput, type CapabilityScope, type CapabilityState, type ChainQueries, type ClaimAndRunResult, type ClientDerivationChannel, type ClientDerivationStore, type CompletePromptOperationInput, type CompletePromptOperationResult, ContextChainPort, type CreateBrowserTextGenerationPortOptions, type CreateClientDerivationPortOptions, type CreateClientRunPortOptions, type CreateFlowSzenenViewPortOptions, type CreateHfElementStoreOptions, type CreateHfEventChannelOptions, type CreateHfImageBatchHistoryOptions, type CreateHfImageBatchPersistenceOptions, type CreateImageGenerationPortOptions, type CreateImageJobPortOptions, type CreateMemoryViewPortOptions, DEFAULT_SEED_VORLAGE, DerivableType, DerivationAssessment, DerivationConflict, DerivationDiagnostic, DerivationFailure, DerivationImage, DerivationInputMode, type DeriveItemInput, type DerivedItem, type DerivedLineage, type DerivedRelationship, type DerivedSzenenReference, type DifferentialResult, type DifferentialStep, type Divergence, DraftChainMeta, ELEMENT_VERSION_SCHEMA_FILE, type ElementEvent, type ElementEventChannel, ElementSnapshot, type ElementStoreState, type ExecutableImageModel, type ExecutionTargetModel, type ExistingSzenenItem, FLOW_EXECUTION_PATH, type FlowGenerateImage, type FlowGenerateImageParams, FlowGenerateText, type FreezeDraftChainInput, type FreezeFailure, type FreezeResult, type FreezeSceneResult, type FreezeSceneSuccess, type FreezeSceneWorkingStateInput, type FreezeSuccess, type FrozenChainNode, type FrozenSceneState, type GeneratedImage, type GruppierbaresBild, type HfImageStore, type HfImageStoreOptions, type IdFactory, type ImageBatchPersistedImage, type ImageBatchPersistedPayload, type ImageExecutionProfile, type ImageExecutionRoute, type ImageExecutionTargetModelReader, type ImageGenerationBatchPersistence, type ImageGenerationEventChannel, type ImageGenerationFinishedPayload, type ImageGenerationOrder, type ImageGenerationProviderPort, type ImageGenerationResult, type ImageGenerationRunReader, type ImageGenerationStartedPayload, type ImageHostCapability, type ImageJob, type ImageJobChannel, type ImageJobClaimedPayload, type ImageJobRequestedPayload, type ImageJobSettledPayload, type ImageModelChoice, type ImageModelParameters, ImageProvenance, type ImageProviderInput, type ImportBatchImageInput, type ImportBatchInput, type InMemoryEventChannel, type InputError, type IntegrityVerdict, type ItemDerivationFailure, type ItemDerivationFailureClass, type ItemDerivationResult, type ItemMedium, type LibraryImage, type LibraryImageItem, MCP_CLIENT_PROVIDER, type NodeContribution, NotDerivable, type Notice, type NoticeTone, PROMPT_RULE_EFFECT, type PreparePromptOperationInput, type PreparePromptOperationResult, type PreparedPromptOperation, type PromptBatchImageRef, type PromptBatchOrigin, type PromptDiagnostic, type PromptEffect, type PromptExecutionOrigin, type PromptImageBatch, type PromptOperationPreparedPayload, type PromptResponseContract, type PromptRunOutcome, type PromptRunOutput, type PromptRunPersistencePort, type PromptRunRecord, type PromptRunRecordedPayload, type ProviderCheckRecord, type ProviderCheckRecordedPayload, type ProviderCheckResult, PublishCheckResult, PublishFinding, RULES_WITHOUT_CAPABILITY_EFFECT, RULE_SCOPES, type RawSchema, type RecordedDerivationInput, type RecordedProposal, type RecoveryStatus, type ReducerFinding, ReferenceResolver, type RendererInput, type ResolveFailure, type ResolveResult, type ResolveScenePayloadInput, type ResolveShotInput, type ResolveShotPayloadInput, ResolveTechnicalError, type ResolvedCamera, type ResolvedNode, type ResolvedPlacement, type RunEventChannel, type RunFailure, type RunFailureClass, type RunItemReference, SZENEN_EVENT_PREFIX, SZENEN_EVENT_TYPES, SZENEN_ITEM_PREFIX, SZENEN_SCHEMAS, SZENEN_SNAPSHOT_FILE, SZENEN_SNAPSHOT_PREFIX, SZENEN_SNAPSHOT_SCHEMA_VERSION, type SaveRunAsItemInput, type SceneDerivationPersistencePort, type SceneDerivationRecord, type SceneDerivationRecordedPayload, type SceneDerivationRecoveryRecord, type SceneDerivationRecoveryRecordedPayload, SchemaError, type SeedVorlage, type SeedZuordnung, type SeedZuordnungEintrag, type SelectableTargetModel, type StartImageGenerationInput, type StartRunFromSceneInput, type StartRunInput, type StepState, type SzenenArea, type SzenenAreaId, type SzenenBatchOrigin, type SzenenBatchOriginFailure, type SzenenBatchOriginVerdict, type SzenenBatchSourceKind, SzenenCommands, SzenenElementStore, SzenenElementType, type SzenenImageBatchHistoryPort, type SzenenImageBatchWritePort, type SzenenImageGenerationPort as SzenenImageGenerationPortContract, type SzenenImageJobPort, type SzenenImageLibraryPort, type SzenenItemPort, type SzenenLeseErgebnis, type SzenenMediaPort, SzenenQueries, type SzenenRunPort, type SzenenSeedTemplatePort, type SzenenSnapshot, SzenenView, type SzenenViewCapabilities, type SzenenViewPort, type SzenenViewProps, TargetModelResolution, TextGenerationPort, UNCHECKED_PUBLISH_RULES, UNVERIFIED_MODEL_ID, UPLOAD_MAX_BYTES, type UnselectableTargetModel, UnusableProposal, type VersionMedium, type VisibilityNode, type ZipBild, areasFor, batchesForPromptRun, bildPfad, buildSystemInstruction, buildSzenenSnapshot, buildUserPrompt, callOptional, capabilitiesOf, capabilityGate, capabilityReport, catalogueFor, checkCreateElementInput, checkElementType, checkImageExecutionProfile, checkImageExecutionProfiles, checkImageModelParameters, checkOptionalId, checkParents, checkPayloadPresent, checkPromptRunRecord, checkPublishVersionInput, checkRequiredId, checkReviseMetadataInput, checkRevision, checkRunResponse, checkSceneDerivationRecord, checkSceneDerivationRecoveryRecord, checkSetPreferredHeadInput, checkSzenenBatchOrigin, checkTitle, checkWriteDraftInput, claimWon, collectImageBatches, collectImageGenerationOrders, collectImageJobs, collectPromptOperations, collectPromptRuns, collectProviderChecks, collectSceneDerivationRecoveries, collectSceneDerivations, completePromptOperation, createBrowserTextGenerationPort, createClientDerivationPort, createClientRunPort, createEventLogDerivationPersistence, createEventLogRunPersistence, createFlowImageProvider, createFlowSzenenViewPort, createHfElementStore, createHfEventChannel, createHfImageBatchHistory, createHfImageBatchWrite, createHfImageGenerationBatchPersistence, createHfImageLibrary, createHfImageStore, createImageGenerationPort, createImageJobPort, createInMemoryEventChannel, createMemoryViewPort, derivationPoliciesOf, deriveItemFromRun, deriveLineage, describableContent, diagnosticOfFinding, diagnosticOfSchemaError, differentialSteps, draftRevisionOf, executableImageModels, findExecutableImageModel, findImageBatch, findImageGenerationOrder, findImageJob, findPromptOperation, findPromptRun, findProviderCheck, findSceneDerivation, findSceneDerivationRecovery, firstError, formatSeedListe, freezeDraftChain, freezeSceneWorkingState, generationBatchIdOf, gesamtHerkunft, gruppiereZuItems, hasPlacementCapability, isKnownElementType, isSzenenItemId, istSzenenSnapshotDatei, istZipDatei, itemIdForRun, itemsAusBestand, jobsForPromptRun, ladeVorschauen, leseBilderAusZip, locatorAus, locatorTeile, logRevisionOf, mergeSnapshotAndPending, mergeSzenenBatchOrigin, mimeTypAus, mitDefaultVorlage, noticeFor, ordersForPromptRun, ordneSeedsZu, parseRunResponse, parseSeedListe, parseSzenenSnapshot, preferredHeadRevisionOf, preparePromptOperation, promptDiagnosticsOf, publishedHeadsOf, recoveriesForRun, recoveryStatusOf, reduceElementEvents, resolveArea, resolveScenePayload, resolveShot, resolveShotPayload, responseContractOf, roundOfRun, rulesWithoutPromptEffect, runOfOperation, runPromptDerivation, runStoreDifferential, sameResponseAs, sceneOnlyCapabilities, scopeOfPath, seedFehlerText, selectableTargetModels, szenenSnapshotFilename, totalModelCalls, typAusBytes, unclassifiedPublishRules, unsupportedReason };