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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +34 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/base-node.d.ts +253 -13
  4. package/dist/base-node.d.ts.map +1 -1
  5. package/dist/base-node.js +337 -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 +222 -0
  12. package/dist/code-analysis.d.ts.map +1 -0
  13. package/dist/code-analysis.js +803 -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 +636 -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 +1165 -0
  54. package/dist/graph-validation.js.map +1 -0
  55. package/dist/index.d.ts +27 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +29 -0
  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 +73 -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 +58 -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/package-registry-client.d.ts.map +1 -1
  91. package/dist/package-registry-client.js +15 -6
  92. package/dist/package-registry-client.js.map +1 -1
  93. package/dist/port-types.d.ts +15 -0
  94. package/dist/port-types.d.ts.map +1 -0
  95. package/dist/port-types.js +72 -0
  96. package/dist/port-types.js.map +1 -0
  97. package/dist/pricing-bundle.d.ts +83 -0
  98. package/dist/pricing-bundle.d.ts.map +1 -0
  99. package/dist/pricing-bundle.js +82 -0
  100. package/dist/pricing-bundle.js.map +1 -0
  101. package/dist/pricing-params.d.ts +59 -0
  102. package/dist/pricing-params.d.ts.map +1 -0
  103. package/dist/pricing-params.js +282 -0
  104. package/dist/pricing-params.js.map +1 -0
  105. package/dist/python-package-scan.d.ts +8 -0
  106. package/dist/python-package-scan.d.ts.map +1 -1
  107. package/dist/python-package-scan.js +21 -8
  108. package/dist/python-package-scan.js.map +1 -1
  109. package/dist/registry.d.ts +105 -2
  110. package/dist/registry.d.ts.map +1 -1
  111. package/dist/registry.js +393 -30
  112. package/dist/registry.js.map +1 -1
  113. package/dist/sandbox-bridge-packs.d.ts +39 -0
  114. package/dist/sandbox-bridge-packs.d.ts.map +1 -0
  115. package/dist/sandbox-bridge-packs.js +249 -0
  116. package/dist/sandbox-bridge-packs.js.map +1 -0
  117. package/dist/sandbox-catalog-host.d.ts +31 -0
  118. package/dist/sandbox-catalog-host.d.ts.map +1 -0
  119. package/dist/sandbox-catalog-host.js +78 -0
  120. package/dist/sandbox-catalog-host.js.map +1 -0
  121. package/dist/sandbox-module-catalog.d.ts +14 -0
  122. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  123. package/dist/sandbox-module-catalog.js +402 -0
  124. package/dist/sandbox-module-catalog.js.map +1 -0
  125. package/dist/sandbox-npm-artifacts.d.ts +56 -0
  126. package/dist/sandbox-npm-artifacts.d.ts.map +1 -0
  127. package/dist/sandbox-npm-artifacts.js +17 -0
  128. package/dist/sandbox-npm-artifacts.js.map +1 -0
  129. package/dist/sandbox-pack-discovery.d.ts +93 -0
  130. package/dist/sandbox-pack-discovery.d.ts.map +1 -0
  131. package/dist/sandbox-pack-discovery.js +807 -0
  132. package/dist/sandbox-pack-discovery.js.map +1 -0
  133. package/dist/search.d.ts +29 -1
  134. package/dist/search.d.ts.map +1 -1
  135. package/dist/search.js +136 -9
  136. package/dist/search.js.map +1 -1
  137. package/dist/type-compat.d.ts +36 -0
  138. package/dist/type-compat.d.ts.map +1 -0
  139. package/dist/type-compat.js +98 -0
  140. package/dist/type-compat.js.map +1 -0
  141. package/dist/type-predicates.d.ts +25 -0
  142. package/dist/type-predicates.d.ts.map +1 -0
  143. package/dist/type-predicates.js +31 -0
  144. package/dist/type-predicates.js.map +1 -0
  145. package/dist/validation.d.ts +18 -0
  146. package/dist/validation.d.ts.map +1 -1
  147. package/dist/validation.js +70 -11
  148. package/dist/validation.js.map +1 -1
  149. package/dist/workflow-document-tools.d.ts +34 -0
  150. package/dist/workflow-document-tools.d.ts.map +1 -0
  151. package/dist/workflow-document-tools.js +357 -0
  152. package/dist/workflow-document-tools.js.map +1 -0
  153. package/dist/workflow-interface.d.ts +62 -0
  154. package/dist/workflow-interface.d.ts.map +1 -0
  155. package/dist/workflow-interface.js +351 -0
  156. package/dist/workflow-interface.js.map +1 -0
  157. package/package.json +67 -10
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,209 @@ 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
+ * Marks a trigger node. Triggers compile to `trigger_registrations` on
115
+ * workflow activation, and when a run starts because of a delivered event
116
+ * (`RunJobRequest.trigger_event` targeting this node) the kernel calls
117
+ * {@link emitTriggerEvent} instead of the live-listening `genProcess`
118
+ * loop. Runs without a trigger event keep today's streaming behavior
119
+ * (in-editor live test). See
120
+ * docs/superpowers/specs/2026-07-10-trigger-wakeup-redesign.md.
121
+ */
122
+ static isTrigger = false;
123
+ /**
124
+ * Emit output_update for this node's handles even when they are connected
125
+ * onward. The runner suppresses output_update for connected handles by
126
+ * default; nodes whose updates feed a UI surface regardless of patching
127
+ * (e.g. the realtime audio monitor) opt in.
128
+ */
129
+ static alwaysEmitOutputUpdates = false;
130
+ static inputMode = undefined;
131
+ static outputCorrelation = undefined;
132
+ static supportsDynamicInputs = false;
133
+ /**
134
+ * Restricts the types a user may pick when declaring a dynamic input slot on
135
+ * this node (see `Node.dynamic_inputs`). Unset means the full type palette.
136
+ * Emitted as `allowed_dynamic_slot_types` in node metadata.
137
+ */
138
+ static allowedDynamicSlotTypes = undefined;
34
139
  static isControlled = false;
35
- static exposeAsTool = undefined;
140
+ /**
141
+ * `Zip` and `Cross` set this to true so static correlation analysis allows
142
+ * incomparable input scopes on these nodes only. See
143
+ * docs/correlation-design.md §7.
144
+ */
145
+ static isJoinNode = false;
36
146
  static supportsDynamicOutputs = undefined;
37
147
  static autoSaveAsset = false;
148
+ /**
149
+ * Whether re-running this node with identical inputs is safe. An opt-in:
150
+ * unknown means unsafe. Cost tracking cannot see external writes — a
151
+ * Publish/Upsert/Notify node can complete its side effect and then throw,
152
+ * recording nothing — so a node nobody classified loses a safe retry rather
153
+ * than gaining an unsafe one. The workflow supervisor offers `retry` only
154
+ * for a node that declares this. See docs/workflow-supervisor-design.md §5.3.
155
+ */
156
+ static retrySafe = false;
157
+ /**
158
+ * Per-type cache lifetime for partial runs ("Run Node", "Run from here", "Run
159
+ * selected"). Only consulted for Computed nodes (Constants are always live;
160
+ * Generatives reuse generation history). `"forever"` = pure deterministic
161
+ * (reuse while inputs match); a finite number = seconds the cached result
162
+ * stays fresh before re-running (time-sensitive, e.g. a web fetch);
163
+ * unset / `0` = never reuse. `"forever"` is a string sentinel — never
164
+ * `Infinity`, which JSON-serializes to `null` and would silently flip a pure
165
+ * node to never-cache. See docs/superpowers/specs/2026-06-27-run-subgraph-caching.md §4.
166
+ */
167
+ static cacheTtl = undefined;
168
+ /**
169
+ * What running this node does to the world, which decides whether a reactive
170
+ * run (a slider drag, an input change in a mini app) may execute it without
171
+ * an explicit action:
172
+ * "pure" — output depends only on inputs; safe to re-run at any rate
173
+ * "read" — reads external state but changes nothing
174
+ * "write" — mutates state the user can observe (a file, a document)
175
+ * "external" — leaves the system (sends mail, calls a paid API)
176
+ * Reactive runs traverse "pure" and "read" only. The default is the
177
+ * conservative "external", so a node nobody has classified never fires off a
178
+ * slider drag. `cacheTtl: "forever"` implies "pure".
179
+ */
180
+ static effect = "external";
181
+ /**
182
+ * Names the output slot that carries this node's "primary" generation — the
183
+ * value persisted as its saved generation and previewed by the content card.
184
+ * Unset falls back to the first declared output. See `auto_save_asset` and the
185
+ * autosave path in the websocket runner.
186
+ */
187
+ static primaryOutput = undefined;
38
188
  static modelPacks = undefined;
189
+ /**
190
+ * Deployment platforms this node supports. Defaults to ["node"]; nodes
191
+ * that work in V8 isolates should claim "workers" and/or "edge"
192
+ * explicitly. See `@nodetool-ai/protocol`'s Platform type.
193
+ */
194
+ static platforms = undefined;
195
+ /**
196
+ * Requires a WebGPU device in the browser (set via `tagAsBrowserGpu`). The
197
+ * in-browser runner routes graphs with these nodes to the server when
198
+ * `navigator.gpu` is unavailable. Unset/undefined means no GPU requirement.
199
+ */
200
+ static requiresGpu = undefined;
201
+ static deprecated = false;
202
+ /**
203
+ * Hidden from node-discovery UIs but still registered/runnable (see the
204
+ * `hidden` field on NodeClass). Unset/false means normally discoverable.
205
+ */
206
+ static hidden = undefined;
207
+ static replacedBy = undefined;
39
208
  static metadataOutputTypes = undefined;
40
209
  static outputTypes = {};
41
210
  __node_id = "";
42
211
  __node_name = "";
43
212
  dynamicProps = new Map();
213
+ /**
214
+ * Typed declarations for the dynamic slots of this node instance, injected by
215
+ * the registry as the `_dynamic_inputs` framework property. `dynamicProps`
216
+ * holds the values; this holds the types. A slot missing here is an untyped
217
+ * legacy slot and behaves exactly as before typed slots existed.
218
+ */
219
+ dynamicSlotMeta = new Map();
220
+ /**
221
+ * Framework-injected internals (resolved `_secrets`, the `_control_context`,
222
+ * …). Kept separate from `dynamicProps` so reserved `_`-prefixed values never
223
+ * leak into user-facing dynamic-input iteration (prompt template vars, API
224
+ * args) or into `serialize()`. Read/written through getDynamic/setDynamic,
225
+ * which route `_`-prefixed keys here.
226
+ */
227
+ _internalProps = new Map();
44
228
  constructor(properties = {}) {
45
229
  this.assign(properties);
46
230
  }
@@ -65,11 +249,26 @@ export class BaseNode {
65
249
  * need to: declarative `@prop` metadata is enough.
66
250
  */
67
251
  static validateProperties(properties, options = {}) {
68
- const cls = this;
69
- return validateNodeProperties(cls.getDeclaredProperties(), properties, {
252
+ const declared = this.getDeclaredProperties();
253
+ const dynamicSlots = options.dynamicSlots;
254
+ let dynamicValues = options.dynamicValues;
255
+ if (dynamicSlots && !dynamicValues) {
256
+ // No explicit value bag — dynamic values ride along in `properties`.
257
+ const declaredNames = new Set(declared.map((p) => p.name));
258
+ const collected = {};
259
+ for (const key of Object.keys(dynamicSlots)) {
260
+ if (declaredNames.has(key))
261
+ continue;
262
+ collected[key] = properties[key];
263
+ }
264
+ dynamicValues = collected;
265
+ }
266
+ return validateNodeProperties(declared, properties, {
70
267
  connectedHandles: options.connectedHandles,
71
268
  nodeId: options.nodeId,
72
- nodeType: cls.nodeType
269
+ nodeType: this.nodeType,
270
+ dynamicSlots,
271
+ dynamicValues
73
272
  });
74
273
  }
75
274
  assign(properties) {
@@ -83,7 +282,10 @@ export class BaseNode {
83
282
  }
84
283
  const declaredNames = new Set(declared.map((p) => p.name));
85
284
  for (const { name, options } of declared) {
86
- if (Object.prototype.hasOwnProperty.call(properties, name)) {
285
+ if (Object.prototype.hasOwnProperty.call(properties, name) &&
286
+ // An explicit `undefined` means "absent", same as omitting the key —
287
+ // it must not suppress the declared default below.
288
+ properties[name] !== undefined) {
87
289
  // Explicit value provided — use it (auto-wrap scalars into list[T]).
88
290
  this[name] = coerceToDeclaredType(properties[name], options.type);
89
291
  }
@@ -93,17 +295,34 @@ export class BaseNode {
93
295
  // Deep-copy mutable defaults so instances don't share references.
94
296
  const def = options.default;
95
297
  this[name] =
96
- def !== null && typeof def === "object"
298
+ // 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).
299
+ isObjectLike(def)
97
300
  ? JSON.parse(JSON.stringify(def))
98
301
  : def;
99
302
  }
100
303
  }
101
- // For dynamic nodes, store undeclared properties in dynamicProps
102
- if (ctor.isDynamic) {
103
- const skip = new Set(["__node_id", "__node_name", "_secrets"]);
304
+ // For dynamic nodes, store undeclared properties. Reserved, framework-
305
+ // injected keys (anything `_`-prefixed, e.g. `_secrets`, `_control_context`)
306
+ // are routed to `_internalProps` instead of `dynamicProps` so they never
307
+ // leak into user-facing dynamic-input iteration or `serialize()`.
308
+ if (ctor.supportsDynamicInputs) {
309
+ // Slot declarations arrive before the values are stored so the values can
310
+ // be coerced against their declared type in the same pass.
311
+ const slots = parseDynamicSlots(properties._dynamic_inputs);
312
+ if (slots) {
313
+ this.dynamicSlotMeta = slots;
314
+ }
104
315
  for (const [key, value] of Object.entries(properties)) {
105
- if (!declaredNames.has(key) && !skip.has(key)) {
106
- this.dynamicProps.set(key, value);
316
+ if (declaredNames.has(key))
317
+ continue;
318
+ // 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).
319
+ if (key === "__node_id" || key === "__node_name")
320
+ continue;
321
+ if (key.startsWith("_")) {
322
+ this._internalProps.set(key, value);
323
+ }
324
+ else {
325
+ this.dynamicProps.set(key, coerceToSlotType(value, this.dynamicSlotMeta.get(key)));
107
326
  }
108
327
  }
109
328
  }
@@ -115,7 +334,7 @@ export class BaseNode {
115
334
  result[name] = this[name];
116
335
  }
117
336
  // Include dynamic properties so round-trip serialization is lossless
118
- if (ctor.isDynamic) {
337
+ if (ctor.supportsDynamicInputs) {
119
338
  for (const [key, value] of this.dynamicProps) {
120
339
  result[key] = value;
121
340
  }
@@ -126,10 +345,20 @@ export class BaseNode {
126
345
  this.assign(data);
127
346
  }
128
347
  setDynamic(key, value) {
129
- this.dynamicProps.set(key, value);
348
+ if (key.startsWith("_")) {
349
+ this._internalProps.set(key, value);
350
+ }
351
+ else {
352
+ this.dynamicProps.set(key, coerceToSlotType(value, this.dynamicSlotMeta.get(key)));
353
+ }
130
354
  }
131
355
  getDynamic(key) {
132
- return this.dynamicProps.get(key);
356
+ const store = key.startsWith("_") ? this._internalProps : this.dynamicProps;
357
+ return store.get(key);
358
+ }
359
+ /** Declared types of this instance's dynamic slots, keyed by slot name. */
360
+ getDynamicSlots() {
361
+ return this.dynamicSlotMeta;
133
362
  }
134
363
  async initialize() { }
135
364
  async preProcess() { }
@@ -145,25 +374,54 @@ export class BaseNode {
145
374
  const ctor = this.constructor;
146
375
  return ctor.validateProperties(this.serialize(), {
147
376
  connectedHandles: options.connectedHandles,
148
- nodeId: options.nodeId ?? (this.__node_id || undefined)
377
+ nodeId: options.nodeId ?? (this.__node_id || undefined),
378
+ dynamicSlots: options.dynamicSlots ??
379
+ (this.dynamicSlotMeta.size > 0
380
+ ? Object.fromEntries(this.dynamicSlotMeta)
381
+ : undefined),
382
+ dynamicValues: options.dynamicValues ?? Object.fromEntries(this.dynamicProps)
149
383
  });
150
384
  }
151
385
  async *genProcess(context) {
152
386
  yield await this.process(context);
153
387
  }
154
388
  /**
155
- * Resolve requiredSettings from the context's secret store and inject
156
- * them as `inputs._secrets` so node process() can access API keys.
389
+ * Trigger entry point — called instead of `genProcess()` when the run
390
+ * carries a `trigger_event` for this node (see the `isTrigger` static).
391
+ * The default maps the keys of an object payload onto this node's
392
+ * declared output slots and drops everything else. Trigger subclasses
393
+ * override this to shape their adapter payloads (webhook envelope,
394
+ * synthesized tick, file-watch event) onto their specific slots.
157
395
  */
158
- async _injectSecrets(inputs, context) {
396
+ async emitTriggerEvent(event, outputs) {
397
+ const ctor = this.constructor;
398
+ const declared = ctor.metadataOutputTypes ?? ctor.getDeclaredOutputs();
399
+ const payload = event.payload;
400
+ if (!isRecord(payload)) {
401
+ return;
402
+ }
403
+ for (const [key, value] of Object.entries(payload)) {
404
+ if (key in declared) {
405
+ await outputs.emit(key, value);
406
+ }
407
+ }
408
+ }
409
+ /**
410
+ * Resolve requiredSettings from the context's secret store. Returns an
411
+ * empty record when nothing is required or nothing resolves.
412
+ */
413
+ async _resolveSecrets(context) {
159
414
  const ctor = this.constructor;
160
415
  const required = ctor.requiredSettings;
416
+ // 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
417
  if (!required || required.length === 0) {
162
- return inputs;
418
+ return {};
163
419
  }
164
420
  if (!context) {
165
- console.warn(`[_injectSecrets] No context for ${ctor.nodeType}, required: ${required.join(", ")}`);
166
- return inputs;
421
+ console.warn(
422
+ // Stryker disable next-line StringLiteral: operator diagnostic text only.
423
+ `[_resolveSecrets] No context for ${ctor.nodeType}, required: ${required.join(", ")}`);
424
+ return {};
167
425
  }
168
426
  const secrets = {};
169
427
  for (const key of required) {
@@ -172,9 +430,20 @@ export class BaseNode {
172
430
  secrets[key] = value;
173
431
  }
174
432
  else {
175
- console.warn(`[_injectSecrets] Secret "${key}" not found for ${ctor.nodeType}`);
433
+ console.warn(
434
+ // Stryker disable next-line StringLiteral: operator diagnostic text only.
435
+ `[_resolveSecrets] Secret "${key}" not found for ${ctor.nodeType}`);
176
436
  }
177
437
  }
438
+ return secrets;
439
+ }
440
+ /**
441
+ * Resolve requiredSettings from the context's secret store and inject
442
+ * them as `inputs._secrets` so node process() can access API keys.
443
+ */
444
+ async _injectSecrets(inputs, context) {
445
+ const secrets = await this._resolveSecrets(context);
446
+ // 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
447
  if (Object.keys(secrets).length === 0)
179
448
  return inputs;
180
449
  return {
@@ -194,8 +463,10 @@ export class BaseNode {
194
463
  process: async (inputs, context) => {
195
464
  const merged = await this._injectSecrets(inputs, context);
196
465
  const { _secrets, _control_context, ...props } = merged;
466
+ // 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
467
  if (_secrets)
198
468
  this.setDynamic("_secrets", _secrets);
469
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it (equivalent).
199
470
  if (_control_context)
200
471
  this.setDynamic("_control_context", _control_context);
201
472
  this.assign(props);
@@ -204,40 +475,57 @@ export class BaseNode {
204
475
  genProcess: async function* (inputs, context) {
205
476
  const merged = await this._injectSecrets(inputs, context);
206
477
  const { _secrets, _control_context, ...props } = merged;
478
+ // 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
479
  if (_secrets)
208
480
  this.setDynamic("_secrets", _secrets);
481
+ // Stryker disable next-line ConditionalExpression: storing an undefined internal is indistinguishable from not storing it (equivalent).
209
482
  if (_control_context)
210
483
  this.setDynamic("_control_context", _control_context);
211
484
  this.assign(props);
212
485
  yield* this.genProcess(context);
213
486
  }.bind(this),
487
+ // Live parameter path: assign() only touches the supplied declared
488
+ // properties, so a running run() loop that reads `this.<prop>` per
489
+ // chunk sees the new value on its next chunk.
490
+ applyProperties: (properties) => this.assign(properties),
214
491
  preProcess: () => this.preProcess(),
215
492
  finalize: () => this.finalize(),
216
- initialize: () => this.initialize()
493
+ initialize: () => this.initialize(),
494
+ emitTriggerEvent: (event, outputs) => this.emitTriggerEvent(event, outputs)
217
495
  };
218
496
  if (this.run) {
219
- executor.run = async (inputs, outputs, context) => this.run(inputs, outputs, context);
497
+ executor.run = async (inputs, outputs, context) => {
498
+ // run() receives StreamingInputs rather than a property bag, so
499
+ // secrets can't ride along on the inputs — store them on the
500
+ // instance so this._secrets works inside run() like in process().
501
+ // Always overwrite so secrets from a previous execution can't leak into
502
+ // a later run() call on the same instance.
503
+ this.setDynamic("_secrets", await this._resolveSecrets(context));
504
+ return this.run(inputs, outputs, context);
505
+ };
220
506
  }
221
507
  return executor;
222
508
  }
223
509
  static toDescriptor(id) {
224
- const cls = this;
225
- const propertyTypes = Object.fromEntries(cls
226
- .getDeclaredProperties()
510
+ const propertyTypes = Object.fromEntries(this.getDeclaredProperties()
227
511
  .map((entry) => [entry.name, entry.options.type]));
228
512
  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
513
+ id: id ?? this.nodeType,
514
+ type: this.nodeType,
515
+ name: this.title,
516
+ is_streaming_input: this.isStreamingInput,
517
+ is_streaming_output: hasStreamingOutput(this),
518
+ input_mode: this.inputMode,
519
+ output_correlation: this.outputCorrelation,
520
+ is_controlled: this.isControlled,
521
+ is_join_node: this.isJoinNode || undefined,
522
+ is_trigger: this.isTrigger || undefined,
523
+ retry_safe: this.retrySafe || undefined
236
524
  };
237
525
  if (Object.keys(propertyTypes).length > 0) {
238
526
  desc.propertyTypes = propertyTypes;
239
527
  }
240
- const outputs = cls.getDeclaredOutputs();
528
+ const outputs = this.getDeclaredOutputs();
241
529
  if (Object.keys(outputs).length > 0) {
242
530
  desc.outputs = outputs;
243
531
  }
@@ -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":"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"}
@@ -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"}