@bian-womp/spark-graph 0.3.32 → 0.3.33
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 +144 -38
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/index.d.ts +3 -0
- package/lib/cjs/src/index.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +16 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/RuntimeValidatorManager.d.ts +31 -0
- package/lib/cjs/src/runtime/components/RuntimeValidatorManager.d.ts.map +1 -0
- package/lib/cjs/src/runtime/components/graph-utils.d.ts +11 -0
- package/lib/cjs/src/runtime/components/graph-utils.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/interfaces.d.ts +24 -1
- package/lib/cjs/src/runtime/components/interfaces.d.ts.map +1 -1
- package/lib/esm/index.js +143 -39
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/index.d.ts +3 -0
- package/lib/esm/src/index.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +16 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/RuntimeValidatorManager.d.ts +31 -0
- package/lib/esm/src/runtime/components/RuntimeValidatorManager.d.ts.map +1 -0
- package/lib/esm/src/runtime/components/graph-utils.d.ts +11 -0
- package/lib/esm/src/runtime/components/graph-utils.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/interfaces.d.ts +24 -1
- package/lib/esm/src/runtime/components/interfaces.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/cjs/src/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export type { ValidationIssue, ValidationReport } from "./builder/GraphBuilder";
|
|
|
7
7
|
export { GraphRuntime } from "./runtime/GraphRuntime";
|
|
8
8
|
export type { RuntimeEventName, RuntimeEventMap } from "./runtime/GraphRuntime";
|
|
9
9
|
export type { RuntimeNode, RuntimeEdge } from "./runtime/components/types";
|
|
10
|
+
export type { RuntimeValidator, RuntimeValidationError } from "./runtime/components/interfaces";
|
|
11
|
+
export { Graph } from "./runtime/components/Graph";
|
|
12
|
+
export { getEffectiveInputs } from "./runtime/components/graph-utils";
|
|
10
13
|
export type { Engine, EngineEventListener, EngineEventMap, EngineEventName, } from "./runtime/Engine";
|
|
11
14
|
export { LocalEngine } from "./runtime/LocalEngine";
|
|
12
15
|
export type { GraphLifecycleApi } from "./runtime/GraphLifecycleApi";
|
|
@@ -1 +1 @@
|
|
|
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,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,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,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC3E,YAAY,EACV,MAAM,EACN,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,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,EACL,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
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,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,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,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EACV,MAAM,EACN,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,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,EACL,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuntimeValue, RuntimeInvalidate, RuntimeError, RuntimeStats, GraphDefinition, RunMode } from "@bian-womp/spark-protocol";
|
|
2
2
|
import type { RuntimeNodeStats } from "../core/types";
|
|
3
3
|
import { Registry } from "../builder/Registry";
|
|
4
|
-
import type { INodeExecutor, IRuntime, IEdgePropagator } from "./components/interfaces";
|
|
4
|
+
import type { INodeExecutor, IRuntime, IEdgePropagator, RuntimeValidator, RuntimeValidationError } from "./components/interfaces";
|
|
5
5
|
import type { RunContextId } from "./components/types";
|
|
6
6
|
export type RuntimeEventListener<K extends RuntimeEventName> = (e: RuntimeEventMap[K]) => void;
|
|
7
7
|
export type RuntimeEventName = "value" | "invalidate" | "error" | "stats";
|
|
@@ -18,6 +18,7 @@ export declare class GraphRuntime implements IRuntime, INodeExecutor, IEdgePropa
|
|
|
18
18
|
private handleResolver;
|
|
19
19
|
private edgePropagator;
|
|
20
20
|
private nodeExecutor;
|
|
21
|
+
private runtimeValidatorManager;
|
|
21
22
|
private environment;
|
|
22
23
|
private runMode;
|
|
23
24
|
private pauseRefCount;
|
|
@@ -48,6 +49,20 @@ export declare class GraphRuntime implements IRuntime, INodeExecutor, IEdgePropa
|
|
|
48
49
|
} | undefined;
|
|
49
50
|
getEnvironment(): Record<string, unknown>;
|
|
50
51
|
setEnvironment(env: Record<string, unknown>): void;
|
|
52
|
+
/**
|
|
53
|
+
* Register a runtime validator that will be called before node execution.
|
|
54
|
+
* Validators are called in registration order - if any returns true, execution is blocked.
|
|
55
|
+
*/
|
|
56
|
+
registerRuntimeValidator(validator: RuntimeValidator): void;
|
|
57
|
+
/**
|
|
58
|
+
* Unregister a runtime validator.
|
|
59
|
+
*/
|
|
60
|
+
unregisterRuntimeValidator(validator: RuntimeValidator): void;
|
|
61
|
+
/**
|
|
62
|
+
* Check if any runtime validator blocks execution for this node.
|
|
63
|
+
* Returns RuntimeValidationError if execution should be blocked, null otherwise.
|
|
64
|
+
*/
|
|
65
|
+
hasRuntimeValidationBlock(nodeId: string): RuntimeValidationError | null;
|
|
51
66
|
getGraphDef(): GraphDefinition;
|
|
52
67
|
whenIdle(): Promise<void>;
|
|
53
68
|
runFromHereContext(startNodeId: string, options?: {
|
|
@@ -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,EAEZ,eAAe,EAGf,OAAO,EACR,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/NodeExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAe,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,eAAe,EACf,aAAa,EACb,QAAQ,EACR,eAAe,EAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/NodeExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Graph } from "./Graph";
|
|
2
|
+
import type { Registry } from "../../builder/Registry";
|
|
3
|
+
import type { RuntimeValidator, RuntimeValidationError } from "./interfaces";
|
|
4
|
+
/**
|
|
5
|
+
* RuntimeValidatorManager component - manages runtime validators
|
|
6
|
+
*/
|
|
7
|
+
export declare class RuntimeValidatorManager {
|
|
8
|
+
private readonly graph;
|
|
9
|
+
private registry?;
|
|
10
|
+
private validators;
|
|
11
|
+
constructor(graph: Graph, registry?: Registry | undefined);
|
|
12
|
+
/**
|
|
13
|
+
* Set the registry (called when registry changes)
|
|
14
|
+
*/
|
|
15
|
+
setRegistry(registry: Registry): void;
|
|
16
|
+
/**
|
|
17
|
+
* Register a runtime validator that will be called before node execution.
|
|
18
|
+
* Validators are called in registration order - if any returns true, execution is blocked.
|
|
19
|
+
*/
|
|
20
|
+
registerValidator(validator: RuntimeValidator): void;
|
|
21
|
+
/**
|
|
22
|
+
* Unregister a runtime validator.
|
|
23
|
+
*/
|
|
24
|
+
unregisterValidator(validator: RuntimeValidator): void;
|
|
25
|
+
/**
|
|
26
|
+
* Check if any runtime validator blocks execution for this node.
|
|
27
|
+
* Returns RuntimeValidationError if execution should be blocked, null otherwise.
|
|
28
|
+
*/
|
|
29
|
+
hasBlock(nodeId: string): RuntimeValidationError | null;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=RuntimeValidatorManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeValidatorManager.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/RuntimeValidatorManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE7E;;GAEG;AACH,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAS,OAAO,CAAC,QAAQ,CAAC;IAF5D,OAAO,CAAC,UAAU,CAA0B;gBAEf,KAAK,EAAE,KAAK,EAAU,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAEtE;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAIpD;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAOtD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;CAiBxD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { GraphDefinition, ResolvedHandles } from "@bian-womp/spark-protocol";
|
|
2
2
|
import { Registry } from "../../builder/Registry";
|
|
3
3
|
import type { RuntimeEdge } from "./types";
|
|
4
|
+
import type { Graph } from "./Graph";
|
|
4
5
|
export declare function tryHandleResolving(def: GraphDefinition, registry: Registry, environment?: Record<string, unknown>): {
|
|
5
6
|
resolved: Map<string, ResolvedHandles>;
|
|
6
7
|
pending: Set<string>;
|
|
@@ -19,4 +20,14 @@ export declare function buildEdgeConverters(srcDeclared: string | string[] | und
|
|
|
19
20
|
convert?: (v: unknown) => unknown;
|
|
20
21
|
convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;
|
|
21
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Compute effective inputs for a node by merging real inputs with defaults.
|
|
25
|
+
* This is a shared utility used by both NodeExecutor and runtime validators.
|
|
26
|
+
*
|
|
27
|
+
* @param nodeId - The node ID to compute effective inputs for
|
|
28
|
+
* @param graph - Graph component to access node and handle information
|
|
29
|
+
* @param registry - Registry to access node type descriptors and defaults
|
|
30
|
+
* @returns Record of effective input values (real inputs merged with defaults)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getEffectiveInputs(nodeId: string, graph: Graph, registry: Registry): Record<string, unknown>;
|
|
22
33
|
//# sourceMappingURL=graph-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-utils.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/graph-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAyB,MAAM,wBAAwB,CAAC;AAQzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-utils.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/graph-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAyB,MAAM,wBAAwB,CAAC;AAQzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CA4ElE;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC3C,WAAW,EAAE,CAkCf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC3C;IACD,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5C,CAeA;AAID,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EAC1C,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB;IACD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE,CAgKA;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4CzB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { RunMode } from "@bian-womp/spark-protocol";
|
|
2
2
|
import type { RunContextId } from "./types";
|
|
3
|
+
import type { Graph } from "./Graph";
|
|
4
|
+
import type { Registry } from "../../builder/Registry";
|
|
3
5
|
/**
|
|
4
6
|
* Interface for edge propagation operations
|
|
5
7
|
*/
|
|
@@ -20,11 +22,32 @@ export interface IHandleResolver {
|
|
|
20
22
|
scheduleRecomputeHandles(nodeId: string): void;
|
|
21
23
|
getPendingResolution(nodeId: string): Promise<void> | null;
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Error details returned by a runtime validator when execution should be blocked
|
|
27
|
+
*/
|
|
28
|
+
export interface RuntimeValidationError {
|
|
29
|
+
message: string;
|
|
30
|
+
code?: string;
|
|
31
|
+
details?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Runtime validator function that checks current runtime state before node execution.
|
|
35
|
+
* Returns false to allow execution, or RuntimeValidationError to block execution with details.
|
|
36
|
+
*
|
|
37
|
+
* @param nodeId - The node about to execute
|
|
38
|
+
* @param graph - Graph component to access all nodes and their current state
|
|
39
|
+
* @param registry - Registry to access node type information
|
|
40
|
+
* @returns false to allow execution, or RuntimeValidationError to block with details
|
|
41
|
+
*/
|
|
42
|
+
export type RuntimeValidator = (nodeId: string, graph: Graph, registry: Registry) => false | RuntimeValidationError;
|
|
43
|
+
export interface IRuntimeValidator {
|
|
44
|
+
hasRuntimeValidationBlock(nodeId: string): RuntimeValidationError | null;
|
|
45
|
+
}
|
|
23
46
|
/**
|
|
24
47
|
* Interface for runtime coordination operations
|
|
25
48
|
* Implemented by GraphRuntime to coordinate cross-component operations
|
|
26
49
|
*/
|
|
27
|
-
export interface IRuntime {
|
|
50
|
+
export interface IRuntime extends IRuntimeValidator {
|
|
28
51
|
isPaused(): boolean;
|
|
29
52
|
getRunMode(): RunMode | null;
|
|
30
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GAChC,IAAI,CAAC;IACR,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KACf,KAAK,GAAG,sBAAsB,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAChC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,QAAS,SAAQ,iBAAiB;IACjD,QAAQ,IAAI,OAAO,CAAC;IACpB,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC;CAC9B"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1615,6 +1615,55 @@ function buildEdgeConverters(srcDeclared, dstDeclared, registry, edgeLabel) {
|
|
|
1615
1615
|
},
|
|
1616
1616
|
};
|
|
1617
1617
|
}
|
|
1618
|
+
/**
|
|
1619
|
+
* Compute effective inputs for a node by merging real inputs with defaults.
|
|
1620
|
+
* This is a shared utility used by both NodeExecutor and runtime validators.
|
|
1621
|
+
*
|
|
1622
|
+
* @param nodeId - The node ID to compute effective inputs for
|
|
1623
|
+
* @param graph - Graph component to access node and handle information
|
|
1624
|
+
* @param registry - Registry to access node type descriptors and defaults
|
|
1625
|
+
* @returns Record of effective input values (real inputs merged with defaults)
|
|
1626
|
+
*/
|
|
1627
|
+
function getEffectiveInputs(nodeId, graph, registry) {
|
|
1628
|
+
const node = graph.getNode(nodeId);
|
|
1629
|
+
if (!node)
|
|
1630
|
+
return {};
|
|
1631
|
+
const desc = registry.nodes.get(node.typeId);
|
|
1632
|
+
if (!desc)
|
|
1633
|
+
return {};
|
|
1634
|
+
const resolved = graph.getResolvedHandles(nodeId);
|
|
1635
|
+
const regDefaults = desc.inputDefaults ?? {};
|
|
1636
|
+
const dynDefaults = resolved?.inputDefaults ?? {};
|
|
1637
|
+
// Identify which handles are dynamically resolved (not in registry statics)
|
|
1638
|
+
const staticHandles = new Set(Object.keys(desc.inputs ?? {}));
|
|
1639
|
+
const dynamicHandles = new Set(Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h)));
|
|
1640
|
+
// Precedence: dynamic > registry
|
|
1641
|
+
const mergedDefaults = {
|
|
1642
|
+
...regDefaults,
|
|
1643
|
+
...dynDefaults,
|
|
1644
|
+
};
|
|
1645
|
+
// Start with real inputs only (no defaults)
|
|
1646
|
+
const effective = { ...node.inputs };
|
|
1647
|
+
// Build set of inbound handles (wired inputs)
|
|
1648
|
+
const inboundEdges = graph.getInboundEdges(nodeId);
|
|
1649
|
+
const inbound = new Set(inboundEdges.map((e) => e.target.handle));
|
|
1650
|
+
// Apply defaults only for:
|
|
1651
|
+
// 1. Unbound handles that have no explicit value
|
|
1652
|
+
// 2. Static handles (not dynamically resolved)
|
|
1653
|
+
for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {
|
|
1654
|
+
if (defaultValue === undefined)
|
|
1655
|
+
continue;
|
|
1656
|
+
if (inbound.has(handle))
|
|
1657
|
+
continue; // Don't override wired inputs
|
|
1658
|
+
if (effective[handle] !== undefined)
|
|
1659
|
+
continue; // Already has value
|
|
1660
|
+
if (dynamicHandles.has(handle))
|
|
1661
|
+
continue; // Skip defaults for dynamic handles
|
|
1662
|
+
// Clone to avoid shared references
|
|
1663
|
+
effective[handle] = structuredClone(defaultValue);
|
|
1664
|
+
}
|
|
1665
|
+
return effective;
|
|
1666
|
+
}
|
|
1618
1667
|
|
|
1619
1668
|
/**
|
|
1620
1669
|
* HandleResolver component - manages dynamic handle resolution
|
|
@@ -2251,47 +2300,10 @@ class NodeExecutor {
|
|
|
2251
2300
|
* Compute effective inputs for a node by merging real inputs with defaults
|
|
2252
2301
|
*/
|
|
2253
2302
|
getEffectiveInputs(nodeId) {
|
|
2254
|
-
const node = this.graph.getNode(nodeId);
|
|
2255
|
-
if (!node)
|
|
2256
|
-
return {};
|
|
2257
2303
|
const registry = this.graph.getRegistry();
|
|
2258
2304
|
if (!registry)
|
|
2259
2305
|
return {};
|
|
2260
|
-
|
|
2261
|
-
if (!desc)
|
|
2262
|
-
return {};
|
|
2263
|
-
const resolved = this.graph.getResolvedHandles(nodeId);
|
|
2264
|
-
const regDefaults = desc.inputDefaults ?? {};
|
|
2265
|
-
const dynDefaults = resolved?.inputDefaults ?? {};
|
|
2266
|
-
// Identify which handles are dynamically resolved (not in registry statics)
|
|
2267
|
-
const staticHandles = new Set(Object.keys(desc.inputs ?? {}));
|
|
2268
|
-
const dynamicHandles = new Set(Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h)));
|
|
2269
|
-
// Precedence: dynamic > registry
|
|
2270
|
-
const mergedDefaults = {
|
|
2271
|
-
...regDefaults,
|
|
2272
|
-
...dynDefaults,
|
|
2273
|
-
};
|
|
2274
|
-
// Start with real inputs only (no defaults)
|
|
2275
|
-
const effective = { ...node.inputs };
|
|
2276
|
-
// Build set of inbound handles (wired inputs)
|
|
2277
|
-
const inboundEdges = this.graph.getInboundEdges(nodeId);
|
|
2278
|
-
const inbound = new Set(inboundEdges.map((e) => e.target.handle));
|
|
2279
|
-
// Apply defaults only for:
|
|
2280
|
-
// 1. Unbound handles that have no explicit value
|
|
2281
|
-
// 2. Static handles (not dynamically resolved)
|
|
2282
|
-
for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {
|
|
2283
|
-
if (defaultValue === undefined)
|
|
2284
|
-
continue;
|
|
2285
|
-
if (inbound.has(handle))
|
|
2286
|
-
continue; // Don't override wired inputs
|
|
2287
|
-
if (effective[handle] !== undefined)
|
|
2288
|
-
continue; // Already has value
|
|
2289
|
-
if (dynamicHandles.has(handle))
|
|
2290
|
-
continue; // Skip defaults for dynamic handles
|
|
2291
|
-
// Clone to avoid shared references
|
|
2292
|
-
effective[handle] = structuredClone(defaultValue);
|
|
2293
|
-
}
|
|
2294
|
-
return effective;
|
|
2306
|
+
return getEffectiveInputs(nodeId, this.graph, registry);
|
|
2295
2307
|
}
|
|
2296
2308
|
/**
|
|
2297
2309
|
* Create an execution context for a node
|
|
@@ -2397,6 +2409,20 @@ class NodeExecutor {
|
|
|
2397
2409
|
// Early validation for auto-mode paused state
|
|
2398
2410
|
if (this.runtime.isPaused())
|
|
2399
2411
|
return;
|
|
2412
|
+
// Check runtime validators (check current state, not just graph definition)
|
|
2413
|
+
const runtimeValidationError = this.runtime.hasRuntimeValidationBlock(nodeId);
|
|
2414
|
+
if (runtimeValidationError) {
|
|
2415
|
+
this.eventEmitter.emit("error", {
|
|
2416
|
+
kind: "system",
|
|
2417
|
+
message: runtimeValidationError.message,
|
|
2418
|
+
code: runtimeValidationError.code || "RUNTIME_VALIDATION_BLOCKED",
|
|
2419
|
+
details: {
|
|
2420
|
+
nodeId,
|
|
2421
|
+
...runtimeValidationError.details,
|
|
2422
|
+
},
|
|
2423
|
+
});
|
|
2424
|
+
return;
|
|
2425
|
+
}
|
|
2400
2426
|
// Attach run-context IDs if provided - do this BEFORE checking for pending resolution
|
|
2401
2427
|
// so that handle resolution can track these run contexts
|
|
2402
2428
|
if (runContextIds) {
|
|
@@ -2855,6 +2881,61 @@ class NodeExecutor {
|
|
|
2855
2881
|
}
|
|
2856
2882
|
}
|
|
2857
2883
|
|
|
2884
|
+
/**
|
|
2885
|
+
* RuntimeValidatorManager component - manages runtime validators
|
|
2886
|
+
*/
|
|
2887
|
+
class RuntimeValidatorManager {
|
|
2888
|
+
constructor(graph, registry) {
|
|
2889
|
+
this.graph = graph;
|
|
2890
|
+
this.registry = registry;
|
|
2891
|
+
this.validators = [];
|
|
2892
|
+
}
|
|
2893
|
+
/**
|
|
2894
|
+
* Set the registry (called when registry changes)
|
|
2895
|
+
*/
|
|
2896
|
+
setRegistry(registry) {
|
|
2897
|
+
this.registry = registry;
|
|
2898
|
+
}
|
|
2899
|
+
/**
|
|
2900
|
+
* Register a runtime validator that will be called before node execution.
|
|
2901
|
+
* Validators are called in registration order - if any returns true, execution is blocked.
|
|
2902
|
+
*/
|
|
2903
|
+
registerValidator(validator) {
|
|
2904
|
+
this.validators.push(validator);
|
|
2905
|
+
}
|
|
2906
|
+
/**
|
|
2907
|
+
* Unregister a runtime validator.
|
|
2908
|
+
*/
|
|
2909
|
+
unregisterValidator(validator) {
|
|
2910
|
+
const index = this.validators.indexOf(validator);
|
|
2911
|
+
if (index >= 0) {
|
|
2912
|
+
this.validators.splice(index, 1);
|
|
2913
|
+
}
|
|
2914
|
+
}
|
|
2915
|
+
/**
|
|
2916
|
+
* Check if any runtime validator blocks execution for this node.
|
|
2917
|
+
* Returns RuntimeValidationError if execution should be blocked, null otherwise.
|
|
2918
|
+
*/
|
|
2919
|
+
hasBlock(nodeId) {
|
|
2920
|
+
if (!this.registry)
|
|
2921
|
+
return null;
|
|
2922
|
+
for (const validator of this.validators) {
|
|
2923
|
+
try {
|
|
2924
|
+
const result = validator(nodeId, this.graph, this.registry);
|
|
2925
|
+
if (result !== false) {
|
|
2926
|
+
// Validator returned an error object
|
|
2927
|
+
return result;
|
|
2928
|
+
}
|
|
2929
|
+
}
|
|
2930
|
+
catch (err) {
|
|
2931
|
+
// Don't let validator errors break execution - log and continue
|
|
2932
|
+
console.error(`Runtime validator error for node ${nodeId}:`, err);
|
|
2933
|
+
}
|
|
2934
|
+
}
|
|
2935
|
+
return null;
|
|
2936
|
+
}
|
|
2937
|
+
}
|
|
2938
|
+
|
|
2858
2939
|
// Types are now imported from components/types.ts (re-exported above)
|
|
2859
2940
|
class GraphRuntime {
|
|
2860
2941
|
constructor() {
|
|
@@ -2871,6 +2952,8 @@ class GraphRuntime {
|
|
|
2871
2952
|
this.edgePropagator = new EdgePropagator(this.graph, this.eventEmitter, this.runContextManager, this.handleResolver, this);
|
|
2872
2953
|
// Create NodeExecutor with EdgePropagator and HandleResolver
|
|
2873
2954
|
this.nodeExecutor = new NodeExecutor(this.graph, this.eventEmitter, this.runContextManager, this.handleResolver, this, this);
|
|
2955
|
+
// Create RuntimeValidatorManager
|
|
2956
|
+
this.runtimeValidatorManager = new RuntimeValidatorManager(this.graph);
|
|
2874
2957
|
}
|
|
2875
2958
|
static create(def, registry, opts) {
|
|
2876
2959
|
const gr = new GraphRuntime();
|
|
@@ -2882,6 +2965,7 @@ class GraphRuntime {
|
|
|
2882
2965
|
gr.handleResolver.setRegistry(registry);
|
|
2883
2966
|
gr.handleResolver.setEnvironment(gr.environment);
|
|
2884
2967
|
gr.nodeExecutor.setEnvironment(gr.environment);
|
|
2968
|
+
gr.runtimeValidatorManager.setRegistry(registry);
|
|
2885
2969
|
// Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)
|
|
2886
2970
|
const initial = gr.isPaused()
|
|
2887
2971
|
? {
|
|
@@ -3099,6 +3183,26 @@ class GraphRuntime {
|
|
|
3099
3183
|
this.handleResolver.scheduleRecomputeHandles(nodeId);
|
|
3100
3184
|
}
|
|
3101
3185
|
}
|
|
3186
|
+
/**
|
|
3187
|
+
* Register a runtime validator that will be called before node execution.
|
|
3188
|
+
* Validators are called in registration order - if any returns true, execution is blocked.
|
|
3189
|
+
*/
|
|
3190
|
+
registerRuntimeValidator(validator) {
|
|
3191
|
+
this.runtimeValidatorManager.registerValidator(validator);
|
|
3192
|
+
}
|
|
3193
|
+
/**
|
|
3194
|
+
* Unregister a runtime validator.
|
|
3195
|
+
*/
|
|
3196
|
+
unregisterRuntimeValidator(validator) {
|
|
3197
|
+
this.runtimeValidatorManager.unregisterValidator(validator);
|
|
3198
|
+
}
|
|
3199
|
+
/**
|
|
3200
|
+
* Check if any runtime validator blocks execution for this node.
|
|
3201
|
+
* Returns RuntimeValidationError if execution should be blocked, null otherwise.
|
|
3202
|
+
*/
|
|
3203
|
+
hasRuntimeValidationBlock(nodeId) {
|
|
3204
|
+
return this.runtimeValidatorManager.hasBlock(nodeId);
|
|
3205
|
+
}
|
|
3102
3206
|
getGraphDef() {
|
|
3103
3207
|
const nodes = [];
|
|
3104
3208
|
this.graph.forEachNode((n) => {
|
|
@@ -6151,5 +6255,5 @@ function buildValueConverter(config) {
|
|
|
6151
6255
|
};
|
|
6152
6256
|
}
|
|
6153
6257
|
|
|
6154
|
-
export { BaseCompareOperation, BaseLogicOperation, BaseMathOperation, CompositeCategory, ComputeCategory, GraphBuilder, GraphRuntime, LevelLogger, LocalEngine, Registry, buildValueConverter, computeGraphCenter, convertSnapshot, createAsyncGraphDef, createAsyncGraphRegistry, createProgressGraphDef, createProgressGraphRegistry, createSimpleGraphDef, createSimpleGraphRegistry, createValidationGraphDef, createValidationGraphRegistry, findMatchingPaths, generateId, getInputDeclaredTypes, getInputHandleMetadata, getInputTypeId, getTypedOutputTypeId, getTypedOutputValue, getValueAtPath, installLogging, isInputPrivate, isTypedOutput, mergeInputHandleDescriptors, mergeRuntimeState, mergeSnapshots, offsetImportedPositions, parseJsonPath, registerDelayNode, registerProgressNodes, setValueAtPath, setValueAtPathWithCreation, typed };
|
|
6258
|
+
export { BaseCompareOperation, BaseLogicOperation, BaseMathOperation, CompositeCategory, ComputeCategory, Graph, GraphBuilder, GraphRuntime, LevelLogger, LocalEngine, Registry, buildValueConverter, computeGraphCenter, convertSnapshot, createAsyncGraphDef, createAsyncGraphRegistry, createProgressGraphDef, createProgressGraphRegistry, createSimpleGraphDef, createSimpleGraphRegistry, createValidationGraphDef, createValidationGraphRegistry, findMatchingPaths, generateId, getEffectiveInputs, getInputDeclaredTypes, getInputHandleMetadata, getInputTypeId, getTypedOutputTypeId, getTypedOutputValue, getValueAtPath, installLogging, isInputPrivate, isTypedOutput, mergeInputHandleDescriptors, mergeRuntimeState, mergeSnapshots, offsetImportedPositions, parseJsonPath, registerDelayNode, registerProgressNodes, setValueAtPath, setValueAtPathWithCreation, typed };
|
|
6155
6259
|
//# sourceMappingURL=index.js.map
|