@lokvis/runtime 0.2.2 → 0.4.2
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/asset-store.d.ts +13 -0
- package/dist/asset-store.d.ts.map +1 -1
- package/dist/asset-store.js +15 -2
- package/dist/asset-store.js.map +1 -1
- package/dist/batch-processor.d.ts +32 -161
- package/dist/batch-processor.d.ts.map +1 -1
- package/dist/batch-processor.js +107 -333
- package/dist/batch-processor.js.map +1 -1
- package/dist/batch-progress.d.ts +94 -0
- package/dist/batch-progress.d.ts.map +1 -0
- package/dist/batch-progress.js +128 -0
- package/dist/batch-progress.js.map +1 -0
- package/dist/batch-scheduler.d.ts +70 -0
- package/dist/batch-scheduler.d.ts.map +1 -0
- package/dist/batch-scheduler.js +147 -0
- package/dist/batch-scheduler.js.map +1 -0
- package/dist/browser-detect.d.ts +115 -0
- package/dist/browser-detect.d.ts.map +1 -0
- package/dist/browser-detect.js +160 -0
- package/dist/browser-detect.js.map +1 -0
- package/dist/concurrency-controller.d.ts +31 -0
- package/dist/concurrency-controller.d.ts.map +1 -0
- package/dist/concurrency-controller.js +33 -0
- package/dist/concurrency-controller.js.map +1 -0
- package/dist/errors.d.ts +51 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +74 -0
- package/dist/errors.js.map +1 -0
- package/dist/executor.d.ts +9 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +102 -48
- package/dist/executor.js.map +1 -1
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +3 -2
- package/dist/history.js.map +1 -1
- package/dist/idb-asset-store.d.ts.map +1 -1
- package/dist/idb-asset-store.js +6 -1
- package/dist/idb-asset-store.js.map +1 -1
- package/dist/index.d.ts +17 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -15
- package/dist/index.js.map +1 -1
- package/dist/managers/asset-manager.d.ts +114 -0
- package/dist/managers/asset-manager.d.ts.map +1 -0
- package/dist/managers/asset-manager.js +238 -0
- package/dist/managers/asset-manager.js.map +1 -0
- package/dist/managers/history-manager.d.ts +100 -0
- package/dist/managers/history-manager.d.ts.map +1 -0
- package/dist/managers/history-manager.js +296 -0
- package/dist/managers/history-manager.js.map +1 -0
- package/dist/managers/mcp-manifest-builder.d.ts +18 -0
- package/dist/managers/mcp-manifest-builder.d.ts.map +1 -0
- package/dist/managers/mcp-manifest-builder.js +99 -0
- package/dist/managers/mcp-manifest-builder.js.map +1 -0
- package/dist/managers/quota-manager.d.ts +42 -0
- package/dist/managers/quota-manager.d.ts.map +1 -0
- package/dist/managers/quota-manager.js +126 -0
- package/dist/managers/quota-manager.js.map +1 -0
- package/dist/managers/workflow-coordinator.d.ts +62 -0
- package/dist/managers/workflow-coordinator.d.ts.map +1 -0
- package/dist/managers/workflow-coordinator.js +125 -0
- package/dist/managers/workflow-coordinator.js.map +1 -0
- package/dist/opfs-asset-store.d.ts.map +1 -1
- package/dist/opfs-asset-store.js +12 -2
- package/dist/opfs-asset-store.js.map +1 -1
- package/dist/plugin-context.d.ts +35 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugin-context.js +62 -0
- package/dist/plugin-context.js.map +1 -0
- package/dist/plugin-permissions.d.ts +99 -0
- package/dist/plugin-permissions.d.ts.map +1 -0
- package/dist/plugin-permissions.js +205 -0
- package/dist/plugin-permissions.js.map +1 -0
- package/dist/runtime-impl.d.ts +116 -0
- package/dist/runtime-impl.d.ts.map +1 -0
- package/dist/runtime-impl.js +270 -0
- package/dist/runtime-impl.js.map +1 -0
- package/dist/runtime.d.ts +10 -233
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +12 -978
- package/dist/runtime.js.map +1 -1
- package/dist/test-utils/fakes.d.ts +35 -0
- package/dist/test-utils/fakes.d.ts.map +1 -0
- package/dist/test-utils/fakes.js +60 -0
- package/dist/test-utils/fakes.js.map +1 -0
- package/dist/types.d.ts +113 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/worker-host.d.ts.map +1 -1
- package/dist/worker-host.js +32 -9
- package/dist/worker-host.js.map +1 -1
- package/dist/worker-protocol.d.ts +30 -0
- package/dist/worker-protocol.d.ts.map +1 -1
- package/dist/worker-protocol.js +24 -0
- package/dist/worker-protocol.js.map +1 -1
- package/package.json +2 -2
- package/src/asset-store.ts +32 -2
- package/src/batch-processor.ts +133 -510
- package/src/batch-progress.ts +228 -0
- package/src/batch-scheduler.ts +209 -0
- package/src/browser-detect.ts +221 -0
- package/src/concurrency-controller.ts +52 -0
- package/src/errors.ts +82 -0
- package/src/executor.ts +122 -55
- package/src/history.ts +3 -2
- package/src/idb-asset-store.ts +7 -1
- package/src/index.ts +50 -15
- package/src/managers/asset-manager.ts +259 -0
- package/src/managers/history-manager.ts +327 -0
- package/src/managers/mcp-manifest-builder.ts +108 -0
- package/src/managers/quota-manager.ts +149 -0
- package/src/managers/workflow-coordinator.ts +158 -0
- package/src/opfs-asset-store.ts +16 -2
- package/src/plugin-context.ts +87 -0
- package/src/plugin-permissions.ts +228 -0
- package/src/runtime-impl.ts +298 -0
- package/src/runtime.ts +16 -1116
- package/src/test-utils/fakes.ts +72 -0
- package/src/types.ts +116 -0
- package/src/worker-host.ts +35 -7
- package/src/worker-protocol.ts +47 -0
- package/dist/workflow-builder.d.ts +0 -124
- package/dist/workflow-builder.d.ts.map +0 -1
- package/dist/workflow-builder.js +0 -240
- package/dist/workflow-builder.js.map +0 -1
- package/src/workflow-builder.ts +0 -303
package/dist/asset-store.d.ts
CHANGED
|
@@ -22,6 +22,19 @@ export interface AssetStore {
|
|
|
22
22
|
list(): Promise<Asset[]>;
|
|
23
23
|
/** 创建新 Asset(内部用,由 Capability 产出) */
|
|
24
24
|
create(blob: Blob, metadata: AssetMetadata, type: Asset['type']): Promise<Asset>;
|
|
25
|
+
/**
|
|
26
|
+
* 释放底层资源(W21.6)。
|
|
27
|
+
*
|
|
28
|
+
* - Memory store:清空 Map(数据不可恢复)
|
|
29
|
+
* - OPFS store:清空内存 Map + 关闭 Dexie 连接(OPFS 文件不删除,
|
|
30
|
+
* 下次创建 store 时从 IndexedDB metadata 预加载恢复)
|
|
31
|
+
* - IDB store:关闭 Dexie 连接(IDB 数据不删除)
|
|
32
|
+
*
|
|
33
|
+
* 幂等:重复调用为 no-op。
|
|
34
|
+
* 注:关闭后的 store 调用 import/get/getBlob 等方法行为未定义,
|
|
35
|
+
* 调用方应仅在不再使用该 store 时调用 dispose。
|
|
36
|
+
*/
|
|
37
|
+
dispose?(): Promise<void>;
|
|
25
38
|
}
|
|
26
39
|
/** 生成唯一 ID */
|
|
27
40
|
export declare function generateId(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-store.d.ts","sourceRoot":"","sources":["../src/asset-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"asset-store.d.ts","sourceRoot":"","sources":["../src/asset-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK7F,iBAAiB;AACjB,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,cAAc;IACd,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC7C,oBAAoB;IACpB,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,WAAW;IACX,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa;IACb,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACzB,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACjF;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,cAAc;AACd,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,2BAA2B;AAC3B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAS9D;AAED,uBAAuB;AACvB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG;IAC1D,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAUA;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACrB;AAqGD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBhF;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMnE;AAED,kCAAkC;AAClC,wBAAgB,UAAU,CACxB,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EACnB,UAAU,EAAE,MAAM,GACjB,KAAK,CAgBP;AAKD,kCAAkC;AAClC,wBAAgB,sBAAsB,IAAI,UAAU,CA+CnD;AAED,iBAAiB;AACjB,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,UAAU,CAAC,CAwBrB"}
|
package/dist/asset-store.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { createOpfsAssetStore, isOpfsSupported } from './opfs-asset-store.js';
|
|
11
11
|
import { createIdbAssetStore, isIdbSupported } from './idb-asset-store.js';
|
|
12
|
+
import { AssetBlobNotFoundError } from './errors.js';
|
|
12
13
|
/** 生成唯一 ID */
|
|
13
14
|
export function generateId() {
|
|
14
15
|
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
@@ -58,6 +59,11 @@ export function extractBlobFromSource(source) {
|
|
|
58
59
|
*
|
|
59
60
|
* 所有提取均 try/catch:失败时返回空对象,不阻断 import。
|
|
60
61
|
* Node.js / 测试环境可能无 createImageBitmap / document,自然降级为空。
|
|
62
|
+
*
|
|
63
|
+
* TD-3.9 长期方案:catch 不再静默吞错,console.warn 记录异常(区分"无元数据"
|
|
64
|
+
* 与"提取异常")。asset-store 位于 Runtime 层,无 ctx.log 上下文(不像
|
|
65
|
+
* plugin/capability 走 ExecutionContext / MetadataReaderContext),与
|
|
66
|
+
* opfs-asset-store.ts 的错误日志策略一致(见 L155/L170/L183/L205/L258)。
|
|
61
67
|
*/
|
|
62
68
|
async function extractRichMetadata(blob, type) {
|
|
63
69
|
try {
|
|
@@ -71,7 +77,9 @@ async function extractRichMetadata(blob, type) {
|
|
|
71
77
|
return {};
|
|
72
78
|
}
|
|
73
79
|
}
|
|
74
|
-
catch {
|
|
80
|
+
catch (err) {
|
|
81
|
+
// TD-3.9:区分"无元数据"(default 分支返回 {},无日志)与"提取异常"(此处 warn)
|
|
82
|
+
console.warn(`[lokvis:asset-store] extractRichMetadata failed for ${type} blob (${blob.size} bytes):`, err);
|
|
75
83
|
return {};
|
|
76
84
|
}
|
|
77
85
|
}
|
|
@@ -201,7 +209,7 @@ export function createMemoryAssetStore() {
|
|
|
201
209
|
const id = parseBlobPath(handle.path, MEMORY_PATH_PREFIX);
|
|
202
210
|
const blob = blobs.get(id);
|
|
203
211
|
if (!blob)
|
|
204
|
-
throw new
|
|
212
|
+
throw new AssetBlobNotFoundError(`Blob not found for path: ${handle.path}`);
|
|
205
213
|
return blob;
|
|
206
214
|
},
|
|
207
215
|
async remove(id) {
|
|
@@ -218,6 +226,11 @@ export function createMemoryAssetStore() {
|
|
|
218
226
|
assets.set(id, asset);
|
|
219
227
|
return asset;
|
|
220
228
|
},
|
|
229
|
+
// W21.6: 清空内存 Map,释放 Blob 引用(数据不可恢复)
|
|
230
|
+
async dispose() {
|
|
231
|
+
assets.clear();
|
|
232
|
+
blobs.clear();
|
|
233
|
+
},
|
|
221
234
|
};
|
|
222
235
|
}
|
|
223
236
|
/**
|
package/dist/asset-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-store.js","sourceRoot":"","sources":["../src/asset-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"asset-store.js","sourceRoot":"","sources":["../src/asset-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,108 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* BatchProcessor - 批量作业处理器(
|
|
2
|
+
* BatchProcessor - 批量作业处理器 Facade(W4.4 拆分后)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 核心能力:
|
|
8
|
-
* - 并发控制:基于槽位池,默认 4(Pro=16),按 MemoryGuard 压力动态收缩
|
|
9
|
-
* - 失败重试:maxRetries(默认 0,与 W5 行为兼容);达到上限才发 batch:item:failed
|
|
10
|
-
* - 批量上限:免费 10 文件(W6.2)、Pro 无限(超额抛 BatchLimitExceededError)
|
|
11
|
-
* - 进度事件:batch:started / batch:item:* / batch:progress / batch:completed / batch:cancelled
|
|
12
|
-
* - 取消:批量级 cancel,逐个取消 in-flight 项,已 pending 的标记 cancelled
|
|
13
|
-
* - 暂停/恢复:挂起 schedule 循环(不取消 in-flight,完成后不再补满)
|
|
14
|
-
*
|
|
15
|
-
* 设计取舍:
|
|
16
|
-
* - 不持久化作业状态(刷新即丢):W6 主要保证 Asset 持久化,批量队列是临时调度
|
|
17
|
-
* 结构,刷新后由 UI 重新发起即可。持久化批量进度属 Phase 2。
|
|
18
|
-
* - 不持有 output Blob:每项执行完即返回 AssetId,Blob 由 AssetStore(OPFS/IDB)托管,
|
|
19
|
-
* 避免 50+ 图批量把 output Blob 全部留在内存导致 OOM。
|
|
20
|
-
* - 单 Job 串行 schedule:同一 BatchProcessor 实例可并发 enqueue 多个 Job,但内部
|
|
21
|
-
* schedule 逻辑用 per-job lock 防重入(参考 W5 BatchQueue 的 scheduleLock 修复)。
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```ts
|
|
25
|
-
* const job = runtime.batch.enqueue({
|
|
26
|
-
* items: files.map((f) => ({ source: { kind: 'file', file: f }, workflow: wf })),
|
|
27
|
-
* maxRetries: 1,
|
|
28
|
-
* });
|
|
29
|
-
* runtime.batch.onProgress(job.id, (p) => console.log(p.completed, '/', p.total));
|
|
30
|
-
* await runtime.batch.waitForCompletion(job.id);
|
|
31
|
-
* ```
|
|
4
|
+
* 持有 jobs Map + 协作对象(BatchScheduler / BatchProgressEmitter / ConcurrencyController),
|
|
5
|
+
* 对外保持原公开 API 不变。调度/重试/进度/并发 委托给协作对象;
|
|
6
|
+
* Facade 保留 jobs Map 管理、批量上限校验、状态机控制、toJobView。
|
|
32
7
|
*/
|
|
33
|
-
import type { AssetId, AssetSource, BatchItemStatus, BatchJobStatus, Workflow } from '@lokvis/schema';
|
|
34
8
|
import type { EventBus } from '@lokvis/schema';
|
|
35
9
|
import type { LokvisRuntime } from './types.js';
|
|
36
10
|
import { MemoryGuard } from './memory-guard.js';
|
|
37
|
-
|
|
38
|
-
export interface BatchItemInput {
|
|
39
|
-
/**
|
|
40
|
-
* 资产来源:通常为 { kind: 'file', file }(用户拖入),也可为 blob/url。
|
|
41
|
-
* BatchProcessor 在执行前调 runtime.importAsset(source) 导入为 AssetId。
|
|
42
|
-
*/
|
|
43
|
-
source: AssetSource;
|
|
44
|
-
/** 该项要执行的工作流(每个文件独立 workflow 实例,便于独立 cancel) */
|
|
45
|
-
workflow: Workflow;
|
|
46
|
-
/** 该项最大重试次数(覆盖 job 级 maxRetries) */
|
|
47
|
-
maxRetries?: number;
|
|
48
|
-
}
|
|
49
|
-
/** 批量项运行时状态(对外只读视图) */
|
|
50
|
-
export interface BatchItem {
|
|
51
|
-
/** 项 ID(自动生成,用于事件追踪与 UI 定位) */
|
|
52
|
-
id: string;
|
|
53
|
-
/** 在 job 中的序号(0-based,用于事件中的 index 字段) */
|
|
54
|
-
index: number;
|
|
55
|
-
status: BatchItemStatus;
|
|
56
|
-
/** 输入 source(便于失败时 UI 展示文件名) */
|
|
57
|
-
source: AssetSource;
|
|
58
|
-
/** 该项执行的工作流 */
|
|
59
|
-
workflow: Workflow;
|
|
60
|
-
/** 输出 AssetId(completed 时填) */
|
|
61
|
-
outputAssetId?: AssetId;
|
|
62
|
-
/** 失败原因(failed 时填) */
|
|
63
|
-
error?: Error;
|
|
64
|
-
/** 已重试次数 */
|
|
65
|
-
attempts: number;
|
|
66
|
-
/** 该项最大重试次数 */
|
|
67
|
-
maxRetries: number;
|
|
68
|
-
/** 单项执行耗时(ms,completed 时填) */
|
|
69
|
-
duration?: number;
|
|
70
|
-
}
|
|
71
|
-
/** 批量作业运行时状态(对外只读视图) */
|
|
72
|
-
export interface BatchJob {
|
|
73
|
-
id: string;
|
|
74
|
-
status: BatchJobStatus;
|
|
75
|
-
items: BatchItem[];
|
|
76
|
-
/** 已完成数(completed) */
|
|
77
|
-
completed: number;
|
|
78
|
-
/** 失败数(failed) */
|
|
79
|
-
failed: number;
|
|
80
|
-
/** 总项数 */
|
|
81
|
-
total: number;
|
|
82
|
-
/** job 起始时间(ms) */
|
|
83
|
-
startedAt: number;
|
|
84
|
-
/** job 结束时间(ms,完成后填) */
|
|
85
|
-
endedAt?: number;
|
|
86
|
-
}
|
|
87
|
-
/** enqueue 选项 */
|
|
88
|
-
export interface EnqueueOptions {
|
|
89
|
-
/** 作业项 */
|
|
90
|
-
items: BatchItemInput[];
|
|
91
|
-
/** job 级最大重试次数(默认 0,单项可 BatchItemInput.maxRetries 覆盖) */
|
|
92
|
-
maxRetries?: number;
|
|
93
|
-
/**
|
|
94
|
-
* 并发槽位上限(默认按 isPro:free=4,pro=16)。
|
|
95
|
-
* 实际并发会按 MemoryGuard 压力动态收缩。
|
|
96
|
-
*/
|
|
97
|
-
concurrency?: number;
|
|
98
|
-
}
|
|
99
|
-
/** 进度回调载荷 */
|
|
100
|
-
export interface BatchProgress {
|
|
101
|
-
jobId: string;
|
|
102
|
-
completed: number;
|
|
103
|
-
failed: number;
|
|
104
|
-
total: number;
|
|
105
|
-
}
|
|
11
|
+
import { type BatchJob, type EnqueueOptions, type BatchProgress } from './batch-progress.js';
|
|
106
12
|
/** 批量上限超限错误(W6.2) */
|
|
107
13
|
export declare class BatchLimitExceededError extends Error {
|
|
108
14
|
readonly limit: number;
|
|
@@ -111,90 +17,55 @@ export declare class BatchLimitExceededError extends Error {
|
|
|
111
17
|
}
|
|
112
18
|
/** 免费版批量上限(W6.2) */
|
|
113
19
|
export declare const FREE_BATCH_LIMIT = 10;
|
|
114
|
-
/**
|
|
115
|
-
export declare const
|
|
116
|
-
export
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
*
|
|
120
|
-
* 不直接依赖 LokvisRuntimeImpl(避免循环引用),通过构造注入 LokvisRuntime 接口。
|
|
121
|
-
* 内部用纯 JS Map 管理作业,无 React state(可被 SDK / MCP / Node 复用)。
|
|
122
|
-
*/
|
|
20
|
+
/** 终态 job 保留上限(超出按 FIFO 淘汰最旧) */
|
|
21
|
+
export declare const MAX_RETAINED_JOBS = 10;
|
|
22
|
+
export { FREE_CONCURRENCY, PRO_CONCURRENCY } from './concurrency-controller.js';
|
|
23
|
+
export type { BatchProgress, BatchItemInput, BatchItem, BatchJob, EnqueueOptions, } from './batch-progress.js';
|
|
24
|
+
/** BatchProcessor Facade(不依赖 LokvisRuntimeImpl,通过构造注入接口) */
|
|
123
25
|
export declare class BatchProcessor {
|
|
124
26
|
private readonly runtime;
|
|
125
|
-
private readonly eventBus;
|
|
126
27
|
private readonly isPro;
|
|
127
|
-
private readonly
|
|
128
|
-
/** jobId → BatchJob 内部可变状态(含 private 字段) */
|
|
28
|
+
private readonly eventBus;
|
|
129
29
|
private readonly jobs;
|
|
130
|
-
|
|
131
|
-
private readonly
|
|
30
|
+
private readonly scheduler;
|
|
31
|
+
private readonly progress;
|
|
132
32
|
constructor(opts: {
|
|
133
33
|
runtime: LokvisRuntime;
|
|
134
34
|
eventBus: EventBus;
|
|
135
35
|
isPro: boolean;
|
|
136
36
|
memoryGuard?: MemoryGuard;
|
|
137
37
|
});
|
|
138
|
-
/**
|
|
139
|
-
* 入队批量作业。返回 job 视图(只读)。
|
|
140
|
-
* 超过免费上限时同步抛 BatchLimitExceededError,不创建 job。
|
|
141
|
-
* 空 items 抛错(避免静默产出 0 项 completed job,遮蔽调用方逻辑错误)。
|
|
142
|
-
*/
|
|
143
38
|
enqueue(options: EnqueueOptions): BatchJob;
|
|
144
|
-
/** 列出所有作业(只读视图) */
|
|
145
39
|
list(): BatchJob[];
|
|
146
|
-
/** 获取指定 job */
|
|
147
40
|
get(jobId: string): BatchJob | undefined;
|
|
148
|
-
/** 取消整个 job:逐个取消 in-flight 项,pending 项标记 cancelled */
|
|
149
41
|
cancel(jobId: string): Promise<void>;
|
|
150
|
-
/** 暂停 job:schedule 不再补满,已 in-flight 项跑完即止 */
|
|
151
|
-
pause(jobId: string): Promise<void>;
|
|
152
|
-
/** 恢复 job:解除 pause,schedule 继续补满 */
|
|
153
|
-
resume(jobId: string): Promise<void>;
|
|
154
42
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
43
|
+
* 取消所有非终态 job + 清理 progress 订阅(W21.6 runtime.dispose 用)。
|
|
44
|
+
*
|
|
45
|
+
* 与单 job cancel 不同:不等待 runtime.cancel(wfId) 完成 —— runtime
|
|
46
|
+
* 自身的 dispose 会通过 executor.cancelAll 统一取消所有 workflow,
|
|
47
|
+
* 这里只做 batch 层面的状态标记 + 订阅清理,避免双 await 死锁。
|
|
157
48
|
*/
|
|
49
|
+
dispose(): Promise<void>;
|
|
50
|
+
pause(jobId: string): Promise<void>;
|
|
51
|
+
resume(jobId: string): Promise<void>;
|
|
158
52
|
retryFailed(jobId: string): Promise<void>;
|
|
159
|
-
/** 订阅 job 进度(返回取消订阅函数) */
|
|
160
53
|
onProgress(jobId: string, handler: (p: BatchProgress) => void): () => void;
|
|
161
54
|
/**
|
|
162
|
-
* 等待 job
|
|
55
|
+
* 等待 job 中至少 count 项进入 processing 状态(TD-2.2 长期方案)。
|
|
163
56
|
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* - batch:completed 事件已涵盖 failed(maybeComplete 对 failed>0 的 job
|
|
167
|
-
* 同样发 batch:completed),故只需监听 completed + cancelled
|
|
168
|
-
* - resolve 后立即解绑所有订阅,避免调用方丢弃 promise 时泄漏
|
|
169
|
-
* - cancel/maybeComplete 进入终态时也会 cleanupJobSubs 兜底
|
|
170
|
-
*/
|
|
171
|
-
waitForCompletion(jobId: string, timeoutMs?: number): Promise<BatchJob>;
|
|
172
|
-
/** 清理 job 的所有进度订阅(终态时调用,避免泄漏) */
|
|
173
|
-
private cleanupJobSubs;
|
|
174
|
-
/** 启动 job:发 batch:started,进入 running,触发首次 schedule */
|
|
175
|
-
private runJob;
|
|
176
|
-
/**
|
|
177
|
-
* 调度循环:把 pending 项填入空闲槽位,直到无可用槽位或无 pending 项。
|
|
57
|
+
* 替代测试中固定 setTimeout 赌注:基于"当前状态快照 + batch:item:started
|
|
58
|
+
* 事件订阅"双重判定,确定性等待而非时间赌注。
|
|
178
59
|
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
60
|
+
* - 先快照当前 processing 数,若已 >= count 立即 resolve(schedule 循环内
|
|
61
|
+
* 同步设置 item.status='processing' + 发 batch:item:started,enqueue
|
|
62
|
+
* 返回时首批项通常已进入 processing)
|
|
63
|
+
* - 否则订阅 batch:item:started,累计到 count 时 resolve(兜底异步场景)
|
|
64
|
+
* - 超时(默认 5s)reject,避免坏 job 永久挂起
|
|
182
65
|
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
private
|
|
186
|
-
/** 当前并发槽位(按内存压力动态收缩) */
|
|
187
|
-
private currentConcurrency;
|
|
188
|
-
/** 发出 progress 事件 + 通知订阅者 */
|
|
189
|
-
private emitProgress;
|
|
190
|
-
/** 检查 job 是否全部完成,如是则发 batch:completed */
|
|
191
|
-
private maybeComplete;
|
|
192
|
-
private isTerminal;
|
|
193
|
-
/** 派生每项的 workflow id(独立于其他项,便于 cancel) */
|
|
194
|
-
private itemWorkflowId;
|
|
195
|
-
/** 安全 emit(无 EventBus 时降级为 no-op,便于纯单元测试) */
|
|
196
|
-
private emit;
|
|
197
|
-
/** 内部可变状态 → 对外只读视图(浅拷贝 items 数组与每项) */
|
|
66
|
+
waitForItemsStarted(jobId: string, count: number, timeoutMs?: number): Promise<void>;
|
|
67
|
+
waitForCompletion(jobId: string, timeoutMs?: number): Promise<BatchJob>;
|
|
68
|
+
private pruneJobs;
|
|
198
69
|
private toJobView;
|
|
199
70
|
}
|
|
200
71
|
//# sourceMappingURL=batch-processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../src/batch-processor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../src/batch-processor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAmB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,qBAAqB;AACrB,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAS7C;AAED,oBAAoB;AACpB,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,iCAAiC;AACjC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAChF,YAAY,EACV,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,GACf,MAAM,qBAAqB,CAAC;AAgB7B,4DAA4D;AAC5D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,IAAI,EAAE;QAChB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B;IAaD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,QAAQ;IAoC1C,IAAI,IAAI,QAAQ,EAAE;IAIlB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAKlC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC1C;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAI1E;;;;;;;;;;;OAWG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAkCV,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAWpF,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;CAYlB"}
|