@codemation/core-nodes 0.10.2 → 0.12.0

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 (37) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/dist/index.cjs +259 -100
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +191 -66
  5. package/dist/index.d.ts +192 -67
  6. package/dist/index.js +259 -97
  7. package/dist/index.js.map +1 -1
  8. package/dist/metadata.json +1 -1
  9. package/package.json +3 -2
  10. package/src/chatModels/CodemationChatModelConfig.ts +9 -21
  11. package/src/chatModels/CodemationChatModelFactory.ts +12 -9
  12. package/src/chatModels/OpenAIChatModelFactory.ts +3 -2
  13. package/src/index.ts +1 -1
  14. package/src/nodes/AIAgentConfig.ts +28 -0
  15. package/src/nodes/AIAgentNode.ts +77 -13
  16. package/src/nodes/AgentBinaryContentFactory.ts +74 -0
  17. package/src/nodes/CallbackNodeFactory.ts +9 -6
  18. package/src/nodes/CronTriggerFactory.ts +6 -2
  19. package/src/nodes/DeferredMetaToolStrategy.ts +8 -2
  20. package/src/nodes/ManualTriggerFactory.ts +15 -11
  21. package/src/nodes/WebhookTriggerFactory.ts +9 -2
  22. package/src/nodes/aggregate.ts +9 -2
  23. package/src/nodes/assertion.ts +3 -0
  24. package/src/nodes/filter.ts +9 -2
  25. package/src/nodes/httpRequest.ts +6 -1
  26. package/src/nodes/if.ts +9 -2
  27. package/src/nodes/isTestRun.ts +6 -2
  28. package/src/nodes/mapData.ts +4 -2
  29. package/src/nodes/merge.ts +9 -2
  30. package/src/nodes/noOp.ts +9 -2
  31. package/src/nodes/nodeOptions.types.ts +12 -0
  32. package/src/nodes/split.ts +9 -2
  33. package/src/nodes/subWorkflow.ts +9 -2
  34. package/src/nodes/switch.ts +7 -1
  35. package/src/nodes/wait.ts +9 -2
  36. package/src/workflowAuthoring/WorkflowChatModelFactory.types.ts +8 -2
  37. package/src/chatModels/ManagedModelFetcher.ts +0 -23
package/dist/index.d.cts CHANGED
@@ -274,7 +274,6 @@ interface AssertionResult {
274
274
  }
275
275
  //#endregion
276
276
  //#region ../core/src/contracts/itemExpr.d.ts
277
- declare const ITEM_EXPR_BRAND: unique symbol;
278
277
  type ItemExprResolvedContext = Readonly<{
279
278
  runId: RunId;
280
279
  workflowId: WorkflowId;
@@ -294,7 +293,7 @@ type ItemExprArgs<TItemJson = unknown> = Readonly<{
294
293
  }>;
295
294
  type ItemExprCallback<T, TItemJson = unknown> = (args: ItemExprArgs<TItemJson>) => T | Promise<T>;
296
295
  type ItemExpr<T, TItemJson = unknown> = Readonly<{
297
- readonly [ITEM_EXPR_BRAND]: true;
296
+ readonly __codemationItemExpr: "codemation.itemExpr";
298
297
  readonly fn: ItemExprCallback<T, TItemJson>;
299
298
  }>;
300
299
  //#endregion
@@ -628,6 +627,26 @@ type PortsEmission = Readonly<{
628
627
  readonly ports: Readonly<Partial<Record<OutputPortKey, Items | ReadonlyArray<JsonNonArray>>>>;
629
628
  }>;
630
629
  //#endregion
630
+ //#region ../core/src/authoring/nodeBaseOptions.types.d.ts
631
+ /**
632
+ * Core-local copy of the per-instance authoring options every `define*` factory's `create(...)`
633
+ * accepts in its trailing argument: a stable `id` plus a plain-language `description` (the
634
+ * non-technical "what does this step do" line surfaced in the node sidebar).
635
+ *
636
+ * `description` is a first-class option — passed inline exactly like `id` — and is threaded onto
637
+ * the config instance as an OWN ENUMERABLE field so it flows into the persisted workflow snapshot
638
+ * (`WorkflowSnapshotCodec` serializes via `JSON.parse(JSON.stringify(config))`, which only captures
639
+ * own enumerable properties — never a getter).
640
+ *
641
+ * `@codemation/core-nodes` declares an identical `NodeBaseOptions` for its bare-id built-in nodes;
642
+ * core keeps its own copy because core must not depend on `@codemation/core-nodes` (dependency
643
+ * direction). The two types are structurally identical by design.
644
+ */
645
+ interface NodeBaseOptions$1 {
646
+ readonly id?: string;
647
+ readonly description?: string;
648
+ }
649
+ //#endregion
631
650
  //#region ../core/src/authoring/defineNode.types.d.ts
632
651
  type ResolvableCredentialType = AnyCredentialType | CredentialTypeId;
633
652
  type DefinedNodeCredentialBinding = ResolvableCredentialType | Readonly<{
@@ -644,7 +663,7 @@ interface DefinedNode<TKey$1 extends string, TConfig extends CredentialJsonRecor
644
663
  readonly key: TKey$1;
645
664
  readonly title: string;
646
665
  readonly description?: string;
647
- create<TConfigItemJson = TInputJson$1>(config: DefinedNodeConfigInput<TConfig, TConfigItemJson>, name?: string, id?: string): RunnableNodeConfig<TInputJson$1, TOutputJson$1>;
666
+ create<TConfigItemJson = TInputJson$1>(config: DefinedNodeConfigInput<TConfig, TConfigItemJson>, name?: string, idOrOptions?: string | NodeBaseOptions$1): RunnableNodeConfig<TInputJson$1, TOutputJson$1>;
648
667
  register(context: {
649
668
  registerNode<TValue>(token: TypeToken<TValue>, implementation?: TypeToken<TValue>): void;
650
669
  }): void;
@@ -712,14 +731,44 @@ type BooleanWhenOverloads<TCurrentJson, TReturn> = {
712
731
  };
713
732
  //#endregion
714
733
  //#region ../core/src/workflow/dsl/WhenBuilder.d.ts
734
+ /** Structurally identical to ChainCursorResolver's (unexported) ChainCursorEndpoint. */
735
+ type WhenEndpoint = Readonly<{
736
+ node: NodeRef;
737
+ output: OutputPortKey;
738
+ inputPortHint?: InputPortKey;
739
+ }>;
715
740
  declare class WhenBuilder<TCurrentJson> {
716
741
  private readonly wf;
717
742
  private readonly from;
718
743
  private readonly branchPort;
719
- constructor(wf: WorkflowBuilder, from: NodeRef, branchPort: OutputPortKey);
744
+ /** Tails of arms added by earlier `.when(...)` calls in this chain. */
745
+ private readonly priorEndpoints;
746
+ /** Tail endpoint of the arm this builder added (set by addBranch). */
747
+ private armEndpoint;
748
+ constructor(wf: WorkflowBuilder, from: NodeRef, branchPort: OutputPortKey, /** Tails of arms added by earlier `.when(...)` calls in this chain. */
749
+ priorEndpoints?: ReadonlyArray<WhenEndpoint>);
720
750
  addBranch<TSteps extends ReadonlyArray<AnyRunnableNodeConfig>>(steps: TSteps & ValidStepSequence<TCurrentJson, TSteps>): this;
721
751
  readonly when: BooleanWhenOverloads<TCurrentJson, WhenBuilder<TCurrentJson>>;
752
+ /**
753
+ * Continue the trunk after a boolean `.when(...)` branch chain, auto-merging EVERY branch
754
+ * tail accumulated across the chain into the next node — the same fan-in the object form
755
+ * produces. Typed as `ChainCursor<TCurrentJson>` (the pre-branch item type): boolean arms
756
+ * carry no output guard so the merged item type is underdetermined — use the object form
757
+ * `.when({ true: [...], false: [...] })` when you need a precise merged type inline.
758
+ */
759
+ then<TOutputJson$1, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson$1>>(config: TConfig): ChainCursor<RunnableNodeOutputJson<TConfig>>;
760
+ /**
761
+ * Chainable human-approval step after a boolean `.when(...)` branch chain — merges every
762
+ * branch tail into the approval node. Mirrors `ChainCursor.humanApproval`.
763
+ */
764
+ humanApproval<TKey$1 extends string, TConfig extends Record<string, unknown>, TBindings extends DefinedNodeCredentialBindings | undefined = undefined>(node: DefinedHumanApprovalNode<TKey$1, TConfig, TCurrentJson & Record<string, unknown>, TBindings>, config: TConfig, metadata?: {
765
+ name?: string;
766
+ nodeId?: string;
767
+ }): ChainCursor<HumanApprovalOutputJson<TCurrentJson & Record<string, unknown>>>;
722
768
  build(): WorkflowDefinition;
769
+ /** Endpoints of every arm added so far in this chain (prior arms + this one). */
770
+ private get accumulatedEndpoints();
771
+ private toCursor;
723
772
  }
724
773
  //#endregion
725
774
  //#region ../core/src/workflow/dsl/ChainCursorResolver.d.ts
@@ -739,6 +788,12 @@ declare class ChainCursor<TCurrentJson> {
739
788
  private readonly endpoints;
740
789
  constructor(wf: WorkflowBuilder, endpoints: ReadonlyArray<ChainCursorEndpoint>);
741
790
  then<TOutputJson$1, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson$1>>(config: TConfig): ChainCursor<RunnableNodeOutputJson<TConfig>>;
791
+ /**
792
+ * Append a step whose output is MERGED onto `item.json` (shallow, output-wins) instead of
793
+ * replacing it — so earlier fields (e.g. trigger metadata) survive a transform/OCR/extraction
794
+ * node. Use for any node in a pipeline where you need data from before it.
795
+ */
796
+ thenMerge<TOutputJson$1, TConfig extends RunnableNodeConfig<TCurrentJson, TOutputJson$1>>(config: TConfig): ChainCursor<TCurrentJson & RunnableNodeOutputJson<TConfig>>;
742
797
  thenIntoInputHints<TOutputJson$1, TConfig extends RunnableNodeConfig<any, TOutputJson$1>>(config: TConfig): ChainCursor<RunnableNodeOutputJson<TConfig>>;
743
798
  readonly when: ChainCursorWhenOverloads<TCurrentJson>;
744
799
  route<TNextJson$1>(branches: Readonly<Record<OutputPortKey, (branch: ChainCursor<TCurrentJson>) => ChainCursor<TNextJson$1> | undefined>>): ChainCursor<TNextJson$1>;
@@ -929,6 +984,13 @@ interface NodeConfigBase {
929
984
  readonly name?: string;
930
985
  readonly id?: NodeId;
931
986
  readonly icon?: string;
987
+ /**
988
+ * Plain-language, non-technical explanation of what this node does, surfaced in the workflow
989
+ * inspector / node properties sidebar. A first-class config option every authorable node accepts
990
+ * directly (alongside `id`), so it flows into the persisted config the mappers read. Distinct from
991
+ * {@link inspectorSummary} (config-derived label/value rows).
992
+ */
993
+ readonly description?: string;
932
994
  readonly execution?: Readonly<{
933
995
  hint?: "local" | "worker";
934
996
  queue?: string;
@@ -1646,10 +1708,12 @@ declare class ItemExprResolver {
1646
1708
  //#region ../core/src/execution/RunnableOutputBehaviorResolver.d.ts
1647
1709
  type RunnableOutputBehavior = Readonly<{
1648
1710
  keepBinaries: boolean;
1711
+ mergeJson: boolean;
1649
1712
  }>;
1650
1713
  declare class RunnableOutputBehaviorResolver {
1651
1714
  resolve(config: RunnableNodeConfig): RunnableOutputBehavior;
1652
1715
  private isKeepBinariesEnabled;
1716
+ private isMergeJsonEnabled;
1653
1717
  }
1654
1718
  //#endregion
1655
1719
  //#region ../core/src/execution/NodeOutputNormalizer.d.ts
@@ -1663,6 +1727,7 @@ declare class NodeOutputNormalizer {
1663
1727
  private emitPortsToOutputs;
1664
1728
  private normalizePortPayload;
1665
1729
  private isItemLike;
1730
+ private isPlainJsonObject;
1666
1731
  private applyOutput;
1667
1732
  }
1668
1733
  //#endregion
@@ -2221,37 +2286,25 @@ declare const openAiChatModelPresets: OpenAiChatModelPresets;
2221
2286
  //#endregion
2222
2287
  //#region src/chatModels/CodemationChatModelConfig.d.ts
2223
2288
  /**
2224
- * A platform-managed model entry as returned by GET /api/llm/managed-models.
2289
+ * Complexity token sent to the managed LLM broker.
2290
+ * The broker maps this to a concrete provider model and thinking effort.
2291
+ * low = cheapest/fastest (short classification, simple extraction)
2292
+ * medium = default for most extraction/agent work
2293
+ * high = complex multi-step reasoning
2294
+ * xhigh = hardest problems, most capable model
2225
2295
  */
2226
- interface ManagedModelDto {
2227
- id: string;
2228
- modelId: string;
2229
- displayName: string;
2230
- providerKey: string;
2231
- inputCostPerMTok: number;
2232
- outputCostPerMTok: number;
2233
- contextWindow: number;
2234
- tier: string;
2235
- }
2236
- /**
2237
- * Bifrost-namespaced model ID. Kept as `string` so runtime-fetched model IDs
2238
- * (from the CP allowlist) work without compile-time enumeration.
2239
- * Story C replaced the prior hardcoded union with this open type.
2240
- */
2241
- type CodemationManagedModel = string;
2296
+ type ManagedComplexity = "low" | "medium" | "high" | "xhigh";
2242
2297
  declare class CodemationChatModelConfig implements ChatModelConfig {
2243
2298
  readonly name: string;
2244
- readonly model: CodemationManagedModel;
2299
+ readonly complexity: ManagedComplexity;
2245
2300
  readonly options?: Readonly<{
2246
- temperature?: number;
2247
2301
  maxTokens?: number;
2248
2302
  }> | undefined;
2249
2303
  readonly type: typeof CodemationChatModelFactory;
2250
2304
  readonly presentation: AgentCanvasPresentation<CanvasIconName>;
2251
2305
  readonly provider = "codemation-managed";
2252
2306
  readonly modelName: string;
2253
- constructor(name: string, model: CodemationManagedModel, presentationIn?: AgentCanvasPresentation<CanvasIconName>, options?: Readonly<{
2254
- temperature?: number;
2307
+ constructor(name: string, complexity: ManagedComplexity, presentationIn?: AgentCanvasPresentation<CanvasIconName>, options?: Readonly<{
2255
2308
  maxTokens?: number;
2256
2309
  }> | undefined);
2257
2310
  }
@@ -2264,17 +2317,6 @@ declare class CodemationChatModelFactory implements ChatModelFactory<CodemationC
2264
2317
  }>): Promise<ChatLanguageModel>;
2265
2318
  }
2266
2319
  //#endregion
2267
- //#region src/chatModels/ManagedModelFetcher.d.ts
2268
- /**
2269
- * Fetches the active platform-managed model allowlist from the CP.
2270
- * Reads CONTROL_PLANE_URL from the workspace process env.
2271
- * Returns an empty array if the env var is absent or the fetch fails.
2272
- * Cache the result per session — the allowlist changes infrequently.
2273
- */
2274
- declare class ManagedModelFetcher {
2275
- fetch(): Promise<ManagedModelDto[]>;
2276
- }
2277
- //#endregion
2278
2320
  //#region src/nodes/aiAgentSupport.types.d.ts
2279
2321
  declare class AgentItemPortMap {
2280
2322
  static fromItem(item: Item): NodeInputsByPort;
@@ -2469,6 +2511,7 @@ interface AIAgentOptions<TInputJson$1 = unknown, _TOutputJson = unknown> {
2469
2511
  readonly chatModel: ChatModelConfig;
2470
2512
  readonly tools?: ReadonlyArray<ToolConfig>;
2471
2513
  readonly id?: string;
2514
+ readonly description?: string;
2472
2515
  readonly retryPolicy?: RetryPolicySpec;
2473
2516
  readonly guardrails?: AgentGuardrailConfig;
2474
2517
  /** Engine applies with {@link RunnableNodeConfig.inputSchema} before {@link AIAgentNode.execute}. */
@@ -2498,6 +2541,21 @@ interface AIAgentOptions<TInputJson$1 = unknown, _TOutputJson = unknown> {
2498
2541
  * Defaults to `["gmail", "ocr", "webhook"]` when unset.
2499
2542
  */
2500
2543
  readonly untrustedSources?: ReadonlyArray<string>;
2544
+ /**
2545
+ * Whether file binaries are automatically passed to the chat model as native inline
2546
+ * multimodal blocks. Defaults to `true`. Set to `false` to skip the binary-passdown step
2547
+ * entirely (the node then behaves as if no binaries were present).
2548
+ */
2549
+ readonly passBinariesToModel?: boolean;
2550
+ /**
2551
+ * Explicit binaries to pass to the chat model, instead of the ones on the current item.
2552
+ * Either a static array or a function resolved per item (so an author can forward binaries
2553
+ * produced by an earlier node further back in the workflow). When provided, these replace
2554
+ * `item.binary` as the passdown source. Ignored when {@link passBinariesToModel} is `false`.
2555
+ * Every binary is passed (images as image blocks, all other types as file blocks); the
2556
+ * provider surfaces an error at runtime if it doesn't support a given file type.
2557
+ */
2558
+ readonly binaries?: ReadonlyArray<BinaryAttachment> | ((args: AgentMessageBuildArgs<TInputJson$1>) => ReadonlyArray<BinaryAttachment>);
2501
2559
  }
2502
2560
  /**
2503
2561
  * AI agent: credential bindings are keyed to connection-owned LLM/tool node ids (ConnectionNodeIdFactory),
@@ -2515,6 +2573,7 @@ declare class AIAgent<TInputJson$1 = unknown, TOutputJson$1 = unknown> implement
2515
2573
  readonly chatModel: ChatModelConfig;
2516
2574
  readonly tools: ReadonlyArray<ToolConfig>;
2517
2575
  readonly id?: string;
2576
+ readonly description?: string;
2518
2577
  readonly retryPolicy: RetryPolicySpec;
2519
2578
  readonly guardrails?: AgentGuardrailConfig;
2520
2579
  readonly inputSchema?: ZodType<TInputJson$1>;
@@ -2522,6 +2581,8 @@ declare class AIAgent<TInputJson$1 = unknown, TOutputJson$1 = unknown> implement
2522
2581
  readonly mcpServers?: ReadonlyArray<string>;
2523
2582
  readonly pinnedMcpTools?: readonly string[];
2524
2583
  readonly untrustedSources?: ReadonlyArray<string>;
2584
+ readonly passBinariesToModel?: boolean;
2585
+ readonly binaries?: ReadonlyArray<BinaryAttachment> | ((args: AgentMessageBuildArgs<TInputJson$1>) => ReadonlyArray<BinaryAttachment>);
2525
2586
  constructor(options: AIAgentOptions<TInputJson$1, TOutputJson$1>);
2526
2587
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
2527
2588
  }
@@ -2658,8 +2719,17 @@ declare class AIAgentNode implements RunnableNode<AIAgent<any, any>> {
2658
2719
  readonly inputSchema: z.ZodUnknown;
2659
2720
  private readonly connectionCredentialExecutionContextFactory;
2660
2721
  private readonly preparedByExecutionContext;
2722
+ /**
2723
+ * The `ai` SDK, loaded lazily in {@link execute} so the SDK (~28MB RSS) stays
2724
+ * off the boot path — non-AI workflows never load it. Every path runs through
2725
+ * `execute` → `ensureAiSdk` before any sync helper touches `this.aiSdk`.
2726
+ */
2727
+ private aiSdk;
2728
+ private aiSdkPromise;
2661
2729
  constructor(nodeResolver: NodeResolver, credentialSessions: CredentialSessionService, nodeBackedToolRuntime: NodeBackedToolRuntime, executionHelpers: AIAgentExecutionHelpersFactory, structuredOutputRunner: AgentStructuredOutputRunner, toolExecutionCoordinator: AgentToolExecutionCoordinator, toolLoadingStrategyFactory: DeferredMetaToolStrategyFactory, agentMcpIntegration: AgentMcpIntegration);
2662
2730
  execute(args: RunnableNodeExecuteArgs<AIAgent<any, any>>): Promise<unknown>;
2731
+ /** Load the `ai` SDK once per node instance (cached promise guards concurrent items). */
2732
+ private ensureAiSdk;
2663
2733
  /**
2664
2734
  * Resume path: re-enters the agent loop after a HITL suspension.
2665
2735
  * Reconstructs the conversation from the checkpoint, injects the human decision
@@ -2768,6 +2838,22 @@ declare class AIAgentNode implements RunnableNode<AIAgent<any, any>> {
2768
2838
  private summarizeLlmMessages;
2769
2839
  private resultToJsonValue;
2770
2840
  private createPromptMessages;
2841
+ /**
2842
+ * Picks which attachments feed the passdown. When the author supplies `config.binaries`
2843
+ * (a static array or a per-item function — e.g. to forward binaries from an earlier node),
2844
+ * those replace the current item's attachments; otherwise the current item's `item.binary`
2845
+ * is used.
2846
+ */
2847
+ private selectBinaryAttachments;
2848
+ /**
2849
+ * Reads every attachment through `ctx.binary` (storage-backed, by reference — never base64 on
2850
+ * `item.json`) and resolves it to inline base64 so the agent can pass it to the chat model as a
2851
+ * native multimodal block. Images become image blocks; every other type (PDF, office docs, CSV,
2852
+ * JSON, …) becomes a file block — we don't filter by media type, so any binary can be fed to the
2853
+ * model. If the provider rejects an unsupported type the error surfaces at runtime, and the
2854
+ * workflow can filter the binary upstream.
2855
+ */
2856
+ private resolveInlineBinaries;
2771
2857
  /**
2772
2858
  * When `item.json.__source` matches an entry in `config.untrustedSources`
2773
2859
  * (default: `["gmail", "ocr", "webhook"]`), wraps every user-role message
@@ -2828,6 +2914,12 @@ declare class DeferredMetaToolStrategy implements ToolLoadingStrategy {
2828
2914
  private mcpEntries;
2829
2915
  private toolsByServerId;
2830
2916
  private foundToolIds;
2917
+ /**
2918
+ * `jsonSchema` from the `ai` SDK, loaded lazily in {@link initialize} so the SDK
2919
+ * (~28MB RSS) stays off the boot path. `initialize` always runs before the sync
2920
+ * `getToolsForTurn` → `buildFindToolsDefinition` path, so this is set before use.
2921
+ */
2922
+ private jsonSchema;
2831
2923
  constructor(bm25: BM25Index, warnFn: (message: string) => void);
2832
2924
  initialize(input: ToolLoadingStrategyInitInput): Promise<void>;
2833
2925
  getToolsForTurn(context: ToolLoadingStrategyTurnContext): ToolSet;
@@ -2861,6 +2953,7 @@ interface AssertionOptions<TInputJson$1> {
2861
2953
  readonly name?: string;
2862
2954
  readonly id?: string;
2863
2955
  readonly icon?: string;
2956
+ readonly description?: string;
2864
2957
  /**
2865
2958
  * Author callback. Returns one or more {@link AssertionResult}s per input item. Each becomes
2866
2959
  * one emitted output item — useful for per-row reporting in the Tests tab. Return `[]` to
@@ -2879,12 +2972,27 @@ declare class Assertion<TInputJson$1 = unknown> implements RunnableNodeConfig<TI
2879
2972
  readonly icon: string;
2880
2973
  readonly name: string;
2881
2974
  readonly id?: string;
2975
+ readonly description?: string;
2882
2976
  readonly emitsAssertions: true;
2883
2977
  readonly assertions: AssertionOptions<TInputJson$1>["assertions"];
2884
2978
  constructor(options: AssertionOptions<TInputJson$1>);
2885
2979
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
2886
2980
  }
2887
2981
  //#endregion
2982
+ //#region src/nodes/nodeOptions.types.d.ts
2983
+ /**
2984
+ * Options shared by every authorable built-in node: a stable `id` and a plain-language
2985
+ * `description` (the non-technical "what does this node do" line surfaced in the node sidebar).
2986
+ *
2987
+ * `description` is a first-class config option — passed inline in the node's options, exactly like
2988
+ * `id` — and is threaded onto the config instance so it flows into the persisted workflow snapshot
2989
+ * the host / canvas mappers read. Node-specific option types extend this.
2990
+ */
2991
+ interface NodeBaseOptions {
2992
+ readonly id?: string;
2993
+ readonly description?: string;
2994
+ }
2995
+ //#endregion
2888
2996
  //#region src/nodes/CallbackNode.d.ts
2889
2997
  declare class CallbackNode implements RunnableNode<Callback<any, any>> {
2890
2998
  kind: "node";
@@ -2899,8 +3007,7 @@ declare class CallbackResultNormalizer {
2899
3007
  //#endregion
2900
3008
  //#region src/nodes/CallbackNodeFactory.d.ts
2901
3009
  type CallbackHandler<TInputJson$1 = unknown, TOutputJson$1 = TInputJson$1, TConfig extends Callback<TInputJson$1, TOutputJson$1> = Callback<TInputJson$1, TOutputJson$1>> = (items: Items<TInputJson$1>, ctx: NodeExecutionContext<TConfig>) => Promise<Items<TOutputJson$1> | PortsEmission | void> | Items<TOutputJson$1> | PortsEmission | void;
2902
- type CallbackOptions = Readonly<{
2903
- id?: string;
3010
+ type CallbackOptions = NodeBaseOptions & Readonly<{
2904
3011
  retryPolicy?: RetryPolicySpec;
2905
3012
  nodeErrorHandler?: NodeErrorHandlerSpec;
2906
3013
  declaredOutputPorts?: ReadonlyArray<string>;
@@ -2916,6 +3023,7 @@ declare class Callback<TInputJson$1 = unknown, TOutputJson$1 = TInputJson$1> imp
2916
3023
  readonly icon: "lucide:braces";
2917
3024
  readonly emptyBatchExecution: "runOnce";
2918
3025
  readonly id?: string;
3026
+ readonly description?: string;
2919
3027
  readonly retryPolicy?: RetryPolicySpec;
2920
3028
  readonly nodeErrorHandler?: NodeErrorHandlerSpec;
2921
3029
  readonly declaredOutputPorts?: ReadonlyArray<string>;
@@ -3048,6 +3156,8 @@ declare class HttpRequest<TInputJson$1 = Readonly<{
3048
3156
  */
3049
3157
  allowedOutboundHosts?: ReadonlyArray<string>;
3050
3158
  id?: string;
3159
+ /** Plain-language explanation surfaced in the node sidebar. */
3160
+ description?: string;
3051
3161
  }>;
3052
3162
  readonly retryPolicy: RetryPolicySpec;
3053
3163
  readonly kind: "node";
@@ -3056,6 +3166,7 @@ declare class HttpRequest<TInputJson$1 = Readonly<{
3056
3166
  readonly hint: "local";
3057
3167
  };
3058
3168
  readonly icon: "lucide:globe";
3169
+ readonly description?: string;
3059
3170
  constructor(name: string, args?: Readonly<{
3060
3171
  /** HTTP method (default: GET). */
3061
3172
  method?: string;
@@ -3130,6 +3241,8 @@ declare class HttpRequest<TInputJson$1 = Readonly<{
3130
3241
  */
3131
3242
  allowedOutboundHosts?: ReadonlyArray<string>;
3132
3243
  id?: string;
3244
+ /** Plain-language explanation surfaced in the node sidebar. */
3245
+ description?: string;
3133
3246
  }>, retryPolicy?: RetryPolicySpec);
3134
3247
  get id(): string | undefined;
3135
3248
  get method(): string;
@@ -3155,7 +3268,6 @@ declare class AggregateNode implements RunnableNode<Aggregate<any, any>> {
3155
3268
  declare class Aggregate<TIn = unknown, TOut = unknown> implements RunnableNodeConfig<TIn, TOut> {
3156
3269
  readonly name: string;
3157
3270
  readonly aggregate: (items: Items<TIn>, ctx: NodeExecutionContext<Aggregate<TIn, TOut>>) => TOut | Promise<TOut>;
3158
- readonly id?: string | undefined;
3159
3271
  readonly kind: "node";
3160
3272
  readonly type: TypeToken<unknown>;
3161
3273
  readonly execution: {
@@ -3163,7 +3275,9 @@ declare class Aggregate<TIn = unknown, TOut = unknown> implements RunnableNodeCo
3163
3275
  };
3164
3276
  readonly keepBinaries: true;
3165
3277
  readonly icon: "builtin:aggregate-rows";
3166
- constructor(name: string, aggregate: (items: Items<TIn>, ctx: NodeExecutionContext<Aggregate<TIn, TOut>>) => TOut | Promise<TOut>, id?: string | undefined);
3278
+ readonly id?: string;
3279
+ readonly description?: string;
3280
+ constructor(name: string, aggregate: (items: Items<TIn>, ctx: NodeExecutionContext<Aggregate<TIn, TOut>>) => TOut | Promise<TOut>, idOrOptions?: string | NodeBaseOptions);
3167
3281
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
3168
3282
  }
3169
3283
  //#endregion
@@ -3178,14 +3292,15 @@ declare class FilterNode implements RunnableNode<Filter<any>> {
3178
3292
  declare class Filter<TIn = unknown> implements RunnableNodeConfig<TIn, TIn> {
3179
3293
  readonly name: string;
3180
3294
  readonly predicate: (item: Item<TIn>, index: number, items: Items<TIn>, ctx: NodeExecutionContext<Filter<TIn>>) => boolean;
3181
- readonly id?: string | undefined;
3182
3295
  readonly kind: "node";
3183
3296
  readonly type: TypeToken<unknown>;
3184
3297
  readonly execution: {
3185
3298
  readonly hint: "local";
3186
3299
  };
3187
3300
  readonly icon: "lucide:filter";
3188
- constructor(name: string, predicate: (item: Item<TIn>, index: number, items: Items<TIn>, ctx: NodeExecutionContext<Filter<TIn>>) => boolean, id?: string | undefined);
3301
+ readonly id?: string;
3302
+ readonly description?: string;
3303
+ constructor(name: string, predicate: (item: Item<TIn>, index: number, items: Items<TIn>, ctx: NodeExecutionContext<Filter<TIn>>) => boolean, idOrOptions?: string | NodeBaseOptions);
3189
3304
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
3190
3305
  }
3191
3306
  //#endregion
@@ -3199,7 +3314,6 @@ declare class IfNode implements RunnableNode<If<any>> {
3199
3314
  declare class If<TInputJson$1 = unknown> implements RunnableNodeConfig<TInputJson$1, TInputJson$1> {
3200
3315
  readonly name: string;
3201
3316
  readonly predicate: (item: Item<TInputJson$1>, index: number, items: Items<TInputJson$1>, ctx: NodeExecutionContext<If<TInputJson$1>>) => boolean;
3202
- readonly id?: string | undefined;
3203
3317
  readonly kind: "node";
3204
3318
  readonly type: TypeToken<unknown>;
3205
3319
  readonly execution: {
@@ -3207,7 +3321,9 @@ declare class If<TInputJson$1 = unknown> implements RunnableNodeConfig<TInputJso
3207
3321
  };
3208
3322
  readonly icon: "lucide:split@rot=90";
3209
3323
  readonly declaredOutputPorts: readonly ["true", "false"];
3210
- constructor(name: string, predicate: (item: Item<TInputJson$1>, index: number, items: Items<TInputJson$1>, ctx: NodeExecutionContext<If<TInputJson$1>>) => boolean, id?: string | undefined);
3324
+ readonly id?: string;
3325
+ readonly description?: string;
3326
+ constructor(name: string, predicate: (item: Item<TInputJson$1>, index: number, items: Items<TInputJson$1>, ctx: NodeExecutionContext<If<TInputJson$1>>) => boolean, idOrOptions?: string | NodeBaseOptions);
3211
3327
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
3212
3328
  }
3213
3329
  //#endregion
@@ -3240,7 +3356,8 @@ declare class IsTestRun<TInputJson$1 = unknown> implements RunnableNodeConfig<TI
3240
3356
  readonly declaredOutputPorts: readonly ["true", "false"];
3241
3357
  readonly name: string;
3242
3358
  readonly id?: string;
3243
- constructor(name?: string, id?: string);
3359
+ readonly description?: string;
3360
+ constructor(name?: string, idOrOptions?: string | NodeBaseOptions);
3244
3361
  }
3245
3362
  //#endregion
3246
3363
  //#region src/nodes/SwitchNode.d.ts
@@ -3261,7 +3378,6 @@ declare class Switch<TInputJson$1 = unknown> implements RunnableNodeConfig<TInpu
3261
3378
  defaultCase: string;
3262
3379
  resolveCaseKey: SwitchCaseKeyResolver<TInputJson$1>;
3263
3380
  }>;
3264
- readonly id?: string | undefined;
3265
3381
  readonly kind: "node";
3266
3382
  readonly type: TypeToken<unknown>;
3267
3383
  readonly execution: {
@@ -3269,11 +3385,13 @@ declare class Switch<TInputJson$1 = unknown> implements RunnableNodeConfig<TInpu
3269
3385
  };
3270
3386
  readonly icon: "lucide:git-branch-plus";
3271
3387
  readonly declaredOutputPorts: ReadonlyArray<string>;
3388
+ readonly id?: string;
3389
+ readonly description?: string;
3272
3390
  constructor(name: string, cfg: Readonly<{
3273
3391
  cases: readonly string[];
3274
3392
  defaultCase: string;
3275
3393
  resolveCaseKey: SwitchCaseKeyResolver<TInputJson$1>;
3276
- }>, id?: string | undefined);
3394
+ }>, idOrOptions?: string | NodeBaseOptions);
3277
3395
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
3278
3396
  }
3279
3397
  //#endregion
@@ -3288,7 +3406,6 @@ declare class SplitNode implements RunnableNode<Split<any, any>> {
3288
3406
  declare class Split<TIn = unknown, TElem = unknown> implements RunnableNodeConfig<TIn, TElem> {
3289
3407
  readonly name: string;
3290
3408
  readonly getElements: (item: Item<TIn>, ctx: NodeExecutionContext<Split<TIn, TElem>>) => readonly TElem[];
3291
- readonly id?: string | undefined;
3292
3409
  readonly kind: "node";
3293
3410
  readonly type: TypeToken<unknown>;
3294
3411
  readonly execution: {
@@ -3301,7 +3418,9 @@ declare class Split<TIn = unknown, TElem = unknown> implements RunnableNodeConfi
3301
3418
  */
3302
3419
  readonly continueWhenEmptyOutput: true;
3303
3420
  readonly icon: "builtin:split-rows";
3304
- constructor(name: string, getElements: (item: Item<TIn>, ctx: NodeExecutionContext<Split<TIn, TElem>>) => readonly TElem[], id?: string | undefined);
3421
+ readonly id?: string;
3422
+ readonly description?: string;
3423
+ constructor(name: string, getElements: (item: Item<TIn>, ctx: NodeExecutionContext<Split<TIn, TElem>>) => readonly TElem[], idOrOptions?: string | NodeBaseOptions);
3305
3424
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
3306
3425
  }
3307
3426
  //#endregion
@@ -3326,10 +3445,11 @@ declare class CronTrigger implements TriggerNodeConfig<CronTickJson> {
3326
3445
  readonly type: TypeToken<unknown>;
3327
3446
  readonly icon: "lucide:clock";
3328
3447
  readonly id?: string;
3448
+ readonly description?: string;
3329
3449
  constructor(name: string, args: Readonly<{
3330
3450
  schedule: string;
3331
3451
  timezone?: string;
3332
- }>, id?: string);
3452
+ }>, idOrOptions?: string | NodeBaseOptions);
3333
3453
  get schedule(): string;
3334
3454
  get timezone(): string | undefined;
3335
3455
  createJob(callback: CronCallback): Cron;
@@ -3369,12 +3489,12 @@ declare class ManualTrigger<TOutputJson$1 = unknown> implements TriggerNodeConfi
3369
3489
  readonly icon: "lucide:play";
3370
3490
  readonly defaultItems?: Items<TOutputJson$1>;
3371
3491
  readonly id?: string;
3492
+ readonly description?: string;
3372
3493
  /** Manual runs often emit an empty batch; still schedule downstream by default. */
3373
3494
  readonly continueWhenEmptyOutput: true;
3374
- constructor(name?: string, id?: string);
3375
- constructor(name: string, defaultItems: ManualTriggerDefaultValue<TOutputJson$1>, id?: string);
3495
+ constructor(name?: string, idOrOptions?: string | NodeBaseOptions);
3496
+ constructor(name: string, defaultItems: ManualTriggerDefaultValue<TOutputJson$1> | undefined, idOrOptions?: string | NodeBaseOptions);
3376
3497
  private static resolveDefaultItems;
3377
- private static resolveId;
3378
3498
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
3379
3499
  }
3380
3500
  //#endregion
@@ -3387,8 +3507,7 @@ declare class MapDataNode implements RunnableNode<MapData<any, any>> {
3387
3507
  }
3388
3508
  //#endregion
3389
3509
  //#region src/nodes/mapData.d.ts
3390
- interface MapDataOptions {
3391
- readonly id?: string;
3510
+ interface MapDataOptions extends NodeBaseOptions {
3392
3511
  readonly keepBinaries?: boolean;
3393
3512
  }
3394
3513
  declare class MapData<TInputJson$1 = unknown, TOutputJson$1 = unknown> implements RunnableNodeConfig<TInputJson$1, TOutputJson$1> {
@@ -3404,6 +3523,7 @@ declare class MapData<TInputJson$1 = unknown, TOutputJson$1 = unknown> implement
3404
3523
  readonly continueWhenEmptyOutput: true;
3405
3524
  readonly icon: "lucide:square-pen";
3406
3525
  readonly keepBinaries: boolean;
3526
+ readonly description?: string;
3407
3527
  constructor(name: string, map: (item: Item<TInputJson$1>, ctx: NodeExecutionContext<MapData<TInputJson$1, TOutputJson$1>>) => TOutputJson$1, options?: MapDataOptions);
3408
3528
  get id(): string | undefined;
3409
3529
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow> | undefined;
@@ -3428,10 +3548,11 @@ declare class Merge<TInputJson$1 = unknown, TOutputJson$1 = TInputJson$1> implem
3428
3548
  */
3429
3549
  prefer?: ReadonlyArray<InputPortKey>;
3430
3550
  }>;
3431
- readonly id?: string | undefined;
3432
3551
  readonly kind: "node";
3433
3552
  readonly type: TypeToken<unknown>;
3434
3553
  readonly icon: "lucide:merge@rot=90";
3554
+ readonly id?: string;
3555
+ readonly description?: string;
3435
3556
  constructor(name: string, cfg?: Readonly<{
3436
3557
  mode: MergeMode;
3437
3558
  /**
@@ -3439,7 +3560,7 @@ declare class Merge<TInputJson$1 = unknown, TOutputJson$1 = TInputJson$1> implem
3439
3560
  * Any inputs not listed are appended in lexicographic order.
3440
3561
  */
3441
3562
  prefer?: ReadonlyArray<InputPortKey>;
3442
- }>, id?: string | undefined);
3563
+ }>, idOrOptions?: string | NodeBaseOptions);
3443
3564
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
3444
3565
  }
3445
3566
  //#endregion
@@ -3453,14 +3574,15 @@ declare class NoOpNode implements RunnableNode<NoOp<any>> {
3453
3574
  //#region src/nodes/noOp.d.ts
3454
3575
  declare class NoOp<TItemJson = unknown> implements RunnableNodeConfig<TItemJson, TItemJson> {
3455
3576
  readonly name: string;
3456
- readonly id?: string | undefined;
3457
3577
  readonly kind: "node";
3458
3578
  readonly type: TypeToken<unknown>;
3459
3579
  readonly execution: {
3460
3580
  readonly hint: "local";
3461
3581
  };
3462
3582
  readonly icon: "lucide:circle-dashed";
3463
- constructor(name?: string, id?: string | undefined);
3583
+ readonly id?: string;
3584
+ readonly description?: string;
3585
+ constructor(name?: string, idOrOptions?: string | NodeBaseOptions);
3464
3586
  }
3465
3587
  //#endregion
3466
3588
  //#region src/nodes/SubWorkflowNode.d.ts
@@ -3480,13 +3602,14 @@ declare class SubWorkflow<TInputJson$1 = unknown, TOutputJson$1 = unknown> imple
3480
3602
  nodeId: NodeId;
3481
3603
  } | UpstreamRefPlaceholder> | undefined;
3482
3604
  readonly startAt?: NodeId | undefined;
3483
- readonly id?: string | undefined;
3484
3605
  readonly kind: "node";
3485
3606
  readonly type: TypeToken<unknown>;
3486
3607
  readonly icon = "lucide:workflow";
3608
+ readonly id?: string;
3609
+ readonly description?: string;
3487
3610
  constructor(name: string, workflowId: string, upstreamRefs?: Array<{
3488
3611
  nodeId: NodeId;
3489
- } | UpstreamRefPlaceholder> | undefined, startAt?: NodeId | undefined, id?: string | undefined);
3612
+ } | UpstreamRefPlaceholder> | undefined, startAt?: NodeId | undefined, idOrOptions?: string | NodeBaseOptions);
3490
3613
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
3491
3614
  }
3492
3615
  //#endregion
@@ -3572,7 +3695,6 @@ declare class WaitNode implements RunnableNode<Wait<any>> {
3572
3695
  declare class Wait<TItemJson = unknown> implements RunnableNodeConfig<TItemJson, TItemJson> {
3573
3696
  readonly name: string;
3574
3697
  readonly milliseconds: number;
3575
- readonly id?: string | undefined;
3576
3698
  readonly kind: "node";
3577
3699
  readonly type: TypeToken<unknown>;
3578
3700
  readonly execution: {
@@ -3581,7 +3703,9 @@ declare class Wait<TItemJson = unknown> implements RunnableNodeConfig<TItemJson,
3581
3703
  /** Pass-through empty batches should still advance to downstream nodes. */
3582
3704
  readonly continueWhenEmptyOutput: true;
3583
3705
  readonly icon: "lucide:hourglass";
3584
- constructor(name: string, milliseconds: number, id?: string | undefined);
3706
+ readonly id?: string;
3707
+ readonly description?: string;
3708
+ constructor(name: string, milliseconds: number, idOrOptions?: string | NodeBaseOptions);
3585
3709
  inspectorSummary(): ReadonlyArray<NodeInspectorSummaryRow>;
3586
3710
  }
3587
3711
  //#endregion
@@ -3609,15 +3733,16 @@ declare class WebhookTrigger<TSchema extends WebhookInputSchema | undefined = un
3609
3733
  readonly name: string;
3610
3734
  private readonly args;
3611
3735
  readonly handler: WebhookTriggerHandler<WebhookTrigger<TSchema>>;
3612
- readonly id?: string | undefined;
3613
3736
  readonly kind: "trigger";
3614
3737
  readonly type: TypeToken<unknown>;
3615
3738
  readonly icon = "lucide:globe";
3739
+ readonly id?: string;
3740
+ readonly description?: string;
3616
3741
  constructor(name: string, args: Readonly<{
3617
3742
  endpointKey: string;
3618
3743
  methods: ReadonlyArray<HttpMethod>;
3619
3744
  inputSchema?: TSchema;
3620
- }>, handler?: WebhookTriggerHandler<WebhookTrigger<TSchema>>, id?: string | undefined);
3745
+ }>, handler?: WebhookTriggerHandler<WebhookTrigger<TSchema>>, idOrOptions?: string | NodeBaseOptions);
3621
3746
  get endpointKey(): string;
3622
3747
  get methods(): ReadonlyArray<HttpMethod>;
3623
3748
  get inputSchema(): TSchema | undefined;
@@ -3931,5 +4056,5 @@ declare const codemationDocumentScannerNode: DefinedNode<"codemation.document-sc
3931
4056
  fields: Readonly<Record<string, DocScannerField>>;
3932
4057
  }>, undefined>;
3933
4058
  //#endregion
3934
- export { AIAgent, AIAgentConnectionWorkflowExpander, AIAgentExecutionHelpersFactory, AIAgentNode, AgentItemPortMap, AgentMessageFactory, AgentOutputFactory, AgentStructuredOutputRepairPromptFactory, AgentStructuredOutputRunner, AgentToolCallPortMap, AgentToolErrorClassifier, AgentToolExecutionCoordinator, AgentToolRepairExhaustedError, AgentToolRepairPolicy, Aggregate, AggregateNode, Assertion, AssertionNode, AssertionOptions, BM25Index, BinaryRef, Callback, CallbackHandler, CallbackNode, CallbackOptions, CallbackResultNormalizer, CanvasIconName, CodemationChatModelConfig, CodemationChatModelFactory, CodemationDocumentScannerConfig, CodemationManagedModel, ConnectionCredentialExecutionContextFactory, ConnectionCredentialNode, ConnectionCredentialNodeConfig, ConnectionCredentialNodeConfigFactory, CredentialSession, CronTickJson, CronTrigger, CronTriggerNode, DeferredMetaToolStrategy, DeferredMetaToolStrategyFactory, DefineRestNodeOptions, DocScannerAnalyzerType, DocScannerField, DocScannerOutput, ExecutedToolCall, Filter, FilterNode, FindToolsResult, HTTP_REQUEST_ACCEPTED_CREDENTIAL_TYPES, HttpBodySpec, HttpCredentialDelta, HttpRequest, HttpRequestDownloadMode, HttpRequestNode, HttpRequestOutputJson, HttpRequestResult, HttpRequestSpec, If, IfNode, IsTestRun, IsTestRunNode, ItemScopedToolBinding, ManagedModelDto, ManagedModelFetcher, ManualTrigger, ManualTriggerNode, MapData, MapDataNode, MapDataOptions, Merge, MergeMode, MergeNode, NoOp, NoOpNode, OpenAIChatModelConfig, OpenAIChatModelFactory, OpenAiChatModelPresets, OpenAiCredentialSession, OpenAiStrictJsonSchemaFactory, PlannedToolCall, ResolvedTool, RestNodeApi, RestNodeErrorPolicy, RestNodeRequestShape, RestNodeResponseContext, SSRFBlockedError, Split, SplitNode, SsrfGuard, SubWorkflow, SubWorkflowNode, Switch, SwitchCaseKeyResolver, SwitchNode, TestTrigger, TestTriggerNode, TestTriggerOptions, ToolLoadingStrategy, ToolLoadingStrategyInitInput, ToolLoadingStrategyTurnContext, Wait, WaitDuration, WaitNode, WebhookRespondNowAndContinueError, WebhookRespondNowError, WebhookTrigger, WebhookTriggerNode, type WorkflowAgentMessages, type WorkflowAgentOptions, WorkflowAuthoringBuilder, WorkflowBranchBuilder, WorkflowChain, apiKeyCredentialType, basicAuthCredentialType, bearerTokenCredentialType, codemationDocumentScannerNode, collectionDeleteNode, collectionFindOneNode, collectionGetNode, collectionInsertNode, collectionListNode, collectionUpdateNode, createWorkflowBuilder, defineRestNode, inboxApproval, oauth2ClientCredentialsType, openAiChatModelPresets, registerCoreNodes, workflow };
4059
+ export { AIAgent, AIAgentConnectionWorkflowExpander, AIAgentExecutionHelpersFactory, AIAgentNode, AgentItemPortMap, AgentMessageFactory, AgentOutputFactory, AgentStructuredOutputRepairPromptFactory, AgentStructuredOutputRunner, AgentToolCallPortMap, AgentToolErrorClassifier, AgentToolExecutionCoordinator, AgentToolRepairExhaustedError, AgentToolRepairPolicy, Aggregate, AggregateNode, Assertion, AssertionNode, AssertionOptions, BM25Index, BinaryRef, Callback, CallbackHandler, CallbackNode, CallbackOptions, CallbackResultNormalizer, CanvasIconName, CodemationChatModelConfig, CodemationChatModelFactory, CodemationDocumentScannerConfig, ConnectionCredentialExecutionContextFactory, ConnectionCredentialNode, ConnectionCredentialNodeConfig, ConnectionCredentialNodeConfigFactory, CredentialSession, CronTickJson, CronTrigger, CronTriggerNode, DeferredMetaToolStrategy, DeferredMetaToolStrategyFactory, DefineRestNodeOptions, DocScannerAnalyzerType, DocScannerField, DocScannerOutput, ExecutedToolCall, Filter, FilterNode, FindToolsResult, HTTP_REQUEST_ACCEPTED_CREDENTIAL_TYPES, HttpBodySpec, HttpCredentialDelta, HttpRequest, HttpRequestDownloadMode, HttpRequestNode, HttpRequestOutputJson, HttpRequestResult, HttpRequestSpec, If, IfNode, IsTestRun, IsTestRunNode, ItemScopedToolBinding, ManagedComplexity, ManualTrigger, ManualTriggerNode, MapData, MapDataNode, MapDataOptions, Merge, MergeMode, MergeNode, NoOp, NoOpNode, NodeBaseOptions, OpenAIChatModelConfig, OpenAIChatModelFactory, OpenAiChatModelPresets, OpenAiCredentialSession, OpenAiStrictJsonSchemaFactory, PlannedToolCall, ResolvedTool, RestNodeApi, RestNodeErrorPolicy, RestNodeRequestShape, RestNodeResponseContext, SSRFBlockedError, Split, SplitNode, SsrfGuard, SubWorkflow, SubWorkflowNode, Switch, SwitchCaseKeyResolver, SwitchNode, TestTrigger, TestTriggerNode, TestTriggerOptions, ToolLoadingStrategy, ToolLoadingStrategyInitInput, ToolLoadingStrategyTurnContext, Wait, WaitDuration, WaitNode, WebhookRespondNowAndContinueError, WebhookRespondNowError, WebhookTrigger, WebhookTriggerNode, type WorkflowAgentMessages, type WorkflowAgentOptions, WorkflowAuthoringBuilder, WorkflowBranchBuilder, WorkflowChain, apiKeyCredentialType, basicAuthCredentialType, bearerTokenCredentialType, codemationDocumentScannerNode, collectionDeleteNode, collectionFindOneNode, collectionGetNode, collectionInsertNode, collectionListNode, collectionUpdateNode, createWorkflowBuilder, defineRestNode, inboxApproval, oauth2ClientCredentialsType, openAiChatModelPresets, registerCoreNodes, workflow };
3935
4060
  //# sourceMappingURL=index.d.cts.map