@actiondock/core 2.5.1 → 2.6.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/app/app.d.ts +14 -1
- package/dist/app/app.js +88 -222
- package/dist/app/static-index.d.ts +39 -0
- package/dist/app/static-index.js +164 -0
- package/dist/app/types.d.ts +5 -0
- package/dist/catalog/action-index.js +6 -4
- package/dist/catalog/package-catalog.js +2 -1
- package/dist/doctor/checks/index.d.ts +5 -0
- package/dist/doctor/checks/index.js +5 -0
- package/dist/doctor/checks/project-locate.d.ts +6 -0
- package/dist/doctor/checks/project-locate.js +36 -0
- package/dist/doctor/checks/project.d.ts +6 -0
- package/dist/doctor/checks/project.js +383 -0
- package/dist/doctor/checks/registry.d.ts +13 -0
- package/dist/doctor/checks/registry.js +207 -0
- package/dist/doctor/checks/runtime.d.ts +13 -0
- package/dist/doctor/checks/runtime.js +90 -0
- package/dist/doctor/checks/storage.d.ts +5 -0
- package/dist/doctor/checks/storage.js +34 -0
- package/dist/doctor/context.d.ts +35 -0
- package/dist/doctor/context.js +11 -0
- package/dist/doctor/doctor.d.ts +5 -0
- package/dist/doctor/doctor.js +33 -602
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +2 -0
- package/dist/execution/service.js +14 -9
- package/dist/host/host.d.ts +33 -0
- package/dist/host/host.js +222 -362
- package/dist/host/routing.d.ts +92 -0
- package/dist/host/routing.js +238 -0
- package/dist/host/types.d.ts +8 -0
- package/dist/ipc/host.js +38 -0
- package/dist/platform/types.d.ts +7 -0
- package/dist/process/control-arbiter.d.ts +107 -0
- package/dist/process/control-arbiter.js +251 -0
- package/dist/process/diagnostics-sink.d.ts +26 -0
- package/dist/process/diagnostics-sink.js +35 -0
- package/dist/process/index.d.ts +7 -0
- package/dist/process/index.js +7 -0
- package/dist/process/input-dispatcher.d.ts +88 -0
- package/dist/process/input-dispatcher.js +240 -0
- package/dist/process/managed-record.d.ts +78 -0
- package/dist/process/managed-record.js +1 -0
- package/dist/process/process-manager.d.ts +15 -56
- package/dist/process/process-manager.js +119 -707
- package/dist/process/reservation-table.d.ts +39 -0
- package/dist/process/reservation-table.js +80 -0
- package/dist/process/run-executor.d.ts +16 -0
- package/dist/process/run-executor.js +155 -0
- package/dist/process/terminal-output-cache.d.ts +66 -0
- package/dist/process/terminal-output-cache.js +132 -0
- package/dist/profile/client-actions.d.ts +56 -0
- package/dist/profile/client-actions.js +215 -0
- package/dist/profile/client-config.d.ts +20 -0
- package/dist/profile/client-config.js +51 -0
- package/dist/profile/client-health.d.ts +14 -0
- package/dist/profile/client-health.js +68 -0
- package/dist/profile/client-playbooks.d.ts +19 -0
- package/dist/profile/client-playbooks.js +36 -0
- package/dist/profile/client-query.d.ts +30 -0
- package/dist/profile/client-query.js +70 -0
- package/dist/profile/client-runs.d.ts +42 -0
- package/dist/profile/client-runs.js +58 -0
- package/dist/profile/client-state.d.ts +56 -0
- package/dist/profile/client-state.js +83 -0
- package/dist/profile/client-transport.d.ts +61 -0
- package/dist/profile/client-transport.js +155 -0
- package/dist/profile/client.d.ts +23 -142
- package/dist/profile/client.js +28 -588
- package/dist/profile/manager.js +1 -1
- package/dist/project/closure.d.ts +4 -4
- package/dist/project/closure.js +11 -5
- package/dist/project/init.js +2 -2
- package/dist/project/loader.d.ts +0 -25
- package/dist/project/loader.js +1 -154
- package/dist/project/transactions.d.ts +12 -14
- package/dist/project/transactions.js +60 -836
- package/dist/registry/registry.js +6 -4
- package/dist/registry/resolve.js +1 -1
- package/dist/runtime/action-registry.d.ts +45 -0
- package/dist/runtime/action-registry.js +108 -0
- package/dist/runtime/clock.d.ts +5 -17
- package/dist/runtime/clock.js +5 -15
- package/dist/runtime/context.d.ts +3 -0
- package/dist/runtime/context.js +17 -56
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/package-runner-factory.d.ts +82 -0
- package/dist/runtime/package-runner-factory.js +186 -0
- package/dist/runtime/run-persistence.d.ts +85 -0
- package/dist/runtime/run-persistence.js +111 -0
- package/dist/runtime/runner.d.ts +23 -33
- package/dist/runtime/runner.js +92 -286
- package/dist/runtime/standalone.d.ts +11 -1
- package/dist/runtime/standalone.js +137 -25
- package/dist/server/dispatcher.d.ts +8 -3
- package/dist/server/dispatcher.js +16 -40
- package/dist/server/routes/runs.js +6 -4
- package/dist/server/security.d.ts +1 -7
- package/dist/server/security.js +2 -13
- package/dist/storage/clock.d.ts +25 -0
- package/dist/storage/clock.js +23 -0
- package/dist/storage/data-dir-lock.d.ts +3 -36
- package/dist/storage/data-dir-lock.js +48 -881
- package/dist/storage/index.d.ts +8 -1
- package/dist/storage/index.js +8 -2
- package/dist/storage/lazy.js +1 -0
- package/dist/storage/lock-core.d.ts +162 -0
- package/dist/storage/lock-core.js +885 -0
- package/dist/storage/sqlite.d.ts +19 -6
- package/dist/storage/sqlite.js +81 -89
- package/dist/storage/types.d.ts +27 -5
- package/dist/storage/types.js +21 -0
- package/dist/storage/utils.d.ts +22 -0
- package/dist/storage/utils.js +34 -0
- package/dist/target/local.d.ts +1 -0
- package/dist/target/local.js +23 -17
- package/dist/target/remote-errors.d.ts +21 -0
- package/dist/target/remote-errors.js +51 -0
- package/dist/target/remote-polling.d.ts +35 -0
- package/dist/target/remote-polling.js +104 -0
- package/dist/target/remote.d.ts +4 -0
- package/dist/target/remote.js +108 -301
- package/dist/target/sse-parser.d.ts +35 -0
- package/dist/target/sse-parser.js +163 -0
- package/dist/target/target.js +2 -0
- package/dist/target/types.d.ts +6 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/net.d.ts +10 -0
- package/dist/utils/net.js +16 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { RuntimeError, RunRecord } from "@actiondock/sdk";
|
|
2
|
+
import type { RuntimeStorage, TerminalRunStatus } from "../storage/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* 运行记录落库参数(RunRecord 构造与写入的领域入参)。
|
|
5
|
+
*
|
|
6
|
+
* 由 Runner 编排层在执行启动时装配,落库模块仅依赖该纯数据契约,不感知执行编排
|
|
7
|
+
* 与上下文构建细节。
|
|
8
|
+
*/
|
|
9
|
+
export interface InitialRunRecordInput {
|
|
10
|
+
/** 本次执行生成的全局唯一运行 ID */
|
|
11
|
+
runId: string;
|
|
12
|
+
/** 根运行 ID */
|
|
13
|
+
rootRunId: string;
|
|
14
|
+
/** 父级运行 ID(嵌套调用场景下建立调用链树) */
|
|
15
|
+
parentRunId?: string;
|
|
16
|
+
/** 执行归属所有者标识 */
|
|
17
|
+
ownerId?: string;
|
|
18
|
+
/** 执行宿主会话标识 */
|
|
19
|
+
hostSessionId?: string;
|
|
20
|
+
/** 包物理实例标识 */
|
|
21
|
+
packageInstanceId?: string;
|
|
22
|
+
/** 快照代次标识 */
|
|
23
|
+
generationId?: string;
|
|
24
|
+
/** 目标 Package 标识 */
|
|
25
|
+
targetPackageId: string;
|
|
26
|
+
/** 目标 Action 标识 */
|
|
27
|
+
targetActionId: string;
|
|
28
|
+
/** 执行开始时间戳 */
|
|
29
|
+
startedAt: string;
|
|
30
|
+
/** 原始输入数据 */
|
|
31
|
+
input: unknown;
|
|
32
|
+
/** 宿主 Runner 的 Package 标识 */
|
|
33
|
+
runnerPackageId: string;
|
|
34
|
+
/** 宿主 Runner 的包物理实例标识 */
|
|
35
|
+
runnerPackageInstanceId: string;
|
|
36
|
+
/** 宿主 Runner 的快照代次标识 */
|
|
37
|
+
runnerGenerationId: string;
|
|
38
|
+
/** Runner 构造注入的执行宿主会话标识 */
|
|
39
|
+
runnerHostSessionId?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 运行终态收敛器(收敛原 finalized、persistError、isTimeout、timeoutTimer 闭包状态)。
|
|
43
|
+
*/
|
|
44
|
+
export interface RunFinalizer {
|
|
45
|
+
/** 是否已写入终态 */
|
|
46
|
+
finalized: boolean;
|
|
47
|
+
/** 是否命中超时 */
|
|
48
|
+
isTimeout: boolean;
|
|
49
|
+
/** 落库异常错误信息 */
|
|
50
|
+
persistError: RuntimeError | undefined;
|
|
51
|
+
/** 超时定时器句柄 */
|
|
52
|
+
timeoutTimer: ReturnType<typeof setTimeout> | undefined;
|
|
53
|
+
/** 超时守卫绑定的取消控制器 */
|
|
54
|
+
controller: AbortController | undefined;
|
|
55
|
+
/** 外部中止信号对象 */
|
|
56
|
+
signal?: AbortSignal;
|
|
57
|
+
/** 外部中止信号监听句柄 */
|
|
58
|
+
onAbort?: () => void;
|
|
59
|
+
/** 竞态监听句柄注销函数列表(finalize 时统一清理,覆盖成功路径) */
|
|
60
|
+
raceListenerRemovers: Array<() => void>;
|
|
61
|
+
/** 绑定取消控制器并启动超时定时器 */
|
|
62
|
+
startTimeout(controller: AbortController, timeoutMs: number): void;
|
|
63
|
+
/** 写入终态(幂等,自动清理超时定时器与全部监听句柄) */
|
|
64
|
+
finalize(status: TerminalRunStatus, output?: unknown, error?: RuntimeError): void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 构建运行初始记录(RunRecord 组装单一事实源)。
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildInitialRunRecord(params: InitialRunRecordInput, status: "running" | "failed", error?: RuntimeError): RunRecord;
|
|
70
|
+
/**
|
|
71
|
+
* 尝试将初始记录写入存储(存储异常静默忽略,用于非法输入等弱依赖场景)。
|
|
72
|
+
*/
|
|
73
|
+
export declare function tryCreateRun(storage: RuntimeStorage, record: RunRecord): void;
|
|
74
|
+
/**
|
|
75
|
+
* 强制将初始记录写入存储(存储不可用时抛出 RUN_REPOSITORY_UNAVAILABLE)。
|
|
76
|
+
*/
|
|
77
|
+
export declare function createRunOrThrow(storage: RuntimeStorage, record: RunRecord): void;
|
|
78
|
+
/**
|
|
79
|
+
* 更新运行终态并捕获落库异常(异常转译为 RUN_PERSISTENCE_FAILED 错误对象返回)。
|
|
80
|
+
*/
|
|
81
|
+
export declare function updateRunStatus(storage: RuntimeStorage, runId: string, status: TerminalRunStatus, output?: unknown, error?: RuntimeError): RuntimeError | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* 创建运行终态收敛器:封装终态去重、超时定时器清理与落库异常捕获。
|
|
84
|
+
*/
|
|
85
|
+
export declare function createRunFinalizer(storage: RuntimeStorage, runId: string): RunFinalizer;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { RUN_PERSISTENCE_FAILED, RUN_REPOSITORY_UNAVAILABLE } from "../errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* 构建运行初始记录(RunRecord 组装单一事实源)。
|
|
4
|
+
*/
|
|
5
|
+
export function buildInitialRunRecord(params, status, error) {
|
|
6
|
+
const { runId, rootRunId, parentRunId, ownerId, hostSessionId, packageInstanceId, generationId, targetPackageId, targetActionId, startedAt, input, runnerPackageId, runnerPackageInstanceId, runnerGenerationId, runnerHostSessionId, } = params;
|
|
7
|
+
const record = {
|
|
8
|
+
id: runId,
|
|
9
|
+
rootRunId,
|
|
10
|
+
parentRunId,
|
|
11
|
+
packageId: targetPackageId,
|
|
12
|
+
packageInstanceId: packageInstanceId || (runnerPackageId === targetPackageId ? runnerPackageInstanceId : targetPackageId),
|
|
13
|
+
actionId: targetActionId,
|
|
14
|
+
generationId: generationId || (runnerPackageId === targetPackageId ? runnerGenerationId : "1"),
|
|
15
|
+
ownerId: ownerId || "local",
|
|
16
|
+
hostSessionId: hostSessionId || runnerHostSessionId,
|
|
17
|
+
status,
|
|
18
|
+
error,
|
|
19
|
+
startedAt,
|
|
20
|
+
};
|
|
21
|
+
if (status === "running") {
|
|
22
|
+
record.input = input;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
record.finishedAt = startedAt;
|
|
26
|
+
}
|
|
27
|
+
return record;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 尝试将初始记录写入存储(存储异常静默忽略,用于非法输入等弱依赖场景)。
|
|
31
|
+
*/
|
|
32
|
+
export function tryCreateRun(storage, record) {
|
|
33
|
+
try {
|
|
34
|
+
storage.createRun(record);
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 强制将初始记录写入存储(存储不可用时抛出 RUN_REPOSITORY_UNAVAILABLE)。
|
|
40
|
+
*/
|
|
41
|
+
export function createRunOrThrow(storage, record) {
|
|
42
|
+
try {
|
|
43
|
+
storage.createRun(record);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const error = new Error(`RUN_REPOSITORY_UNAVAILABLE: Failed to initialize run record in repository: ${err?.message || String(err)}`);
|
|
47
|
+
error.code = RUN_REPOSITORY_UNAVAILABLE;
|
|
48
|
+
error.details = { originalError: err?.message };
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 更新运行终态并捕获落库异常(异常转译为 RUN_PERSISTENCE_FAILED 错误对象返回)。
|
|
54
|
+
*/
|
|
55
|
+
export function updateRunStatus(storage, runId, status, output, error) {
|
|
56
|
+
try {
|
|
57
|
+
storage.updateRun(runId, status, output, error);
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
catch (persistErr) {
|
|
61
|
+
return {
|
|
62
|
+
code: RUN_PERSISTENCE_FAILED,
|
|
63
|
+
message: `RUN_PERSISTENCE_FAILED: Failed to persist run state: ${persistErr?.message || String(persistErr)}`,
|
|
64
|
+
details: { originalError: persistErr?.message },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 创建运行终态收敛器:封装终态去重、超时定时器清理与落库异常捕获。
|
|
70
|
+
*/
|
|
71
|
+
export function createRunFinalizer(storage, runId) {
|
|
72
|
+
const finalizer = {
|
|
73
|
+
finalized: false,
|
|
74
|
+
isTimeout: false,
|
|
75
|
+
persistError: undefined,
|
|
76
|
+
timeoutTimer: undefined,
|
|
77
|
+
controller: undefined,
|
|
78
|
+
signal: undefined,
|
|
79
|
+
onAbort: undefined,
|
|
80
|
+
raceListenerRemovers: [],
|
|
81
|
+
startTimeout: (controller, timeoutMs) => {
|
|
82
|
+
finalizer.controller = controller;
|
|
83
|
+
finalizer.timeoutTimer = setTimeout(() => {
|
|
84
|
+
finalizer.isTimeout = true;
|
|
85
|
+
finalizer.controller?.abort(new Error(`Action exceeded timeout of ${timeoutMs}ms`));
|
|
86
|
+
}, timeoutMs);
|
|
87
|
+
},
|
|
88
|
+
finalize: (status, output, error) => {
|
|
89
|
+
if (finalizer.timeoutTimer) {
|
|
90
|
+
clearTimeout(finalizer.timeoutTimer);
|
|
91
|
+
finalizer.timeoutTimer = undefined;
|
|
92
|
+
}
|
|
93
|
+
if (finalizer.signal && finalizer.onAbort) {
|
|
94
|
+
finalizer.signal.removeEventListener("abort", finalizer.onAbort);
|
|
95
|
+
finalizer.onAbort = undefined;
|
|
96
|
+
}
|
|
97
|
+
// 成功路径同样注销竞态监听句柄,避免信号对象残留引用
|
|
98
|
+
for (const remove of finalizer.raceListenerRemovers.splice(0)) {
|
|
99
|
+
try {
|
|
100
|
+
remove();
|
|
101
|
+
}
|
|
102
|
+
catch { }
|
|
103
|
+
}
|
|
104
|
+
if (finalizer.finalized)
|
|
105
|
+
return;
|
|
106
|
+
finalizer.finalized = true;
|
|
107
|
+
finalizer.persistError = updateRunStatus(storage, runId, status, output, error);
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
return finalizer;
|
|
111
|
+
}
|
package/dist/runtime/runner.d.ts
CHANGED
|
@@ -153,12 +153,15 @@ export type ActionResolution = {
|
|
|
153
153
|
/**
|
|
154
154
|
* ActionDock 核心执行引擎(ActionRunner)。
|
|
155
155
|
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* -
|
|
159
|
-
* -
|
|
160
|
-
* -
|
|
161
|
-
*
|
|
156
|
+
* 本类为执行编排壳:负责 Action 执行的全生命周期编排(校验、深度与环路检测、
|
|
157
|
+
* 超时与取消竞态、子调用 uses 授权与错误分类),并将单一职责域委托至独立模块:
|
|
158
|
+
* - Action 注册与检索委托 `ActionRegistry`(action-registry.ts)
|
|
159
|
+
* - RunRecord 构造与落库委托 run-persistence.ts
|
|
160
|
+
* - 跨包 Runner 构建与缓存委托 `PackageRunnerFactory`(package-runner-factory.ts)
|
|
161
|
+
*
|
|
162
|
+
* 入参 (inputSchema) 与出参 (outputSchema) 的 JSON Schema 严格校验、嵌套 Action
|
|
163
|
+
* 相互调用的环路检测(Cycle Detection)、超时 (Timeout) 与中断信号 (AbortSignal)
|
|
164
|
+
* 竞态控制与运行记录持久化编排仍由本类承担。
|
|
162
165
|
*/
|
|
163
166
|
export declare class ActionRunner {
|
|
164
167
|
readonly packageId: string;
|
|
@@ -169,22 +172,21 @@ export declare class ActionRunner {
|
|
|
169
172
|
private projectRoot?;
|
|
170
173
|
private projectConfig?;
|
|
171
174
|
private configOverrides;
|
|
172
|
-
private
|
|
175
|
+
private registry;
|
|
173
176
|
private clock?;
|
|
174
177
|
private process?;
|
|
175
178
|
private platform?;
|
|
176
179
|
private maxCallDepth;
|
|
177
180
|
private maxSubRuns;
|
|
178
181
|
private activeSubRuns;
|
|
179
|
-
private
|
|
180
|
-
/** 跨包 Runner 构建中的 in-flight Promise:并发调用 await 同一构建任务,消除 check-then-act 竞态 */
|
|
181
|
-
private pendingPackageRunners;
|
|
182
|
+
private packageFactory;
|
|
182
183
|
private actionResolver?;
|
|
183
184
|
private getStorageForPackage?;
|
|
184
|
-
private packageContextResolver?;
|
|
185
185
|
private customHome?;
|
|
186
186
|
private hostSessionId?;
|
|
187
187
|
constructor(options: RunnerOptions);
|
|
188
|
+
/** 本地 Action 注册表底层映射(仅内部与跨包工厂委托使用) */
|
|
189
|
+
private get actions();
|
|
188
190
|
getStorage(): RuntimeStorage;
|
|
189
191
|
getPackageRunners(): Map<string, ActionRunner>;
|
|
190
192
|
/**
|
|
@@ -222,10 +224,6 @@ export declare class ActionRunner {
|
|
|
222
224
|
* 并发方 await 同一构建任务,构建失败时移除该 Promise 以便后续重试。
|
|
223
225
|
*/
|
|
224
226
|
resolveTargetPackageRunner(targetPackageId: string): Promise<ActionRunner | undefined>;
|
|
225
|
-
/**
|
|
226
|
-
* 实际构建跨包 Runner(仅由 resolveTargetPackageRunner 串行调度)。
|
|
227
|
-
*/
|
|
228
|
-
private buildTargetPackageRunner;
|
|
229
227
|
/**
|
|
230
228
|
* 异步启动 Action 的执行并立即返回 ExecutionHandle 句柄。
|
|
231
229
|
*
|
|
@@ -244,25 +242,9 @@ export declare class ActionRunner {
|
|
|
244
242
|
*/
|
|
245
243
|
private prepareRunContext;
|
|
246
244
|
/**
|
|
247
|
-
*
|
|
248
|
-
*/
|
|
249
|
-
private resolveAnonymousActionId;
|
|
250
|
-
/**
|
|
251
|
-
* 尝试将 failed 终态初始记录写入存储(非法输入场景,存储异常静默忽略)。
|
|
252
|
-
*/
|
|
253
|
-
private tryPersistInitialRun;
|
|
254
|
-
/**
|
|
255
|
-
* 构建 running 初始记录并强制写入存储(存储不可用时抛出 RUN_REPOSITORY_UNAVAILABLE)。
|
|
245
|
+
* 依据运行期上下文装配落库模块入参(RunRecord 构造领域契约)。
|
|
256
246
|
*/
|
|
257
|
-
private
|
|
258
|
-
/**
|
|
259
|
-
* 依据运行期上下文构造 RunRecord 初始记录。
|
|
260
|
-
*/
|
|
261
|
-
private buildInitialRunRecord;
|
|
262
|
-
/**
|
|
263
|
-
* 创建运行终态收敛器:封装终态去重、超时定时器清理与落库异常捕获。
|
|
264
|
-
*/
|
|
265
|
-
private createRunFinalizer;
|
|
247
|
+
private buildRunPersistenceInput;
|
|
266
248
|
/**
|
|
267
249
|
* 调用嵌套深度限制检测(超限时返回 ACTION_CALL_CYCLE 错误)。
|
|
268
250
|
*/
|
|
@@ -303,6 +285,14 @@ export declare class ActionRunner {
|
|
|
303
285
|
* 异常分类收敛:超时、取消与业务失败分别映射为对应终态与错误码。
|
|
304
286
|
*/
|
|
305
287
|
private classifyExecutionError;
|
|
288
|
+
/**
|
|
289
|
+
* 释放 Runner 持有的跨包资源:遍历关闭全部子包 Runner 及其独立创建的存储连接。
|
|
290
|
+
*
|
|
291
|
+
* 幂等且并发安全:重复调用直接复用首次 Promise;子包存储异常不阻断其余释放;
|
|
292
|
+
* 仅关闭由本 Runner 构建子包 Runner 时独立创建的存储,外部注入的存储(如经
|
|
293
|
+
* packageContextResolver 传入的目标包自身存储)生命周期归所有者管理,不在此误关。
|
|
294
|
+
*/
|
|
295
|
+
dispose(): Promise<void>;
|
|
306
296
|
/**
|
|
307
297
|
* 同步等待方式执行指定 Action,直接返回 ExecutionResult 信封结果。
|
|
308
298
|
*
|