@cadenza.io/service 2.17.79 → 2.18.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.
@@ -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
  }
@@ -675,6 +682,8 @@ function hasSignificantRuntimeStatusChange(previous, next) {
675
682
 
676
683
  // src/registry/ServiceRegistry.ts
677
684
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
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";
678
687
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
679
688
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
680
689
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -762,18 +771,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
762
771
  }
763
772
  return result;
764
773
  }
765
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
766
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
767
- }
768
- function summarizeTransportDescriptors(transports) {
769
- return transports.map((transport) => ({
770
- uuid: transport.uuid,
771
- serviceInstanceId: transport.serviceInstanceId,
772
- role: transport.role,
773
- origin: transport.origin,
774
- protocols: transport.protocols
775
- }));
776
- }
777
774
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
778
775
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
779
776
  tableName,
@@ -790,6 +787,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
790
787
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
791
788
  const delegationContext = ensureDelegationContextMetadata({
792
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,
793
794
  queryData: nextQueryData
794
795
  });
795
796
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -913,6 +914,7 @@ var ServiceRegistry = class _ServiceRegistry {
913
914
  this.deputies = /* @__PURE__ */ new Map();
914
915
  this.remoteSignals = /* @__PURE__ */ new Map();
915
916
  this.remoteIntents = /* @__PURE__ */ new Map();
917
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
916
918
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
917
919
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
918
920
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1164,21 +1166,6 @@ var ServiceRegistry = class _ServiceRegistry {
1164
1166
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1165
1167
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1166
1168
  }
1167
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1168
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1169
- localServiceName: this.serviceName,
1170
- localServiceInstanceId: this.serviceInstanceId,
1171
- targetServiceName: serviceName,
1172
- targetServiceInstanceId: uuid7,
1173
- existingInstance: !!existing,
1174
- deleted,
1175
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1176
- hasDeputies: this.deputies.has(serviceName),
1177
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1178
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1179
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1180
- });
1181
- }
1182
1169
  if (!serviceInstance.isBootstrapPlaceholder) {
1183
1170
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid7, emit);
1184
1171
  }
@@ -1191,7 +1178,8 @@ var ServiceRegistry = class _ServiceRegistry {
1191
1178
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1192
1179
  const connected = this.ensureDependeeClientForInstance(
1193
1180
  trackedInstance,
1194
- emit
1181
+ emit,
1182
+ ctx
1195
1183
  );
1196
1184
  if (!connected) {
1197
1185
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1234,27 +1222,6 @@ var ServiceRegistry = class _ServiceRegistry {
1234
1222
  break;
1235
1223
  }
1236
1224
  }
1237
- if (shouldTraceIotDbRegistryPath(
1238
- this.serviceName,
1239
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1240
- )) {
1241
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1242
- localServiceName: this.serviceName,
1243
- localServiceInstanceId: this.serviceInstanceId,
1244
- transport: {
1245
- uuid: transport.uuid,
1246
- serviceInstanceId: transport.serviceInstanceId,
1247
- role: transport.role,
1248
- origin: transport.origin,
1249
- protocols: transport.protocols,
1250
- deleted: transport.deleted
1251
- },
1252
- ownerFound: !!ownerInstance,
1253
- ownerServiceName: ownerInstance?.serviceName,
1254
- ownerInstanceId: ownerInstance?.uuid,
1255
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1256
- });
1257
- }
1258
1225
  if (!ownerInstance) {
1259
1226
  return false;
1260
1227
  }
@@ -1280,7 +1247,7 @@ var ServiceRegistry = class _ServiceRegistry {
1280
1247
  if (!hasRemoteInterest) {
1281
1248
  return true;
1282
1249
  }
1283
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1250
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1284
1251
  return true;
1285
1252
  },
1286
1253
  "Handles service transport updates independently from instance rows."
@@ -1310,29 +1277,12 @@ var ServiceRegistry = class _ServiceRegistry {
1310
1277
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1311
1278
  ).doOn("meta.service_registry.dependee_registered");
1312
1279
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1313
- const getLocalTraceContext = () => ({
1314
- localServiceName: this.serviceName,
1315
- localServiceInstanceId: this.serviceInstanceId
1316
- });
1317
1280
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1318
1281
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1319
1282
  if (serviceInstances.length === 0) {
1320
1283
  return;
1321
1284
  }
1322
1285
  for (const serviceInstance of serviceInstances) {
1323
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1324
- if (shouldTraceIotDbRegistryPath(
1325
- localServiceName,
1326
- serviceInstance.serviceName
1327
- )) {
1328
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1329
- localServiceName,
1330
- localServiceInstanceId,
1331
- targetServiceName: serviceInstance.serviceName,
1332
- targetServiceInstanceId: serviceInstance.uuid,
1333
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1334
- });
1335
- }
1336
1286
  yield { serviceInstance };
1337
1287
  }
1338
1288
  }).doOn(
@@ -1378,6 +1328,15 @@ var ServiceRegistry = class _ServiceRegistry {
1378
1328
  },
1379
1329
  "Handles registration of remote signals"
1380
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
+ );
1381
1340
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1382
1341
  "Handle global intent registration",
1383
1342
  (ctx, emit) => {
@@ -1388,15 +1347,19 @@ var ServiceRegistry = class _ServiceRegistry {
1388
1347
  return 0;
1389
1348
  });
1390
1349
  for (const map of sorted) {
1391
- if (map.deleted) {
1392
- this.unregisterRemoteIntentDeputy(map);
1393
- 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;
1394
1362
  }
1395
- CadenzaService.inquiryBroker.addIntent({
1396
- name: map.intentName
1397
- });
1398
- this.registerRemoteIntentDeputy(map);
1399
- this.ensureDependeeClientsForService(map.serviceName, emit);
1400
1363
  }
1401
1364
  return true;
1402
1365
  },
@@ -1548,7 +1511,7 @@ var ServiceRegistry = class _ServiceRegistry {
1548
1511
  {
1549
1512
  uuid: report.transportId,
1550
1513
  serviceInstanceId: report.serviceInstanceId,
1551
- role: this.getRoutingTransportRole(),
1514
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1552
1515
  origin: report.transportOrigin,
1553
1516
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1554
1517
  securityProfile: null,
@@ -1590,21 +1553,6 @@ var ServiceRegistry = class _ServiceRegistry {
1590
1553
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1591
1554
  inquiryResult
1592
1555
  );
1593
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1594
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1595
- uuid: instance.uuid,
1596
- isActive: instance.isActive,
1597
- isNonResponsive: instance.isNonResponsive,
1598
- isBlocked: instance.isBlocked,
1599
- transports: summarizeTransportDescriptors(instance.transports)
1600
- }));
1601
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1602
- localServiceName: this.serviceName,
1603
- localServiceInstanceId: this.serviceInstanceId,
1604
- totalServiceInstances: serviceInstances.length,
1605
- tracedInstances
1606
- });
1607
- }
1608
1556
  return {
1609
1557
  ...ctx,
1610
1558
  signalToTaskMaps,
@@ -1701,44 +1649,6 @@ var ServiceRegistry = class _ServiceRegistry {
1701
1649
  let retries = __retries ?? 0;
1702
1650
  let triedInstances = __triedInstances ?? [];
1703
1651
  const preferredRole = this.getRoutingTransportRole();
1704
- const allInstances = this.instances.get(__serviceName) ?? [];
1705
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1706
- this.serviceName,
1707
- __serviceName ?? void 0
1708
- ) ? allInstances.map((instance) => ({
1709
- uuid: instance.uuid,
1710
- isActive: instance.isActive,
1711
- isNonResponsive: instance.isNonResponsive,
1712
- isBlocked: instance.isBlocked,
1713
- isFrontend: instance.isFrontend,
1714
- transports: summarizeTransportDescriptors(instance.transports),
1715
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1716
- instance,
1717
- context,
1718
- preferredRole
1719
- ) ? {
1720
- uuid: this.selectTransportForInstance(
1721
- instance,
1722
- context,
1723
- preferredRole
1724
- ).uuid,
1725
- role: this.selectTransportForInstance(
1726
- instance,
1727
- context,
1728
- preferredRole
1729
- ).role,
1730
- origin: this.selectTransportForInstance(
1731
- instance,
1732
- context,
1733
- preferredRole
1734
- ).origin,
1735
- protocols: this.selectTransportForInstance(
1736
- instance,
1737
- context,
1738
- preferredRole
1739
- ).protocols
1740
- } : null
1741
- })) : void 0;
1742
1652
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1743
1653
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1744
1654
  return false;
@@ -1771,20 +1681,6 @@ var ServiceRegistry = class _ServiceRegistry {
1771
1681
  }
1772
1682
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1773
1683
  });
1774
- if (candidateDiagnostics) {
1775
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1776
- localServiceName: this.serviceName,
1777
- localServiceInstanceId: this.serviceInstanceId,
1778
- targetServiceName: __serviceName,
1779
- preferredRole,
1780
- useSocket: this.useSocket,
1781
- targetServiceInstanceId,
1782
- retries,
1783
- triedInstances,
1784
- candidateDiagnostics,
1785
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1786
- });
1787
- }
1788
1684
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1789
1685
  context.errored = true;
1790
1686
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2042,6 +1938,7 @@ var ServiceRegistry = class _ServiceRegistry {
2042
1938
  serviceName: report.serviceName,
2043
1939
  serviceInstanceId: report.serviceInstanceId,
2044
1940
  transportId: report.transportId,
1941
+ transportRole: report.transportRole,
2045
1942
  transportOrigin: report.transportOrigin,
2046
1943
  transportProtocols: report.transportProtocols,
2047
1944
  isFrontend: report.isFrontend,
@@ -2658,6 +2555,64 @@ var ServiceRegistry = class _ServiceRegistry {
2658
2555
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2659
2556
  );
2660
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
+ }
2661
2616
  registerRemoteIntentDeputy(map) {
2662
2617
  if (!this.serviceName || map.serviceName === this.serviceName) {
2663
2618
  return;
@@ -2900,38 +2855,18 @@ var ServiceRegistry = class _ServiceRegistry {
2900
2855
  }
2901
2856
  return communicationTypes;
2902
2857
  }
2903
- ensureDependeeClientForInstance(instance, emit) {
2858
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2904
2859
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2905
2860
  return false;
2906
2861
  }
2907
2862
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2908
2863
  return false;
2909
2864
  }
2910
- const transport = this.getRouteableTransport(
2865
+ const transport = this.selectTransportForInstance(
2911
2866
  instance,
2912
- this.useSocket ? "socket" : "rest"
2913
- );
2914
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2915
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2916
- localServiceName: this.serviceName,
2917
- localServiceInstanceId: this.serviceInstanceId,
2918
- targetServiceName: instance.serviceName,
2919
- targetServiceInstanceId: instance.uuid,
2920
- useSocket: this.useSocket,
2921
- routeableRole: this.getRoutingTransportRole(),
2922
- hasDeputies: this.deputies.has(instance.serviceName),
2923
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2924
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2925
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2926
- transports: summarizeTransportDescriptors(instance.transports),
2927
- selectedTransport: transport ? {
2928
- uuid: transport.uuid,
2929
- role: transport.role,
2930
- origin: transport.origin,
2931
- protocols: transport.protocols
2932
- } : null
2933
- });
2934
- }
2867
+ ctx ?? {},
2868
+ this.getRoutingTransportRole()
2869
+ );
2935
2870
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
2936
2871
  return false;
2937
2872
  }
@@ -2948,9 +2883,9 @@ var ServiceRegistry = class _ServiceRegistry {
2948
2883
  this.markTransportClientCreated(instance, transport.uuid);
2949
2884
  return true;
2950
2885
  }
2951
- ensureDependeeClientsForService(serviceName, emit) {
2886
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
2952
2887
  for (const instance of this.instances.get(serviceName) ?? []) {
2953
- this.ensureDependeeClientForInstance(instance, emit);
2888
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
2954
2889
  }
2955
2890
  }
2956
2891
  hasTransportClientCreated(instance, transportId) {
@@ -3009,6 +2944,10 @@ var ServiceRegistry = class _ServiceRegistry {
3009
2944
  if (!instances?.length) {
3010
2945
  return;
3011
2946
  }
2947
+ const resolvedInstance = instances.find(
2948
+ (instance) => instance.uuid === resolvedInstanceId
2949
+ );
2950
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3012
2951
  const placeholders = instances.filter(
3013
2952
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3014
2953
  );
@@ -3020,7 +2959,33 @@ var ServiceRegistry = class _ServiceRegistry {
3020
2959
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3021
2960
  placeholder.uuid
3022
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
+ }
3023
2985
  for (const transport of placeholder.transports) {
2986
+ if (preservedTransportIds.has(transport.uuid)) {
2987
+ continue;
2988
+ }
3024
2989
  const transportKey = buildTransportClientKey(transport);
3025
2990
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3026
2991
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3141,6 +3106,7 @@ var ServiceRegistry = class _ServiceRegistry {
3141
3106
  return null;
3142
3107
  }
3143
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;
3144
3110
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3145
3111
  const transportProtocols = Array.isArray(
3146
3112
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3166,6 +3132,7 @@ var ServiceRegistry = class _ServiceRegistry {
3166
3132
  serviceName,
3167
3133
  serviceInstanceId,
3168
3134
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3135
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3169
3136
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3170
3137
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3171
3138
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3188,13 +3155,16 @@ var ServiceRegistry = class _ServiceRegistry {
3188
3155
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3189
3156
  const existingTransport = this.getTransportById(instance, report.transportId);
3190
3157
  if (existingTransport) {
3158
+ if (report.transportRole) {
3159
+ existingTransport.role = report.transportRole;
3160
+ }
3191
3161
  existingTransport.origin = report.transportOrigin;
3192
3162
  existingTransport.protocols = protocols;
3193
3163
  } else {
3194
3164
  instance.transports.push({
3195
3165
  uuid: report.transportId,
3196
3166
  serviceInstanceId: report.serviceInstanceId,
3197
- role: this.getRoutingTransportRole(),
3167
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3198
3168
  origin: report.transportOrigin,
3199
3169
  protocols,
3200
3170
  securityProfile: null,
@@ -3240,24 +3210,18 @@ var ServiceRegistry = class _ServiceRegistry {
3240
3210
  localInstance.isBlocked
3241
3211
  );
3242
3212
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3213
+ const transport = this.getRouteableTransport(
3214
+ localInstance,
3215
+ this.useSocket ? "socket" : "rest",
3216
+ "internal"
3217
+ );
3243
3218
  const report = {
3244
3219
  serviceName: this.serviceName,
3245
3220
  serviceInstanceId: this.serviceInstanceId,
3246
- transportId: this.getRouteableTransport(
3247
- localInstance,
3248
- this.useSocket ? "socket" : "rest",
3249
- "internal"
3250
- )?.uuid ?? void 0,
3251
- transportOrigin: this.getRouteableTransport(
3252
- localInstance,
3253
- this.useSocket ? "socket" : "rest",
3254
- "internal"
3255
- )?.origin ?? void 0,
3256
- transportProtocols: this.getRouteableTransport(
3257
- localInstance,
3258
- this.useSocket ? "socket" : "rest",
3259
- "internal"
3260
- )?.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,
3261
3225
  isFrontend: localInstance.isFrontend,
3262
3226
  reportedAt,
3263
3227
  state: snapshot.state,
@@ -3621,6 +3585,7 @@ var ServiceRegistry = class _ServiceRegistry {
3621
3585
  this.deputies.clear();
3622
3586
  this.remoteSignals.clear();
3623
3587
  this.remoteIntents.clear();
3588
+ this.gatheredSyncTransmissionServices.clear();
3624
3589
  this.remoteIntentDeputiesByKey.clear();
3625
3590
  this.remoteIntentDeputiesByTask.clear();
3626
3591
  this.dependeesByService.clear();
@@ -4872,10 +4837,14 @@ var SocketController = class _SocketController {
4872
4837
  const communicationTypes = this.normalizeCommunicationTypes(
4873
4838
  input.communicationTypes
4874
4839
  );
4840
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
4875
4841
  const serviceName = String(input.serviceName ?? "");
4876
4842
  const serviceTransportId = String(input.serviceTransportId ?? "");
4877
4843
  const serviceOrigin = String(input.serviceOrigin ?? "");
4878
4844
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
4845
+ if (!transportProtocols.includes("socket")) {
4846
+ return false;
4847
+ }
4879
4848
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
4880
4849
  CadenzaService.log(
4881
4850
  "Socket client setup skipped due to missing transport origin",
@@ -4901,7 +4870,7 @@ var SocketController = class _SocketController {
4901
4870
  serviceName,
4902
4871
  serviceTransportId,
4903
4872
  serviceOrigin,
4904
- transportProtocols: input.transportProtocols,
4873
+ transportProtocols,
4905
4874
  url
4906
4875
  });
4907
4876
  };
@@ -4922,7 +4891,7 @@ var SocketController = class _SocketController {
4922
4891
  serviceName,
4923
4892
  serviceTransportId,
4924
4893
  serviceOrigin,
4925
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
4894
+ transportProtocols,
4926
4895
  url,
4927
4896
  destroyed: false,
4928
4897
  updatedAt: Date.now()
@@ -5501,7 +5470,7 @@ var SocketController = class _SocketController {
5501
5470
  communicationTypes,
5502
5471
  serviceTransportId,
5503
5472
  serviceOrigin,
5504
- transportProtocols: input.transportProtocols,
5473
+ transportProtocols,
5505
5474
  handshakeData: {
5506
5475
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5507
5476
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -5861,6 +5830,209 @@ var SignalController = class _SignalController {
5861
5830
  }
5862
5831
  };
5863
5832
 
5833
+ // src/runtime/RuntimeValidationController.ts
5834
+ var RUNTIME_VALIDATION_INTENTS = {
5835
+ getPolicy: "meta-runtime-validation-policy-get",
5836
+ setPolicy: "meta-runtime-validation-policy-set",
5837
+ replacePolicy: "meta-runtime-validation-policy-replace",
5838
+ clearPolicy: "meta-runtime-validation-policy-clear",
5839
+ listScopes: "meta-runtime-validation-scope-list",
5840
+ upsertScope: "meta-runtime-validation-scope-upsert",
5841
+ removeScope: "meta-runtime-validation-scope-remove",
5842
+ clearScopes: "meta-runtime-validation-scope-clear"
5843
+ };
5844
+ var RUNTIME_VALIDATION_SIGNALS = {
5845
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
5846
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
5847
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
5848
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
5849
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
5850
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
5851
+ policyUpdated: "meta.runtime_validation.policy_updated",
5852
+ policyCleared: "meta.runtime_validation.policy_cleared",
5853
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
5854
+ scopeRemoved: "meta.runtime_validation.scope_removed",
5855
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
5856
+ };
5857
+ function normalizePolicyContext(ctx) {
5858
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
5859
+ const policy = {};
5860
+ for (const key of [
5861
+ "metaInput",
5862
+ "metaOutput",
5863
+ "businessInput",
5864
+ "businessOutput",
5865
+ "warnOnMissingMetaInputSchema",
5866
+ "warnOnMissingMetaOutputSchema",
5867
+ "warnOnMissingBusinessInputSchema",
5868
+ "warnOnMissingBusinessOutputSchema"
5869
+ ]) {
5870
+ if (source[key] !== void 0) {
5871
+ policy[key] = source[key];
5872
+ }
5873
+ }
5874
+ return policy;
5875
+ }
5876
+ function normalizeScopeContext(ctx) {
5877
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
5878
+ return {
5879
+ id: source.id,
5880
+ active: source.active,
5881
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
5882
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
5883
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
5884
+ };
5885
+ }
5886
+ var RuntimeValidationController = class _RuntimeValidationController {
5887
+ static get instance() {
5888
+ if (!this._instance) {
5889
+ this._instance = new _RuntimeValidationController();
5890
+ }
5891
+ return this._instance;
5892
+ }
5893
+ constructor() {
5894
+ CadenzaService.defineIntent({
5895
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
5896
+ description: "Get the active runtime validation policy.",
5897
+ input: { type: "object" },
5898
+ output: { type: "object" }
5899
+ });
5900
+ CadenzaService.defineIntent({
5901
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
5902
+ description: "Merge fields into the active runtime validation policy.",
5903
+ input: { type: "object" },
5904
+ output: { type: "object" }
5905
+ });
5906
+ CadenzaService.defineIntent({
5907
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
5908
+ description: "Replace the active runtime validation policy.",
5909
+ input: { type: "object" },
5910
+ output: { type: "object" }
5911
+ });
5912
+ CadenzaService.defineIntent({
5913
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
5914
+ description: "Clear the active runtime validation policy.",
5915
+ input: { type: "object" },
5916
+ output: { type: "object" }
5917
+ });
5918
+ CadenzaService.defineIntent({
5919
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
5920
+ description: "List active runtime validation scopes.",
5921
+ input: { type: "object" },
5922
+ output: { type: "object" }
5923
+ });
5924
+ CadenzaService.defineIntent({
5925
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
5926
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
5927
+ input: { type: "object" },
5928
+ output: { type: "object" }
5929
+ });
5930
+ CadenzaService.defineIntent({
5931
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
5932
+ description: "Remove a runtime validation scope by id.",
5933
+ input: { type: "object" },
5934
+ output: { type: "object" }
5935
+ });
5936
+ CadenzaService.defineIntent({
5937
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
5938
+ description: "Clear all runtime validation scopes.",
5939
+ input: { type: "object" },
5940
+ output: { type: "object" }
5941
+ });
5942
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
5943
+ return {
5944
+ policy: CadenzaService.getRuntimeValidationPolicy()
5945
+ };
5946
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
5947
+ CadenzaService.createMetaTask(
5948
+ "Set runtime validation policy",
5949
+ (ctx, emit) => {
5950
+ const policy = normalizePolicyContext(ctx);
5951
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
5952
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
5953
+ policy: nextPolicy
5954
+ });
5955
+ return {
5956
+ policy: nextPolicy
5957
+ };
5958
+ },
5959
+ "Merges runtime validation policy fields at runtime."
5960
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
5961
+ CadenzaService.createMetaTask(
5962
+ "Replace runtime validation policy",
5963
+ (ctx, emit) => {
5964
+ const policy = normalizePolicyContext(ctx);
5965
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
5966
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
5967
+ policy: nextPolicy
5968
+ });
5969
+ return {
5970
+ policy: nextPolicy
5971
+ };
5972
+ },
5973
+ "Replaces runtime validation policy fields at runtime."
5974
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
5975
+ CadenzaService.createMetaTask(
5976
+ "Clear runtime validation policy",
5977
+ (_ctx, emit) => {
5978
+ CadenzaService.clearRuntimeValidationPolicy();
5979
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
5980
+ return {
5981
+ policy: CadenzaService.getRuntimeValidationPolicy()
5982
+ };
5983
+ },
5984
+ "Clears the runtime validation policy."
5985
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
5986
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
5987
+ return {
5988
+ scopes: CadenzaService.getRuntimeValidationScopes()
5989
+ };
5990
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
5991
+ CadenzaService.createMetaTask(
5992
+ "Upsert runtime validation scope",
5993
+ (ctx, emit) => {
5994
+ const scope = normalizeScopeContext(ctx);
5995
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
5996
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
5997
+ scope: nextScope
5998
+ });
5999
+ return {
6000
+ scope: nextScope
6001
+ };
6002
+ },
6003
+ "Upserts a runtime validation scope for targeted debugging."
6004
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6005
+ CadenzaService.createMetaTask(
6006
+ "Remove runtime validation scope",
6007
+ (ctx, emit) => {
6008
+ if (!ctx.id) {
6009
+ throw new Error("Runtime validation scope id is required");
6010
+ }
6011
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6012
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6013
+ id: ctx.id
6014
+ });
6015
+ return {
6016
+ id: ctx.id,
6017
+ scopes: CadenzaService.getRuntimeValidationScopes()
6018
+ };
6019
+ },
6020
+ "Removes a runtime validation scope."
6021
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6022
+ CadenzaService.createMetaTask(
6023
+ "Clear runtime validation scopes",
6024
+ (_ctx, emit) => {
6025
+ CadenzaService.clearRuntimeValidationScopes();
6026
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6027
+ return {
6028
+ scopes: CadenzaService.getRuntimeValidationScopes()
6029
+ };
6030
+ },
6031
+ "Clears all runtime validation scopes."
6032
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6033
+ }
6034
+ };
6035
+
5864
6036
  // src/graph/controllers/registerActorSessionPersistence.ts
5865
6037
  import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from "@cadenza.io/core";
5866
6038
  function registerActorSessionPersistenceTasks() {
@@ -6477,7 +6649,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
6477
6649
  }
6478
6650
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
6479
6651
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
6480
- const debugTable = shouldDebugSyncTable(tableName);
6481
6652
  if (!localInsertTask && !isCadenzaDBReady) {
6482
6653
  return void 0;
6483
6654
  }
@@ -6490,16 +6661,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6490
6661
  register: false,
6491
6662
  isHidden: true
6492
6663
  });
6493
- if (debugTable) {
6494
- logSyncDebug("insert_task_resolved", {
6495
- tableName,
6496
- localInsertTaskName: localInsertTask?.name ?? null,
6497
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
6498
- targetTaskName: targetTask.name,
6499
- queryData,
6500
- options
6501
- });
6502
- }
6503
6664
  const prepareExecutionTask = CadenzaService.createMetaTask(
6504
6665
  `Prepare graph sync insert for ${tableName}`,
6505
6666
  (ctx) => {
@@ -6510,12 +6671,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6510
6671
  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) {
6511
6672
  console.warn(
6512
6673
  "[CADENZA_SYNC_EMPTY_INSERT]",
6513
- summarizeSyncDebugValue({
6674
+ {
6514
6675
  tableName,
6515
6676
  queryData: originalQueryData,
6516
6677
  ctx,
6517
6678
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
6518
- })
6679
+ }
6519
6680
  );
6520
6681
  }
6521
6682
  return buildSyncExecutionEnvelope(
@@ -6529,37 +6690,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6529
6690
  isHidden: true
6530
6691
  }
6531
6692
  );
6532
- if (debugTable) {
6533
- prepareExecutionTask.then(
6534
- CadenzaService.createMetaTask(
6535
- `Log prepared graph sync insert execution for ${tableName}`,
6536
- (ctx) => {
6537
- if (tableName === "task") {
6538
- if (!shouldDebugTaskSyncPayload(ctx)) {
6539
- return ctx;
6540
- }
6541
- logSyncDebug("insert_prepare", {
6542
- tableName,
6543
- targetTaskName: targetTask.name,
6544
- payload: buildTaskSyncDebugPayload(ctx)
6545
- });
6546
- return ctx;
6547
- }
6548
- logSyncDebug("insert_prepare", {
6549
- tableName,
6550
- targetTaskName: targetTask.name,
6551
- ctx
6552
- });
6553
- return ctx;
6554
- },
6555
- `Logs prepared ${tableName} sync insert payloads.`,
6556
- {
6557
- register: false,
6558
- isHidden: true
6559
- }
6560
- )
6561
- );
6562
- }
6563
6693
  const finalizeExecutionTask = CadenzaService.createMetaTask(
6564
6694
  `Finalize graph sync insert for ${tableName}`,
6565
6695
  (ctx) => {
@@ -6570,25 +6700,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6570
6700
  ...ctx,
6571
6701
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
6572
6702
  };
6573
- if (debugTable) {
6574
- if (tableName === "task") {
6575
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
6576
- logSyncDebug("insert_finalize", {
6577
- tableName,
6578
- targetTaskName: targetTask.name,
6579
- success: didSyncInsertSucceed(normalizedContext),
6580
- payload: buildTaskSyncDebugPayload(normalizedContext)
6581
- });
6582
- }
6583
- } else {
6584
- logSyncDebug("insert_finalize", {
6585
- tableName,
6586
- targetTaskName: targetTask.name,
6587
- success: didSyncInsertSucceed(normalizedContext),
6588
- ctx: normalizedContext
6589
- });
6590
- }
6591
- }
6592
6703
  return normalizedContext;
6593
6704
  },
6594
6705
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -6623,139 +6734,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
6623
6734
  intent_registry: "intentRegistrys"
6624
6735
  };
6625
6736
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
6626
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
6627
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
6628
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
6629
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
6630
- "Query service_instance",
6631
- "Query service_instance_transport",
6632
- "Query intent_to_task_map",
6633
- "Query signal_to_task_map",
6634
- "Prepare for signal sync",
6635
- "Compile sync data and broadcast",
6636
- "Forward service instance sync",
6637
- "Forward service transport sync",
6638
- "Forward intent to task map sync",
6639
- "Forward signal to task map sync",
6640
- "Normalize telemetry ingest payload",
6641
- "Get telemetry session state",
6642
- "Normalize anomaly detect input",
6643
- "Read anomaly runtime session",
6644
- "Normalize prediction compute input",
6645
- "Normalize telemetry insert queryData"
6646
- ]);
6647
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
6648
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
6649
- "meta-service-registry-full-sync",
6650
- "runner-traffic-runtime-get",
6651
- "iot-telemetry-ingest",
6652
- "iot-telemetry-session-get",
6653
- "iot-anomaly-detect",
6654
- "iot-anomaly-runtime-get",
6655
- "iot-prediction-compute",
6656
- "iot-db-telemetry-insert",
6657
- "query-pg-cadenza-db-postgres-actor-service_instance",
6658
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
6659
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
6660
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
6661
- ]);
6662
- function shouldDebugSyncTable(tableName) {
6663
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
6664
- }
6665
- function shouldDebugSyncTaskName(taskName) {
6666
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
6667
- }
6668
- function shouldDebugSyncRoutineName(routineName) {
6669
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
6670
- }
6671
- function shouldDebugSyncIntentName(intentName) {
6672
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
6673
- }
6674
- function summarizeSyncDebugValue(value, depth = 0) {
6675
- if (value === null || value === void 0) {
6676
- return value;
6677
- }
6678
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
6679
- return value;
6680
- }
6681
- if (value instanceof Set) {
6682
- return {
6683
- __type: "Set",
6684
- size: value.size,
6685
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
6686
- };
6687
- }
6688
- if (value instanceof Map) {
6689
- return {
6690
- __type: "Map",
6691
- size: value.size
6692
- };
6693
- }
6694
- if (Array.isArray(value)) {
6695
- return {
6696
- __type: "Array",
6697
- length: value.length,
6698
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
6699
- };
6700
- }
6701
- if (typeof value === "object") {
6702
- if (depth >= 2) {
6703
- return "[object]";
6704
- }
6705
- const output = {};
6706
- const entries = Object.entries(value).filter(
6707
- ([key]) => ![
6708
- "functionString",
6709
- "tagIdGetter",
6710
- "__functionString",
6711
- "__getTagCallback",
6712
- "joinedContexts",
6713
- "task",
6714
- "taskInstance",
6715
- "tasks"
6716
- ].includes(key)
6717
- ).slice(0, 12);
6718
- for (const [key, nestedValue] of entries) {
6719
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
6720
- }
6721
- return output;
6722
- }
6723
- return String(value);
6724
- }
6725
- function logSyncDebug(event, payload) {
6726
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
6727
- }
6728
- function buildTaskSyncDebugPayload(ctx) {
6729
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
6730
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
6731
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
6732
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
6733
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
6734
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
6735
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
6736
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
6737
- return {
6738
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
6739
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
6740
- functionStringLength: functionString?.length ?? null,
6741
- tagIdGetterLength: tagIdGetter?.length ?? null,
6742
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
6743
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
6744
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
6745
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
6746
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
6747
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
6748
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
6749
- rowCount: ctx.rowCount ?? null,
6750
- errored: ctx.errored ?? false,
6751
- success: ctx.__success ?? null,
6752
- error: ctx.__error ?? null
6753
- };
6754
- }
6755
- function shouldDebugTaskSyncPayload(ctx) {
6756
- const payload = buildTaskSyncDebugPayload(ctx);
6757
- return shouldDebugSyncTaskName(payload.taskName);
6758
- }
6759
6737
  function resolveSyncQueryRows(ctx, tableName) {
6760
6738
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
6761
6739
  const rows = ctx?.[resultKey];
@@ -7202,16 +7180,6 @@ var GraphSyncController = class _GraphSyncController {
7202
7180
  if (!nextTask?.registered) {
7203
7181
  continue;
7204
7182
  }
7205
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
7206
- logSyncDebug("task_to_routine_split", {
7207
- routineName: routine.name,
7208
- routineVersion: routine.version,
7209
- taskName: nextTask.name,
7210
- taskVersion: nextTask.version,
7211
- serviceName: serviceName2,
7212
- registered: nextTask.registered
7213
- });
7214
- }
7215
7183
  yield {
7216
7184
  __syncing: ctx.__syncing,
7217
7185
  data: {
@@ -7357,20 +7325,6 @@ var GraphSyncController = class _GraphSyncController {
7357
7325
  if (task.registered) continue;
7358
7326
  const { __functionString, __getTagCallback } = task.export();
7359
7327
  this.tasksSynced = false;
7360
- if (shouldDebugSyncTaskName(task.name)) {
7361
- logSyncDebug("task_registration_split", {
7362
- taskName: task.name,
7363
- taskVersion: task.version,
7364
- serviceName: serviceName2,
7365
- register: task.register,
7366
- registered: task.registered,
7367
- hidden: task.hidden,
7368
- exportFunctionLength: __functionString?.length ?? null,
7369
- exportTagGetterLength: __getTagCallback?.length ?? null,
7370
- observedSignals: Array.from(task.observedSignals),
7371
- handledIntents: Array.from(task.handlesIntents)
7372
- });
7373
- }
7374
7328
  yield {
7375
7329
  __syncing: ctx.__syncing,
7376
7330
  data: {
@@ -7425,13 +7379,6 @@ var GraphSyncController = class _GraphSyncController {
7425
7379
  const registerTaskTask = CadenzaService.createMetaTask(
7426
7380
  "Record registration",
7427
7381
  (ctx, emit) => {
7428
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
7429
- logSyncDebug("task_registration_result", {
7430
- taskName: ctx.__taskName,
7431
- success: didSyncInsertSucceed(ctx),
7432
- ctx
7433
- });
7434
- }
7435
7382
  if (!didSyncInsertSucceed(ctx)) {
7436
7383
  return;
7437
7384
  }
@@ -7457,16 +7404,6 @@ var GraphSyncController = class _GraphSyncController {
7457
7404
  "Prepare created task for immediate sync",
7458
7405
  (ctx) => {
7459
7406
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
7460
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
7461
- logSyncDebug("task_created_for_immediate_sync", {
7462
- incomingTaskName: ctx?.data?.name ?? null,
7463
- resolvedTaskName: task?.name ?? null,
7464
- exists: Boolean(task),
7465
- hidden: task?.hidden ?? null,
7466
- register: task?.register ?? null,
7467
- registered: task?.registered ?? null
7468
- });
7469
- }
7470
7407
  if (!task || task.hidden || !task.register || task.registered) {
7471
7408
  return false;
7472
7409
  }
@@ -7653,17 +7590,6 @@ var GraphSyncController = class _GraphSyncController {
7653
7590
  if (!isGlobal) {
7654
7591
  continue;
7655
7592
  }
7656
- if (shouldDebugSyncTaskName(task.name)) {
7657
- logSyncDebug("signal_to_task_map_split", {
7658
- taskName: task.name,
7659
- signalName: _signal,
7660
- rawSignal: signal,
7661
- serviceName: serviceName2,
7662
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
7663
- _signal
7664
- )?.registered
7665
- });
7666
- }
7667
7593
  yield {
7668
7594
  __syncing: ctx.__syncing,
7669
7595
  data: {
@@ -7774,21 +7700,6 @@ var GraphSyncController = class _GraphSyncController {
7774
7700
  }
7775
7701
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
7776
7702
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
7777
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
7778
- if (shouldDebugTask) {
7779
- logSyncDebug("intent_map_task_state", {
7780
- taskName: task.name,
7781
- taskVersion: task.version,
7782
- serviceName: serviceName2,
7783
- registered: task.registered,
7784
- register: task.register,
7785
- hidden: task.hidden,
7786
- handledIntents: Array.from(task.handlesIntents),
7787
- registeredIntents: Array.from(task.__registeredIntents),
7788
- tasksSynced: this.tasksSynced,
7789
- intentsSynced: this.intentsSynced
7790
- });
7791
- }
7792
7703
  let emittedCount = 0;
7793
7704
  for (const intent of task.handlesIntents) {
7794
7705
  if (task.__registeredIntents.has(intent)) continue;
@@ -7814,15 +7725,6 @@ var GraphSyncController = class _GraphSyncController {
7814
7725
  if (!intentDefinition) {
7815
7726
  continue;
7816
7727
  }
7817
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
7818
- logSyncDebug("intent_to_task_map_split", {
7819
- taskName: task.name,
7820
- taskVersion: task.version,
7821
- intentName: intent,
7822
- serviceName: serviceName2,
7823
- intentDefinition
7824
- });
7825
- }
7826
7728
  yield {
7827
7729
  __syncing: ctx.__syncing,
7828
7730
  data: {
@@ -7843,15 +7745,6 @@ var GraphSyncController = class _GraphSyncController {
7843
7745
  };
7844
7746
  emittedCount += 1;
7845
7747
  }
7846
- if (shouldDebugTask && emittedCount === 0) {
7847
- logSyncDebug("intent_map_task_noop", {
7848
- taskName: task.name,
7849
- taskVersion: task.version,
7850
- serviceName: serviceName2,
7851
- handledIntents: Array.from(task.handlesIntents),
7852
- registeredIntents: Array.from(task.__registeredIntents)
7853
- });
7854
- }
7855
7748
  return emittedCount > 0;
7856
7749
  }.bind(this)
7857
7750
  );
@@ -7861,13 +7754,6 @@ var GraphSyncController = class _GraphSyncController {
7861
7754
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
7862
7755
  return false;
7863
7756
  }
7864
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7865
- logSyncDebug("intent_definition_prepare", {
7866
- taskName: ctx.__taskName,
7867
- intentName: ctx.__intent,
7868
- intentDefinition: ctx.__intentDefinition
7869
- });
7870
- }
7871
7757
  return {
7872
7758
  ...ctx,
7873
7759
  data: ctx.__intentDefinition
@@ -7880,13 +7766,6 @@ var GraphSyncController = class _GraphSyncController {
7880
7766
  if (!ctx.__intentMapData) {
7881
7767
  return false;
7882
7768
  }
7883
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7884
- logSyncDebug("intent_map_payload_restore", {
7885
- taskName: ctx.__taskName,
7886
- intentName: ctx.__intent,
7887
- intentMapData: ctx.__intentMapData
7888
- });
7889
- }
7890
7769
  return {
7891
7770
  ...ctx,
7892
7771
  data: ctx.__intentMapData
@@ -8708,6 +8587,13 @@ var CadenzaService = class {
8708
8587
  if (this.isBootstrapped) return;
8709
8588
  this.isBootstrapped = true;
8710
8589
  Cadenza.bootstrap();
8590
+ Cadenza.setRuntimeInquiryDelegate(
8591
+ (inquiry, context, options) => this.inquire(
8592
+ inquiry,
8593
+ context,
8594
+ options ?? {}
8595
+ )
8596
+ );
8711
8597
  this.signalBroker = Cadenza.signalBroker;
8712
8598
  this.inquiryBroker = Cadenza.inquiryBroker;
8713
8599
  this.runner = Cadenza.runner;
@@ -8716,7 +8602,7 @@ var CadenzaService = class {
8716
8602
  this.serviceRegistry = ServiceRegistry.instance;
8717
8603
  RestController.instance;
8718
8604
  SocketController.instance;
8719
- console.log("BOOTSTRAPPED");
8605
+ RuntimeValidationController.instance;
8720
8606
  }
8721
8607
  static ensureTransportControllers(isFrontend) {
8722
8608
  if (!isFrontend) {
@@ -8855,6 +8741,38 @@ var CadenzaService = class {
8855
8741
  this.inquiryBroker?.addIntent(intent);
8856
8742
  return intent;
8857
8743
  }
8744
+ static getRuntimeValidationPolicy() {
8745
+ this.bootstrap();
8746
+ return Cadenza.getRuntimeValidationPolicy();
8747
+ }
8748
+ static setRuntimeValidationPolicy(policy = {}) {
8749
+ this.bootstrap();
8750
+ return Cadenza.setRuntimeValidationPolicy(policy);
8751
+ }
8752
+ static replaceRuntimeValidationPolicy(policy = {}) {
8753
+ this.bootstrap();
8754
+ return Cadenza.replaceRuntimeValidationPolicy(policy);
8755
+ }
8756
+ static clearRuntimeValidationPolicy() {
8757
+ this.bootstrap();
8758
+ Cadenza.clearRuntimeValidationPolicy();
8759
+ }
8760
+ static getRuntimeValidationScopes() {
8761
+ this.bootstrap();
8762
+ return Cadenza.getRuntimeValidationScopes();
8763
+ }
8764
+ static upsertRuntimeValidationScope(scope) {
8765
+ this.bootstrap();
8766
+ return Cadenza.upsertRuntimeValidationScope(scope);
8767
+ }
8768
+ static removeRuntimeValidationScope(id) {
8769
+ this.bootstrap();
8770
+ Cadenza.removeRuntimeValidationScope(id);
8771
+ }
8772
+ static clearRuntimeValidationScopes() {
8773
+ this.bootstrap();
8774
+ Cadenza.clearRuntimeValidationScopes();
8775
+ }
8858
8776
  static getInquiryResponderDescriptor(task) {
8859
8777
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
8860
8778
  }
@@ -9615,7 +9533,6 @@ var CadenzaService = class {
9615
9533
  }
9616
9534
  });
9617
9535
  });
9618
- console.log("Creating service...");
9619
9536
  const initContext = {
9620
9537
  data: {
9621
9538
  name: serviceName,
@@ -9648,10 +9565,13 @@ var CadenzaService = class {
9648
9565
  }).doOn("meta.fetch.handshake_complete");
9649
9566
  } else {
9650
9567
  this.emit("meta.create_service_requested", initContext);
9651
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
9652
- this.createSignalTransmissionTask(
9653
- "global.meta.cadenza_db.gathered_sync_data",
9654
- ctx.serviceName
9568
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
9569
+ emit(
9570
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
9571
+ {
9572
+ serviceName: ctx.serviceName,
9573
+ __reason: "handshake"
9574
+ }
9655
9575
  );
9656
9576
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
9657
9577
  }
@@ -10646,6 +10566,8 @@ export {
10646
10566
  EphemeralTask2 as EphemeralTask,
10647
10567
  GraphMetadataController,
10648
10568
  GraphRoutine2 as GraphRoutine,
10569
+ RUNTIME_VALIDATION_INTENTS,
10570
+ RUNTIME_VALIDATION_SIGNALS,
10649
10571
  RestController,
10650
10572
  ServiceRegistry,
10651
10573
  SignalController,