@particle-academy/fancy-flow 0.77.0 → 0.78.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 (82) hide show
  1. package/dist/{FlowViewer-Ak8kbY0e.d.cts → FlowViewer-BqYQl2vS.d.cts} +1 -1
  2. package/dist/{FlowViewer-BAV29Zpi.d.ts → FlowViewer-_Fq8AX9V.d.ts} +1 -1
  3. package/dist/{HumanPrompt-xYPCL2jO.d.cts → HumanPrompt-Sl1wD9Bx.d.cts} +2 -2
  4. package/dist/{HumanPrompt-Ge_ccCgS.d.ts → HumanPrompt-_SKIdSpx.d.ts} +2 -2
  5. package/dist/{chunk-MMCHYY6B.js → chunk-3EDB6ELL.js} +3 -3
  6. package/dist/{chunk-MMCHYY6B.js.map → chunk-3EDB6ELL.js.map} +1 -1
  7. package/dist/{chunk-KFC3BURT.js → chunk-4GNDRRJ3.js} +3 -3
  8. package/dist/{chunk-KFC3BURT.js.map → chunk-4GNDRRJ3.js.map} +1 -1
  9. package/dist/{chunk-44VXYZ4M.js → chunk-BBFHGAEN.js} +4 -4
  10. package/dist/{chunk-44VXYZ4M.js.map → chunk-BBFHGAEN.js.map} +1 -1
  11. package/dist/{chunk-OOQ2MMBE.js → chunk-GPFIJR2K.js} +4 -4
  12. package/dist/{chunk-OOQ2MMBE.js.map → chunk-GPFIJR2K.js.map} +1 -1
  13. package/dist/{chunk-YNKOEQLI.js → chunk-J5YUYDMK.js} +106 -6
  14. package/dist/chunk-J5YUYDMK.js.map +1 -0
  15. package/dist/{chunk-X2UHP2S5.js → chunk-S4MOUOG4.js} +3 -3
  16. package/dist/{chunk-X2UHP2S5.js.map → chunk-S4MOUOG4.js.map} +1 -1
  17. package/dist/{chunk-66JAEWPP.js → chunk-XO4ODEY2.js} +3 -3
  18. package/dist/{chunk-66JAEWPP.js.map → chunk-XO4ODEY2.js.map} +1 -1
  19. package/dist/connectors.d.cts +2 -2
  20. package/dist/connectors.d.ts +2 -2
  21. package/dist/durable/index.d.cts +2 -2
  22. package/dist/durable/index.d.ts +2 -2
  23. package/dist/durable.cjs +104 -4
  24. package/dist/durable.cjs.map +1 -1
  25. package/dist/durable.js +1 -1
  26. package/dist/engine.cjs +104 -4
  27. package/dist/engine.cjs.map +1 -1
  28. package/dist/engine.d.cts +6 -6
  29. package/dist/engine.d.ts +6 -6
  30. package/dist/engine.js +4 -4
  31. package/dist/fields/react-fancy.d.cts +3 -3
  32. package/dist/fields/react-fancy.d.ts +3 -3
  33. package/dist/index.cjs +104 -4
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +10 -10
  36. package/dist/index.d.ts +10 -10
  37. package/dist/index.js +12 -12
  38. package/dist/layout/index.d.cts +1 -1
  39. package/dist/layout/index.d.ts +1 -1
  40. package/dist/llm/prism.d.cts +1 -1
  41. package/dist/llm/prism.d.ts +1 -1
  42. package/dist/llm/vercel-ai.d.cts +1 -1
  43. package/dist/llm/vercel-ai.d.ts +1 -1
  44. package/dist/registry/index.d.cts +5 -5
  45. package/dist/registry/index.d.ts +5 -5
  46. package/dist/{registry-JUcN_xWK.d.ts → registry-C4GcH583.d.ts} +1 -1
  47. package/dist/{registry-B6SiTaLZ.d.cts → registry-DWIY3bMP.d.cts} +1 -1
  48. package/dist/registry.cjs +104 -4
  49. package/dist/registry.cjs.map +1 -1
  50. package/dist/registry.js +2 -2
  51. package/dist/{run-cohort-rgT_FX3V.d.ts → run-cohort-DAfhZm-p.d.ts} +2 -2
  52. package/dist/{run-cohort-DNpPa0mq.d.cts → run-cohort-DRJvUWO9.d.cts} +2 -2
  53. package/dist/{run-flow-pW0PllaZ.d.cts → run-flow-Bdrn4lQV.d.cts} +1 -1
  54. package/dist/{run-flow-BLP9rXfO.d.ts → run-flow-D2iOjWsj.d.ts} +1 -1
  55. package/dist/runtime/index.d.cts +5 -5
  56. package/dist/runtime/index.d.ts +5 -5
  57. package/dist/runtime.cjs +104 -4
  58. package/dist/runtime.cjs.map +1 -1
  59. package/dist/runtime.js +3 -3
  60. package/dist/schema/index.d.cts +1 -1
  61. package/dist/schema/index.d.ts +1 -1
  62. package/dist/schema.cjs +104 -4
  63. package/dist/schema.cjs.map +1 -1
  64. package/dist/schema.js +3 -3
  65. package/dist/screens.cjs +104 -4
  66. package/dist/screens.cjs.map +1 -1
  67. package/dist/screens.d.cts +2 -2
  68. package/dist/screens.d.ts +2 -2
  69. package/dist/screens.js +4 -4
  70. package/dist/terminal/fancy-term-host.d.cts +1 -1
  71. package/dist/terminal/fancy-term-host.d.ts +1 -1
  72. package/dist/{types-BdkXxjFh.d.cts → types-B1jftRa9.d.cts} +1 -1
  73. package/dist/{types-CbekKMMO.d.ts → types-D5SBBpbe.d.ts} +1 -1
  74. package/dist/{types-B-Syk9-M.d.cts → types-E48Dpesq.d.cts} +20 -0
  75. package/dist/{types-B-Syk9-M.d.ts → types-E48Dpesq.d.ts} +20 -0
  76. package/dist/ux.cjs +104 -4
  77. package/dist/ux.cjs.map +1 -1
  78. package/dist/ux.d.cts +2 -2
  79. package/dist/ux.d.ts +2 -2
  80. package/dist/ux.js +1 -1
  81. package/package.json +2 -2
  82. package/dist/chunk-YNKOEQLI.js.map +0 -1
package/dist/index.d.cts CHANGED
@@ -3,23 +3,23 @@ import { ReactNode, CSSProperties, ComponentProps, ComponentType } from 'react';
3
3
  import { ReactFlowProps, Edge, BackgroundVariant, Connection, NodeProps, NodeTypes } from '@xyflow/react';
4
4
  import { ConnectionValidatorOptions } from './registry/index.cjs';
5
5
  export { ANY_PORT_TYPE, BUILTIN_KINDS, PortCompatibility, RegistryNode, RichInputAdapter, RichInputPreview, buildNodeTypes, createConnectionValidator, defaultPortCompatibility, getRichInputAdapter, isRichInputEnabled, onRichInputAdapterChanged, registerBuiltinKinds, registerRichInputAdapter, resolveNodePorts, resolvePortSpec } from './registry/index.cjs';
6
- import { a as FlowNode, F as FlowGraph, h as NodeRunStatus, E as ExecutorRegistry } from './types-B-Syk9-M.cjs';
7
- export { A as ActionNodeData, B as BaseNodeData, D as DecisionNodeData, e as FlowEdge, f as FlowNodeData, g as FlowNodeKind, N as NodeExecutor, i as NoteNodeData, O as OutputNodeData, P as PortDescriptor, R as RunEvent, S as SubgraphNodeData, j as TriggerNodeData } from './types-B-Syk9-M.cjs';
8
- import { a as NodeCategory, N as NodeKindDefinition, C as ConfigField } from './types-BdkXxjFh.cjs';
9
- export { A as AvailableVariable, D as DocumentConfigField, E as EmitsRelation, t as ExpressionForm, u as ExpressionGrammarHelp, K as KeyValueConfigField, O as OutputField, h as OutputShape, P as PortSpec, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, w as availableVariables, x as baseVariables, y as describeExpressionGrammar, z as outputFieldsFor } from './types-BdkXxjFh.cjs';
10
- import { C as ConfigFieldRenderFn, H as HumanFieldRenderers } from './HumanPrompt-xYPCL2jO.cjs';
11
- export { a as ConfigFieldRenderContext, b as ConfigFieldRenderer, c as ConfigFieldRendererProps } from './HumanPrompt-xYPCL2jO.cjs';
6
+ import { a as FlowNode, F as FlowGraph, h as NodeRunStatus, E as ExecutorRegistry } from './types-E48Dpesq.cjs';
7
+ export { A as ActionNodeData, B as BaseNodeData, D as DecisionNodeData, e as FlowEdge, f as FlowNodeData, g as FlowNodeKind, N as NodeExecutor, i as NoteNodeData, O as OutputNodeData, P as PortDescriptor, R as RunEvent, S as SubgraphNodeData, j as TriggerNodeData } from './types-E48Dpesq.cjs';
8
+ import { a as NodeCategory, N as NodeKindDefinition, C as ConfigField } from './types-B1jftRa9.cjs';
9
+ export { A as AvailableVariable, D as DocumentConfigField, E as EmitsRelation, t as ExpressionForm, u as ExpressionGrammarHelp, K as KeyValueConfigField, O as OutputField, h as OutputShape, P as PortSpec, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, w as availableVariables, x as baseVariables, y as describeExpressionGrammar, z as outputFieldsFor } from './types-B1jftRa9.cjs';
10
+ import { C as ConfigFieldRenderFn, H as HumanFieldRenderers } from './HumanPrompt-Sl1wD9Bx.cjs';
11
+ export { a as ConfigFieldRenderContext, b as ConfigFieldRenderer, c as ConfigFieldRendererProps } from './HumanPrompt-Sl1wD9Bx.cjs';
12
12
  import { WorkflowSchema, WorkflowMetadata } from './schema/index.cjs';
13
13
  export { ImportIssue, ImportOptions, ImportResult, WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, WorkflowSchemaEdge, WorkflowSchemaNode, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './schema/index.cjs';
14
14
  import { AutoLayoutOptions } from './layout/index.cjs';
15
15
  export { AutoLayoutDirection } from './layout/index.cjs';
16
- export { F as FlowNodeStatus, a as FlowViewer, b as FlowViewerClassNames, c as FlowViewerProps } from './FlowViewer-Ak8kbY0e.cjs';
16
+ export { F as FlowNodeStatus, a as FlowViewer, b as FlowViewerClassNames, c as FlowViewerProps } from './FlowViewer-BqYQl2vS.cjs';
17
17
  import { FlowRunFeedEntry } from './runtime/index.cjs';
18
18
  export { HistoryController, UseFlowHistoryReturn, UseFlowRunOptions, UseFlowRunReturn, UseFlowStateReturn, applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './runtime/index.cjs';
19
- export { R as RunOptions, a as RunResult, r as runFlow } from './run-flow-pW0PllaZ.cjs';
20
- export { C as CohortGuard, a as CohortOptions, b as CohortPolicy, c as CohortResult, r as runCohort } from './run-cohort-DNpPa0mq.cjs';
19
+ export { R as RunOptions, a as RunResult, r as runFlow } from './run-flow-Bdrn4lQV.cjs';
20
+ export { C as CohortGuard, a as CohortOptions, b as CohortPolicy, c as CohortResult, r as runCohort } from './run-cohort-DRJvUWO9.cjs';
21
21
  export { E as EvaluateOptions, a as ExprContext, b as ExprValue, R as Resolution, U as UnresolvedPathError, c as UnresolvedPolicy, e as evaluateConfig, d as evaluateExpression, r as resolvePath, t as text, f as truthy, g as tryResolvePath } from './expr-BfXDrs4H.cjs';
22
- export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, u as unregisterNodeKind, v as validateConfig } from './registry-B6SiTaLZ.cjs';
22
+ export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, u as unregisterNodeKind, v as validateConfig } from './registry-DWIY3bMP.cjs';
23
23
  export { L as LEGACY_PAUSE_PREFIXES, a as PAUSE_PREFIX, P as PauseAwaiting, b as PauseSignal, d as decodePause, e as encodePause, i as isPause, p as pauseForHuman } from './pause-9iT4tCEV.cjs';
24
24
 
25
25
  type FlowCanvasProps = Omit<ReactFlowProps<FlowNode, Edge>, "nodes" | "edges" | "height"> & {
package/dist/index.d.ts CHANGED
@@ -3,23 +3,23 @@ import { ReactNode, CSSProperties, ComponentProps, ComponentType } from 'react';
3
3
  import { ReactFlowProps, Edge, BackgroundVariant, Connection, NodeProps, NodeTypes } from '@xyflow/react';
4
4
  import { ConnectionValidatorOptions } from './registry/index.js';
5
5
  export { ANY_PORT_TYPE, BUILTIN_KINDS, PortCompatibility, RegistryNode, RichInputAdapter, RichInputPreview, buildNodeTypes, createConnectionValidator, defaultPortCompatibility, getRichInputAdapter, isRichInputEnabled, onRichInputAdapterChanged, registerBuiltinKinds, registerRichInputAdapter, resolveNodePorts, resolvePortSpec } from './registry/index.js';
6
- import { a as FlowNode, F as FlowGraph, h as NodeRunStatus, E as ExecutorRegistry } from './types-B-Syk9-M.js';
7
- export { A as ActionNodeData, B as BaseNodeData, D as DecisionNodeData, e as FlowEdge, f as FlowNodeData, g as FlowNodeKind, N as NodeExecutor, i as NoteNodeData, O as OutputNodeData, P as PortDescriptor, R as RunEvent, S as SubgraphNodeData, j as TriggerNodeData } from './types-B-Syk9-M.js';
8
- import { a as NodeCategory, N as NodeKindDefinition, C as ConfigField } from './types-CbekKMMO.js';
9
- export { A as AvailableVariable, D as DocumentConfigField, E as EmitsRelation, t as ExpressionForm, u as ExpressionGrammarHelp, K as KeyValueConfigField, O as OutputField, h as OutputShape, P as PortSpec, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, w as availableVariables, x as baseVariables, y as describeExpressionGrammar, z as outputFieldsFor } from './types-CbekKMMO.js';
10
- import { C as ConfigFieldRenderFn, H as HumanFieldRenderers } from './HumanPrompt-Ge_ccCgS.js';
11
- export { a as ConfigFieldRenderContext, b as ConfigFieldRenderer, c as ConfigFieldRendererProps } from './HumanPrompt-Ge_ccCgS.js';
6
+ import { a as FlowNode, F as FlowGraph, h as NodeRunStatus, E as ExecutorRegistry } from './types-E48Dpesq.js';
7
+ export { A as ActionNodeData, B as BaseNodeData, D as DecisionNodeData, e as FlowEdge, f as FlowNodeData, g as FlowNodeKind, N as NodeExecutor, i as NoteNodeData, O as OutputNodeData, P as PortDescriptor, R as RunEvent, S as SubgraphNodeData, j as TriggerNodeData } from './types-E48Dpesq.js';
8
+ import { a as NodeCategory, N as NodeKindDefinition, C as ConfigField } from './types-D5SBBpbe.js';
9
+ export { A as AvailableVariable, D as DocumentConfigField, E as EmitsRelation, t as ExpressionForm, u as ExpressionGrammarHelp, K as KeyValueConfigField, O as OutputField, h as OutputShape, P as PortSpec, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, w as availableVariables, x as baseVariables, y as describeExpressionGrammar, z as outputFieldsFor } from './types-D5SBBpbe.js';
10
+ import { C as ConfigFieldRenderFn, H as HumanFieldRenderers } from './HumanPrompt-_SKIdSpx.js';
11
+ export { a as ConfigFieldRenderContext, b as ConfigFieldRenderer, c as ConfigFieldRendererProps } from './HumanPrompt-_SKIdSpx.js';
12
12
  import { WorkflowSchema, WorkflowMetadata } from './schema/index.js';
13
13
  export { ImportIssue, ImportOptions, ImportResult, WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, WorkflowSchemaEdge, WorkflowSchemaNode, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './schema/index.js';
14
14
  import { AutoLayoutOptions } from './layout/index.js';
15
15
  export { AutoLayoutDirection } from './layout/index.js';
16
- export { F as FlowNodeStatus, a as FlowViewer, b as FlowViewerClassNames, c as FlowViewerProps } from './FlowViewer-BAV29Zpi.js';
16
+ export { F as FlowNodeStatus, a as FlowViewer, b as FlowViewerClassNames, c as FlowViewerProps } from './FlowViewer-_Fq8AX9V.js';
17
17
  import { FlowRunFeedEntry } from './runtime/index.js';
18
18
  export { HistoryController, UseFlowHistoryReturn, UseFlowRunOptions, UseFlowRunReturn, UseFlowStateReturn, applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './runtime/index.js';
19
- export { R as RunOptions, a as RunResult, r as runFlow } from './run-flow-BLP9rXfO.js';
20
- export { C as CohortGuard, a as CohortOptions, b as CohortPolicy, c as CohortResult, r as runCohort } from './run-cohort-rgT_FX3V.js';
19
+ export { R as RunOptions, a as RunResult, r as runFlow } from './run-flow-D2iOjWsj.js';
20
+ export { C as CohortGuard, a as CohortOptions, b as CohortPolicy, c as CohortResult, r as runCohort } from './run-cohort-DAfhZm-p.js';
21
21
  export { E as EvaluateOptions, a as ExprContext, b as ExprValue, R as Resolution, U as UnresolvedPathError, c as UnresolvedPolicy, e as evaluateConfig, d as evaluateExpression, r as resolvePath, t as text, f as truthy, g as tryResolvePath } from './expr-BfXDrs4H.js';
22
- export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, u as unregisterNodeKind, v as validateConfig } from './registry-JUcN_xWK.js';
22
+ export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, u as unregisterNodeKind, v as validateConfig } from './registry-C4GcH583.js';
23
23
  export { L as LEGACY_PAUSE_PREFIXES, a as PAUSE_PREFIX, P as PauseAwaiting, b as PauseSignal, d as decodePause, e as encodePause, i as isPause, p as pauseForHuman } from './pause-9iT4tCEV.js';
24
24
 
25
25
  type FlowCanvasProps = Omit<ReactFlowProps<FlowNode, Edge>, "nodes" | "edges" | "height"> & {
package/dist/index.js CHANGED
@@ -1,18 +1,18 @@
1
- import { removeNodes, removeEdges, cloneSubgraph, alignNodes, distributeNodes, reconnectEdge, assignToLane, removeFromLane, duplicateNode, setEdgeLabel, FlowCanvas } from './chunk-44VXYZ4M.js';
2
- export { ActionNode, DecisionNode, FlowCanvas, FlowViewer, NodeShell, OutputNode, SubgraphNode, TriggerNode, alignNodes, cloneSubgraph, defaultNodeTypes, distributeNodes, reconnectEdge } from './chunk-44VXYZ4M.js';
3
- import { useFlowState, useFlowRun, useFlowHistory, applyOutputsToNodes, applyStatusesToNodes } from './chunk-X2UHP2S5.js';
4
- export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-X2UHP2S5.js';
5
- export { runCohort } from './chunk-KFC3BURT.js';
6
- import { buildNodeTypes, FlowEditorProvider, registerBuiltinKinds } from './chunk-66JAEWPP.js';
7
- export { ANY_PORT_TYPE, BUILTIN_KINDS, LaneNode, NoteNode, RegistryNode, buildNodeTypes, createConnectionValidator, defaultPortCompatibility, registerBuiltinKinds, useFlowEditor, useFlowEditorOptional } from './chunk-66JAEWPP.js';
1
+ import { removeNodes, removeEdges, cloneSubgraph, alignNodes, distributeNodes, reconnectEdge, assignToLane, removeFromLane, duplicateNode, setEdgeLabel, FlowCanvas } from './chunk-BBFHGAEN.js';
2
+ export { ActionNode, DecisionNode, FlowCanvas, FlowViewer, NodeShell, OutputNode, SubgraphNode, TriggerNode, alignNodes, cloneSubgraph, defaultNodeTypes, distributeNodes, reconnectEdge } from './chunk-BBFHGAEN.js';
3
+ import { useFlowState, useFlowRun, useFlowHistory, applyOutputsToNodes, applyStatusesToNodes } from './chunk-S4MOUOG4.js';
4
+ export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-S4MOUOG4.js';
5
+ export { runCohort } from './chunk-4GNDRRJ3.js';
6
+ import { buildNodeTypes, FlowEditorProvider, registerBuiltinKinds } from './chunk-XO4ODEY2.js';
7
+ export { ANY_PORT_TYPE, BUILTIN_KINDS, LaneNode, NoteNode, RegistryNode, buildNodeTypes, createConnectionValidator, defaultPortCompatibility, registerBuiltinKinds, useFlowEditor, useFlowEditorOptional } from './chunk-XO4ODEY2.js';
8
8
  import { getRichInputAdapter } from './chunk-F5RPRB7A.js';
9
9
  export { RichInputPreview, getRichInputAdapter, isRichInputEnabled, onRichInputAdapterChanged, registerRichInputAdapter } from './chunk-F5RPRB7A.js';
10
10
  import { ReactFlowProvider, useReactFlow, addEdge, applyEdgeChanges, applyNodeChanges, Position, Handle } from './chunk-OWENS2H5.js';
11
- import { workflowToBlob, importWorkflow, exportWorkflow } from './chunk-OOQ2MMBE.js';
12
- export { WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './chunk-OOQ2MMBE.js';
13
- import './chunk-MMCHYY6B.js';
14
- import { humanInputFields, onNodeKindsChanged, listNodeKinds, getNodeKind, defaultConfigFor, ensureBuiltinKinds, validateConfig, categoryAccent, availableVariables, baseVariables, describeExpressionGrammar } from './chunk-YNKOEQLI.js';
15
- export { LEGACY_PAUSE_PREFIXES, PAUSE_PREFIX, UnresolvedPathError, applyKindSchemaOverlay, availableVariables, baseVariables, categoryAccent, clearKindSchemaOverlays, clearNodeKindOverrides, decodePause, defaultConfigFor, describeExpressionGrammar, encodePause, ensureBuiltinKinds, evaluateConfig, evaluateExpression, getNodeKind, isPause, listNodeKinds, onNodeKindsChanged, outputFieldsFor, overrideNodeKind, pauseForHuman, registerNodeKind, resolveNodePorts, resolvePath, resolvePortSpec, runFlow, text, truthy, tryResolvePath, unregisterNodeKind, validateConfig } from './chunk-YNKOEQLI.js';
11
+ import { workflowToBlob, importWorkflow, exportWorkflow } from './chunk-GPFIJR2K.js';
12
+ export { WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './chunk-GPFIJR2K.js';
13
+ import './chunk-3EDB6ELL.js';
14
+ import { humanInputFields, onNodeKindsChanged, listNodeKinds, getNodeKind, defaultConfigFor, ensureBuiltinKinds, validateConfig, categoryAccent, availableVariables, baseVariables, describeExpressionGrammar } from './chunk-J5YUYDMK.js';
15
+ export { LEGACY_PAUSE_PREFIXES, PAUSE_PREFIX, UnresolvedPathError, applyKindSchemaOverlay, availableVariables, baseVariables, categoryAccent, clearKindSchemaOverlays, clearNodeKindOverrides, decodePause, defaultConfigFor, describeExpressionGrammar, encodePause, ensureBuiltinKinds, evaluateConfig, evaluateExpression, getNodeKind, isPause, listNodeKinds, onNodeKindsChanged, outputFieldsFor, overrideNodeKind, pauseForHuman, registerNodeKind, resolveNodePorts, resolvePath, resolvePortSpec, runFlow, text, truthy, tryResolvePath, unregisterNodeKind, validateConfig } from './chunk-J5YUYDMK.js';
16
16
  import './chunk-2QXKDLGT.js';
17
17
  import { forwardRef, useState, useMemo, useEffect, useCallback, useRef, useImperativeHandle, useId, memo } from 'react';
18
18
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { F as FlowGraph, a as FlowNode } from '../types-B-Syk9-M.cjs';
1
+ import { F as FlowGraph, a as FlowNode } from '../types-E48Dpesq.cjs';
2
2
  import '@xyflow/react';
3
3
 
4
4
  type AutoLayoutDirection = "LR" | "TB" | "RL" | "BT";
@@ -1,4 +1,4 @@
1
- import { F as FlowGraph, a as FlowNode } from '../types-B-Syk9-M.js';
1
+ import { F as FlowGraph, a as FlowNode } from '../types-E48Dpesq.js';
2
2
  import '@xyflow/react';
3
3
 
4
4
  type AutoLayoutDirection = "LR" | "TB" | "RL" | "BT";
@@ -1,4 +1,4 @@
1
- import { L as LlmClient } from '../types-B-Syk9-M.cjs';
1
+ import { L as LlmClient } from '../types-E48Dpesq.cjs';
2
2
  import '@xyflow/react';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { L as LlmClient } from '../types-B-Syk9-M.js';
1
+ import { L as LlmClient } from '../types-E48Dpesq.js';
2
2
  import '@xyflow/react';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import { LanguageModel } from 'ai';
2
- import { b as LlmRouteRequest, L as LlmClient } from '../types-B-Syk9-M.cjs';
2
+ import { b as LlmRouteRequest, L as LlmClient } from '../types-E48Dpesq.cjs';
3
3
  import '@xyflow/react';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { LanguageModel } from 'ai';
2
- import { b as LlmRouteRequest, L as LlmClient } from '../types-B-Syk9-M.js';
2
+ import { b as LlmRouteRequest, L as LlmClient } from '../types-E48Dpesq.js';
3
3
  import '@xyflow/react';
4
4
 
5
5
  /**
@@ -1,12 +1,12 @@
1
- import { N as NodeKindDefinition, P as PortSpec } from '../types-BdkXxjFh.cjs';
2
- export { C as ConfigField, k as CredentialConfigField, D as DocumentConfigField, E as EmitsRelation, l as ExpressionConfigField, J as JsonConfigField, K as KeyValueConfigField, a as NodeCategory, m as NumberConfigField, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, p as SelectConfigField, q as SwitchConfigField, T as TextConfigField, r as TextareaConfigField } from '../types-BdkXxjFh.cjs';
3
- import { P as PortDescriptor, a as FlowNode, N as NodeExecutor, l as LlmRoute } from '../types-B-Syk9-M.cjs';
4
- export { C as CapabilityId, L as LlmClient, m as LlmRouteChoice, b as LlmRouteRequest, n as TerminalExit, T as TerminalHost, o as TerminalSession, p as TerminalSessionSpec, q as WorkflowResolution, r as WorkflowResolutionFailure, W as WorkflowResolver, s as capabilityStatus, t as getLlmClient, u as getTerminalHost, v as getWorkflowResolver, w as isResolutionFailure, x as registerLlmClient, y as registerTerminalHost, z as registerWorkflowResolver } from '../types-B-Syk9-M.cjs';
1
+ import { N as NodeKindDefinition, P as PortSpec } from '../types-B1jftRa9.cjs';
2
+ export { C as ConfigField, k as CredentialConfigField, D as DocumentConfigField, E as EmitsRelation, l as ExpressionConfigField, J as JsonConfigField, K as KeyValueConfigField, a as NodeCategory, m as NumberConfigField, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, p as SelectConfigField, q as SwitchConfigField, T as TextConfigField, r as TextareaConfigField } from '../types-B1jftRa9.cjs';
3
+ import { P as PortDescriptor, a as FlowNode, N as NodeExecutor, l as LlmRoute } from '../types-E48Dpesq.cjs';
4
+ export { C as CapabilityId, L as LlmClient, m as LlmRouteChoice, b as LlmRouteRequest, n as TerminalExit, T as TerminalHost, o as TerminalSession, p as TerminalSessionSpec, q as WorkflowResolution, r as WorkflowResolutionFailure, W as WorkflowResolver, s as capabilityStatus, t as getLlmClient, u as getTerminalHost, v as getWorkflowResolver, w as isResolutionFailure, x as registerLlmClient, y as registerTerminalHost, z as registerWorkflowResolver } from '../types-E48Dpesq.cjs';
5
5
  import { Connection, Edge, NodeProps, NodeTypes } from '@xyflow/react';
6
6
  export { L as LEGACY_PAUSE_PREFIXES, a as PAUSE_PREFIX, P as PauseAwaiting, b as PauseSignal, d as decodePause, e as encodePause, i as isPause, p as pauseForHuman } from '../pause-9iT4tCEV.cjs';
7
7
  import * as react from 'react';
8
8
  import { ComponentType, ReactNode } from 'react';
9
- export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, k as kindIds, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, e as resolveKindId, u as unregisterNodeKind, v as validateConfig } from '../registry-B6SiTaLZ.cjs';
9
+ export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, k as kindIds, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, e as resolveKindId, u as unregisterNodeKind, v as validateConfig } from '../registry-DWIY3bMP.cjs';
10
10
 
11
11
  /**
12
12
  * Connection validation — the single rule that decides whether an edge between
@@ -1,12 +1,12 @@
1
- import { N as NodeKindDefinition, P as PortSpec } from '../types-CbekKMMO.js';
2
- export { C as ConfigField, k as CredentialConfigField, D as DocumentConfigField, E as EmitsRelation, l as ExpressionConfigField, J as JsonConfigField, K as KeyValueConfigField, a as NodeCategory, m as NumberConfigField, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, p as SelectConfigField, q as SwitchConfigField, T as TextConfigField, r as TextareaConfigField } from '../types-CbekKMMO.js';
3
- import { P as PortDescriptor, a as FlowNode, N as NodeExecutor, l as LlmRoute } from '../types-B-Syk9-M.js';
4
- export { C as CapabilityId, L as LlmClient, m as LlmRouteChoice, b as LlmRouteRequest, n as TerminalExit, T as TerminalHost, o as TerminalSession, p as TerminalSessionSpec, q as WorkflowResolution, r as WorkflowResolutionFailure, W as WorkflowResolver, s as capabilityStatus, t as getLlmClient, u as getTerminalHost, v as getWorkflowResolver, w as isResolutionFailure, x as registerLlmClient, y as registerTerminalHost, z as registerWorkflowResolver } from '../types-B-Syk9-M.js';
1
+ import { N as NodeKindDefinition, P as PortSpec } from '../types-D5SBBpbe.js';
2
+ export { C as ConfigField, k as CredentialConfigField, D as DocumentConfigField, E as EmitsRelation, l as ExpressionConfigField, J as JsonConfigField, K as KeyValueConfigField, a as NodeCategory, m as NumberConfigField, R as RenderBodyContext, n as RepeaterConfigField, o as RepeaterRowField, p as SelectConfigField, q as SwitchConfigField, T as TextConfigField, r as TextareaConfigField } from '../types-D5SBBpbe.js';
3
+ import { P as PortDescriptor, a as FlowNode, N as NodeExecutor, l as LlmRoute } from '../types-E48Dpesq.js';
4
+ export { C as CapabilityId, L as LlmClient, m as LlmRouteChoice, b as LlmRouteRequest, n as TerminalExit, T as TerminalHost, o as TerminalSession, p as TerminalSessionSpec, q as WorkflowResolution, r as WorkflowResolutionFailure, W as WorkflowResolver, s as capabilityStatus, t as getLlmClient, u as getTerminalHost, v as getWorkflowResolver, w as isResolutionFailure, x as registerLlmClient, y as registerTerminalHost, z as registerWorkflowResolver } from '../types-E48Dpesq.js';
5
5
  import { Connection, Edge, NodeProps, NodeTypes } from '@xyflow/react';
6
6
  export { L as LEGACY_PAUSE_PREFIXES, a as PAUSE_PREFIX, P as PauseAwaiting, b as PauseSignal, d as decodePause, e as encodePause, i as isPause, p as pauseForHuman } from '../pause-9iT4tCEV.js';
7
7
  import * as react from 'react';
8
8
  import { ComponentType, ReactNode } from 'react';
9
- export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, k as kindIds, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, e as resolveKindId, u as unregisterNodeKind, v as validateConfig } from '../registry-JUcN_xWK.js';
9
+ export { K as KindSchemaOverlay, a as KindSchemaOverlayResult, N as NodeKindPresentation, b as applyKindSchemaOverlay, f as categoryAccent, c as clearKindSchemaOverlays, h as clearNodeKindOverrides, d as defaultConfigFor, i as ensureBuiltinKinds, g as getNodeKind, k as kindIds, l as listNodeKinds, o as onNodeKindsChanged, j as overrideNodeKind, r as registerNodeKind, e as resolveKindId, u as unregisterNodeKind, v as validateConfig } from '../registry-C4GcH583.js';
10
10
 
11
11
  /**
12
12
  * Connection validation — the single rule that decides whether an edge between
@@ -1,4 +1,4 @@
1
- import { C as ConfigField, a as NodeCategory, N as NodeKindDefinition } from './types-CbekKMMO.js';
1
+ import { C as ConfigField, a as NodeCategory, N as NodeKindDefinition } from './types-D5SBBpbe.js';
2
2
 
3
3
  /**
4
4
  * Put the builtin kit in the registry before anyone reads or writes it.
@@ -1,4 +1,4 @@
1
- import { C as ConfigField, a as NodeCategory, N as NodeKindDefinition } from './types-BdkXxjFh.cjs';
1
+ import { C as ConfigField, a as NodeCategory, N as NodeKindDefinition } from './types-B1jftRa9.cjs';
2
2
 
3
3
  /**
4
4
  * Put the builtin kit in the registry before anyone reads or writes it.
package/dist/registry.cjs CHANGED
@@ -784,6 +784,9 @@ async function runFlow(graph, executors, onEvent = () => {
784
784
  executors,
785
785
  depth,
786
786
  run,
787
+ // Structural executors derive a nested lane from the graph they are
788
+ // in; `for_each`'s `item` port cannot be implemented without it.
789
+ graph,
787
790
  terminal: terminalAccessorFor(node)
788
791
  })
789
792
  );
@@ -1282,14 +1285,102 @@ var mergeExecutor = (ctx) => {
1282
1285
  }
1283
1286
  return merged;
1284
1287
  };
1285
- var forEachExecutor = (ctx) => {
1286
- const source = resolve(configOf(ctx.node).source, ctx.inputs);
1288
+ var FOR_EACH_DEFAULT_MAX_ITEMS = 1e3;
1289
+ var FOR_EACH_HARD_MAX_ITEMS = 1e4;
1290
+ function reachable(adjacency, starts) {
1291
+ const seen = /* @__PURE__ */ new Set();
1292
+ const queue = [...starts];
1293
+ for (let cursor = 0; cursor < queue.length; cursor += 1) {
1294
+ const id2 = queue[cursor];
1295
+ if (seen.has(id2)) continue;
1296
+ seen.add(id2);
1297
+ for (const target of adjacency.get(id2) ?? []) queue.push(target);
1298
+ }
1299
+ return seen;
1300
+ }
1301
+ function forEachLane(graph, nodeId) {
1302
+ const handleOf = (edge) => edge.sourceHandle ?? "out";
1303
+ const itemEdges = graph.edges.filter((e) => e.source === nodeId && handleOf(e) === "item");
1304
+ if (itemEdges.length === 0) return null;
1305
+ const adjacency = /* @__PURE__ */ new Map();
1306
+ for (const edge of graph.edges) {
1307
+ const list = adjacency.get(edge.source) ?? [];
1308
+ list.push(edge.target);
1309
+ adjacency.set(edge.source, list);
1310
+ }
1311
+ const done = reachable(
1312
+ adjacency,
1313
+ graph.edges.filter((e) => e.source === nodeId && handleOf(e) === "done").map((e) => e.target)
1314
+ );
1315
+ const body = new Set(
1316
+ [...reachable(adjacency, itemEdges.map((e) => e.target))].filter(
1317
+ (id2) => !done.has(id2) && id2 !== nodeId
1318
+ )
1319
+ );
1320
+ return {
1321
+ graph: {
1322
+ nodes: graph.nodes.filter((n) => body.has(n.id)),
1323
+ edges: graph.edges.filter((e) => body.has(e.source) && body.has(e.target)),
1324
+ ...graph.inputs === void 0 ? {} : { inputs: graph.inputs }
1325
+ },
1326
+ entries: itemEdges.filter((e) => body.has(e.target))
1327
+ };
1328
+ }
1329
+ var forEachExecutor = async (ctx) => {
1330
+ const config = configOf(ctx.node);
1331
+ const source = resolve(config.source, ctx.inputs);
1287
1332
  let items;
1288
1333
  if (Array.isArray(source)) items = source;
1289
1334
  else if (source === null || source === void 0) items = [];
1290
1335
  else if (typeof source === "object") items = Object.values(source);
1291
1336
  else items = [source];
1292
- return { items, count: items.length };
1337
+ const lane = ctx.graph ? forEachLane(ctx.graph, ctx.node.id) : null;
1338
+ if (lane === null || config.mode === "collect") {
1339
+ return { items, count: items.length };
1340
+ }
1341
+ if (lane.graph.nodes.length === 0) {
1342
+ ctx.abort(`for_each "${ctx.node.id}" has an item edge but its derived lane is empty`);
1343
+ }
1344
+ const maxItems = Number(config.maxItems ?? FOR_EACH_DEFAULT_MAX_ITEMS);
1345
+ if (!Number.isFinite(maxItems) || maxItems < 1 || maxItems > FOR_EACH_HARD_MAX_ITEMS) {
1346
+ ctx.abort(`for_each "${ctx.node.id}" maxItems must be between 1 and ${FOR_EACH_HARD_MAX_ITEMS}`);
1347
+ }
1348
+ if (items.length > maxItems) {
1349
+ ctx.abort(
1350
+ `for_each "${ctx.node.id}" resolved ${items.length} items exceeds its maxItems cap of ${maxItems}`
1351
+ );
1352
+ }
1353
+ const results = [];
1354
+ const failures = [];
1355
+ for (const [index2, item] of items.entries()) {
1356
+ const initialInputs = {};
1357
+ for (const edge of lane.entries) {
1358
+ initialInputs[edge.target] = {
1359
+ ...initialInputs[edge.target] ?? {},
1360
+ [edge.targetHandle ?? "in"]: item
1361
+ };
1362
+ }
1363
+ const nested = await runFlow(lane.graph, { ...ctx.executors ?? {} }, () => {
1364
+ }, {
1365
+ initialInputs,
1366
+ depth: (ctx.depth ?? 0) + 1,
1367
+ // The index rides on the identity, so a node in iteration 3 cannot share
1368
+ // an idempotency key with the same node in iteration 4.
1369
+ run: ctx.run?.descend(ctx.node.id, index2)
1370
+ });
1371
+ if (!nested.ok) {
1372
+ const reason = nested.error ?? "unknown error";
1373
+ if (decodePause(reason)) ctx.abort(reason);
1374
+ results.push(null);
1375
+ failures.push({ index: index2, item, error: reason });
1376
+ continue;
1377
+ }
1378
+ results.push(nested.outputs);
1379
+ }
1380
+ return {
1381
+ __port: "done",
1382
+ value: { items, results, failures, count: items.length }
1383
+ };
1293
1384
  };
1294
1385
  var manualTriggerExecutor = (ctx) => ctx.inputs;
1295
1386
  var outputExecutor = (ctx) => {
@@ -1846,6 +1937,15 @@ var KINDS = [
1846
1937
  name: "@particle-academy/for_each",
1847
1938
  outputShape: [
1848
1939
  { path: "items", type: "array" },
1940
+ // `results` and `failures` are the WIRED shape -- what a lane produces
1941
+ // when the `item` port is connected. Declared unconditionally because a
1942
+ // declaration describes the kind, not one graph's use of it, and because
1943
+ // the shared table requires them: fancy-conformance 0.30.0 added
1944
+ // `results` and 0.31.0 added `failures`, both BREAKING, both so that a
1945
+ // runtime which has not implemented iteration fails here rather than
1946
+ // reporting surface parity it does not have.
1947
+ { path: "results", type: "array" },
1948
+ { path: "failures", type: "array" },
1849
1949
  { path: "count", type: "number" }
1850
1950
  ],
1851
1951
  aliases: ["for_each", "@fancy/for_each"],
@@ -1854,7 +1954,7 @@ var KINDS = [
1854
1954
  executor: forEachExecutor,
1855
1955
  category: "logic",
1856
1956
  label: "For Each",
1857
- description: "Iterate over a list, emitting each item on `item`.",
1957
+ description: "Wire `item` to a lane and it runs once per item, aggregating `results` and `failures` on `done`. Leave `item` unwired (or set `mode: collect`) and it just publishes the list and its size -- one node, one checkpoint.",
1858
1958
  icon: "\u21BB",
1859
1959
  inputs: [{ id: "in" }],
1860
1960
  outputs: [{ id: "item", label: "item" }, { id: "done", label: "done" }],