@particle-academy/fancy-flow 0.49.0 → 0.51.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.
- package/dist/{ConfigFieldRenderer-CrXFq6Eb.d.cts → ConfigFieldRenderer-Bc9Txnql.d.cts} +2 -2
- package/dist/{ConfigFieldRenderer-u3nYHovX.d.ts → ConfigFieldRenderer-Bt3RGT7Z.d.ts} +2 -2
- package/dist/{FlowViewer-DRgjeWJ7.d.ts → FlowViewer-BI_AyyvU.d.ts} +1 -1
- package/dist/{FlowViewer-CFSMlCqi.d.cts → FlowViewer-DABx-6A-.d.cts} +1 -1
- package/dist/{capabilities-VzgDApur.d.cts → capabilities-BYa5p5jw.d.cts} +1 -1
- package/dist/{capabilities-B00VXLUp.d.ts → capabilities-COOXRiNL.d.ts} +1 -1
- package/dist/{chunk-6XKR65XM.js → chunk-6AI6CBNL.js} +3 -3
- package/dist/{chunk-6XKR65XM.js.map → chunk-6AI6CBNL.js.map} +1 -1
- package/dist/{chunk-AVRGZFXG.js → chunk-7XTTXMGB.js} +4 -4
- package/dist/{chunk-AVRGZFXG.js.map → chunk-7XTTXMGB.js.map} +1 -1
- package/dist/{chunk-UL3DGSSG.js → chunk-HXGGCMR7.js} +3 -3
- package/dist/{chunk-UL3DGSSG.js.map → chunk-HXGGCMR7.js.map} +1 -1
- package/dist/{chunk-YOK3WKWC.js → chunk-LH76EIFL.js} +18 -4
- package/dist/chunk-LH76EIFL.js.map +1 -0
- package/dist/{chunk-VUL7CUFW.js → chunk-SKEZ5AGI.js} +3 -3
- package/dist/{chunk-VUL7CUFW.js.map → chunk-SKEZ5AGI.js.map} +1 -1
- package/dist/{chunk-6FP3F5YR.js → chunk-XCT2CJ5O.js} +75 -4
- package/dist/chunk-XCT2CJ5O.js.map +1 -0
- package/dist/connectors.d.cts +2 -2
- package/dist/connectors.d.ts +2 -2
- package/dist/durable/index.d.cts +2 -2
- package/dist/durable/index.d.ts +2 -2
- package/dist/durable.cjs +73 -2
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.js +1 -1
- package/dist/engine.cjs +73 -2
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.cts +7 -7
- package/dist/engine.d.ts +7 -7
- package/dist/engine.js +3 -3
- package/dist/fields/react-fancy.d.cts +3 -3
- package/dist/fields/react-fancy.d.ts +3 -3
- package/dist/index.cjs +88 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +11 -11
- package/dist/layout/index.d.cts +1 -1
- package/dist/layout/index.d.ts +1 -1
- package/dist/llm/prism.d.cts +2 -2
- package/dist/llm/prism.d.ts +2 -2
- package/dist/llm/vercel-ai.d.cts +2 -2
- package/dist/llm/vercel-ai.d.ts +2 -2
- package/dist/registry/index.d.cts +6 -6
- package/dist/registry/index.d.ts +6 -6
- package/dist/{registry-6cB5wCv6.d.ts → registry-3RkSYrMi.d.ts} +1 -1
- package/dist/{registry-DQh7ZmnM.d.cts → registry-C6TMfiD_.d.cts} +1 -1
- package/dist/registry.cjs +73 -2
- package/dist/registry.cjs.map +1 -1
- package/dist/registry.js +2 -2
- package/dist/{run-cohort-VX4JG21l.d.ts → run-cohort-BPIOpE8A.d.ts} +2 -2
- package/dist/{run-cohort-DYCL8Qv6.d.cts → run-cohort-r-L8dMED.d.cts} +2 -2
- package/dist/{run-flow-B24QUO1H.d.cts → run-flow-COdAOFg2.d.cts} +10 -1
- package/dist/{run-flow-DPUPAWk6.d.ts → run-flow-DJ7KYT6E.d.ts} +10 -1
- package/dist/runtime/index.d.cts +5 -5
- package/dist/runtime/index.d.ts +5 -5
- package/dist/runtime.cjs +73 -2
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +3 -3
- package/dist/schema/index.d.cts +12 -1
- package/dist/schema/index.d.ts +12 -1
- package/dist/schema.cjs +88 -3
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.js +2 -2
- package/dist/screens.cjs +73 -2
- package/dist/screens.cjs.map +1 -1
- package/dist/screens.d.cts +2 -2
- package/dist/screens.d.ts +2 -2
- package/dist/screens.js +4 -4
- package/dist/{types-BtMOnb9I.d.cts → types-3sPauVRT.d.cts} +1 -1
- package/dist/{types-7cXcSQlx.d.ts → types-JFYjPJAG.d.cts} +37 -1
- package/dist/{types-7cXcSQlx.d.cts → types-JFYjPJAG.d.ts} +37 -1
- package/dist/{types-CDgIIj4c.d.ts → types-s643U1Hi.d.ts} +1 -1
- package/dist/ux.cjs +73 -2
- package/dist/ux.cjs.map +1 -1
- package/dist/ux.d.cts +2 -2
- package/dist/ux.d.ts +2 -2
- package/dist/ux.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-6FP3F5YR.js.map +0 -1
- package/dist/chunk-YOK3WKWC.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-
|
|
2
|
-
export { runCohort } from './chunk-
|
|
3
|
-
export { RunIdentity, escapeSegment, runFlow } from './chunk-
|
|
1
|
+
export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-HXGGCMR7.js';
|
|
2
|
+
export { runCohort } from './chunk-SKEZ5AGI.js';
|
|
3
|
+
export { RunIdentity, escapeSegment, runFlow } from './chunk-XCT2CJ5O.js';
|
|
4
4
|
import './chunk-F5RPRB7A.js';
|
|
5
5
|
import './chunk-USL4FMFU.js';
|
|
6
6
|
//# sourceMappingURL=runtime.js.map
|
package/dist/schema/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PortDescriptor, F as FlowGraph } from '../types-
|
|
1
|
+
import { W as WorkflowInput, P as PortDescriptor, F as FlowGraph } from '../types-JFYjPJAG.cjs';
|
|
2
2
|
import '@xyflow/react';
|
|
3
3
|
|
|
4
4
|
/** Schema version. Bump on breaking shape changes; add migrations as needed. */
|
|
@@ -8,6 +8,17 @@ type WorkflowSchema = {
|
|
|
8
8
|
$schema: typeof WORKFLOW_SCHEMA_URL;
|
|
9
9
|
version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
10
10
|
metadata?: WorkflowMetadata;
|
|
11
|
+
/**
|
|
12
|
+
* What this workflow accepts at run start, passed BY NAME.
|
|
13
|
+
*
|
|
14
|
+
* Lives beside `graph` rather than inside it because it describes the
|
|
15
|
+
* workflow's CONTRACT, not its topology: a caller reads this to know what to
|
|
16
|
+
* pass, and reading it should not mean walking nodes looking for a trigger.
|
|
17
|
+
*
|
|
18
|
+
* Omitted entirely when a workflow takes none, so every existing saved
|
|
19
|
+
* document is unchanged byte for byte.
|
|
20
|
+
*/
|
|
21
|
+
inputs?: WorkflowInput[];
|
|
11
22
|
graph: {
|
|
12
23
|
nodes: WorkflowSchemaNode[];
|
|
13
24
|
edges: WorkflowSchemaEdge[];
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PortDescriptor, F as FlowGraph } from '../types-
|
|
1
|
+
import { W as WorkflowInput, P as PortDescriptor, F as FlowGraph } from '../types-JFYjPJAG.js';
|
|
2
2
|
import '@xyflow/react';
|
|
3
3
|
|
|
4
4
|
/** Schema version. Bump on breaking shape changes; add migrations as needed. */
|
|
@@ -8,6 +8,17 @@ type WorkflowSchema = {
|
|
|
8
8
|
$schema: typeof WORKFLOW_SCHEMA_URL;
|
|
9
9
|
version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
10
10
|
metadata?: WorkflowMetadata;
|
|
11
|
+
/**
|
|
12
|
+
* What this workflow accepts at run start, passed BY NAME.
|
|
13
|
+
*
|
|
14
|
+
* Lives beside `graph` rather than inside it because it describes the
|
|
15
|
+
* workflow's CONTRACT, not its topology: a caller reads this to know what to
|
|
16
|
+
* pass, and reading it should not mean walking nodes looking for a trigger.
|
|
17
|
+
*
|
|
18
|
+
* Omitted entirely when a workflow takes none, so every existing saved
|
|
19
|
+
* document is unchanged byte for byte.
|
|
20
|
+
*/
|
|
21
|
+
inputs?: WorkflowInput[];
|
|
11
22
|
graph: {
|
|
12
23
|
nodes: WorkflowSchemaNode[];
|
|
13
24
|
edges: WorkflowSchemaEdge[];
|
package/dist/schema.cjs
CHANGED
|
@@ -9226,6 +9226,61 @@ var RunIdentity = class _RunIdentity {
|
|
|
9226
9226
|
}
|
|
9227
9227
|
};
|
|
9228
9228
|
|
|
9229
|
+
// src/runtime/workflow-props.ts
|
|
9230
|
+
function typeOf(value) {
|
|
9231
|
+
if (value === null) return "null";
|
|
9232
|
+
if (Array.isArray(value)) return "array";
|
|
9233
|
+
return typeof value;
|
|
9234
|
+
}
|
|
9235
|
+
function resolveWorkflowProps(declared, passed) {
|
|
9236
|
+
const inputs = declared ?? [];
|
|
9237
|
+
const given = passed ?? {};
|
|
9238
|
+
const byName = new Map(inputs.map((input) => [input.name, input]));
|
|
9239
|
+
for (const name of Object.keys(given)) {
|
|
9240
|
+
if (!byName.has(name)) {
|
|
9241
|
+
const known = inputs.map((input) => input.name);
|
|
9242
|
+
const suffix = known.length === 0 ? "this workflow declares no inputs" : `known inputs: ${known.join(", ")}`;
|
|
9243
|
+
return {
|
|
9244
|
+
ok: false,
|
|
9245
|
+
code: "unknown_input",
|
|
9246
|
+
error: `Unknown workflow input "${name}" \u2014 ${suffix}.`
|
|
9247
|
+
};
|
|
9248
|
+
}
|
|
9249
|
+
}
|
|
9250
|
+
const resolved = {};
|
|
9251
|
+
for (const input of inputs) {
|
|
9252
|
+
const supplied = Object.prototype.hasOwnProperty.call(given, input.name);
|
|
9253
|
+
const hasDefault = Object.prototype.hasOwnProperty.call(input, "default");
|
|
9254
|
+
if (!supplied) {
|
|
9255
|
+
if (hasDefault) {
|
|
9256
|
+
resolved[input.name] = input.default;
|
|
9257
|
+
continue;
|
|
9258
|
+
}
|
|
9259
|
+
if (input.required) {
|
|
9260
|
+
return {
|
|
9261
|
+
ok: false,
|
|
9262
|
+
code: "missing_required",
|
|
9263
|
+
error: `Missing required workflow input "${input.name}"${input.type ? ` (${input.type})` : ""}.`
|
|
9264
|
+
};
|
|
9265
|
+
}
|
|
9266
|
+
continue;
|
|
9267
|
+
}
|
|
9268
|
+
const value = given[input.name];
|
|
9269
|
+
if (input.type !== void 0) {
|
|
9270
|
+
const actual = typeOf(value);
|
|
9271
|
+
if (actual !== input.type) {
|
|
9272
|
+
return {
|
|
9273
|
+
ok: false,
|
|
9274
|
+
code: "type_mismatch",
|
|
9275
|
+
error: `Workflow input "${input.name}" expects ${input.type}, got ${actual}.`
|
|
9276
|
+
};
|
|
9277
|
+
}
|
|
9278
|
+
}
|
|
9279
|
+
resolved[input.name] = value;
|
|
9280
|
+
}
|
|
9281
|
+
return { ok: true, props: resolved };
|
|
9282
|
+
}
|
|
9283
|
+
|
|
9229
9284
|
// src/runtime/run-flow.ts
|
|
9230
9285
|
async function runFlow(graph, executors, onEvent = () => {
|
|
9231
9286
|
}, options = {}) {
|
|
@@ -9241,6 +9296,13 @@ async function runFlow(graph, executors, onEvent = () => {
|
|
|
9241
9296
|
onEvent({ type: "run-error", error: msg });
|
|
9242
9297
|
return { ok: false, outputs, error: msg };
|
|
9243
9298
|
}
|
|
9299
|
+
const propsCheck = resolveWorkflowProps(graph.inputs, options.props);
|
|
9300
|
+
if (!propsCheck.ok) {
|
|
9301
|
+
onEvent({ type: "run-error", error: propsCheck.error });
|
|
9302
|
+
return { ok: false, outputs, error: propsCheck.error };
|
|
9303
|
+
}
|
|
9304
|
+
const props = propsCheck.props;
|
|
9305
|
+
const declaresProps = (graph.inputs?.length ?? 0) > 0;
|
|
9244
9306
|
const incomingByNode = indexIncoming(graph.edges);
|
|
9245
9307
|
const timer2 = timeoutMs ? setTimeout(() => errors.push(`Run timed out after ${timeoutMs}ms`), timeoutMs) : null;
|
|
9246
9308
|
onEvent({ type: "run-start" });
|
|
@@ -9282,7 +9344,7 @@ async function runFlow(graph, executors, onEvent = () => {
|
|
|
9282
9344
|
}
|
|
9283
9345
|
onEvent({ type: "node-status", nodeId: node.id, status: "running" });
|
|
9284
9346
|
announce(onEvent, node, "start");
|
|
9285
|
-
const inputs = collectInputs(node, incoming, portValues, initialInputs);
|
|
9347
|
+
const inputs = collectInputs(node, incoming, portValues, initialInputs, props, declaresProps);
|
|
9286
9348
|
const exec = pickExecutor(executors, node);
|
|
9287
9349
|
if (!exec) {
|
|
9288
9350
|
const msg = `No executor registered for kind=${node.type}`;
|
|
@@ -9359,14 +9421,23 @@ function topoSort(graph) {
|
|
|
9359
9421
|
const byId = new Map(graph.nodes.map((n) => [n.id, n]));
|
|
9360
9422
|
return ordered.map((id2) => byId.get(id2)).filter(Boolean);
|
|
9361
9423
|
}
|
|
9362
|
-
function collectInputs(node, incoming, portValues, initial) {
|
|
9424
|
+
function collectInputs(node, incoming, portValues, initial, props, declaresProps) {
|
|
9363
9425
|
const inputs = { ...initial[node.id] ?? {} };
|
|
9426
|
+
if (incoming.length === 0) {
|
|
9427
|
+
for (const [name, value] of Object.entries(props)) {
|
|
9428
|
+
if (!(name in inputs)) inputs[name] = value;
|
|
9429
|
+
}
|
|
9430
|
+
}
|
|
9364
9431
|
for (const e of incoming) {
|
|
9365
9432
|
const portId = e.targetHandle ?? "in";
|
|
9366
9433
|
const key = `${e.source}:${e.sourceHandle ?? "out"}`;
|
|
9367
9434
|
if (!portValues.has(key)) continue;
|
|
9368
9435
|
inputs[portId] = portValues.get(key);
|
|
9436
|
+
if (e.targetHandle == null && !(e.source in inputs)) {
|
|
9437
|
+
inputs[e.source] = portValues.get(key);
|
|
9438
|
+
}
|
|
9369
9439
|
}
|
|
9440
|
+
if (declaresProps) inputs.$props = props;
|
|
9370
9441
|
return inputs;
|
|
9371
9442
|
}
|
|
9372
9443
|
function pickExecutor(executors, node) {
|
|
@@ -10503,6 +10574,9 @@ function exportWorkflow(graph, metadata, view) {
|
|
|
10503
10574
|
$schema: WORKFLOW_SCHEMA_URL,
|
|
10504
10575
|
version: WORKFLOW_SCHEMA_VERSION,
|
|
10505
10576
|
metadata: metadata ? { ...metadata, updatedAt: Date.now() } : void 0,
|
|
10577
|
+
// Round-trips, or a saved workflow silently forgets its own contract and
|
|
10578
|
+
// every caller's props become "unknown input" on the next load.
|
|
10579
|
+
...graph.inputs && graph.inputs.length > 0 ? { inputs: graph.inputs } : {},
|
|
10506
10580
|
graph: {
|
|
10507
10581
|
nodes: graph.nodes.map(toSchemaNode),
|
|
10508
10582
|
edges: graph.edges.map(toSchemaEdge)
|
|
@@ -10625,7 +10699,18 @@ function importWorkflow(schema, options = {}) {
|
|
|
10625
10699
|
};
|
|
10626
10700
|
}).filter((e) => e !== null);
|
|
10627
10701
|
const ok = issues.every((i) => i.level !== "error");
|
|
10628
|
-
|
|
10702
|
+
const declaredInputs = Array.isArray(s.inputs) ? s.inputs.filter(
|
|
10703
|
+
(input) => input !== null && typeof input === "object" && typeof input.name === "string"
|
|
10704
|
+
) : void 0;
|
|
10705
|
+
return {
|
|
10706
|
+
ok,
|
|
10707
|
+
graph: {
|
|
10708
|
+
nodes,
|
|
10709
|
+
edges,
|
|
10710
|
+
...declaredInputs && declaredInputs.length > 0 ? { inputs: declaredInputs } : {}
|
|
10711
|
+
},
|
|
10712
|
+
issues
|
|
10713
|
+
};
|
|
10629
10714
|
}
|
|
10630
10715
|
function workflowToBlob(schema) {
|
|
10631
10716
|
return new Blob([JSON.stringify(schema, null, 2)], { type: "application/json" });
|