@actiondock/builder 2.0.12 → 2.2.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/README.md +46 -30
- package/dist/archive.d.ts +24 -3
- package/dist/archive.js +519 -0
- package/dist/build.d.ts +5 -37
- package/dist/build.js +576 -0
- package/dist/dependency-check.d.ts +14 -0
- package/dist/dependency-check.js +246 -0
- package/dist/errors.d.ts +3 -30
- package/dist/errors.js +22 -0
- package/dist/exporter.d.ts +24 -14
- package/dist/exporter.js +761 -0
- package/dist/fs-utils.d.ts +16 -0
- package/dist/fs-utils.js +146 -0
- package/dist/index.d.ts +16 -7
- package/dist/index.js +21 -1875
- package/dist/manifest.d.ts +75 -0
- package/dist/manifest.js +213 -0
- package/dist/pack.d.ts +13 -0
- package/dist/pack.js +339 -0
- package/dist/planner.d.ts +51 -9
- package/dist/planner.js +681 -0
- package/dist/types.d.ts +204 -73
- package/dist/types.js +1 -0
- package/package.json +8 -9
- package/dist/compiler.d.ts +0 -22
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# @actiondock/builder
|
|
2
2
|
|
|
3
|
-
ActionDock 2.0
|
|
3
|
+
ActionDock 2.0 构建规划、目录交付与技能导出包。
|
|
4
4
|
|
|
5
|
-
[](https://nodejs.org/)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
8
8
|
|
|
9
|
-
`@actiondock/builder`
|
|
9
|
+
`@actiondock/builder` 负责静态分析依赖关系、构建 Node.js 目录交付产物、打包标准 npm 压缩包以及将工具和规程导出为可分发的 Agent Skill 资产。
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -14,56 +14,72 @@ ActionDock 2.0 构建规划、编译器调度与技能导出包。
|
|
|
14
14
|
|
|
15
15
|
### BuildPlanner 依赖闭包计算器
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
通过静态分析依赖关系与 Playbook 规程,无需执行任何业务代码,杜绝模块加载过程中的副作用:
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
19
|
+
- 规划模型:[SelectionPlanner](./src/planner.ts)(别名 BuildPlanner)读取 `actiondock.json` 与 Playbook 的 YAML 头部,提取 Actions 与 Playbooks 映射。
|
|
20
|
+
- 递归依赖闭包:自顶向下递归解析 Action 的 `uses` 声明列表,构建完整的静态调用图。
|
|
21
|
+
- 规程驱动按需剪枝:支持针对特定 Playbook 进行定向打包,自动计算并仅保留该 Playbook 直接或间接调用的最小 Action 集合,实现依赖按需裁剪。
|
|
22
|
+
- 静态资产收集:自动识别并关联声明的静态资产文件。
|
|
23
23
|
|
|
24
|
-
###
|
|
24
|
+
### buildProject 目录交付产物构建
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
[buildProject](./src/build.ts) 将 Action Package 构建为包含运行入口、依赖闭包与静态资产的 Node.js 目录交付产物:
|
|
27
27
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
28
|
+
- 目录交付格式:生成标准 Node.js 可执行目录,无需单文件二进制编译器,天然跨平台兼容。
|
|
29
|
+
- 预置生产依赖:支持 `--vendor-deps` 选项,将锁定的生产依赖物化至产物目录内,实现离线自包含运行。
|
|
30
|
+
- 可重现构建检验:支持 `--require-reproducible` 选项,当存在不受控的生命周期安装脚本时严格报错阻断,保证构建确定性。
|
|
31
|
+
- 标准归档打包:支持 `--archive` 选项,自动将构建目录打包为标准 `.zip` 压缩归档文件。
|
|
32
|
+
- 原单文件二进制编译选项(`--target` 与 `--bytecode`)已彻底删除,统一采用 Node.js 目录交付格式。
|
|
33
|
+
|
|
34
|
+
### packProject npm 包打包
|
|
35
|
+
|
|
36
|
+
[packProject](./src/pack.ts) 将 Action Package 打包为符合 npm 规范的 `.tgz` 压缩包:
|
|
37
|
+
|
|
38
|
+
- 标准分发包生成:生成可直接发布至 npm 注册表或通过包管理器安装的 tarball 产物。
|
|
39
|
+
- 预检模式:支持 `--dry-run` 选项,完整校验打包清单、动作列表与文件总数,无需实际写入磁盘。
|
|
40
|
+
- 完整性校验:自动计算并输出打包产物的字节大小与 SHA-256 校验和。
|
|
32
41
|
|
|
33
42
|
### SkillExporter 技能导出器
|
|
34
43
|
|
|
35
|
-
将原子 Action 与操作规程 Playbook 打包导出为面向主流 AI 智能体生态的标准 Agent Skill 资产:
|
|
44
|
+
[SkillExporter](./src/exporter.ts) 将原子 Action 与操作规程 Playbook 打包导出为面向主流 AI 智能体生态的标准 Agent Skill 资产:
|
|
36
45
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
46
|
+
- 生成 SKILL.md 指令:提取 Playbook 规程内容与工具元数据,合成符合智能体规范的操作指南文档与声明头部。
|
|
47
|
+
- 源码模式技能导出:使用 `--mode source`(默认模式),保留 TypeScript 源码与依赖声明,适合具备 Node.js 运行环境的智能体容器直接运行。
|
|
48
|
+
- 本地依赖完整性强校验:严格断言 Action 源码中的相对路径导入。若引用了未在 `actions` 且未在 `files` 字段中声明的本地模块,直接中断构建并抛出 `BuilderError`(错误码 `UNMET_LOCAL_DEPENDENCY`),彻底杜绝缺失依赖的产物分发。
|
|
49
|
+
- 自包含 Node 目录技能导出:使用 `--mode node`,将自包含的 Node.js 交付目录与技能文档一体化打包,开箱即用。
|
|
50
|
+
- 复合套件导出:支持 `--bundle` 选项将工作区内的多个包统一导出为复合工作区技能套件。
|
|
51
|
+
- 压缩归档:支持 `--archive` 选项将导出的技能目录打包为 `.zip` 或 `.tar.gz` 格式。
|
|
41
52
|
|
|
42
53
|
---
|
|
43
54
|
|
|
44
55
|
## 编程调用示例
|
|
45
56
|
|
|
46
57
|
```ts
|
|
47
|
-
import {
|
|
58
|
+
import { buildProject, packProject, SelectionPlanner, SkillExporter } from "@actiondock/builder";
|
|
48
59
|
|
|
49
60
|
// 计算依赖规划闭包
|
|
50
|
-
const planner = new
|
|
61
|
+
const planner = new SelectionPlanner({ projectRoot: "/path/to/project" });
|
|
51
62
|
const plan = planner.createPlan({ playbookId: "review-pr" });
|
|
52
63
|
|
|
53
|
-
//
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
// 构建 Node.js 目录交付产物
|
|
65
|
+
const buildResult = await buildProject({
|
|
66
|
+
projectRoot: "/path/to/project",
|
|
67
|
+
outDir: "./dist/delivery",
|
|
68
|
+
archive: true,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// 打包为 npm tarball
|
|
72
|
+
const packResult = await packProject({
|
|
73
|
+
projectRoot: "/path/to/project",
|
|
74
|
+
outDir: "./dist/npm",
|
|
59
75
|
});
|
|
60
76
|
|
|
61
|
-
//
|
|
77
|
+
// 导出 Agent Skill 资产
|
|
62
78
|
const exporter = new SkillExporter({ projectRoot: "/path/to/project" });
|
|
63
|
-
const
|
|
79
|
+
const skillResult = await exporter.export({
|
|
64
80
|
outputDir: "./dist/skills",
|
|
65
81
|
playbookId: "review-pr",
|
|
66
|
-
|
|
82
|
+
mode: "source",
|
|
67
83
|
});
|
|
68
84
|
```
|
|
69
85
|
|
package/dist/archive.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Readable, Transform, Writable } from "node:stream";
|
|
1
2
|
/**
|
|
2
3
|
* 将目录打包为标准 zip 归档(PKZIP APPNOTE 结构)。
|
|
3
4
|
* 直接流式分块写入磁盘,避免在内存中积压全量归档内容。
|
|
@@ -7,7 +8,14 @@
|
|
|
7
8
|
*/
|
|
8
9
|
export declare function createZipArchive(dir: string, outPath: string): void;
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
+
* 向可写流安全写入数据块,严格处理背压与流异常。
|
|
12
|
+
* 当 stream.write 返回 false 时挂起等待 drain 事件触发;
|
|
13
|
+
* 若流销毁或出错则安全拒绝。
|
|
14
|
+
*/
|
|
15
|
+
export declare function writeToStream(stream: Writable, chunk: Buffer): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 异步流式 zip 归档:基于 PKZIP Data Descriptor 规范实现真正流式打包,
|
|
18
|
+
* 逐文件流式读取与增量压缩写入磁盘,避免在内存中积压全量原文件与压缩内容。
|
|
11
19
|
*/
|
|
12
20
|
export declare function createZipArchiveAsync(dir: string, outPath: string): Promise<void>;
|
|
13
21
|
/**
|
|
@@ -17,10 +25,23 @@ export declare function createZipArchiveAsync(dir: string, outPath: string): Pro
|
|
|
17
25
|
* @param outPath 输出 tar.gz 文件路径
|
|
18
26
|
*/
|
|
19
27
|
export declare function createTarGzArchive(dir: string, outPath: string): void;
|
|
28
|
+
/** tar.gz 异步流式归档配置选项 */
|
|
29
|
+
export interface TarGzArchiveOptions {
|
|
30
|
+
/** 自定义可读流创建器,默认使用 node:fs 的 createReadStream */
|
|
31
|
+
createReadStream?: (path: string) => Readable;
|
|
32
|
+
/** 自定义可写流创建器,默认使用 node:fs 的 createWriteStream */
|
|
33
|
+
createWriteStream?: (path: string) => Writable;
|
|
34
|
+
/** 自定义 gzip 转换流创建器,默认使用 node:zlib 的 createGzip */
|
|
35
|
+
createGzip?: () => Transform;
|
|
36
|
+
/** 自定义 gzip 压缩级别,默认值为 9 */
|
|
37
|
+
level?: number;
|
|
38
|
+
}
|
|
20
39
|
/**
|
|
21
|
-
* 将目录异步流式打包为标准 tar.gz 归档(USTAR
|
|
40
|
+
* 将目录异步流式打包为标准 tar.gz 归档(USTAR 与 gzip 流),避免在内存中积压全量原文件与压缩内容。
|
|
41
|
+
* 严格基于 Node.js 异步流背压机制与错误传播链路实现。
|
|
22
42
|
*
|
|
23
43
|
* @param dir 待打包目录
|
|
24
44
|
* @param outPath 输出 tar.gz 文件路径
|
|
45
|
+
* @param options 归档配置选项
|
|
25
46
|
*/
|
|
26
|
-
export declare function createTarGzArchiveAsync(dir: string, outPath: string): Promise<void>;
|
|
47
|
+
export declare function createTarGzArchiveAsync(dir: string, outPath: string, options?: TarGzArchiveOptions): Promise<void>;
|