@bian-womp/spark-graph 0.2.21 → 0.2.22
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/lib/cjs/index.cjs +166 -14
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/categories.d.ts +2 -13
- package/lib/cjs/src/core/categories.d.ts.map +1 -1
- package/lib/cjs/src/core/types.d.ts +15 -1
- package/lib/cjs/src/core/types.d.ts.map +1 -1
- package/lib/cjs/src/examples/arrays.d.ts +5 -0
- package/lib/cjs/src/examples/arrays.d.ts.map +1 -0
- package/lib/cjs/src/examples/run.d.ts.map +1 -1
- package/lib/cjs/src/examples/shared.d.ts.map +1 -1
- package/lib/cjs/src/index.d.ts +2 -1
- package/lib/cjs/src/index.d.ts.map +1 -1
- package/lib/cjs/src/plugins/composite.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +5 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +166 -15
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/categories.d.ts +2 -13
- package/lib/esm/src/core/categories.d.ts.map +1 -1
- package/lib/esm/src/core/types.d.ts +15 -1
- package/lib/esm/src/core/types.d.ts.map +1 -1
- package/lib/esm/src/examples/arrays.d.ts +5 -0
- package/lib/esm/src/examples/arrays.d.ts.map +1 -0
- package/lib/esm/src/examples/run.d.ts.map +1 -1
- package/lib/esm/src/examples/shared.d.ts.map +1 -1
- package/lib/esm/src/index.d.ts +2 -1
- package/lib/esm/src/index.d.ts.map +1 -1
- package/lib/esm/src/plugins/composite.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +5 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NodeCategoryId } from "@bian-womp/spark-protocol";
|
|
2
|
-
import type { ExecutionContext } from "./types";
|
|
2
|
+
import type { ExecutionContext, ExecutionPolicy } from "./types";
|
|
3
3
|
export interface CategoryRuntime<State = unknown> {
|
|
4
4
|
onInputsChanged?: (inputs: Record<string, unknown>, ctx: ExecutionContext<State>) => void | Promise<void>;
|
|
5
5
|
onActivated?: (ctx: ExecutionContext<State>) => void | Promise<void>;
|
|
@@ -17,17 +17,6 @@ export interface NodeCategoryDescriptor<Impl = unknown, State = unknown> {
|
|
|
17
17
|
impl: Impl;
|
|
18
18
|
initialState?: Partial<State>;
|
|
19
19
|
}) => CategoryRuntime<State>;
|
|
20
|
-
policy?:
|
|
21
|
-
mode: "push" | "pull" | "hybrid";
|
|
22
|
-
asyncConcurrency?: "merge" | "switch" | "queue" | "drop";
|
|
23
|
-
timeoutMs?: number;
|
|
24
|
-
maxQueue?: number;
|
|
25
|
-
debounceMs?: number;
|
|
26
|
-
throttleMs?: number;
|
|
27
|
-
retry?: {
|
|
28
|
-
attempts: number;
|
|
29
|
-
backoffMs: (attemptIndex: number) => number;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
20
|
+
policy?: Partial<ExecutionPolicy>;
|
|
32
21
|
}
|
|
33
22
|
//# sourceMappingURL=categories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../../src/core/categories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../../src/core/categories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,MAAM,WAAW,eAAe,CAAC,KAAK,GAAG,OAAO;IAC9C,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,KACzB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,KACzB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO;IACrE,EAAE,EAAE,cAAc,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,OAAO,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,YAAY,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/B,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACnC"}
|
|
@@ -53,6 +53,17 @@ export declare function getTypedOutputTypeId(v: unknown): DataTypeId | undefined
|
|
|
53
53
|
export declare function getTypedOutputValue(v: unknown): unknown;
|
|
54
54
|
export declare function getInputTypeId(inputs: Record<string, InputHandleDescriptor> | undefined, handle: HandleId): DataTypeId | undefined;
|
|
55
55
|
export declare function isInputPrivate(inputs: Record<string, InputHandleDescriptor> | undefined, handle: HandleId): boolean;
|
|
56
|
+
export interface ExecutionPolicy {
|
|
57
|
+
asyncConcurrency: "merge" | "switch" | "queue" | "drop";
|
|
58
|
+
timeoutMs: number;
|
|
59
|
+
maxQueue: number;
|
|
60
|
+
debounceMs: number;
|
|
61
|
+
throttleMs: number;
|
|
62
|
+
retry: {
|
|
63
|
+
attempts: number;
|
|
64
|
+
backoffMs: (attemptIndex: number) => number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
56
67
|
export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescriptor> = Record<string, InputHandleDescriptor>, O extends Record<string, DataTypeId | DataTypeId[]> = Record<string, DataTypeId | DataTypeId[]>, State = unknown, Impl = (inputs: Record<string, unknown>, ctx: NodeContext<State>) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>> {
|
|
57
68
|
id: NodeTypeId;
|
|
58
69
|
categoryId: NodeCategoryId;
|
|
@@ -60,6 +71,7 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
|
|
|
60
71
|
inputs: I;
|
|
61
72
|
outputs: O;
|
|
62
73
|
impl: Impl;
|
|
74
|
+
policy?: Partial<ExecutionPolicy>;
|
|
63
75
|
resolveHandles?: (ctx: {
|
|
64
76
|
environment: Record<string, unknown>;
|
|
65
77
|
params?: Record<string, unknown>;
|
|
@@ -78,7 +90,9 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
|
|
|
78
90
|
export interface GraphNodeDefinition {
|
|
79
91
|
nodeId: NodeInstanceId;
|
|
80
92
|
typeId: NodeTypeId;
|
|
81
|
-
params?: Record<string, unknown
|
|
93
|
+
params?: Record<string, unknown> & {
|
|
94
|
+
policy?: Partial<ExecutionPolicy>;
|
|
95
|
+
};
|
|
82
96
|
initialInputs?: Record<string, unknown>;
|
|
83
97
|
resolvedHandles?: Partial<ResolvedHandles>;
|
|
84
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { GraphDefinition } from "../core/types";
|
|
2
|
+
export declare function createArrayComposeDecomposeDef(): GraphDefinition;
|
|
3
|
+
export declare function createArrayComposeDecomposeRegistry(): import("..").Registry;
|
|
4
|
+
export declare function main(): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=arrays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrays.d.ts","sourceRoot":"","sources":["../../../../src/examples/arrays.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKhD,wBAAgB,8BAA8B,IAAI,eAAe,CAchE;AAED,wBAAgB,mCAAmC,0BAElD;AAED,wBAAsB,IAAI,kBAsDzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/examples/run.ts"],"names":[],"mappings":"AAAA,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/examples/run.ts"],"names":[],"mappings":"AAAA,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,iBA0BxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/examples/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,QAsC5C"}
|
package/lib/cjs/src/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { DataTypeDescriptor, InvalidateReason, NodeContext, ExecutionContext, NodeTypeDescriptor, GraphDefinition, RuntimeNodeStats, RuntimeEdgeStats, TypedOutputValue, } from "./core/types";
|
|
2
2
|
export { typed, isTypedOutput, getTypedOutputTypeId, getTypedOutputValue, getInputTypeId, isInputPrivate, } from "./core/types";
|
|
3
3
|
export type { CategoryRuntime, NodeCategoryDescriptor, } from "./core/categories";
|
|
4
4
|
export { Registry } from "./builder/Registry";
|
|
@@ -20,5 +20,6 @@ export { createSimpleGraphRegistry, createSimpleGraphDef, } from "./examples/sim
|
|
|
20
20
|
export { createAsyncGraphRegistry, createAsyncGraphDef, } from "./examples/async";
|
|
21
21
|
export { createProgressGraphRegistry, createProgressGraphDef, } from "./examples/progress";
|
|
22
22
|
export { createValidationGraphRegistry, createValidationGraphDef, } from "./examples/validation";
|
|
23
|
+
export { installLogging } from "./examples/shared";
|
|
23
24
|
export { registerDelayNode, registerProgressNodes } from "./misc/base";
|
|
24
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,eAAe,EACf,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EACV,MAAM,EACN,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../../../src/plugins/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,eAAe,CAAC;IACrB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,GAC5B,UAAU,QAAQ,KACjB,sBAAsB,CACvB,aAAa,EACb;IAAE,KAAK,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../../../src/plugins/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,eAAe,CAAC;IACrB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,GAC5B,UAAU,QAAQ,KACjB,sBAAsB,CACvB,aAAa,EACb;IAAE,KAAK,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAsD5C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RuntimeValue, RuntimeInvalidate, RuntimeError, RuntimeStats, ResolvedHandles } from "@bian-womp/spark-protocol";
|
|
2
|
-
import type { GraphDefinition, RuntimeNodeStats } from "../core/types";
|
|
2
|
+
import type { GraphDefinition, RuntimeNodeStats, ExecutionPolicy } from "../core/types";
|
|
3
3
|
import { Registry } from "../builder/Registry";
|
|
4
4
|
export type RuntimeEventListener<K extends RuntimeEventName> = (e: RuntimeEventMap[K]) => void;
|
|
5
5
|
export type RuntimeEventName = "value" | "invalidate" | "error" | "stats";
|
|
@@ -12,6 +12,7 @@ export interface RuntimeEventMap {
|
|
|
12
12
|
export declare class GraphRuntime {
|
|
13
13
|
private nodes;
|
|
14
14
|
private edges;
|
|
15
|
+
private registry?;
|
|
15
16
|
private resolvedByNode;
|
|
16
17
|
private listeners;
|
|
17
18
|
private environment;
|
|
@@ -54,6 +55,7 @@ export declare class GraphRuntime {
|
|
|
54
55
|
typeId: string;
|
|
55
56
|
params: {
|
|
56
57
|
[x: string]: unknown;
|
|
58
|
+
policy?: Partial<ExecutionPolicy>;
|
|
57
59
|
} | undefined;
|
|
58
60
|
resolvedHandles: {
|
|
59
61
|
inputs: Record<string, import("@bian-womp/spark-protocol").InputHandleDescriptor>;
|
|
@@ -86,5 +88,7 @@ export declare class GraphRuntime {
|
|
|
86
88
|
reemit?: boolean;
|
|
87
89
|
}): void;
|
|
88
90
|
update(def: GraphDefinition, registry: Registry): void;
|
|
91
|
+
private scheduleRecomputeHandles;
|
|
92
|
+
private recomputeHandlesForNode;
|
|
89
93
|
}
|
|
90
94
|
//# sourceMappingURL=GraphRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,eAAe,EAIf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -432,9 +432,10 @@ class GraphRuntime {
|
|
|
432
432
|
}
|
|
433
433
|
static create(def, registry, opts) {
|
|
434
434
|
const gr = new GraphRuntime();
|
|
435
|
+
gr.registry = registry;
|
|
435
436
|
gr.environment = opts?.environment ?? {};
|
|
436
437
|
// Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)
|
|
437
|
-
gr.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry);
|
|
438
|
+
gr.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry, gr.environment);
|
|
438
439
|
// Instantiate nodes
|
|
439
440
|
for (const n of def.nodes) {
|
|
440
441
|
const desc = registry.nodes.get(n.typeId);
|
|
@@ -460,8 +461,10 @@ class GraphRuntime {
|
|
|
460
461
|
params: n.params,
|
|
461
462
|
policy: {
|
|
462
463
|
...cat.policy,
|
|
463
|
-
...
|
|
464
|
+
...desc.policy,
|
|
465
|
+
...n.params?.policy,
|
|
464
466
|
},
|
|
467
|
+
runSeq: 0,
|
|
465
468
|
activeControllers: new Set(),
|
|
466
469
|
queue: [],
|
|
467
470
|
stats: {
|
|
@@ -545,6 +548,9 @@ class GraphRuntime {
|
|
|
545
548
|
// Only schedule if all inbound inputs are present (or there are none)
|
|
546
549
|
if (anyChanged && this.allInboundHaveValue(nodeId))
|
|
547
550
|
this.scheduleInputsChanged(nodeId);
|
|
551
|
+
// Recompute dynamic handles for this node when its direct inputs change
|
|
552
|
+
if (anyChanged)
|
|
553
|
+
this.scheduleRecomputeHandles(nodeId);
|
|
548
554
|
}
|
|
549
555
|
}
|
|
550
556
|
getOutput(nodeId, output) {
|
|
@@ -617,12 +623,14 @@ class GraphRuntime {
|
|
|
617
623
|
now - node.lastScheduledAt < policy.debounceMs) {
|
|
618
624
|
// debounce: replace latest queued
|
|
619
625
|
node.queue.splice(0, node.queue.length);
|
|
620
|
-
|
|
626
|
+
node.runSeq += 1;
|
|
627
|
+
const rid = `${nodeId}:${node.runSeq}:${now}`;
|
|
621
628
|
node.queue.push({ runId: rid, inputs: { ...node.inputs } });
|
|
622
629
|
return;
|
|
623
630
|
}
|
|
624
631
|
node.lastScheduledAt = now;
|
|
625
|
-
|
|
632
|
+
node.runSeq += 1;
|
|
633
|
+
const rid = `${nodeId}:${node.runSeq}:${now}`;
|
|
626
634
|
node.latestRunId = rid;
|
|
627
635
|
const startRun = (runId, capturedInputs, onDone) => {
|
|
628
636
|
const controller = new AbortController();
|
|
@@ -845,6 +853,8 @@ class GraphRuntime {
|
|
|
845
853
|
io: "input",
|
|
846
854
|
runtimeTypeId: getTypedOutputTypeId(next),
|
|
847
855
|
});
|
|
856
|
+
// Recompute dynamic handles for the destination node on input change
|
|
857
|
+
this.scheduleRecomputeHandles(e.target.nodeId);
|
|
848
858
|
if (!this.paused && this.allInboundHaveValue(e.target.nodeId))
|
|
849
859
|
this.scheduleInputsChanged(e.target.nodeId);
|
|
850
860
|
}
|
|
@@ -902,7 +912,7 @@ class GraphRuntime {
|
|
|
902
912
|
}
|
|
903
913
|
}
|
|
904
914
|
// Helper: build map of resolved handles per node from def (prefer def.resolvedHandles, otherwise registry statics)
|
|
905
|
-
static computeResolvedHandleMap(def, registry) {
|
|
915
|
+
static computeResolvedHandleMap(def, registry, environment) {
|
|
906
916
|
const out = new Map();
|
|
907
917
|
for (const n of def.nodes) {
|
|
908
918
|
const desc = registry.nodes.get(n.typeId);
|
|
@@ -911,10 +921,36 @@ class GraphRuntime {
|
|
|
911
921
|
const overrideInputs = n.resolvedHandles?.inputs;
|
|
912
922
|
const overrideOutputs = n.resolvedHandles?.outputs;
|
|
913
923
|
const overrideDefaults = n.resolvedHandles?.inputDefaults;
|
|
914
|
-
//
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
924
|
+
// Resolve dynamic handles if available (initial pass: inputs may be undefined)
|
|
925
|
+
let dyn = {};
|
|
926
|
+
try {
|
|
927
|
+
if (typeof desc.resolveHandles === "function") {
|
|
928
|
+
dyn = desc.resolveHandles({
|
|
929
|
+
environment: environment || {},
|
|
930
|
+
params: n.params,
|
|
931
|
+
inputs: undefined,
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
catch {
|
|
936
|
+
// ignore dynamic resolution errors at this stage
|
|
937
|
+
}
|
|
938
|
+
// Merge base with dynamic and overrides (allow partial resolvedHandles)
|
|
939
|
+
const inputs = {
|
|
940
|
+
...desc.inputs,
|
|
941
|
+
...dyn.inputs,
|
|
942
|
+
...overrideInputs,
|
|
943
|
+
};
|
|
944
|
+
const outputs = {
|
|
945
|
+
...desc.outputs,
|
|
946
|
+
...dyn.outputs,
|
|
947
|
+
...overrideOutputs,
|
|
948
|
+
};
|
|
949
|
+
const inputDefaults = {
|
|
950
|
+
...desc.inputDefaults,
|
|
951
|
+
...dyn.inputDefaults,
|
|
952
|
+
...overrideDefaults,
|
|
953
|
+
};
|
|
918
954
|
out.set(n.nodeId, { inputs, outputs, inputDefaults });
|
|
919
955
|
}
|
|
920
956
|
return out;
|
|
@@ -1096,6 +1132,10 @@ class GraphRuntime {
|
|
|
1096
1132
|
}
|
|
1097
1133
|
setEnvironment(env) {
|
|
1098
1134
|
this.environment = { ...env };
|
|
1135
|
+
// Recompute dynamic handles for all nodes when environment changes
|
|
1136
|
+
for (const nodeId of this.nodes.keys()) {
|
|
1137
|
+
this.scheduleRecomputeHandles(nodeId);
|
|
1138
|
+
}
|
|
1099
1139
|
}
|
|
1100
1140
|
// Export a GraphDefinition reflecting the current runtime view
|
|
1101
1141
|
getGraphDef() {
|
|
@@ -1252,8 +1292,10 @@ class GraphRuntime {
|
|
|
1252
1292
|
params: n.params,
|
|
1253
1293
|
policy: {
|
|
1254
1294
|
...cat.policy,
|
|
1255
|
-
...
|
|
1295
|
+
...desc.policy,
|
|
1296
|
+
...n.params?.policy,
|
|
1256
1297
|
},
|
|
1298
|
+
runSeq: 0,
|
|
1257
1299
|
activeControllers: new Set(),
|
|
1258
1300
|
queue: [],
|
|
1259
1301
|
stats: {
|
|
@@ -1312,8 +1354,8 @@ class GraphRuntime {
|
|
|
1312
1354
|
tmap.set(e.source.handle, tset);
|
|
1313
1355
|
prevOutTargets.set(e.source.nodeId, tmap);
|
|
1314
1356
|
}
|
|
1315
|
-
// Precompute per-node resolved handles for updated graph
|
|
1316
|
-
this.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry);
|
|
1357
|
+
// Precompute per-node resolved handles for updated graph (include dynamic)
|
|
1358
|
+
this.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry, this.environment);
|
|
1317
1359
|
// Rebuild edges mapping with coercions
|
|
1318
1360
|
this.edges = GraphRuntime.buildEdges(def, registry, this.resolvedByNode);
|
|
1319
1361
|
// Build new inbound map
|
|
@@ -1473,6 +1515,83 @@ class GraphRuntime {
|
|
|
1473
1515
|
this.arrayInputBuckets.delete(nodeId);
|
|
1474
1516
|
}
|
|
1475
1517
|
}
|
|
1518
|
+
// Schedule a recomputation of dynamic handles for a node (async to avoid mutating during propagation)
|
|
1519
|
+
scheduleRecomputeHandles(nodeId) {
|
|
1520
|
+
// If no registry or node not found, skip
|
|
1521
|
+
if (!this.registry)
|
|
1522
|
+
return;
|
|
1523
|
+
const node = this.nodes.get(nodeId);
|
|
1524
|
+
if (!node)
|
|
1525
|
+
return;
|
|
1526
|
+
setTimeout(() => {
|
|
1527
|
+
try {
|
|
1528
|
+
this.recomputeHandlesForNode(nodeId);
|
|
1529
|
+
}
|
|
1530
|
+
catch {
|
|
1531
|
+
// ignore recompute errors
|
|
1532
|
+
}
|
|
1533
|
+
}, 0);
|
|
1534
|
+
}
|
|
1535
|
+
// Recompute dynamic handles for a single node using current inputs/environment
|
|
1536
|
+
recomputeHandlesForNode(nodeId) {
|
|
1537
|
+
const registry = this.registry;
|
|
1538
|
+
const node = this.nodes.get(nodeId);
|
|
1539
|
+
if (!node)
|
|
1540
|
+
return;
|
|
1541
|
+
const desc = registry.nodes.get(node.typeId);
|
|
1542
|
+
if (!desc)
|
|
1543
|
+
return;
|
|
1544
|
+
const resolveHandles = desc.resolveHandles;
|
|
1545
|
+
if (typeof resolveHandles !== "function")
|
|
1546
|
+
return;
|
|
1547
|
+
let r;
|
|
1548
|
+
try {
|
|
1549
|
+
r = resolveHandles({
|
|
1550
|
+
environment: this.environment || {},
|
|
1551
|
+
params: node.params,
|
|
1552
|
+
inputs: node.inputs || {},
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
catch {
|
|
1556
|
+
return;
|
|
1557
|
+
}
|
|
1558
|
+
const inputs = { ...desc.inputs, ...r?.inputs };
|
|
1559
|
+
const outputs = { ...desc.outputs, ...r?.outputs };
|
|
1560
|
+
const inputDefaults = { ...desc.inputDefaults, ...r?.inputDefaults };
|
|
1561
|
+
const next = { inputs, outputs, inputDefaults };
|
|
1562
|
+
const before = this.resolvedByNode.get(nodeId);
|
|
1563
|
+
// Compare shallow-structurally via JSON
|
|
1564
|
+
if (JSON.stringify(before) === JSON.stringify(next))
|
|
1565
|
+
return;
|
|
1566
|
+
this.resolvedByNode.set(nodeId, next);
|
|
1567
|
+
this.updateNodeHandles(nodeId, next, registry);
|
|
1568
|
+
// Seed defaults for newly introduced inputs that are not inbound
|
|
1569
|
+
const inbound = this.edges
|
|
1570
|
+
.filter((e) => e.target.nodeId === nodeId)
|
|
1571
|
+
.map((e) => e.target.handle);
|
|
1572
|
+
for (const [handle, value] of Object.entries(inputDefaults)) {
|
|
1573
|
+
if (value === undefined)
|
|
1574
|
+
continue;
|
|
1575
|
+
if (inbound.includes(handle))
|
|
1576
|
+
continue;
|
|
1577
|
+
if (node.inputs[handle] === undefined) {
|
|
1578
|
+
node.inputs[handle] =
|
|
1579
|
+
typeof structuredClone === "function"
|
|
1580
|
+
? structuredClone(value)
|
|
1581
|
+
: JSON.parse(JSON.stringify(value));
|
|
1582
|
+
// Emit input value event for seeded defaults
|
|
1583
|
+
this.emit("value", {
|
|
1584
|
+
nodeId,
|
|
1585
|
+
handle,
|
|
1586
|
+
value: node.inputs[handle],
|
|
1587
|
+
io: "input",
|
|
1588
|
+
runtimeTypeId: getTypedOutputTypeId(node.inputs[handle]),
|
|
1589
|
+
});
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
// Notify graph updated for UI parity
|
|
1593
|
+
this.emit("invalidate", { reason: "graph-updated" });
|
|
1594
|
+
}
|
|
1476
1595
|
}
|
|
1477
1596
|
|
|
1478
1597
|
class GraphBuilder {
|
|
@@ -1948,7 +2067,7 @@ const ComputeCategory = {
|
|
|
1948
2067
|
}
|
|
1949
2068
|
},
|
|
1950
2069
|
}),
|
|
1951
|
-
policy: {
|
|
2070
|
+
policy: { asyncConcurrency: "switch" },
|
|
1952
2071
|
};
|
|
1953
2072
|
|
|
1954
2073
|
const CompositeCategory = (registry) => ({
|
|
@@ -2004,7 +2123,6 @@ const CompositeCategory = (registry) => ({
|
|
|
2004
2123
|
},
|
|
2005
2124
|
};
|
|
2006
2125
|
},
|
|
2007
|
-
policy: { mode: "hybrid" },
|
|
2008
2126
|
});
|
|
2009
2127
|
|
|
2010
2128
|
// Helpers
|
|
@@ -3098,6 +3216,39 @@ function registerProgressNodes(registry) {
|
|
|
3098
3216
|
});
|
|
3099
3217
|
}
|
|
3100
3218
|
|
|
3219
|
+
function installLogging(engine) {
|
|
3220
|
+
engine.on("value", (e) => {
|
|
3221
|
+
const t = e.runtimeTypeId ? ` <${e.runtimeTypeId}>` : "";
|
|
3222
|
+
console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value, t);
|
|
3223
|
+
});
|
|
3224
|
+
engine.on("stats", (s) => {
|
|
3225
|
+
if (s.kind === "node-progress") {
|
|
3226
|
+
const pct = Math.round((s.progress ?? 0) * 100);
|
|
3227
|
+
console.log(`[progress] ${s.runId || s.nodeId}: ${pct}%`);
|
|
3228
|
+
}
|
|
3229
|
+
else if (s.kind === "node-done") {
|
|
3230
|
+
console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms`);
|
|
3231
|
+
}
|
|
3232
|
+
else if (s.kind === "node-start") {
|
|
3233
|
+
console.log(`[start] ${s.runId || s.nodeId}`);
|
|
3234
|
+
}
|
|
3235
|
+
else if (s.kind === "edge-start") {
|
|
3236
|
+
console.log(`[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`);
|
|
3237
|
+
}
|
|
3238
|
+
else if (s.kind === "edge-done") {
|
|
3239
|
+
console.log(`[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle} in ${s.durationMs ?? 0}ms`);
|
|
3240
|
+
}
|
|
3241
|
+
});
|
|
3242
|
+
engine.on("error", (e) => {
|
|
3243
|
+
if (e.kind === "node-run") {
|
|
3244
|
+
console.warn(`[error] ${e.runId || e.nodeId}`, e.err?.message ?? e.err);
|
|
3245
|
+
}
|
|
3246
|
+
else if (e.kind === "edge-convert") {
|
|
3247
|
+
console.warn(`[error] ${e.edgeId} ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle}`, e.err?.message ?? e.err);
|
|
3248
|
+
}
|
|
3249
|
+
});
|
|
3250
|
+
}
|
|
3251
|
+
|
|
3101
3252
|
function makeBasicGraphDefinition() {
|
|
3102
3253
|
return {
|
|
3103
3254
|
nodes: [
|
|
@@ -3279,5 +3430,5 @@ function createValidationGraphRegistry() {
|
|
|
3279
3430
|
return registry;
|
|
3280
3431
|
}
|
|
3281
3432
|
|
|
3282
|
-
export { BatchedEngine, CompositeCategory, ComputeCategory, GraphBuilder, GraphRuntime, HybridEngine, LocalRunner, PullEngine, PushEngine, Registry, StepEngine, createAsyncGraphDef, createAsyncGraphRegistry, createProgressGraphDef, createProgressGraphRegistry, createSimpleGraphDef, createSimpleGraphRegistry, createValidationGraphDef, createValidationGraphRegistry, getInputTypeId, getTypedOutputTypeId, getTypedOutputValue, isInputPrivate, isTypedOutput, registerDelayNode, registerProgressNodes, typed };
|
|
3433
|
+
export { BatchedEngine, CompositeCategory, ComputeCategory, GraphBuilder, GraphRuntime, HybridEngine, LocalRunner, PullEngine, PushEngine, Registry, StepEngine, createAsyncGraphDef, createAsyncGraphRegistry, createProgressGraphDef, createProgressGraphRegistry, createSimpleGraphDef, createSimpleGraphRegistry, createValidationGraphDef, createValidationGraphRegistry, getInputTypeId, getTypedOutputTypeId, getTypedOutputValue, installLogging, isInputPrivate, isTypedOutput, registerDelayNode, registerProgressNodes, typed };
|
|
3283
3434
|
//# sourceMappingURL=index.js.map
|