@cadenza.io/service 2.17.80 → 2.18.1

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/index.mjs CHANGED
@@ -220,6 +220,13 @@ var DatabaseTask = class extends DeputyTask {
220
220
  const metadata = context.getMetadata();
221
221
  const dynamicQueryData = ctx.queryData ?? {};
222
222
  delete ctx.queryData;
223
+ const nextQueryData = {
224
+ ...this.queryData,
225
+ data: {
226
+ ...ctx.data
227
+ },
228
+ ...dynamicQueryData
229
+ };
223
230
  const deputyContext = {
224
231
  ...ctx,
225
232
  __localTaskName: this.name,
@@ -236,13 +243,13 @@ var DatabaseTask = class extends DeputyTask {
236
243
  __blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
237
244
  __deputyTaskName: this.name
238
245
  },
239
- queryData: {
240
- ...this.queryData,
241
- data: {
242
- ...ctx.data
243
- },
244
- ...dynamicQueryData
245
- }
246
+ data: nextQueryData.data ?? ctx.data,
247
+ batch: nextQueryData.batch ?? ctx.batch,
248
+ transaction: nextQueryData.transaction ?? ctx.transaction,
249
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
250
+ filter: nextQueryData.filter ?? ctx.filter,
251
+ fields: nextQueryData.fields ?? ctx.fields,
252
+ queryData: nextQueryData
246
253
  };
247
254
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
248
255
  }
@@ -676,6 +683,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
676
683
  // src/registry/ServiceRegistry.ts
677
684
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
678
685
  var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
686
+ var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
679
687
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
680
688
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
681
689
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -763,18 +771,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
763
771
  }
764
772
  return result;
765
773
  }
766
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
767
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
768
- }
769
- function summarizeTransportDescriptors(transports) {
770
- return transports.map((transport) => ({
771
- uuid: transport.uuid,
772
- serviceInstanceId: transport.serviceInstanceId,
773
- role: transport.role,
774
- origin: transport.origin,
775
- protocols: transport.protocols
776
- }));
777
- }
778
774
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
779
775
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
780
776
  tableName,
@@ -791,6 +787,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
791
787
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
792
788
  const delegationContext = ensureDelegationContextMetadata({
793
789
  ...ctx,
790
+ data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
791
+ batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
792
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
793
+ transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
794
794
  queryData: nextQueryData
795
795
  });
796
796
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -914,6 +914,7 @@ var ServiceRegistry = class _ServiceRegistry {
914
914
  this.deputies = /* @__PURE__ */ new Map();
915
915
  this.remoteSignals = /* @__PURE__ */ new Map();
916
916
  this.remoteIntents = /* @__PURE__ */ new Map();
917
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
917
918
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
918
919
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
919
920
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1165,21 +1166,6 @@ var ServiceRegistry = class _ServiceRegistry {
1165
1166
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1166
1167
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1167
1168
  }
1168
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1169
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1170
- localServiceName: this.serviceName,
1171
- localServiceInstanceId: this.serviceInstanceId,
1172
- targetServiceName: serviceName,
1173
- targetServiceInstanceId: uuid8,
1174
- existingInstance: !!existing,
1175
- deleted,
1176
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1177
- hasDeputies: this.deputies.has(serviceName),
1178
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1179
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1180
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1181
- });
1182
- }
1183
1169
  if (!serviceInstance.isBootstrapPlaceholder) {
1184
1170
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid8, emit);
1185
1171
  }
@@ -1192,7 +1178,8 @@ var ServiceRegistry = class _ServiceRegistry {
1192
1178
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1193
1179
  const connected = this.ensureDependeeClientForInstance(
1194
1180
  trackedInstance,
1195
- emit
1181
+ emit,
1182
+ ctx
1196
1183
  );
1197
1184
  if (!connected) {
1198
1185
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1235,27 +1222,6 @@ var ServiceRegistry = class _ServiceRegistry {
1235
1222
  break;
1236
1223
  }
1237
1224
  }
1238
- if (shouldTraceIotDbRegistryPath(
1239
- this.serviceName,
1240
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1241
- )) {
1242
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1243
- localServiceName: this.serviceName,
1244
- localServiceInstanceId: this.serviceInstanceId,
1245
- transport: {
1246
- uuid: transport.uuid,
1247
- serviceInstanceId: transport.serviceInstanceId,
1248
- role: transport.role,
1249
- origin: transport.origin,
1250
- protocols: transport.protocols,
1251
- deleted: transport.deleted
1252
- },
1253
- ownerFound: !!ownerInstance,
1254
- ownerServiceName: ownerInstance?.serviceName,
1255
- ownerInstanceId: ownerInstance?.uuid,
1256
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1257
- });
1258
- }
1259
1225
  if (!ownerInstance) {
1260
1226
  return false;
1261
1227
  }
@@ -1281,7 +1247,7 @@ var ServiceRegistry = class _ServiceRegistry {
1281
1247
  if (!hasRemoteInterest) {
1282
1248
  return true;
1283
1249
  }
1284
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1250
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1285
1251
  return true;
1286
1252
  },
1287
1253
  "Handles service transport updates independently from instance rows."
@@ -1311,29 +1277,12 @@ var ServiceRegistry = class _ServiceRegistry {
1311
1277
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1312
1278
  ).doOn("meta.service_registry.dependee_registered");
1313
1279
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1314
- const getLocalTraceContext = () => ({
1315
- localServiceName: this.serviceName,
1316
- localServiceInstanceId: this.serviceInstanceId
1317
- });
1318
1280
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1319
1281
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1320
1282
  if (serviceInstances.length === 0) {
1321
1283
  return;
1322
1284
  }
1323
1285
  for (const serviceInstance of serviceInstances) {
1324
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1325
- if (shouldTraceIotDbRegistryPath(
1326
- localServiceName,
1327
- serviceInstance.serviceName
1328
- )) {
1329
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1330
- localServiceName,
1331
- localServiceInstanceId,
1332
- targetServiceName: serviceInstance.serviceName,
1333
- targetServiceInstanceId: serviceInstance.uuid,
1334
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1335
- });
1336
- }
1337
1286
  yield { serviceInstance };
1338
1287
  }
1339
1288
  }).doOn(
@@ -1379,6 +1328,15 @@ var ServiceRegistry = class _ServiceRegistry {
1379
1328
  },
1380
1329
  "Handles registration of remote signals"
1381
1330
  ).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
1331
+ this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
1332
+ "Reconcile gathered sync signal transmissions",
1333
+ (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
1334
+ "Keeps gathered sync transmitters aligned with known remote service instances."
1335
+ ).doOn(
1336
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
1337
+ META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
1338
+ "meta.service_registry.service_discovered"
1339
+ );
1382
1340
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1383
1341
  "Handle global intent registration",
1384
1342
  (ctx, emit) => {
@@ -1388,34 +1346,20 @@ var ServiceRegistry = class _ServiceRegistry {
1388
1346
  if (!a.deleted && b.deleted) return 1;
1389
1347
  return 0;
1390
1348
  });
1391
- if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
1392
- const relevantIntentNames = sorted.filter(
1393
- (map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
1394
- ).map((map) => ({
1395
- intentName: map.intentName,
1396
- serviceName: map.serviceName,
1397
- taskName: map.taskName,
1398
- taskVersion: map.taskVersion,
1399
- deleted: !!map.deleted
1400
- }));
1401
- console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
1402
- localServiceName: this.serviceName,
1403
- localServiceInstanceId: this.serviceInstanceId,
1404
- signalName: ctx.__signalName,
1405
- totalIntentMaps: sorted.length,
1406
- relevantIntentNames
1407
- });
1408
- }
1409
1349
  for (const map of sorted) {
1410
- if (map.deleted) {
1411
- this.unregisterRemoteIntentDeputy(map);
1412
- continue;
1350
+ try {
1351
+ if (map.deleted) {
1352
+ this.unregisterRemoteIntentDeputy(map);
1353
+ continue;
1354
+ }
1355
+ CadenzaService.inquiryBroker.addIntent({
1356
+ name: map.intentName
1357
+ });
1358
+ this.registerRemoteIntentDeputy(map);
1359
+ this.ensureDependeeClientsForService(map.serviceName, emit);
1360
+ } catch (error) {
1361
+ throw error;
1413
1362
  }
1414
- CadenzaService.inquiryBroker.addIntent({
1415
- name: map.intentName
1416
- });
1417
- this.registerRemoteIntentDeputy(map);
1418
- this.ensureDependeeClientsForService(map.serviceName, emit);
1419
1363
  }
1420
1364
  return true;
1421
1365
  },
@@ -1567,7 +1511,7 @@ var ServiceRegistry = class _ServiceRegistry {
1567
1511
  {
1568
1512
  uuid: report.transportId,
1569
1513
  serviceInstanceId: report.serviceInstanceId,
1570
- role: this.getRoutingTransportRole(),
1514
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1571
1515
  origin: report.transportOrigin,
1572
1516
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1573
1517
  securityProfile: null,
@@ -1609,21 +1553,6 @@ var ServiceRegistry = class _ServiceRegistry {
1609
1553
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1610
1554
  inquiryResult
1611
1555
  );
1612
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1613
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1614
- uuid: instance.uuid,
1615
- isActive: instance.isActive,
1616
- isNonResponsive: instance.isNonResponsive,
1617
- isBlocked: instance.isBlocked,
1618
- transports: summarizeTransportDescriptors(instance.transports)
1619
- }));
1620
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1621
- localServiceName: this.serviceName,
1622
- localServiceInstanceId: this.serviceInstanceId,
1623
- totalServiceInstances: serviceInstances.length,
1624
- tracedInstances
1625
- });
1626
- }
1627
1556
  return {
1628
1557
  ...ctx,
1629
1558
  signalToTaskMaps,
@@ -1720,44 +1649,6 @@ var ServiceRegistry = class _ServiceRegistry {
1720
1649
  let retries = __retries ?? 0;
1721
1650
  let triedInstances = __triedInstances ?? [];
1722
1651
  const preferredRole = this.getRoutingTransportRole();
1723
- const allInstances = this.instances.get(__serviceName) ?? [];
1724
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1725
- this.serviceName,
1726
- __serviceName ?? void 0
1727
- ) ? allInstances.map((instance) => ({
1728
- uuid: instance.uuid,
1729
- isActive: instance.isActive,
1730
- isNonResponsive: instance.isNonResponsive,
1731
- isBlocked: instance.isBlocked,
1732
- isFrontend: instance.isFrontend,
1733
- transports: summarizeTransportDescriptors(instance.transports),
1734
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1735
- instance,
1736
- context,
1737
- preferredRole
1738
- ) ? {
1739
- uuid: this.selectTransportForInstance(
1740
- instance,
1741
- context,
1742
- preferredRole
1743
- ).uuid,
1744
- role: this.selectTransportForInstance(
1745
- instance,
1746
- context,
1747
- preferredRole
1748
- ).role,
1749
- origin: this.selectTransportForInstance(
1750
- instance,
1751
- context,
1752
- preferredRole
1753
- ).origin,
1754
- protocols: this.selectTransportForInstance(
1755
- instance,
1756
- context,
1757
- preferredRole
1758
- ).protocols
1759
- } : null
1760
- })) : void 0;
1761
1652
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1762
1653
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1763
1654
  return false;
@@ -1790,20 +1681,6 @@ var ServiceRegistry = class _ServiceRegistry {
1790
1681
  }
1791
1682
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1792
1683
  });
1793
- if (candidateDiagnostics) {
1794
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1795
- localServiceName: this.serviceName,
1796
- localServiceInstanceId: this.serviceInstanceId,
1797
- targetServiceName: __serviceName,
1798
- preferredRole,
1799
- useSocket: this.useSocket,
1800
- targetServiceInstanceId,
1801
- retries,
1802
- triedInstances,
1803
- candidateDiagnostics,
1804
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1805
- });
1806
- }
1807
1684
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1808
1685
  context.errored = true;
1809
1686
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2061,6 +1938,7 @@ var ServiceRegistry = class _ServiceRegistry {
2061
1938
  serviceName: report.serviceName,
2062
1939
  serviceInstanceId: report.serviceInstanceId,
2063
1940
  transportId: report.transportId,
1941
+ transportRole: report.transportRole,
2064
1942
  transportOrigin: report.transportOrigin,
2065
1943
  transportProtocols: report.transportProtocols,
2066
1944
  isFrontend: report.isFrontend,
@@ -2677,6 +2555,64 @@ var ServiceRegistry = class _ServiceRegistry {
2677
2555
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2678
2556
  );
2679
2557
  }
2558
+ shouldReconcileGatheredSyncTransmissions() {
2559
+ return this.serviceName === "CadenzaDB";
2560
+ }
2561
+ collectGatheredSyncTransmissionRecipients(ctx) {
2562
+ const recipients = /* @__PURE__ */ new Set();
2563
+ const addRecipient = (serviceName) => {
2564
+ const normalizedServiceName = String(serviceName ?? "").trim();
2565
+ if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
2566
+ return;
2567
+ }
2568
+ recipients.add(normalizedServiceName);
2569
+ };
2570
+ addRecipient(ctx.serviceName ?? ctx.__serviceName);
2571
+ for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
2572
+ addRecipient(instance.serviceName);
2573
+ }
2574
+ for (const [serviceName, instances] of this.instances.entries()) {
2575
+ if (!instances?.length) {
2576
+ continue;
2577
+ }
2578
+ addRecipient(serviceName);
2579
+ }
2580
+ return recipients;
2581
+ }
2582
+ reconcileGatheredSyncTransmissions(ctx, emit) {
2583
+ if (!this.shouldReconcileGatheredSyncTransmissions()) {
2584
+ return false;
2585
+ }
2586
+ const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
2587
+ const createdRecipients = [];
2588
+ for (const serviceName of desiredRecipients) {
2589
+ if (this.gatheredSyncTransmissionServices.has(serviceName)) {
2590
+ continue;
2591
+ }
2592
+ CadenzaService.createSignalTransmissionTask(
2593
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
2594
+ serviceName
2595
+ );
2596
+ this.gatheredSyncTransmissionServices.add(serviceName);
2597
+ createdRecipients.push(serviceName);
2598
+ }
2599
+ for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
2600
+ if (desiredRecipients.has(serviceName)) {
2601
+ continue;
2602
+ }
2603
+ CadenzaService.get(
2604
+ `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
2605
+ )?.destroy();
2606
+ this.gatheredSyncTransmissionServices.delete(serviceName);
2607
+ }
2608
+ if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
2609
+ emit("meta.cadenza_db.sync_tick", {
2610
+ __syncing: true,
2611
+ __reason: "gathered_sync_transmissions_reconciled"
2612
+ });
2613
+ }
2614
+ return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
2615
+ }
2680
2616
  registerRemoteIntentDeputy(map) {
2681
2617
  if (!this.serviceName || map.serviceName === this.serviceName) {
2682
2618
  return;
@@ -2919,38 +2855,18 @@ var ServiceRegistry = class _ServiceRegistry {
2919
2855
  }
2920
2856
  return communicationTypes;
2921
2857
  }
2922
- ensureDependeeClientForInstance(instance, emit) {
2858
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2923
2859
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2924
2860
  return false;
2925
2861
  }
2926
2862
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2927
2863
  return false;
2928
2864
  }
2929
- const transport = this.getRouteableTransport(
2865
+ const transport = this.selectTransportForInstance(
2930
2866
  instance,
2931
- this.useSocket ? "socket" : "rest"
2932
- );
2933
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2934
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2935
- localServiceName: this.serviceName,
2936
- localServiceInstanceId: this.serviceInstanceId,
2937
- targetServiceName: instance.serviceName,
2938
- targetServiceInstanceId: instance.uuid,
2939
- useSocket: this.useSocket,
2940
- routeableRole: this.getRoutingTransportRole(),
2941
- hasDeputies: this.deputies.has(instance.serviceName),
2942
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2943
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2944
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2945
- transports: summarizeTransportDescriptors(instance.transports),
2946
- selectedTransport: transport ? {
2947
- uuid: transport.uuid,
2948
- role: transport.role,
2949
- origin: transport.origin,
2950
- protocols: transport.protocols
2951
- } : null
2952
- });
2953
- }
2867
+ ctx ?? {},
2868
+ this.getRoutingTransportRole()
2869
+ );
2954
2870
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
2955
2871
  return false;
2956
2872
  }
@@ -2967,9 +2883,9 @@ var ServiceRegistry = class _ServiceRegistry {
2967
2883
  this.markTransportClientCreated(instance, transport.uuid);
2968
2884
  return true;
2969
2885
  }
2970
- ensureDependeeClientsForService(serviceName, emit) {
2886
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
2971
2887
  for (const instance of this.instances.get(serviceName) ?? []) {
2972
- this.ensureDependeeClientForInstance(instance, emit);
2888
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
2973
2889
  }
2974
2890
  }
2975
2891
  hasTransportClientCreated(instance, transportId) {
@@ -3028,6 +2944,10 @@ var ServiceRegistry = class _ServiceRegistry {
3028
2944
  if (!instances?.length) {
3029
2945
  return;
3030
2946
  }
2947
+ const resolvedInstance = instances.find(
2948
+ (instance) => instance.uuid === resolvedInstanceId
2949
+ );
2950
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3031
2951
  const placeholders = instances.filter(
3032
2952
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3033
2953
  );
@@ -3039,7 +2959,33 @@ var ServiceRegistry = class _ServiceRegistry {
3039
2959
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3040
2960
  placeholder.uuid
3041
2961
  );
2962
+ const preservedTransportIds = /* @__PURE__ */ new Set();
2963
+ if (resolvedInstance && frontendRoutingRole) {
2964
+ const resolvedHasFrontendRoute = resolvedInstance.transports.some(
2965
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
2966
+ );
2967
+ if (!resolvedHasFrontendRoute) {
2968
+ const transportsToPreserve = placeholder.transports.filter(
2969
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
2970
+ );
2971
+ for (const transport of transportsToPreserve) {
2972
+ if (resolvedInstance.transports.some(
2973
+ (existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
2974
+ )) {
2975
+ continue;
2976
+ }
2977
+ resolvedInstance.transports.push({
2978
+ ...transport,
2979
+ serviceInstanceId: resolvedInstanceId
2980
+ });
2981
+ preservedTransportIds.add(transport.uuid);
2982
+ }
2983
+ }
2984
+ }
3042
2985
  for (const transport of placeholder.transports) {
2986
+ if (preservedTransportIds.has(transport.uuid)) {
2987
+ continue;
2988
+ }
3043
2989
  const transportKey = buildTransportClientKey(transport);
3044
2990
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3045
2991
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3160,6 +3106,7 @@ var ServiceRegistry = class _ServiceRegistry {
3160
3106
  return null;
3161
3107
  }
3162
3108
  const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
3109
+ const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
3163
3110
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3164
3111
  const transportProtocols = Array.isArray(
3165
3112
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3185,6 +3132,7 @@ var ServiceRegistry = class _ServiceRegistry {
3185
3132
  serviceName,
3186
3133
  serviceInstanceId,
3187
3134
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3135
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3188
3136
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3189
3137
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3190
3138
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3207,13 +3155,16 @@ var ServiceRegistry = class _ServiceRegistry {
3207
3155
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3208
3156
  const existingTransport = this.getTransportById(instance, report.transportId);
3209
3157
  if (existingTransport) {
3158
+ if (report.transportRole) {
3159
+ existingTransport.role = report.transportRole;
3160
+ }
3210
3161
  existingTransport.origin = report.transportOrigin;
3211
3162
  existingTransport.protocols = protocols;
3212
3163
  } else {
3213
3164
  instance.transports.push({
3214
3165
  uuid: report.transportId,
3215
3166
  serviceInstanceId: report.serviceInstanceId,
3216
- role: this.getRoutingTransportRole(),
3167
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3217
3168
  origin: report.transportOrigin,
3218
3169
  protocols,
3219
3170
  securityProfile: null,
@@ -3259,24 +3210,18 @@ var ServiceRegistry = class _ServiceRegistry {
3259
3210
  localInstance.isBlocked
3260
3211
  );
3261
3212
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3213
+ const transport = this.getRouteableTransport(
3214
+ localInstance,
3215
+ this.useSocket ? "socket" : "rest",
3216
+ "internal"
3217
+ );
3262
3218
  const report = {
3263
3219
  serviceName: this.serviceName,
3264
3220
  serviceInstanceId: this.serviceInstanceId,
3265
- transportId: this.getRouteableTransport(
3266
- localInstance,
3267
- this.useSocket ? "socket" : "rest",
3268
- "internal"
3269
- )?.uuid ?? void 0,
3270
- transportOrigin: this.getRouteableTransport(
3271
- localInstance,
3272
- this.useSocket ? "socket" : "rest",
3273
- "internal"
3274
- )?.origin ?? void 0,
3275
- transportProtocols: this.getRouteableTransport(
3276
- localInstance,
3277
- this.useSocket ? "socket" : "rest",
3278
- "internal"
3279
- )?.protocols ?? void 0,
3221
+ transportId: transport?.uuid ?? void 0,
3222
+ transportRole: transport?.role ?? void 0,
3223
+ transportOrigin: transport?.origin ?? void 0,
3224
+ transportProtocols: transport?.protocols ?? void 0,
3280
3225
  isFrontend: localInstance.isFrontend,
3281
3226
  reportedAt,
3282
3227
  state: snapshot.state,
@@ -3640,6 +3585,7 @@ var ServiceRegistry = class _ServiceRegistry {
3640
3585
  this.deputies.clear();
3641
3586
  this.remoteSignals.clear();
3642
3587
  this.remoteIntents.clear();
3588
+ this.gatheredSyncTransmissionServices.clear();
3643
3589
  this.remoteIntentDeputiesByKey.clear();
3644
3590
  this.remoteIntentDeputiesByTask.clear();
3645
3591
  this.dependeesByService.clear();
@@ -3998,19 +3944,6 @@ var RestController = class _RestController {
3998
3944
  let ctx2;
3999
3945
  try {
4000
3946
  ctx2 = req.body;
4001
- if (ctx2?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
4002
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_rest", {
4003
- localServiceName: CadenzaService.serviceRegistry.serviceName,
4004
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
4005
- signalName: ctx2.__signalName,
4006
- intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
4007
- signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
4008
- serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
4009
- serviceInstanceTransports: Array.isArray(
4010
- ctx2.serviceInstanceTransports
4011
- ) ? ctx2.serviceInstanceTransports.length : 0
4012
- });
4013
- }
4014
3947
  if (!CadenzaService.signalBroker.listObservedSignals().includes(ctx2.__signalName)) {
4015
3948
  res.send({
4016
3949
  ...ctx2,
@@ -4395,21 +4328,6 @@ var RestController = class _RestController {
4395
4328
  if (ctx2.__signalName === void 0) {
4396
4329
  return;
4397
4330
  }
4398
- if (ctx2.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
4399
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_rest", {
4400
- localServiceName: CadenzaService.serviceRegistry.serviceName,
4401
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
4402
- targetServiceName: serviceName,
4403
- targetUrl: URL2,
4404
- signalName: ctx2.__signalName,
4405
- intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
4406
- signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
4407
- serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
4408
- serviceInstanceTransports: Array.isArray(
4409
- ctx2.serviceInstanceTransports
4410
- ) ? ctx2.serviceInstanceTransports.length : 0
4411
- });
4412
- }
4413
4331
  fetchDiagnostics.signalTransmissions++;
4414
4332
  fetchDiagnostics.updatedAt = Date.now();
4415
4333
  let response;
@@ -5419,10 +5337,14 @@ var SocketController = class _SocketController {
5419
5337
  const communicationTypes = this.normalizeCommunicationTypes(
5420
5338
  input.communicationTypes
5421
5339
  );
5340
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
5422
5341
  const serviceName = String(input.serviceName ?? "");
5423
5342
  const serviceTransportId = String(input.serviceTransportId ?? "");
5424
5343
  const serviceOrigin = String(input.serviceOrigin ?? "");
5425
5344
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
5345
+ if (!transportProtocols.includes("socket")) {
5346
+ return false;
5347
+ }
5426
5348
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
5427
5349
  CadenzaService.log(
5428
5350
  "Socket client setup skipped due to missing transport origin",
@@ -5448,7 +5370,7 @@ var SocketController = class _SocketController {
5448
5370
  serviceName,
5449
5371
  serviceTransportId,
5450
5372
  serviceOrigin,
5451
- transportProtocols: input.transportProtocols,
5373
+ transportProtocols,
5452
5374
  url
5453
5375
  });
5454
5376
  };
@@ -5469,7 +5391,7 @@ var SocketController = class _SocketController {
5469
5391
  serviceName,
5470
5392
  serviceTransportId,
5471
5393
  serviceOrigin,
5472
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
5394
+ transportProtocols,
5473
5395
  url,
5474
5396
  destroyed: false,
5475
5397
  updatedAt: Date.now()
@@ -5710,19 +5632,6 @@ var SocketController = class _SocketController {
5710
5632
  });
5711
5633
  });
5712
5634
  socket.on("signal", (signalCtx, callback) => {
5713
- if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5714
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
5715
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5716
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5717
- signalName: signalCtx.__signalName,
5718
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5719
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5720
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5721
- serviceInstanceTransports: Array.isArray(
5722
- signalCtx.serviceInstanceTransports
5723
- ) ? signalCtx.serviceInstanceTransports.length : 0
5724
- });
5725
- }
5726
5635
  if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
5727
5636
  if (isSocketAckCallback(callback)) {
5728
5637
  callback({
@@ -6021,21 +5930,6 @@ var SocketController = class _SocketController {
6021
5930
  if (signalCtx.__signalName === void 0) {
6022
5931
  return;
6023
5932
  }
6024
- if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
6025
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
6026
- localServiceName: CadenzaService.serviceRegistry.serviceName,
6027
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
6028
- targetServiceName: serviceName,
6029
- targetUrl: url,
6030
- signalName: signalCtx.__signalName,
6031
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
6032
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
6033
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
6034
- serviceInstanceTransports: Array.isArray(
6035
- signalCtx.serviceInstanceTransports
6036
- ) ? signalCtx.serviceInstanceTransports.length : 0
6037
- });
6038
- }
6039
5933
  delete signalCtx.__broadcast;
6040
5934
  const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
6041
5935
  errored: true,
@@ -6076,7 +5970,7 @@ var SocketController = class _SocketController {
6076
5970
  communicationTypes,
6077
5971
  serviceTransportId,
6078
5972
  serviceOrigin,
6079
- transportProtocols: input.transportProtocols,
5973
+ transportProtocols,
6080
5974
  handshakeData: {
6081
5975
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
6082
5976
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -6436,6 +6330,209 @@ var SignalController = class _SignalController {
6436
6330
  }
6437
6331
  };
6438
6332
 
6333
+ // src/runtime/RuntimeValidationController.ts
6334
+ var RUNTIME_VALIDATION_INTENTS = {
6335
+ getPolicy: "meta-runtime-validation-policy-get",
6336
+ setPolicy: "meta-runtime-validation-policy-set",
6337
+ replacePolicy: "meta-runtime-validation-policy-replace",
6338
+ clearPolicy: "meta-runtime-validation-policy-clear",
6339
+ listScopes: "meta-runtime-validation-scope-list",
6340
+ upsertScope: "meta-runtime-validation-scope-upsert",
6341
+ removeScope: "meta-runtime-validation-scope-remove",
6342
+ clearScopes: "meta-runtime-validation-scope-clear"
6343
+ };
6344
+ var RUNTIME_VALIDATION_SIGNALS = {
6345
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
6346
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
6347
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
6348
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
6349
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
6350
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
6351
+ policyUpdated: "meta.runtime_validation.policy_updated",
6352
+ policyCleared: "meta.runtime_validation.policy_cleared",
6353
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
6354
+ scopeRemoved: "meta.runtime_validation.scope_removed",
6355
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
6356
+ };
6357
+ function normalizePolicyContext(ctx) {
6358
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
6359
+ const policy = {};
6360
+ for (const key of [
6361
+ "metaInput",
6362
+ "metaOutput",
6363
+ "businessInput",
6364
+ "businessOutput",
6365
+ "warnOnMissingMetaInputSchema",
6366
+ "warnOnMissingMetaOutputSchema",
6367
+ "warnOnMissingBusinessInputSchema",
6368
+ "warnOnMissingBusinessOutputSchema"
6369
+ ]) {
6370
+ if (source[key] !== void 0) {
6371
+ policy[key] = source[key];
6372
+ }
6373
+ }
6374
+ return policy;
6375
+ }
6376
+ function normalizeScopeContext(ctx) {
6377
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
6378
+ return {
6379
+ id: source.id,
6380
+ active: source.active,
6381
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
6382
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
6383
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
6384
+ };
6385
+ }
6386
+ var RuntimeValidationController = class _RuntimeValidationController {
6387
+ static get instance() {
6388
+ if (!this._instance) {
6389
+ this._instance = new _RuntimeValidationController();
6390
+ }
6391
+ return this._instance;
6392
+ }
6393
+ constructor() {
6394
+ CadenzaService.defineIntent({
6395
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
6396
+ description: "Get the active runtime validation policy.",
6397
+ input: { type: "object" },
6398
+ output: { type: "object" }
6399
+ });
6400
+ CadenzaService.defineIntent({
6401
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
6402
+ description: "Merge fields into the active runtime validation policy.",
6403
+ input: { type: "object" },
6404
+ output: { type: "object" }
6405
+ });
6406
+ CadenzaService.defineIntent({
6407
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
6408
+ description: "Replace the active runtime validation policy.",
6409
+ input: { type: "object" },
6410
+ output: { type: "object" }
6411
+ });
6412
+ CadenzaService.defineIntent({
6413
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
6414
+ description: "Clear the active runtime validation policy.",
6415
+ input: { type: "object" },
6416
+ output: { type: "object" }
6417
+ });
6418
+ CadenzaService.defineIntent({
6419
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
6420
+ description: "List active runtime validation scopes.",
6421
+ input: { type: "object" },
6422
+ output: { type: "object" }
6423
+ });
6424
+ CadenzaService.defineIntent({
6425
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
6426
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
6427
+ input: { type: "object" },
6428
+ output: { type: "object" }
6429
+ });
6430
+ CadenzaService.defineIntent({
6431
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
6432
+ description: "Remove a runtime validation scope by id.",
6433
+ input: { type: "object" },
6434
+ output: { type: "object" }
6435
+ });
6436
+ CadenzaService.defineIntent({
6437
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
6438
+ description: "Clear all runtime validation scopes.",
6439
+ input: { type: "object" },
6440
+ output: { type: "object" }
6441
+ });
6442
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
6443
+ return {
6444
+ policy: CadenzaService.getRuntimeValidationPolicy()
6445
+ };
6446
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
6447
+ CadenzaService.createMetaTask(
6448
+ "Set runtime validation policy",
6449
+ (ctx, emit) => {
6450
+ const policy = normalizePolicyContext(ctx);
6451
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
6452
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6453
+ policy: nextPolicy
6454
+ });
6455
+ return {
6456
+ policy: nextPolicy
6457
+ };
6458
+ },
6459
+ "Merges runtime validation policy fields at runtime."
6460
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
6461
+ CadenzaService.createMetaTask(
6462
+ "Replace runtime validation policy",
6463
+ (ctx, emit) => {
6464
+ const policy = normalizePolicyContext(ctx);
6465
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
6466
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6467
+ policy: nextPolicy
6468
+ });
6469
+ return {
6470
+ policy: nextPolicy
6471
+ };
6472
+ },
6473
+ "Replaces runtime validation policy fields at runtime."
6474
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
6475
+ CadenzaService.createMetaTask(
6476
+ "Clear runtime validation policy",
6477
+ (_ctx, emit) => {
6478
+ CadenzaService.clearRuntimeValidationPolicy();
6479
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
6480
+ return {
6481
+ policy: CadenzaService.getRuntimeValidationPolicy()
6482
+ };
6483
+ },
6484
+ "Clears the runtime validation policy."
6485
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
6486
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
6487
+ return {
6488
+ scopes: CadenzaService.getRuntimeValidationScopes()
6489
+ };
6490
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
6491
+ CadenzaService.createMetaTask(
6492
+ "Upsert runtime validation scope",
6493
+ (ctx, emit) => {
6494
+ const scope = normalizeScopeContext(ctx);
6495
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
6496
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
6497
+ scope: nextScope
6498
+ });
6499
+ return {
6500
+ scope: nextScope
6501
+ };
6502
+ },
6503
+ "Upserts a runtime validation scope for targeted debugging."
6504
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6505
+ CadenzaService.createMetaTask(
6506
+ "Remove runtime validation scope",
6507
+ (ctx, emit) => {
6508
+ if (!ctx.id) {
6509
+ throw new Error("Runtime validation scope id is required");
6510
+ }
6511
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6512
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6513
+ id: ctx.id
6514
+ });
6515
+ return {
6516
+ id: ctx.id,
6517
+ scopes: CadenzaService.getRuntimeValidationScopes()
6518
+ };
6519
+ },
6520
+ "Removes a runtime validation scope."
6521
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6522
+ CadenzaService.createMetaTask(
6523
+ "Clear runtime validation scopes",
6524
+ (_ctx, emit) => {
6525
+ CadenzaService.clearRuntimeValidationScopes();
6526
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6527
+ return {
6528
+ scopes: CadenzaService.getRuntimeValidationScopes()
6529
+ };
6530
+ },
6531
+ "Clears all runtime validation scopes."
6532
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6533
+ }
6534
+ };
6535
+
6439
6536
  // src/graph/controllers/registerActorSessionPersistence.ts
6440
6537
  import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from "@cadenza.io/core";
6441
6538
  function registerActorSessionPersistenceTasks() {
@@ -6911,6 +7008,9 @@ function normalizeIntentToken(value) {
6911
7008
  }
6912
7009
  return normalized;
6913
7010
  }
7011
+ function shouldValidateGeneratedDbTaskInput(registration) {
7012
+ return registration.options.securityProfile !== "low" && !registration.options.isMeta;
7013
+ }
6914
7014
  function buildPostgresActorName(name) {
6915
7015
  return `${String(name ?? "").trim()}PostgresActor`;
6916
7016
  }
@@ -8176,7 +8276,7 @@ var DatabaseController = class _DatabaseController {
8176
8276
  {
8177
8277
  isMeta: registration.options.isMeta,
8178
8278
  isSubMeta: registration.options.isMeta,
8179
- validateInputContext: registration.options.securityProfile !== "low",
8279
+ validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
8180
8280
  inputSchema: querySchema
8181
8281
  }
8182
8282
  ).respondsTo(intentName);
@@ -8219,7 +8319,7 @@ var DatabaseController = class _DatabaseController {
8219
8319
  {
8220
8320
  isMeta: registration.options.isMeta,
8221
8321
  isSubMeta: registration.options.isMeta,
8222
- validateInputContext: registration.options.securityProfile !== "low",
8322
+ validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
8223
8323
  inputSchema: insertSchema
8224
8324
  }
8225
8325
  ).respondsTo(upsertIntentName);
@@ -8360,7 +8460,7 @@ var DatabaseController = class _DatabaseController {
8360
8460
  {
8361
8461
  isMeta: registration.options.isMeta,
8362
8462
  isSubMeta: registration.options.isMeta,
8363
- validateInputContext: registration.options.securityProfile !== "low",
8463
+ validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
8364
8464
  inputSchema: schema
8365
8465
  }
8366
8466
  ).doOn(
@@ -9149,7 +9249,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
9149
9249
  }
9150
9250
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
9151
9251
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
9152
- const debugTable = shouldDebugSyncTable(tableName);
9153
9252
  if (!localInsertTask && !isCadenzaDBReady) {
9154
9253
  return void 0;
9155
9254
  }
@@ -9162,16 +9261,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9162
9261
  register: false,
9163
9262
  isHidden: true
9164
9263
  });
9165
- if (debugTable) {
9166
- logSyncDebug("insert_task_resolved", {
9167
- tableName,
9168
- localInsertTaskName: localInsertTask?.name ?? null,
9169
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
9170
- targetTaskName: targetTask.name,
9171
- queryData,
9172
- options
9173
- });
9174
- }
9175
9264
  const prepareExecutionTask = CadenzaService.createMetaTask(
9176
9265
  `Prepare graph sync insert for ${tableName}`,
9177
9266
  (ctx) => {
@@ -9182,12 +9271,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9182
9271
  if ((tableName === "signal_registry" || tableName === "directional_task_graph_map") && originalQueryData.data && typeof originalQueryData.data === "object" && !Array.isArray(originalQueryData.data) && Object.keys(originalQueryData.data).length === 0) {
9183
9272
  console.warn(
9184
9273
  "[CADENZA_SYNC_EMPTY_INSERT]",
9185
- summarizeSyncDebugValue({
9274
+ {
9186
9275
  tableName,
9187
9276
  queryData: originalQueryData,
9188
9277
  ctx,
9189
9278
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
9190
- })
9279
+ }
9191
9280
  );
9192
9281
  }
9193
9282
  return buildSyncExecutionEnvelope(
@@ -9201,37 +9290,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9201
9290
  isHidden: true
9202
9291
  }
9203
9292
  );
9204
- if (debugTable) {
9205
- prepareExecutionTask.then(
9206
- CadenzaService.createMetaTask(
9207
- `Log prepared graph sync insert execution for ${tableName}`,
9208
- (ctx) => {
9209
- if (tableName === "task") {
9210
- if (!shouldDebugTaskSyncPayload(ctx)) {
9211
- return ctx;
9212
- }
9213
- logSyncDebug("insert_prepare", {
9214
- tableName,
9215
- targetTaskName: targetTask.name,
9216
- payload: buildTaskSyncDebugPayload(ctx)
9217
- });
9218
- return ctx;
9219
- }
9220
- logSyncDebug("insert_prepare", {
9221
- tableName,
9222
- targetTaskName: targetTask.name,
9223
- ctx
9224
- });
9225
- return ctx;
9226
- },
9227
- `Logs prepared ${tableName} sync insert payloads.`,
9228
- {
9229
- register: false,
9230
- isHidden: true
9231
- }
9232
- )
9233
- );
9234
- }
9235
9293
  const finalizeExecutionTask = CadenzaService.createMetaTask(
9236
9294
  `Finalize graph sync insert for ${tableName}`,
9237
9295
  (ctx) => {
@@ -9242,25 +9300,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9242
9300
  ...ctx,
9243
9301
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
9244
9302
  };
9245
- if (debugTable) {
9246
- if (tableName === "task") {
9247
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
9248
- logSyncDebug("insert_finalize", {
9249
- tableName,
9250
- targetTaskName: targetTask.name,
9251
- success: didSyncInsertSucceed(normalizedContext),
9252
- payload: buildTaskSyncDebugPayload(normalizedContext)
9253
- });
9254
- }
9255
- } else {
9256
- logSyncDebug("insert_finalize", {
9257
- tableName,
9258
- targetTaskName: targetTask.name,
9259
- success: didSyncInsertSucceed(normalizedContext),
9260
- ctx: normalizedContext
9261
- });
9262
- }
9263
- }
9264
9303
  return normalizedContext;
9265
9304
  },
9266
9305
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -9295,139 +9334,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
9295
9334
  intent_registry: "intentRegistrys"
9296
9335
  };
9297
9336
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
9298
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
9299
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
9300
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
9301
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
9302
- "Query service_instance",
9303
- "Query service_instance_transport",
9304
- "Query intent_to_task_map",
9305
- "Query signal_to_task_map",
9306
- "Prepare for signal sync",
9307
- "Compile sync data and broadcast",
9308
- "Forward service instance sync",
9309
- "Forward service transport sync",
9310
- "Forward intent to task map sync",
9311
- "Forward signal to task map sync",
9312
- "Normalize telemetry ingest payload",
9313
- "Get telemetry session state",
9314
- "Normalize anomaly detect input",
9315
- "Read anomaly runtime session",
9316
- "Normalize prediction compute input",
9317
- "Normalize telemetry insert queryData"
9318
- ]);
9319
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
9320
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
9321
- "meta-service-registry-full-sync",
9322
- "runner-traffic-runtime-get",
9323
- "iot-telemetry-ingest",
9324
- "iot-telemetry-session-get",
9325
- "iot-anomaly-detect",
9326
- "iot-anomaly-runtime-get",
9327
- "iot-prediction-compute",
9328
- "iot-db-telemetry-insert",
9329
- "query-pg-cadenza-db-postgres-actor-service_instance",
9330
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
9331
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
9332
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
9333
- ]);
9334
- function shouldDebugSyncTable(tableName) {
9335
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
9336
- }
9337
- function shouldDebugSyncTaskName(taskName) {
9338
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
9339
- }
9340
- function shouldDebugSyncRoutineName(routineName) {
9341
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
9342
- }
9343
- function shouldDebugSyncIntentName(intentName) {
9344
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
9345
- }
9346
- function summarizeSyncDebugValue(value, depth = 0) {
9347
- if (value === null || value === void 0) {
9348
- return value;
9349
- }
9350
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
9351
- return value;
9352
- }
9353
- if (value instanceof Set) {
9354
- return {
9355
- __type: "Set",
9356
- size: value.size,
9357
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
9358
- };
9359
- }
9360
- if (value instanceof Map) {
9361
- return {
9362
- __type: "Map",
9363
- size: value.size
9364
- };
9365
- }
9366
- if (Array.isArray(value)) {
9367
- return {
9368
- __type: "Array",
9369
- length: value.length,
9370
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
9371
- };
9372
- }
9373
- if (typeof value === "object") {
9374
- if (depth >= 2) {
9375
- return "[object]";
9376
- }
9377
- const output = {};
9378
- const entries = Object.entries(value).filter(
9379
- ([key]) => ![
9380
- "functionString",
9381
- "tagIdGetter",
9382
- "__functionString",
9383
- "__getTagCallback",
9384
- "joinedContexts",
9385
- "task",
9386
- "taskInstance",
9387
- "tasks"
9388
- ].includes(key)
9389
- ).slice(0, 12);
9390
- for (const [key, nestedValue] of entries) {
9391
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
9392
- }
9393
- return output;
9394
- }
9395
- return String(value);
9396
- }
9397
- function logSyncDebug(event, payload) {
9398
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
9399
- }
9400
- function buildTaskSyncDebugPayload(ctx) {
9401
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
9402
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
9403
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
9404
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
9405
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
9406
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
9407
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
9408
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
9409
- return {
9410
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
9411
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
9412
- functionStringLength: functionString?.length ?? null,
9413
- tagIdGetterLength: tagIdGetter?.length ?? null,
9414
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
9415
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
9416
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
9417
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
9418
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
9419
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
9420
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
9421
- rowCount: ctx.rowCount ?? null,
9422
- errored: ctx.errored ?? false,
9423
- success: ctx.__success ?? null,
9424
- error: ctx.__error ?? null
9425
- };
9426
- }
9427
- function shouldDebugTaskSyncPayload(ctx) {
9428
- const payload = buildTaskSyncDebugPayload(ctx);
9429
- return shouldDebugSyncTaskName(payload.taskName);
9430
- }
9431
9337
  function resolveSyncQueryRows(ctx, tableName) {
9432
9338
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
9433
9339
  const rows = ctx?.[resultKey];
@@ -9874,16 +9780,6 @@ var GraphSyncController = class _GraphSyncController {
9874
9780
  if (!nextTask?.registered) {
9875
9781
  continue;
9876
9782
  }
9877
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
9878
- logSyncDebug("task_to_routine_split", {
9879
- routineName: routine.name,
9880
- routineVersion: routine.version,
9881
- taskName: nextTask.name,
9882
- taskVersion: nextTask.version,
9883
- serviceName: serviceName2,
9884
- registered: nextTask.registered
9885
- });
9886
- }
9887
9783
  yield {
9888
9784
  __syncing: ctx.__syncing,
9889
9785
  data: {
@@ -10029,20 +9925,6 @@ var GraphSyncController = class _GraphSyncController {
10029
9925
  if (task.registered) continue;
10030
9926
  const { __functionString, __getTagCallback } = task.export();
10031
9927
  this.tasksSynced = false;
10032
- if (shouldDebugSyncTaskName(task.name)) {
10033
- logSyncDebug("task_registration_split", {
10034
- taskName: task.name,
10035
- taskVersion: task.version,
10036
- serviceName: serviceName2,
10037
- register: task.register,
10038
- registered: task.registered,
10039
- hidden: task.hidden,
10040
- exportFunctionLength: __functionString?.length ?? null,
10041
- exportTagGetterLength: __getTagCallback?.length ?? null,
10042
- observedSignals: Array.from(task.observedSignals),
10043
- handledIntents: Array.from(task.handlesIntents)
10044
- });
10045
- }
10046
9928
  yield {
10047
9929
  __syncing: ctx.__syncing,
10048
9930
  data: {
@@ -10097,13 +9979,6 @@ var GraphSyncController = class _GraphSyncController {
10097
9979
  const registerTaskTask = CadenzaService.createMetaTask(
10098
9980
  "Record registration",
10099
9981
  (ctx, emit) => {
10100
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
10101
- logSyncDebug("task_registration_result", {
10102
- taskName: ctx.__taskName,
10103
- success: didSyncInsertSucceed(ctx),
10104
- ctx
10105
- });
10106
- }
10107
9982
  if (!didSyncInsertSucceed(ctx)) {
10108
9983
  return;
10109
9984
  }
@@ -10129,16 +10004,6 @@ var GraphSyncController = class _GraphSyncController {
10129
10004
  "Prepare created task for immediate sync",
10130
10005
  (ctx) => {
10131
10006
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
10132
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
10133
- logSyncDebug("task_created_for_immediate_sync", {
10134
- incomingTaskName: ctx?.data?.name ?? null,
10135
- resolvedTaskName: task?.name ?? null,
10136
- exists: Boolean(task),
10137
- hidden: task?.hidden ?? null,
10138
- register: task?.register ?? null,
10139
- registered: task?.registered ?? null
10140
- });
10141
- }
10142
10007
  if (!task || task.hidden || !task.register || task.registered) {
10143
10008
  return false;
10144
10009
  }
@@ -10325,17 +10190,6 @@ var GraphSyncController = class _GraphSyncController {
10325
10190
  if (!isGlobal) {
10326
10191
  continue;
10327
10192
  }
10328
- if (shouldDebugSyncTaskName(task.name)) {
10329
- logSyncDebug("signal_to_task_map_split", {
10330
- taskName: task.name,
10331
- signalName: _signal,
10332
- rawSignal: signal,
10333
- serviceName: serviceName2,
10334
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
10335
- _signal
10336
- )?.registered
10337
- });
10338
- }
10339
10193
  yield {
10340
10194
  __syncing: ctx.__syncing,
10341
10195
  data: {
@@ -10446,21 +10300,6 @@ var GraphSyncController = class _GraphSyncController {
10446
10300
  }
10447
10301
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
10448
10302
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
10449
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
10450
- if (shouldDebugTask) {
10451
- logSyncDebug("intent_map_task_state", {
10452
- taskName: task.name,
10453
- taskVersion: task.version,
10454
- serviceName: serviceName2,
10455
- registered: task.registered,
10456
- register: task.register,
10457
- hidden: task.hidden,
10458
- handledIntents: Array.from(task.handlesIntents),
10459
- registeredIntents: Array.from(task.__registeredIntents),
10460
- tasksSynced: this.tasksSynced,
10461
- intentsSynced: this.intentsSynced
10462
- });
10463
- }
10464
10303
  let emittedCount = 0;
10465
10304
  for (const intent of task.handlesIntents) {
10466
10305
  if (task.__registeredIntents.has(intent)) continue;
@@ -10486,15 +10325,6 @@ var GraphSyncController = class _GraphSyncController {
10486
10325
  if (!intentDefinition) {
10487
10326
  continue;
10488
10327
  }
10489
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
10490
- logSyncDebug("intent_to_task_map_split", {
10491
- taskName: task.name,
10492
- taskVersion: task.version,
10493
- intentName: intent,
10494
- serviceName: serviceName2,
10495
- intentDefinition
10496
- });
10497
- }
10498
10328
  yield {
10499
10329
  __syncing: ctx.__syncing,
10500
10330
  data: {
@@ -10515,15 +10345,6 @@ var GraphSyncController = class _GraphSyncController {
10515
10345
  };
10516
10346
  emittedCount += 1;
10517
10347
  }
10518
- if (shouldDebugTask && emittedCount === 0) {
10519
- logSyncDebug("intent_map_task_noop", {
10520
- taskName: task.name,
10521
- taskVersion: task.version,
10522
- serviceName: serviceName2,
10523
- handledIntents: Array.from(task.handlesIntents),
10524
- registeredIntents: Array.from(task.__registeredIntents)
10525
- });
10526
- }
10527
10348
  return emittedCount > 0;
10528
10349
  }.bind(this)
10529
10350
  );
@@ -10533,13 +10354,6 @@ var GraphSyncController = class _GraphSyncController {
10533
10354
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
10534
10355
  return false;
10535
10356
  }
10536
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10537
- logSyncDebug("intent_definition_prepare", {
10538
- taskName: ctx.__taskName,
10539
- intentName: ctx.__intent,
10540
- intentDefinition: ctx.__intentDefinition
10541
- });
10542
- }
10543
10357
  return {
10544
10358
  ...ctx,
10545
10359
  data: ctx.__intentDefinition
@@ -10552,13 +10366,6 @@ var GraphSyncController = class _GraphSyncController {
10552
10366
  if (!ctx.__intentMapData) {
10553
10367
  return false;
10554
10368
  }
10555
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10556
- logSyncDebug("intent_map_payload_restore", {
10557
- taskName: ctx.__taskName,
10558
- intentName: ctx.__intent,
10559
- intentMapData: ctx.__intentMapData
10560
- });
10561
- }
10562
10369
  return {
10563
10370
  ...ctx,
10564
10371
  data: ctx.__intentMapData
@@ -11380,6 +11187,13 @@ var CadenzaService = class {
11380
11187
  if (this.isBootstrapped) return;
11381
11188
  this.isBootstrapped = true;
11382
11189
  Cadenza.bootstrap();
11190
+ Cadenza.setRuntimeInquiryDelegate(
11191
+ (inquiry, context, options) => this.inquire(
11192
+ inquiry,
11193
+ context,
11194
+ options ?? {}
11195
+ )
11196
+ );
11383
11197
  this.signalBroker = Cadenza.signalBroker;
11384
11198
  this.inquiryBroker = Cadenza.inquiryBroker;
11385
11199
  this.runner = Cadenza.runner;
@@ -11388,7 +11202,7 @@ var CadenzaService = class {
11388
11202
  this.serviceRegistry = ServiceRegistry.instance;
11389
11203
  RestController.instance;
11390
11204
  SocketController.instance;
11391
- console.log("BOOTSTRAPPED");
11205
+ RuntimeValidationController.instance;
11392
11206
  }
11393
11207
  static ensureTransportControllers(isFrontend) {
11394
11208
  if (!isFrontend) {
@@ -11527,6 +11341,38 @@ var CadenzaService = class {
11527
11341
  this.inquiryBroker?.addIntent(intent);
11528
11342
  return intent;
11529
11343
  }
11344
+ static getRuntimeValidationPolicy() {
11345
+ this.bootstrap();
11346
+ return Cadenza.getRuntimeValidationPolicy();
11347
+ }
11348
+ static setRuntimeValidationPolicy(policy = {}) {
11349
+ this.bootstrap();
11350
+ return Cadenza.setRuntimeValidationPolicy(policy);
11351
+ }
11352
+ static replaceRuntimeValidationPolicy(policy = {}) {
11353
+ this.bootstrap();
11354
+ return Cadenza.replaceRuntimeValidationPolicy(policy);
11355
+ }
11356
+ static clearRuntimeValidationPolicy() {
11357
+ this.bootstrap();
11358
+ Cadenza.clearRuntimeValidationPolicy();
11359
+ }
11360
+ static getRuntimeValidationScopes() {
11361
+ this.bootstrap();
11362
+ return Cadenza.getRuntimeValidationScopes();
11363
+ }
11364
+ static upsertRuntimeValidationScope(scope) {
11365
+ this.bootstrap();
11366
+ return Cadenza.upsertRuntimeValidationScope(scope);
11367
+ }
11368
+ static removeRuntimeValidationScope(id) {
11369
+ this.bootstrap();
11370
+ Cadenza.removeRuntimeValidationScope(id);
11371
+ }
11372
+ static clearRuntimeValidationScopes() {
11373
+ this.bootstrap();
11374
+ Cadenza.clearRuntimeValidationScopes();
11375
+ }
11530
11376
  static getInquiryResponderDescriptor(task) {
11531
11377
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
11532
11378
  }
@@ -12287,7 +12133,6 @@ var CadenzaService = class {
12287
12133
  }
12288
12134
  });
12289
12135
  });
12290
- console.log("Creating service...");
12291
12136
  const initContext = {
12292
12137
  data: {
12293
12138
  name: serviceName,
@@ -12320,18 +12165,13 @@ var CadenzaService = class {
12320
12165
  }).doOn("meta.fetch.handshake_complete");
12321
12166
  } else {
12322
12167
  this.emit("meta.create_service_requested", initContext);
12323
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
12324
- if (ctx.serviceName) {
12325
- console.log("[CADENZA_SYNC_DEBUG] create_sync_signal_transmission", {
12326
- localServiceName: serviceName,
12327
- localServiceInstanceId: serviceId,
12328
- targetServiceName: ctx.serviceName,
12329
- signalName: "global.meta.cadenza_db.gathered_sync_data"
12330
- });
12331
- }
12332
- this.createSignalTransmissionTask(
12333
- "global.meta.cadenza_db.gathered_sync_data",
12334
- ctx.serviceName
12168
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
12169
+ emit(
12170
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
12171
+ {
12172
+ serviceName: ctx.serviceName,
12173
+ __reason: "handshake"
12174
+ }
12335
12175
  );
12336
12176
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
12337
12177
  }
@@ -13326,6 +13166,8 @@ export {
13326
13166
  EphemeralTask2 as EphemeralTask,
13327
13167
  GraphMetadataController,
13328
13168
  GraphRoutine2 as GraphRoutine,
13169
+ RUNTIME_VALIDATION_INTENTS,
13170
+ RUNTIME_VALIDATION_SIGNALS,
13329
13171
  RestController,
13330
13172
  ServiceRegistry,
13331
13173
  SignalController,