@actiondock/core 2.0.11 → 2.0.12
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/build/templates.d.ts +19 -0
- package/dist/catalog/action-index.d.ts +9 -0
- package/dist/catalog/action-resolver.d.ts +20 -0
- package/dist/catalog/location-registry.d.ts +15 -0
- package/dist/catalog/package-catalog.d.ts +7 -0
- package/dist/catalog/types.d.ts +68 -0
- package/dist/doctor/doctor.d.ts +6 -0
- package/dist/doctor/types.d.ts +23 -0
- package/dist/execution/index.d.ts +2 -0
- package/dist/execution/service.d.ts +74 -0
- package/dist/execution/types.d.ts +74 -0
- package/dist/export/templates.d.ts +33 -0
- package/dist/filter/intent.d.ts +33 -0
- package/{src/index.ts → dist/index.d.ts} +1 -1
- package/dist/index.js +8458 -0
- package/dist/profile/client.d.ts +116 -0
- package/dist/profile/manager.d.ts +47 -0
- package/dist/profile/types.d.ts +61 -0
- package/dist/project/closure.d.ts +25 -0
- package/{src/project/index.ts → dist/project/index.d.ts} +1 -0
- package/dist/project/init.d.ts +27 -0
- package/dist/project/loader.d.ts +105 -0
- package/dist/project/manifest.d.ts +44 -0
- package/dist/project/types.d.ts +131 -0
- package/dist/registry/registry.d.ts +24 -0
- package/dist/registry/types.d.ts +117 -0
- package/dist/runtime/clock.d.ts +21 -0
- package/dist/runtime/context.d.ts +75 -0
- package/dist/runtime/env.d.ts +54 -0
- package/dist/runtime/events.d.ts +61 -0
- package/dist/runtime/execution-manager.d.ts +48 -0
- package/{src/runtime/index.ts → dist/runtime/index.d.ts} +0 -1
- package/dist/runtime/module-loader.d.ts +42 -0
- package/dist/runtime/process.d.ts +11 -0
- package/dist/runtime/runner.d.ts +186 -0
- package/dist/runtime/standalone.d.ts +40 -0
- package/dist/schema/validator.d.ts +28 -0
- package/dist/server/body.d.ts +40 -0
- package/{src/server/index.ts → dist/server/index.d.ts} +0 -1
- package/dist/server/routes/actions.d.ts +5 -0
- package/dist/server/routes/common.d.ts +36 -0
- package/dist/server/routes/config.d.ts +5 -0
- package/dist/server/routes/doctor.d.ts +5 -0
- package/dist/server/routes/health.d.ts +5 -0
- package/dist/server/routes/info.d.ts +5 -0
- package/dist/server/routes/playbooks.d.ts +5 -0
- package/dist/server/routes/runs.d.ts +5 -0
- package/dist/server/routes/state.d.ts +5 -0
- package/dist/server/runtime-registry.d.ts +78 -0
- package/dist/server/security.d.ts +37 -0
- package/dist/server/server.d.ts +15 -0
- package/dist/server/types.d.ts +59 -0
- package/dist/storage/driver.d.ts +15 -0
- package/dist/storage/index.d.ts +44 -0
- package/{src/storage/mask.ts → dist/storage/mask.d.ts} +5 -20
- package/dist/storage/sqlite.d.ts +66 -0
- package/dist/storage/types.d.ts +121 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/version.d.ts +4 -0
- package/package.json +11 -10
- package/src/build/templates.ts +0 -59
- package/src/catalog/action-index.ts +0 -92
- package/src/catalog/action-resolver.ts +0 -120
- package/src/catalog/location-registry.ts +0 -134
- package/src/catalog/package-catalog.ts +0 -87
- package/src/catalog/types.ts +0 -75
- package/src/doctor/doctor.ts +0 -419
- package/src/doctor/types.ts +0 -25
- package/src/execution/index.ts +0 -2
- package/src/execution/service.ts +0 -322
- package/src/execution/types.ts +0 -73
- package/src/export/templates.ts +0 -590
- package/src/filter/intent.ts +0 -154
- package/src/profile/client.ts +0 -552
- package/src/profile/manager.ts +0 -341
- package/src/profile/types.ts +0 -71
- package/src/project/init.ts +0 -242
- package/src/project/loader.ts +0 -479
- package/src/project/manifest.ts +0 -299
- package/src/project/types.ts +0 -141
- package/src/registry/registry.ts +0 -940
- package/src/registry/types.ts +0 -127
- package/src/runtime/clock.ts +0 -41
- package/src/runtime/context.ts +0 -259
- package/src/runtime/env.ts +0 -172
- package/src/runtime/events.ts +0 -142
- package/src/runtime/execution-manager.ts +0 -74
- package/src/runtime/module-loader.ts +0 -67
- package/src/runtime/process.ts +0 -245
- package/src/runtime/runner.ts +0 -527
- package/src/runtime/standalone.ts +0 -429
- package/src/schema/validator.ts +0 -61
- package/src/server/body.ts +0 -112
- package/src/server/routes/actions.ts +0 -262
- package/src/server/routes/common.ts +0 -126
- package/src/server/routes/config.ts +0 -147
- package/src/server/routes/doctor.ts +0 -29
- package/src/server/routes/health.ts +0 -40
- package/src/server/routes/info.ts +0 -221
- package/src/server/routes/playbooks.ts +0 -109
- package/src/server/routes/runs.ts +0 -301
- package/src/server/routes/state.ts +0 -133
- package/src/server/runtime-registry.ts +0 -115
- package/src/server/security.ts +0 -115
- package/src/server/server.ts +0 -251
- package/src/server/types.ts +0 -57
- package/src/storage/driver.ts +0 -126
- package/src/storage/index.ts +0 -81
- package/src/storage/sqlite.ts +0 -714
- package/src/storage/types.ts +0 -139
- package/src/utils/index.ts +0 -62
- /package/{src/build/index.ts → dist/build/index.d.ts} +0 -0
- /package/{src/catalog/index.ts → dist/catalog/index.d.ts} +0 -0
- /package/{src/doctor/index.ts → dist/doctor/index.d.ts} +0 -0
- /package/{src/export/index.ts → dist/export/index.d.ts} +0 -0
- /package/{src/filter/index.ts → dist/filter/index.d.ts} +0 -0
- /package/{src/profile/index.ts → dist/profile/index.d.ts} +0 -0
- /package/{src/registry/index.ts → dist/registry/index.d.ts} +0 -0
- /package/{src/server/routes/index.ts → dist/server/routes/index.d.ts} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 本地软链接(Link)注册的 Package 实体记录。
|
|
3
|
+
*/
|
|
4
|
+
export interface LinkedPackageEntry {
|
|
5
|
+
/** Package 唯一 ID */
|
|
6
|
+
id: string;
|
|
7
|
+
/** 展示名称 */
|
|
8
|
+
name: string;
|
|
9
|
+
/** 版本号 */
|
|
10
|
+
version: string;
|
|
11
|
+
/** 源码物理目录绝对路径 */
|
|
12
|
+
path: string;
|
|
13
|
+
/** 建立软链接的时间戳(ISO 8601) */
|
|
14
|
+
linkedAt: string;
|
|
15
|
+
/** 所属 Workspace 根目录(如果是通过 Workspace 自动关联的) */
|
|
16
|
+
workspaceRoot?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 本地软链接(Link)注册的 Workspace 工作区目录记录。
|
|
20
|
+
*/
|
|
21
|
+
export interface LinkedWorkspaceEntry {
|
|
22
|
+
/** 工作区物理目录绝对路径 */
|
|
23
|
+
path: string;
|
|
24
|
+
/** 建立软链接的时间戳(ISO 8601) */
|
|
25
|
+
linkedAt: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 全局 Registry 数据结构(~/.actiondock/registry.json)。
|
|
29
|
+
*/
|
|
30
|
+
export interface GlobalRegistryData {
|
|
31
|
+
version: string;
|
|
32
|
+
packages: Record<string, LinkedPackageEntry>;
|
|
33
|
+
workspaces?: Record<string, LinkedWorkspaceEntry>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Link 操作返回结果。
|
|
37
|
+
*/
|
|
38
|
+
export interface LinkResult {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
version: string;
|
|
42
|
+
path: string;
|
|
43
|
+
linkedAt: string;
|
|
44
|
+
isWorkspace?: boolean;
|
|
45
|
+
entries: LinkedPackageEntry[];
|
|
46
|
+
workspace?: LinkedWorkspaceEntry;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Unlink 操作返回结果。
|
|
50
|
+
*/
|
|
51
|
+
export interface UnlinkResult {
|
|
52
|
+
type: "package" | "workspace";
|
|
53
|
+
id: string;
|
|
54
|
+
path: string;
|
|
55
|
+
packagesCount?: number;
|
|
56
|
+
removedPackage?: LinkedPackageEntry;
|
|
57
|
+
removedWorkspace?: LinkedWorkspaceEntry;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 注册表树形层级节点。
|
|
61
|
+
*/
|
|
62
|
+
export interface RegistryTreeItem {
|
|
63
|
+
type: "workspace" | "package";
|
|
64
|
+
id: string;
|
|
65
|
+
name?: string;
|
|
66
|
+
version?: string;
|
|
67
|
+
path: string;
|
|
68
|
+
status: "active" | "stale";
|
|
69
|
+
packagesCount?: number;
|
|
70
|
+
children?: Array<{
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
version: string;
|
|
74
|
+
path: string;
|
|
75
|
+
status: "active" | "stale";
|
|
76
|
+
}>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 注册表健康状态与列表报告。
|
|
80
|
+
*/
|
|
81
|
+
export interface RegistryStatusReport {
|
|
82
|
+
workspaces: RegistryTreeItem[];
|
|
83
|
+
packages: RegistryTreeItem[];
|
|
84
|
+
staleCount: number;
|
|
85
|
+
totalPackagesCount: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 失效清理结果。
|
|
89
|
+
*/
|
|
90
|
+
export interface PruneResult {
|
|
91
|
+
prunedPackages: LinkedPackageEntry[];
|
|
92
|
+
prunedWorkspaces: LinkedWorkspaceEntry[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Action 归属项目解析结果。
|
|
96
|
+
*/
|
|
97
|
+
export interface ResolvedActionProject {
|
|
98
|
+
/** 所在项目的根目录绝对路径 */
|
|
99
|
+
projectRoot: string;
|
|
100
|
+
/** 所属 Package ID */
|
|
101
|
+
packageId: string;
|
|
102
|
+
/** 匹配到的 Action ID */
|
|
103
|
+
actionId: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Playbook 归属项目解析结果。
|
|
107
|
+
*/
|
|
108
|
+
export interface ResolvedPlaybookProject {
|
|
109
|
+
/** 所在项目的根目录绝对路径 */
|
|
110
|
+
projectRoot: string;
|
|
111
|
+
/** 所属 Package ID */
|
|
112
|
+
packageId: string;
|
|
113
|
+
/** 匹配到的 Playbook ID */
|
|
114
|
+
playbookId: string;
|
|
115
|
+
/** Playbook 实体数据 */
|
|
116
|
+
playbook: import("../project/types").PlaybookDefinition;
|
|
117
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 统一时间与时钟接口。
|
|
3
|
+
*/
|
|
4
|
+
export interface Clock {
|
|
5
|
+
/** 获取当前系统墙上时间 */
|
|
6
|
+
now(): Date;
|
|
7
|
+
/** 获取单调递增时间戳(单位:毫秒) */
|
|
8
|
+
monotonic(): number;
|
|
9
|
+
/** 异步休眠指定毫秒 */
|
|
10
|
+
sleep(ms: number): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 生产环境系统时钟实现。
|
|
14
|
+
*/
|
|
15
|
+
export declare class SystemClock implements Clock {
|
|
16
|
+
now(): Date;
|
|
17
|
+
monotonic(): number;
|
|
18
|
+
sleep(ms: number): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function getSystemClock(): Clock;
|
|
21
|
+
export declare function setSystemClock(clock: Clock): void;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ActionContext, ActionDefinition, ActionRef, Config, Logger, ProcessAPI, ProgressReporter, StateStore } from "@actiondock/sdk";
|
|
2
|
+
import type { ProjectConfig } from "../project/types";
|
|
3
|
+
import type { RuntimeStorage } from "../storage/types";
|
|
4
|
+
/**
|
|
5
|
+
* 生产级配置解析器实现。
|
|
6
|
+
* 严格践行 5 层配置解析优先级链:
|
|
7
|
+
* 1. CLI 临时参数覆写 (Overrides)
|
|
8
|
+
* 2. 本地项目持久化存储 (Local SQLite: .actiondock/runtime.db)
|
|
9
|
+
* 3. 全局共享持久化存储 (Global SQLite: ~/.actiondock/global.db)
|
|
10
|
+
* 4. 操作系统环境变量 (process.env: 显式绑定 / 包名前缀 / SNAKE_CASE / 类型转换)
|
|
11
|
+
* 5. 项目默认配置 (actiondock.json 中的 default 字段)
|
|
12
|
+
* 6. 代码级默认回退值 (fallback)
|
|
13
|
+
*/
|
|
14
|
+
export declare class RuntimeConfig implements Config {
|
|
15
|
+
private overrides;
|
|
16
|
+
private storage;
|
|
17
|
+
private projectConfig?;
|
|
18
|
+
private globalStorage?;
|
|
19
|
+
constructor(storage: RuntimeStorage, overrides?: Record<string, unknown>, projectConfig?: ProjectConfig, globalStorage?: RuntimeStorage);
|
|
20
|
+
get<T = unknown>(key: string): T | undefined;
|
|
21
|
+
get<T = unknown>(key: string, defaultValue: T): T;
|
|
22
|
+
has(key: string): boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 生产级状态存储实现,将状态持久化到 SQLite 中,完整支持命名空间分段隔离与 TTL。
|
|
26
|
+
*/
|
|
27
|
+
export declare class RuntimeStateStore implements StateStore {
|
|
28
|
+
private storage;
|
|
29
|
+
private namespace;
|
|
30
|
+
constructor(storage: RuntimeStorage, namespace?: string);
|
|
31
|
+
get<T = unknown>(key: string): Promise<T | undefined>;
|
|
32
|
+
set<T = unknown>(key: string, value: T, ttl?: number): Promise<void>;
|
|
33
|
+
delete(key: string): Promise<boolean>;
|
|
34
|
+
clear(prefix?: string): Promise<number>;
|
|
35
|
+
keys(prefix?: string): Promise<string[]>;
|
|
36
|
+
scope(namespace: string): StateStore;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 标准 Stderr 日志记录器实现。
|
|
40
|
+
* 遵循 Unix 哲学:所有诊断与追踪日志输出至 stderr,确保 stdout 纯净保留 JSON 信封。
|
|
41
|
+
*/
|
|
42
|
+
export declare class StderrLogger implements Logger {
|
|
43
|
+
private prefix;
|
|
44
|
+
constructor(prefix?: string);
|
|
45
|
+
private format;
|
|
46
|
+
debug(message: string, data?: unknown): void;
|
|
47
|
+
info(message: string, data?: unknown): void;
|
|
48
|
+
warn(message: string, data?: unknown): void;
|
|
49
|
+
error(message: string, data?: unknown): void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 创建 ActionContext 上下文所需的选项集合。
|
|
53
|
+
*/
|
|
54
|
+
export interface ContextOptions {
|
|
55
|
+
storage: RuntimeStorage;
|
|
56
|
+
globalStorage?: RuntimeStorage;
|
|
57
|
+
overrides?: Record<string, unknown>;
|
|
58
|
+
projectConfig?: ProjectConfig;
|
|
59
|
+
parentRunId?: string;
|
|
60
|
+
runId?: string;
|
|
61
|
+
rootRunId?: string;
|
|
62
|
+
callStack?: string[];
|
|
63
|
+
signal?: AbortSignal;
|
|
64
|
+
process?: ProcessAPI;
|
|
65
|
+
progress?: ProgressReporter;
|
|
66
|
+
logger?: Logger;
|
|
67
|
+
onActionInvoke?: (action: ActionDefinition | ActionRef | string, input: unknown, parentRunId?: string) => Promise<unknown>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 构建并装配传递给 Action 的完整 ActionContext 运行时上下文。
|
|
71
|
+
*
|
|
72
|
+
* @param options 上下文构建参数
|
|
73
|
+
* @returns 组装完毕的 ActionContext 实例
|
|
74
|
+
*/
|
|
75
|
+
export declare function createActionContext(options: ContextOptions): ActionContext;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ConfigItemDefinition, ConfigValueType } from "../project/types";
|
|
2
|
+
/**
|
|
3
|
+
* 从环境变量成功解析后的结构体。
|
|
4
|
+
*/
|
|
5
|
+
export interface ResolvedEnv {
|
|
6
|
+
/** 转换类型后的配置值 */
|
|
7
|
+
value: unknown;
|
|
8
|
+
/** 命中的具体环境变量键名 */
|
|
9
|
+
envKey: string;
|
|
10
|
+
/** 数据来源标识 */
|
|
11
|
+
source: "env";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 将任意命名格式的字符串转换为标准的大写蛇形命名(UPPER_SNAKE_CASE)。
|
|
15
|
+
* 兼容处理 camelCase、kebab-case、点号分隔、斜杠以及 @ 作用域符号。
|
|
16
|
+
*
|
|
17
|
+
* @param str 输入字符串,如 "apiKey"、"@team4u/github-tools"
|
|
18
|
+
* @returns 转换后的字符串,如 "API_KEY"、"TEAM4U_GITHUB_TOOLS"
|
|
19
|
+
*/
|
|
20
|
+
export declare function toSnakeUpperCase(str: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* 当未显式声明类型时,根据默认值的值类型智能推断目标配置类型。
|
|
23
|
+
*
|
|
24
|
+
* @param defaultVal 默认值
|
|
25
|
+
* @returns 推断出的 ConfigValueType 或 undefined
|
|
26
|
+
*/
|
|
27
|
+
export declare function inferTypeFromDefault(defaultVal: unknown): ConfigValueType | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* 将从 process.env 获取的原始字符串安全转换为目标类型。
|
|
30
|
+
*
|
|
31
|
+
* 支持类型:
|
|
32
|
+
* - boolean: "true"/"1"/"yes"/"on" -> true; "false"/"0"/"no"/"off" -> false
|
|
33
|
+
* - number: 自动转换为数字,非数字时回退为原始字符串
|
|
34
|
+
* - object / array: 自动尝试 JSON.parse 反序列化
|
|
35
|
+
* - 自动探测: 当 targetType 未指定时,自动识别布尔值及 JSON 对象/数组
|
|
36
|
+
*
|
|
37
|
+
* @param rawValue process.env 中的原始字符串
|
|
38
|
+
* @param targetType 期望转换的目标类型
|
|
39
|
+
*/
|
|
40
|
+
export declare function coerceEnvValue(rawValue: string, targetType?: ConfigValueType): unknown;
|
|
41
|
+
/**
|
|
42
|
+
* 从操作系统环境变量 (process.env) 中解析配置值。
|
|
43
|
+
* 严格遵循多层回退候选链:
|
|
44
|
+
* 1. actiondock.json 中声明的显式环境变量绑定 (itemDef.env)
|
|
45
|
+
* 2. 带包名前缀的变量: `ACTIONDOCK_<PACKAGE>_<KEY>` 以及 `<PACKAGE>_<KEY>`
|
|
46
|
+
* 3. 标准大写蛇形变量: `<KEY>` (SNAKE_CASE)
|
|
47
|
+
* 4. 原始键名原样匹配
|
|
48
|
+
*
|
|
49
|
+
* @param key 配置键名
|
|
50
|
+
* @param itemDef 配置项元数据定义
|
|
51
|
+
* @param packageId 所属包 ID
|
|
52
|
+
* @returns 命中的 ResolvedEnv 对象或 undefined
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveEnvValue(key: string, itemDef?: ConfigItemDefinition, packageId?: string): ResolvedEnv | undefined;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ExecutionEvent } from "@actiondock/sdk";
|
|
2
|
+
export interface EventSink {
|
|
3
|
+
emit(event: ExecutionEvent): void;
|
|
4
|
+
subscribe(runId: string, options?: {
|
|
5
|
+
after?: number;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}): AsyncIterable<ExecutionEvent>;
|
|
8
|
+
clear(runId: string): void;
|
|
9
|
+
}
|
|
10
|
+
export interface InMemoryEventSinkOptions {
|
|
11
|
+
/** 单个运行最大缓冲事件数(默认 1024) */
|
|
12
|
+
maxEventsPerRun?: number;
|
|
13
|
+
/** 单个运行最大缓冲字节数(默认 1024 * 1024 = 1MiB) */
|
|
14
|
+
maxBytesPerRun?: number;
|
|
15
|
+
/** 全局最大缓存运行数(默认 500) */
|
|
16
|
+
maxRuns?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 进程内有界事件缓冲区实现。
|
|
20
|
+
* 遵循设计规范:
|
|
21
|
+
* 1. 单运行双配额保护:上限 1024 条事件或 1MiB 字节数,优先淘汰日志与进度,保护终态。
|
|
22
|
+
* 2. 全局有界回收:限制最大运行数(默认 500),溢出时优先淘汰已完成运行。
|
|
23
|
+
* 3. 原子订阅衔接:先注册实时队列再回放历史快照,去重并杜绝并发丢事件窗口。
|
|
24
|
+
* 4. 严格生命周期清理:迭代退出或中断时彻底注销监听器与 AbortSignal 事件。
|
|
25
|
+
*/
|
|
26
|
+
export declare class InMemoryEventSink implements EventSink {
|
|
27
|
+
private runs;
|
|
28
|
+
private listeners;
|
|
29
|
+
private wakeups;
|
|
30
|
+
private evictions;
|
|
31
|
+
private evictedRuns;
|
|
32
|
+
private maxEventsPerRun;
|
|
33
|
+
private maxBytesPerRun;
|
|
34
|
+
private maxRuns;
|
|
35
|
+
constructor(options?: InMemoryEventSinkOptions);
|
|
36
|
+
emit(event: ExecutionEvent): void;
|
|
37
|
+
subscribe(runId: string, options?: {
|
|
38
|
+
after?: number;
|
|
39
|
+
signal?: AbortSignal;
|
|
40
|
+
}): AsyncIterable<ExecutionEvent>;
|
|
41
|
+
clear(runId: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* 获取指定运行的事件统计信息(调试与测试用)。
|
|
44
|
+
*/
|
|
45
|
+
getRunStats(runId: string): {
|
|
46
|
+
count: number;
|
|
47
|
+
bytes: number;
|
|
48
|
+
isTerminal: boolean;
|
|
49
|
+
} | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* 获取全局缓存的运行数。
|
|
52
|
+
*/
|
|
53
|
+
getRunCount(): number;
|
|
54
|
+
/**
|
|
55
|
+
* 淘汰最久未活跃的运行记录。
|
|
56
|
+
* 优先淘汰已终态运行;若无终态运行则淘汰最旧活动运行,严格保证 runs.size <= maxRuns。
|
|
57
|
+
*/
|
|
58
|
+
private evictOldestRun;
|
|
59
|
+
}
|
|
60
|
+
export declare function getDefaultEventSink(): EventSink;
|
|
61
|
+
export declare function setDefaultEventSink(sink: EventSink): void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ExecutionHandle } from "./runner";
|
|
2
|
+
/**
|
|
3
|
+
* 内存中活跃执行句柄(In-flight Execution Handles)生命周期管理器。
|
|
4
|
+
*
|
|
5
|
+
* 职责:
|
|
6
|
+
* 1. 集中追踪正在执行的异步 Action 任务句柄。
|
|
7
|
+
* 2. 任务完成(无论成功或失败)后通过 Promise.finally 自动注销,防止内存泄漏。
|
|
8
|
+
* 3. 支持依据 runId 查询、遍历或主动发送取消信号(cancel)。
|
|
9
|
+
*/
|
|
10
|
+
export declare class ExecutionManager {
|
|
11
|
+
private active;
|
|
12
|
+
/**
|
|
13
|
+
* 注册一个活跃的执行句柄。
|
|
14
|
+
* 当底层 Promise 完成结算(resolve/reject)时,自动从活跃映射表中移除。
|
|
15
|
+
*
|
|
16
|
+
* @param handle 执行句柄对象
|
|
17
|
+
*/
|
|
18
|
+
register(handle: ExecutionHandle): void;
|
|
19
|
+
/**
|
|
20
|
+
* 根据 runId 检索正在执行的任务句柄。
|
|
21
|
+
*
|
|
22
|
+
* @param runId 运行 ID
|
|
23
|
+
* @returns 匹配的 ExecutionHandle 或 undefined
|
|
24
|
+
*/
|
|
25
|
+
get(runId: string): ExecutionHandle | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* 向指定 runId 的在途执行任务发送取消信号。
|
|
28
|
+
*
|
|
29
|
+
* @param runId 目标运行 ID
|
|
30
|
+
* @param reason 取消原因描述
|
|
31
|
+
* @returns 若句柄存在且成功触发中断返回 true;若任务不存在或已完成返回 false
|
|
32
|
+
*/
|
|
33
|
+
cancel(runId: string, reason?: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 手动从活跃集合中移除执行句柄。
|
|
36
|
+
*
|
|
37
|
+
* @param runId 运行 ID
|
|
38
|
+
*/
|
|
39
|
+
remove(runId: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* 获取当前系统中所有正在执行的活跃句柄列表。
|
|
42
|
+
*/
|
|
43
|
+
list(): ExecutionHandle[];
|
|
44
|
+
/**
|
|
45
|
+
* 清空所有活跃执行句柄。
|
|
46
|
+
*/
|
|
47
|
+
clear(): void;
|
|
48
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 统一源码模块加载器接口。
|
|
3
|
+
* 解耦 Action 与各类扩展模块的具体加载机制(如 ECMAScript 原生 import、tsx 动态转译加载等)。
|
|
4
|
+
*/
|
|
5
|
+
export interface ModuleLoader {
|
|
6
|
+
/**
|
|
7
|
+
* 解析模块标识符为绝对路径或完整 URL。
|
|
8
|
+
*
|
|
9
|
+
* @param specifier 模块规范说明符或物理路径
|
|
10
|
+
* @param parentPath 发起解析的父级文件或目录路径
|
|
11
|
+
*/
|
|
12
|
+
resolve?(specifier: string, parentPath?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* 动态加载模块并返回命名空间全量导出对象。
|
|
15
|
+
*
|
|
16
|
+
* @param specifier 模块规范说明符或物理路径
|
|
17
|
+
* @param parentPath 发起加载的父级文件或目录路径
|
|
18
|
+
*/
|
|
19
|
+
load<T = any>(specifier: string, parentPath?: string): Promise<T>;
|
|
20
|
+
/**
|
|
21
|
+
* 加载模块并解包其默认导出(default 或 action 属性)。
|
|
22
|
+
*
|
|
23
|
+
* @param specifier 模块规范说明符或物理路径
|
|
24
|
+
* @param parentPath 发起加载的父级文件或目录路径
|
|
25
|
+
*/
|
|
26
|
+
loadDefault?<T = any>(specifier: string, parentPath?: string): Promise<T>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 基于标准 ECMAScript 动态 import 的默认模块加载器。
|
|
30
|
+
*/
|
|
31
|
+
export declare class DefaultModuleLoader implements ModuleLoader {
|
|
32
|
+
load<T = any>(specifier: string, _parentPath?: string): Promise<T>;
|
|
33
|
+
loadDefault<T = any>(specifier: string, parentPath?: string): Promise<T>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 注册全局模块加载器实现。
|
|
37
|
+
*/
|
|
38
|
+
export declare function setModuleLoader(loader: ModuleLoader): void;
|
|
39
|
+
/**
|
|
40
|
+
* 获取当前全局模块加载器,若未显式注册则回退使用 DefaultModuleLoader。
|
|
41
|
+
*/
|
|
42
|
+
export declare function getModuleLoader(): ModuleLoader;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DetachedProcessOptions, DetachedProcessResult, ProcessAPI, ProcessExecOptions, ProcessResult } from "@actiondock/sdk";
|
|
2
|
+
export type ProcessExecutor = ProcessAPI;
|
|
3
|
+
export declare function setProcessExecutor(executor: ProcessExecutor): void;
|
|
4
|
+
export declare function getProcessExecutor(): ProcessExecutor;
|
|
5
|
+
/**
|
|
6
|
+
* 基于 Node.js 标准 child_process 实现的基础进程执行器。
|
|
7
|
+
*/
|
|
8
|
+
export declare class DefaultProcessExecutor implements ProcessExecutor {
|
|
9
|
+
exec(command: string, args?: string[], options?: ProcessExecOptions): Promise<ProcessResult>;
|
|
10
|
+
spawnDetached(options: DetachedProcessOptions): Promise<DetachedProcessResult>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { ActionDefinition, ActionRef, ExecutionResult, Logger, ProcessAPI, ProgressReporter } from "@actiondock/sdk";
|
|
2
|
+
import type { ProjectConfig } from "../project/types";
|
|
3
|
+
import type { RuntimeStorage } from "../storage/types";
|
|
4
|
+
import type { Clock } from "./clock";
|
|
5
|
+
/**
|
|
6
|
+
* ActionRunner 初始化配置选项。
|
|
7
|
+
*/
|
|
8
|
+
export interface RunnerOptions {
|
|
9
|
+
/** 运行所属的 Package ID */
|
|
10
|
+
packageId: string;
|
|
11
|
+
/** 持久化运行时存储实例(SQLite) */
|
|
12
|
+
storage: RuntimeStorage;
|
|
13
|
+
/** 全局共享持久化存储实例(SQLite,用于单例池化避免泄漏) */
|
|
14
|
+
globalStorage?: RuntimeStorage;
|
|
15
|
+
/** 项目根目录绝对路径 */
|
|
16
|
+
projectRoot?: string;
|
|
17
|
+
/** 项目元数据配置 */
|
|
18
|
+
projectConfig?: ProjectConfig;
|
|
19
|
+
/** CLI 或上层注入的临时配置覆盖项 */
|
|
20
|
+
configOverrides?: Record<string, unknown>;
|
|
21
|
+
/** 预加载的 Action 映射表 */
|
|
22
|
+
actions?: Map<string, ActionDefinition>;
|
|
23
|
+
/** 外部注入的进程执行器 */
|
|
24
|
+
process?: ProcessAPI;
|
|
25
|
+
/** 可选的时间与时钟源(默认使用存储内嵌时钟或系统时间) */
|
|
26
|
+
clock?: Clock;
|
|
27
|
+
/** 动态解析跨包或未注册 Action 的委托函数 */
|
|
28
|
+
actionResolver?: (ref: ActionRef | string, currentPackageId?: string) => ActionDefinition | undefined | Promise<ActionDefinition | undefined>;
|
|
29
|
+
/** 最大调用嵌套深度限制(防死循环/过深调用链,默认 16) */
|
|
30
|
+
maxCallDepth?: number;
|
|
31
|
+
/** 最大并发子任务数限制(默认 64) */
|
|
32
|
+
maxSubRuns?: number;
|
|
33
|
+
/** 跨包存储工厂 */
|
|
34
|
+
getStorageForPackage?: (packageId: string, projectRoot?: string) => RuntimeStorage;
|
|
35
|
+
/** 跨包运行上下文解析委托函数 */
|
|
36
|
+
packageContextResolver?: (packageId: string) => Promise<{
|
|
37
|
+
projectRoot?: string;
|
|
38
|
+
projectConfig?: ProjectConfig;
|
|
39
|
+
storage: RuntimeStorage;
|
|
40
|
+
actions?: Map<string, ActionDefinition>;
|
|
41
|
+
} | undefined> | {
|
|
42
|
+
projectRoot?: string;
|
|
43
|
+
projectConfig?: ProjectConfig;
|
|
44
|
+
storage: RuntimeStorage;
|
|
45
|
+
actions?: Map<string, ActionDefinition>;
|
|
46
|
+
} | undefined;
|
|
47
|
+
/** 自定义 ActionDock 用户家目录(用于测试隔离与多租户环境) */
|
|
48
|
+
customHome?: string;
|
|
49
|
+
}
|
|
50
|
+
/** ActionRunnerOptions 别名兼容 */
|
|
51
|
+
export type ActionRunnerOptions = RunnerOptions;
|
|
52
|
+
/**
|
|
53
|
+
* 启动 Action 执行时的可选控制参数。
|
|
54
|
+
*/
|
|
55
|
+
export interface ExecutionStartOptions {
|
|
56
|
+
/** 显式指定的运行 ID */
|
|
57
|
+
runId?: string;
|
|
58
|
+
/** 根运行 ID */
|
|
59
|
+
rootRunId?: string;
|
|
60
|
+
/** 父级运行 ID(嵌套调用场景下建立调用链树) */
|
|
61
|
+
parentRunId?: string;
|
|
62
|
+
/** 包物理实例标识 */
|
|
63
|
+
packageInstanceId?: string;
|
|
64
|
+
/** 快照代次标识 */
|
|
65
|
+
generationId?: string;
|
|
66
|
+
/** 执行所有者标识 */
|
|
67
|
+
ownerId?: string;
|
|
68
|
+
/** 调用栈数组(用于检测 A -> B -> A 环路死锁) */
|
|
69
|
+
callStack?: string[];
|
|
70
|
+
/** 外部传入的 AbortSignal 取消信号 */
|
|
71
|
+
signal?: AbortSignal;
|
|
72
|
+
/** 最大超时时间(毫秒),超时将自动中止执行并标记为 ACTION_TIMEOUT */
|
|
73
|
+
timeoutMs?: number;
|
|
74
|
+
/** 最大调用深度覆盖 */
|
|
75
|
+
maxCallDepth?: number;
|
|
76
|
+
/** 外部注入的进程执行器 */
|
|
77
|
+
process?: ProcessAPI;
|
|
78
|
+
/** 外部注入的进度报告器 */
|
|
79
|
+
progress?: ProgressReporter;
|
|
80
|
+
/** 外部注入的日志记录器 */
|
|
81
|
+
logger?: Logger;
|
|
82
|
+
/** 执行级临时配置覆盖项 */
|
|
83
|
+
configOverrides?: Record<string, unknown>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 异步执行句柄,支持获取执行结果 Promise 与主动取消操作。
|
|
87
|
+
*/
|
|
88
|
+
export interface ExecutionHandle {
|
|
89
|
+
/** 本次执行生成的全局唯一运行 ID */
|
|
90
|
+
runId: string;
|
|
91
|
+
/** 最终执行结果信封 Promise */
|
|
92
|
+
result: Promise<ExecutionResult>;
|
|
93
|
+
/**
|
|
94
|
+
* 取消当前正在执行的任务
|
|
95
|
+
* @param reason 取消原因
|
|
96
|
+
* @returns 是否成功触发取消
|
|
97
|
+
*/
|
|
98
|
+
cancel(reason?: string): boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Action 解析结果判别联合类型。
|
|
102
|
+
*/
|
|
103
|
+
export type ActionResolution = {
|
|
104
|
+
status: "found";
|
|
105
|
+
action: ActionDefinition;
|
|
106
|
+
} | {
|
|
107
|
+
status: "not_found";
|
|
108
|
+
reason?: string;
|
|
109
|
+
} | {
|
|
110
|
+
status: "load_failed";
|
|
111
|
+
error: Error;
|
|
112
|
+
packageId: string;
|
|
113
|
+
projectRoot: string;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* ActionDock 核心执行引擎(ActionRunner)。
|
|
117
|
+
*
|
|
118
|
+
* 职责:
|
|
119
|
+
* 1. 负责 Action 执行的全生命周期管理(校验、隔离、跟踪、落库)。
|
|
120
|
+
* 2. 入参 (inputSchema) 与出参 (outputSchema) 的 JSON Schema 严格校验。
|
|
121
|
+
* 3. 嵌套 Action 相互调用的环路检测(Cycle Detection)。
|
|
122
|
+
* 4. 超时 (Timeout) 与中断信号 (AbortSignal) 竞态控制。
|
|
123
|
+
* 5. 自动记录并持久化 RunRecord 运行记录至 SQLite 存储。
|
|
124
|
+
*/
|
|
125
|
+
export declare class ActionRunner {
|
|
126
|
+
private packageId;
|
|
127
|
+
private storage;
|
|
128
|
+
private globalStorage?;
|
|
129
|
+
private projectRoot?;
|
|
130
|
+
private projectConfig?;
|
|
131
|
+
private configOverrides;
|
|
132
|
+
private actions;
|
|
133
|
+
private clock?;
|
|
134
|
+
private process?;
|
|
135
|
+
private maxCallDepth;
|
|
136
|
+
private maxSubRuns;
|
|
137
|
+
private activeSubRuns;
|
|
138
|
+
private packageRunners;
|
|
139
|
+
private actionResolver?;
|
|
140
|
+
private getStorageForPackage?;
|
|
141
|
+
private packageContextResolver?;
|
|
142
|
+
private customHome?;
|
|
143
|
+
constructor(options: RunnerOptions);
|
|
144
|
+
getStorage(): RuntimeStorage;
|
|
145
|
+
getPackageRunners(): Map<string, ActionRunner>;
|
|
146
|
+
/**
|
|
147
|
+
* 注册单个 Action 到当前 Runner。
|
|
148
|
+
*/
|
|
149
|
+
registerAction(action: ActionDefinition): void;
|
|
150
|
+
/**
|
|
151
|
+
* 根据 ID 检索注册的 Action。
|
|
152
|
+
*/
|
|
153
|
+
getAction(id: string): ActionDefinition | undefined;
|
|
154
|
+
/**
|
|
155
|
+
* 动态解析 Action(支持本地注册表、自定义解析器委托与已链接包目录索引检索)。
|
|
156
|
+
*
|
|
157
|
+
* @param actionOrRef Action 定义对象、引用或标识符
|
|
158
|
+
* @returns 解析判别联合结果(found | not_found | load_failed)
|
|
159
|
+
*/
|
|
160
|
+
resolveAction(actionOrRef: ActionDefinition | ActionRef | string): Promise<ActionResolution>;
|
|
161
|
+
/**
|
|
162
|
+
* 获取当前 Runner 已注册的所有 Action 列表。
|
|
163
|
+
*/
|
|
164
|
+
listActions(): ActionDefinition[];
|
|
165
|
+
/**
|
|
166
|
+
* 跨包运行时解析与获取(确保跨包执行具备独立的配置、存储、状态与 Action 注册表)。
|
|
167
|
+
*/
|
|
168
|
+
resolveTargetPackageRunner(targetPackageId: string): Promise<ActionRunner | undefined>;
|
|
169
|
+
/**
|
|
170
|
+
* 异步启动 Action 的执行并立即返回 ExecutionHandle 句柄。
|
|
171
|
+
*
|
|
172
|
+
* @param actionOrId Action 定义对象、引用或标识符
|
|
173
|
+
* @param input 传递给 Action 的输入数据
|
|
174
|
+
* @param options 执行控制选项(超时、取消信号、父运行 ID 等)
|
|
175
|
+
* @returns 包含 runId、result Promise 和 cancel 方法的执行句柄
|
|
176
|
+
*/
|
|
177
|
+
start(actionOrId: ActionDefinition | ActionRef | string, input?: unknown, options?: ExecutionStartOptions): ExecutionHandle;
|
|
178
|
+
/**
|
|
179
|
+
* 同步等待方式执行指定 Action,直接返回 ExecutionResult 信封结果。
|
|
180
|
+
*
|
|
181
|
+
* @param actionOrId Action 定义对象、引用或标识符
|
|
182
|
+
* @param input 输入参数
|
|
183
|
+
* @param options 执行控制选项
|
|
184
|
+
*/
|
|
185
|
+
execute(actionOrId: ActionDefinition | ActionRef | string, input?: unknown, options?: ExecutionStartOptions): Promise<ExecutionResult>;
|
|
186
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ActionDefinition } from "@actiondock/sdk";
|
|
2
|
+
import type { ConfigItemDefinition } from "../project/types";
|
|
3
|
+
/**
|
|
4
|
+
* 独立编译可执行文件运行时的初始化选项。
|
|
5
|
+
*/
|
|
6
|
+
export interface StandaloneRuntimeOptions {
|
|
7
|
+
/** 所属 Package ID */
|
|
8
|
+
packageId: string;
|
|
9
|
+
/** 版本号 */
|
|
10
|
+
version: string;
|
|
11
|
+
/** 描述信息 */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** 声明的配置依赖定义 */
|
|
14
|
+
config?: Record<string, ConfigItemDefinition>;
|
|
15
|
+
/** 打包内置的 Action 动作定义列表 */
|
|
16
|
+
actions: ActionDefinition[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 独立二进制可执行文件运行时(Standalone Runtime)。
|
|
20
|
+
*
|
|
21
|
+
* 职责:
|
|
22
|
+
* 1. 作为由 `ad build` 编译生成的单文件独立可执行文件(Standalone Binary)的运行时入口。
|
|
23
|
+
* 2. 保证与开发态(`ad run` / `ad action`)在输出信封、配置优先级、状态存储等方面的 100% 行为一致性。
|
|
24
|
+
* 3. 自带轻量 CLI 分发器,支持 `list`, `describe`, `run`, `config`, `state`, `version`, `help` 子命令。
|
|
25
|
+
*/
|
|
26
|
+
export declare class StandaloneRuntime {
|
|
27
|
+
private packageId;
|
|
28
|
+
private version;
|
|
29
|
+
private description?;
|
|
30
|
+
private configDefs?;
|
|
31
|
+
private actionsMap;
|
|
32
|
+
constructor(options: StandaloneRuntimeOptions);
|
|
33
|
+
/**
|
|
34
|
+
* 解析命令行参数并执行对应的独立二进制子命令。
|
|
35
|
+
*
|
|
36
|
+
* @param argv 命令行参数数组(通常为 process.argv.slice(2))
|
|
37
|
+
*/
|
|
38
|
+
run(argv: string[]): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare function createStandaloneRuntime(options: StandaloneRuntimeOptions): StandaloneRuntime;
|