@bian-womp/spark-graph 0.3.35 → 0.3.37
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 +99 -28
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/runtime/components/Graph.d.ts +4 -13
- package/lib/cjs/src/runtime/components/Graph.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/HandleResolver.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/NodeExecutor.d.ts +5 -0
- package/lib/cjs/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/RunContextManager.d.ts +11 -0
- package/lib/cjs/src/runtime/components/RunContextManager.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/types.d.ts +13 -4
- package/lib/cjs/src/runtime/components/types.d.ts.map +1 -1
- package/lib/esm/index.js +99 -28
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/runtime/components/Graph.d.ts +4 -13
- package/lib/esm/src/runtime/components/Graph.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/HandleResolver.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/NodeExecutor.d.ts +5 -0
- package/lib/esm/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/RunContextManager.d.ts +11 -0
- package/lib/esm/src/runtime/components/RunContextManager.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/types.d.ts +13 -4
- package/lib/esm/src/runtime/components/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ResolvedHandles } from "@bian-womp/spark-protocol";
|
|
2
2
|
import { Registry } from "../../builder/Registry";
|
|
3
|
-
import type { RuntimeNode, RuntimeEdge, ReadonlyRuntimeNode } from "./types";
|
|
3
|
+
import type { RuntimeNode, RuntimeEdge, ReadonlyRuntimeNode, ExecutionPlan } from "./types";
|
|
4
4
|
/**
|
|
5
5
|
* Graph component - manages nodes, edges, and handle resolution
|
|
6
6
|
* This is the ONLY place where nodes, edges, and resolvedByNode are directly updated.
|
|
@@ -91,17 +91,11 @@ export declare class Graph {
|
|
|
91
91
|
/**
|
|
92
92
|
* Add item to node queue
|
|
93
93
|
*/
|
|
94
|
-
addToNodeQueue(nodeId: string, item:
|
|
95
|
-
runId: string;
|
|
96
|
-
inputs: Record<string, unknown>;
|
|
97
|
-
}): void;
|
|
94
|
+
addToNodeQueue(nodeId: string, item: ExecutionPlan): void;
|
|
98
95
|
/**
|
|
99
96
|
* Remove first item from node queue
|
|
100
97
|
*/
|
|
101
|
-
shiftNodeQueue(nodeId: string):
|
|
102
|
-
runId: string;
|
|
103
|
-
inputs: Record<string, unknown>;
|
|
104
|
-
} | undefined;
|
|
98
|
+
shiftNodeQueue(nodeId: string): ExecutionPlan | undefined;
|
|
105
99
|
/**
|
|
106
100
|
* Clear node queue
|
|
107
101
|
*/
|
|
@@ -109,10 +103,7 @@ export declare class Graph {
|
|
|
109
103
|
/**
|
|
110
104
|
* Replace node queue
|
|
111
105
|
*/
|
|
112
|
-
replaceNodeQueue(nodeId: string, items:
|
|
113
|
-
runId: string;
|
|
114
|
-
inputs: Record<string, unknown>;
|
|
115
|
-
}>): void;
|
|
106
|
+
replaceNodeQueue(nodeId: string, items: ExecutionPlan[]): void;
|
|
116
107
|
/**
|
|
117
108
|
* Add controller to node
|
|
118
109
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/Graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/Graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleResolver.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/HandleResolver.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKrE;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IAOlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC;IAVnB,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAA8B;gBAGhC,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,eAAe,EACxC,QAAQ,CAAC,EAAE,QAAQ,YAAA,EAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKvC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI1D;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI1D;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAqD9C,OAAO,CAAC,iBAAiB;IA6EzB;;OAEG;YACW,uBAAuB;
|
|
1
|
+
{"version":3,"file":"HandleResolver.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/HandleResolver.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKrE;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IAOlD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC;IAVnB,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAA8B;gBAGhC,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,eAAe,EACxC,QAAQ,CAAC,EAAE,QAAQ,YAAA,EAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKvC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI1D;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI1D;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAqD9C,OAAO,CAAC,iBAAiB;IA6EzB;;OAEG;YACW,uBAAuB;CAyGtC"}
|
|
@@ -68,6 +68,11 @@ export declare class NodeExecutor implements INodeExecutor {
|
|
|
68
68
|
* Track run-context start for pending nodes
|
|
69
69
|
*/
|
|
70
70
|
private trackRunContextStart;
|
|
71
|
+
/**
|
|
72
|
+
* Decrement pendingQueued counters for plans' run-contexts.
|
|
73
|
+
* Used when queued work is being started, dropped, or cancelled.
|
|
74
|
+
*/
|
|
75
|
+
private decrementQueuedForPlans;
|
|
71
76
|
/**
|
|
72
77
|
* Create execution controller and update node stats
|
|
73
78
|
*/
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"NodeExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/NodeExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface RunContext {
|
|
|
8
8
|
pendingNodes: number;
|
|
9
9
|
pendingEdges: number;
|
|
10
10
|
pendingResolvers: number;
|
|
11
|
+
pendingQueued: number;
|
|
11
12
|
skipPropagateValues: boolean;
|
|
12
13
|
propagate: boolean;
|
|
13
14
|
resolve?: () => void;
|
|
@@ -44,6 +45,16 @@ export declare class RunContextManager {
|
|
|
44
45
|
* Check if there are any active run-contexts
|
|
45
46
|
*/
|
|
46
47
|
hasActiveRunContexts(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Increment queued work count for a run-context.
|
|
50
|
+
* Used by asyncConcurrency: "queue" to keep contexts alive while work is queued.
|
|
51
|
+
*/
|
|
52
|
+
incrementQueued(id: RunContextId, nodeId: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Decrement queued work count for a run-context.
|
|
55
|
+
* Called when queued work is either started or dropped.
|
|
56
|
+
*/
|
|
57
|
+
decrementQueued(id: RunContextId, nodeId: string): void;
|
|
47
58
|
startNodeRun(id: RunContextId, nodeId: string): void;
|
|
48
59
|
finishNodeRun(id: RunContextId, nodeId: string): void;
|
|
49
60
|
startEdgeConversion(id: RunContextId, edgeId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunContextManager.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/RunContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,YAAY,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAER,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAK9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GACA,YAAY;
|
|
1
|
+
{"version":3,"file":"RunContextManager.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/RunContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,YAAY,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAER,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAK9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GACA,YAAY;IAwBf;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS;IAIvD;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;IAIlD;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBvD;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBvD,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBpD,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBrD,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiB3D,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkB5D,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiB7D,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkB9D;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;;;;OAMG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI;IA0CzE;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -14,10 +14,7 @@ export interface RuntimeNode<State = any> extends GraphNodeDefinition {
|
|
|
14
14
|
activeControllers: Set<AbortController>;
|
|
15
15
|
controllerRunIds: Map<AbortController, string>;
|
|
16
16
|
snapshotCancelledRunIds?: Set<string>;
|
|
17
|
-
queue:
|
|
18
|
-
runId: string;
|
|
19
|
-
inputs: Record<string, unknown>;
|
|
20
|
-
}>;
|
|
17
|
+
queue: ExecutionPlan[];
|
|
21
18
|
stats: RuntimeNodeStats;
|
|
22
19
|
activeRunContextIds: Set<string>;
|
|
23
20
|
lastScheduledAt?: number;
|
|
@@ -43,4 +40,16 @@ export interface RuntimeEdge extends GraphEdgeDefinition {
|
|
|
43
40
|
dstDeclared?: string | string[];
|
|
44
41
|
}
|
|
45
42
|
export type RunContextId = string;
|
|
43
|
+
/**
|
|
44
|
+
* Execution plan containing all information needed to start a node execution.
|
|
45
|
+
* Captures a snapshot of the node's policy at scheduling time so later
|
|
46
|
+
* mutations to `node.policy` don't affect an in-flight run.
|
|
47
|
+
*/
|
|
48
|
+
export interface ExecutionPlan {
|
|
49
|
+
runId: string;
|
|
50
|
+
effectiveInputs: Record<string, unknown>;
|
|
51
|
+
runContextIdsForRun?: Set<RunContextId>;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
policy: RuntimeNode["policy"];
|
|
54
|
+
}
|
|
46
55
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,GAAG,CAAE,SAAQ,mBAAmB;IACnE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,KAAK,EACL,GAAG,CACJ,CAAC,WAAW,CAAC,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAGxC,gBAAgB,EAAE,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAK/C,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/components/types.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1146,6 +1146,7 @@ class RunContextManager {
|
|
|
1146
1146
|
pendingNodes: 0,
|
|
1147
1147
|
pendingEdges: 0,
|
|
1148
1148
|
pendingResolvers: 0,
|
|
1149
|
+
pendingQueued: 0,
|
|
1149
1150
|
skipPropagateValues: options?.skipPropagateValues ?? false,
|
|
1150
1151
|
propagate: options?.propagate ?? true,
|
|
1151
1152
|
resolve,
|
|
@@ -1177,6 +1178,47 @@ class RunContextManager {
|
|
|
1177
1178
|
hasActiveRunContexts() {
|
|
1178
1179
|
return this.runContexts.size > 0;
|
|
1179
1180
|
}
|
|
1181
|
+
/**
|
|
1182
|
+
* Increment queued work count for a run-context.
|
|
1183
|
+
* Used by asyncConcurrency: "queue" to keep contexts alive while work is queued.
|
|
1184
|
+
*/
|
|
1185
|
+
incrementQueued(id, nodeId) {
|
|
1186
|
+
const ctx = this.runContexts.get(id);
|
|
1187
|
+
if (!ctx) {
|
|
1188
|
+
this.logger.debug("increment-queued-context-not-found", {
|
|
1189
|
+
runContextId: id,
|
|
1190
|
+
nodeId,
|
|
1191
|
+
});
|
|
1192
|
+
return;
|
|
1193
|
+
}
|
|
1194
|
+
ctx.pendingQueued++;
|
|
1195
|
+
this.logger.debug("increment-queued", {
|
|
1196
|
+
runContextId: id,
|
|
1197
|
+
nodeId,
|
|
1198
|
+
pendingQueued: ctx.pendingQueued,
|
|
1199
|
+
});
|
|
1200
|
+
}
|
|
1201
|
+
/**
|
|
1202
|
+
* Decrement queued work count for a run-context.
|
|
1203
|
+
* Called when queued work is either started or dropped.
|
|
1204
|
+
*/
|
|
1205
|
+
decrementQueued(id, nodeId) {
|
|
1206
|
+
const ctx = this.runContexts.get(id);
|
|
1207
|
+
if (!ctx) {
|
|
1208
|
+
this.logger.debug("decrement-queued-context-not-found", {
|
|
1209
|
+
runContextId: id,
|
|
1210
|
+
nodeId,
|
|
1211
|
+
});
|
|
1212
|
+
return;
|
|
1213
|
+
}
|
|
1214
|
+
ctx.pendingQueued--;
|
|
1215
|
+
this.logger.debug("decrement-queued", {
|
|
1216
|
+
runContextId: id,
|
|
1217
|
+
nodeId,
|
|
1218
|
+
pendingQueued: ctx.pendingQueued,
|
|
1219
|
+
});
|
|
1220
|
+
this.finishRunContextIfPossible(id);
|
|
1221
|
+
}
|
|
1180
1222
|
startNodeRun(id, nodeId) {
|
|
1181
1223
|
const ctx = this.runContexts.get(id);
|
|
1182
1224
|
if (!ctx) {
|
|
@@ -1289,7 +1331,8 @@ class RunContextManager {
|
|
|
1289
1331
|
}
|
|
1290
1332
|
if (ctx.pendingNodes > 0 ||
|
|
1291
1333
|
ctx.pendingEdges > 0 ||
|
|
1292
|
-
ctx.pendingResolvers > 0
|
|
1334
|
+
ctx.pendingResolvers > 0 ||
|
|
1335
|
+
ctx.pendingQueued > 0) {
|
|
1293
1336
|
return; // Still has pending work
|
|
1294
1337
|
}
|
|
1295
1338
|
this.logger.info("finish-run-context", {
|
|
@@ -1840,8 +1883,6 @@ class HandleResolver {
|
|
|
1840
1883
|
if ((this.recomputeTokenByNode.get(nodeId) ?? 0) !== token)
|
|
1841
1884
|
return;
|
|
1842
1885
|
const before = this.graph.getResolvedHandles(nodeId);
|
|
1843
|
-
if (!before)
|
|
1844
|
-
return;
|
|
1845
1886
|
// Re-fetch desc to ensure we have the latest (node might have been updated)
|
|
1846
1887
|
const nodeDesc = this.registry.nodes.get(node.typeId);
|
|
1847
1888
|
if (!nodeDesc)
|
|
@@ -1870,8 +1911,9 @@ class HandleResolver {
|
|
|
1870
1911
|
...resolved?.inputDefaults,
|
|
1871
1912
|
};
|
|
1872
1913
|
const after = { inputs, outputs, inputDefaults };
|
|
1873
|
-
//
|
|
1874
|
-
|
|
1914
|
+
// If we have prior handles, skip update when unchanged; for new nodes (no before),
|
|
1915
|
+
// always write the resolved handles.
|
|
1916
|
+
if (before && JSON.stringify(before) === JSON.stringify(after))
|
|
1875
1917
|
return;
|
|
1876
1918
|
// Call GraphRuntime's updateNodeHandles to update edges and re-propagate values
|
|
1877
1919
|
// Note: updateNodeHandles will set the resolved handles internally
|
|
@@ -2458,8 +2500,8 @@ class NodeExecutor {
|
|
|
2458
2500
|
}
|
|
2459
2501
|
// Handle debouncing
|
|
2460
2502
|
const now = Date.now();
|
|
2461
|
-
if (this.shouldDebounce(
|
|
2462
|
-
this.handleDebouncedSchedule(node, nodeId, now);
|
|
2503
|
+
if (this.shouldDebounce(node, now)) {
|
|
2504
|
+
this.handleDebouncedSchedule(node, nodeId, now, runContextIds);
|
|
2463
2505
|
return;
|
|
2464
2506
|
}
|
|
2465
2507
|
// Prepare execution plan
|
|
@@ -2470,7 +2512,7 @@ class NodeExecutor {
|
|
|
2470
2512
|
/**
|
|
2471
2513
|
* Check if execution should be debounced
|
|
2472
2514
|
*/
|
|
2473
|
-
shouldDebounce(
|
|
2515
|
+
shouldDebounce(node, now) {
|
|
2474
2516
|
const policy = node.policy ?? {};
|
|
2475
2517
|
const lastScheduledAt = node.lastScheduledAt;
|
|
2476
2518
|
return !!(policy.debounceMs &&
|
|
@@ -2480,13 +2522,23 @@ class NodeExecutor {
|
|
|
2480
2522
|
/**
|
|
2481
2523
|
* Handle debounced scheduling by replacing the latest queued item
|
|
2482
2524
|
*/
|
|
2483
|
-
handleDebouncedSchedule(node, nodeId, now) {
|
|
2525
|
+
handleDebouncedSchedule(node, nodeId, now, runContextIds) {
|
|
2526
|
+
// Decrement pendingQueued for any existing queued items before replacing
|
|
2527
|
+
if (node.queue.length > 0) {
|
|
2528
|
+
this.decrementQueuedForPlans(node.queue, nodeId);
|
|
2529
|
+
}
|
|
2484
2530
|
const effectiveInputs = this.getEffectiveInputs(nodeId);
|
|
2485
2531
|
const runSeq = this.graph.incrementNodeRunSeq(nodeId);
|
|
2486
|
-
const
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2532
|
+
const runId = `${nodeId}:${runSeq}:${now}`;
|
|
2533
|
+
const policySnapshot = node.policy ? { ...node.policy } : undefined;
|
|
2534
|
+
const plan = {
|
|
2535
|
+
runId,
|
|
2536
|
+
effectiveInputs,
|
|
2537
|
+
runContextIdsForRun: runContextIds,
|
|
2538
|
+
timestamp: now,
|
|
2539
|
+
policy: policySnapshot,
|
|
2540
|
+
};
|
|
2541
|
+
this.graph.replaceNodeQueue(nodeId, [plan]);
|
|
2490
2542
|
}
|
|
2491
2543
|
/**
|
|
2492
2544
|
* Prepare execution plan with all necessary information
|
|
@@ -2545,12 +2597,19 @@ class NodeExecutor {
|
|
|
2545
2597
|
const currentNode = this.graph.getNode(nodeId);
|
|
2546
2598
|
if (!currentNode)
|
|
2547
2599
|
return;
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2600
|
+
// Keep the originating run-context alive while work is queued by
|
|
2601
|
+
// incrementing queued counters for the plan's run-contexts.
|
|
2602
|
+
if (plan.runContextIdsForRun) {
|
|
2603
|
+
for (const rcId of plan.runContextIdsForRun) {
|
|
2604
|
+
this.runContextManager.incrementQueued(rcId, nodeId);
|
|
2605
|
+
}
|
|
2606
|
+
}
|
|
2607
|
+
this.graph.addToNodeQueue(nodeId, plan);
|
|
2552
2608
|
if (currentNode.queue.length > maxQ) {
|
|
2553
|
-
this.graph.shiftNodeQueue(nodeId);
|
|
2609
|
+
const dropped = this.graph.shiftNodeQueue(nodeId);
|
|
2610
|
+
if (dropped) {
|
|
2611
|
+
this.decrementQueuedForPlans(dropped, nodeId);
|
|
2612
|
+
}
|
|
2554
2613
|
}
|
|
2555
2614
|
this.processQueue(node, nodeId);
|
|
2556
2615
|
}
|
|
@@ -2568,18 +2627,12 @@ class NodeExecutor {
|
|
|
2568
2627
|
if (!next)
|
|
2569
2628
|
return;
|
|
2570
2629
|
this.graph.setNodeLatestRunId(nodeId, next.runId);
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
runId: next.runId,
|
|
2575
|
-
effectiveInputs: next.inputs,
|
|
2576
|
-
runContextIdsForRun: activeRunContextIds.size > 0 ? activeRunContextIds : undefined,
|
|
2577
|
-
timestamp: Date.now(),
|
|
2578
|
-
policy: policySnapshot,
|
|
2579
|
-
};
|
|
2580
|
-
this.startRun(node, nodeId, plan, () => {
|
|
2630
|
+
// Start the run first (which increments pendingNodes), then decrement
|
|
2631
|
+
// pendingQueued to ensure the run context stays alive.
|
|
2632
|
+
this.startRun(node, nodeId, next, () => {
|
|
2581
2633
|
setTimeout(processNext, 0);
|
|
2582
2634
|
});
|
|
2635
|
+
this.decrementQueuedForPlans(next, nodeId);
|
|
2583
2636
|
};
|
|
2584
2637
|
processNext();
|
|
2585
2638
|
}
|
|
@@ -2610,6 +2663,20 @@ class NodeExecutor {
|
|
|
2610
2663
|
}
|
|
2611
2664
|
}
|
|
2612
2665
|
}
|
|
2666
|
+
/**
|
|
2667
|
+
* Decrement pendingQueued counters for plans' run-contexts.
|
|
2668
|
+
* Used when queued work is being started, dropped, or cancelled.
|
|
2669
|
+
*/
|
|
2670
|
+
decrementQueuedForPlans(plans, nodeId) {
|
|
2671
|
+
const plansArray = Array.isArray(plans) ? plans : [plans];
|
|
2672
|
+
for (const plan of plansArray) {
|
|
2673
|
+
if (plan.runContextIdsForRun) {
|
|
2674
|
+
for (const rcId of plan.runContextIdsForRun) {
|
|
2675
|
+
this.runContextManager.decrementQueued(rcId, nodeId);
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2613
2680
|
/**
|
|
2614
2681
|
* Create execution controller and update node stats
|
|
2615
2682
|
*/
|
|
@@ -2838,6 +2905,10 @@ class NodeExecutor {
|
|
|
2838
2905
|
}
|
|
2839
2906
|
this.graph.clearNodeControllers(nodeId);
|
|
2840
2907
|
this.graph.updateNodeStats(nodeId, { active: 0 });
|
|
2908
|
+
// Decrement pendingQueued for any queued items before clearing the queue
|
|
2909
|
+
if (node.queue.length > 0) {
|
|
2910
|
+
this.decrementQueuedForPlans(node.queue, nodeId);
|
|
2911
|
+
}
|
|
2841
2912
|
this.graph.clearNodeQueue(nodeId);
|
|
2842
2913
|
}
|
|
2843
2914
|
/**
|