@lokvis/runtime 0.1.0 → 0.2.0-beta.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/capability-registry.d.ts +4 -0
- package/dist/capability-registry.d.ts.map +1 -1
- package/dist/capability-registry.js +19 -2
- package/dist/capability-registry.js.map +1 -1
- package/dist/event-bus.d.ts.map +1 -1
- package/dist/event-bus.js +7 -2
- package/dist/event-bus.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +37 -1
- package/dist/executor.js.map +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +1 -1
- package/dist/history.js.map +1 -1
- package/dist/runtime.d.ts +28 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +133 -13
- package/dist/runtime.js.map +1 -1
- package/dist/types.d.ts +27 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/capability-registry.ts +19 -2
- package/src/event-bus.ts +6 -2
- package/src/executor.ts +46 -1
- package/src/history.ts +2 -2
- package/src/runtime.ts +138 -13
- package/src/types.ts +28 -1
|
@@ -18,6 +18,10 @@ export declare class CapabilityRegistry {
|
|
|
18
18
|
list(): Capability[];
|
|
19
19
|
/** 检查能力是否存在 */
|
|
20
20
|
has(name: CapabilityName): boolean;
|
|
21
|
+
/** 检查能力是否有非 stub 实现 */
|
|
22
|
+
hasImplementation(name: CapabilityName): boolean;
|
|
23
|
+
/** 检查能力是否仅有 stub 实现 */
|
|
24
|
+
isStubOnly(name: CapabilityName): boolean;
|
|
21
25
|
/** 获取能力声明 */
|
|
22
26
|
get(name: CapabilityName): Capability | undefined;
|
|
23
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-registry.d.ts","sourceRoot":"","sources":["../src/capability-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EAExB,MAAM,gBAAgB,CAAC;AAiBxB,aAAa;AACb,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;gBAE9C,eAAe,GAAE,uBAAiC;IAI9D,eAAe;IACf,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQhD,aAAa;IACb,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAU5D,eAAe;IACf,IAAI,IAAI,UAAU,EAAE;IAIpB,eAAe;IACf,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIlC,aAAa;IACb,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS;IAIjD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"capability-registry.d.ts","sourceRoot":"","sources":["../src/capability-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EAExB,MAAM,gBAAgB,CAAC;AAiBxB,aAAa;AACb,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;gBAE9C,eAAe,GAAE,uBAAiC;IAI9D,eAAe;IACf,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQhD,aAAa;IACb,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAU5D,eAAe;IACf,IAAI,IAAI,UAAU,EAAE;IAIpB,eAAe;IACf,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIlC,uBAAuB;IACvB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAMhD,uBAAuB;IACvB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAMzC,aAAa;IACb,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS;IAIjD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAe7F,sBAAsB;IACtB,OAAO,CAAC,gBAAgB;IAoBxB,+BAA+B;IAC/B,OAAO,CAAC,OAAO;IAYf,kCAAkC;IAClC,OAAO,CAAC,MAAM;IAId,aAAa;IACb,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -41,6 +41,20 @@ export class CapabilityRegistry {
|
|
|
41
41
|
has(name) {
|
|
42
42
|
return this.registry.has(name);
|
|
43
43
|
}
|
|
44
|
+
/** 检查能力是否有非 stub 实现 */
|
|
45
|
+
hasImplementation(name) {
|
|
46
|
+
const entry = this.registry.get(name);
|
|
47
|
+
if (!entry)
|
|
48
|
+
return false;
|
|
49
|
+
return entry.implementations.some((i) => i.status !== 'stub');
|
|
50
|
+
}
|
|
51
|
+
/** 检查能力是否仅有 stub 实现 */
|
|
52
|
+
isStubOnly(name) {
|
|
53
|
+
const entry = this.registry.get(name);
|
|
54
|
+
if (!entry || entry.implementations.length === 0)
|
|
55
|
+
return false;
|
|
56
|
+
return entry.implementations.every((i) => i.status === 'stub');
|
|
57
|
+
}
|
|
44
58
|
/** 获取能力声明 */
|
|
45
59
|
get(name) {
|
|
46
60
|
return this.registry.get(name)?.capability;
|
|
@@ -54,12 +68,15 @@ export class CapabilityRegistry {
|
|
|
54
68
|
const entry = this.registry.get(name);
|
|
55
69
|
if (!entry || entry.implementations.length === 0)
|
|
56
70
|
return undefined;
|
|
71
|
+
const available = entry.implementations.filter((i) => i.status !== 'stub');
|
|
72
|
+
if (available.length === 0)
|
|
73
|
+
return undefined;
|
|
57
74
|
if (preferredEngine) {
|
|
58
|
-
const impl =
|
|
75
|
+
const impl = available.find((i) => i.engine === preferredEngine);
|
|
59
76
|
if (impl)
|
|
60
77
|
return impl;
|
|
61
78
|
}
|
|
62
|
-
return this.selectByStrategy(
|
|
79
|
+
return this.selectByStrategy(available, entry.capability);
|
|
63
80
|
}
|
|
64
81
|
/** 按默认策略从实现列表中选择一个 */
|
|
65
82
|
selectByStrategy(impls, capability) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-registry.js","sourceRoot":"","sources":["../src/capability-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,uBAAuB;AACvB,MAAM,gBAAgB,GAAqC;IACzD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,aAAa;AACb,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC3C,eAAe,CAA0B;IAE1D,YAAY,kBAA2C,OAAO;QAC5D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,eAAe;IACf,kBAAkB,CAAC,UAAsB;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,aAAa;IACb,sBAAsB,CAAC,IAA8B;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,0DAA0D,IAAI,CAAC,UAAU,mCAAmC,CAC7G,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,eAAe;IACf,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,eAAe;IACf,GAAG,CAAC,IAAoB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,aAAa;IACb,GAAG,CAAC,IAAoB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAoB,EAAE,eAAwB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnE,
|
|
1
|
+
{"version":3,"file":"capability-registry.js","sourceRoot":"","sources":["../src/capability-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/event-bus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AAI5D,wBAAgB,cAAc,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AAI5D,wBAAgB,cAAc,IAAI,QAAQ,CAgCzC"}
|
package/dist/event-bus.js
CHANGED
|
@@ -20,8 +20,13 @@ export function createEventBus() {
|
|
|
20
20
|
},
|
|
21
21
|
emit(event) {
|
|
22
22
|
emitter.emit(event.type, event);
|
|
23
|
-
for (const handler of anyHandlers) {
|
|
24
|
-
|
|
23
|
+
for (const handler of [...anyHandlers]) {
|
|
24
|
+
try {
|
|
25
|
+
handler(event);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error(`[event-bus] onAny handler threw for "${event.type}":`, err);
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
31
|
},
|
|
27
32
|
clear() {
|
package/dist/event-bus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,IAAI,EAAU,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE5D,OAAO;QACL,EAAE,CAAC,IAAI,EAAE,OAAO;YACd,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACpD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,OAAO;YACX,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,IAAI,EAAU,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE5D,OAAO;QACL,EAAE,CAAC,IAAI,EAAE,OAAO;YACd,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACpD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,OAAO;YACX,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACpB,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EAEP,QAAQ,EAGR,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAWnE,qBAAqB;AACrB,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EAEP,QAAQ,EAGR,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAWnE,qBAAqB;AACrB,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AA0GD,mBAAmB;AACnB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAsC;IACrD,4CAA4C;IAC5C,OAAO,CAAC,eAAe,CAAiC;gBAE5C,MAAM,EAAE,cAAc;IAIlC,YAAY;IACN,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAC1B,OAAO,CAAC,cAAc,CAAC;IA+I1B,WAAW;IACL,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,WAAW;IACL,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,WAAW;IACL,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAMrB,+BAA+B;IAC/B,OAAO,CAAC,aAAa;CAOtB"}
|
package/dist/executor.js
CHANGED
|
@@ -22,16 +22,49 @@ function createExecutionContext(workflowId, nodeId, signal, onProgress) {
|
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
/** 拓扑排序:将 edges
|
|
25
|
+
/** 拓扑排序:将 edges 转换为线性节点序列。
|
|
26
|
+
*
|
|
27
|
+
* 修复 review 报告:原实现 edge.from 不在 nodeMap 时静默丢弃,
|
|
28
|
+
* 但 edge.to 的入度仍被 +1,导致目标节点入度永远无法归零,
|
|
29
|
+
* 被误判为「环」(demo 用 `__input__` 哨兵边触发此 bug)。
|
|
30
|
+
* 现在显式校验所有 edge 引用必须对应真实节点,否则快速失败。
|
|
31
|
+
*/
|
|
26
32
|
function topologicalSort(nodes, edges) {
|
|
27
33
|
const nodeMap = new Map(nodes.map((n) => [n.id, n]));
|
|
28
34
|
const inDegree = new Map();
|
|
29
35
|
const adjacency = new Map();
|
|
36
|
+
// 校验节点 ID 唯一性
|
|
37
|
+
if (nodeMap.size !== nodes.length) {
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
for (const n of nodes) {
|
|
40
|
+
if (seen.has(n.id)) {
|
|
41
|
+
throw new Error(`Workflow contains duplicate node id: ${n.id}`);
|
|
42
|
+
}
|
|
43
|
+
seen.add(n.id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
30
46
|
for (const node of nodes) {
|
|
31
47
|
inDegree.set(node.id, 0);
|
|
32
48
|
adjacency.set(node.id, []);
|
|
33
49
|
}
|
|
50
|
+
// 校验 edge 引用必须存在于 nodes 中(防止 `__input__` 等哨兵节点
|
|
51
|
+
// 被静默吞掉,进而导致下游节点入度无法归零 → 误判为环)
|
|
34
52
|
for (const edge of edges) {
|
|
53
|
+
if (!nodeMap.has(edge.from)) {
|
|
54
|
+
throw new Error(`Workflow edge references unknown source node: "${edge.from}". ` +
|
|
55
|
+
`Edge endpoints must reference existing nodes; ` +
|
|
56
|
+
`reserved sentinel nodes (e.g. "__input__") are not supported ` +
|
|
57
|
+
`by the executor — input assets are injected into the first node ` +
|
|
58
|
+
`with in-degree 0.`);
|
|
59
|
+
}
|
|
60
|
+
if (!nodeMap.has(edge.to)) {
|
|
61
|
+
throw new Error(`Workflow edge references unknown target node: "${edge.to}". ` +
|
|
62
|
+
`Edge endpoints must reference existing nodes.`);
|
|
63
|
+
}
|
|
64
|
+
if (edge.from === edge.to) {
|
|
65
|
+
throw new Error(`Workflow contains self-loop on node: "${edge.from}". ` +
|
|
66
|
+
`Self-loops create cycles and are not allowed.`);
|
|
67
|
+
}
|
|
35
68
|
inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);
|
|
36
69
|
adjacency.get(edge.from)?.push(edge.to);
|
|
37
70
|
}
|
|
@@ -131,6 +164,9 @@ export class WorkflowExecutor {
|
|
|
131
164
|
}
|
|
132
165
|
const impl = this.config.capabilityRegistry.resolve(capability);
|
|
133
166
|
if (!impl) {
|
|
167
|
+
if (this.config.capabilityRegistry.isStubOnly(capability)) {
|
|
168
|
+
throw new Error(`Capability "${capability}" is not yet available (only stub engine registered). Install a real engine plugin to use this capability.`);
|
|
169
|
+
}
|
|
134
170
|
throw new Error(`No implementation registered for capability "${capability}"`);
|
|
135
171
|
}
|
|
136
172
|
// 执行能力
|
package/dist/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,cAAc;AACd,SAAS,sBAAsB,CAC7B,UAAkB,EAClB,MAAc,EACd,MAAmB,EACnB,UAAyD;IAEzD,OAAO;QACL,UAAU;QACV,MAAM;QACN,MAAM;QACN,UAAU;QACV,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,uBAAuB;YACvB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,WAAW,UAAU,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,WAAW,UAAU,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/history.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface HistoryStackConfig {
|
|
|
19
19
|
/** 淘汰条目时的回调,用于清理 OPFS 资产 */
|
|
20
20
|
onEvict?: (entry: HistoryEntry) => void;
|
|
21
21
|
/** 历史变更时的回调,用于转发为 eventBus 事件 */
|
|
22
|
-
onChanged?: (workflowId: string, entries: HistoryEntry[]) => void;
|
|
22
|
+
onChanged?: (workflowId: string, entries: HistoryEntry[], currentIndex: number) => void;
|
|
23
23
|
}
|
|
24
24
|
/** HistoryStack 状态(供序列化/恢复使用) */
|
|
25
25
|
export interface HistoryStackSnapshot {
|
package/dist/history.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,iCAAiC;IACjC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,iCAAiC;IACjC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACzF;AAED,iCAAiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAP7B,OAAO,CAAC,OAAO,CAAsB;IACrC,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAC6B;gBAGjC,UAAU,EAAE,MAAM,EACnC,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAS1C,8BAA8B;IAC9B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kCAAkC;IAClC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,gBAAgB;IAChB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gBAAgB;IAChB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,mBAAmB;IACnB,IAAI,IAAI,YAAY,EAAE;IAItB,4BAA4B;IAC5B,OAAO,IAAI,YAAY,EAAE;IAIzB,0BAA0B;IAC1B,UAAU,IAAI,YAAY,EAAE;IAI5B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAuBjC;;;;;;OAMG;IACH,IAAI,IAAI,YAAY,GAAG,IAAI,GAAG,SAAS;IAOvC;;;OAGG;IACH,IAAI,IAAI,YAAY,GAAG,SAAS;IAOhC,iCAAiC;IACjC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS;IAOtD,kCAAkC;IAClC,KAAK,IAAI,IAAI;IAMb;;;;OAIG;IACH,KAAK,IAAI,IAAI;IASb,6BAA6B;IAC7B,QAAQ,IAAI,oBAAoB;IAOhC,YAAY;IACZ,OAAO,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAQ7C,kCAAkC;IAClC,OAAO,CAAC,WAAW;IAYnB,2CAA2C;IAC3C,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;CAGtB;AAED,yBAAyB;AACzB,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACnC,YAAY,CAEd"}
|
package/dist/history.js
CHANGED
|
@@ -161,7 +161,7 @@ export class HistoryStack {
|
|
|
161
161
|
this.notifyEvict(evicted);
|
|
162
162
|
}
|
|
163
163
|
notifyChanged() {
|
|
164
|
-
this.config.onChanged?.(this.workflowId, this.list());
|
|
164
|
+
this.config.onChanged?.(this.workflowId, this.list(), this.cursor);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
/** 工厂:创建 HistoryStack */
|
package/dist/history.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAO,YAAY;IAQJ;IAPX,OAAO,GAAmB,EAAE,CAAC;IACrC,wCAAwC;IAChC,MAAM,GAAG,CAAC,CAAC,CAAC;IACH,MAAM,CAC6B;IAEpD,YACmB,UAAkB,EACnC,SAAsC,EAAE;QADvB,eAAU,GAAV,UAAU,CAAQ;QAGnC,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,mBAAmB;IACnB,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,4BAA4B;IAC5B,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,0BAA0B;IAC1B,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAmB;QACxB,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,+CAA+C,IAAI,CAAC,UAAU,WAAW,KAAK,CAAC,UAAU,GAAG,CAC7F,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtC,aAAa;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC;IACpC,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACjE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,kCAAkC;IAClC,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,YAAY;IACZ,OAAO,CAAC,QAA8B;QACpC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,kDAAkD;IAElD,kCAAkC;IAC1B,WAAW,CAAC,OAAuB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IACnC,aAAa;QACnB,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACrB,sBAAsB;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -38,10 +38,26 @@ export declare class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
38
38
|
private currentOutputsMap;
|
|
39
39
|
constructor(config?: RuntimeConfig);
|
|
40
40
|
get status(): RuntimeStatus;
|
|
41
|
-
run(workflow: Workflow, inputs: AssetId[] | Asset[]): Promise<WorkflowResult>;
|
|
41
|
+
run(workflow: Workflow, inputs: AssetId[] | Asset[], options?: import('./types.js').RunOptions): Promise<WorkflowResult>;
|
|
42
42
|
cancel(workflowId: string): Promise<void>;
|
|
43
43
|
pause(workflowId: string): Promise<void>;
|
|
44
44
|
resume(workflowId: string): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* 销毁指定工作流的运行时状态(W2.8 内存治理)。
|
|
47
|
+
*
|
|
48
|
+
* 调用时机:
|
|
49
|
+
* - ui-react 卸载 Workspace 组件时
|
|
50
|
+
* - 用户主动关闭工作流标签页时
|
|
51
|
+
*
|
|
52
|
+
* 行为:
|
|
53
|
+
* - 调用 stack.reset() 触发 onEvict → assetStore.remove 回收历史 outputs 资产
|
|
54
|
+
* - 从 historyStacks / initialInputsMap / currentOutputsMap 三 Map 中删除 entry
|
|
55
|
+
* - 调用 executor.cancel 取消运行中的执行(若有)
|
|
56
|
+
*
|
|
57
|
+
* 修复 review 报告:原实现无清理入口,Workflow 组件卸载后 Map 中残留 entry,
|
|
58
|
+
* 长会话累积导致内存与 OPFS 空间双泄漏。
|
|
59
|
+
*/
|
|
60
|
+
disposeWorkflow(workflowId: string): Promise<void>;
|
|
45
61
|
history(workflowId: string): Promise<HistoryEntry[]>;
|
|
46
62
|
undo(workflowId: string): Promise<void>;
|
|
47
63
|
redo(workflowId: string): Promise<void>;
|
|
@@ -68,6 +84,17 @@ export declare class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
68
84
|
_getCapabilityRegistry(): CapabilityRegistry;
|
|
69
85
|
/** 获取工作流当前输出 AssetId(undo/redo 后的"当前"状态,内部用) */
|
|
70
86
|
_getCurrentOutputs(workflowId: string): AssetId[];
|
|
87
|
+
/** 获取工作流当前输出 AssetId(公开 API,供 UI / MCP 查询) */
|
|
88
|
+
getCurrentOutputs(workflowId: string): Promise<AssetId[]>;
|
|
89
|
+
/**
|
|
90
|
+
* LRU 上限清理:historyStacks 超过 MAX_CONCURRENT_WORKFLOW_STACKS 时
|
|
91
|
+
* 按 FIFO 删除最旧 stack(reset 触发 onEvict → assetStore.remove 回收资产)。
|
|
92
|
+
*
|
|
93
|
+
* Map 的迭代顺序是插入顺序(ES2015+ 规范),所以第一个 entry 即最旧。
|
|
94
|
+
* 注意:当前 run() 的工作流尚未插入 Map(getOrCreateHistoryStack 才会插入),
|
|
95
|
+
* 所以这里清理不会误删当前工作流。
|
|
96
|
+
*/
|
|
97
|
+
private enforceHistoryStacksLimit;
|
|
71
98
|
/** 获取或创建工作流对应的 HistoryStack */
|
|
72
99
|
private getOrCreateHistoryStack;
|
|
73
100
|
/** 将输入归一化为 AssetId[](run() 入参可为 AssetId[] 或 Asset[]) */
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,EAGV,YAAY,EAEZ,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Runtime 是整个系统的"浏览器操作系统",唯一职责:Input → Run → Output。
|
|
5
5
|
*/
|
|
6
|
+
import { validateWorkflow } from '@lokvis/schema';
|
|
6
7
|
import { createEventBus } from './event-bus.js';
|
|
7
8
|
import { createAssetStore, createMemoryAssetStore, generateId, } from './asset-store.js';
|
|
8
9
|
import { CapabilityRegistry } from './capability-registry.js';
|
|
@@ -11,6 +12,17 @@ import { HistoryStack } from './history.js';
|
|
|
11
12
|
export const RUNTIME_VERSION = '0.1.0';
|
|
12
13
|
/** 默认历史记录上限 */
|
|
13
14
|
const DEFAULT_MAX_HISTORY = 10;
|
|
15
|
+
/**
|
|
16
|
+
* 同时持有的工作流历史栈上限(W2.8 内存治理)。
|
|
17
|
+
*
|
|
18
|
+
* 修复 review 报告:原实现 historyStacks 是无限增长 Map,每次 run() 都加入新
|
|
19
|
+
* workflow.id(ui-react buildLinearWorkflow 用 `wf_${Date.now()}` 每次唯一),
|
|
20
|
+
* 长会话累积导致 Map 引用的 AssetId 无法回收 → 内存泄漏。
|
|
21
|
+
*
|
|
22
|
+
* 32 是经验值:覆盖用户常见使用(多 tab 切换 + undo 范围),超限按 FIFO
|
|
23
|
+
* 清理最旧 stack(reset 触发 onEvict → assetStore.remove 回收资产)。
|
|
24
|
+
*/
|
|
25
|
+
const MAX_CONCURRENT_WORKFLOW_STACKS = 32;
|
|
14
26
|
/** 存储配额超限时抛出(W2.9) */
|
|
15
27
|
export class QuotaExceededError extends Error {
|
|
16
28
|
usage;
|
|
@@ -153,20 +165,53 @@ export class LokvisRuntimeImpl {
|
|
|
153
165
|
return this._status;
|
|
154
166
|
}
|
|
155
167
|
// ─── 工作流执行 ──────────────────────────────────────
|
|
156
|
-
async run(workflow, inputs) {
|
|
168
|
+
async run(workflow, inputs, options) {
|
|
157
169
|
this._status = 'running';
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
170
|
+
// Schema 层校验:在 executor.execute 之前调用 validateWorkflow,
|
|
171
|
+
// 让结构问题(保留字哨兵 __input__、悬挂 edge、自环、重复 id、真环)
|
|
172
|
+
// 在入口处暴露,错误信息精准(如 "Edge from __input__ references a
|
|
173
|
+
// reserved sentinel id"),而不是被 executor 拓扑排序误判为含糊的 "cycle"。
|
|
174
|
+
// 三层防御的第 3 层(前两层:executor 防御性校验 + 单元测试覆盖)。
|
|
175
|
+
const validation = validateWorkflow(workflow);
|
|
176
|
+
if (!validation.success) {
|
|
177
|
+
this._status = 'error';
|
|
178
|
+
const error = validation.error.issues
|
|
179
|
+
.map((i) => i.message)
|
|
180
|
+
.join('; ');
|
|
181
|
+
const result = {
|
|
182
|
+
workflowId: workflow.id,
|
|
183
|
+
outputs: [],
|
|
184
|
+
duration: 0,
|
|
185
|
+
status: 'failed',
|
|
186
|
+
error,
|
|
187
|
+
};
|
|
188
|
+
this.eventBus.emit({
|
|
189
|
+
type: 'workflow:completed',
|
|
190
|
+
workflowId: workflow.id,
|
|
191
|
+
result,
|
|
192
|
+
});
|
|
193
|
+
return result;
|
|
164
194
|
}
|
|
165
|
-
//
|
|
195
|
+
// 历史栈管理:
|
|
196
|
+
// - 默认:每次 run() 重置历史(重跑语义),并通过 onEvict 回收旧 outputs 资产
|
|
197
|
+
// - appendHistory:true:保留已有历史栈,支持跨次 undo/redo 链(如连续滤镜)
|
|
166
198
|
const inputIds = await this.collectInputAssetIds(inputs);
|
|
167
|
-
this.
|
|
168
|
-
|
|
169
|
-
|
|
199
|
+
if (options?.appendHistory && this.historyStacks.has(workflow.id)) {
|
|
200
|
+
// 追加模式:保留历史栈与 currentOutputs,仅确保初始输入已记录
|
|
201
|
+
if (!this.initialInputsMap.has(workflow.id)) {
|
|
202
|
+
this.initialInputsMap.set(workflow.id, inputIds);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// 重置模式(默认):丢弃旧历史,重新初始化
|
|
207
|
+
const existingStack = this.historyStacks.get(workflow.id);
|
|
208
|
+
if (existingStack) {
|
|
209
|
+
existingStack.reset();
|
|
210
|
+
}
|
|
211
|
+
this.initialInputsMap.set(workflow.id, inputIds);
|
|
212
|
+
this.currentOutputsMap.set(workflow.id, inputIds);
|
|
213
|
+
}
|
|
214
|
+
this.enforceHistoryStacksLimit();
|
|
170
215
|
try {
|
|
171
216
|
const result = await this.executor.execute(workflow, inputs);
|
|
172
217
|
this._status = result.status === 'failed' ? 'error' : 'idle';
|
|
@@ -190,6 +235,33 @@ export class LokvisRuntimeImpl {
|
|
|
190
235
|
async resume(workflowId) {
|
|
191
236
|
return this.executor.resume(workflowId);
|
|
192
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* 销毁指定工作流的运行时状态(W2.8 内存治理)。
|
|
240
|
+
*
|
|
241
|
+
* 调用时机:
|
|
242
|
+
* - ui-react 卸载 Workspace 组件时
|
|
243
|
+
* - 用户主动关闭工作流标签页时
|
|
244
|
+
*
|
|
245
|
+
* 行为:
|
|
246
|
+
* - 调用 stack.reset() 触发 onEvict → assetStore.remove 回收历史 outputs 资产
|
|
247
|
+
* - 从 historyStacks / initialInputsMap / currentOutputsMap 三 Map 中删除 entry
|
|
248
|
+
* - 调用 executor.cancel 取消运行中的执行(若有)
|
|
249
|
+
*
|
|
250
|
+
* 修复 review 报告:原实现无清理入口,Workflow 组件卸载后 Map 中残留 entry,
|
|
251
|
+
* 长会话累积导致内存与 OPFS 空间双泄漏。
|
|
252
|
+
*/
|
|
253
|
+
async disposeWorkflow(workflowId) {
|
|
254
|
+
await this.cancel(workflowId).catch(() => {
|
|
255
|
+
/* 工作流可能未在运行 */
|
|
256
|
+
});
|
|
257
|
+
const stack = this.historyStacks.get(workflowId);
|
|
258
|
+
if (stack) {
|
|
259
|
+
stack.reset();
|
|
260
|
+
this.historyStacks.delete(workflowId);
|
|
261
|
+
}
|
|
262
|
+
this.initialInputsMap.delete(workflowId);
|
|
263
|
+
this.currentOutputsMap.delete(workflowId);
|
|
264
|
+
}
|
|
193
265
|
// ─── 历史与撤销 ──────────────────────────────────────
|
|
194
266
|
async history(workflowId) {
|
|
195
267
|
// 避免对从未运行过的工作流创建空栈:先查 Map,无则直接返回空数组
|
|
@@ -219,7 +291,26 @@ export class LokvisRuntimeImpl {
|
|
|
219
291
|
}
|
|
220
292
|
// ─── Asset 管理 ──────────────────────────────────────
|
|
221
293
|
async importAsset(source) {
|
|
222
|
-
|
|
294
|
+
// 修复 review 报告:原实现直接透传 source 给 assetStore.import,
|
|
295
|
+
// 但 MemoryAssetStore/OpfsAssetStore/IdbAssetStore 的 extractBlobFromSource
|
|
296
|
+
// 仅支持 file/blob 两种 kind,url/opfs 会抛 "not supported"。
|
|
297
|
+
// 这里在 runtime 层兜底处理 url(fetch → blob),opfs 暂不支持(OPFS
|
|
298
|
+
// 路径访问需要 filesystem access permission,未来单独实现)
|
|
299
|
+
let effectiveSource = source;
|
|
300
|
+
if (source.kind === 'url') {
|
|
301
|
+
const resp = await fetch(source.url);
|
|
302
|
+
if (!resp.ok) {
|
|
303
|
+
throw new Error(`Failed to fetch asset from ${source.url}: ${resp.status}`);
|
|
304
|
+
}
|
|
305
|
+
const blob = await resp.blob();
|
|
306
|
+
const name = source.url.split('/').pop()?.split('?')[0] ?? 'asset';
|
|
307
|
+
effectiveSource = { kind: 'blob', blob, name };
|
|
308
|
+
}
|
|
309
|
+
else if (source.kind === 'opfs') {
|
|
310
|
+
throw new Error("AssetSource kind 'opfs' is not yet supported by importAsset; " +
|
|
311
|
+
'use the OPFS-aware AssetStore directly or convert to blob first');
|
|
312
|
+
}
|
|
313
|
+
const asset = await this.assetStore.import(effectiveSource);
|
|
223
314
|
this.eventBus.emit({
|
|
224
315
|
type: 'asset:imported',
|
|
225
316
|
assetId: asset.id,
|
|
@@ -320,7 +411,35 @@ export class LokvisRuntimeImpl {
|
|
|
320
411
|
_getCurrentOutputs(workflowId) {
|
|
321
412
|
return this.currentOutputsMap.get(workflowId) ?? [];
|
|
322
413
|
}
|
|
414
|
+
/** 获取工作流当前输出 AssetId(公开 API,供 UI / MCP 查询) */
|
|
415
|
+
async getCurrentOutputs(workflowId) {
|
|
416
|
+
return this._getCurrentOutputs(workflowId);
|
|
417
|
+
}
|
|
323
418
|
// ─── 私有:历史栈管理 ──────────────────────────────
|
|
419
|
+
/**
|
|
420
|
+
* LRU 上限清理:historyStacks 超过 MAX_CONCURRENT_WORKFLOW_STACKS 时
|
|
421
|
+
* 按 FIFO 删除最旧 stack(reset 触发 onEvict → assetStore.remove 回收资产)。
|
|
422
|
+
*
|
|
423
|
+
* Map 的迭代顺序是插入顺序(ES2015+ 规范),所以第一个 entry 即最旧。
|
|
424
|
+
* 注意:当前 run() 的工作流尚未插入 Map(getOrCreateHistoryStack 才会插入),
|
|
425
|
+
* 所以这里清理不会误删当前工作流。
|
|
426
|
+
*/
|
|
427
|
+
enforceHistoryStacksLimit() {
|
|
428
|
+
while (this.historyStacks.size >= MAX_CONCURRENT_WORKFLOW_STACKS) {
|
|
429
|
+
// 取最旧 workflowId(Map 第一个 key)
|
|
430
|
+
const oldestId = this.historyStacks.keys().next().value;
|
|
431
|
+
if (oldestId === undefined)
|
|
432
|
+
break;
|
|
433
|
+
const stack = this.historyStacks.get(oldestId);
|
|
434
|
+
if (stack) {
|
|
435
|
+
// reset 触发 onEvict,回收历史 outputs 资产
|
|
436
|
+
stack.reset();
|
|
437
|
+
}
|
|
438
|
+
this.historyStacks.delete(oldestId);
|
|
439
|
+
this.initialInputsMap.delete(oldestId);
|
|
440
|
+
this.currentOutputsMap.delete(oldestId);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
324
443
|
/** 获取或创建工作流对应的 HistoryStack */
|
|
325
444
|
getOrCreateHistoryStack(workflowId) {
|
|
326
445
|
let stack = this.historyStacks.get(workflowId);
|
|
@@ -335,11 +454,12 @@ export class LokvisRuntimeImpl {
|
|
|
335
454
|
this.assetStore.remove(assetId).catch(() => { });
|
|
336
455
|
}
|
|
337
456
|
},
|
|
338
|
-
onChanged: (wfId, entries) => {
|
|
457
|
+
onChanged: (wfId, entries, currentIndex) => {
|
|
339
458
|
this.eventBus.emit({
|
|
340
459
|
type: 'history:changed',
|
|
341
460
|
workflowId: wfId,
|
|
342
461
|
entries,
|
|
462
|
+
currentIndex,
|
|
343
463
|
});
|
|
344
464
|
},
|
|
345
465
|
};
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAQlD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAA2B,MAAM,cAAc,CAAC;AAErE,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,eAAe;AACf,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAE1C,sBAAsB;AACtB,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,KAAK,CAAS;IACd,KAAK,CAAS;IACd,KAAK,CAAS;IACvB,YAAY,KAAa,EAAE,KAAa,EAAE,KAAa;QACrD,KAAK,CACH,iCAAiC,KAAK,YAAY,KAAK,YAAY,KAAK,EAAE,CAC3E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAAmB;IAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,KAAiB,EAAE,KAAa;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,gEAAgE;IAChE,IAAI,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,KAAK,UAAU,UAAU;QACvB,IAAI,WAAW;YAAE,OAAO;QACxB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/B,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,SAAS,WAAW,CAAC,KAAa;QAChC,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,SAAS,YAAY,CAAI,EAAoB;QAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,wCAAwC;QACxC,KAAK,GAAG,GAAG,CAAC,IAAI,CACd,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,MAAM;YACjB,OAAO,YAAY,CAAC,KAAK,IAAI,EAAE;gBAC7B,MAAM,UAAU,EAAE,CAAC;gBACnB,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM;YAClB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,EAAE;YACb,OAAO,YAAY,CAAC,KAAK,IAAI,EAAE;gBAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvB,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI;YAC/B,OAAO,YAAY,CAAC,KAAK,IAAI,EAAE;gBAC7B,MAAM,UAAU,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAkB;AAClB,MAAM,OAAO,iBAAiB;IACnB,OAAO,GAAG,eAAe,CAAC;IAC1B,QAAQ,CAAW;IAEpB,MAAM,CAA8C;IACpD,OAAO,GAAkB,MAAM,CAAC;IAChC,UAAU,CAAa;IACvB,kBAAkB,CAAqB;IACvC,QAAQ,CAAmB;IACnC;;;;OAIG;IACK,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACxD,yCAAyC;IACjC,gBAAgB,GAAG,IAAI,GAAG,EAAqB,CAAC;IACxD,8CAA8C;IACtC,iBAAiB,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEzD,YAAY,SAAwB,EAAE;QACpC,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;YACrC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;YAC/C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM;YAC/D,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,OAAO;SACjD,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,cAAc,EAAE,CAAC;QAEjC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,sBAAsB,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE9E,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE7E,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACnC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,CAAC,0BAA0B,CAAC,KAAwD,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,mDAAmD;IAEnD,KAAK,CAAC,GAAG,CACP,QAAkB,EAClB,MAA2B,EAC3B,OAAyC;QAEzC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAEzB,uDAAuD;QACvD,6CAA6C;QAC7C,oDAAoD;QACpD,2DAA2D;QAC3D,2CAA2C;QAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrB,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,MAAM,GAAmB;gBAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,QAAQ;gBAChB,KAAK;aACN,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,MAAM;aACP,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,SAAS;QACT,sDAAsD;QACtD,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAClE,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7D,kBAAkB;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvC,eAAe;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,mDAAmD;IAEnD,KAAK,CAAC,OAAO,CAAC,UAAkB;QAC9B,oCAAoC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,UAAU;QAE5C,UAAU;QACV,qCAAqC;QACrC,8BAA8B;QAC9B,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI;YAChC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACnB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnD,oDAAoD;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,UAAU;QAE3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtD,oDAAoD;IACtD,CAAC;IAED,sDAAsD;IAEtD,KAAK,CAAC,WAAW,CAAC,MAAmB;QACnC,mDAAmD;QACnD,0EAA0E;QAC1E,qDAAqD;QACrD,qDAAqD;QACrD,8CAA8C;QAC9C,IAAI,eAAe,GAAG,MAAM,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;YACnE,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjD,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,+DAA+D;gBAC7D,iEAAiE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAW;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAW,EAAE,MAAe;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;YACvC,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAW;QAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,oDAAoD;IAEpD,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,4CAA4C;IAE5C;;;;;;;;OAQG;IACH,aAAa,CAAC,UAAgC,EAAE;QAC9C,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QACtC,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAEpD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,mBAAmB;YACnB,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;gBAAE,SAAS;YAC5C,oCAAoC;YACpC,IAAI,GAAG,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,SAAS;gBAAE,SAAS;YAC7D,MAAM,QAAQ,GACZ,GAAG,CAAC,WAAW,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,WAAW,EAAE,4BAA4B,CAAC,GAAG,CAAC,MAAM,CAAC;gBACrD,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,eAAe;YACxB,KAAK;YACL,SAAS,EAAE;gBACT;oBACE,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE,cAAc;oBACpB,WAAW,EAAE,wCAAwC;oBACrD,QAAQ,EAAE,kBAAkB;iBAC7B;gBACD;oBACE,GAAG,EAAE,oBAAoB;oBACzB,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,sBAAsB;oBACnC,QAAQ,EAAE,kBAAkB;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;IAED,iDAAiD;IAEjD,yBAAyB;IACzB,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,iCAAiC;IACjC,sBAAsB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,gDAAgD;IAChD,kBAAkB,CAAC,UAAkB;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,8CAA8C;IAE9C;;;;;;;OAOG;IACK,yBAAyB;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,8BAA8B,EAAE,CAAC;YACjE,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACxD,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,mCAAmC;gBACnC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,+BAA+B;IACvB,uBAAuB,CAAC,UAAkB;QAChD,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,WAAW,GAAgC;gBAC/C,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,kCAAkC;oBAClC,8BAA8B;oBAC9B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBACpC,gBAAgB;wBAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBACD,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;oBACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,iBAAiB;wBACvB,UAAU,EAAE,IAAI;wBAChB,OAAO;wBACP,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YACF,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wDAAwD;IAChD,KAAK,CAAC,oBAAoB,CAChC,MAA2B;QAE3B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,MAAmB,CAAC;QAC7B,CAAC;QACD,OAAQ,MAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,yDAAyD;IACjD,0BAA0B,CAChC,KAAsD;QAEtD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEzD,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,sCAAsC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAElE,MAAM,KAAK,GAAiB;YAC1B,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM;YACN,OAAO;YACP,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,0BAA0B;QAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAsB;IAEtB,MAAM,UAAU,GACd,MAAM,EAAE,UAAU;QAClB,CAAC,MAAM,gBAAgB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,4BAA4B,CAAC,MAAyB;IAC7D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,mCAAmC,CAAC,CAAC,CAAC,CAAC;QACpD,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,6BAA6B,CACpC,IAAyB;IAEzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB;YACE,oCAAoC;YACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,mCAAmC,CAAC,CAAkB;IAC7D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzD,IAAI,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,CAAC,WAAW;QAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;IACpD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACtD,8DAA8D;IAC9D,sDAAsD;IACtD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;QACpD,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,mDAAmD;QACnD,IAAI,CAAC,KAAK,GAAG,6BAA6B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -42,6 +42,16 @@ export type RuntimeStatus = 'idle' | 'running' | 'paused' | 'error';
|
|
|
42
42
|
export interface ToMcpManifestOptions {
|
|
43
43
|
batchMode?: boolean;
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* `run()` 选项。
|
|
47
|
+
*
|
|
48
|
+
* - `appendHistory`:为 true 时,同一工作流 ID 的后续 run() 在已有历史栈上
|
|
49
|
+
* 追加条目(支持跨次 undo/redo 链,如 playground HistoryDemo 的连续滤镜)。
|
|
50
|
+
* 默认 false —— 每次 run() 重置历史栈,与"重新执行"语义一致。
|
|
51
|
+
*/
|
|
52
|
+
export interface RunOptions {
|
|
53
|
+
appendHistory?: boolean;
|
|
54
|
+
}
|
|
45
55
|
/** 核心 Runtime API(第一版,必须克制) */
|
|
46
56
|
export interface LokvisRuntime {
|
|
47
57
|
/** Runtime 版本 */
|
|
@@ -51,13 +61,29 @@ export interface LokvisRuntime {
|
|
|
51
61
|
/** 事件总线 */
|
|
52
62
|
readonly eventBus: EventBus;
|
|
53
63
|
/** 运行工作流 */
|
|
54
|
-
run(workflow: Workflow, inputs: AssetId[] | Asset[]): Promise<WorkflowResult>;
|
|
64
|
+
run(workflow: Workflow, inputs: AssetId[] | Asset[], options?: RunOptions): Promise<WorkflowResult>;
|
|
55
65
|
/** 取消运行 */
|
|
56
66
|
cancel(workflowId: string): Promise<void>;
|
|
57
67
|
/** 暂停运行 */
|
|
58
68
|
pause(workflowId: string): Promise<void>;
|
|
59
69
|
/** 恢复运行 */
|
|
60
70
|
resume(workflowId: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* 获取工作流当前输出 AssetId(undo/redo 后的"当前"状态)。
|
|
73
|
+
*
|
|
74
|
+
* 用途:
|
|
75
|
+
* - UI 实时展示工作流中间结果
|
|
76
|
+
* - MCP server 查询当前工作流产物
|
|
77
|
+
* - 暂停时检查中间输出
|
|
78
|
+
*/
|
|
79
|
+
getCurrentOutputs(workflowId: string): Promise<AssetId[]>;
|
|
80
|
+
/**
|
|
81
|
+
* 销毁工作流的运行时状态(取消运行 + 清空历史栈 + 回收历史 outputs 资产)。
|
|
82
|
+
*
|
|
83
|
+
* 修复 review 报告:原接口无清理入口,长会话累积导致 historyStacks Map
|
|
84
|
+
* 与 AssetStore 中孤儿资产泄漏。ui-react 应在 Workspace 卸载时调用。
|
|
85
|
+
*/
|
|
86
|
+
disposeWorkflow(workflowId: string): Promise<void>;
|
|
61
87
|
/** 获取工作流的执行历史 */
|
|
62
88
|
history(workflowId: string): Promise<HistoryEntry[]>;
|
|
63
89
|
/** 撤销一步 */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,iBAAiB;AACjB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,WAAW;IACX,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,WAAW;IACX,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAG5B,YAAY;IACZ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,iBAAiB;AACjB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,WAAW;IACX,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,WAAW;IACX,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAG5B,YAAY;IACZ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACpG,WAAW;IACX,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,WAAW;IACX,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW;IACX,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnD,iBAAiB;IACjB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACrD,WAAW;IACX,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,WAAW;IACX,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxC,WAAW;IACX,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,WAAW;IACX,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,iBAAiB;IACjB,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,WAAW;IACX,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,aAAa;IACb,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAG/B,gBAAgB;IAChB,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACtC,eAAe;IACf,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG9C;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,WAAW,CAAC;CAC5D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lokvis/runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-beta.0",
|
|
4
4
|
"description": "Lokvis Runtime - Browser-local workflow execution engine",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"dexie": "^4.0.10",
|
|
27
27
|
"mitt": "^3.0.1",
|
|
28
|
-
"@lokvis/schema": "0.
|
|
28
|
+
"@lokvis/schema": "0.2.0-beta.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"fake-indexeddb": "^6.0.0",
|
|
@@ -67,6 +67,20 @@ export class CapabilityRegistry {
|
|
|
67
67
|
return this.registry.has(name);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/** 检查能力是否有非 stub 实现 */
|
|
71
|
+
hasImplementation(name: CapabilityName): boolean {
|
|
72
|
+
const entry = this.registry.get(name);
|
|
73
|
+
if (!entry) return false;
|
|
74
|
+
return entry.implementations.some((i) => i.status !== 'stub');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** 检查能力是否仅有 stub 实现 */
|
|
78
|
+
isStubOnly(name: CapabilityName): boolean {
|
|
79
|
+
const entry = this.registry.get(name);
|
|
80
|
+
if (!entry || entry.implementations.length === 0) return false;
|
|
81
|
+
return entry.implementations.every((i) => i.status === 'stub');
|
|
82
|
+
}
|
|
83
|
+
|
|
70
84
|
/** 获取能力声明 */
|
|
71
85
|
get(name: CapabilityName): Capability | undefined {
|
|
72
86
|
return this.registry.get(name)?.capability;
|
|
@@ -81,12 +95,15 @@ export class CapabilityRegistry {
|
|
|
81
95
|
const entry = this.registry.get(name);
|
|
82
96
|
if (!entry || entry.implementations.length === 0) return undefined;
|
|
83
97
|
|
|
98
|
+
const available = entry.implementations.filter((i) => i.status !== 'stub');
|
|
99
|
+
if (available.length === 0) return undefined;
|
|
100
|
+
|
|
84
101
|
if (preferredEngine) {
|
|
85
|
-
const impl =
|
|
102
|
+
const impl = available.find((i) => i.engine === preferredEngine);
|
|
86
103
|
if (impl) return impl;
|
|
87
104
|
}
|
|
88
105
|
|
|
89
|
-
return this.selectByStrategy(
|
|
106
|
+
return this.selectByStrategy(available, entry.capability);
|
|
90
107
|
}
|
|
91
108
|
|
|
92
109
|
/** 按默认策略从实现列表中选择一个 */
|
package/src/event-bus.ts
CHANGED
|
@@ -28,8 +28,12 @@ export function createEventBus(): EventBus {
|
|
|
28
28
|
|
|
29
29
|
emit(event) {
|
|
30
30
|
emitter.emit(event.type, event);
|
|
31
|
-
for (const handler of anyHandlers) {
|
|
32
|
-
|
|
31
|
+
for (const handler of [...anyHandlers]) {
|
|
32
|
+
try {
|
|
33
|
+
handler(event);
|
|
34
|
+
} catch (err) {
|
|
35
|
+
console.error(`[event-bus] onAny handler threw for "${event.type}":`, err);
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
39
|
|
package/src/executor.ts
CHANGED
|
@@ -58,18 +58,58 @@ function createExecutionContext(
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
/** 拓扑排序:将 edges
|
|
61
|
+
/** 拓扑排序:将 edges 转换为线性节点序列。
|
|
62
|
+
*
|
|
63
|
+
* 修复 review 报告:原实现 edge.from 不在 nodeMap 时静默丢弃,
|
|
64
|
+
* 但 edge.to 的入度仍被 +1,导致目标节点入度永远无法归零,
|
|
65
|
+
* 被误判为「环」(demo 用 `__input__` 哨兵边触发此 bug)。
|
|
66
|
+
* 现在显式校验所有 edge 引用必须对应真实节点,否则快速失败。
|
|
67
|
+
*/
|
|
62
68
|
function topologicalSort(nodes: WorkflowNode[], edges: WorkflowEdge[]): WorkflowNode[] {
|
|
63
69
|
const nodeMap = new Map(nodes.map((n) => [n.id, n]));
|
|
64
70
|
const inDegree = new Map<string, number>();
|
|
65
71
|
const adjacency = new Map<string, string[]>();
|
|
66
72
|
|
|
73
|
+
// 校验节点 ID 唯一性
|
|
74
|
+
if (nodeMap.size !== nodes.length) {
|
|
75
|
+
const seen = new Set<string>();
|
|
76
|
+
for (const n of nodes) {
|
|
77
|
+
if (seen.has(n.id)) {
|
|
78
|
+
throw new Error(`Workflow contains duplicate node id: ${n.id}`);
|
|
79
|
+
}
|
|
80
|
+
seen.add(n.id);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
for (const node of nodes) {
|
|
68
85
|
inDegree.set(node.id, 0);
|
|
69
86
|
adjacency.set(node.id, []);
|
|
70
87
|
}
|
|
71
88
|
|
|
89
|
+
// 校验 edge 引用必须存在于 nodes 中(防止 `__input__` 等哨兵节点
|
|
90
|
+
// 被静默吞掉,进而导致下游节点入度无法归零 → 误判为环)
|
|
72
91
|
for (const edge of edges) {
|
|
92
|
+
if (!nodeMap.has(edge.from)) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`Workflow edge references unknown source node: "${edge.from}". ` +
|
|
95
|
+
`Edge endpoints must reference existing nodes; ` +
|
|
96
|
+
`reserved sentinel nodes (e.g. "__input__") are not supported ` +
|
|
97
|
+
`by the executor — input assets are injected into the first node ` +
|
|
98
|
+
`with in-degree 0.`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
if (!nodeMap.has(edge.to)) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Workflow edge references unknown target node: "${edge.to}". ` +
|
|
104
|
+
`Edge endpoints must reference existing nodes.`
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
if (edge.from === edge.to) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`Workflow contains self-loop on node: "${edge.from}". ` +
|
|
110
|
+
`Self-loops create cycles and are not allowed.`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
73
113
|
inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);
|
|
74
114
|
adjacency.get(edge.from)?.push(edge.to);
|
|
75
115
|
}
|
|
@@ -186,6 +226,11 @@ export class WorkflowExecutor {
|
|
|
186
226
|
}
|
|
187
227
|
const impl = this.config.capabilityRegistry.resolve(capability);
|
|
188
228
|
if (!impl) {
|
|
229
|
+
if (this.config.capabilityRegistry.isStubOnly(capability)) {
|
|
230
|
+
throw new Error(
|
|
231
|
+
`Capability "${capability}" is not yet available (only stub engine registered). Install a real engine plugin to use this capability.`
|
|
232
|
+
);
|
|
233
|
+
}
|
|
189
234
|
throw new Error(`No implementation registered for capability "${capability}"`);
|
|
190
235
|
}
|
|
191
236
|
|
package/src/history.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface HistoryStackConfig {
|
|
|
20
20
|
/** 淘汰条目时的回调,用于清理 OPFS 资产 */
|
|
21
21
|
onEvict?: (entry: HistoryEntry) => void;
|
|
22
22
|
/** 历史变更时的回调,用于转发为 eventBus 事件 */
|
|
23
|
-
onChanged?: (workflowId: string, entries: HistoryEntry[]) => void;
|
|
23
|
+
onChanged?: (workflowId: string, entries: HistoryEntry[], currentIndex: number) => void;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/** HistoryStack 状态(供序列化/恢复使用) */
|
|
@@ -216,7 +216,7 @@ export class HistoryStack {
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
private notifyChanged(): void {
|
|
219
|
-
this.config.onChanged?.(this.workflowId, this.list());
|
|
219
|
+
this.config.onChanged?.(this.workflowId, this.list(), this.cursor);
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
package/src/runtime.ts
CHANGED
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
McpToolManifest,
|
|
18
18
|
} from '@lokvis/schema';
|
|
19
19
|
import type { Workflow, WorkflowResult } from '@lokvis/schema';
|
|
20
|
+
import { validateWorkflow } from '@lokvis/schema';
|
|
20
21
|
import type {
|
|
21
22
|
LokvisRuntime,
|
|
22
23
|
RuntimeConfig,
|
|
@@ -40,6 +41,18 @@ export const RUNTIME_VERSION = '0.1.0';
|
|
|
40
41
|
/** 默认历史记录上限 */
|
|
41
42
|
const DEFAULT_MAX_HISTORY = 10;
|
|
42
43
|
|
|
44
|
+
/**
|
|
45
|
+
* 同时持有的工作流历史栈上限(W2.8 内存治理)。
|
|
46
|
+
*
|
|
47
|
+
* 修复 review 报告:原实现 historyStacks 是无限增长 Map,每次 run() 都加入新
|
|
48
|
+
* workflow.id(ui-react buildLinearWorkflow 用 `wf_${Date.now()}` 每次唯一),
|
|
49
|
+
* 长会话累积导致 Map 引用的 AssetId 无法回收 → 内存泄漏。
|
|
50
|
+
*
|
|
51
|
+
* 32 是经验值:覆盖用户常见使用(多 tab 切换 + undo 范围),超限按 FIFO
|
|
52
|
+
* 清理最旧 stack(reset 触发 onEvict → assetStore.remove 回收资产)。
|
|
53
|
+
*/
|
|
54
|
+
const MAX_CONCURRENT_WORKFLOW_STACKS = 32;
|
|
55
|
+
|
|
43
56
|
/** 存储配额超限时抛出(W2.9) */
|
|
44
57
|
export class QuotaExceededError extends Error {
|
|
45
58
|
readonly usage: number;
|
|
@@ -203,23 +216,56 @@ export class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
203
216
|
|
|
204
217
|
async run(
|
|
205
218
|
workflow: Workflow,
|
|
206
|
-
inputs: AssetId[] | Asset[]
|
|
219
|
+
inputs: AssetId[] | Asset[],
|
|
220
|
+
options?: import('./types.js').RunOptions
|
|
207
221
|
): Promise<WorkflowResult> {
|
|
208
222
|
this._status = 'running';
|
|
209
223
|
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
//
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
// Schema 层校验:在 executor.execute 之前调用 validateWorkflow,
|
|
225
|
+
// 让结构问题(保留字哨兵 __input__、悬挂 edge、自环、重复 id、真环)
|
|
226
|
+
// 在入口处暴露,错误信息精准(如 "Edge from __input__ references a
|
|
227
|
+
// reserved sentinel id"),而不是被 executor 拓扑排序误判为含糊的 "cycle"。
|
|
228
|
+
// 三层防御的第 3 层(前两层:executor 防御性校验 + 单元测试覆盖)。
|
|
229
|
+
const validation = validateWorkflow(workflow);
|
|
230
|
+
if (!validation.success) {
|
|
231
|
+
this._status = 'error';
|
|
232
|
+
const error = validation.error.issues
|
|
233
|
+
.map((i) => i.message)
|
|
234
|
+
.join('; ');
|
|
235
|
+
const result: WorkflowResult = {
|
|
236
|
+
workflowId: workflow.id,
|
|
237
|
+
outputs: [],
|
|
238
|
+
duration: 0,
|
|
239
|
+
status: 'failed',
|
|
240
|
+
error,
|
|
241
|
+
};
|
|
242
|
+
this.eventBus.emit({
|
|
243
|
+
type: 'workflow:completed',
|
|
244
|
+
workflowId: workflow.id,
|
|
245
|
+
result,
|
|
246
|
+
});
|
|
247
|
+
return result;
|
|
216
248
|
}
|
|
217
249
|
|
|
218
|
-
//
|
|
250
|
+
// 历史栈管理:
|
|
251
|
+
// - 默认:每次 run() 重置历史(重跑语义),并通过 onEvict 回收旧 outputs 资产
|
|
252
|
+
// - appendHistory:true:保留已有历史栈,支持跨次 undo/redo 链(如连续滤镜)
|
|
219
253
|
const inputIds = await this.collectInputAssetIds(inputs);
|
|
220
|
-
this.
|
|
221
|
-
|
|
222
|
-
|
|
254
|
+
if (options?.appendHistory && this.historyStacks.has(workflow.id)) {
|
|
255
|
+
// 追加模式:保留历史栈与 currentOutputs,仅确保初始输入已记录
|
|
256
|
+
if (!this.initialInputsMap.has(workflow.id)) {
|
|
257
|
+
this.initialInputsMap.set(workflow.id, inputIds);
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
// 重置模式(默认):丢弃旧历史,重新初始化
|
|
261
|
+
const existingStack = this.historyStacks.get(workflow.id);
|
|
262
|
+
if (existingStack) {
|
|
263
|
+
existingStack.reset();
|
|
264
|
+
}
|
|
265
|
+
this.initialInputsMap.set(workflow.id, inputIds);
|
|
266
|
+
this.currentOutputsMap.set(workflow.id, inputIds);
|
|
267
|
+
}
|
|
268
|
+
this.enforceHistoryStacksLimit();
|
|
223
269
|
|
|
224
270
|
try {
|
|
225
271
|
const result = await this.executor.execute(workflow, inputs);
|
|
@@ -247,6 +293,34 @@ export class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
247
293
|
return this.executor.resume(workflowId);
|
|
248
294
|
}
|
|
249
295
|
|
|
296
|
+
/**
|
|
297
|
+
* 销毁指定工作流的运行时状态(W2.8 内存治理)。
|
|
298
|
+
*
|
|
299
|
+
* 调用时机:
|
|
300
|
+
* - ui-react 卸载 Workspace 组件时
|
|
301
|
+
* - 用户主动关闭工作流标签页时
|
|
302
|
+
*
|
|
303
|
+
* 行为:
|
|
304
|
+
* - 调用 stack.reset() 触发 onEvict → assetStore.remove 回收历史 outputs 资产
|
|
305
|
+
* - 从 historyStacks / initialInputsMap / currentOutputsMap 三 Map 中删除 entry
|
|
306
|
+
* - 调用 executor.cancel 取消运行中的执行(若有)
|
|
307
|
+
*
|
|
308
|
+
* 修复 review 报告:原实现无清理入口,Workflow 组件卸载后 Map 中残留 entry,
|
|
309
|
+
* 长会话累积导致内存与 OPFS 空间双泄漏。
|
|
310
|
+
*/
|
|
311
|
+
async disposeWorkflow(workflowId: string): Promise<void> {
|
|
312
|
+
await this.cancel(workflowId).catch(() => {
|
|
313
|
+
/* 工作流可能未在运行 */
|
|
314
|
+
});
|
|
315
|
+
const stack = this.historyStacks.get(workflowId);
|
|
316
|
+
if (stack) {
|
|
317
|
+
stack.reset();
|
|
318
|
+
this.historyStacks.delete(workflowId);
|
|
319
|
+
}
|
|
320
|
+
this.initialInputsMap.delete(workflowId);
|
|
321
|
+
this.currentOutputsMap.delete(workflowId);
|
|
322
|
+
}
|
|
323
|
+
|
|
250
324
|
// ─── 历史与撤销 ──────────────────────────────────────
|
|
251
325
|
|
|
252
326
|
async history(workflowId: string): Promise<HistoryEntry[]> {
|
|
@@ -281,7 +355,28 @@ export class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
281
355
|
// ─── Asset 管理 ──────────────────────────────────────
|
|
282
356
|
|
|
283
357
|
async importAsset(source: AssetSource): Promise<AssetId> {
|
|
284
|
-
|
|
358
|
+
// 修复 review 报告:原实现直接透传 source 给 assetStore.import,
|
|
359
|
+
// 但 MemoryAssetStore/OpfsAssetStore/IdbAssetStore 的 extractBlobFromSource
|
|
360
|
+
// 仅支持 file/blob 两种 kind,url/opfs 会抛 "not supported"。
|
|
361
|
+
// 这里在 runtime 层兜底处理 url(fetch → blob),opfs 暂不支持(OPFS
|
|
362
|
+
// 路径访问需要 filesystem access permission,未来单独实现)
|
|
363
|
+
let effectiveSource = source;
|
|
364
|
+
if (source.kind === 'url') {
|
|
365
|
+
const resp = await fetch(source.url);
|
|
366
|
+
if (!resp.ok) {
|
|
367
|
+
throw new Error(`Failed to fetch asset from ${source.url}: ${resp.status}`);
|
|
368
|
+
}
|
|
369
|
+
const blob = await resp.blob();
|
|
370
|
+
const name = source.url.split('/').pop()?.split('?')[0] ?? 'asset';
|
|
371
|
+
effectiveSource = { kind: 'blob', blob, name };
|
|
372
|
+
} else if (source.kind === 'opfs') {
|
|
373
|
+
throw new Error(
|
|
374
|
+
"AssetSource kind 'opfs' is not yet supported by importAsset; " +
|
|
375
|
+
'use the OPFS-aware AssetStore directly or convert to blob first'
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const asset = await this.assetStore.import(effectiveSource);
|
|
285
380
|
this.eventBus.emit({
|
|
286
381
|
type: 'asset:imported',
|
|
287
382
|
assetId: asset.id,
|
|
@@ -396,8 +491,37 @@ export class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
396
491
|
return this.currentOutputsMap.get(workflowId) ?? [];
|
|
397
492
|
}
|
|
398
493
|
|
|
494
|
+
/** 获取工作流当前输出 AssetId(公开 API,供 UI / MCP 查询) */
|
|
495
|
+
async getCurrentOutputs(workflowId: string): Promise<AssetId[]> {
|
|
496
|
+
return this._getCurrentOutputs(workflowId);
|
|
497
|
+
}
|
|
498
|
+
|
|
399
499
|
// ─── 私有:历史栈管理 ──────────────────────────────
|
|
400
500
|
|
|
501
|
+
/**
|
|
502
|
+
* LRU 上限清理:historyStacks 超过 MAX_CONCURRENT_WORKFLOW_STACKS 时
|
|
503
|
+
* 按 FIFO 删除最旧 stack(reset 触发 onEvict → assetStore.remove 回收资产)。
|
|
504
|
+
*
|
|
505
|
+
* Map 的迭代顺序是插入顺序(ES2015+ 规范),所以第一个 entry 即最旧。
|
|
506
|
+
* 注意:当前 run() 的工作流尚未插入 Map(getOrCreateHistoryStack 才会插入),
|
|
507
|
+
* 所以这里清理不会误删当前工作流。
|
|
508
|
+
*/
|
|
509
|
+
private enforceHistoryStacksLimit(): void {
|
|
510
|
+
while (this.historyStacks.size >= MAX_CONCURRENT_WORKFLOW_STACKS) {
|
|
511
|
+
// 取最旧 workflowId(Map 第一个 key)
|
|
512
|
+
const oldestId = this.historyStacks.keys().next().value;
|
|
513
|
+
if (oldestId === undefined) break;
|
|
514
|
+
const stack = this.historyStacks.get(oldestId);
|
|
515
|
+
if (stack) {
|
|
516
|
+
// reset 触发 onEvict,回收历史 outputs 资产
|
|
517
|
+
stack.reset();
|
|
518
|
+
}
|
|
519
|
+
this.historyStacks.delete(oldestId);
|
|
520
|
+
this.initialInputsMap.delete(oldestId);
|
|
521
|
+
this.currentOutputsMap.delete(oldestId);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
401
525
|
/** 获取或创建工作流对应的 HistoryStack */
|
|
402
526
|
private getOrCreateHistoryStack(workflowId: string): HistoryStack {
|
|
403
527
|
let stack = this.historyStacks.get(workflowId);
|
|
@@ -412,11 +536,12 @@ export class LokvisRuntimeImpl implements LokvisRuntime {
|
|
|
412
536
|
this.assetStore.remove(assetId).catch(() => {});
|
|
413
537
|
}
|
|
414
538
|
},
|
|
415
|
-
onChanged: (wfId, entries) => {
|
|
539
|
+
onChanged: (wfId, entries, currentIndex) => {
|
|
416
540
|
this.eventBus.emit({
|
|
417
541
|
type: 'history:changed',
|
|
418
542
|
workflowId: wfId,
|
|
419
543
|
entries,
|
|
544
|
+
currentIndex,
|
|
420
545
|
});
|
|
421
546
|
},
|
|
422
547
|
};
|
package/src/types.ts
CHANGED
|
@@ -55,6 +55,17 @@ export interface ToMcpManifestOptions {
|
|
|
55
55
|
batchMode?: boolean;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
/**
|
|
59
|
+
* `run()` 选项。
|
|
60
|
+
*
|
|
61
|
+
* - `appendHistory`:为 true 时,同一工作流 ID 的后续 run() 在已有历史栈上
|
|
62
|
+
* 追加条目(支持跨次 undo/redo 链,如 playground HistoryDemo 的连续滤镜)。
|
|
63
|
+
* 默认 false —— 每次 run() 重置历史栈,与"重新执行"语义一致。
|
|
64
|
+
*/
|
|
65
|
+
export interface RunOptions {
|
|
66
|
+
appendHistory?: boolean;
|
|
67
|
+
}
|
|
68
|
+
|
|
58
69
|
/** 核心 Runtime API(第一版,必须克制) */
|
|
59
70
|
export interface LokvisRuntime {
|
|
60
71
|
/** Runtime 版本 */
|
|
@@ -66,13 +77,29 @@ export interface LokvisRuntime {
|
|
|
66
77
|
|
|
67
78
|
// ─── 工作流执行 ──────────────────────────────────────
|
|
68
79
|
/** 运行工作流 */
|
|
69
|
-
run(workflow: Workflow, inputs: AssetId[] | Asset[]): Promise<WorkflowResult>;
|
|
80
|
+
run(workflow: Workflow, inputs: AssetId[] | Asset[], options?: RunOptions): Promise<WorkflowResult>;
|
|
70
81
|
/** 取消运行 */
|
|
71
82
|
cancel(workflowId: string): Promise<void>;
|
|
72
83
|
/** 暂停运行 */
|
|
73
84
|
pause(workflowId: string): Promise<void>;
|
|
74
85
|
/** 恢复运行 */
|
|
75
86
|
resume(workflowId: string): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* 获取工作流当前输出 AssetId(undo/redo 后的"当前"状态)。
|
|
89
|
+
*
|
|
90
|
+
* 用途:
|
|
91
|
+
* - UI 实时展示工作流中间结果
|
|
92
|
+
* - MCP server 查询当前工作流产物
|
|
93
|
+
* - 暂停时检查中间输出
|
|
94
|
+
*/
|
|
95
|
+
getCurrentOutputs(workflowId: string): Promise<AssetId[]>;
|
|
96
|
+
/**
|
|
97
|
+
* 销毁工作流的运行时状态(取消运行 + 清空历史栈 + 回收历史 outputs 资产)。
|
|
98
|
+
*
|
|
99
|
+
* 修复 review 报告:原接口无清理入口,长会话累积导致 historyStacks Map
|
|
100
|
+
* 与 AssetStore 中孤儿资产泄漏。ui-react 应在 Workspace 卸载时调用。
|
|
101
|
+
*/
|
|
102
|
+
disposeWorkflow(workflowId: string): Promise<void>;
|
|
76
103
|
|
|
77
104
|
// ─── 历史与撤销 ──────────────────────────────────────
|
|
78
105
|
/** 获取工作流的执行历史 */
|