@nodetool-ai/node-sdk 0.7.0-rc.23 → 0.8.2

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.
Files changed (158) hide show
  1. package/README.md +34 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/base-node.d.ts +285 -14
  4. package/dist/base-node.d.ts.map +1 -1
  5. package/dist/base-node.js +359 -49
  6. package/dist/base-node.js.map +1 -1
  7. package/dist/class-name-to-title.d.ts +26 -0
  8. package/dist/class-name-to-title.d.ts.map +1 -0
  9. package/dist/class-name-to-title.js +59 -0
  10. package/dist/class-name-to-title.js.map +1 -0
  11. package/dist/code-analysis.d.ts +234 -0
  12. package/dist/code-analysis.d.ts.map +1 -0
  13. package/dist/code-analysis.js +919 -0
  14. package/dist/code-analysis.js.map +1 -0
  15. package/dist/code-body.d.ts +61 -0
  16. package/dist/code-body.d.ts.map +1 -0
  17. package/dist/code-body.js +288 -0
  18. package/dist/code-body.js.map +1 -0
  19. package/dist/code-node-validation.d.ts +67 -0
  20. package/dist/code-node-validation.d.ts.map +1 -0
  21. package/dist/code-node-validation.js +540 -0
  22. package/dist/code-node-validation.js.map +1 -0
  23. package/dist/content-card.d.ts +30 -0
  24. package/dist/content-card.d.ts.map +1 -0
  25. package/dist/content-card.js +68 -0
  26. package/dist/content-card.js.map +1 -0
  27. package/dist/correlation-validation.d.ts +19 -0
  28. package/dist/correlation-validation.d.ts.map +1 -0
  29. package/dist/correlation-validation.js +101 -0
  30. package/dist/correlation-validation.js.map +1 -0
  31. package/dist/cost-estimate.d.ts +244 -0
  32. package/dist/cost-estimate.d.ts.map +1 -0
  33. package/dist/cost-estimate.js +637 -0
  34. package/dist/cost-estimate.js.map +1 -0
  35. package/dist/decorators.d.ts.map +1 -1
  36. package/dist/decorators.js +4 -1
  37. package/dist/decorators.js.map +1 -1
  38. package/dist/docs/nodes.d.ts.map +1 -1
  39. package/dist/docs/nodes.js +3 -2
  40. package/dist/docs/nodes.js.map +1 -1
  41. package/dist/docs/overview.d.ts.map +1 -1
  42. package/dist/docs/overview.js +4 -3
  43. package/dist/docs/overview.js.map +1 -1
  44. package/dist/docs/workflows.d.ts.map +1 -1
  45. package/dist/docs/workflows.js +10 -9
  46. package/dist/docs/workflows.js.map +1 -1
  47. package/dist/field-classification.d.ts +31 -0
  48. package/dist/field-classification.d.ts.map +1 -0
  49. package/dist/field-classification.js +58 -0
  50. package/dist/field-classification.js.map +1 -0
  51. package/dist/graph-validation.d.ts +239 -0
  52. package/dist/graph-validation.d.ts.map +1 -0
  53. package/dist/graph-validation.js +1174 -0
  54. package/dist/graph-validation.js.map +1 -0
  55. package/dist/index.d.ts +27 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +29 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/js-script-link.d.ts +53 -0
  60. package/dist/js-script-link.d.ts.map +1 -0
  61. package/dist/js-script-link.js +58 -0
  62. package/dist/js-script-link.js.map +1 -0
  63. package/dist/js-script-materialize.d.ts +52 -0
  64. package/dist/js-script-materialize.d.ts.map +1 -0
  65. package/dist/js-script-materialize.js +24 -0
  66. package/dist/js-script-materialize.js.map +1 -0
  67. package/dist/manifest-node-values.d.ts +106 -0
  68. package/dist/manifest-node-values.d.ts.map +1 -0
  69. package/dist/manifest-node-values.js +195 -0
  70. package/dist/manifest-node-values.js.map +1 -0
  71. package/dist/metadata.d.ts +75 -3
  72. package/dist/metadata.d.ts.map +1 -1
  73. package/dist/metadata.js +132 -49
  74. package/dist/metadata.js.map +1 -1
  75. package/dist/node-metadata.d.ts.map +1 -1
  76. package/dist/node-metadata.js +61 -56
  77. package/dist/node-metadata.js.map +1 -1
  78. package/dist/node-type-inventory.d.ts +51 -0
  79. package/dist/node-type-inventory.d.ts.map +1 -0
  80. package/dist/node-type-inventory.js +121 -0
  81. package/dist/node-type-inventory.js.map +1 -0
  82. package/dist/nodes/test-nodes.d.ts +77 -30
  83. package/dist/nodes/test-nodes.d.ts.map +1 -1
  84. package/dist/nodes/test-nodes.js +2 -34
  85. package/dist/nodes/test-nodes.js.map +1 -1
  86. package/dist/pack-loader.d.ts +202 -0
  87. package/dist/pack-loader.d.ts.map +1 -0
  88. package/dist/pack-loader.js +529 -0
  89. package/dist/pack-loader.js.map +1 -0
  90. package/dist/port-types.d.ts +15 -0
  91. package/dist/port-types.d.ts.map +1 -0
  92. package/dist/port-types.js +72 -0
  93. package/dist/port-types.js.map +1 -0
  94. package/dist/pricing-bundle.d.ts +83 -0
  95. package/dist/pricing-bundle.d.ts.map +1 -0
  96. package/dist/pricing-bundle.js +82 -0
  97. package/dist/pricing-bundle.js.map +1 -0
  98. package/dist/pricing-params.d.ts +59 -0
  99. package/dist/pricing-params.d.ts.map +1 -0
  100. package/dist/pricing-params.js +282 -0
  101. package/dist/pricing-params.js.map +1 -0
  102. package/dist/python-package-scan.d.ts +8 -0
  103. package/dist/python-package-scan.d.ts.map +1 -1
  104. package/dist/python-package-scan.js +21 -8
  105. package/dist/python-package-scan.js.map +1 -1
  106. package/dist/registry.d.ts +105 -2
  107. package/dist/registry.d.ts.map +1 -1
  108. package/dist/registry.js +403 -30
  109. package/dist/registry.js.map +1 -1
  110. package/dist/sandbox-bridge-packs.d.ts +39 -0
  111. package/dist/sandbox-bridge-packs.d.ts.map +1 -0
  112. package/dist/sandbox-bridge-packs.js +249 -0
  113. package/dist/sandbox-bridge-packs.js.map +1 -0
  114. package/dist/sandbox-catalog-host.d.ts +31 -0
  115. package/dist/sandbox-catalog-host.d.ts.map +1 -0
  116. package/dist/sandbox-catalog-host.js +78 -0
  117. package/dist/sandbox-catalog-host.js.map +1 -0
  118. package/dist/sandbox-module-catalog.d.ts +14 -0
  119. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  120. package/dist/sandbox-module-catalog.js +402 -0
  121. package/dist/sandbox-module-catalog.js.map +1 -0
  122. package/dist/sandbox-npm-artifacts.d.ts +56 -0
  123. package/dist/sandbox-npm-artifacts.d.ts.map +1 -0
  124. package/dist/sandbox-npm-artifacts.js +17 -0
  125. package/dist/sandbox-npm-artifacts.js.map +1 -0
  126. package/dist/sandbox-pack-discovery.d.ts +93 -0
  127. package/dist/sandbox-pack-discovery.d.ts.map +1 -0
  128. package/dist/sandbox-pack-discovery.js +807 -0
  129. package/dist/sandbox-pack-discovery.js.map +1 -0
  130. package/dist/search.d.ts +29 -1
  131. package/dist/search.d.ts.map +1 -1
  132. package/dist/search.js +136 -9
  133. package/dist/search.js.map +1 -1
  134. package/dist/type-compat.d.ts +36 -0
  135. package/dist/type-compat.d.ts.map +1 -0
  136. package/dist/type-compat.js +98 -0
  137. package/dist/type-compat.js.map +1 -0
  138. package/dist/type-predicates.d.ts +25 -0
  139. package/dist/type-predicates.d.ts.map +1 -0
  140. package/dist/type-predicates.js +31 -0
  141. package/dist/type-predicates.js.map +1 -0
  142. package/dist/validation.d.ts +18 -0
  143. package/dist/validation.d.ts.map +1 -1
  144. package/dist/validation.js +70 -11
  145. package/dist/validation.js.map +1 -1
  146. package/dist/workflow-document-tools.d.ts +35 -0
  147. package/dist/workflow-document-tools.d.ts.map +1 -0
  148. package/dist/workflow-document-tools.js +402 -0
  149. package/dist/workflow-document-tools.js.map +1 -0
  150. package/dist/workflow-interface.d.ts +62 -0
  151. package/dist/workflow-interface.d.ts.map +1 -0
  152. package/dist/workflow-interface.js +351 -0
  153. package/dist/workflow-interface.js.map +1 -0
  154. package/package.json +67 -10
  155. package/dist/package-registry-client.d.ts +0 -12
  156. package/dist/package-registry-client.d.ts.map +0 -1
  157. package/dist/package-registry-client.js +0 -40
  158. package/dist/package-registry-client.js.map +0 -1
package/dist/registry.js CHANGED
@@ -1,15 +1,34 @@
1
+ import { supportsPlatform } from "@nodetool-ai/protocol";
2
+ import { mergeDerivedSlots } from "@nodetool-ai/kernel";
3
+ import { hasStreamingOutput } from "./base-node.js";
1
4
  import { loadPythonPackageMetadata } from "./metadata.js";
2
5
  import { getNodeMetadata } from "./node-metadata.js";
6
+ import { NodeSearchIndex } from "./search.js";
3
7
  export class NodeRegistry {
4
8
  _classes = new Map();
5
9
  _loadedMetadataByType = new Map();
6
10
  _registeredMetadataByType = new Map();
11
+ _loadedMetadataSourceByType = new Map();
12
+ _registeredMetadataSourceByType = new Map();
13
+ _loadedPackageIdByType = new Map();
14
+ _registeredPackageIdByType = new Map();
15
+ _activePackageId;
7
16
  _strictMetadata;
17
+ _revision = 0;
18
+ // Memoized derived views of the metadata maps above. Both are O(n) to build,
19
+ // and `listMetadata`/`searchMetadata` are called many times per graph build
20
+ // (the planner searches the same registry 5–10× per attempt). They are
21
+ // rebuilt lazily and invalidated by every mutation (`register`, `unregister`,
22
+ // `clear`, `loadMetadata`, `loadPythonMetadata`).
23
+ _mergedMetadataCache = null;
24
+ _searchIndexCache = null;
8
25
  constructor(options = {}) {
26
+ // Stryker disable next-line LogicalOperator,BooleanLiteral: _strictMetadata only gated the (unreachable) strict-throw branch, so its value has no observable effect — the default is inert (equivalent).
9
27
  this._strictMetadata = options.strictMetadata ?? false;
10
28
  if (options.metadataByType) {
11
29
  for (const [nodeType, metadata] of options.metadataByType.entries()) {
12
30
  this._loadedMetadataByType.set(nodeType, metadata);
31
+ this._loadedMetadataSourceByType.set(nodeType, "loaded-metadata");
13
32
  }
14
33
  }
15
34
  }
@@ -17,17 +36,81 @@ export class NodeRegistry {
17
36
  if (!nodeClass.nodeType) {
18
37
  throw new Error(`Cannot register node class without nodeType: ${nodeClass.name}`);
19
38
  }
39
+ // Last write wins (needed for hot reload), but warn so accidental node
40
+ // type collisions between packages don't go unnoticed.
41
+ const existing = this._classes.get(nodeClass.nodeType);
42
+ if (existing && existing !== nodeClass) {
43
+ console.warn(
44
+ // Stryker disable next-line StringLiteral: operator diagnostic text only.
45
+ `[NodeRegistry] Replacing existing registration for node type: ${nodeClass.nodeType}`);
46
+ }
20
47
  // TS class definitions are the source of truth for TS nodes.
21
48
  // Python metadata is NOT merged — it is only used for Python-only
22
49
  // node packs (huggingface, mlx, etc.) that have no TS class.
23
50
  const metadata = options.metadata ?? getNodeMetadata(nodeClass);
51
+ // Stryker disable ConditionalExpression,BlockStatement,StringLiteral: getNodeMetadata always returns a populated object for a valid class, so `metadata` is always truthy and the strict-mode else branch is unreachable dead defensive code.
24
52
  if (metadata) {
25
53
  this._registeredMetadataByType.set(nodeClass.nodeType, metadata);
54
+ this._registeredMetadataSourceByType.set(nodeClass.nodeType, options.source ?? "typescript");
55
+ const packageId = options.packageId ?? this._activePackageId;
56
+ if (packageId?.trim()) {
57
+ this._registeredPackageIdByType.set(nodeClass.nodeType, packageId.trim());
58
+ }
59
+ else {
60
+ this._registeredPackageIdByType.delete(nodeClass.nodeType);
61
+ }
26
62
  }
27
63
  else if (this._strictMetadata) {
28
64
  throw new Error(`Missing resolved metadata for node type: ${nodeClass.nodeType}`);
29
65
  }
66
+ // Stryker restore ConditionalExpression,BlockStatement,StringLiteral
30
67
  this._classes.set(nodeClass.nodeType, nodeClass);
68
+ this.invalidateMetadataCaches();
69
+ }
70
+ /**
71
+ * Drop the memoized metadata array and search index. Called by every
72
+ * mutation so the next read rebuilds from the current maps.
73
+ */
74
+ invalidateMetadataCaches() {
75
+ this._mergedMetadataCache = null;
76
+ this._searchIndexCache = null;
77
+ this._revision++;
78
+ }
79
+ /**
80
+ * Attribute synchronous registrar calls to an explicit package identity.
81
+ * Package registration functions are synchronous by contract.
82
+ */
83
+ registerPackage(packageId, registrar) {
84
+ const previous = this._activePackageId;
85
+ this._activePackageId = packageId.trim() || undefined;
86
+ try {
87
+ registrar(this);
88
+ }
89
+ finally {
90
+ this._activePackageId = previous;
91
+ }
92
+ }
93
+ /** Monotonic metadata revision used to invalidate derived contract caches. */
94
+ get revision() {
95
+ return this._revision;
96
+ }
97
+ /**
98
+ * Merged metadata for every node (loaded Python metadata first, registered TS
99
+ * metadata last so a TS class wins on a node_type collision). Built once and
100
+ * memoized; callers that mutate the result must copy it first.
101
+ */
102
+ mergedMetadata() {
103
+ if (this._mergedMetadataCache === null) {
104
+ const merged = new Map();
105
+ for (const [nodeType, metadata] of this._loadedMetadataByType.entries()) {
106
+ merged.set(nodeType, metadata);
107
+ }
108
+ for (const [nodeType, metadata] of this._registeredMetadataByType.entries()) {
109
+ merged.set(nodeType, metadata);
110
+ }
111
+ this._mergedMetadataCache = [...merged.values()];
112
+ }
113
+ return this._mergedMetadataCache;
31
114
  }
32
115
  /**
33
116
  * Validate a node descriptor against its registered class's @prop schema.
@@ -43,7 +126,9 @@ export class NodeRegistry {
43
126
  const properties = descriptor.properties ?? {};
44
127
  return NodeClass.validateProperties(properties, {
45
128
  connectedHandles,
46
- nodeId: descriptor.id
129
+ nodeId: descriptor.id,
130
+ dynamicSlots: descriptor.dynamic_inputs,
131
+ dynamicValues: descriptor.dynamic_properties
47
132
  });
48
133
  }
49
134
  /**
@@ -54,16 +139,90 @@ export class NodeRegistry {
54
139
  createNodeValidator() {
55
140
  return (descriptor, connectedHandles) => this.validateNode(descriptor, connectedHandles);
56
141
  }
142
+ /**
143
+ * Return a new NodeRegistry containing only the node classes that declare
144
+ * support for `target`. Loaded (Python) metadata is copied across when the
145
+ * matching class is included.
146
+ *
147
+ * Used at bundle / deployment time to construct a registry tailored to the
148
+ * active platform — the workflow runner then naturally fails on any graph
149
+ * referencing an unsupported node type.
150
+ */
151
+ forPlatform(target) {
152
+ // Stryker disable next-line ObjectLiteral: _strictMetadata only gated the unreachable strict-throw, so propagating it (vs {}) has no observable effect (equivalent).
153
+ const filtered = new NodeRegistry({
154
+ strictMetadata: this._strictMetadata
155
+ });
156
+ for (const [nodeType, nodeClass] of this._classes) {
157
+ if (!supportsPlatform(nodeClass.platforms, target))
158
+ continue;
159
+ const metadata = this._registeredMetadataByType.get(nodeType);
160
+ const source = this._registeredMetadataSourceByType.get(nodeType) ?? "typescript";
161
+ const packageId = this._registeredPackageIdByType.get(nodeType);
162
+ const registration = { source };
163
+ if (metadata) {
164
+ registration.metadata = metadata;
165
+ }
166
+ if (packageId) {
167
+ registration.packageId = packageId;
168
+ }
169
+ filtered.register(nodeClass, registration);
170
+ const loaded = this._loadedMetadataByType.get(nodeType);
171
+ // Stryker disable next-line ConditionalExpression: every kept node is re-registered with derived metadata above (which getMetadata returns first), so copying the loaded entry is unobservable (equivalent).
172
+ if (loaded) {
173
+ filtered._loadedMetadataByType.set(nodeType, loaded);
174
+ filtered._loadedMetadataSourceByType.set(nodeType, this._loadedMetadataSourceByType.get(nodeType) ?? "loaded-metadata");
175
+ const loadedPackageId = this._loadedPackageIdByType.get(nodeType);
176
+ if (loadedPackageId) {
177
+ filtered._loadedPackageIdByType.set(nodeType, loadedPackageId);
178
+ }
179
+ }
180
+ }
181
+ return filtered;
182
+ }
183
+ /**
184
+ * Validator that rejects nodes not supporting `target`. Compose with
185
+ * {@link createNodeValidator} when enforcing platform constraints in a
186
+ * registry that contains nodes for multiple platforms.
187
+ */
188
+ createPlatformValidator(target) {
189
+ return (descriptor) => {
190
+ const nodeClass = this._classes.get(descriptor.type);
191
+ const platforms = nodeClass?.platforms ??
192
+ this.resolveMetadata(descriptor.type)?.platforms;
193
+ if (supportsPlatform(platforms, target))
194
+ return [];
195
+ const supported = platforms && platforms.length > 0 ? platforms.join(", ") : "node";
196
+ return [
197
+ {
198
+ nodeId: descriptor.id,
199
+ nodeType: descriptor.type,
200
+ property: "*",
201
+ code: "unsupported_platform",
202
+ message: `Node ${descriptor.type} is not supported on platform '${target}' (supports: ${supported})`
203
+ }
204
+ ];
205
+ };
206
+ }
57
207
  resolve(descriptor) {
58
208
  const NodeClass = this._classes.get(descriptor.type);
59
209
  if (!NodeClass) {
60
210
  throw new Error(`Unknown node type: ${descriptor.type}`);
61
211
  }
62
- const instance = new NodeClass(descriptor.properties ?? {});
212
+ const properties = descriptor.properties ?? {};
213
+ // Slot declarations must be visible to `assign()` before it stores the
214
+ // dynamic values, so they can be coerced against their declared type.
215
+ const instance = new NodeClass(descriptor.dynamic_inputs
216
+ ? { _dynamic_inputs: descriptor.dynamic_inputs, ...properties }
217
+ : properties);
63
218
  instance.__node_id = descriptor.id;
64
219
  instance.__node_name = descriptor.name ?? descriptor.type;
220
+ // Stryker disable next-line ConditionalExpression: forcing this true assigns _dynamic_outputs = undefined, which reads back identically to leaving it unset (equivalent).
65
221
  if (descriptor.dynamic_outputs) {
66
- instance._dynamic_outputs = descriptor.dynamic_outputs;
222
+ Reflect.set(instance, "_dynamic_outputs", descriptor.dynamic_outputs);
223
+ }
224
+ if (descriptor.dynamic_inputs) {
225
+ Reflect.set(instance, "_dynamic_inputs", descriptor.dynamic_inputs);
67
226
  }
68
227
  return instance.toExecutor();
69
228
  }
@@ -80,6 +239,37 @@ export class NodeRegistry {
80
239
  return (this._registeredMetadataByType.get(nodeType) ??
81
240
  this._loadedMetadataByType.get(nodeType));
82
241
  }
242
+ getMetadataSource(nodeType) {
243
+ return (this._registeredMetadataSourceByType.get(nodeType) ??
244
+ this._loadedMetadataSourceByType.get(nodeType));
245
+ }
246
+ /**
247
+ * Exact package identity recorded by the loader or registrar for this node.
248
+ * Undefined means package provenance is not authoritative.
249
+ */
250
+ getNodePackageId(nodeType) {
251
+ if (this._registeredMetadataByType.has(nodeType)) {
252
+ return this._registeredPackageIdByType.get(nodeType);
253
+ }
254
+ return this._loadedPackageIdByType.get(nodeType);
255
+ }
256
+ /** Exact package identities represented by the current registry. */
257
+ listNodePackageIds() {
258
+ const ids = new Set();
259
+ for (const nodeType of this._registeredMetadataByType.keys()) {
260
+ const id = this._registeredPackageIdByType.get(nodeType);
261
+ if (id)
262
+ ids.add(id);
263
+ }
264
+ for (const nodeType of this._loadedMetadataByType.keys()) {
265
+ if (this._registeredMetadataByType.has(nodeType))
266
+ continue;
267
+ const id = this._loadedPackageIdByType.get(nodeType);
268
+ if (id)
269
+ ids.add(id);
270
+ }
271
+ return [...ids].sort();
272
+ }
83
273
  resolveMetadata(nodeType) {
84
274
  const exact = this.getMetadata(nodeType);
85
275
  if (exact)
@@ -90,33 +280,86 @@ export class NodeRegistry {
90
280
  return undefined;
91
281
  }
92
282
  listMetadata() {
93
- const merged = new Map();
94
- for (const [nodeType, metadata] of this._loadedMetadataByType.entries()) {
95
- merged.set(nodeType, metadata);
96
- }
97
- for (const [nodeType, metadata] of this._registeredMetadataByType.entries()) {
98
- merged.set(nodeType, metadata);
283
+ // Fresh copy each call: some callers (http-api, tRPC nodes router) sort the
284
+ // result in place, which must not reorder the shared cache.
285
+ return [...this.mergedMetadata()];
286
+ }
287
+ /**
288
+ * Rank registered nodes against `terms` using a memoized search index.
289
+ *
290
+ * Equivalent to `rankNodeMetadata(this.listMetadata(), terms, options)` but
291
+ * reuses a precomputed index across calls — the planner's inner loop. The
292
+ * index is invalidated whenever the registry changes.
293
+ */
294
+ searchMetadata(terms, options = {}) {
295
+ if (this._searchIndexCache === null) {
296
+ this._searchIndexCache = new NodeSearchIndex(this.mergedMetadata());
99
297
  }
100
- return [...merged.values()];
298
+ return this._searchIndexCache.rank(terms, options);
101
299
  }
102
300
  listRegisteredNodeTypesWithoutMetadata() {
301
+ // Stryker disable next-line ArrowFunction,ConditionalExpression: register() always stores derived metadata, so getMetadata is never undefined for a registered type — this filter always yields [] regardless of the predicate (equivalent).
103
302
  return this.list().filter((nodeType) => this.getMetadata(nodeType) === undefined);
104
303
  }
105
304
  /** Add or replace metadata for a node type (e.g. from Python bridge). */
106
- loadMetadata(nodeType, metadata) {
305
+ loadMetadata(nodeType, metadata, options = {}) {
107
306
  this._loadedMetadataByType.set(nodeType, metadata);
307
+ this._loadedMetadataSourceByType.set(nodeType, options.source ?? "loaded-metadata");
308
+ if (options.packageId?.trim()) {
309
+ this._loadedPackageIdByType.set(nodeType, options.packageId.trim());
310
+ }
311
+ else {
312
+ this._loadedPackageIdByType.delete(nodeType);
313
+ }
314
+ this.invalidateMetadataCaches();
108
315
  }
109
316
  loadPythonMetadata(options = {}) {
110
317
  const loaded = loadPythonPackageMetadata(options);
318
+ const packageIdByType = new Map();
319
+ for (const pkg of loaded.packages) {
320
+ for (const node of pkg.nodes ?? []) {
321
+ if (node?.node_type)
322
+ packageIdByType.set(node.node_type, pkg.name);
323
+ }
324
+ }
111
325
  for (const [nodeType, metadata] of loaded.nodesByType.entries()) {
112
326
  this._loadedMetadataByType.set(nodeType, metadata);
327
+ this._loadedMetadataSourceByType.set(nodeType, "python-package");
328
+ const packageId = packageIdByType.get(nodeType);
329
+ if (packageId) {
330
+ this._loadedPackageIdByType.set(nodeType, packageId);
331
+ }
332
+ else {
333
+ this._loadedPackageIdByType.delete(nodeType);
334
+ }
113
335
  }
336
+ this.invalidateMetadataCaches();
114
337
  return loaded;
115
338
  }
339
+ /**
340
+ * Remove a node type from the registry.
341
+ * Returns true if the node type was present and removed.
342
+ */
343
+ unregister(nodeType) {
344
+ const hadClass = this._classes.delete(nodeType);
345
+ this._loadedMetadataByType.delete(nodeType);
346
+ this._registeredMetadataByType.delete(nodeType);
347
+ this._loadedMetadataSourceByType.delete(nodeType);
348
+ this._registeredMetadataSourceByType.delete(nodeType);
349
+ this._loadedPackageIdByType.delete(nodeType);
350
+ this._registeredPackageIdByType.delete(nodeType);
351
+ this.invalidateMetadataCaches();
352
+ return hadClass;
353
+ }
116
354
  clear() {
117
355
  this._classes.clear();
118
356
  this._loadedMetadataByType.clear();
119
357
  this._registeredMetadataByType.clear();
358
+ this._loadedMetadataSourceByType.clear();
359
+ this._registeredMetadataSourceByType.clear();
360
+ this._loadedPackageIdByType.clear();
361
+ this._registeredPackageIdByType.clear();
362
+ this.invalidateMetadataCaches();
120
363
  }
121
364
  static global = new NodeRegistry();
122
365
  }
@@ -124,6 +367,7 @@ export function register(nodeClass) {
124
367
  NodeRegistry.global.register(nodeClass);
125
368
  }
126
369
  function typeMetadataToString(typeMeta) {
370
+ // Stryker disable next-line MethodExpression: .filter(Boolean) only drops empty renderings, which valid type metadata never produces (equivalent).
127
371
  const args = (typeMeta.type_args ?? [])
128
372
  .map(typeMetadataToString)
129
373
  .filter(Boolean);
@@ -131,10 +375,102 @@ function typeMetadataToString(typeMeta) {
131
375
  ? `${typeMeta.type}[${args.join(", ")}]`
132
376
  : typeMeta.type;
133
377
  }
378
+ /**
379
+ * Stamp streaming/control flags from the registry onto graph descriptors.
380
+ * Graphs arriving from a client carry only `type` and `properties`, and the
381
+ * kernel actor trusts `node.is_streaming_input` to pick run() over a one-shot
382
+ * process() — without this every streaming node "completes" instantly with
383
+ * empty outputs. The full-fat equivalent (which also resolves property/output
384
+ * types and drops unknown node types) is `Graph.loadFromDict` with
385
+ * `createGraphNodeTypeResolver`; this is the lightweight synchronous version
386
+ * for runners that only need correct execution semantics.
387
+ *
388
+ * Flags are resolved from the node's registered TS class when present, else
389
+ * from its loaded metadata (Python nodes have no TS class — they live only as
390
+ * metadata loaded from the worker's `package_metadata`, so `getClass` returns
391
+ * undefined and we must consult `resolveMetadata` or a streaming Python node
392
+ * read from a saved graph silently runs one-shot). This mirrors
393
+ * `Graph.loadFromDict`, which already reads the Python flag from metadata.
394
+ * `is_streaming_output` is derived from a TS class via `hasStreamingOutput`
395
+ * (purely structural: a `genProcess` override or iteration/forward/chunk
396
+ * correlation — ForEach, Collection, RepeatCount), and from the metadata's
397
+ * already-resolved boolean otherwise. Node types the registry doesn't know at
398
+ * all keep their own flags, defaulted to false (resolveExecutor reports
399
+ * unknown types loudly).
400
+ */
401
+ export function hydrateGraphNodeFlags(graph, registry) {
402
+ const nodes = graph.nodes.map((node) => {
403
+ const cls = registry.getClass(node.type);
404
+ // Fall back to loaded metadata only for class-less (Python) nodes.
405
+ const meta = cls ? undefined : registry.resolveMetadata(node.type);
406
+ const derivedSlots = cls?.resolveDynamicSlots?.(node);
407
+ const dynamicInputs = mergeDerivedSlots(derivedSlots?.dynamic_inputs, node.dynamic_inputs);
408
+ const dynamicOutputs = mergeDerivedSlots(derivedSlots?.dynamic_outputs, node.dynamic_outputs);
409
+ return {
410
+ ...node,
411
+ ...(dynamicInputs && { dynamic_inputs: dynamicInputs }),
412
+ ...(dynamicOutputs && { dynamic_outputs: dynamicOutputs }),
413
+ // `??`, not `||`: a registered class always carries explicit booleans
414
+ // (BaseNode defaults them to false), so the registry corrects a stale
415
+ // saved `true` when a node type migrates away from streaming/control.
416
+ // OR let the saved value win forever. Saved flags apply only when the
417
+ // registry has no opinion (unknown type, or metadata omitting the flag).
418
+ // A class may also decide streaming input per instance, from the node's
419
+ // own properties (`resolveStreamingInput` — the Code node, where the body
420
+ // decides). It is consulted ahead of the static and re-read on every
421
+ // hydration, so it cannot go stale.
422
+ is_streaming_input: (cls
423
+ ? (cls.resolveStreamingInput?.(node) ?? cls.isStreamingInput)
424
+ : meta?.is_streaming_input) ??
425
+ node.is_streaming_input ??
426
+ false,
427
+ is_streaming_output: (cls ? hasStreamingOutput(cls) : meta?.is_streaming_output) ??
428
+ node.is_streaming_output ??
429
+ false,
430
+ is_controlled: (cls ? cls.isControlled : meta?.is_controlled) ??
431
+ node.is_controlled ??
432
+ false,
433
+ is_join_node: (cls ? cls.isJoinNode : meta?.is_join_node) ??
434
+ node.is_join_node ??
435
+ false,
436
+ is_trigger: (cls ? cls.isTrigger : meta?.is_trigger) ?? node.is_trigger ?? false,
437
+ // No `?? node.retry_safe` here, unlike every flag around it: whether
438
+ // re-running a node duplicates a payment or a publish is a property of
439
+ // its implementation, not of a saved file. A graph asserting
440
+ // `retry_safe: true` for a node nobody classified would hand the
441
+ // supervisor a retry on a side-effecting node — the asymmetric failure
442
+ // docs/workflow-supervisor-design.md §5.3 exists to prevent.
443
+ retry_safe: (cls ? cls.retrySafe : meta?.retry_safe) ?? false,
444
+ always_emit_output_updates: (cls
445
+ ? cls.alwaysEmitOutputUpdates
446
+ : meta?.always_emit_output_updates) ??
447
+ node.always_emit_output_updates ??
448
+ false,
449
+ input_mode: (cls ? cls.inputMode : meta?.input_mode) ?? node.input_mode,
450
+ output_correlation: (cls ? cls.outputCorrelation : meta?.output_correlation) ??
451
+ node.output_correlation
452
+ };
453
+ });
454
+ return { nodes, edges: [...graph.edges] };
455
+ }
134
456
  function deriveNamespace(nodeType) {
135
457
  const lastDot = nodeType.lastIndexOf(".");
458
+ // Stryker disable next-line EqualityOperator: at lastDot === 0 both arms yield "" (slice(0,0) === the else ""), so > 0 vs >= 0 are indistinguishable (equivalent).
136
459
  return lastDot > 0 ? nodeType.slice(0, lastDot) : "";
137
460
  }
461
+ /**
462
+ * The declared input types of one node type, as a `propertyTypes`-shaped map
463
+ * (`{[property]: "list[image]" | "str" | …}`). This is the kernel's authority
464
+ * on list-ness — correlation analysis and multi-edge fan-in read it — so
465
+ * hydration paths that do not go through `Graph.loadFromDict` stamp it from
466
+ * here rather than re-deriving the rendering.
467
+ */
468
+ export function propertyTypesForMetadata(metadata) {
469
+ return Object.fromEntries((metadata.properties ?? []).map((prop) => [
470
+ prop.name,
471
+ typeMetadataToString(prop.type)
472
+ ]));
473
+ }
138
474
  export function createGraphNodeTypeResolver(registry, options = {}) {
139
475
  return {
140
476
  resolveNodeType: async (nodeType) => {
@@ -148,37 +484,74 @@ export function createGraphNodeTypeResolver(registry, options = {}) {
148
484
  }
149
485
  if (!metadata)
150
486
  return null;
151
- const propertyTypes = Object.fromEntries((metadata.properties ?? []).map((prop) => [
152
- prop.name,
153
- typeMetadataToString(prop.type)
154
- ]));
155
- const propertyMeta = Object.fromEntries((metadata.properties ?? [])
487
+ // Per-instance streaming-input resolution, when the class declares it.
488
+ // Metadata carries one boolean per type and cannot answer for a node
489
+ // whose mode lives in its own properties, so the closure travels to the
490
+ // merge site instead. Absent for every class without the hook, which
491
+ // keeps `Graph.loadFromDict` on exactly today's path.
492
+ const cls = registry.getClass(nodeType);
493
+ const resolveStreamingInput = cls?.resolveStreamingInput;
494
+ const resolveDynamicSlots = cls?.resolveDynamicSlots;
495
+ const propertyTypes = propertyTypesForMetadata(metadata);
496
+ const propertyMeta = Object.fromEntries(
497
+ // Stryker disable next-line ArrayDeclaration: a bogus seed element lacks description/min/max, so the .filter below drops it — the result is unchanged (equivalent).
498
+ (metadata.properties ?? [])
156
499
  .filter((p) => p.description || p.min != null || p.max != null)
157
- .map((p) => [
158
- p.name,
159
- {
160
- ...(p.description ? { description: p.description } : {}),
161
- ...(p.min != null ? { min: p.min } : {}),
162
- ...(p.max != null ? { max: p.max } : {})
500
+ .map((p) => {
501
+ const meta = {};
502
+ if (p.description) {
503
+ meta.description = p.description;
163
504
  }
164
- ]));
505
+ if (p.min != null) {
506
+ meta.min = p.min;
507
+ }
508
+ if (p.max != null) {
509
+ meta.max = p.max;
510
+ }
511
+ return [p.name, meta];
512
+ }));
165
513
  const outputs = Object.fromEntries((metadata.outputs ?? []).map((output) => [
166
514
  output.name,
167
515
  typeMetadataToString(output.type)
168
516
  ]));
169
- const NodeClass = registry.getClass(nodeType);
170
- const syncMode = NodeClass?.syncMode;
171
517
  return {
172
518
  nodeType: metadata.node_type,
173
519
  propertyTypes,
174
520
  outputs,
175
- isDynamic: metadata.is_dynamic ?? false,
521
+ supportsDynamicInputs: metadata.supports_dynamic_inputs ?? false,
522
+ ...(resolveStreamingInput && {
523
+ resolveInstanceFlags: (node) => ({ is_streaming_input: resolveStreamingInput(node) })
524
+ }),
525
+ ...(resolveDynamicSlots && {
526
+ resolveInstanceSlots: resolveDynamicSlots
527
+ }),
176
528
  descriptorDefaults: {
177
529
  name: metadata.title,
178
- ...(metadata.is_streaming_input && { is_streaming_input: true }),
179
- ...(metadata.is_streaming_output && { is_streaming_output: true }),
180
- ...(metadata.is_controlled && { is_controlled: true }),
181
- ...(syncMode !== undefined && { sync_mode: syncMode }),
530
+ // Explicit booleans, never omitted: Graph.loadFromDict resolves each
531
+ // flag as `descriptorDefaults.flag ?? saved ?? false`, so an omitted
532
+ // false here would let a stale saved `true` survive a node type's
533
+ // migration away from streaming/control. Metadata is built from the
534
+ // class statics (BaseNode defaults false), so absent means false.
535
+ is_streaming_input: metadata.is_streaming_input ?? false,
536
+ is_streaming_output: metadata.is_streaming_output ?? false,
537
+ is_controlled: metadata.is_controlled ?? false,
538
+ is_join_node: metadata.is_join_node ?? false,
539
+ // Same reason as the flags above, and the one that was missing:
540
+ // `actor.ts` gates the trigger entry point on this, and saved
541
+ // workflow JSON never carries it. Omitted here, every
542
+ // resolver-hydrated graph read `is_trigger: false`, so a delivered
543
+ // webhook/manual/file-watch event was accepted and silently
544
+ // dropped — the node fell through to `genProcess()` and emitted
545
+ // nothing.
546
+ is_trigger: metadata.is_trigger ?? false,
547
+ retry_safe: metadata.retry_safe ?? false,
548
+ ...(metadata.input_mode && { input_mode: metadata.input_mode }),
549
+ ...(metadata.output_correlation && {
550
+ output_correlation: metadata.output_correlation
551
+ }),
552
+ ...(metadata.always_emit_output_updates && {
553
+ always_emit_output_updates: true
554
+ }),
182
555
  ...(Object.keys(propertyMeta).length > 0 && { propertyMeta })
183
556
  }
184
557
  };
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+B9C,MAAM,OAAO,YAAY;IACf,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACxC,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACxD,yBAAyB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5D,2BAA2B,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpE,+BAA+B,GAAG,IAAI,GAAG,EAG9C,CAAC;IACI,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,0BAA0B,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvD,gBAAgB,CAAqB;IACrC,eAAe,CAAU;IACzB,SAAS,GAAG,CAAC,CAAC;IAEtB,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,8EAA8E;IAC9E,kDAAkD;IAC1C,oBAAoB,GAA0B,IAAI,CAAC;IACnD,iBAAiB,GAA2B,IAAI,CAAC;IAEzD,YAAY,OAAO,GAAwB,EAAE;QAC3C,yMAAyM;QACzM,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QACvD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACnD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,SAAoB,EAAE,OAAO,GAAwB,EAAE;QAC9D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,gDAAgD,SAAS,CAAC,IAAI,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI;YACV,0EAA0E;YAC1E,iEAAiE,SAAS,CAAC,QAAQ,EAAE,CACtF,CAAC;QACJ,CAAC;QACD,6DAA6D;QAC7D,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QAEhE,8OAA8O;QAC9O,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,+BAA+B,CAAC,GAAG,CACtC,SAAS,CAAC,QAAQ,EAClB,OAAO,CAAC,MAAM,IAAI,YAAY,CAC/B,CAAC;YACF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;YAC7D,IAAI,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,0BAA0B,CAAC,GAAG,CACjC,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,IAAI,EAAE,CACjB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,4CAA4C,SAAS,CAAC,QAAQ,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,qEAAqE;QACrE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED;;;OAGG;IACK,wBAAwB;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,SAAiB,EACjB,SAA2C;QAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACtD,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACnC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;YAC/C,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACxE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,MAAM,CACT,QAAQ,EACR,QAAQ,CACT,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CACV,UAA0B,EAC1B,gBAA8D;QAE9D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GACd,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE;YAC9C,gBAAgB;YAChB,MAAM,EAAE,UAAU,CAAC,EAAE;YACrB,YAAY,EAAE,UAAU,CAAC,cAAc;YACvC,aAAa,EAAE,UAAU,CAAC,kBAAkB;SAC7C,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QAIjB,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,CACtC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CAAC,MAAgB;QAC1B,qKAAqK;QACrK,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;YAChC,cAAc,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAAE,SAAS;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,MAAM,GACV,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,YAAY,GAAwB,EAAE,MAAM,EAAE,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACnC,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;YACrC,CAAC;YACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxD,6MAA6M;YAC7M,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACrD,QAAQ,CAAC,2BAA2B,CAAC,GAAG,CACtC,QAAQ,EACR,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CACpE,CAAC;gBACF,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAClE,IAAI,eAAe,EAAE,CAAC;oBACpB,QAAQ,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CACrB,MAAgB;QAKhB,OAAO,CAAC,UAAU,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,SAAS,GACb,SAAS,EAAE,SAAS;gBACpB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;YACnD,IAAI,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC;gBAAE,OAAO,EAAE,CAAC;YACnD,MAAM,SAAS,GACb,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,OAAO;gBACL;oBACE,MAAM,EAAE,UAAU,CAAC,EAAE;oBACrB,QAAQ,EAAE,UAAU,CAAC,IAAI;oBACzB,QAAQ,EAAE,GAAG;oBACb,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,QAAQ,UAAU,CAAC,IAAI,kCAAkC,MAAM,gBAAgB,SAAS,GAAG;iBACrG;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,UAA0B;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,UAAU,GACd,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9B,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,SAAS,CAC5B,UAAU,CAAC,cAAc;YACvB,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,cAAc,EAAE,GAAG,UAAU,EAAE;YAC/D,CAAC,CAAC,UAAU,CACf,CAAC;QACF,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;QAC1D,0KAA0K;QAC1K,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,OAAO,CACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CACzC,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,QAAgB;QAChC,OAAO,CACL,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,oEAAoE;IACpE,kBAAkB;QAChB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,YAAY;QACV,4EAA4E;QAC5E,4DAA4D;QAC5D,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CACZ,KAAwB,EACxB,OAAO,GAAiB,EAAE;QAE1B,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,sCAAsC;QACpC,6OAA6O;QAC7O,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CACvB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,SAAS,CACvD,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,YAAY,CACV,QAAgB,EAChB,QAAsB,EACtB,OAAO,GAAwB,EAAE;QAEjC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAClC,QAAQ,EACR,OAAO,CAAC,MAAM,IAAI,iBAAiB,CACpC,CAAC;QACF,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,kBAAkB,CAChB,OAAO,GAA8B,EAAE;QAEvC,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,IAAI,EAAE,SAAS;oBAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAChE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,QAAgB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAU,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;CAC7C;AAED,MAAM,UAAU,QAAQ,CAAC,SAAoB;IAC3C,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAE2C;IAE3C,mJAAmJ;IACnJ,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,oBAAoB,CAAC;SACzB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAgB,EAChB,QAA4D;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,mEAAmE;QACnE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,GAAG,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,iBAAiB,CACrC,YAAY,EAAE,cAAc,EAC5B,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,MAAM,cAAc,GAAG,iBAAiB,CACtC,YAAY,EAAE,eAAe,EAC7B,IAAI,CAAC,eAAe,CACrB,CAAC;QACF,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,aAAa,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;YACvD,GAAG,CAAC,cAAc,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;YAC1D,sEAAsE;YACtE,sEAAsE;YACtE,sEAAsE;YACtE,sEAAsE;YACtE,yEAAyE;YACzE,wEAAwE;YACxE,0EAA0E;YAC1E,qEAAqE;YACrE,oCAAoC;YACpC,kBAAkB,EAChB,CAAC,GAAG;gBACF,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC;gBAC7D,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAC7B,IAAI,CAAC,kBAAkB;gBACvB,KAAK;YACP,mBAAmB,EACjB,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC;gBAC3D,IAAI,CAAC,mBAAmB;gBACxB,KAAK;YACP,aAAa,EACX,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC9C,IAAI,CAAC,aAAa;gBAClB,KAAK;YACP,YAAY,EACV,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC3C,IAAI,CAAC,YAAY;gBACjB,KAAK;YACP,UAAU,EACR,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK;YACtE,qEAAqE;YACrE,uEAAuE;YACvE,6DAA6D;YAC7D,iEAAiE;YACjE,uEAAuE;YACvE,6DAA6D;YAC7D,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,KAAK;YAC7D,0BAA0B,EACxB,CAAC,GAAG;gBACF,CAAC,CAAC,GAAG,CAAC,uBAAuB;gBAC7B,CAAC,CAAC,IAAI,EAAE,0BAA0B,CAAC;gBACrC,IAAI,CAAC,0BAA0B;gBAC/B,KAAK;YACP,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU;YACvE,kBAAkB,EAChB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBACxD,IAAI,CAAC,kBAAkB;SAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,mKAAmK;IACnK,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAsB;IAEtB,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;QACT,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;KAChC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAsB,EACtB,OAAO,GAAiC,EAAE;IAE1C,OAAO;QACL,eAAe,EAAE,KAAK,EACpB,QAAgB,EACkB,EAAE;YACpC,IAAI,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBACvC,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACjD,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3B,uEAAuE;YACvE,qEAAqE;YACrE,wEAAwE;YACxE,qEAAqE;YACrE,sDAAsD;YACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,qBAAqB,GAAG,GAAG,EAAE,qBAAqB,CAAC;YACzD,MAAM,mBAAmB,GAAG,GAAG,EAAE,mBAAmB,CAAC;YAErD,MAAM,aAAa,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW;YACrC,oKAAoK;YACpK,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;iBAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAMT,MAAM,IAAI,GAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAClB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;gBACnB,CAAC;gBACD,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;gBACnB,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC,CACL,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI;gBACX,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC;aAClC,CAAC,CACH,CAAC;YACF,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,SAAS;gBAC5B,aAAa;gBACb,OAAO;gBACP,qBAAqB,EAAE,QAAQ,CAAC,uBAAuB,IAAI,KAAK;gBAChE,GAAG,CAAC,qBAAqB,IAAI;oBAC3B,oBAAoB,EAAE,CAAC,IAEtB,EAAE,EAAE,CAAC,CAAC,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5D,CAAC;gBACF,GAAG,CAAC,mBAAmB,IAAI;oBACzB,oBAAoB,EAAE,mBAAmB;iBAC1C,CAAC;gBACF,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ,CAAC,KAAK;oBACpB,qEAAqE;oBACrE,qEAAqE;oBACrE,kEAAkE;oBAClE,oEAAoE;oBACpE,kEAAkE;oBAClE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,IAAI,KAAK;oBACxD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,IAAI,KAAK;oBAC1D,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,KAAK;oBAC9C,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,KAAK;oBAC5C,gEAAgE;oBAChE,8DAA8D;oBAC9D,sDAAsD;oBACtD,mEAAmE;oBACnE,4DAA4D;oBAC5D,gEAAgE;oBAChE,WAAW;oBACX,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK;oBACxC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK;oBACxC,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;oBAC/D,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI;wBACjC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;qBAChD,CAAC;oBACF,GAAG,CAAC,QAAQ,CAAC,0BAA0B,IAAI;wBACzC,0BAA0B,EAAE,IAAI;qBACjC,CAAC;oBACF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;iBAC9D;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The library packs NodeTool ships, by specifier.
3
+ *
4
+ * Presence is never assumed. A workflow can declare `@nodetool-ai/sandbox-yaml`
5
+ * on a machine where nobody installed it, and the catalog answers "not
6
+ * installed" — true, and useless. This table is what turns that answer into the
7
+ * next step: install this package. It is a list of names, not a resolution
8
+ * path — nothing here loads, resolves, or vouches for a pack.
9
+ */
10
+ /** A pack this repo ships as a sandbox module. */
11
+ export interface BridgePack {
12
+ /** The import specifier guest code uses. */
13
+ readonly specifier: string;
14
+ /** The npm package to install, which for a single-module pack is the same string. */
15
+ readonly packName: string;
16
+ /** The npm library behind the module. */
17
+ readonly library: string;
18
+ /**
19
+ * Where the library runs.
20
+ *
21
+ * `guest` — compiled into the QuickJS guest by the sandbox compiler.
22
+ * `host` — a NodeTool-implemented host function set behind a generated
23
+ * facade, because the library needs what the guest lacks, or carries a limit
24
+ * the guest could not enforce.
25
+ */
26
+ readonly runs: "guest" | "host";
27
+ /** Authored guest code rather than a compiled npm dependency. */
28
+ readonly source?: "authored";
29
+ }
30
+ export declare const BRIDGE_PACKS: readonly BridgePack[];
31
+ /** The bridge pack a specifier names, or undefined for anything else. */
32
+ export declare function bridgePackFor(specifier: string): BridgePack | undefined;
33
+ /**
34
+ * What to do about a specifier no installed pack offers, when NodeTool ships one
35
+ * under that name. Anything else gets no hint — a guess at a package name is
36
+ * worse than silence.
37
+ */
38
+ export declare function installHintFor(specifier: string): string | undefined;
39
+ //# sourceMappingURL=sandbox-bridge-packs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-bridge-packs.d.ts","sourceRoot":"","sources":["../src/sandbox-bridge-packs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAgO7C,CAAC;AAIF,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE"}