@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/base-node.js CHANGED
@@ -1,15 +1,19 @@
1
1
  import { getDeclaredPropertiesForClass } from "./decorators.js";
2
+ import { slotTypeToString } from "./type-compat.js";
3
+ import { isObjectLike, isRecord, isString } from "./type-predicates.js";
2
4
  import { validateNodeProperties } from "./validation.js";
3
- /**
4
- * Coerce an incoming property value to fit the declared type.
5
- *
6
- * The only coercion today: when the declared type is `list[T]` and the
7
- * value is a non-null scalar (not an array), wrap it in a one-element
8
- * array. This lets a single upstream value flow into a list-typed input
9
- * (e.g. a single Image into a `list[image]` slot) without a manual
10
- * wrapper node.
11
- */
12
- function coerceToDeclaredType(value, declaredType) {
5
+ export function coerceToDeclaredType(value, declaredType) {
6
+ // A URI string standing in for an asset ref. Callers reach for the plain
7
+ // string — `--params '{"clip":"file:///clip.mp4"}'`, a REST body, a webhook
8
+ // payload — and without this the ref stays empty, the node reads no bytes,
9
+ // and the run reports success carrying a zero-valued result. Only strings
10
+ // with a scheme convert, so a prompt or a caption is never mistaken for a
11
+ // location.
12
+ if (isString(value) &&
13
+ ASSET_REF_TYPES.has(declaredType) &&
14
+ URI_WITH_SCHEME.test(value)) {
15
+ return { type: declaredType, uri: value };
16
+ }
13
17
  if (value !== null &&
14
18
  value !== undefined &&
15
19
  !Array.isArray(value) &&
@@ -18,29 +22,229 @@ function coerceToDeclaredType(value, declaredType) {
18
22
  }
19
23
  return value;
20
24
  }
25
+ /**
26
+ * Declared types whose runtime value is an asset reference — a tagged object
27
+ * carrying `uri`/`asset_id`/`data` rather than a bare scalar.
28
+ */
29
+ const ASSET_REF_TYPES = new Set([
30
+ "image",
31
+ "video",
32
+ "audio",
33
+ "document",
34
+ "folder",
35
+ "model_3d"
36
+ ]);
37
+ /** `file://`, `https://`, `asset://`, `data:` and the like. */
38
+ const URI_WITH_SCHEME = /^[a-z][a-z0-9+.-]*:/i;
39
+ /**
40
+ * Coerce a value against a typed dynamic slot's declared type. Slots with no
41
+ * resolvable type string pass the value through untouched (legacy `any` slot).
42
+ */
43
+ export function coerceToSlotType(value, slot) {
44
+ const declaredType = slotTypeToString(slot);
45
+ return declaredType ? coerceToDeclaredType(value, declaredType) : value;
46
+ }
47
+ /**
48
+ * Read the `_dynamic_inputs` framework property injected by the registry into
49
+ * a slot-declaration map. Malformed entries are dropped rather than thrown on:
50
+ * the map is user/graph data and a bad slot must never break node construction.
51
+ */
52
+ function parseDynamicSlots(raw) {
53
+ if (!isRecord(raw)) {
54
+ return undefined;
55
+ }
56
+ const slots = new Map();
57
+ for (const [name, meta] of Object.entries(raw)) {
58
+ if (!isRecord(meta)) {
59
+ continue;
60
+ }
61
+ slots.set(name, meta);
62
+ }
63
+ return slots;
64
+ }
65
+ export const hasStreamingOutput = (cls) => {
66
+ const proto = cls.prototype;
67
+ if (
68
+ // Stryker disable next-line OptionalChaining: a class constructor always has a .prototype, so proto is never nullish here (equivalent).
69
+ !!proto?.genProcess &&
70
+ proto.genProcess !== BaseNode.prototype.genProcess) {
71
+ return true;
72
+ }
73
+ const corr = cls.outputCorrelation;
74
+ if (corr) {
75
+ for (const c of Object.values(corr)) {
76
+ if (c.kind === "forward" || c.kind === "iteration" || c.kind === "chunk") {
77
+ return true;
78
+ }
79
+ }
80
+ }
81
+ return false;
82
+ };
21
83
  export class BaseNode {
22
84
  static nodeType = "";
23
85
  static title = "";
24
86
  static description = "";
25
87
  static layout = undefined;
88
+ /**
89
+ * Node body renderer key. Set to "content_card" to render a media/text-forward
90
+ * content card instead of the generic input/output body. Generator packages
91
+ * typically derive this from the primary output type on a shared base class
92
+ * (mirrors the Python `_body`/`body()` convention).
93
+ */
94
+ static body = undefined;
26
95
  static recommendedModels = undefined;
27
- static basicFields = undefined;
96
+ static inlineFields = undefined;
97
+ static inputFields = undefined;
28
98
  static requiredSettings = undefined;
29
99
  static requiredRuntimes = undefined;
30
100
  static isStreamingInput = false;
31
- static isStreamingOutput = false;
32
- static isDynamic = false;
33
- static syncMode = "zip_all";
101
+ /**
102
+ * Decide {@link isStreamingInput} per node instance, from its saved
103
+ * properties. Unset on every node whose mode is a property of the type;
104
+ * declared only where one type covers both modes — the Code node, where the
105
+ * body decides (`usesStreamInputContract(node.properties.code)`).
106
+ *
107
+ * Both hydration paths consult it ahead of the static
108
+ * (`hydrateGraphNodeFlags`, and `Graph.loadFromDict` via the resolver's
109
+ * `resolveInstanceFlags`), and re-read it on every hydration, so editing the
110
+ * body flips the mode with no saved flag involved.
111
+ */
112
+ static resolveStreamingInput = undefined;
113
+ /**
114
+ * Derive dynamic input and output slots from a node's saved properties.
115
+ * Unset on nodes whose slots are declared only by the editor or the author;
116
+ * declared where the slots follow from a property, as on the Comfy runners,
117
+ * whose Save nodes in `workflow` become output slots.
118
+ *
119
+ * Both hydration paths merge the result under the slots saved on the node
120
+ * (`hydrateGraphNodeFlags`, and `Graph.loadFromDict` via the resolver's
121
+ * `resolveInstanceSlots`), so a graph built over the API, where nothing
122
+ * declared the slots, can still wire them.
123
+ */
124
+ static resolveDynamicSlots = undefined;
125
+ /**
126
+ * Marks a trigger node. Triggers compile to `trigger_registrations` on
127
+ * workflow activation, and when a run starts because of a delivered event
128
+ * (`RunJobRequest.trigger_event` targeting this node) the kernel calls
129
+ * {@link emitTriggerEvent} instead of the live-listening `genProcess`
130
+ * loop. Runs without a trigger event keep today's streaming behavior
131
+ * (in-editor live test). See
132
+ * docs/superpowers/specs/2026-07-10-trigger-wakeup-redesign.md.
133
+ */
134
+ static isTrigger = false;
135
+ /**
136
+ * Emit output_update for this node's handles even when they are connected
137
+ * onward. The runner suppresses output_update for connected handles by
138
+ * default; nodes whose updates feed a UI surface regardless of patching
139
+ * (e.g. the realtime audio monitor) opt in.
140
+ */
141
+ static alwaysEmitOutputUpdates = false;
142
+ static inputMode = undefined;
143
+ static outputCorrelation = undefined;
144
+ static supportsDynamicInputs = false;
145
+ /**
146
+ * Restricts the types a user may pick when declaring a dynamic input slot on
147
+ * this node (see `Node.dynamic_inputs`). Unset means the full type palette.
148
+ * Emitted as `allowed_dynamic_slot_types` in node metadata.
149
+ */
150
+ static allowedDynamicSlotTypes = undefined;
34
151
  static isControlled = false;
35
- static exposeAsTool = undefined;
152
+ /**
153
+ * `Zip` and `Cross` set this to true so static correlation analysis allows
154
+ * incomparable input scopes on these nodes only. See
155
+ * docs/correlation-design.md §7.
156
+ */
157
+ static isJoinNode = false;
36
158
  static supportsDynamicOutputs = undefined;
37
159
  static autoSaveAsset = false;
160
+ /**
161
+ * Whether re-running this node with identical inputs is safe. An opt-in:
162
+ * unknown means unsafe. Cost tracking cannot see external writes — a
163
+ * Publish/Upsert/Notify node can complete its side effect and then throw,
164
+ * recording nothing — so a node nobody classified loses a safe retry rather
165
+ * than gaining an unsafe one. The workflow supervisor offers `retry` only
166
+ * for a node that declares this. See docs/workflow-supervisor-design.md §5.3.
167
+ */
168
+ static retrySafe = false;
169
+ /**
170
+ * List properties whose static items are kept when an edge feeds the same
171
+ * handle. The node receives the connected items followed by its own static
172
+ * items, instead of the edge value replacing them. Used by the list
173
+ * constants, so a connected Image List adds its own images to the incoming
174
+ * ones.
175
+ */
176
+ static appendStaticInputs = [];
177
+ /**
178
+ * Per-type cache lifetime for partial runs ("Run Node", "Run from here", "Run
179
+ * selected"). Only consulted for Computed nodes (Constants are always live;
180
+ * Generatives reuse generation history). `"forever"` = pure deterministic
181
+ * (reuse while inputs match); a finite number = seconds the cached result
182
+ * stays fresh before re-running (time-sensitive, e.g. a web fetch);
183
+ * unset / `0` = never reuse. `"forever"` is a string sentinel — never
184
+ * `Infinity`, which JSON-serializes to `null` and would silently flip a pure
185
+ * node to never-cache. See docs/superpowers/specs/2026-06-27-run-subgraph-caching.md §4.
186
+ */
187
+ static cacheTtl = undefined;
188
+ /**
189
+ * What running this node does to the world, which decides whether a reactive
190
+ * run (a slider drag, an input change in a mini app) may execute it without
191
+ * an explicit action:
192
+ * "pure" — output depends only on inputs; safe to re-run at any rate
193
+ * "read" — reads external state but changes nothing
194
+ * "write" — mutates state the user can observe (a file, a document)
195
+ * "external" — leaves the system (sends mail, calls a paid API)
196
+ * Reactive runs traverse "pure" and "read" only. The default is the
197
+ * conservative "external", so a node nobody has classified never fires off a
198
+ * slider drag. `cacheTtl: "forever"` implies "pure".
199
+ */
200
+ static effect = "external";
201
+ /**
202
+ * Names the output slot that carries this node's "primary" generation — the
203
+ * value persisted as its saved generation and previewed by the content card.
204
+ * Unset falls back to the first declared output. See `auto_save_asset` and the
205
+ * autosave path in the websocket runner.
206
+ */
207
+ static primaryOutput = undefined;
38
208
  static modelPacks = undefined;
209
+ /**
210
+ * Deployment platforms this node supports. Defaults to ["node"]; nodes
211
+ * that work in V8 isolates should claim "workers" and/or "edge"
212
+ * explicitly. See `@nodetool-ai/protocol`'s Platform type.
213
+ */
214
+ static platforms = undefined;
215
+ /**
216
+ * Requires a WebGPU device in the browser (set via `tagAsBrowserGpu`). The
217
+ * in-browser runner routes graphs with these nodes to the server when
218
+ * `navigator.gpu` is unavailable. Unset/undefined means no GPU requirement.
219
+ */
220
+ static requiresGpu = undefined;
221
+ static deprecated = false;
222
+ /**
223
+ * Hidden from node-discovery UIs but still registered/runnable (see the
224
+ * `hidden` field on NodeClass). Unset/false means normally discoverable.
225
+ */
226
+ static hidden = undefined;
227
+ static replacedBy = undefined;
39
228
  static metadataOutputTypes = undefined;
40
229
  static outputTypes = {};
41
230
  __node_id = "";
42
231
  __node_name = "";
43
232
  dynamicProps = new Map();
233
+ /**
234
+ * Typed declarations for the dynamic slots of this node instance, injected by
235
+ * the registry as the `_dynamic_inputs` framework property. `dynamicProps`
236
+ * holds the values; this holds the types. A slot missing here is an untyped
237
+ * legacy slot and behaves exactly as before typed slots existed.
238
+ */
239
+ dynamicSlotMeta = new Map();
240
+ /**
241
+ * Framework-injected internals (resolved `_secrets`, the `_control_context`,
242
+ * …). Kept separate from `dynamicProps` so reserved `_`-prefixed values never
243
+ * leak into user-facing dynamic-input iteration (prompt template vars, API
244
+ * args) or into `serialize()`. Read/written through getDynamic/setDynamic,
245
+ * which route `_`-prefixed keys here.
246
+ */
247
+ _internalProps = new Map();
44
248
  constructor(properties = {}) {
45
249
  this.assign(properties);
46
250
  }
@@ -65,11 +269,26 @@ export class BaseNode {
65
269
  * need to: declarative `@prop` metadata is enough.
66
270
  */
67
271
  static validateProperties(properties, options = {}) {
68
- const cls = this;
69
- return validateNodeProperties(cls.getDeclaredProperties(), properties, {
272
+ const declared = this.getDeclaredProperties();
273
+ const dynamicSlots = options.dynamicSlots;
274
+ let dynamicValues = options.dynamicValues;
275
+ if (dynamicSlots && !dynamicValues) {
276
+ // No explicit value bag — dynamic values ride along in `properties`.
277
+ const declaredNames = new Set(declared.map((p) => p.name));
278
+ const collected = {};
279
+ for (const key of Object.keys(dynamicSlots)) {
280
+ if (declaredNames.has(key))
281
+ continue;
282
+ collected[key] = properties[key];
283
+ }
284
+ dynamicValues = collected;
285
+ }
286
+ return validateNodeProperties(declared, properties, {
70
287
  connectedHandles: options.connectedHandles,
71
288
  nodeId: options.nodeId,
72
- nodeType: cls.nodeType
289
+ nodeType: this.nodeType,
290
+ dynamicSlots,
291
+ dynamicValues
73
292
  });
74
293
  }
75
294
  assign(properties) {
@@ -83,7 +302,10 @@ export class BaseNode {
83
302
  }
84
303
  const declaredNames = new Set(declared.map((p) => p.name));
85
304
  for (const { name, options } of declared) {
86
- if (Object.prototype.hasOwnProperty.call(properties, name)) {
305
+ if (Object.prototype.hasOwnProperty.call(properties, name) &&
306
+ // An explicit `undefined` means "absent", same as omitting the key —
307
+ // it must not suppress the declared default below.
308
+ properties[name] !== undefined) {
87
309
  // Explicit value provided — use it (auto-wrap scalars into list[T]).
88
310
  this[name] = coerceToDeclaredType(properties[name], options.type);
89
311
  }
@@ -93,17 +315,34 @@ export class BaseNode {
93
315
  // Deep-copy mutable defaults so instances don't share references.
94
316
  const def = options.default;
95
317
  this[name] =
96
- def !== null && typeof def === "object"
318
+ // Stryker disable next-line ConditionalExpression,LogicalOperator: the guard only matters for object defaults (covered by the deep-copy test); for scalars the JSON round-trip is identity, so every variant still deep-copies objects and passes scalars through (equivalent).
319
+ isObjectLike(def)
97
320
  ? JSON.parse(JSON.stringify(def))
98
321
  : def;
99
322
  }
100
323
  }
101
- // For dynamic nodes, store undeclared properties in dynamicProps
102
- if (ctor.isDynamic) {
103
- const skip = new Set(["__node_id", "__node_name", "_secrets"]);
324
+ // For dynamic nodes, store undeclared properties. Reserved, framework-
325
+ // injected keys (anything `_`-prefixed, e.g. `_secrets`, `_control_context`)
326
+ // are routed to `_internalProps` instead of `dynamicProps` so they never
327
+ // leak into user-facing dynamic-input iteration or `serialize()`.
328
+ if (ctor.supportsDynamicInputs) {
329
+ // Slot declarations arrive before the values are stored so the values can
330
+ // be coerced against their declared type in the same pass.
331
+ const slots = parseDynamicSlots(properties._dynamic_inputs);
332
+ if (slots) {
333
+ this.dynamicSlotMeta = slots;
334
+ }
104
335
  for (const [key, value] of Object.entries(properties)) {
105
- if (!declaredNames.has(key) && !skip.has(key)) {
106
- this.dynamicProps.set(key, value);
336
+ if (declaredNames.has(key))
337
+ continue;
338
+ // Stryker disable next-line ConditionalExpression,LogicalOperator,StringLiteral: __node_id/__node_name are "_"-prefixed, so removing this explicit skip routes them to _internalProps anyway — never into dynamicProps or serialize() (equivalent).
339
+ if (key === "__node_id" || key === "__node_name")
340
+ continue;
341
+ if (key.startsWith("_")) {
342
+ this._internalProps.set(key, value);
343
+ }
344
+ else {
345
+ this.dynamicProps.set(key, coerceToSlotType(value, this.dynamicSlotMeta.get(key)));
107
346
  }
108
347
  }
109
348
  }
@@ -115,7 +354,7 @@ export class BaseNode {
115
354
  result[name] = this[name];
116
355
  }
117
356
  // Include dynamic properties so round-trip serialization is lossless
118
- if (ctor.isDynamic) {
357
+ if (ctor.supportsDynamicInputs) {
119
358
  for (const [key, value] of this.dynamicProps) {
120
359
  result[key] = value;
121
360
  }
@@ -126,10 +365,20 @@ export class BaseNode {
126
365
  this.assign(data);
127
366
  }
128
367
  setDynamic(key, value) {
129
- this.dynamicProps.set(key, value);
368
+ if (key.startsWith("_")) {
369
+ this._internalProps.set(key, value);
370
+ }
371
+ else {
372
+ this.dynamicProps.set(key, coerceToSlotType(value, this.dynamicSlotMeta.get(key)));
373
+ }
130
374
  }
131
375
  getDynamic(key) {
132
- return this.dynamicProps.get(key);
376
+ const store = key.startsWith("_") ? this._internalProps : this.dynamicProps;
377
+ return store.get(key);
378
+ }
379
+ /** Declared types of this instance's dynamic slots, keyed by slot name. */
380
+ getDynamicSlots() {
381
+ return this.dynamicSlotMeta;
133
382
  }
134
383
  async initialize() { }
135
384
  async preProcess() { }
@@ -145,25 +394,54 @@ export class BaseNode {
145
394
  const ctor = this.constructor;
146
395
  return ctor.validateProperties(this.serialize(), {
147
396
  connectedHandles: options.connectedHandles,
148
- nodeId: options.nodeId ?? (this.__node_id || undefined)
397
+ nodeId: options.nodeId ?? (this.__node_id || undefined),
398
+ dynamicSlots: options.dynamicSlots ??
399
+ (this.dynamicSlotMeta.size > 0
400
+ ? Object.fromEntries(this.dynamicSlotMeta)
401
+ : undefined),
402
+ dynamicValues: options.dynamicValues ?? Object.fromEntries(this.dynamicProps)
149
403
  });
150
404
  }
151
405
  async *genProcess(context) {
152
406
  yield await this.process(context);
153
407
  }
154
408
  /**
155
- * Resolve requiredSettings from the context's secret store and inject
156
- * them as `inputs._secrets` so node process() can access API keys.
409
+ * Trigger entry point — called instead of `genProcess()` when the run
410
+ * carries a `trigger_event` for this node (see the `isTrigger` static).
411
+ * The default maps the keys of an object payload onto this node's
412
+ * declared output slots and drops everything else. Trigger subclasses
413
+ * override this to shape their adapter payloads (webhook envelope,
414
+ * synthesized tick, file-watch event) onto their specific slots.
157
415
  */
158
- async _injectSecrets(inputs, context) {
416
+ async emitTriggerEvent(event, outputs) {
417
+ const ctor = this.constructor;
418
+ const declared = ctor.metadataOutputTypes ?? ctor.getDeclaredOutputs();
419
+ const payload = event.payload;
420
+ if (!isRecord(payload)) {
421
+ return;
422
+ }
423
+ for (const [key, value] of Object.entries(payload)) {
424
+ if (key in declared) {
425
+ await outputs.emit(key, value);
426
+ }
427
+ }
428
+ }
429
+ /**
430
+ * Resolve requiredSettings from the context's secret store. Returns an
431
+ * empty record when nothing is required or nothing resolves.
432
+ */
433
+ async _resolveSecrets(context) {
159
434
  const ctor = this.constructor;
160
435
  const required = ctor.requiredSettings;
436
+ // Stryker disable next-line EqualityOperator,ConditionalExpression: the `required.length === 0` arm is a redundant fast-path — an empty requiredSettings list runs the loop zero times and returns an empty map, so mutating this comparison is equivalent (the `!required` arm is covered by the no-requiredSettings test).
161
437
  if (!required || required.length === 0) {
162
- return inputs;
438
+ return {};
163
439
  }
164
440
  if (!context) {
165
- console.warn(`[_injectSecrets] No context for ${ctor.nodeType}, required: ${required.join(", ")}`);
166
- return inputs;
441
+ console.warn(
442
+ // Stryker disable next-line StringLiteral: operator diagnostic text only.
443
+ `[_resolveSecrets] No context for ${ctor.nodeType}, required: ${required.join(", ")}`);
444
+ return {};
167
445
  }
168
446
  const secrets = {};
169
447
  for (const key of required) {
@@ -172,9 +450,20 @@ export class BaseNode {
172
450
  secrets[key] = value;
173
451
  }
174
452
  else {
175
- console.warn(`[_injectSecrets] Secret "${key}" not found for ${ctor.nodeType}`);
453
+ console.warn(
454
+ // Stryker disable next-line StringLiteral: operator diagnostic text only.
455
+ `[_resolveSecrets] Secret "${key}" not found for ${ctor.nodeType}`);
176
456
  }
177
457
  }
458
+ return secrets;
459
+ }
460
+ /**
461
+ * Resolve requiredSettings from the context's secret store and inject
462
+ * them as `inputs._secrets` so node process() can access API keys.
463
+ */
464
+ async _injectSecrets(inputs, context) {
465
+ const secrets = await this._resolveSecrets(context);
466
+ // Stryker disable next-line ConditionalExpression: short-circuits an empty secrets map; emitting `_secrets: {}` instead is indistinguishable through the _secrets getter, which coalesces undefined and {} alike (equivalent).
178
467
  if (Object.keys(secrets).length === 0)
179
468
  return inputs;
180
469
  return {
@@ -194,8 +483,10 @@ export class BaseNode {
194
483
  process: async (inputs, context) => {
195
484
  const merged = await this._injectSecrets(inputs, context);
196
485
  const { _secrets, _control_context, ...props } = merged;
486
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it — getDynamic returns undefined either way and the getters coalesce to {} (equivalent).
197
487
  if (_secrets)
198
488
  this.setDynamic("_secrets", _secrets);
489
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it (equivalent).
199
490
  if (_control_context)
200
491
  this.setDynamic("_control_context", _control_context);
201
492
  this.assign(props);
@@ -204,40 +495,59 @@ export class BaseNode {
204
495
  genProcess: async function* (inputs, context) {
205
496
  const merged = await this._injectSecrets(inputs, context);
206
497
  const { _secrets, _control_context, ...props } = merged;
498
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it — getDynamic returns undefined either way and the getters coalesce to {} (equivalent).
207
499
  if (_secrets)
208
500
  this.setDynamic("_secrets", _secrets);
501
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it (equivalent).
209
502
  if (_control_context)
210
503
  this.setDynamic("_control_context", _control_context);
211
504
  this.assign(props);
212
505
  yield* this.genProcess(context);
213
506
  }.bind(this),
507
+ // Live parameter path: assign() only touches the supplied declared
508
+ // properties, so a running run() loop that reads `this.<prop>` per
509
+ // chunk sees the new value on its next chunk.
510
+ applyProperties: (properties) => this.assign(properties),
511
+ appendStaticInputs: this.constructor
512
+ .appendStaticInputs,
214
513
  preProcess: () => this.preProcess(),
215
514
  finalize: () => this.finalize(),
216
- initialize: () => this.initialize()
515
+ initialize: () => this.initialize(),
516
+ emitTriggerEvent: (event, outputs) => this.emitTriggerEvent(event, outputs)
217
517
  };
218
518
  if (this.run) {
219
- executor.run = async (inputs, outputs, context) => this.run(inputs, outputs, context);
519
+ executor.run = async (inputs, outputs, context) => {
520
+ // run() receives StreamingInputs rather than a property bag, so
521
+ // secrets can't ride along on the inputs — store them on the
522
+ // instance so this._secrets works inside run() like in process().
523
+ // Always overwrite so secrets from a previous execution can't leak into
524
+ // a later run() call on the same instance.
525
+ this.setDynamic("_secrets", await this._resolveSecrets(context));
526
+ return this.run(inputs, outputs, context);
527
+ };
220
528
  }
221
529
  return executor;
222
530
  }
223
531
  static toDescriptor(id) {
224
- const cls = this;
225
- const propertyTypes = Object.fromEntries(cls
226
- .getDeclaredProperties()
532
+ const propertyTypes = Object.fromEntries(this.getDeclaredProperties()
227
533
  .map((entry) => [entry.name, entry.options.type]));
228
534
  const desc = {
229
- id: id ?? cls.nodeType,
230
- type: cls.nodeType,
231
- name: cls.title,
232
- is_streaming_input: cls.isStreamingInput,
233
- is_streaming_output: cls.isStreamingOutput,
234
- sync_mode: cls.syncMode,
235
- is_controlled: cls.isControlled
535
+ id: id ?? this.nodeType,
536
+ type: this.nodeType,
537
+ name: this.title,
538
+ is_streaming_input: this.isStreamingInput,
539
+ is_streaming_output: hasStreamingOutput(this),
540
+ input_mode: this.inputMode,
541
+ output_correlation: this.outputCorrelation,
542
+ is_controlled: this.isControlled,
543
+ is_join_node: this.isJoinNode || undefined,
544
+ is_trigger: this.isTrigger || undefined,
545
+ retry_safe: this.retrySafe || undefined
236
546
  };
237
547
  if (Object.keys(propertyTypes).length > 0) {
238
548
  desc.propertyTypes = propertyTypes;
239
549
  }
240
- const outputs = cls.getDeclaredOutputs();
550
+ const outputs = this.getDeclaredOutputs();
241
551
  if (Object.keys(outputs).length > 0) {
242
552
  desc.outputs = outputs;
243
553
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-node.js","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-node.js","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EACL,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAiBzB,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,YAAoB;IAEpB,yEAAyE;IACzE,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,YAAY;IACZ,IACE,QAAQ,CAAC,KAAK,CAAC;QACf,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;QACjC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAC3B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,IACE,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAChC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AAEH,+DAA+D;AAC/D,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,IAAiC;IAEjC,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,GAAY;IAEZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAmKD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAA0B,EAAW,EAAE;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;IAC5B;IACE,wIAAwI;IACxI,CAAC,CAAC,KAAK,EAAE,UAAU;QACnB,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,SAAS,CAAC,UAAU,EAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,OAAgB,QAAQ;IAC5B,MAAM,CAAU,QAAQ,GAAW,EAAE,CAAC;IACtC,MAAM,CAAU,KAAK,GAAW,EAAE,CAAC;IACnC,MAAM,CAAU,WAAW,GAAW,EAAE,CAAC;IACzC,MAAM,CAAU,MAAM,GAAuB,SAAS,CAAC;IACvD;;;;;OAKG;IACH,MAAM,CAAU,IAAI,GAAuB,SAAS,CAAC;IAErD,MAAM,CAAU,iBAAiB,GAA0B,SAAS,CAAC;IACrE,MAAM,CAAU,YAAY,GAAyB,SAAS,CAAC;IAC/D,MAAM,CAAU,WAAW,GAAyB,SAAS,CAAC;IAC9D,MAAM,CAAU,gBAAgB,GAAyB,SAAS,CAAC;IACnE,MAAM,CAAU,gBAAgB,GAAyB,SAAS,CAAC;IACnE,MAAM,CAAU,gBAAgB,GAAY,KAAK,CAAC;IAClD;;;;;;;;;;OAUG;IACH,MAAM,CAAU,qBAAqB,GAErB,SAAS,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,MAAM,CAAU,mBAAmB,GAInB,SAAS,CAAC;IAC1B;;;;;;;;OAQG;IACH,MAAM,CAAU,SAAS,GAAY,KAAK,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAU,uBAAuB,GAAY,KAAK,CAAC;IACzD,MAAM,CAAU,SAAS,GAA0B,SAAS,CAAC;IAC7D,MAAM,CAAU,iBAAiB,GAEjB,SAAS,CAAC;IAC1B,MAAM,CAAU,qBAAqB,GAAY,KAAK,CAAC;IACvD;;;;OAIG;IACH,MAAM,CAAU,uBAAuB,GACrC,SAAS,CAAC;IACZ,MAAM,CAAU,YAAY,GAAY,KAAK,CAAC;IAC9C;;;;OAIG;IACH,MAAM,CAAU,UAAU,GAAY,KAAK,CAAC;IAC5C,MAAM,CAAU,sBAAsB,GAAwB,SAAS,CAAC;IACxE,MAAM,CAAU,aAAa,GAAY,KAAK,CAAC;IAC/C;;;;;;;OAOG;IACH,MAAM,CAAU,SAAS,GAAY,KAAK,CAAC;IAC3C;;;;;;OAMG;IACH,MAAM,CAAU,kBAAkB,GAAsB,EAAE,CAAC;IAC3D;;;;;;;;;OASG;IACH,MAAM,CAAU,QAAQ,GAAmC,SAAS,CAAC;IACrE;;;;;;;;;;;OAWG;IACH,MAAM,CAAU,MAAM,GAAe,UAAU,CAAC;IAChD;;;;;OAKG;IACH,MAAM,CAAU,aAAa,GAAuB,SAAS,CAAC;IAC9D,MAAM,CAAU,UAAU,GAA0B,SAAS,CAAC;IAC9D;;;;OAIG;IACH,MAAM,CAAU,SAAS,GAAoC,SAAS,CAAC;IACvE;;;;OAIG;IACH,MAAM,CAAU,WAAW,GAAwB,SAAS,CAAC;IAC7D,MAAM,CAAU,UAAU,GAAY,KAAK,CAAC;IAC5C;;;OAGG;IACH,MAAM,CAAU,MAAM,GAAwB,SAAS,CAAC;IACxD,MAAM,CAAU,UAAU,GAAuB,SAAS,CAAC;IAC3D,MAAM,CAAU,mBAAmB,GACjC,SAAS,CAAC;IACZ,MAAM,CAAU,WAAW,GAAwB,EAAE,CAAC;IAEtD,SAAS,GAAG,EAAE,CAAC;IACf,WAAW,GAAG,EAAE,CAAC;IAEP,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEpD;;;;;OAKG;IACO,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE/D;;;;;;OAMG;IACK,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEpD,YAAY,UAAU,GAA4B,EAAE;QAClD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAmC,EACnC,OAAO,GAA0B,EAAE;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAC1C,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC1C,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,qEAAqE;YACrE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,SAAS,GAA4B,EAAE,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5C,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACrC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;QACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE;YAClD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY;YACZ,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,UAAmC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,WAA8B,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE9C,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzC,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;gBACtD,qEAAqE;gBACrE,mDAAmD;gBACnD,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS,EAC9B,CAAC;gBACD,qEAAqE;gBACpE,IAAgC,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAC5D,UAAU,CAAC,IAAI,CAAC,EAChB,OAAO,CAAC,IAAI,CACb,CAAC;YACJ,CAAC;iBAAM,IACJ,IAAgC,CAAC,IAAI,CAAC,KAAK,SAAS;gBACrD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EACxD,CAAC;gBACD,4DAA4D;gBAC5D,kEAAkE;gBAClE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC3B,IAAgC,CAAC,IAAI,CAAC;oBACrC,gRAAgR;oBAChR,YAAY,CAAC,GAAG,CAAC;wBACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBACjC,CAAC,CAAC,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,uEAAuE;QACvE,6EAA6E;QAC7E,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,0EAA0E;YAC1E,2DAA2D;YAC3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC/B,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACrC,oPAAoP;gBACpP,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa;oBAAE,SAAS;gBAC3D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,GAAG,EACH,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACvD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,WAA8B,CAAC;QACjD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,GAAI,IAAgC,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,IAA6B;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAc;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,GAAG,EACH,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,UAAU,CAAc,GAAW;QACjC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;IACzC,CAAC;IAED,2EAA2E;IAC3E,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,KAAmB,CAAC;IACpC,KAAK,CAAC,UAAU,KAAmB,CAAC;IACpC,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CACN,OAAO,GAA0B,EAAE;QAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAA8B,CAAC;QACjD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YAC/C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;YACvD,YAAY,EACV,OAAO,CAAC,YAAY;gBACpB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC;oBAC5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;oBAC1C,CAAC,CAAC,SAAS,CAAC;YAChB,aAAa,EACX,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,CAAC,UAAU,CACf,OAA2B;QAE3B,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAcD;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CACpB,KAAmB,EACnB,OAAyB;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAA8B,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,OAAkC,CACnC,EAAE,CAAC;YACF,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;gBACpB,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAC3B,OAA2B;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,WAA8B,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,6TAA6T;QAC7T,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI;YACV,0EAA0E;YAC1E,oCAAoC,IAAI,CAAC,QAAQ,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI;gBACV,0EAA0E;gBAC1E,6BAA6B,GAAG,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CACnE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc,CAC1B,MAA+B,EAC/B,OAA2B;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACpD,+NAA+N;QAC/N,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QACrD,OAAO;YACL,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,CAAE,MAAM,CAAC,QAAmC,IAAI,EAAE,CAAC;gBACtD,GAAG,OAAO;aACX;SACF,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAyB,UAAU,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC;IAED,UAAU;QACR,MAAM,QAAQ,GAAiB;YAC7B,OAAO,EAAE,KAAK,EACZ,MAA+B,EAC/B,OAA2B,EAC3B,EAAE;gBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;gBACxD,iNAAiN;gBACjN,IAAI,QAAQ;oBAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACpD,wIAAwI;gBACxI,IAAI,gBAAgB;oBAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;gBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YACD,UAAU,EAAE,KAAK,SAAS,CAAC,EAEzB,MAA+B,EAC/B,OAA2B;gBAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;gBACxD,iNAAiN;gBACjN,IAAI,QAAQ;oBAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACpD,wIAAwI;gBACxI,IAAI,gBAAgB;oBAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;gBAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnB,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,IAAI,CAA+B;YAC1C,mEAAmE;YACnE,mEAAmE;YACnE,8CAA8C;YAC9C,eAAe,EAAE,CAAC,UAAmC,EAAE,EAAE,CACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACzB,kBAAkB,EAAG,IAAI,CAAC,WAA+B;iBACtD,kBAAkB;YACrB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YACnC,gBAAgB,EAAE,CAAC,KAAmB,EAAE,OAAyB,EAAE,EAAE,CACnE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;SACxC,CAAC;QACF,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,GAAG,KAAK,EAClB,MAAuB,EACvB,OAAyB,EACzB,OAA2B,EAC3B,EAAE;gBACF,gEAAgE;gBAChE,6DAA6D;gBAC7D,kEAAkE;gBAClE,wEAAwE;gBACxE,2CAA2C;gBAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC,GAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,EAAW;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,IAAI,CAAC,qBAAqB,EAAE;aACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;QACF,MAAM,IAAI,GAAmB;YAC3B,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;YACzC,mBAAmB,EAAE,kBAAkB,CAAC,IAAI,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;YAC1C,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;YAC1C,UAAU,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;YACvC,UAAU,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;SACxC,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACrC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Convert a node className (e.g. "GPT_4_1_Nano", "StableDiffusionXL",
3
+ * "Ideogram_V3_Balanced") into a human-readable title shown in the node
4
+ * menu.
5
+ *
6
+ * Rules:
7
+ * - "_" is treated as a word separator (so "Imagen_4_Ultra" yields three
8
+ * chunks: "Imagen", "4", "Ultra").
9
+ * - camelCase / PascalCase boundaries are split, while uppercase runs are
10
+ * kept together — so "StableDiffusionXL" becomes "Stable Diffusion XL"
11
+ * rather than "Stable Diffusion X L", and "SDXL_Ad_Inpaint" stays as
12
+ * "SDXL Ad Inpaint" rather than "S D X L Ad Inpaint".
13
+ * - Consecutive purely-numeric tokens are joined with a "." — this
14
+ * reconstructs the version numbers in the original model slugs (so
15
+ * "GPT_4_1_Nano" → "GPT 4.1 Nano", "Flux_1_1_Pro_Ultra" →
16
+ * "Flux 1.1 Pro Ultra", "Veo_3_1_Lite" → "Veo 3.1 Lite").
17
+ *
18
+ * @example
19
+ * classNameToTitle("GPT_4_1_Nano") // "GPT 4.1 Nano"
20
+ * classNameToTitle("Imagen_4_Ultra") // "Imagen 4 Ultra"
21
+ * classNameToTitle("Ideogram_V3_Balanced") // "Ideogram V3 Balanced"
22
+ * classNameToTitle("StableDiffusionXL") // "Stable Diffusion XL"
23
+ * classNameToTitle("Recraft_20B_SVG") // "Recraft 20B SVG"
24
+ */
25
+ export declare function classNameToTitle(className: string): string;
26
+ //# sourceMappingURL=class-name-to-title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-name-to-title.d.ts","sourceRoot":"","sources":["../src/class-name-to-title.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmC1D"}