@cadenza.io/core 2.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -102,7 +102,7 @@ var SignalBroker = class _SignalBroker {
102
102
  return true;
103
103
  },
104
104
  "Executes queued signals and clears the stack"
105
- ).doOn("meta.process_signal_queue_requested").emitsAfter("meta.signal_broker.queue_empty");
105
+ ).doOn("meta.process_signal_queue_requested").emits("meta.signal_broker.queue_empty");
106
106
  this.getSignalsTask = Cadenza.createMetaTask("Get signals", (ctx) => {
107
107
  return {
108
108
  __signals: Array.from(this.signalObservers.keys()),
@@ -159,7 +159,7 @@ var SignalBroker = class _SignalBroker {
159
159
  execute(signal, context) {
160
160
  var _a, _b, _c;
161
161
  const isMeta = signal.startsWith("meta.");
162
- const isSubMeta = signal.startsWith("sub_meta.");
162
+ const isSubMeta = signal.startsWith("sub_meta.") || context.__isSubMeta;
163
163
  const isMetric = (_a = context.__signalEmission) == null ? void 0 : _a.isMetric;
164
164
  if (!isSubMeta && (!isMeta || this.debug)) {
165
165
  const emittedAt = Date.now();
@@ -177,9 +177,9 @@ var SignalBroker = class _SignalBroker {
177
177
  } else {
178
178
  delete context.__signalEmission;
179
179
  }
180
- if (this.debug && (!isMetric || this.verbose)) {
180
+ if (this.debug && (!isMetric && !isSubMeta || this.verbose)) {
181
181
  console.log(
182
- `EMITTING signal ${signal} to listeners ${(_c = (_b = this.signalObservers.get(signal)) == null ? void 0 : _b.tasks.size) != null ? _c : 0} with context ${JSON.stringify(context)}`
182
+ `EMITTING ${signal} to listeners ${(_c = (_b = this.signalObservers.get(signal)) == null ? void 0 : _b.tasks.size) != null ? _c : 0} with context ${this.verbose ? JSON.stringify(context) : JSON.stringify(context).slice(0, 100)}`
183
183
  );
184
184
  }
185
185
  let executed;
@@ -327,10 +327,10 @@ var VueFlowExportVisitor = class {
327
327
  }
328
328
  visitNode(node) {
329
329
  const snapshot = node.export();
330
- if (!this.contextToColor[snapshot.__context.__id]) {
331
- this.contextToColor[snapshot.__context.__id] = this.colorRandomizer.getRandomColor();
330
+ if (!this.contextToColor[snapshot.__context.id]) {
331
+ this.contextToColor[snapshot.__context.id] = this.colorRandomizer.getRandomColor();
332
332
  }
333
- const color = this.contextToColor[snapshot.__context.__id];
333
+ const color = this.contextToColor[snapshot.__context.id];
334
334
  this.elements.push({
335
335
  id: snapshot.__id.slice(0, 8),
336
336
  label: snapshot.__task.__name,
@@ -347,7 +347,7 @@ var VueFlowExportVisitor = class {
347
347
  executionEnd: snapshot.__executionEnd,
348
348
  description: snapshot.__task.__description,
349
349
  functionString: snapshot.__task.__functionString,
350
- context: snapshot.__context.__context,
350
+ context: snapshot.__context.context,
351
351
  layerIndex: snapshot.__task.__layerIndex
352
352
  }
353
353
  });
@@ -581,8 +581,8 @@ var GraphContext = class _GraphContext {
581
581
  */
582
582
  export() {
583
583
  return {
584
- __id: this.id,
585
- __context: this.getFullContext()
584
+ id: this.id,
585
+ context: this.getFullContext()
586
586
  };
587
587
  }
588
588
  };
@@ -730,7 +730,7 @@ var GraphNode = class _GraphNode extends SignalEmitter {
730
730
  return this.task.getTag(this.context);
731
731
  }
732
732
  scheduleOn(layer) {
733
- var _a;
733
+ var _a, _b, _c;
734
734
  let shouldSchedule = true;
735
735
  const nodes = layer.getNodesByRoutineExecId(this.routineExecId);
736
736
  for (const node of nodes) {
@@ -753,7 +753,7 @@ var GraphNode = class _GraphNode extends SignalEmitter {
753
753
  data: {
754
754
  uuid: this.id,
755
755
  routineExecutionId: this.routineExecId,
756
- contractId: context.__contractId,
756
+ executionTraceId: (_b = context.__executionTraceId) != null ? _b : (_a = context.__metadata) == null ? void 0 : _a.__executionTraceId,
757
757
  context: this.context.export(),
758
758
  taskName: this.task.name,
759
759
  taskVersion: this.task.version,
@@ -778,7 +778,7 @@ var GraphNode = class _GraphNode extends SignalEmitter {
778
778
  }
779
779
  });
780
780
  });
781
- if (((_a = context.__signalEmission) == null ? void 0 : _a.consumed) === false && (!this.isMeta() || this.debug)) {
781
+ if (((_c = context.__signalEmission) == null ? void 0 : _c.consumed) === false && (!this.isMeta() || this.debug)) {
782
782
  this.emitMetricsWithMetadata("meta.node.consumed_signal", {
783
783
  data: {
784
784
  signalName: context.__signalEmission.signalName,
@@ -1300,139 +1300,21 @@ var GraphNode = class _GraphNode extends SignalEmitter {
1300
1300
  }
1301
1301
  };
1302
1302
 
1303
- // src/interfaces/SignalParticipant.ts
1304
- var SignalParticipant = class extends SignalEmitter {
1305
- constructor() {
1306
- super(...arguments);
1307
- this.emitsSignals = /* @__PURE__ */ new Set();
1308
- this.signalsToEmitAfter = /* @__PURE__ */ new Set();
1309
- this.signalsToEmitOnFail = /* @__PURE__ */ new Set();
1310
- this.observedSignals = /* @__PURE__ */ new Set();
1311
- }
1312
- /**
1313
- * Subscribes to signals (chainable).
1314
- * @param signals The signal names.
1315
- * @returns This for chaining.
1316
- * @edge Duplicates ignored; assumes broker.observe binds this as handler.
1317
- */
1318
- doOn(...signals) {
1319
- signals.forEach((signal) => {
1320
- if (this.observedSignals.has(signal)) return;
1321
- Cadenza.broker.observe(signal, this);
1322
- this.observedSignals.add(signal);
1323
- });
1324
- return this;
1325
- }
1326
- /**
1327
- * Sets signals to emit post-execution (chainable).
1328
- * @param signals The signal names.
1329
- * @returns This for chaining.
1330
- */
1331
- emitsAfter(...signals) {
1332
- signals.forEach((signal) => {
1333
- this.signalsToEmitAfter.add(signal);
1334
- this.emitsSignals.add(signal);
1335
- });
1336
- return this;
1337
- }
1338
- emitsOnFail(...signals) {
1339
- signals.forEach((signal) => {
1340
- this.signalsToEmitOnFail.add(signal);
1341
- this.emitsSignals.add(signal);
1342
- });
1343
- return this;
1344
- }
1345
- /**
1346
- * Unsubscribes from all observed signals.
1347
- * @returns This for chaining.
1348
- */
1349
- unsubscribeAll() {
1350
- this.observedSignals.forEach(
1351
- (signal) => Cadenza.broker.unsubscribe(signal, this)
1352
- );
1353
- this.observedSignals.clear();
1354
- return this;
1355
- }
1356
- /**
1357
- * Unsubscribes from specific signals.
1358
- * @param signals The signals.
1359
- * @returns This for chaining.
1360
- * @edge No-op if not subscribed.
1361
- */
1362
- unsubscribe(...signals) {
1363
- signals.forEach((signal) => {
1364
- if (this.observedSignals.has(signal)) {
1365
- Cadenza.broker.unsubscribe(signal, this);
1366
- this.observedSignals.delete(signal);
1367
- }
1368
- });
1369
- return this;
1370
- }
1371
- /**
1372
- * Detaches specific emitted signals.
1373
- * @param signals The signals.
1374
- * @returns This for chaining.
1375
- */
1376
- detachSignals(...signals) {
1377
- signals.forEach((signal) => this.signalsToEmitAfter.delete(signal));
1378
- return this;
1379
- }
1380
- /**
1381
- * Detaches all emitted signals.
1382
- * @returns This for chaining.
1383
- */
1384
- detachAllSignals() {
1385
- this.signalsToEmitAfter.clear();
1386
- return this;
1387
- }
1388
- mapSignals(callback) {
1389
- return Array.from(this.signalsToEmitAfter).map(callback);
1390
- }
1391
- mapOnFailSignals(callback) {
1392
- return Array.from(this.signalsToEmitOnFail).map(callback);
1393
- }
1394
- /**
1395
- * Emits attached signals.
1396
- * @param context The context for emission.
1397
- * @edge If isMeta (from Task), suppresses further "meta.*" to prevent loops.
1398
- */
1399
- emitSignals(context) {
1400
- this.signalsToEmitAfter.forEach((signal) => {
1401
- this.emit(signal, context.getFullContext());
1402
- });
1403
- }
1404
- /**
1405
- * Emits attached fail signals.
1406
- * @param context The context for emission.
1407
- * @edge If isMeta (from Task), suppresses further "meta.*" to prevent loops.
1408
- */
1409
- emitOnFailSignals(context) {
1410
- this.signalsToEmitOnFail.forEach((signal) => {
1411
- this.emit(signal, context.getFullContext());
1412
- });
1413
- }
1414
- /**
1415
- * Destroys the participant (unsub/detach).
1416
- */
1417
- destroy() {
1418
- this.unsubscribeAll();
1419
- this.detachAllSignals();
1420
- }
1421
- };
1422
-
1423
1303
  // src/graph/definition/GraphRoutine.ts
1424
- var GraphRoutine = class extends SignalParticipant {
1304
+ var GraphRoutine = class extends SignalEmitter {
1425
1305
  constructor(name, tasks, description, isMeta = false) {
1426
1306
  super();
1427
1307
  this.version = 1;
1428
1308
  this.isMeta = false;
1429
1309
  this.tasks = /* @__PURE__ */ new Set();
1310
+ this.observedSignals = /* @__PURE__ */ new Set();
1430
1311
  this.name = name;
1431
1312
  this.description = description;
1432
1313
  this.isMeta = isMeta;
1433
1314
  this.emit("meta.routine.created", {
1434
1315
  data: {
1435
1316
  name: this.name,
1317
+ version: this.version,
1436
1318
  description: this.description,
1437
1319
  isMeta: this.isMeta
1438
1320
  },
@@ -1471,11 +1353,51 @@ var GraphRoutine = class extends SignalParticipant {
1471
1353
  this.version = version;
1472
1354
  this.emit("meta.routine.global_version_set", { version: this.version });
1473
1355
  }
1474
- // Removed emitsSignals per clarification (routines as listeners only)
1356
+ /**
1357
+ * Subscribes to signals (chainable).
1358
+ * @param signals The signal names.
1359
+ * @returns This for chaining.
1360
+ * @edge Duplicates ignored; assumes broker.observe binds this as handler.
1361
+ */
1362
+ doOn(...signals) {
1363
+ signals.forEach((signal) => {
1364
+ if (this.observedSignals.has(signal)) return;
1365
+ Cadenza.broker.observe(signal, this);
1366
+ this.observedSignals.add(signal);
1367
+ });
1368
+ return this;
1369
+ }
1370
+ /**
1371
+ * Unsubscribes from all observed signals.
1372
+ * @returns This for chaining.
1373
+ */
1374
+ unsubscribeAll() {
1375
+ this.observedSignals.forEach(
1376
+ (signal) => Cadenza.broker.unsubscribe(signal, this)
1377
+ );
1378
+ this.observedSignals.clear();
1379
+ return this;
1380
+ }
1381
+ /**
1382
+ * Unsubscribes from specific signals.
1383
+ * @param signals The signals.
1384
+ * @returns This for chaining.
1385
+ * @edge No-op if not subscribed.
1386
+ */
1387
+ unsubscribe(...signals) {
1388
+ signals.forEach((signal) => {
1389
+ if (this.observedSignals.has(signal)) {
1390
+ Cadenza.broker.unsubscribe(signal, this);
1391
+ this.observedSignals.delete(signal);
1392
+ }
1393
+ });
1394
+ return this;
1395
+ }
1475
1396
  /**
1476
1397
  * Destroys the routine.
1477
1398
  */
1478
1399
  destroy() {
1400
+ this.unsubscribeAll();
1479
1401
  this.tasks.clear();
1480
1402
  this.emit("meta.routine.destroyed", {
1481
1403
  data: { deleted: true },
@@ -1516,7 +1438,7 @@ var TaskIterator = class {
1516
1438
  };
1517
1439
 
1518
1440
  // src/graph/definition/Task.ts
1519
- var Task = class extends SignalParticipant {
1441
+ var Task = class extends SignalEmitter {
1520
1442
  /**
1521
1443
  * Constructs a Task (static definition).
1522
1444
  * @param name Name.
@@ -1566,6 +1488,10 @@ var Task = class extends SignalParticipant {
1566
1488
  this.onFailTasks = /* @__PURE__ */ new Set();
1567
1489
  this.predecessorTasks = /* @__PURE__ */ new Set();
1568
1490
  this.destroyed = false;
1491
+ this.emitsSignals = /* @__PURE__ */ new Set();
1492
+ this.signalsToEmitAfter = /* @__PURE__ */ new Set();
1493
+ this.signalsToEmitOnFail = /* @__PURE__ */ new Set();
1494
+ this.observedSignals = /* @__PURE__ */ new Set();
1569
1495
  this.name = name;
1570
1496
  this.taskFunction = task.bind(this);
1571
1497
  this.description = description;
@@ -1590,8 +1516,9 @@ var Task = class extends SignalParticipant {
1590
1516
  if (register && !this.isHidden && !this.isSubMeta) {
1591
1517
  const { __functionString, __getTagCallback } = this.export();
1592
1518
  this.emitWithMetadata("meta.task.created", {
1593
- __task: {
1519
+ data: {
1594
1520
  name: this.name,
1521
+ version: this.version,
1595
1522
  description: this.description,
1596
1523
  functionString: __functionString,
1597
1524
  tagIdGetter: __getTagCallback,
@@ -1610,8 +1537,8 @@ var Task = class extends SignalParticipant {
1610
1537
  isMeta: this.isMeta,
1611
1538
  validateInputContext: this.validateInputContext,
1612
1539
  validateOutputContext: this.validateOutputContext,
1613
- inputContextSchemaId: this.inputContextSchema,
1614
- outputContextSchemaId: this.outputContextSchema
1540
+ inputContextSchema: this.inputContextSchema,
1541
+ outputContextSchema: this.outputContextSchema
1615
1542
  },
1616
1543
  __taskInstance: this
1617
1544
  });
@@ -1964,8 +1891,165 @@ var Task = class extends SignalParticipant {
1964
1891
  mapPrevious(callback) {
1965
1892
  return Array.from(this.predecessorTasks).map(callback);
1966
1893
  }
1894
+ /**
1895
+ * Subscribes to signals (chainable).
1896
+ * @param signals The signal names.
1897
+ * @returns This for chaining.
1898
+ * @edge Duplicates ignored; assumes broker.observe binds this as handler.
1899
+ */
1900
+ doOn(...signals) {
1901
+ signals.forEach((signal) => {
1902
+ if (this.observedSignals.has(signal)) return;
1903
+ Cadenza.broker.observe(signal, this);
1904
+ this.observedSignals.add(signal);
1905
+ this.emitWithMetadata("meta.task.observed_signal", {
1906
+ data: {
1907
+ signalName: signal,
1908
+ taskName: this.name,
1909
+ taskVersion: this.version
1910
+ }
1911
+ });
1912
+ });
1913
+ return this;
1914
+ }
1915
+ /**
1916
+ * Sets signals to emit post-execution (chainable).
1917
+ * @param signals The signal names.
1918
+ * @returns This for chaining.
1919
+ */
1920
+ emits(...signals) {
1921
+ signals.forEach((signal) => {
1922
+ this.signalsToEmitAfter.add(signal);
1923
+ this.emitsSignals.add(signal);
1924
+ this.emitWithMetadata("meta.task.attached_signal", {
1925
+ data: {
1926
+ signalName: signal,
1927
+ taskName: this.name,
1928
+ taskVersion: this.version
1929
+ }
1930
+ });
1931
+ });
1932
+ return this;
1933
+ }
1934
+ emitsOnFail(...signals) {
1935
+ signals.forEach((signal) => {
1936
+ this.signalsToEmitOnFail.add(signal);
1937
+ this.emitsSignals.add(signal);
1938
+ this.emitWithMetadata("meta.task.attached_signal", {
1939
+ data: {
1940
+ signalName: signal,
1941
+ taskName: this.name,
1942
+ taskVersion: this.version,
1943
+ isOnFail: true
1944
+ }
1945
+ });
1946
+ });
1947
+ return this;
1948
+ }
1949
+ /**
1950
+ * Unsubscribes from all observed signals.
1951
+ * @returns This for chaining.
1952
+ */
1953
+ unsubscribeAll() {
1954
+ this.observedSignals.forEach((signal) => {
1955
+ Cadenza.broker.unsubscribe(signal, this);
1956
+ this.emitWithMetadata("meta.task.unsubscribed_signal", {
1957
+ filter: {
1958
+ signalName: signal,
1959
+ taskName: this.name,
1960
+ taskVersion: this.version
1961
+ }
1962
+ });
1963
+ });
1964
+ this.observedSignals.clear();
1965
+ return this;
1966
+ }
1967
+ /**
1968
+ * Unsubscribes from specific signals.
1969
+ * @param signals The signals.
1970
+ * @returns This for chaining.
1971
+ * @edge No-op if not subscribed.
1972
+ */
1973
+ unsubscribe(...signals) {
1974
+ signals.forEach((signal) => {
1975
+ if (this.observedSignals.has(signal)) {
1976
+ Cadenza.broker.unsubscribe(signal, this);
1977
+ this.observedSignals.delete(signal);
1978
+ this.emitWithMetadata("meta.task.unsubscribed_signal", {
1979
+ filter: {
1980
+ signalName: signal,
1981
+ taskName: this.name,
1982
+ taskVersion: this.version
1983
+ }
1984
+ });
1985
+ }
1986
+ });
1987
+ return this;
1988
+ }
1989
+ /**
1990
+ * Detaches specific emitted signals.
1991
+ * @param signals The signals.
1992
+ * @returns This for chaining.
1993
+ */
1994
+ detachSignals(...signals) {
1995
+ signals.forEach((signal) => {
1996
+ this.signalsToEmitAfter.delete(signal);
1997
+ this.emitWithMetadata("meta.task.detached_signal", {
1998
+ filter: {
1999
+ signalName: signal,
2000
+ taskName: this.name,
2001
+ taskVersion: this.version
2002
+ }
2003
+ });
2004
+ });
2005
+ return this;
2006
+ }
2007
+ /**
2008
+ * Detaches all emitted signals.
2009
+ * @returns This for chaining.
2010
+ */
2011
+ detachAllSignals() {
2012
+ this.signalsToEmitAfter.forEach((signal) => {
2013
+ this.emitWithMetadata("meta.task.detached_signal", {
2014
+ filter: {
2015
+ signalName: signal,
2016
+ taskName: this.name,
2017
+ taskVersion: this.version
2018
+ }
2019
+ });
2020
+ });
2021
+ this.signalsToEmitAfter.clear();
2022
+ return this;
2023
+ }
2024
+ mapSignals(callback) {
2025
+ return Array.from(this.signalsToEmitAfter).map(callback);
2026
+ }
2027
+ mapOnFailSignals(callback) {
2028
+ return Array.from(this.signalsToEmitOnFail).map(callback);
2029
+ }
2030
+ /**
2031
+ * Emits attached signals.
2032
+ * @param context The context for emission.
2033
+ * @edge If isMeta (from Task), suppresses further "meta.*" to prevent loops.
2034
+ */
2035
+ emitSignals(context) {
2036
+ this.signalsToEmitAfter.forEach((signal) => {
2037
+ this.emit(signal, context.getFullContext());
2038
+ });
2039
+ }
2040
+ /**
2041
+ * Emits attached fail signals.
2042
+ * @param context The context for emission.
2043
+ * @edge If isMeta (from Task), suppresses further "meta.*" to prevent loops.
2044
+ */
2045
+ emitOnFailSignals(context) {
2046
+ this.signalsToEmitOnFail.forEach((signal) => {
2047
+ this.emit(signal, context.getFullContext());
2048
+ });
2049
+ }
1967
2050
  destroy() {
1968
- super.destroy();
2051
+ this.unsubscribeAll();
2052
+ this.detachAllSignals();
1969
2053
  this.predecessorTasks.forEach((pred) => pred.nextTasks.delete(this));
1970
2054
  this.nextTasks.forEach((next) => next.predecessorTasks.delete(this));
1971
2055
  this.onFailTasks.forEach((fail) => fail.predecessorTasks.delete(this));
@@ -2036,7 +2120,7 @@ var GraphRegistry = class _GraphRegistry {
2036
2120
  true,
2037
2121
  false,
2038
2122
  true
2039
- ).doOn("meta.task.created");
2123
+ ).doOn("meta.task.created").emits("meta.graph_registry.task_registered");
2040
2124
  this.tasks.set(this.registerTask.name, this.registerTask);
2041
2125
  this.updateTaskInputSchema = Cadenza.createMetaTask(
2042
2126
  "Update task input schema",
@@ -2209,7 +2293,7 @@ var GraphRunner = class extends SignalEmitter {
2209
2293
  * @edge Empty tasks warns no-op.
2210
2294
  */
2211
2295
  addTasks(tasks, context = {}) {
2212
- var _a, _b, _c, _d, _e, _f;
2296
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
2213
2297
  let _tasks = Array.isArray(tasks) ? tasks : [tasks];
2214
2298
  if (_tasks.length === 0) {
2215
2299
  console.warn("No tasks/routines to add.");
@@ -2232,18 +2316,35 @@ var GraphRunner = class extends SignalEmitter {
2232
2316
  const isSubMeta = allTasks.some((t) => t.isSubMeta) || !!context.__isSubMeta;
2233
2317
  context.__isSubMeta = isSubMeta;
2234
2318
  const ctx = new GraphContext(context || {});
2319
+ const isNewTrace = !!context.__routineExecId;
2235
2320
  const routineExecId = (_a = context.__routineExecId) != null ? _a : uuid4();
2236
2321
  context.__routineExecId = routineExecId;
2237
2322
  if (!isSubMeta) {
2323
+ const executionTraceId = (_d = (_c = (_b = context.__metadata) == null ? void 0 : _b.__executionTraceId) != null ? _c : context.__executionTraceId) != null ? _d : uuid4();
2324
+ const contextData = ctx.export();
2325
+ if (isNewTrace) {
2326
+ this.emitMetrics("meta.runner.new_trace", {
2327
+ data: {
2328
+ uuid: executionTraceId,
2329
+ issuer_type: "service",
2330
+ // TODO: Add issuer type
2331
+ issuer_id: (_g = (_f = (_e = context.__metadata) == null ? void 0 : _e.__issuerId) != null ? _f : context.__issuerId) != null ? _g : null,
2332
+ issued_at: formatTimestamp(Date.now()),
2333
+ intent: (_j = (_i = (_h = context.__metadata) == null ? void 0 : _h.__intent) != null ? _i : context.__intent) != null ? _j : null,
2334
+ context: contextData,
2335
+ is_meta: isMeta
2336
+ }
2337
+ });
2338
+ }
2238
2339
  this.emitMetrics("meta.runner.added_tasks", {
2239
2340
  data: {
2240
2341
  uuid: routineExecId,
2241
2342
  name: routineName,
2242
2343
  routineVersion,
2243
2344
  isMeta,
2244
- contractId: (_d = (_c = (_b = context.__metadata) == null ? void 0 : _b.__contractId) != null ? _c : context.__contractId) != null ? _d : null,
2245
- context: ctx.export(),
2246
- previousRoutineExecution: (_f = (_e = context.__metadata) == null ? void 0 : _e.__routineExecId) != null ? _f : null,
2345
+ executionTraceId,
2346
+ context: isNewTrace ? contextData.id : contextData,
2347
+ previousRoutineExecution: (_l = (_k = context.__metadata) == null ? void 0 : _k.__routineExecId) != null ? _l : null,
2247
2348
  // TODO: There is a chance this is not added to the database yet...
2248
2349
  created: formatTimestamp(Date.now())
2249
2350
  }
@@ -3381,7 +3482,6 @@ export {
3381
3482
  GraphRunner,
3382
3483
  SignalBroker,
3383
3484
  SignalEmitter,
3384
- SignalParticipant,
3385
3485
  SignalTask,
3386
3486
  Task,
3387
3487
  index_default as default