@rslsp1/fa-app-tools 2.0.87 → 4.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/szenen.mjs CHANGED
@@ -6,9 +6,10 @@ import {
6
6
  CapabilityAnchorError,
7
7
  DERIVABLE_TYPES,
8
8
  ELEMENT_VERSION_SCHEMA_FILE,
9
- FLOW_MODEL_DISPLAY_NAMES,
9
+ FLOW_EXECUTION_PATH,
10
10
  MAX_PROPOSAL_TITLE_LENGTH,
11
11
  PROBE_VERSION_ID,
12
+ PROMPT_RULE_EFFECT,
12
13
  REFERENCE_FIELD,
13
14
  RULES_WITHOUT_CAPABILITY_EFFECT,
14
15
  RULE_SCOPES,
@@ -32,9 +33,7 @@ import {
32
33
  buildUserPrompt,
33
34
  buildUserPrompt2,
34
35
  callOptional,
35
- callableImageModelFor,
36
36
  capabilitiesOf,
37
- capabilityForTargetModel,
38
37
  capabilityGate,
39
38
  capabilityReport,
40
39
  catalogueFor,
@@ -43,6 +42,9 @@ import {
43
42
  checkDerivationResponse,
44
43
  checkDraftChainMeta,
45
44
  checkElementType,
45
+ checkImageExecutionProfile,
46
+ checkImageExecutionProfiles,
47
+ checkImageModelParameters,
46
48
  checkOptionalId,
47
49
  checkParents,
48
50
  checkPayloadPresent,
@@ -83,17 +85,22 @@ import {
83
85
  derivationPoliciesOf,
84
86
  deriveItemFromRun,
85
87
  deriveLineage,
88
+ describableContent,
86
89
  describeTargetModelFailure,
90
+ diagnosticOfFinding,
91
+ diagnosticOfSchemaError,
87
92
  draftRevisionOf,
93
+ executableImageModels,
94
+ findExecutableImageModel,
88
95
  findImageBatch,
89
96
  findImageGenerationOrder,
90
97
  findPromptRun,
91
98
  findSceneDerivation,
92
99
  findSceneDerivationRecovery,
93
100
  firstError,
94
- flowImageProviderHasAccess,
95
101
  formatSchemaErrors,
96
102
  freezeDraftChain,
103
+ freezeSceneWorkingState,
97
104
  getSzenenSchemas,
98
105
  hasPlacementCapability,
99
106
  isKnownElementType,
@@ -109,20 +116,25 @@ import {
109
116
  parseDerivationResponse,
110
117
  parseRunResponse,
111
118
  preferredHeadRevisionOf,
119
+ promptDiagnosticsOf,
112
120
  publishedHeadsOf,
113
121
  recoveriesForRun,
114
122
  recoveryStatusOf,
115
123
  reduceElementEvents,
116
124
  resolveArea,
125
+ resolveScenePayload,
117
126
  resolveShot,
118
127
  resolveShotPayload,
119
128
  resolveTargetModelOver,
120
129
  resolverFromQueries,
121
130
  roundOfRun,
131
+ rulesWithoutPromptEffect,
122
132
  runPromptDerivation,
123
133
  runPublishChecks,
124
134
  runSceneDerivation,
135
+ sceneOnlyCapabilities,
125
136
  scopeOfPath,
137
+ selectableTargetModels,
126
138
  showChain,
127
139
  simulatedAnswerFor,
128
140
  typAusBytes,
@@ -133,14 +145,14 @@ import {
133
145
  validateElementVersion,
134
146
  validatePayload,
135
147
  withReference
136
- } from "./chunk-ZVHEHQ7A.mjs";
148
+ } from "./chunk-566GHYAT.mjs";
137
149
  import {
138
150
  ContractViolation,
139
151
  STYLE_PAYLOAD,
140
152
  STYLE_PAYLOAD_V2,
141
153
  elementStoreContractChecks,
142
154
  runElementStoreContract
143
- } from "./chunk-43TWCAG5.mjs";
155
+ } from "./chunk-C5CGSPP3.mjs";
144
156
  import {
145
157
  VersionDagError,
146
158
  buildVersionDag,
@@ -388,6 +400,10 @@ async function runStoreDifferential(left, right) {
388
400
  }
389
401
 
390
402
  // src/lib/szenen/memoryViewPort.ts
403
+ var MEMORY_IMAGE_CAPABILITY = {
404
+ environment_id: "memory",
405
+ execution_paths: [{ execution_path: "memory", provider: "google" }]
406
+ };
391
407
  function ok(value) {
392
408
  return { kind: "ok", value };
393
409
  }
@@ -513,6 +529,44 @@ function createMemoryViewPort(options = {}) {
513
529
  return ok(laeufe.filter(
514
530
  (r) => r.source?.kind === "draft_chain" && r.source.chain_id === chainId
515
531
  ));
532
+ },
533
+ // ── Der Lauf direkt aus einer Szene (D-135) ───────────────────────────
534
+ //
535
+ // Wie beim Kettenlauf bildet der Speicherport nur die **Form** ab: ein
536
+ // Lauf mit `source.kind === 'scene_direct'`, ohne Shot und ohne
537
+ // Versionskennungen. Ob ein Arbeitsstand einfrierbar ist, entscheidet
538
+ // `clientRunPort` gegen einen echten Speicher — hier waere es eine zweite
539
+ // Wahrheit.
540
+ async startRunFromScene(input) {
541
+ const runId = ids();
542
+ const basis = (options.deriveRun ?? simulierterLauf)(
543
+ { shotVersionId: "", ...input.userInstruction ? { userInstruction: input.userInstruction } : {} },
544
+ runId
545
+ );
546
+ const lauf = {
547
+ ...basis,
548
+ shot_version_id: "",
549
+ shot_element_id: "",
550
+ scene_setup_version_id: "",
551
+ camera_id: "",
552
+ target_model_version_id: "",
553
+ source: {
554
+ kind: "scene_direct",
555
+ scene: {
556
+ element_id: input.sceneElementId,
557
+ draft_id: `draft-${input.sceneElementId}`,
558
+ revision: 1,
559
+ version_id: null
560
+ }
561
+ }
562
+ };
563
+ laeufe.push(lauf);
564
+ return done(lauf);
565
+ },
566
+ async listRunsForScene(sceneElementId) {
567
+ return ok(laeufe.filter(
568
+ (r) => r.source?.kind === "scene_direct" && r.source.scene.element_id === sceneElementId
569
+ ));
516
570
  }
517
571
  };
518
572
  const itemPort = {
@@ -795,7 +849,7 @@ function createMemoryViewPort(options = {}) {
795
849
  const bilder2 = Array.from({ length: input.imageCount }, (_, position) => ({
796
850
  imageBase64: "AAAA",
797
851
  seed: input.seeds?.[position],
798
- model: `simulation:${input.callableModelId}`
852
+ model: `simulation:${input.targetModelKey}`
799
853
  }));
800
854
  return { images: bilder2 };
801
855
  }
@@ -845,7 +899,15 @@ function createMemoryViewPort(options = {}) {
845
899
  events: { async appendEvent(type, payload) {
846
900
  await imageGenerationEvents.appendEvent(type, payload);
847
901
  } },
848
- hasAccess: options.imageProviderHasAccess ?? (() => true)
902
+ capability: options.imageCapability ?? MEMORY_IMAGE_CAPABILITY,
903
+ targetModels: {
904
+ async listExecutionTargetModels() {
905
+ if (options.imageTargetModels) return ok(options.imageTargetModels);
906
+ const wahl = await selectableTargetModels(elements, [null]);
907
+ if (wahl.kind !== "ok") return wahl;
908
+ return ok(wahl.value.selectable);
909
+ }
910
+ }
849
911
  });
850
912
  const port = {
851
913
  elements,
@@ -982,41 +1044,83 @@ var FAILURE_CLASSES = [
982
1044
  ];
983
1045
  var PFLICHTFELDER = [
984
1046
  "run_id",
985
- "shot_version_id",
986
- "shot_element_id",
987
- "scene_setup_version_id",
988
- "camera_id",
989
- "target_model_version_id",
990
1047
  "provider",
991
1048
  "model_id",
992
1049
  "system_prompt",
993
1050
  "created_at"
994
1051
  ];
1052
+ var TEXTFELDER = [
1053
+ "shot_version_id",
1054
+ "shot_element_id",
1055
+ "scene_setup_version_id",
1056
+ "camera_id",
1057
+ "target_model_version_id"
1058
+ ];
1059
+ var PFLICHT_JE_HERKUNFT = {
1060
+ published: ["shot_version_id", "shot_element_id", "scene_setup_version_id"],
1061
+ draft_chain: ["shot_element_id"],
1062
+ scene_direct: []
1063
+ };
1064
+ var VERBOTEN_JE_HERKUNFT = {
1065
+ published: [],
1066
+ draft_chain: ["shot_version_id", "scene_setup_version_id"],
1067
+ scene_direct: ["shot_version_id", "shot_element_id", "scene_setup_version_id", "camera_id"]
1068
+ };
995
1069
  function istText(wert) {
996
1070
  return typeof wert === "string" && wert.trim().length > 0;
997
1071
  }
998
1072
  function isObject(wert) {
999
1073
  return typeof wert === "object" && wert !== null && !Array.isArray(wert);
1000
1074
  }
1001
- var VERSIONSFELDER = ["shot_version_id", "scene_setup_version_id"];
1002
1075
  var KETTEN_TYPEN = ["scene", "scene_setup", "shot"];
1076
+ var HERKUENFTE = ["published", "draft_chain", "scene_direct"];
1003
1077
  function pruefeLaufherkunft(quelle) {
1004
1078
  if (!isObject(quelle)) {
1005
1079
  return { ok: false, message: '"source" muss ein Objekt sein.' };
1006
1080
  }
1081
+ if (!HERKUENFTE.includes(quelle.kind)) {
1082
+ return {
1083
+ ok: false,
1084
+ message: `"source.kind" ist unbekannt: ${JSON.stringify(quelle.kind)}. Erlaubt: ${HERKUENFTE.join(", ")}.`
1085
+ };
1086
+ }
1007
1087
  if (quelle.kind === "published") {
1008
- for (const feld of VERSIONSFELDER) {
1088
+ for (const feld of ["shot_version_id", "scene_setup_version_id"]) {
1009
1089
  if (!istText(quelle[feld])) {
1010
1090
  return { ok: false, message: `"source.${feld}" fehlt oder ist leer.` };
1011
1091
  }
1012
1092
  }
1013
1093
  return { ok: true };
1014
1094
  }
1015
- if (quelle.kind !== "draft_chain") {
1016
- return {
1017
- ok: false,
1018
- message: `"source.kind" ist unbekannt: ${JSON.stringify(quelle.kind)}. Erlaubt: published, draft_chain.`
1019
- };
1095
+ if (quelle.kind === "scene_direct") {
1096
+ const szene = quelle.scene;
1097
+ if (!isObject(szene)) {
1098
+ return { ok: false, message: '"source.scene" muss ein Objekt sein.' };
1099
+ }
1100
+ if (!istText(szene.element_id)) {
1101
+ return { ok: false, message: '"source.scene.element_id" fehlt oder ist leer.' };
1102
+ }
1103
+ const ausEntwurf = istText(szene.draft_id);
1104
+ const ausVersion = istText(szene.version_id);
1105
+ if (ausEntwurf === ausVersion) {
1106
+ return {
1107
+ ok: false,
1108
+ message: ausEntwurf ? '"source.scene" nennt draft_id und version_id zugleich. Eingefroren wurde genau ein Stand (D-135).' : '"source.scene" nennt weder draft_id noch version_id. Ohne den eingefrorenen Stand ist der Lauf nicht nachvollziehbar (D-97).'
1109
+ };
1110
+ }
1111
+ if (ausEntwurf && (typeof szene.revision !== "number" || !Number.isInteger(szene.revision))) {
1112
+ return {
1113
+ ok: false,
1114
+ message: '"source.scene.revision" muss eine ganze Zahl sein \u2014 ohne sie ist der eingefrorene Entwurfsstand nicht benennbar (D-97).'
1115
+ };
1116
+ }
1117
+ if (ausVersion && szene.revision !== null && szene.revision !== void 0) {
1118
+ return {
1119
+ ok: false,
1120
+ message: '"source.scene.revision" ist bei einer veroeffentlichten Version gesetzt. Eine Version ist unveraenderlich und hat keine Revision (D-02).'
1121
+ };
1122
+ }
1123
+ return { ok: true };
1020
1124
  }
1021
1125
  if (!istText(quelle.chain_id)) {
1022
1126
  return { ok: false, message: '"source.chain_id" fehlt oder ist leer.' };
@@ -1067,25 +1171,38 @@ function checkPromptRunRecord(candidate) {
1067
1171
  }
1068
1172
  const record = candidate;
1069
1173
  const quelle = record.source;
1070
- const ausKette = isObject(quelle) && quelle.kind === "draft_chain";
1071
1174
  if (quelle !== void 0) {
1072
1175
  const urteil2 = pruefeLaufherkunft(quelle);
1073
1176
  if (!urteil2.ok) return urteil2;
1074
1177
  }
1075
- const pflicht = ausKette ? PFLICHTFELDER.filter((f) => !VERSIONSFELDER.includes(f)) : PFLICHTFELDER;
1076
- for (const feld of pflicht) {
1178
+ const herkunft = isObject(quelle) && typeof quelle.kind === "string" ? quelle.kind : "published";
1179
+ for (const feld of PFLICHTFELDER) {
1077
1180
  if (!istText(record[feld])) {
1078
1181
  return { ok: false, message: `"${feld}" fehlt oder ist leer.` };
1079
1182
  }
1080
1183
  }
1081
- if (ausKette) {
1082
- for (const feld of VERSIONSFELDER) {
1083
- if (istText(record[feld])) {
1084
- return {
1085
- ok: false,
1086
- message: `"${feld}" ist bei einem Lauf aus einer Draft-Kette gesetzt. Dort gibt es keine Versionen, und erfundene sind unzulaessig (D-98).`
1087
- };
1088
- }
1184
+ for (const feld of TEXTFELDER) {
1185
+ if (typeof record[feld] !== "string") {
1186
+ return {
1187
+ ok: false,
1188
+ message: `"${feld}" fehlt. Wo es keinen Wert gibt, gehoert eine leere Zeichenkette hin \u2014 kein fehlendes Feld (D-135).`
1189
+ };
1190
+ }
1191
+ }
1192
+ for (const feld of PFLICHT_JE_HERKUNFT[herkunft] ?? []) {
1193
+ if (!istText(record[feld])) {
1194
+ return {
1195
+ ok: false,
1196
+ message: `"${feld}" fehlt oder ist leer, wird bei Herkunft "${herkunft}" aber gebraucht.`
1197
+ };
1198
+ }
1199
+ }
1200
+ for (const feld of VERBOTEN_JE_HERKUNFT[herkunft] ?? []) {
1201
+ if (istText(record[feld])) {
1202
+ return {
1203
+ ok: false,
1204
+ message: `"${feld}" ist bei einem Lauf der Herkunft "${herkunft}" gesetzt. Dort gibt es diesen Wert nicht, und erfundene sind unzulaessig (D-98/D-135).`
1205
+ };
1089
1206
  }
1090
1207
  }
1091
1208
  if (record.status !== "succeeded" && record.status !== "failed") {
@@ -1459,8 +1576,9 @@ export {
1459
1576
  ContractViolation,
1460
1577
  DERIVABLE_TYPES,
1461
1578
  ELEMENT_VERSION_SCHEMA_FILE,
1462
- FLOW_MODEL_DISPLAY_NAMES,
1579
+ FLOW_EXECUTION_PATH,
1463
1580
  PROBE_VERSION_ID,
1581
+ PROMPT_RULE_EFFECT,
1464
1582
  REFERENCE_FIELD,
1465
1583
  RULES_WITHOUT_CAPABILITY_EFFECT,
1466
1584
  RULE_SCOPES,
@@ -1487,9 +1605,7 @@ export {
1487
1605
  buildUserPrompt2 as buildUserPrompt,
1488
1606
  buildVersionDag,
1489
1607
  callOptional,
1490
- callableImageModelFor,
1491
1608
  capabilitiesOf,
1492
- capabilityForTargetModel,
1493
1609
  capabilityGate,
1494
1610
  capabilityReport,
1495
1611
  catalogueFor,
@@ -1498,6 +1614,9 @@ export {
1498
1614
  checkDerivationResponse,
1499
1615
  checkDraftChainMeta,
1500
1616
  checkElementType,
1617
+ checkImageExecutionProfile,
1618
+ checkImageExecutionProfiles,
1619
+ checkImageModelParameters,
1501
1620
  checkOptionalId,
1502
1621
  checkParents,
1503
1622
  checkPayloadPresent,
@@ -1545,10 +1664,15 @@ export {
1545
1664
  derivationPoliciesOf,
1546
1665
  deriveItemFromRun,
1547
1666
  deriveLineage,
1667
+ describableContent,
1548
1668
  describeTargetModelFailure,
1669
+ diagnosticOfFinding,
1670
+ diagnosticOfSchemaError,
1549
1671
  differentialSteps,
1550
1672
  draftRevisionOf,
1551
1673
  elementStoreContractChecks,
1674
+ executableImageModels,
1675
+ findExecutableImageModel,
1552
1676
  findImageBatch,
1553
1677
  findImageGenerationOrder,
1554
1678
  findPromptRun,
@@ -1556,9 +1680,9 @@ export {
1556
1680
  findSceneDerivation,
1557
1681
  findSceneDerivationRecovery,
1558
1682
  firstError,
1559
- flowImageProviderHasAccess,
1560
1683
  formatSchemaErrors,
1561
1684
  freezeDraftChain,
1685
+ freezeSceneWorkingState,
1562
1686
  getSzenenSchemas,
1563
1687
  hasPlacementCapability,
1564
1688
  isKnownElementType,
@@ -1575,23 +1699,28 @@ export {
1575
1699
  parseRunResponse,
1576
1700
  preferredHeadRevisionOf,
1577
1701
  preferredVersionId,
1702
+ promptDiagnosticsOf,
1578
1703
  publishedHeadsOf,
1579
1704
  recoveriesForRun,
1580
1705
  recoveryStatusOf,
1581
1706
  reduceElementEvents,
1582
1707
  resolveArea,
1583
1708
  resolvePreferredHead,
1709
+ resolveScenePayload,
1584
1710
  resolveShot,
1585
1711
  resolveShotPayload,
1586
1712
  resolveTargetModelOver,
1587
1713
  resolverFromQueries,
1588
1714
  roundOfRun,
1715
+ rulesWithoutPromptEffect,
1589
1716
  runElementStoreContract,
1590
1717
  runPromptDerivation,
1591
1718
  runPublishChecks,
1592
1719
  runSceneDerivation,
1593
1720
  runStoreDifferential,
1721
+ sceneOnlyCapabilities,
1594
1722
  scopeOfPath,
1723
+ selectableTargetModels,
1595
1724
  showChain,
1596
1725
  simulatedAnswerFor,
1597
1726
  totalModelCalls,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rslsp1/fa-app-tools",
3
- "version": "2.0.87",
3
+ "version": "4.0.0",
4
4
  "description": "Shared tools and hooks for Fine Art flow apps",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",