@cadenza.io/service 2.17.80 → 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.
@@ -38,6 +38,8 @@ __export(index_exports, {
38
38
  EphemeralTask: () => import_core6.EphemeralTask,
39
39
  GraphMetadataController: () => GraphMetadataController,
40
40
  GraphRoutine: () => import_core6.GraphRoutine,
41
+ RUNTIME_VALIDATION_INTENTS: () => RUNTIME_VALIDATION_INTENTS,
42
+ RUNTIME_VALIDATION_SIGNALS: () => RUNTIME_VALIDATION_SIGNALS,
41
43
  RestController: () => RestController,
42
44
  ServiceRegistry: () => ServiceRegistry,
43
45
  SignalController: () => SignalController,
@@ -271,6 +273,13 @@ var DatabaseTask = class extends DeputyTask {
271
273
  const metadata = context.getMetadata();
272
274
  const dynamicQueryData = ctx.queryData ?? {};
273
275
  delete ctx.queryData;
276
+ const nextQueryData = {
277
+ ...this.queryData,
278
+ data: {
279
+ ...ctx.data
280
+ },
281
+ ...dynamicQueryData
282
+ };
274
283
  const deputyContext = {
275
284
  ...ctx,
276
285
  __localTaskName: this.name,
@@ -287,13 +296,13 @@ var DatabaseTask = class extends DeputyTask {
287
296
  __blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
288
297
  __deputyTaskName: this.name
289
298
  },
290
- queryData: {
291
- ...this.queryData,
292
- data: {
293
- ...ctx.data
294
- },
295
- ...dynamicQueryData
296
- }
299
+ data: nextQueryData.data ?? ctx.data,
300
+ batch: nextQueryData.batch ?? ctx.batch,
301
+ transaction: nextQueryData.transaction ?? ctx.transaction,
302
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
303
+ filter: nextQueryData.filter ?? ctx.filter,
304
+ fields: nextQueryData.fields ?? ctx.fields,
305
+ queryData: nextQueryData
297
306
  };
298
307
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
299
308
  }
@@ -727,6 +736,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
727
736
  // src/registry/ServiceRegistry.ts
728
737
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
729
738
  var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
739
+ var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
730
740
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
731
741
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
732
742
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -814,18 +824,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
814
824
  }
815
825
  return result;
816
826
  }
817
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
818
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
819
- }
820
- function summarizeTransportDescriptors(transports) {
821
- return transports.map((transport) => ({
822
- uuid: transport.uuid,
823
- serviceInstanceId: transport.serviceInstanceId,
824
- role: transport.role,
825
- origin: transport.origin,
826
- protocols: transport.protocols
827
- }));
828
- }
829
827
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
830
828
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
831
829
  tableName,
@@ -842,6 +840,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
842
840
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
843
841
  const delegationContext = ensureDelegationContextMetadata({
844
842
  ...ctx,
843
+ data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
844
+ batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
845
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
846
+ transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
845
847
  queryData: nextQueryData
846
848
  });
847
849
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -965,6 +967,7 @@ var ServiceRegistry = class _ServiceRegistry {
965
967
  this.deputies = /* @__PURE__ */ new Map();
966
968
  this.remoteSignals = /* @__PURE__ */ new Map();
967
969
  this.remoteIntents = /* @__PURE__ */ new Map();
970
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
968
971
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
969
972
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
970
973
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1216,21 +1219,6 @@ var ServiceRegistry = class _ServiceRegistry {
1216
1219
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1217
1220
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1218
1221
  }
1219
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1220
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1221
- localServiceName: this.serviceName,
1222
- localServiceInstanceId: this.serviceInstanceId,
1223
- targetServiceName: serviceName,
1224
- targetServiceInstanceId: uuid7,
1225
- existingInstance: !!existing,
1226
- deleted,
1227
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1228
- hasDeputies: this.deputies.has(serviceName),
1229
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1230
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1231
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1232
- });
1233
- }
1234
1222
  if (!serviceInstance.isBootstrapPlaceholder) {
1235
1223
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid7, emit);
1236
1224
  }
@@ -1243,7 +1231,8 @@ var ServiceRegistry = class _ServiceRegistry {
1243
1231
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1244
1232
  const connected = this.ensureDependeeClientForInstance(
1245
1233
  trackedInstance,
1246
- emit
1234
+ emit,
1235
+ ctx
1247
1236
  );
1248
1237
  if (!connected) {
1249
1238
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1286,27 +1275,6 @@ var ServiceRegistry = class _ServiceRegistry {
1286
1275
  break;
1287
1276
  }
1288
1277
  }
1289
- if (shouldTraceIotDbRegistryPath(
1290
- this.serviceName,
1291
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1292
- )) {
1293
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1294
- localServiceName: this.serviceName,
1295
- localServiceInstanceId: this.serviceInstanceId,
1296
- transport: {
1297
- uuid: transport.uuid,
1298
- serviceInstanceId: transport.serviceInstanceId,
1299
- role: transport.role,
1300
- origin: transport.origin,
1301
- protocols: transport.protocols,
1302
- deleted: transport.deleted
1303
- },
1304
- ownerFound: !!ownerInstance,
1305
- ownerServiceName: ownerInstance?.serviceName,
1306
- ownerInstanceId: ownerInstance?.uuid,
1307
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1308
- });
1309
- }
1310
1278
  if (!ownerInstance) {
1311
1279
  return false;
1312
1280
  }
@@ -1332,7 +1300,7 @@ var ServiceRegistry = class _ServiceRegistry {
1332
1300
  if (!hasRemoteInterest) {
1333
1301
  return true;
1334
1302
  }
1335
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1303
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1336
1304
  return true;
1337
1305
  },
1338
1306
  "Handles service transport updates independently from instance rows."
@@ -1362,29 +1330,12 @@ var ServiceRegistry = class _ServiceRegistry {
1362
1330
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1363
1331
  ).doOn("meta.service_registry.dependee_registered");
1364
1332
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1365
- const getLocalTraceContext = () => ({
1366
- localServiceName: this.serviceName,
1367
- localServiceInstanceId: this.serviceInstanceId
1368
- });
1369
1333
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1370
1334
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1371
1335
  if (serviceInstances.length === 0) {
1372
1336
  return;
1373
1337
  }
1374
1338
  for (const serviceInstance of serviceInstances) {
1375
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1376
- if (shouldTraceIotDbRegistryPath(
1377
- localServiceName,
1378
- serviceInstance.serviceName
1379
- )) {
1380
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1381
- localServiceName,
1382
- localServiceInstanceId,
1383
- targetServiceName: serviceInstance.serviceName,
1384
- targetServiceInstanceId: serviceInstance.uuid,
1385
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1386
- });
1387
- }
1388
1339
  yield { serviceInstance };
1389
1340
  }
1390
1341
  }).doOn(
@@ -1430,6 +1381,15 @@ var ServiceRegistry = class _ServiceRegistry {
1430
1381
  },
1431
1382
  "Handles registration of remote signals"
1432
1383
  ).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
1384
+ this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
1385
+ "Reconcile gathered sync signal transmissions",
1386
+ (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
1387
+ "Keeps gathered sync transmitters aligned with known remote service instances."
1388
+ ).doOn(
1389
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
1390
+ META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
1391
+ "meta.service_registry.service_discovered"
1392
+ );
1433
1393
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1434
1394
  "Handle global intent registration",
1435
1395
  (ctx, emit) => {
@@ -1439,34 +1399,20 @@ var ServiceRegistry = class _ServiceRegistry {
1439
1399
  if (!a.deleted && b.deleted) return 1;
1440
1400
  return 0;
1441
1401
  });
1442
- if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
1443
- const relevantIntentNames = sorted.filter(
1444
- (map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
1445
- ).map((map) => ({
1446
- intentName: map.intentName,
1447
- serviceName: map.serviceName,
1448
- taskName: map.taskName,
1449
- taskVersion: map.taskVersion,
1450
- deleted: !!map.deleted
1451
- }));
1452
- console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
1453
- localServiceName: this.serviceName,
1454
- localServiceInstanceId: this.serviceInstanceId,
1455
- signalName: ctx.__signalName,
1456
- totalIntentMaps: sorted.length,
1457
- relevantIntentNames
1458
- });
1459
- }
1460
1402
  for (const map of sorted) {
1461
- if (map.deleted) {
1462
- this.unregisterRemoteIntentDeputy(map);
1463
- continue;
1403
+ try {
1404
+ if (map.deleted) {
1405
+ this.unregisterRemoteIntentDeputy(map);
1406
+ continue;
1407
+ }
1408
+ CadenzaService.inquiryBroker.addIntent({
1409
+ name: map.intentName
1410
+ });
1411
+ this.registerRemoteIntentDeputy(map);
1412
+ this.ensureDependeeClientsForService(map.serviceName, emit);
1413
+ } catch (error) {
1414
+ throw error;
1464
1415
  }
1465
- CadenzaService.inquiryBroker.addIntent({
1466
- name: map.intentName
1467
- });
1468
- this.registerRemoteIntentDeputy(map);
1469
- this.ensureDependeeClientsForService(map.serviceName, emit);
1470
1416
  }
1471
1417
  return true;
1472
1418
  },
@@ -1618,7 +1564,7 @@ var ServiceRegistry = class _ServiceRegistry {
1618
1564
  {
1619
1565
  uuid: report.transportId,
1620
1566
  serviceInstanceId: report.serviceInstanceId,
1621
- role: this.getRoutingTransportRole(),
1567
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1622
1568
  origin: report.transportOrigin,
1623
1569
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1624
1570
  securityProfile: null,
@@ -1660,21 +1606,6 @@ var ServiceRegistry = class _ServiceRegistry {
1660
1606
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1661
1607
  inquiryResult
1662
1608
  );
1663
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1664
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1665
- uuid: instance.uuid,
1666
- isActive: instance.isActive,
1667
- isNonResponsive: instance.isNonResponsive,
1668
- isBlocked: instance.isBlocked,
1669
- transports: summarizeTransportDescriptors(instance.transports)
1670
- }));
1671
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1672
- localServiceName: this.serviceName,
1673
- localServiceInstanceId: this.serviceInstanceId,
1674
- totalServiceInstances: serviceInstances.length,
1675
- tracedInstances
1676
- });
1677
- }
1678
1609
  return {
1679
1610
  ...ctx,
1680
1611
  signalToTaskMaps,
@@ -1771,44 +1702,6 @@ var ServiceRegistry = class _ServiceRegistry {
1771
1702
  let retries = __retries ?? 0;
1772
1703
  let triedInstances = __triedInstances ?? [];
1773
1704
  const preferredRole = this.getRoutingTransportRole();
1774
- const allInstances = this.instances.get(__serviceName) ?? [];
1775
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1776
- this.serviceName,
1777
- __serviceName ?? void 0
1778
- ) ? allInstances.map((instance) => ({
1779
- uuid: instance.uuid,
1780
- isActive: instance.isActive,
1781
- isNonResponsive: instance.isNonResponsive,
1782
- isBlocked: instance.isBlocked,
1783
- isFrontend: instance.isFrontend,
1784
- transports: summarizeTransportDescriptors(instance.transports),
1785
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1786
- instance,
1787
- context,
1788
- preferredRole
1789
- ) ? {
1790
- uuid: this.selectTransportForInstance(
1791
- instance,
1792
- context,
1793
- preferredRole
1794
- ).uuid,
1795
- role: this.selectTransportForInstance(
1796
- instance,
1797
- context,
1798
- preferredRole
1799
- ).role,
1800
- origin: this.selectTransportForInstance(
1801
- instance,
1802
- context,
1803
- preferredRole
1804
- ).origin,
1805
- protocols: this.selectTransportForInstance(
1806
- instance,
1807
- context,
1808
- preferredRole
1809
- ).protocols
1810
- } : null
1811
- })) : void 0;
1812
1705
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1813
1706
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1814
1707
  return false;
@@ -1841,20 +1734,6 @@ var ServiceRegistry = class _ServiceRegistry {
1841
1734
  }
1842
1735
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1843
1736
  });
1844
- if (candidateDiagnostics) {
1845
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1846
- localServiceName: this.serviceName,
1847
- localServiceInstanceId: this.serviceInstanceId,
1848
- targetServiceName: __serviceName,
1849
- preferredRole,
1850
- useSocket: this.useSocket,
1851
- targetServiceInstanceId,
1852
- retries,
1853
- triedInstances,
1854
- candidateDiagnostics,
1855
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1856
- });
1857
- }
1858
1737
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1859
1738
  context.errored = true;
1860
1739
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2112,6 +1991,7 @@ var ServiceRegistry = class _ServiceRegistry {
2112
1991
  serviceName: report.serviceName,
2113
1992
  serviceInstanceId: report.serviceInstanceId,
2114
1993
  transportId: report.transportId,
1994
+ transportRole: report.transportRole,
2115
1995
  transportOrigin: report.transportOrigin,
2116
1996
  transportProtocols: report.transportProtocols,
2117
1997
  isFrontend: report.isFrontend,
@@ -2728,6 +2608,64 @@ var ServiceRegistry = class _ServiceRegistry {
2728
2608
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2729
2609
  );
2730
2610
  }
2611
+ shouldReconcileGatheredSyncTransmissions() {
2612
+ return this.serviceName === "CadenzaDB";
2613
+ }
2614
+ collectGatheredSyncTransmissionRecipients(ctx) {
2615
+ const recipients = /* @__PURE__ */ new Set();
2616
+ const addRecipient = (serviceName) => {
2617
+ const normalizedServiceName = String(serviceName ?? "").trim();
2618
+ if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
2619
+ return;
2620
+ }
2621
+ recipients.add(normalizedServiceName);
2622
+ };
2623
+ addRecipient(ctx.serviceName ?? ctx.__serviceName);
2624
+ for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
2625
+ addRecipient(instance.serviceName);
2626
+ }
2627
+ for (const [serviceName, instances] of this.instances.entries()) {
2628
+ if (!instances?.length) {
2629
+ continue;
2630
+ }
2631
+ addRecipient(serviceName);
2632
+ }
2633
+ return recipients;
2634
+ }
2635
+ reconcileGatheredSyncTransmissions(ctx, emit) {
2636
+ if (!this.shouldReconcileGatheredSyncTransmissions()) {
2637
+ return false;
2638
+ }
2639
+ const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
2640
+ const createdRecipients = [];
2641
+ for (const serviceName of desiredRecipients) {
2642
+ if (this.gatheredSyncTransmissionServices.has(serviceName)) {
2643
+ continue;
2644
+ }
2645
+ CadenzaService.createSignalTransmissionTask(
2646
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
2647
+ serviceName
2648
+ );
2649
+ this.gatheredSyncTransmissionServices.add(serviceName);
2650
+ createdRecipients.push(serviceName);
2651
+ }
2652
+ for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
2653
+ if (desiredRecipients.has(serviceName)) {
2654
+ continue;
2655
+ }
2656
+ CadenzaService.get(
2657
+ `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
2658
+ )?.destroy();
2659
+ this.gatheredSyncTransmissionServices.delete(serviceName);
2660
+ }
2661
+ if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
2662
+ emit("meta.cadenza_db.sync_tick", {
2663
+ __syncing: true,
2664
+ __reason: "gathered_sync_transmissions_reconciled"
2665
+ });
2666
+ }
2667
+ return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
2668
+ }
2731
2669
  registerRemoteIntentDeputy(map) {
2732
2670
  if (!this.serviceName || map.serviceName === this.serviceName) {
2733
2671
  return;
@@ -2970,38 +2908,18 @@ var ServiceRegistry = class _ServiceRegistry {
2970
2908
  }
2971
2909
  return communicationTypes;
2972
2910
  }
2973
- ensureDependeeClientForInstance(instance, emit) {
2911
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2974
2912
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2975
2913
  return false;
2976
2914
  }
2977
2915
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2978
2916
  return false;
2979
2917
  }
2980
- const transport = this.getRouteableTransport(
2918
+ const transport = this.selectTransportForInstance(
2981
2919
  instance,
2982
- this.useSocket ? "socket" : "rest"
2983
- );
2984
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2985
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2986
- localServiceName: this.serviceName,
2987
- localServiceInstanceId: this.serviceInstanceId,
2988
- targetServiceName: instance.serviceName,
2989
- targetServiceInstanceId: instance.uuid,
2990
- useSocket: this.useSocket,
2991
- routeableRole: this.getRoutingTransportRole(),
2992
- hasDeputies: this.deputies.has(instance.serviceName),
2993
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2994
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2995
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2996
- transports: summarizeTransportDescriptors(instance.transports),
2997
- selectedTransport: transport ? {
2998
- uuid: transport.uuid,
2999
- role: transport.role,
3000
- origin: transport.origin,
3001
- protocols: transport.protocols
3002
- } : null
3003
- });
3004
- }
2920
+ ctx ?? {},
2921
+ this.getRoutingTransportRole()
2922
+ );
3005
2923
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
3006
2924
  return false;
3007
2925
  }
@@ -3018,9 +2936,9 @@ var ServiceRegistry = class _ServiceRegistry {
3018
2936
  this.markTransportClientCreated(instance, transport.uuid);
3019
2937
  return true;
3020
2938
  }
3021
- ensureDependeeClientsForService(serviceName, emit) {
2939
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
3022
2940
  for (const instance of this.instances.get(serviceName) ?? []) {
3023
- this.ensureDependeeClientForInstance(instance, emit);
2941
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
3024
2942
  }
3025
2943
  }
3026
2944
  hasTransportClientCreated(instance, transportId) {
@@ -3079,6 +2997,10 @@ var ServiceRegistry = class _ServiceRegistry {
3079
2997
  if (!instances?.length) {
3080
2998
  return;
3081
2999
  }
3000
+ const resolvedInstance = instances.find(
3001
+ (instance) => instance.uuid === resolvedInstanceId
3002
+ );
3003
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3082
3004
  const placeholders = instances.filter(
3083
3005
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3084
3006
  );
@@ -3090,7 +3012,33 @@ var ServiceRegistry = class _ServiceRegistry {
3090
3012
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3091
3013
  placeholder.uuid
3092
3014
  );
3015
+ const preservedTransportIds = /* @__PURE__ */ new Set();
3016
+ if (resolvedInstance && frontendRoutingRole) {
3017
+ const resolvedHasFrontendRoute = resolvedInstance.transports.some(
3018
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
3019
+ );
3020
+ if (!resolvedHasFrontendRoute) {
3021
+ const transportsToPreserve = placeholder.transports.filter(
3022
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
3023
+ );
3024
+ for (const transport of transportsToPreserve) {
3025
+ if (resolvedInstance.transports.some(
3026
+ (existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
3027
+ )) {
3028
+ continue;
3029
+ }
3030
+ resolvedInstance.transports.push({
3031
+ ...transport,
3032
+ serviceInstanceId: resolvedInstanceId
3033
+ });
3034
+ preservedTransportIds.add(transport.uuid);
3035
+ }
3036
+ }
3037
+ }
3093
3038
  for (const transport of placeholder.transports) {
3039
+ if (preservedTransportIds.has(transport.uuid)) {
3040
+ continue;
3041
+ }
3094
3042
  const transportKey = buildTransportClientKey(transport);
3095
3043
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3096
3044
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3211,6 +3159,7 @@ var ServiceRegistry = class _ServiceRegistry {
3211
3159
  return null;
3212
3160
  }
3213
3161
  const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
3162
+ const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
3214
3163
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3215
3164
  const transportProtocols = Array.isArray(
3216
3165
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3236,6 +3185,7 @@ var ServiceRegistry = class _ServiceRegistry {
3236
3185
  serviceName,
3237
3186
  serviceInstanceId,
3238
3187
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3188
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3239
3189
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3240
3190
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3241
3191
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3258,13 +3208,16 @@ var ServiceRegistry = class _ServiceRegistry {
3258
3208
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3259
3209
  const existingTransport = this.getTransportById(instance, report.transportId);
3260
3210
  if (existingTransport) {
3211
+ if (report.transportRole) {
3212
+ existingTransport.role = report.transportRole;
3213
+ }
3261
3214
  existingTransport.origin = report.transportOrigin;
3262
3215
  existingTransport.protocols = protocols;
3263
3216
  } else {
3264
3217
  instance.transports.push({
3265
3218
  uuid: report.transportId,
3266
3219
  serviceInstanceId: report.serviceInstanceId,
3267
- role: this.getRoutingTransportRole(),
3220
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3268
3221
  origin: report.transportOrigin,
3269
3222
  protocols,
3270
3223
  securityProfile: null,
@@ -3310,24 +3263,18 @@ var ServiceRegistry = class _ServiceRegistry {
3310
3263
  localInstance.isBlocked
3311
3264
  );
3312
3265
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3266
+ const transport = this.getRouteableTransport(
3267
+ localInstance,
3268
+ this.useSocket ? "socket" : "rest",
3269
+ "internal"
3270
+ );
3313
3271
  const report = {
3314
3272
  serviceName: this.serviceName,
3315
3273
  serviceInstanceId: this.serviceInstanceId,
3316
- transportId: this.getRouteableTransport(
3317
- localInstance,
3318
- this.useSocket ? "socket" : "rest",
3319
- "internal"
3320
- )?.uuid ?? void 0,
3321
- transportOrigin: this.getRouteableTransport(
3322
- localInstance,
3323
- this.useSocket ? "socket" : "rest",
3324
- "internal"
3325
- )?.origin ?? void 0,
3326
- transportProtocols: this.getRouteableTransport(
3327
- localInstance,
3328
- this.useSocket ? "socket" : "rest",
3329
- "internal"
3330
- )?.protocols ?? void 0,
3274
+ transportId: transport?.uuid ?? void 0,
3275
+ transportRole: transport?.role ?? void 0,
3276
+ transportOrigin: transport?.origin ?? void 0,
3277
+ transportProtocols: transport?.protocols ?? void 0,
3331
3278
  isFrontend: localInstance.isFrontend,
3332
3279
  reportedAt,
3333
3280
  state: snapshot.state,
@@ -3691,6 +3638,7 @@ var ServiceRegistry = class _ServiceRegistry {
3691
3638
  this.deputies.clear();
3692
3639
  this.remoteSignals.clear();
3693
3640
  this.remoteIntents.clear();
3641
+ this.gatheredSyncTransmissionServices.clear();
3694
3642
  this.remoteIntentDeputiesByKey.clear();
3695
3643
  this.remoteIntentDeputiesByTask.clear();
3696
3644
  this.dependeesByService.clear();
@@ -4942,10 +4890,14 @@ var SocketController = class _SocketController {
4942
4890
  const communicationTypes = this.normalizeCommunicationTypes(
4943
4891
  input.communicationTypes
4944
4892
  );
4893
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
4945
4894
  const serviceName = String(input.serviceName ?? "");
4946
4895
  const serviceTransportId = String(input.serviceTransportId ?? "");
4947
4896
  const serviceOrigin = String(input.serviceOrigin ?? "");
4948
4897
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
4898
+ if (!transportProtocols.includes("socket")) {
4899
+ return false;
4900
+ }
4949
4901
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
4950
4902
  CadenzaService.log(
4951
4903
  "Socket client setup skipped due to missing transport origin",
@@ -4971,7 +4923,7 @@ var SocketController = class _SocketController {
4971
4923
  serviceName,
4972
4924
  serviceTransportId,
4973
4925
  serviceOrigin,
4974
- transportProtocols: input.transportProtocols,
4926
+ transportProtocols,
4975
4927
  url
4976
4928
  });
4977
4929
  };
@@ -4992,7 +4944,7 @@ var SocketController = class _SocketController {
4992
4944
  serviceName,
4993
4945
  serviceTransportId,
4994
4946
  serviceOrigin,
4995
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
4947
+ transportProtocols,
4996
4948
  url,
4997
4949
  destroyed: false,
4998
4950
  updatedAt: Date.now()
@@ -5233,19 +5185,6 @@ var SocketController = class _SocketController {
5233
5185
  });
5234
5186
  });
5235
5187
  socket.on("signal", (signalCtx, callback) => {
5236
- if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5237
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
5238
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5239
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5240
- signalName: signalCtx.__signalName,
5241
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5242
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5243
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5244
- serviceInstanceTransports: Array.isArray(
5245
- signalCtx.serviceInstanceTransports
5246
- ) ? signalCtx.serviceInstanceTransports.length : 0
5247
- });
5248
- }
5249
5188
  if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
5250
5189
  if (isSocketAckCallback(callback)) {
5251
5190
  callback({
@@ -5544,21 +5483,6 @@ var SocketController = class _SocketController {
5544
5483
  if (signalCtx.__signalName === void 0) {
5545
5484
  return;
5546
5485
  }
5547
- if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5548
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
5549
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5550
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5551
- targetServiceName: serviceName,
5552
- targetUrl: url,
5553
- signalName: signalCtx.__signalName,
5554
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5555
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5556
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5557
- serviceInstanceTransports: Array.isArray(
5558
- signalCtx.serviceInstanceTransports
5559
- ) ? signalCtx.serviceInstanceTransports.length : 0
5560
- });
5561
- }
5562
5486
  delete signalCtx.__broadcast;
5563
5487
  const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
5564
5488
  errored: true,
@@ -5599,7 +5523,7 @@ var SocketController = class _SocketController {
5599
5523
  communicationTypes,
5600
5524
  serviceTransportId,
5601
5525
  serviceOrigin,
5602
- transportProtocols: input.transportProtocols,
5526
+ transportProtocols,
5603
5527
  handshakeData: {
5604
5528
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5605
5529
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -5959,6 +5883,209 @@ var SignalController = class _SignalController {
5959
5883
  }
5960
5884
  };
5961
5885
 
5886
+ // src/runtime/RuntimeValidationController.ts
5887
+ var RUNTIME_VALIDATION_INTENTS = {
5888
+ getPolicy: "meta-runtime-validation-policy-get",
5889
+ setPolicy: "meta-runtime-validation-policy-set",
5890
+ replacePolicy: "meta-runtime-validation-policy-replace",
5891
+ clearPolicy: "meta-runtime-validation-policy-clear",
5892
+ listScopes: "meta-runtime-validation-scope-list",
5893
+ upsertScope: "meta-runtime-validation-scope-upsert",
5894
+ removeScope: "meta-runtime-validation-scope-remove",
5895
+ clearScopes: "meta-runtime-validation-scope-clear"
5896
+ };
5897
+ var RUNTIME_VALIDATION_SIGNALS = {
5898
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
5899
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
5900
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
5901
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
5902
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
5903
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
5904
+ policyUpdated: "meta.runtime_validation.policy_updated",
5905
+ policyCleared: "meta.runtime_validation.policy_cleared",
5906
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
5907
+ scopeRemoved: "meta.runtime_validation.scope_removed",
5908
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
5909
+ };
5910
+ function normalizePolicyContext(ctx) {
5911
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
5912
+ const policy = {};
5913
+ for (const key of [
5914
+ "metaInput",
5915
+ "metaOutput",
5916
+ "businessInput",
5917
+ "businessOutput",
5918
+ "warnOnMissingMetaInputSchema",
5919
+ "warnOnMissingMetaOutputSchema",
5920
+ "warnOnMissingBusinessInputSchema",
5921
+ "warnOnMissingBusinessOutputSchema"
5922
+ ]) {
5923
+ if (source[key] !== void 0) {
5924
+ policy[key] = source[key];
5925
+ }
5926
+ }
5927
+ return policy;
5928
+ }
5929
+ function normalizeScopeContext(ctx) {
5930
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
5931
+ return {
5932
+ id: source.id,
5933
+ active: source.active,
5934
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
5935
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
5936
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
5937
+ };
5938
+ }
5939
+ var RuntimeValidationController = class _RuntimeValidationController {
5940
+ static get instance() {
5941
+ if (!this._instance) {
5942
+ this._instance = new _RuntimeValidationController();
5943
+ }
5944
+ return this._instance;
5945
+ }
5946
+ constructor() {
5947
+ CadenzaService.defineIntent({
5948
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
5949
+ description: "Get the active runtime validation policy.",
5950
+ input: { type: "object" },
5951
+ output: { type: "object" }
5952
+ });
5953
+ CadenzaService.defineIntent({
5954
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
5955
+ description: "Merge fields into the active runtime validation policy.",
5956
+ input: { type: "object" },
5957
+ output: { type: "object" }
5958
+ });
5959
+ CadenzaService.defineIntent({
5960
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
5961
+ description: "Replace the active runtime validation policy.",
5962
+ input: { type: "object" },
5963
+ output: { type: "object" }
5964
+ });
5965
+ CadenzaService.defineIntent({
5966
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
5967
+ description: "Clear the active runtime validation policy.",
5968
+ input: { type: "object" },
5969
+ output: { type: "object" }
5970
+ });
5971
+ CadenzaService.defineIntent({
5972
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
5973
+ description: "List active runtime validation scopes.",
5974
+ input: { type: "object" },
5975
+ output: { type: "object" }
5976
+ });
5977
+ CadenzaService.defineIntent({
5978
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
5979
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
5980
+ input: { type: "object" },
5981
+ output: { type: "object" }
5982
+ });
5983
+ CadenzaService.defineIntent({
5984
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
5985
+ description: "Remove a runtime validation scope by id.",
5986
+ input: { type: "object" },
5987
+ output: { type: "object" }
5988
+ });
5989
+ CadenzaService.defineIntent({
5990
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
5991
+ description: "Clear all runtime validation scopes.",
5992
+ input: { type: "object" },
5993
+ output: { type: "object" }
5994
+ });
5995
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
5996
+ return {
5997
+ policy: CadenzaService.getRuntimeValidationPolicy()
5998
+ };
5999
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
6000
+ CadenzaService.createMetaTask(
6001
+ "Set runtime validation policy",
6002
+ (ctx, emit) => {
6003
+ const policy = normalizePolicyContext(ctx);
6004
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
6005
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6006
+ policy: nextPolicy
6007
+ });
6008
+ return {
6009
+ policy: nextPolicy
6010
+ };
6011
+ },
6012
+ "Merges runtime validation policy fields at runtime."
6013
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
6014
+ CadenzaService.createMetaTask(
6015
+ "Replace runtime validation policy",
6016
+ (ctx, emit) => {
6017
+ const policy = normalizePolicyContext(ctx);
6018
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
6019
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6020
+ policy: nextPolicy
6021
+ });
6022
+ return {
6023
+ policy: nextPolicy
6024
+ };
6025
+ },
6026
+ "Replaces runtime validation policy fields at runtime."
6027
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
6028
+ CadenzaService.createMetaTask(
6029
+ "Clear runtime validation policy",
6030
+ (_ctx, emit) => {
6031
+ CadenzaService.clearRuntimeValidationPolicy();
6032
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
6033
+ return {
6034
+ policy: CadenzaService.getRuntimeValidationPolicy()
6035
+ };
6036
+ },
6037
+ "Clears the runtime validation policy."
6038
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
6039
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
6040
+ return {
6041
+ scopes: CadenzaService.getRuntimeValidationScopes()
6042
+ };
6043
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
6044
+ CadenzaService.createMetaTask(
6045
+ "Upsert runtime validation scope",
6046
+ (ctx, emit) => {
6047
+ const scope = normalizeScopeContext(ctx);
6048
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
6049
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
6050
+ scope: nextScope
6051
+ });
6052
+ return {
6053
+ scope: nextScope
6054
+ };
6055
+ },
6056
+ "Upserts a runtime validation scope for targeted debugging."
6057
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6058
+ CadenzaService.createMetaTask(
6059
+ "Remove runtime validation scope",
6060
+ (ctx, emit) => {
6061
+ if (!ctx.id) {
6062
+ throw new Error("Runtime validation scope id is required");
6063
+ }
6064
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6065
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6066
+ id: ctx.id
6067
+ });
6068
+ return {
6069
+ id: ctx.id,
6070
+ scopes: CadenzaService.getRuntimeValidationScopes()
6071
+ };
6072
+ },
6073
+ "Removes a runtime validation scope."
6074
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6075
+ CadenzaService.createMetaTask(
6076
+ "Clear runtime validation scopes",
6077
+ (_ctx, emit) => {
6078
+ CadenzaService.clearRuntimeValidationScopes();
6079
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6080
+ return {
6081
+ scopes: CadenzaService.getRuntimeValidationScopes()
6082
+ };
6083
+ },
6084
+ "Clears all runtime validation scopes."
6085
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6086
+ }
6087
+ };
6088
+
5962
6089
  // src/graph/controllers/registerActorSessionPersistence.ts
5963
6090
  var import_core3 = require("@cadenza.io/core");
5964
6091
  function registerActorSessionPersistenceTasks() {
@@ -6573,7 +6700,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
6573
6700
  }
6574
6701
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
6575
6702
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
6576
- const debugTable = shouldDebugSyncTable(tableName);
6577
6703
  if (!localInsertTask && !isCadenzaDBReady) {
6578
6704
  return void 0;
6579
6705
  }
@@ -6586,16 +6712,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6586
6712
  register: false,
6587
6713
  isHidden: true
6588
6714
  });
6589
- if (debugTable) {
6590
- logSyncDebug("insert_task_resolved", {
6591
- tableName,
6592
- localInsertTaskName: localInsertTask?.name ?? null,
6593
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
6594
- targetTaskName: targetTask.name,
6595
- queryData,
6596
- options
6597
- });
6598
- }
6599
6715
  const prepareExecutionTask = CadenzaService.createMetaTask(
6600
6716
  `Prepare graph sync insert for ${tableName}`,
6601
6717
  (ctx) => {
@@ -6606,12 +6722,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6606
6722
  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) {
6607
6723
  console.warn(
6608
6724
  "[CADENZA_SYNC_EMPTY_INSERT]",
6609
- summarizeSyncDebugValue({
6725
+ {
6610
6726
  tableName,
6611
6727
  queryData: originalQueryData,
6612
6728
  ctx,
6613
6729
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
6614
- })
6730
+ }
6615
6731
  );
6616
6732
  }
6617
6733
  return buildSyncExecutionEnvelope(
@@ -6625,37 +6741,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6625
6741
  isHidden: true
6626
6742
  }
6627
6743
  );
6628
- if (debugTable) {
6629
- prepareExecutionTask.then(
6630
- CadenzaService.createMetaTask(
6631
- `Log prepared graph sync insert execution for ${tableName}`,
6632
- (ctx) => {
6633
- if (tableName === "task") {
6634
- if (!shouldDebugTaskSyncPayload(ctx)) {
6635
- return ctx;
6636
- }
6637
- logSyncDebug("insert_prepare", {
6638
- tableName,
6639
- targetTaskName: targetTask.name,
6640
- payload: buildTaskSyncDebugPayload(ctx)
6641
- });
6642
- return ctx;
6643
- }
6644
- logSyncDebug("insert_prepare", {
6645
- tableName,
6646
- targetTaskName: targetTask.name,
6647
- ctx
6648
- });
6649
- return ctx;
6650
- },
6651
- `Logs prepared ${tableName} sync insert payloads.`,
6652
- {
6653
- register: false,
6654
- isHidden: true
6655
- }
6656
- )
6657
- );
6658
- }
6659
6744
  const finalizeExecutionTask = CadenzaService.createMetaTask(
6660
6745
  `Finalize graph sync insert for ${tableName}`,
6661
6746
  (ctx) => {
@@ -6666,25 +6751,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6666
6751
  ...ctx,
6667
6752
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
6668
6753
  };
6669
- if (debugTable) {
6670
- if (tableName === "task") {
6671
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
6672
- logSyncDebug("insert_finalize", {
6673
- tableName,
6674
- targetTaskName: targetTask.name,
6675
- success: didSyncInsertSucceed(normalizedContext),
6676
- payload: buildTaskSyncDebugPayload(normalizedContext)
6677
- });
6678
- }
6679
- } else {
6680
- logSyncDebug("insert_finalize", {
6681
- tableName,
6682
- targetTaskName: targetTask.name,
6683
- success: didSyncInsertSucceed(normalizedContext),
6684
- ctx: normalizedContext
6685
- });
6686
- }
6687
- }
6688
6754
  return normalizedContext;
6689
6755
  },
6690
6756
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -6719,139 +6785,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
6719
6785
  intent_registry: "intentRegistrys"
6720
6786
  };
6721
6787
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
6722
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
6723
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
6724
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
6725
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
6726
- "Query service_instance",
6727
- "Query service_instance_transport",
6728
- "Query intent_to_task_map",
6729
- "Query signal_to_task_map",
6730
- "Prepare for signal sync",
6731
- "Compile sync data and broadcast",
6732
- "Forward service instance sync",
6733
- "Forward service transport sync",
6734
- "Forward intent to task map sync",
6735
- "Forward signal to task map sync",
6736
- "Normalize telemetry ingest payload",
6737
- "Get telemetry session state",
6738
- "Normalize anomaly detect input",
6739
- "Read anomaly runtime session",
6740
- "Normalize prediction compute input",
6741
- "Normalize telemetry insert queryData"
6742
- ]);
6743
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
6744
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
6745
- "meta-service-registry-full-sync",
6746
- "runner-traffic-runtime-get",
6747
- "iot-telemetry-ingest",
6748
- "iot-telemetry-session-get",
6749
- "iot-anomaly-detect",
6750
- "iot-anomaly-runtime-get",
6751
- "iot-prediction-compute",
6752
- "iot-db-telemetry-insert",
6753
- "query-pg-cadenza-db-postgres-actor-service_instance",
6754
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
6755
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
6756
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
6757
- ]);
6758
- function shouldDebugSyncTable(tableName) {
6759
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
6760
- }
6761
- function shouldDebugSyncTaskName(taskName) {
6762
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
6763
- }
6764
- function shouldDebugSyncRoutineName(routineName) {
6765
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
6766
- }
6767
- function shouldDebugSyncIntentName(intentName) {
6768
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
6769
- }
6770
- function summarizeSyncDebugValue(value, depth = 0) {
6771
- if (value === null || value === void 0) {
6772
- return value;
6773
- }
6774
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
6775
- return value;
6776
- }
6777
- if (value instanceof Set) {
6778
- return {
6779
- __type: "Set",
6780
- size: value.size,
6781
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
6782
- };
6783
- }
6784
- if (value instanceof Map) {
6785
- return {
6786
- __type: "Map",
6787
- size: value.size
6788
- };
6789
- }
6790
- if (Array.isArray(value)) {
6791
- return {
6792
- __type: "Array",
6793
- length: value.length,
6794
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
6795
- };
6796
- }
6797
- if (typeof value === "object") {
6798
- if (depth >= 2) {
6799
- return "[object]";
6800
- }
6801
- const output = {};
6802
- const entries = Object.entries(value).filter(
6803
- ([key]) => ![
6804
- "functionString",
6805
- "tagIdGetter",
6806
- "__functionString",
6807
- "__getTagCallback",
6808
- "joinedContexts",
6809
- "task",
6810
- "taskInstance",
6811
- "tasks"
6812
- ].includes(key)
6813
- ).slice(0, 12);
6814
- for (const [key, nestedValue] of entries) {
6815
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
6816
- }
6817
- return output;
6818
- }
6819
- return String(value);
6820
- }
6821
- function logSyncDebug(event, payload) {
6822
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
6823
- }
6824
- function buildTaskSyncDebugPayload(ctx) {
6825
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
6826
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
6827
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
6828
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
6829
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
6830
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
6831
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
6832
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
6833
- return {
6834
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
6835
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
6836
- functionStringLength: functionString?.length ?? null,
6837
- tagIdGetterLength: tagIdGetter?.length ?? null,
6838
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
6839
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
6840
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
6841
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
6842
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
6843
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
6844
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
6845
- rowCount: ctx.rowCount ?? null,
6846
- errored: ctx.errored ?? false,
6847
- success: ctx.__success ?? null,
6848
- error: ctx.__error ?? null
6849
- };
6850
- }
6851
- function shouldDebugTaskSyncPayload(ctx) {
6852
- const payload = buildTaskSyncDebugPayload(ctx);
6853
- return shouldDebugSyncTaskName(payload.taskName);
6854
- }
6855
6788
  function resolveSyncQueryRows(ctx, tableName) {
6856
6789
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
6857
6790
  const rows = ctx?.[resultKey];
@@ -7298,16 +7231,6 @@ var GraphSyncController = class _GraphSyncController {
7298
7231
  if (!nextTask?.registered) {
7299
7232
  continue;
7300
7233
  }
7301
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
7302
- logSyncDebug("task_to_routine_split", {
7303
- routineName: routine.name,
7304
- routineVersion: routine.version,
7305
- taskName: nextTask.name,
7306
- taskVersion: nextTask.version,
7307
- serviceName: serviceName2,
7308
- registered: nextTask.registered
7309
- });
7310
- }
7311
7234
  yield {
7312
7235
  __syncing: ctx.__syncing,
7313
7236
  data: {
@@ -7453,20 +7376,6 @@ var GraphSyncController = class _GraphSyncController {
7453
7376
  if (task.registered) continue;
7454
7377
  const { __functionString, __getTagCallback } = task.export();
7455
7378
  this.tasksSynced = false;
7456
- if (shouldDebugSyncTaskName(task.name)) {
7457
- logSyncDebug("task_registration_split", {
7458
- taskName: task.name,
7459
- taskVersion: task.version,
7460
- serviceName: serviceName2,
7461
- register: task.register,
7462
- registered: task.registered,
7463
- hidden: task.hidden,
7464
- exportFunctionLength: __functionString?.length ?? null,
7465
- exportTagGetterLength: __getTagCallback?.length ?? null,
7466
- observedSignals: Array.from(task.observedSignals),
7467
- handledIntents: Array.from(task.handlesIntents)
7468
- });
7469
- }
7470
7379
  yield {
7471
7380
  __syncing: ctx.__syncing,
7472
7381
  data: {
@@ -7521,13 +7430,6 @@ var GraphSyncController = class _GraphSyncController {
7521
7430
  const registerTaskTask = CadenzaService.createMetaTask(
7522
7431
  "Record registration",
7523
7432
  (ctx, emit) => {
7524
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
7525
- logSyncDebug("task_registration_result", {
7526
- taskName: ctx.__taskName,
7527
- success: didSyncInsertSucceed(ctx),
7528
- ctx
7529
- });
7530
- }
7531
7433
  if (!didSyncInsertSucceed(ctx)) {
7532
7434
  return;
7533
7435
  }
@@ -7553,16 +7455,6 @@ var GraphSyncController = class _GraphSyncController {
7553
7455
  "Prepare created task for immediate sync",
7554
7456
  (ctx) => {
7555
7457
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
7556
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
7557
- logSyncDebug("task_created_for_immediate_sync", {
7558
- incomingTaskName: ctx?.data?.name ?? null,
7559
- resolvedTaskName: task?.name ?? null,
7560
- exists: Boolean(task),
7561
- hidden: task?.hidden ?? null,
7562
- register: task?.register ?? null,
7563
- registered: task?.registered ?? null
7564
- });
7565
- }
7566
7458
  if (!task || task.hidden || !task.register || task.registered) {
7567
7459
  return false;
7568
7460
  }
@@ -7749,17 +7641,6 @@ var GraphSyncController = class _GraphSyncController {
7749
7641
  if (!isGlobal) {
7750
7642
  continue;
7751
7643
  }
7752
- if (shouldDebugSyncTaskName(task.name)) {
7753
- logSyncDebug("signal_to_task_map_split", {
7754
- taskName: task.name,
7755
- signalName: _signal,
7756
- rawSignal: signal,
7757
- serviceName: serviceName2,
7758
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
7759
- _signal
7760
- )?.registered
7761
- });
7762
- }
7763
7644
  yield {
7764
7645
  __syncing: ctx.__syncing,
7765
7646
  data: {
@@ -7870,21 +7751,6 @@ var GraphSyncController = class _GraphSyncController {
7870
7751
  }
7871
7752
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
7872
7753
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
7873
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
7874
- if (shouldDebugTask) {
7875
- logSyncDebug("intent_map_task_state", {
7876
- taskName: task.name,
7877
- taskVersion: task.version,
7878
- serviceName: serviceName2,
7879
- registered: task.registered,
7880
- register: task.register,
7881
- hidden: task.hidden,
7882
- handledIntents: Array.from(task.handlesIntents),
7883
- registeredIntents: Array.from(task.__registeredIntents),
7884
- tasksSynced: this.tasksSynced,
7885
- intentsSynced: this.intentsSynced
7886
- });
7887
- }
7888
7754
  let emittedCount = 0;
7889
7755
  for (const intent of task.handlesIntents) {
7890
7756
  if (task.__registeredIntents.has(intent)) continue;
@@ -7910,15 +7776,6 @@ var GraphSyncController = class _GraphSyncController {
7910
7776
  if (!intentDefinition) {
7911
7777
  continue;
7912
7778
  }
7913
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
7914
- logSyncDebug("intent_to_task_map_split", {
7915
- taskName: task.name,
7916
- taskVersion: task.version,
7917
- intentName: intent,
7918
- serviceName: serviceName2,
7919
- intentDefinition
7920
- });
7921
- }
7922
7779
  yield {
7923
7780
  __syncing: ctx.__syncing,
7924
7781
  data: {
@@ -7939,15 +7796,6 @@ var GraphSyncController = class _GraphSyncController {
7939
7796
  };
7940
7797
  emittedCount += 1;
7941
7798
  }
7942
- if (shouldDebugTask && emittedCount === 0) {
7943
- logSyncDebug("intent_map_task_noop", {
7944
- taskName: task.name,
7945
- taskVersion: task.version,
7946
- serviceName: serviceName2,
7947
- handledIntents: Array.from(task.handlesIntents),
7948
- registeredIntents: Array.from(task.__registeredIntents)
7949
- });
7950
- }
7951
7799
  return emittedCount > 0;
7952
7800
  }.bind(this)
7953
7801
  );
@@ -7957,13 +7805,6 @@ var GraphSyncController = class _GraphSyncController {
7957
7805
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
7958
7806
  return false;
7959
7807
  }
7960
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7961
- logSyncDebug("intent_definition_prepare", {
7962
- taskName: ctx.__taskName,
7963
- intentName: ctx.__intent,
7964
- intentDefinition: ctx.__intentDefinition
7965
- });
7966
- }
7967
7808
  return {
7968
7809
  ...ctx,
7969
7810
  data: ctx.__intentDefinition
@@ -7976,13 +7817,6 @@ var GraphSyncController = class _GraphSyncController {
7976
7817
  if (!ctx.__intentMapData) {
7977
7818
  return false;
7978
7819
  }
7979
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7980
- logSyncDebug("intent_map_payload_restore", {
7981
- taskName: ctx.__taskName,
7982
- intentName: ctx.__intent,
7983
- intentMapData: ctx.__intentMapData
7984
- });
7985
- }
7986
7820
  return {
7987
7821
  ...ctx,
7988
7822
  data: ctx.__intentMapData
@@ -8804,6 +8638,13 @@ var CadenzaService = class {
8804
8638
  if (this.isBootstrapped) return;
8805
8639
  this.isBootstrapped = true;
8806
8640
  import_core5.default.bootstrap();
8641
+ import_core5.default.setRuntimeInquiryDelegate(
8642
+ (inquiry, context, options) => this.inquire(
8643
+ inquiry,
8644
+ context,
8645
+ options ?? {}
8646
+ )
8647
+ );
8807
8648
  this.signalBroker = import_core5.default.signalBroker;
8808
8649
  this.inquiryBroker = import_core5.default.inquiryBroker;
8809
8650
  this.runner = import_core5.default.runner;
@@ -8812,7 +8653,7 @@ var CadenzaService = class {
8812
8653
  this.serviceRegistry = ServiceRegistry.instance;
8813
8654
  RestController.instance;
8814
8655
  SocketController.instance;
8815
- console.log("BOOTSTRAPPED");
8656
+ RuntimeValidationController.instance;
8816
8657
  }
8817
8658
  static ensureTransportControllers(isFrontend) {
8818
8659
  if (!isFrontend) {
@@ -8951,6 +8792,38 @@ var CadenzaService = class {
8951
8792
  this.inquiryBroker?.addIntent(intent);
8952
8793
  return intent;
8953
8794
  }
8795
+ static getRuntimeValidationPolicy() {
8796
+ this.bootstrap();
8797
+ return import_core5.default.getRuntimeValidationPolicy();
8798
+ }
8799
+ static setRuntimeValidationPolicy(policy = {}) {
8800
+ this.bootstrap();
8801
+ return import_core5.default.setRuntimeValidationPolicy(policy);
8802
+ }
8803
+ static replaceRuntimeValidationPolicy(policy = {}) {
8804
+ this.bootstrap();
8805
+ return import_core5.default.replaceRuntimeValidationPolicy(policy);
8806
+ }
8807
+ static clearRuntimeValidationPolicy() {
8808
+ this.bootstrap();
8809
+ import_core5.default.clearRuntimeValidationPolicy();
8810
+ }
8811
+ static getRuntimeValidationScopes() {
8812
+ this.bootstrap();
8813
+ return import_core5.default.getRuntimeValidationScopes();
8814
+ }
8815
+ static upsertRuntimeValidationScope(scope) {
8816
+ this.bootstrap();
8817
+ return import_core5.default.upsertRuntimeValidationScope(scope);
8818
+ }
8819
+ static removeRuntimeValidationScope(id) {
8820
+ this.bootstrap();
8821
+ import_core5.default.removeRuntimeValidationScope(id);
8822
+ }
8823
+ static clearRuntimeValidationScopes() {
8824
+ this.bootstrap();
8825
+ import_core5.default.clearRuntimeValidationScopes();
8826
+ }
8954
8827
  static getInquiryResponderDescriptor(task) {
8955
8828
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
8956
8829
  }
@@ -9711,7 +9584,6 @@ var CadenzaService = class {
9711
9584
  }
9712
9585
  });
9713
9586
  });
9714
- console.log("Creating service...");
9715
9587
  const initContext = {
9716
9588
  data: {
9717
9589
  name: serviceName,
@@ -9744,18 +9616,13 @@ var CadenzaService = class {
9744
9616
  }).doOn("meta.fetch.handshake_complete");
9745
9617
  } else {
9746
9618
  this.emit("meta.create_service_requested", initContext);
9747
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
9748
- if (ctx.serviceName) {
9749
- console.log("[CADENZA_SYNC_DEBUG] create_sync_signal_transmission", {
9750
- localServiceName: serviceName,
9751
- localServiceInstanceId: serviceId,
9752
- targetServiceName: ctx.serviceName,
9753
- signalName: "global.meta.cadenza_db.gathered_sync_data"
9754
- });
9755
- }
9756
- this.createSignalTransmissionTask(
9757
- "global.meta.cadenza_db.gathered_sync_data",
9758
- ctx.serviceName
9619
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
9620
+ emit(
9621
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
9622
+ {
9623
+ serviceName: ctx.serviceName,
9624
+ __reason: "handshake"
9625
+ }
9759
9626
  );
9760
9627
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
9761
9628
  }