@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/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @nodetool-ai/node-sdk
2
+
3
+ The node authoring SDK: `BaseNode`, the `@prop` decorator, `NodeRegistry`, the
4
+ type system, and node metadata/validation.
5
+
6
+ ## Responsibilities
7
+
8
+ - `BaseNode` — base class all workflow nodes extend.
9
+ - `@prop` decorator + metadata reflection for declaring typed node properties.
10
+ - `NodeRegistry` — registration and lookup; `createNodeValidator()` for pre-flight
11
+ graph validation.
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import { BaseNode, prop } from "@nodetool-ai/node-sdk";
17
+
18
+ export class MyNode extends BaseNode {
19
+ static readonly nodeType = "my.Node";
20
+ @prop({ type: "str", default: "" }) declare text: string;
21
+ async process() { return { output: this.text }; }
22
+ }
23
+ ```
24
+
25
+ > This package uses decorators and loads from `dist/`. After changing it, run
26
+ > `npm run build:packages` before `npm run dev`.
27
+
28
+ ## Develop
29
+
30
+ ```bash
31
+ npm run build --workspace=packages/node-sdk
32
+ npm run test --workspace=packages/node-sdk
33
+ npm run lint --workspace=packages/node-sdk
34
+ ```
@@ -0,0 +1 @@
1
+ 2026-10-07T23:09:25.421Z
@@ -1,7 +1,28 @@
1
- import type { NodeDescriptor, SyncMode } from "@nodetool-ai/protocol";
2
- import type { NodeExecutor } from "@nodetool-ai/kernel";
3
- import type { ProcessingContext, StreamingInputs, StreamingOutputs } from "@nodetool-ai/runtime";
1
+ import type { DynamicSlotMeta, InputMode, NodeDescriptor, NodeEffect, OutputCorrelation, Platform } from "@nodetool-ai/protocol";
2
+ import type { DerivedDynamicSlots, NodeExecutor } from "@nodetool-ai/kernel";
3
+ import type { ProcessingContext, StreamingInputs, StreamingOutputs, TriggerEvent } from "@nodetool-ai/runtime";
4
+ import type { TypeMetadata } from "./metadata.js";
4
5
  import { type NodePropertyValidationIssue } from "./validation.js";
6
+ /**
7
+ * Coerce an incoming property value to fit the declared type.
8
+ *
9
+ * The only coercion today: when the declared type is `list[T]` and the
10
+ * value is a non-null scalar (not an array), wrap it in a one-element
11
+ * array. This lets a single upstream value flow into a list-typed input
12
+ * (e.g. a single Image into a `list[image]` slot) without a manual
13
+ * wrapper node.
14
+ */
15
+ /** A URI string promoted to the tagged asset reference its slot declares. */
16
+ export interface CoercedAssetRef {
17
+ type: string;
18
+ uri: string;
19
+ }
20
+ export declare function coerceToDeclaredType<TValue>(value: TValue, declaredType: string): TValue | TValue[] | CoercedAssetRef;
21
+ /**
22
+ * Coerce a value against a typed dynamic slot's declared type. Slots with no
23
+ * resolvable type string pass the value through untouched (legacy `any` slot).
24
+ */
25
+ export declare function coerceToSlotType<TValue>(value: TValue, slot: DynamicSlotMeta | undefined): TValue | TValue[] | CoercedAssetRef;
5
26
  export interface DeclaredOutputTypes {
6
27
  [name: string]: string;
7
28
  }
@@ -14,6 +35,17 @@ export interface NodeValidationOptions {
14
35
  connectedHandles?: ReadonlySet<string> | ReadonlyArray<string>;
15
36
  /** Node id to attach to issues. Defaults to the node's __node_id. */
16
37
  nodeId?: string;
38
+ /**
39
+ * Typed dynamic input slot declarations for this node instance
40
+ * (`Node.dynamic_inputs`). Slots absent from this map are untyped legacy
41
+ * slots and are never validated.
42
+ */
43
+ dynamicSlots?: Record<string, DynamicSlotMeta>;
44
+ /**
45
+ * Inline values of the dynamic properties (`Node.dynamic_properties`).
46
+ * Defaults to the dynamic entries of `properties` when omitted.
47
+ */
48
+ dynamicValues?: Record<string, unknown>;
17
49
  }
18
50
  export type NodeClass = {
19
51
  new (properties?: Record<string, unknown>): BaseNode;
@@ -21,19 +53,71 @@ export type NodeClass = {
21
53
  title: string;
22
54
  description: string;
23
55
  layout?: string;
56
+ body?: string;
24
57
  recommendedModels?: unknown[];
25
- basicFields?: string[];
58
+ inlineFields?: string[];
59
+ inputFields?: string[];
26
60
  requiredSettings?: string[];
27
61
  requiredRuntimes?: string[];
28
62
  isStreamingInput: boolean;
29
- isStreamingOutput: boolean;
30
- isDynamic: boolean;
31
- syncMode: SyncMode;
63
+ /**
64
+ * Per-instance override of {@link isStreamingInput}. See
65
+ * `BaseNode.resolveStreamingInput`.
66
+ */
67
+ resolveStreamingInput?: (node: {
68
+ properties?: Record<string, unknown>;
69
+ }) => boolean;
70
+ /**
71
+ * Dynamic slots derived from the node's own properties. See
72
+ * `BaseNode.resolveDynamicSlots`.
73
+ */
74
+ resolveDynamicSlots?: (node: {
75
+ properties?: Record<string, unknown>;
76
+ }) => DerivedDynamicSlots | undefined;
77
+ isTrigger: boolean;
78
+ alwaysEmitOutputUpdates?: boolean;
79
+ inputMode?: InputMode;
80
+ outputCorrelation?: Record<string, OutputCorrelation>;
81
+ supportsDynamicInputs: boolean;
82
+ /**
83
+ * Types a user may pick for a dynamic input slot on this node. Unset means
84
+ * the full type palette. Surfaced as `allowed_dynamic_slot_types`.
85
+ */
86
+ allowedDynamicSlotTypes?: TypeMetadata[];
32
87
  isControlled: boolean;
33
- exposeAsTool?: boolean;
88
+ isJoinNode: boolean;
34
89
  supportsDynamicOutputs?: boolean;
35
90
  autoSaveAsset: boolean;
91
+ /** Opt-in: re-running with identical inputs is safe. See `BaseNode.retrySafe`. */
92
+ retrySafe: boolean;
93
+ /** List properties that keep their static items when connected. See `BaseNode.appendStaticInputs`. */
94
+ appendStaticInputs?: readonly string[];
95
+ cacheTtl?: number | "forever";
96
+ effect?: NodeEffect;
97
+ primaryOutput?: string;
36
98
  modelPacks?: unknown[];
99
+ /**
100
+ * Deployment platforms this node supports. See `@nodetool-ai/protocol`'s
101
+ * Platform type. Unset is treated as ["node"].
102
+ */
103
+ platforms?: readonly Platform[];
104
+ /**
105
+ * Requires a WebGPU device when run in the browser. The in-browser runner
106
+ * routes graphs containing these nodes to the server (where a GPU is always
107
+ * available via Dawn) when `navigator.gpu` is unavailable, instead of failing
108
+ * the run. Server execution is unaffected. Set via `tagAsBrowserGpu`.
109
+ */
110
+ requiresGpu?: boolean;
111
+ deprecated: boolean;
112
+ /**
113
+ * Hide from node-discovery UIs (palette, search) while keeping the node
114
+ * registered and runnable. Unlike `deprecated` (which down-ranks and badges
115
+ * a still-discoverable node), a hidden node is filtered out of the palette
116
+ * entirely. Used for internal nodes the user never adds by hand. Set via a
117
+ * `static readonly hidden = true` on the node class.
118
+ */
119
+ hidden?: boolean;
120
+ replacedBy?: string;
37
121
  metadataOutputTypes?: DeclaredOutputTypes;
38
122
  outputTypes: DeclaredOutputTypes;
39
123
  getDeclaredProperties(): Array<{
@@ -61,32 +145,203 @@ type BaseNodeKey = keyof BaseNode | "dynamicProps";
61
145
  * ```
62
146
  */
63
147
  export type NodeProps<T extends BaseNode> = Partial<Pick<T, Exclude<keyof T, BaseNodeKey | `__${string}` | `_${string}`>>>;
148
+ /**
149
+ * True if a class is a streaming-output node. Streaming is purely structural:
150
+ *
151
+ * 1. Subclass overrides `genProcess` → it yields multiple values.
152
+ * 2. Any output handle declares `forward`, `iteration`, or `chunk`
153
+ * correlation → the node emits per-input or per-iteration. `single`
154
+ * and `aggregate` correlations indicate one value per execution.
155
+ *
156
+ * This lets pure-`process()` filter/reroute/forward nodes (IfNode, Output,
157
+ * FilterNone, etc.) declare streaming via correlation alone, and generator
158
+ * nodes (ForEach, Collection, GetVariable) via the `genProcess` override —
159
+ * no flag needed. Mirrors the Python side, which derives the same boolean
160
+ * solely from whether `gen_process` is overridden.
161
+ */
162
+ /**
163
+ * What {@link hasStreamingOutput} reads. Written as the two members it touches
164
+ * so the abstract `typeof BaseNode` — which cannot satisfy `NodeClass`'s
165
+ * concrete constructor — can be passed as well as a registered node class.
166
+ */
167
+ type StreamingOutputSource = Pick<NodeClass, "outputCorrelation"> & {
168
+ prototype: BaseNode;
169
+ };
170
+ export declare const hasStreamingOutput: (cls: StreamingOutputSource) => boolean;
64
171
  export declare abstract class BaseNode {
65
172
  static readonly nodeType: string;
66
173
  static readonly title: string;
67
174
  static readonly description: string;
68
175
  static readonly layout: string | undefined;
176
+ /**
177
+ * Node body renderer key. Set to "content_card" to render a media/text-forward
178
+ * content card instead of the generic input/output body. Generator packages
179
+ * typically derive this from the primary output type on a shared base class
180
+ * (mirrors the Python `_body`/`body()` convention).
181
+ */
182
+ static readonly body: string | undefined;
69
183
  static readonly recommendedModels: unknown[] | undefined;
70
- static readonly basicFields: string[] | undefined;
184
+ static readonly inlineFields: string[] | undefined;
185
+ static readonly inputFields: string[] | undefined;
71
186
  static readonly requiredSettings: string[] | undefined;
72
187
  static readonly requiredRuntimes: string[] | undefined;
73
188
  static readonly isStreamingInput: boolean;
74
- static readonly isStreamingOutput: boolean;
75
- static readonly isDynamic: boolean;
76
- static readonly syncMode: SyncMode;
189
+ /**
190
+ * Decide {@link isStreamingInput} per node instance, from its saved
191
+ * properties. Unset on every node whose mode is a property of the type;
192
+ * declared only where one type covers both modes — the Code node, where the
193
+ * body decides (`usesStreamInputContract(node.properties.code)`).
194
+ *
195
+ * Both hydration paths consult it ahead of the static
196
+ * (`hydrateGraphNodeFlags`, and `Graph.loadFromDict` via the resolver's
197
+ * `resolveInstanceFlags`), and re-read it on every hydration, so editing the
198
+ * body flips the mode with no saved flag involved.
199
+ */
200
+ static readonly resolveStreamingInput: ((node: {
201
+ properties?: Record<string, unknown>;
202
+ }) => boolean) | undefined;
203
+ /**
204
+ * Derive dynamic input and output slots from a node's saved properties.
205
+ * Unset on nodes whose slots are declared only by the editor or the author;
206
+ * declared where the slots follow from a property, as on the Comfy runners,
207
+ * whose Save nodes in `workflow` become output slots.
208
+ *
209
+ * Both hydration paths merge the result under the slots saved on the node
210
+ * (`hydrateGraphNodeFlags`, and `Graph.loadFromDict` via the resolver's
211
+ * `resolveInstanceSlots`), so a graph built over the API, where nothing
212
+ * declared the slots, can still wire them.
213
+ */
214
+ static readonly resolveDynamicSlots: ((node: {
215
+ properties?: Record<string, unknown>;
216
+ }) => DerivedDynamicSlots | undefined) | undefined;
217
+ /**
218
+ * Marks a trigger node. Triggers compile to `trigger_registrations` on
219
+ * workflow activation, and when a run starts because of a delivered event
220
+ * (`RunJobRequest.trigger_event` targeting this node) the kernel calls
221
+ * {@link emitTriggerEvent} instead of the live-listening `genProcess`
222
+ * loop. Runs without a trigger event keep today's streaming behavior
223
+ * (in-editor live test). See
224
+ * docs/superpowers/specs/2026-07-10-trigger-wakeup-redesign.md.
225
+ */
226
+ static readonly isTrigger: boolean;
227
+ /**
228
+ * Emit output_update for this node's handles even when they are connected
229
+ * onward. The runner suppresses output_update for connected handles by
230
+ * default; nodes whose updates feed a UI surface regardless of patching
231
+ * (e.g. the realtime audio monitor) opt in.
232
+ */
233
+ static readonly alwaysEmitOutputUpdates: boolean;
234
+ static readonly inputMode: InputMode | undefined;
235
+ static readonly outputCorrelation: Record<string, OutputCorrelation> | undefined;
236
+ static readonly supportsDynamicInputs: boolean;
237
+ /**
238
+ * Restricts the types a user may pick when declaring a dynamic input slot on
239
+ * this node (see `Node.dynamic_inputs`). Unset means the full type palette.
240
+ * Emitted as `allowed_dynamic_slot_types` in node metadata.
241
+ */
242
+ static readonly allowedDynamicSlotTypes: TypeMetadata[] | undefined;
77
243
  static readonly isControlled: boolean;
78
- static readonly exposeAsTool: boolean | undefined;
244
+ /**
245
+ * `Zip` and `Cross` set this to true so static correlation analysis allows
246
+ * incomparable input scopes on these nodes only. See
247
+ * docs/correlation-design.md §7.
248
+ */
249
+ static readonly isJoinNode: boolean;
79
250
  static readonly supportsDynamicOutputs: boolean | undefined;
80
251
  static readonly autoSaveAsset: boolean;
252
+ /**
253
+ * Whether re-running this node with identical inputs is safe. An opt-in:
254
+ * unknown means unsafe. Cost tracking cannot see external writes — a
255
+ * Publish/Upsert/Notify node can complete its side effect and then throw,
256
+ * recording nothing — so a node nobody classified loses a safe retry rather
257
+ * than gaining an unsafe one. The workflow supervisor offers `retry` only
258
+ * for a node that declares this. See docs/workflow-supervisor-design.md §5.3.
259
+ */
260
+ static readonly retrySafe: boolean;
261
+ /**
262
+ * List properties whose static items are kept when an edge feeds the same
263
+ * handle. The node receives the connected items followed by its own static
264
+ * items, instead of the edge value replacing them. Used by the list
265
+ * constants, so a connected Image List adds its own images to the incoming
266
+ * ones.
267
+ */
268
+ static readonly appendStaticInputs: readonly string[];
269
+ /**
270
+ * Per-type cache lifetime for partial runs ("Run Node", "Run from here", "Run
271
+ * selected"). Only consulted for Computed nodes (Constants are always live;
272
+ * Generatives reuse generation history). `"forever"` = pure deterministic
273
+ * (reuse while inputs match); a finite number = seconds the cached result
274
+ * stays fresh before re-running (time-sensitive, e.g. a web fetch);
275
+ * unset / `0` = never reuse. `"forever"` is a string sentinel — never
276
+ * `Infinity`, which JSON-serializes to `null` and would silently flip a pure
277
+ * node to never-cache. See docs/superpowers/specs/2026-06-27-run-subgraph-caching.md §4.
278
+ */
279
+ static readonly cacheTtl: number | "forever" | undefined;
280
+ /**
281
+ * What running this node does to the world, which decides whether a reactive
282
+ * run (a slider drag, an input change in a mini app) may execute it without
283
+ * an explicit action:
284
+ * "pure" — output depends only on inputs; safe to re-run at any rate
285
+ * "read" — reads external state but changes nothing
286
+ * "write" — mutates state the user can observe (a file, a document)
287
+ * "external" — leaves the system (sends mail, calls a paid API)
288
+ * Reactive runs traverse "pure" and "read" only. The default is the
289
+ * conservative "external", so a node nobody has classified never fires off a
290
+ * slider drag. `cacheTtl: "forever"` implies "pure".
291
+ */
292
+ static readonly effect: NodeEffect;
293
+ /**
294
+ * Names the output slot that carries this node's "primary" generation — the
295
+ * value persisted as its saved generation and previewed by the content card.
296
+ * Unset falls back to the first declared output. See `auto_save_asset` and the
297
+ * autosave path in the websocket runner.
298
+ */
299
+ static readonly primaryOutput: string | undefined;
81
300
  static readonly modelPacks: unknown[] | undefined;
301
+ /**
302
+ * Deployment platforms this node supports. Defaults to ["node"]; nodes
303
+ * that work in V8 isolates should claim "workers" and/or "edge"
304
+ * explicitly. See `@nodetool-ai/protocol`'s Platform type.
305
+ */
306
+ static readonly platforms: readonly Platform[] | undefined;
307
+ /**
308
+ * Requires a WebGPU device in the browser (set via `tagAsBrowserGpu`). The
309
+ * in-browser runner routes graphs with these nodes to the server when
310
+ * `navigator.gpu` is unavailable. Unset/undefined means no GPU requirement.
311
+ */
312
+ static readonly requiresGpu: boolean | undefined;
313
+ static readonly deprecated: boolean;
314
+ /**
315
+ * Hidden from node-discovery UIs but still registered/runnable (see the
316
+ * `hidden` field on NodeClass). Unset/false means normally discoverable.
317
+ */
318
+ static readonly hidden: boolean | undefined;
319
+ static readonly replacedBy: string | undefined;
82
320
  static readonly metadataOutputTypes: DeclaredOutputTypes | undefined;
83
321
  static readonly outputTypes: DeclaredOutputTypes;
84
322
  __node_id: string;
85
323
  __node_name: string;
86
324
  protected dynamicProps: Map<string, unknown>;
325
+ /**
326
+ * Typed declarations for the dynamic slots of this node instance, injected by
327
+ * the registry as the `_dynamic_inputs` framework property. `dynamicProps`
328
+ * holds the values; this holds the types. A slot missing here is an untyped
329
+ * legacy slot and behaves exactly as before typed slots existed.
330
+ */
331
+ protected dynamicSlotMeta: Map<string, DynamicSlotMeta>;
332
+ /**
333
+ * Framework-injected internals (resolved `_secrets`, the `_control_context`,
334
+ * …). Kept separate from `dynamicProps` so reserved `_`-prefixed values never
335
+ * leak into user-facing dynamic-input iteration (prompt template vars, API
336
+ * args) or into `serialize()`. Read/written through getDynamic/setDynamic,
337
+ * which route `_`-prefixed keys here.
338
+ */
339
+ private _internalProps;
87
340
  constructor(properties?: Record<string, unknown>);
88
341
  static getDeclaredProperties(): import("./decorators.js").DeclaredPropertyMetadata[];
89
- static getDeclaredOutputs(): Record<string, string>;
342
+ static getDeclaredOutputs(): {
343
+ [name: string]: string;
344
+ };
90
345
  /**
91
346
  * Validate a property bag against this node's declared @prop metadata.
92
347
  *
@@ -107,6 +362,8 @@ export declare abstract class BaseNode {
107
362
  deserialize(data: Record<string, unknown>): void;
108
363
  setDynamic(key: string, value: unknown): void;
109
364
  getDynamic<T = unknown>(key: string): T | undefined;
365
+ /** Declared types of this instance's dynamic slots, keyed by slot name. */
366
+ getDynamicSlots(): ReadonlyMap<string, DynamicSlotMeta>;
110
367
  initialize(): Promise<void>;
111
368
  preProcess(): Promise<void>;
112
369
  finalize(): Promise<void>;
@@ -127,6 +384,20 @@ export declare abstract class BaseNode {
127
384
  * push results via `outputs.emit()`.
128
385
  */
129
386
  run?(inputs: StreamingInputs, outputs: StreamingOutputs, context?: ProcessingContext): Promise<void>;
387
+ /**
388
+ * Trigger entry point — called instead of `genProcess()` when the run
389
+ * carries a `trigger_event` for this node (see the `isTrigger` static).
390
+ * The default maps the keys of an object payload onto this node's
391
+ * declared output slots and drops everything else. Trigger subclasses
392
+ * override this to shape their adapter payloads (webhook envelope,
393
+ * synthesized tick, file-watch event) onto their specific slots.
394
+ */
395
+ emitTriggerEvent(event: TriggerEvent, outputs: StreamingOutputs): Promise<void>;
396
+ /**
397
+ * Resolve requiredSettings from the context's secret store. Returns an
398
+ * empty record when nothing is required or nothing resolves.
399
+ */
400
+ private _resolveSecrets;
130
401
  /**
131
402
  * Resolve requiredSettings from the context's secret store and inject
132
403
  * them as `inputs._secrets` so node process() can access API keys.
@@ -1 +1 @@
1
- {"version":3,"file":"base-node.d.ts","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-node.d.ts","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"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"}