@rslsp1/fa-app-tools 8.0.0 → 9.0.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/{chunk-VVGASAYT.mjs → chunk-2ADFDRFX.mjs} +192 -7
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +190 -9
- package/dist/index.mjs +2 -2
- package/dist/szenen.d.mts +188 -1
- package/dist/szenen.d.ts +188 -1
- package/dist/szenen.js +214 -25
- package/dist/szenen.mjs +9 -1
- package/package.json +1 -1
package/dist/szenen.js
CHANGED
|
@@ -40,6 +40,7 @@ __export(szenen_exports, {
|
|
|
40
40
|
DERIVABLE_TYPES: () => DERIVABLE_TYPES,
|
|
41
41
|
ELEMENT_VERSION_SCHEMA_FILE: () => ELEMENT_VERSION_SCHEMA_FILE,
|
|
42
42
|
FLOW_EXECUTION_PATH: () => FLOW_EXECUTION_PATH,
|
|
43
|
+
GENERAL_POLICY_SUBTYPE: () => GENERAL_POLICY_SUBTYPE,
|
|
43
44
|
MCP_CLIENT_PROVIDER: () => MCP_CLIENT_PROVIDER,
|
|
44
45
|
PROBE_VERSION_ID: () => PROBE_VERSION_ID,
|
|
45
46
|
PROMPT_RULE_EFFECT: () => PROMPT_RULE_EFFECT,
|
|
@@ -205,6 +206,7 @@ __export(szenen_exports, {
|
|
|
205
206
|
recoveryStatusOf: () => recoveryStatusOf,
|
|
206
207
|
reduceElementEvents: () => reduceElementEvents,
|
|
207
208
|
resolveArea: () => resolveArea,
|
|
209
|
+
resolveGeneralScenePolicies: () => resolveGeneralScenePolicies,
|
|
208
210
|
resolvePreferredHead: () => resolvePreferredHead,
|
|
209
211
|
resolveScenePayload: () => resolveScenePayload,
|
|
210
212
|
resolveShot: () => resolveShot,
|
|
@@ -222,6 +224,7 @@ __export(szenen_exports, {
|
|
|
222
224
|
runStoreDifferential: () => runStoreDifferential,
|
|
223
225
|
sameResponseAs: () => sameResponseAs,
|
|
224
226
|
sceneOnlyCapabilities: () => sceneOnlyCapabilities,
|
|
227
|
+
scenePolicyFingerprint: () => scenePolicyFingerprint,
|
|
225
228
|
scopeOfPath: () => scopeOfPath,
|
|
226
229
|
seedFehlerText: () => seedFehlerText,
|
|
227
230
|
selectPromptRuns: () => selectPromptRuns,
|
|
@@ -229,6 +232,7 @@ __export(szenen_exports, {
|
|
|
229
232
|
showChain: () => showChain,
|
|
230
233
|
siblingsOf: () => siblingsOf,
|
|
231
234
|
simulatedAnswerFor: () => simulatedAnswerFor,
|
|
235
|
+
sortScenePolicies: () => sortScenePolicies,
|
|
232
236
|
sourceOf: () => sourceOf,
|
|
233
237
|
szenenSnapshotFilename: () => szenenSnapshotFilename,
|
|
234
238
|
totalModelCalls: () => totalModelCalls,
|
|
@@ -4930,7 +4934,8 @@ async function resolveScenePayload(input) {
|
|
|
4930
4934
|
sceneVersionId = "",
|
|
4931
4935
|
resolver,
|
|
4932
4936
|
contextChain,
|
|
4933
|
-
userInstruction
|
|
4937
|
+
userInstruction,
|
|
4938
|
+
autoPolicies
|
|
4934
4939
|
} = input;
|
|
4935
4940
|
if (!isObject7(scenePayload)) {
|
|
4936
4941
|
return {
|
|
@@ -4965,6 +4970,7 @@ async function resolveScenePayload(input) {
|
|
|
4965
4970
|
resolver,
|
|
4966
4971
|
contextChain,
|
|
4967
4972
|
userInstruction,
|
|
4973
|
+
autoPolicies,
|
|
4968
4974
|
assumptions,
|
|
4969
4975
|
diagnostics
|
|
4970
4976
|
});
|
|
@@ -4980,6 +4986,7 @@ async function komponiere(z) {
|
|
|
4980
4986
|
resolver,
|
|
4981
4987
|
contextChain,
|
|
4982
4988
|
userInstruction,
|
|
4989
|
+
autoPolicies,
|
|
4983
4990
|
assumptions,
|
|
4984
4991
|
diagnostics
|
|
4985
4992
|
} = z;
|
|
@@ -5142,6 +5149,11 @@ async function komponiere(z) {
|
|
|
5142
5149
|
}
|
|
5143
5150
|
const payload = resolved.version.payload;
|
|
5144
5151
|
policies.push({
|
|
5152
|
+
// Die Herkunft steht in der aufgeloesten Version, nicht in der Referenz:
|
|
5153
|
+
// `element_id` gehoert zur Version und wird hier nicht aus dem `ref`
|
|
5154
|
+
// uebernommen, der nur eine `version_id` fuehrt.
|
|
5155
|
+
element_id: resolved.version.element_id,
|
|
5156
|
+
version_id: resolved.version.version_id,
|
|
5145
5157
|
subtype: str(payload.subtype) ?? "general",
|
|
5146
5158
|
rank: num(payload.rank) ?? 0,
|
|
5147
5159
|
text: str(payload.text) ?? "",
|
|
@@ -5149,6 +5161,16 @@ async function komponiere(z) {
|
|
|
5149
5161
|
});
|
|
5150
5162
|
}
|
|
5151
5163
|
policies.sort((a, b) => a.rank - b.rank);
|
|
5164
|
+
for (const auto of autoPolicies ?? []) {
|
|
5165
|
+
policies.push({
|
|
5166
|
+
element_id: auto.element_id,
|
|
5167
|
+
version_id: auto.version_id,
|
|
5168
|
+
subtype: auto.subtype,
|
|
5169
|
+
rank: auto.rank,
|
|
5170
|
+
text: auto.text,
|
|
5171
|
+
locale: auto.locale
|
|
5172
|
+
});
|
|
5173
|
+
}
|
|
5152
5174
|
const fragments = [];
|
|
5153
5175
|
for (const [i, ref] of asArray3(settings.fragment_refs).entries()) {
|
|
5154
5176
|
const resolved = await refOf(
|
|
@@ -5352,6 +5374,10 @@ async function komponiere(z) {
|
|
|
5352
5374
|
assumptions,
|
|
5353
5375
|
diagnostics,
|
|
5354
5376
|
capabilities: eingefroreneFaehigkeiten,
|
|
5377
|
+
// Die eine kanonische Stelle: die Anweisung des Aufrufers, sonst die im
|
|
5378
|
+
// Shot hinterlegte. Beim Szene-Direktlauf gibt es nur die erste — und
|
|
5379
|
+
// genau sie fehlte dem Renderer bisher (Schritt 03 §7).
|
|
5380
|
+
user_instruction: userInstruction ?? shotInstruction,
|
|
5355
5381
|
context_chain: [...contextChain],
|
|
5356
5382
|
target_model_resolution: targetModelResolution
|
|
5357
5383
|
}
|
|
@@ -5550,6 +5576,24 @@ function buildSystemInstruction(input) {
|
|
|
5550
5576
|
'Widersprechen sie einander, nenne den Widerspruch mit beiden Quellen in "notes" \u2014',
|
|
5551
5577
|
"waehle nicht still eine Seite."
|
|
5552
5578
|
);
|
|
5579
|
+
if (input.policies.length > 0) {
|
|
5580
|
+
zeilen.push(
|
|
5581
|
+
"",
|
|
5582
|
+
'In "policies" stehen verbindliche Transformationsregeln fuer die Formulierung.',
|
|
5583
|
+
"Setze sie um, ohne ihren Wortlaut in den Prompt zu uebernehmen; sie sind",
|
|
5584
|
+
"Anweisung an dich, nicht Prompttext. Bei gleichem Rang gilt die Reihenfolge",
|
|
5585
|
+
"der Liste."
|
|
5586
|
+
);
|
|
5587
|
+
}
|
|
5588
|
+
if (input.user_instruction !== null && input.user_instruction !== void 0) {
|
|
5589
|
+
zeilen.push(
|
|
5590
|
+
"",
|
|
5591
|
+
'"user_instruction" ist eine ZUSAETZLICHE Arbeitsanweisung fuer genau diesen Lauf.',
|
|
5592
|
+
"Sie tritt zu den Policies hinzu und hebt keine davon auf. Widerspricht sie einer",
|
|
5593
|
+
'Policy erkennbar, nenne den Widerspruch mit beiden Quellen in "feedback" bzw.',
|
|
5594
|
+
'"notes" \u2014 waehle nicht still eine Seite.'
|
|
5595
|
+
);
|
|
5596
|
+
}
|
|
5553
5597
|
if (input.camera === null) {
|
|
5554
5598
|
zeilen.push(
|
|
5555
5599
|
"",
|
|
@@ -7435,6 +7479,110 @@ async function selectableTargetModels(queries, contextChain) {
|
|
|
7435
7479
|
return { kind: "ok", value: { selectable, unselectable } };
|
|
7436
7480
|
}
|
|
7437
7481
|
|
|
7482
|
+
// src/lib/szenen/scenePolicies.ts
|
|
7483
|
+
var GENERAL_POLICY_SUBTYPE = "general";
|
|
7484
|
+
var isObject11 = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
7485
|
+
var str2 = (v) => typeof v === "string" && v.trim().length > 0 ? v : null;
|
|
7486
|
+
var num2 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
7487
|
+
function sortScenePolicies(policies) {
|
|
7488
|
+
return [...policies].sort((a, b) => a.rank - b.rank || a.chain_index - b.chain_index || (a.element_id < b.element_id ? -1 : a.element_id > b.element_id ? 1 : 0));
|
|
7489
|
+
}
|
|
7490
|
+
function scenePolicyFingerprint(policies) {
|
|
7491
|
+
return policies.map((p) => `${p.element_id}@${p.version_id}`).join(",");
|
|
7492
|
+
}
|
|
7493
|
+
function resolveGeneralScenePolicies(snapshot, contextChain) {
|
|
7494
|
+
if (typeof snapshot.listElements !== "function") {
|
|
7495
|
+
return {
|
|
7496
|
+
kind: "error",
|
|
7497
|
+
message: "Die Momentaufnahme liefert keine Elementliste. Allgemeine Kontext-Policies eines Szene-Direktlaufs lassen sich damit nicht bestimmen; eine leere Policy-Liste waere eine Behauptung ueber den Bestand, die niemand geprueft hat.",
|
|
7498
|
+
retryable: false
|
|
7499
|
+
};
|
|
7500
|
+
}
|
|
7501
|
+
const kette = contextChain.length > 0 ? contextChain : [null];
|
|
7502
|
+
const gesehen = /* @__PURE__ */ new Set();
|
|
7503
|
+
const gefunden = [];
|
|
7504
|
+
for (const [chainIndex, link] of kette.entries()) {
|
|
7505
|
+
const liste = snapshot.listElements({ contextId: link, type: "prompt_policy" });
|
|
7506
|
+
if (liste.kind !== "ok" || !liste.value) {
|
|
7507
|
+
return {
|
|
7508
|
+
kind: "error",
|
|
7509
|
+
message: liste.message ?? `Die prompt_policy-Elemente des Kontexts ${link ?? "global"} konnten nicht gelesen werden.`,
|
|
7510
|
+
retryable: true
|
|
7511
|
+
};
|
|
7512
|
+
}
|
|
7513
|
+
for (const element of liste.value) {
|
|
7514
|
+
if (gesehen.has(element.element_id)) continue;
|
|
7515
|
+
gesehen.add(element.element_id);
|
|
7516
|
+
const gelesen = snapshot.getElement(element.element_id);
|
|
7517
|
+
if (gelesen.kind !== "ok") {
|
|
7518
|
+
return {
|
|
7519
|
+
kind: "error",
|
|
7520
|
+
message: gelesen.message ?? `Element ${element.element_id} konnte nicht gelesen werden.`,
|
|
7521
|
+
retryable: true
|
|
7522
|
+
};
|
|
7523
|
+
}
|
|
7524
|
+
const stand = gelesen.value;
|
|
7525
|
+
if (!stand) {
|
|
7526
|
+
return {
|
|
7527
|
+
kind: "error",
|
|
7528
|
+
message: `Element ${element.element_id} steht in der Elementliste des Kontexts ${link ?? "global"}, aber nicht in derselben Momentaufnahme.`,
|
|
7529
|
+
retryable: false
|
|
7530
|
+
};
|
|
7531
|
+
}
|
|
7532
|
+
const versionen = stand.versions ?? [];
|
|
7533
|
+
const payloadVon = (versionId2) => {
|
|
7534
|
+
const payload2 = versionen.find((v) => v.version_id === versionId2)?.payload;
|
|
7535
|
+
return isObject11(payload2) ? payload2 : null;
|
|
7536
|
+
};
|
|
7537
|
+
const istGeneral = (versionId2) => str2(payloadVon(versionId2)?.subtype) === GENERAL_POLICY_SUBTYPE;
|
|
7538
|
+
const kopf = effectivePreferredHeadSafe(
|
|
7539
|
+
{ element: stand.element, versions: versionen, preferredHeads: stand.preferredHeads },
|
|
7540
|
+
kette
|
|
7541
|
+
);
|
|
7542
|
+
if (kopf.kind === "dag_fehler") {
|
|
7543
|
+
return {
|
|
7544
|
+
kind: "error",
|
|
7545
|
+
message: `Der Versionsgraph der Policy ${element.element_id} ist nicht aufbaubar: ${kopf.message}`,
|
|
7546
|
+
retryable: false
|
|
7547
|
+
};
|
|
7548
|
+
}
|
|
7549
|
+
if (kopf.kind === "keine_version") continue;
|
|
7550
|
+
const resolution = kopf.outcome.resolution;
|
|
7551
|
+
if (resolution.kind === "fork") {
|
|
7552
|
+
const relevant = resolution.heads.filter(istGeneral);
|
|
7553
|
+
if (relevant.length === 0) continue;
|
|
7554
|
+
return {
|
|
7555
|
+
kind: "rejected",
|
|
7556
|
+
message: `Die Policy ${element.element_id} hat ${resolution.heads.length} veroeffentlichte Koepfe und in diesem Kontext keine greifende Auswahl. Mindestens einer davon ist eine allgemeine Regel (${relevant.join(", ")}). Welche gilt, entscheidet keine Reihenfolge (D-36) \u2014 bitte einen bevorzugten Kopf setzen. Es wurde kein Modell gerufen.`,
|
|
7557
|
+
element_id: element.element_id,
|
|
7558
|
+
heads: resolution.heads
|
|
7559
|
+
};
|
|
7560
|
+
}
|
|
7561
|
+
const versionId = usableHeadVersionId(resolutionOf(kopf));
|
|
7562
|
+
if (!versionId) continue;
|
|
7563
|
+
const payload = payloadVon(versionId);
|
|
7564
|
+
if (!payload) {
|
|
7565
|
+
return {
|
|
7566
|
+
kind: "error",
|
|
7567
|
+
message: `Die wirksame Version ${versionId} der Policy ${element.element_id} steht nicht mit lesbarer Payload in der Momentaufnahme.`,
|
|
7568
|
+
retryable: false
|
|
7569
|
+
};
|
|
7570
|
+
}
|
|
7571
|
+
if (str2(payload.subtype) !== GENERAL_POLICY_SUBTYPE) continue;
|
|
7572
|
+
gefunden.push({
|
|
7573
|
+
element_id: element.element_id,
|
|
7574
|
+
version_id: versionId,
|
|
7575
|
+
subtype: GENERAL_POLICY_SUBTYPE,
|
|
7576
|
+
rank: num2(payload.rank) ?? 0,
|
|
7577
|
+
text: str2(payload.text) ?? "",
|
|
7578
|
+
locale: str2(payload.locale),
|
|
7579
|
+
chain_index: chainIndex
|
|
7580
|
+
});
|
|
7581
|
+
}
|
|
7582
|
+
}
|
|
7583
|
+
return { kind: "ok", policies: sortScenePolicies(gefunden) };
|
|
7584
|
+
}
|
|
7585
|
+
|
|
7438
7586
|
// src/lib/szenen/freezeDraftChain.ts
|
|
7439
7587
|
function ladeKnoten(sicht, elementId, erwarteterTyp) {
|
|
7440
7588
|
const gelesen = sicht.getElement(elementId);
|
|
@@ -7636,9 +7784,19 @@ async function freezeSceneWorkingState(input) {
|
|
|
7636
7784
|
const a = await store.readSnapshot({ fresh: false });
|
|
7637
7785
|
const szene = ladeSzene(a, sceneElementId, contextChain);
|
|
7638
7786
|
if ("fehler" in szene) return ausfallErgebnis(szene);
|
|
7787
|
+
const policiesA = resolveGeneralScenePolicies(a, contextChain);
|
|
7788
|
+
if (policiesA.kind === "error") {
|
|
7789
|
+
return { kind: "error", message: policiesA.message, retryable: policiesA.retryable };
|
|
7790
|
+
}
|
|
7791
|
+
if (policiesA.kind !== "ok") return { kind: "rejected", message: policiesA.message };
|
|
7639
7792
|
const b = await store.readSnapshot({ fresh: true });
|
|
7640
7793
|
const erneut = ladeSzene(b, sceneElementId, contextChain);
|
|
7641
7794
|
if ("fehler" in erneut) return ausfallErgebnis(erneut);
|
|
7795
|
+
const policiesB = resolveGeneralScenePolicies(b, contextChain);
|
|
7796
|
+
if (policiesB.kind === "error") {
|
|
7797
|
+
return { kind: "error", message: policiesB.message, retryable: policiesB.retryable };
|
|
7798
|
+
}
|
|
7799
|
+
if (policiesB.kind !== "ok") return { kind: "rejected", message: policiesB.message };
|
|
7642
7800
|
if (erneut.draft_id !== szene.draft_id || erneut.revision !== szene.revision || erneut.version_id !== szene.version_id) {
|
|
7643
7801
|
return {
|
|
7644
7802
|
kind: "conflict",
|
|
@@ -7648,6 +7806,17 @@ async function freezeSceneWorkingState(input) {
|
|
|
7648
7806
|
actualRevision: erneut.revision ?? 0
|
|
7649
7807
|
};
|
|
7650
7808
|
}
|
|
7809
|
+
const vorher = scenePolicyFingerprint(policiesA.policies);
|
|
7810
|
+
const nachher = scenePolicyFingerprint(policiesB.policies);
|
|
7811
|
+
if (vorher !== nachher) {
|
|
7812
|
+
return {
|
|
7813
|
+
kind: "conflict",
|
|
7814
|
+
message: `Die wirksamen allgemeinen Policies der Szene ${sceneElementId} haben sich waehrend des Einfrierens geaendert (erwartet [${vorher || "\u2014"}], vorhanden [${nachher || "\u2014"}]). Es wurde kein Modell gerufen.`,
|
|
7815
|
+
node: { type: "scene", element_id: sceneElementId, draft_id: szene.draft_id ?? "" },
|
|
7816
|
+
expectedRevision: szene.revision ?? 0,
|
|
7817
|
+
actualRevision: erneut.revision ?? 0
|
|
7818
|
+
};
|
|
7819
|
+
}
|
|
7651
7820
|
const aufgeloest = await resolveScenePayload({
|
|
7652
7821
|
scenePayload: szene.payload,
|
|
7653
7822
|
sceneElementId: szene.element_id,
|
|
@@ -7656,7 +7825,10 @@ async function freezeSceneWorkingState(input) {
|
|
|
7656
7825
|
sceneVersionId: szene.version_id ?? "",
|
|
7657
7826
|
resolver,
|
|
7658
7827
|
contextChain,
|
|
7659
|
-
userInstruction
|
|
7828
|
+
userInstruction,
|
|
7829
|
+
// Der aus A gebildete und gegen B bestaetigte Satz — kein dritter
|
|
7830
|
+
// Leseweg nach dem Freeze.
|
|
7831
|
+
autoPolicies: policiesA.policies
|
|
7660
7832
|
});
|
|
7661
7833
|
if (aufgeloest.kind !== "resolved") {
|
|
7662
7834
|
return {
|
|
@@ -7673,7 +7845,8 @@ async function freezeSceneWorkingState(input) {
|
|
|
7673
7845
|
revision: szene.revision,
|
|
7674
7846
|
version_id: szene.version_id
|
|
7675
7847
|
},
|
|
7676
|
-
input: aufgeloest.input
|
|
7848
|
+
input: aufgeloest.input,
|
|
7849
|
+
policies: policiesA.policies
|
|
7677
7850
|
};
|
|
7678
7851
|
}
|
|
7679
7852
|
|
|
@@ -8084,6 +8257,15 @@ function createHfElementStore(options) {
|
|
|
8084
8257
|
return {
|
|
8085
8258
|
getElement(elementId) {
|
|
8086
8259
|
return { kind: "ok", value: state.elements.get(elementId) ?? null };
|
|
8260
|
+
},
|
|
8261
|
+
// Aus **derselben** gefalteten Sicht wie `getElement` und ohne
|
|
8262
|
+
// weiteren Netzzugriff: Nur so faellt die Policy-Auswahl des
|
|
8263
|
+
// Szene-Direktlaufs in dieselbe Konsistenzgrenze wie das Einfrieren
|
|
8264
|
+
// der Szene (Schritt 03 §3). Stillgelegte Elemente sind nicht dabei —
|
|
8265
|
+
// Stilllegen ist Ausblenden (D-04), wie bei `listElements`.
|
|
8266
|
+
listElements(filter) {
|
|
8267
|
+
const gefunden = [...state.elements.values()].map((snapshot) => snapshot.element).filter((element) => !element.retired && element.type === filter.type && (element.context_id ?? null) === (filter.contextId ?? null));
|
|
8268
|
+
return { kind: "ok", value: gefunden };
|
|
8087
8269
|
}
|
|
8088
8270
|
};
|
|
8089
8271
|
} catch (error) {
|
|
@@ -8091,6 +8273,9 @@ function createHfElementStore(options) {
|
|
|
8091
8273
|
return {
|
|
8092
8274
|
getElement() {
|
|
8093
8275
|
return { kind: "error", message };
|
|
8276
|
+
},
|
|
8277
|
+
listElements() {
|
|
8278
|
+
return { kind: "error", message };
|
|
8094
8279
|
}
|
|
8095
8280
|
};
|
|
8096
8281
|
}
|
|
@@ -10916,11 +11101,11 @@ function findImageBatch(events, batchId) {
|
|
|
10916
11101
|
}
|
|
10917
11102
|
|
|
10918
11103
|
// src/lib/szenen/imageGenerationCapability.ts
|
|
10919
|
-
var
|
|
11104
|
+
var isObject12 = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
10920
11105
|
var istText6 = (v) => typeof v === "string" && v.trim().length > 0;
|
|
10921
11106
|
function checkImageExecutionProfile(profile) {
|
|
10922
11107
|
const befunde = [];
|
|
10923
|
-
if (!
|
|
11108
|
+
if (!isObject12(profile)) return ["Das Ausfuehrungsprofil ist kein Objekt."];
|
|
10924
11109
|
for (const feld of ["profile_id", "execution_path", "execution_model_id"]) {
|
|
10925
11110
|
if (!istText6(profile[feld])) befunde.push(`"${feld}" fehlt als nicht-leerer Text.`);
|
|
10926
11111
|
}
|
|
@@ -10943,12 +11128,12 @@ function checkImageExecutionProfile(profile) {
|
|
|
10943
11128
|
function checkImageExecutionProfiles(profiles) {
|
|
10944
11129
|
const anzahlJeKennung = /* @__PURE__ */ new Map();
|
|
10945
11130
|
for (const profil of profiles ?? []) {
|
|
10946
|
-
if (!
|
|
11131
|
+
if (!isObject12(profil) || !istText6(profil.profile_id)) continue;
|
|
10947
11132
|
anzahlJeKennung.set(profil.profile_id, (anzahlJeKennung.get(profil.profile_id) ?? 0) + 1);
|
|
10948
11133
|
}
|
|
10949
11134
|
return (profiles ?? []).map((profil) => {
|
|
10950
11135
|
const befunde = [...checkImageExecutionProfile(profil)];
|
|
10951
|
-
if (
|
|
11136
|
+
if (isObject12(profil) && istText6(profil.profile_id) && (anzahlJeKennung.get(profil.profile_id) ?? 0) > 1) {
|
|
10952
11137
|
befunde.push(
|
|
10953
11138
|
`Die profile_id "${profil.profile_id}" kommt in diesem Zielmodell mehrfach vor \u2014 die Auswahl waere nicht mehr eindeutig aufloesbar.`
|
|
10954
11139
|
);
|
|
@@ -10973,7 +11158,7 @@ function executableImageModels(promptTargetModelKey, targets, capability) {
|
|
|
10973
11158
|
for (const [index, roh] of (target.executionProfiles ?? []).entries()) {
|
|
10974
11159
|
const befunde = profilBefunde[index] ?? [];
|
|
10975
11160
|
if (befunde.length > 0) {
|
|
10976
|
-
const kennung =
|
|
11161
|
+
const kennung = isObject12(roh) && istText6(roh.profile_id) ? roh.profile_id : "(ohne profile_id)";
|
|
10977
11162
|
invalid.push(`${target.key}/${kennung}: ${befunde.join(" ")}`);
|
|
10978
11163
|
continue;
|
|
10979
11164
|
}
|
|
@@ -13676,13 +13861,13 @@ var VERBOTEN_JE_HERKUNFT = {
|
|
|
13676
13861
|
function istText8(wert) {
|
|
13677
13862
|
return typeof wert === "string" && wert.trim().length > 0;
|
|
13678
13863
|
}
|
|
13679
|
-
function
|
|
13864
|
+
function isObject13(wert) {
|
|
13680
13865
|
return typeof wert === "object" && wert !== null && !Array.isArray(wert);
|
|
13681
13866
|
}
|
|
13682
13867
|
var KETTEN_TYPEN = ["scene", "scene_setup", "shot"];
|
|
13683
13868
|
var HERKUENFTE = ["published", "draft_chain", "scene_direct"];
|
|
13684
13869
|
function pruefeLaufherkunft(quelle) {
|
|
13685
|
-
if (!
|
|
13870
|
+
if (!isObject13(quelle)) {
|
|
13686
13871
|
return { ok: false, message: '"source" muss ein Objekt sein.' };
|
|
13687
13872
|
}
|
|
13688
13873
|
if (!HERKUENFTE.includes(quelle.kind)) {
|
|
@@ -13701,7 +13886,7 @@ function pruefeLaufherkunft(quelle) {
|
|
|
13701
13886
|
}
|
|
13702
13887
|
if (quelle.kind === "scene_direct") {
|
|
13703
13888
|
const szene = quelle.scene;
|
|
13704
|
-
if (!
|
|
13889
|
+
if (!isObject13(szene)) {
|
|
13705
13890
|
return { ok: false, message: '"source.scene" muss ein Objekt sein.' };
|
|
13706
13891
|
}
|
|
13707
13892
|
if (!istText8(szene.element_id)) {
|
|
@@ -13739,7 +13924,7 @@ function pruefeLaufherkunft(quelle) {
|
|
|
13739
13924
|
};
|
|
13740
13925
|
}
|
|
13741
13926
|
for (const [index, knoten] of quelle.nodes.entries()) {
|
|
13742
|
-
if (!
|
|
13927
|
+
if (!isObject13(knoten)) {
|
|
13743
13928
|
return { ok: false, message: `"source.nodes[${index}]" ist kein Objekt.` };
|
|
13744
13929
|
}
|
|
13745
13930
|
if (!KETTEN_TYPEN.includes(knoten.type)) {
|
|
@@ -13782,7 +13967,7 @@ function checkPromptRunRecord(candidate) {
|
|
|
13782
13967
|
const urteil2 = pruefeLaufherkunft(quelle);
|
|
13783
13968
|
if (!urteil2.ok) return urteil2;
|
|
13784
13969
|
}
|
|
13785
|
-
const herkunft =
|
|
13970
|
+
const herkunft = isObject13(quelle) && typeof quelle.kind === "string" ? quelle.kind : "published";
|
|
13786
13971
|
for (const feld of PFLICHTFELDER) {
|
|
13787
13972
|
if (!istText8(record[feld])) {
|
|
13788
13973
|
return { ok: false, message: `"${feld}" fehlt oder ist leer.` };
|
|
@@ -14929,8 +15114,8 @@ function feldLabel(type, pfad, name) {
|
|
|
14929
15114
|
|
|
14930
15115
|
// src/features/szenen/areas/SchemaFields.tsx
|
|
14931
15116
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
14932
|
-
var
|
|
14933
|
-
var istVersionRef = (v) =>
|
|
15117
|
+
var isObject14 = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
15118
|
+
var istVersionRef = (v) => isObject14(v) && typeof v.element_id === "string" && typeof v.version_id === "string";
|
|
14934
15119
|
function leseJson(wert) {
|
|
14935
15120
|
if (!wert || wert === NULL_MARKER) return null;
|
|
14936
15121
|
try {
|
|
@@ -15158,13 +15343,13 @@ var VersionRefListeFeld = ({ port, kontextkette, feld, wert, onChange, readOnly,
|
|
|
15158
15343
|
}
|
|
15159
15344
|
const schreiben = (neu) => onChange(
|
|
15160
15345
|
feld.path,
|
|
15161
|
-
schreibListe(neu.map((eintrag, i) =>
|
|
15346
|
+
schreibListe(neu.map((eintrag, i) => isObject14(eintrag) && mitRolle ? { ...eintrag, rank: i } : eintrag))
|
|
15162
15347
|
);
|
|
15163
15348
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "szenen-feld__reflist", "data-testid": `reflist-${feld.path}`, children: [
|
|
15164
15349
|
liste.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { "data-testid": `reflist-${feld.path}-leer`, children: "Keine Eintr\xE4ge." }),
|
|
15165
15350
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", { children: liste.map((eintrag, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { "data-testid": `reflist-${feld.path}-${index}`, children: [
|
|
15166
15351
|
istVersionRef(eintrag) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RefAnzeige, { port, ref_: eintrag, testId: `reflist-${feld.path}-${index}-ref` }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: JSON.stringify(eintrag) }),
|
|
15167
|
-
mitRolle === "styleRole" &&
|
|
15352
|
+
mitRolle === "styleRole" && isObject14(eintrag) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
15168
15353
|
"select",
|
|
15169
15354
|
{
|
|
15170
15355
|
"data-testid": `reflist-${feld.path}-${index}-role`,
|
|
@@ -15177,7 +15362,7 @@ var VersionRefListeFeld = ({ port, kontextkette, feld, wert, onChange, readOnly,
|
|
|
15177
15362
|
]
|
|
15178
15363
|
}
|
|
15179
15364
|
),
|
|
15180
|
-
mitRolle === "frei" &&
|
|
15365
|
+
mitRolle === "frei" && isObject14(eintrag) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
15181
15366
|
"input",
|
|
15182
15367
|
{
|
|
15183
15368
|
"data-testid": `reflist-${feld.path}-${index}-role`,
|
|
@@ -15187,7 +15372,7 @@ var VersionRefListeFeld = ({ port, kontextkette, feld, wert, onChange, readOnly,
|
|
|
15187
15372
|
onChange: (e) => schreiben(liste.map((x, i) => i === index ? { ...x, role: e.target.value } : x))
|
|
15188
15373
|
}
|
|
15189
15374
|
),
|
|
15190
|
-
mitGewicht &&
|
|
15375
|
+
mitGewicht && isObject14(eintrag) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
15191
15376
|
"input",
|
|
15192
15377
|
{
|
|
15193
15378
|
"data-testid": `reflist-${feld.path}-${index}-weight`,
|
|
@@ -15418,7 +15603,7 @@ var KameraFeld = ({
|
|
|
15418
15603
|
if (phase.status !== "ready" || !phase.value) return [];
|
|
15419
15604
|
const cameras = valueAtPath(phase.value.payload, "camera_rig.cameras");
|
|
15420
15605
|
if (!Array.isArray(cameras)) return [];
|
|
15421
|
-
return cameras.filter(
|
|
15606
|
+
return cameras.filter(isObject14).map((c) => ({
|
|
15422
15607
|
id: typeof c.camera_id === "string" ? c.camera_id : null,
|
|
15423
15608
|
name: typeof c.name === "string" ? c.name : null
|
|
15424
15609
|
})).filter((c) => c.id !== null);
|
|
@@ -15563,11 +15748,11 @@ var MediaRefListeFeld = ({ feld, wert, onChange, readOnly }) => {
|
|
|
15563
15748
|
}
|
|
15564
15749
|
const schreiben = (neu) => onChange(
|
|
15565
15750
|
feld.path,
|
|
15566
|
-
schreibListe(neu.map((e, i) =>
|
|
15751
|
+
schreibListe(neu.map((e, i) => isObject14(e) ? { ...e, position: i } : e))
|
|
15567
15752
|
);
|
|
15568
15753
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "szenen-feld__liste", "data-testid": `feld-${feld.path}`, children: [
|
|
15569
15754
|
liste.map((eintrag, index) => {
|
|
15570
|
-
const objekt =
|
|
15755
|
+
const objekt = isObject14(eintrag) ? eintrag : {};
|
|
15571
15756
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "szenen-feld__liste-zeile", children: [
|
|
15572
15757
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
15573
15758
|
"input",
|
|
@@ -15576,7 +15761,7 @@ var MediaRefListeFeld = ({ feld, wert, onChange, readOnly }) => {
|
|
|
15576
15761
|
value: typeof objekt.asset_id === "string" ? objekt.asset_id : "",
|
|
15577
15762
|
readOnly,
|
|
15578
15763
|
placeholder: "asset_id (UUID)",
|
|
15579
|
-
onChange: (e) => schreiben(liste.map((x, i) => i === index ? { ...
|
|
15764
|
+
onChange: (e) => schreiben(liste.map((x, i) => i === index ? { ...isObject14(x) ? x : {}, asset_id: e.target.value } : x))
|
|
15580
15765
|
}
|
|
15581
15766
|
),
|
|
15582
15767
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -15585,7 +15770,7 @@ var MediaRefListeFeld = ({ feld, wert, onChange, readOnly }) => {
|
|
|
15585
15770
|
"data-testid": `feld-${feld.path}-${index}-rolle`,
|
|
15586
15771
|
value: typeof objekt.role === "string" ? objekt.role : "",
|
|
15587
15772
|
disabled: readOnly,
|
|
15588
|
-
onChange: (e) => schreiben(liste.map((x, i) => i === index ? { ...
|
|
15773
|
+
onChange: (e) => schreiben(liste.map((x, i) => i === index ? { ...isObject14(x) ? x : {}, role: e.target.value } : x)),
|
|
15589
15774
|
children: [
|
|
15590
15775
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "", children: "(Rolle w\xE4hlen)" }),
|
|
15591
15776
|
rollen.map((r) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: r, children: r }, r))
|
|
@@ -15628,7 +15813,7 @@ var LEERES_PROFIL = {
|
|
|
15628
15813
|
var listeAus = (text) => text.split(",").map((t) => t.trim()).filter((t) => t.length > 0);
|
|
15629
15814
|
var AusfuehrungsprofileFeld = ({ feld, wert, onChange, readOnly }) => {
|
|
15630
15815
|
const gelesen = leseListe(wert);
|
|
15631
|
-
const profile = (gelesen ?? []).filter(
|
|
15816
|
+
const profile = (gelesen ?? []).filter(isObject14);
|
|
15632
15817
|
const unlesbar = gelesen === null;
|
|
15633
15818
|
const schreibe = (neu) => onChange(feld.path, schreibListe(neu));
|
|
15634
15819
|
const alleBefunde = checkImageExecutionProfiles(profile);
|
|
@@ -20514,6 +20699,7 @@ var SzenenView = ({
|
|
|
20514
20699
|
DERIVABLE_TYPES,
|
|
20515
20700
|
ELEMENT_VERSION_SCHEMA_FILE,
|
|
20516
20701
|
FLOW_EXECUTION_PATH,
|
|
20702
|
+
GENERAL_POLICY_SUBTYPE,
|
|
20517
20703
|
MCP_CLIENT_PROVIDER,
|
|
20518
20704
|
PROBE_VERSION_ID,
|
|
20519
20705
|
PROMPT_RULE_EFFECT,
|
|
@@ -20679,6 +20865,7 @@ var SzenenView = ({
|
|
|
20679
20865
|
recoveryStatusOf,
|
|
20680
20866
|
reduceElementEvents,
|
|
20681
20867
|
resolveArea,
|
|
20868
|
+
resolveGeneralScenePolicies,
|
|
20682
20869
|
resolvePreferredHead,
|
|
20683
20870
|
resolveScenePayload,
|
|
20684
20871
|
resolveShot,
|
|
@@ -20696,6 +20883,7 @@ var SzenenView = ({
|
|
|
20696
20883
|
runStoreDifferential,
|
|
20697
20884
|
sameResponseAs,
|
|
20698
20885
|
sceneOnlyCapabilities,
|
|
20886
|
+
scenePolicyFingerprint,
|
|
20699
20887
|
scopeOfPath,
|
|
20700
20888
|
seedFehlerText,
|
|
20701
20889
|
selectPromptRuns,
|
|
@@ -20703,6 +20891,7 @@ var SzenenView = ({
|
|
|
20703
20891
|
showChain,
|
|
20704
20892
|
siblingsOf,
|
|
20705
20893
|
simulatedAnswerFor,
|
|
20894
|
+
sortScenePolicies,
|
|
20706
20895
|
sourceOf,
|
|
20707
20896
|
szenenSnapshotFilename,
|
|
20708
20897
|
totalModelCalls,
|
package/dist/szenen.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
DERIVABLE_TYPES,
|
|
9
9
|
ELEMENT_VERSION_SCHEMA_FILE,
|
|
10
10
|
FLOW_EXECUTION_PATH,
|
|
11
|
+
GENERAL_POLICY_SUBTYPE,
|
|
11
12
|
MAX_PROPOSAL_TITLE_LENGTH,
|
|
12
13
|
PROBE_VERSION_ID,
|
|
13
14
|
PROMPT_RULE_EFFECT,
|
|
@@ -154,6 +155,7 @@ import {
|
|
|
154
155
|
recoveryStatusOf,
|
|
155
156
|
reduceElementEvents,
|
|
156
157
|
resolveArea,
|
|
158
|
+
resolveGeneralScenePolicies,
|
|
157
159
|
resolveScenePayload,
|
|
158
160
|
resolveShot,
|
|
159
161
|
resolveShotPayload,
|
|
@@ -165,6 +167,7 @@ import {
|
|
|
165
167
|
runPublishChecks,
|
|
166
168
|
runSceneDerivation,
|
|
167
169
|
sceneOnlyCapabilities,
|
|
170
|
+
scenePolicyFingerprint,
|
|
168
171
|
scopeOfPath,
|
|
169
172
|
seedFehlerText,
|
|
170
173
|
selectPromptRuns,
|
|
@@ -172,6 +175,7 @@ import {
|
|
|
172
175
|
showChain,
|
|
173
176
|
siblingsOf,
|
|
174
177
|
simulatedAnswerFor,
|
|
178
|
+
sortScenePolicies,
|
|
175
179
|
sourceOf,
|
|
176
180
|
szenenSnapshotFilename,
|
|
177
181
|
typAusBytes,
|
|
@@ -182,7 +186,7 @@ import {
|
|
|
182
186
|
validateElementVersion,
|
|
183
187
|
validatePayload,
|
|
184
188
|
withReference
|
|
185
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-2ADFDRFX.mjs";
|
|
186
190
|
import {
|
|
187
191
|
ContractViolation,
|
|
188
192
|
STYLE_PAYLOAD,
|
|
@@ -1797,6 +1801,7 @@ export {
|
|
|
1797
1801
|
DERIVABLE_TYPES,
|
|
1798
1802
|
ELEMENT_VERSION_SCHEMA_FILE,
|
|
1799
1803
|
FLOW_EXECUTION_PATH,
|
|
1804
|
+
GENERAL_POLICY_SUBTYPE,
|
|
1800
1805
|
MCP_CLIENT_PROVIDER,
|
|
1801
1806
|
PROBE_VERSION_ID,
|
|
1802
1807
|
PROMPT_RULE_EFFECT,
|
|
@@ -1962,6 +1967,7 @@ export {
|
|
|
1962
1967
|
recoveryStatusOf,
|
|
1963
1968
|
reduceElementEvents,
|
|
1964
1969
|
resolveArea,
|
|
1970
|
+
resolveGeneralScenePolicies,
|
|
1965
1971
|
resolvePreferredHead,
|
|
1966
1972
|
resolveScenePayload,
|
|
1967
1973
|
resolveShot,
|
|
@@ -1979,6 +1985,7 @@ export {
|
|
|
1979
1985
|
runStoreDifferential,
|
|
1980
1986
|
sameResponseAs,
|
|
1981
1987
|
sceneOnlyCapabilities,
|
|
1988
|
+
scenePolicyFingerprint,
|
|
1982
1989
|
scopeOfPath,
|
|
1983
1990
|
seedFehlerText,
|
|
1984
1991
|
selectPromptRuns,
|
|
@@ -1986,6 +1993,7 @@ export {
|
|
|
1986
1993
|
showChain,
|
|
1987
1994
|
siblingsOf,
|
|
1988
1995
|
simulatedAnswerFor,
|
|
1996
|
+
sortScenePolicies,
|
|
1989
1997
|
sourceOf,
|
|
1990
1998
|
szenenSnapshotFilename,
|
|
1991
1999
|
totalModelCalls,
|