@silvermoon-work/task-builder 0.0.0 → 0.1.0-canary-261109-1
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/LICENSE +22 -0
- package/README.md +248 -3
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +61 -0
- package/dist/cli.js.map +1 -0
- package/dist/contract.d.ts +7 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +146 -0
- package/dist/contract.js.map +1 -0
- package/dist/esbuild.d.ts +14 -0
- package/dist/esbuild.d.ts.map +1 -0
- package/dist/esbuild.js +249 -0
- package/dist/esbuild.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +274 -0
- package/dist/index.js.map +1 -0
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +142 -0
- package/dist/node.js.map +1 -0
- package/dist/streams.d.ts +3 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +84 -0
- package/dist/streams.js.map +1 -0
- package/dist/tree.d.ts +19 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +84 -0
- package/dist/tree.js.map +1 -0
- package/examples/echo/assets/greeting.txt +1 -0
- package/examples/echo/src/contract.json +15 -0
- package/examples/echo/src/main.ts +18 -0
- package/examples/echo/task.build.yaml +12 -0
- package/package.json +55 -6
package/dist/esbuild.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { isBuiltin, createRequire } from "node:module";
|
|
2
|
+
import { posix } from "node:path";
|
|
3
|
+
import enhancedResolve, {} from "enhanced-resolve";
|
|
4
|
+
import { build } from "esbuild";
|
|
5
|
+
import { listTree, readBytes, treeError } from "./tree.js";
|
|
6
|
+
const root = "/task-tree";
|
|
7
|
+
const loaders = {
|
|
8
|
+
".js": "js",
|
|
9
|
+
".mjs": "js",
|
|
10
|
+
".cjs": "js",
|
|
11
|
+
".jsx": "jsx",
|
|
12
|
+
".ts": "ts",
|
|
13
|
+
".mts": "ts",
|
|
14
|
+
".cts": "ts",
|
|
15
|
+
".tsx": "tsx",
|
|
16
|
+
".json": "json",
|
|
17
|
+
};
|
|
18
|
+
function logicalPath(path) {
|
|
19
|
+
if (typeof path !== "string" || (path !== root && !path.startsWith(`${root}/`)))
|
|
20
|
+
throw treeError("ENOENT", String(path), "Module is outside the input tree");
|
|
21
|
+
return path === root ? "" : path.slice(root.length + 1);
|
|
22
|
+
}
|
|
23
|
+
function respond(args, action) {
|
|
24
|
+
const callback = args.at(-1);
|
|
25
|
+
if (typeof callback !== "function")
|
|
26
|
+
throw new Error("Resolver requires an asynchronous callback.");
|
|
27
|
+
void Promise.resolve()
|
|
28
|
+
.then(action)
|
|
29
|
+
.then((value) => callback(null, value), (error) => callback(error instanceof Error ? error : new Error(String(error))));
|
|
30
|
+
}
|
|
31
|
+
export async function compileTree(tree, entry, options) {
|
|
32
|
+
const directories = new Map();
|
|
33
|
+
const contents = new Map();
|
|
34
|
+
let sourceBytes = 0;
|
|
35
|
+
let directoryPaths = 0;
|
|
36
|
+
const list = (path) => {
|
|
37
|
+
let value = directories.get(path);
|
|
38
|
+
if (!value) {
|
|
39
|
+
value = listTree(tree, path, options).then((entries) => {
|
|
40
|
+
directoryPaths += entries.length + 1;
|
|
41
|
+
if (directoryPaths > options.traversalPaths)
|
|
42
|
+
throw treeError("capacity_exceeded", path, "Module resolution exceeds path limit");
|
|
43
|
+
return entries;
|
|
44
|
+
});
|
|
45
|
+
directories.set(path, value);
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
};
|
|
49
|
+
const load = (path) => {
|
|
50
|
+
let value = contents.get(path);
|
|
51
|
+
if (!value) {
|
|
52
|
+
if (contents.size >= options.sourceFiles)
|
|
53
|
+
throw treeError("capacity_exceeded", path, "Module graph exceeds file limit");
|
|
54
|
+
value = readBytes(tree, path, options.fileBytes, options, (bytes) => {
|
|
55
|
+
sourceBytes += bytes;
|
|
56
|
+
if (sourceBytes > options.sourceBytes)
|
|
57
|
+
throw treeError("capacity_exceeded", path, "Module graph exceeds byte limit");
|
|
58
|
+
}).then((bytes) => {
|
|
59
|
+
try {
|
|
60
|
+
new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw treeError("invalid_bundle", path, "Module source must be valid UTF-8");
|
|
64
|
+
}
|
|
65
|
+
return bytes;
|
|
66
|
+
});
|
|
67
|
+
contents.set(path, value);
|
|
68
|
+
}
|
|
69
|
+
return value;
|
|
70
|
+
};
|
|
71
|
+
// enhanced-resolve uses callback overloads; all I/O stays in this tree adapter.
|
|
72
|
+
const fileSystem = {
|
|
73
|
+
stat(...args) {
|
|
74
|
+
respond(args, async () => {
|
|
75
|
+
const path = logicalPath(args[0]);
|
|
76
|
+
const directory = !path ||
|
|
77
|
+
(await list(posix.dirname(path) === "." ? "" : posix.dirname(path))).find((entry) => entry.name === posix.basename(path))?.kind;
|
|
78
|
+
if (!directory)
|
|
79
|
+
throw treeError("ENOENT", path, "Module path not found");
|
|
80
|
+
return {
|
|
81
|
+
isFile: () => directory === "file",
|
|
82
|
+
isDirectory: () => directory === true || directory === "directory",
|
|
83
|
+
isSymbolicLink: () => false,
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
readdir(...args) {
|
|
88
|
+
respond(args, async () => (await list(logicalPath(args[0]))).map((entry) => entry.name));
|
|
89
|
+
},
|
|
90
|
+
readFile(...args) {
|
|
91
|
+
respond(args, async () => {
|
|
92
|
+
const bytes = Buffer.from(await load(logicalPath(args[0])));
|
|
93
|
+
const encoding = args[1];
|
|
94
|
+
if (typeof encoding === "string") {
|
|
95
|
+
if (!Buffer.isEncoding(encoding))
|
|
96
|
+
throw new Error("Unsupported resolver encoding.");
|
|
97
|
+
return bytes.toString(encoding);
|
|
98
|
+
}
|
|
99
|
+
return bytes;
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
readlink(...args) {
|
|
103
|
+
respond(args, async () => {
|
|
104
|
+
const path = logicalPath(args[0]);
|
|
105
|
+
const parent = posix.dirname(path);
|
|
106
|
+
const entry = path
|
|
107
|
+
? (await list(parent === "." ? "" : parent)).find((entry) => entry.name === posix.basename(path))
|
|
108
|
+
: undefined;
|
|
109
|
+
if (entry?.target !== undefined)
|
|
110
|
+
return entry.target ? `${root}/${entry.target}` : root;
|
|
111
|
+
throw treeError("EINVAL", path, "Path has no tree alias");
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const makeResolver = (require) => enhancedResolve.ResolverFactory.createResolver({
|
|
116
|
+
fileSystem,
|
|
117
|
+
useSyncFileSystemCalls: false,
|
|
118
|
+
extensions: Object.keys(loaders),
|
|
119
|
+
extensionAlias: { ".js": [".ts", ".js"], ".mjs": [".mts", ".mjs"], ".cjs": [".cts", ".cjs"] },
|
|
120
|
+
conditionNames: ["node", require ? "require" : "import", "default"],
|
|
121
|
+
mainFields: ["main"],
|
|
122
|
+
modules: ["node_modules"],
|
|
123
|
+
symlinks: true,
|
|
124
|
+
fallback: {},
|
|
125
|
+
});
|
|
126
|
+
const importResolver = makeResolver(false);
|
|
127
|
+
const requireResolver = makeResolver(true);
|
|
128
|
+
const bindings = new Set();
|
|
129
|
+
const sdkNames = new Set([
|
|
130
|
+
"@silvermoon-work/task-sdk",
|
|
131
|
+
"@potential-guide/task-sdk",
|
|
132
|
+
options.sdk ?? "@silvermoon-work/task-sdk",
|
|
133
|
+
]);
|
|
134
|
+
const wrapper = `${root}/${posix.dirname(entry) === "." ? "" : `${posix.dirname(entry)}/`}__task_entry__.js`;
|
|
135
|
+
const plugin = {
|
|
136
|
+
name: "task-file-tree",
|
|
137
|
+
setup(api) {
|
|
138
|
+
api.onResolve({ filter: /.*/ }, async (args) => {
|
|
139
|
+
options.signal?.throwIfAborted();
|
|
140
|
+
if (isBuiltin(args.path))
|
|
141
|
+
return { path: args.path, external: true };
|
|
142
|
+
if (args.kind === "entry-point")
|
|
143
|
+
return {
|
|
144
|
+
path: options.callbackExport === undefined ? `${root}/${entry}` : wrapper,
|
|
145
|
+
namespace: "tree",
|
|
146
|
+
};
|
|
147
|
+
if (args.namespace !== "tree")
|
|
148
|
+
throw new Error("Unexpected module namespace.");
|
|
149
|
+
if (args.path.includes("\\") ||
|
|
150
|
+
args.path.startsWith("/") ||
|
|
151
|
+
[...args.path].some((character) => character.charCodeAt(0) < 32))
|
|
152
|
+
throw new Error(`Imports must be tree-relative or package specifiers: ${args.path}`);
|
|
153
|
+
const resolver = args.kind === "require-call" ? requireResolver : importResolver;
|
|
154
|
+
const path = await new Promise((resolve, reject) => {
|
|
155
|
+
resolver.resolve({}, posix.dirname(args.importer), args.path, {}, (error, path, request) => {
|
|
156
|
+
if (error) {
|
|
157
|
+
reject(error);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (!path) {
|
|
161
|
+
reject(new Error(`Module did not resolve: ${args.path}`));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const name = request?.descriptionFileData?.name;
|
|
165
|
+
if (typeof name === "string" &&
|
|
166
|
+
sdkNames.has(name) &&
|
|
167
|
+
/^binding\.[jt]s$/.test(posix.basename(path)))
|
|
168
|
+
bindings.add(path);
|
|
169
|
+
resolve(path);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
logicalPath(path);
|
|
173
|
+
return { path, namespace: "tree" };
|
|
174
|
+
});
|
|
175
|
+
api.onLoad({ filter: /.*/, namespace: "tree" }, async (args) => {
|
|
176
|
+
options.signal?.throwIfAborted();
|
|
177
|
+
if (options.callbackExport !== undefined && args.path === wrapper)
|
|
178
|
+
return {
|
|
179
|
+
contents: `import {runTask} from ${JSON.stringify(options.sdk ?? "@silvermoon-work/task-sdk")};
|
|
180
|
+
runTask(async (input, context) => {
|
|
181
|
+
const module = await import(${JSON.stringify(`./${posix.basename(entry)}`)});
|
|
182
|
+
const callback = module[${JSON.stringify(options.callbackExport)}];
|
|
183
|
+
if (typeof callback !== "function") throw new Error("Task callback export is not a function.");
|
|
184
|
+
return await callback(input, context);
|
|
185
|
+
});`,
|
|
186
|
+
loader: "js",
|
|
187
|
+
};
|
|
188
|
+
if (options.binding && bindings.has(args.path))
|
|
189
|
+
return {
|
|
190
|
+
contents: `export const binding = ${JSON.stringify({ declaration: options.binding })};`,
|
|
191
|
+
loader: "js",
|
|
192
|
+
};
|
|
193
|
+
const path = logicalPath(args.path);
|
|
194
|
+
const loader = loaders[posix.extname(path)];
|
|
195
|
+
if (!loader)
|
|
196
|
+
throw treeError("EINVAL", path, "Unsupported module extension");
|
|
197
|
+
return { contents: await load(path), loader };
|
|
198
|
+
});
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
if (options.callbackExport !== undefined &&
|
|
202
|
+
!/^(?:default|[A-Za-z_$][A-Za-z0-9_$]*)$/.test(options.callbackExport))
|
|
203
|
+
throw new Error("Invalid callback export name.");
|
|
204
|
+
const result = await build({
|
|
205
|
+
entryPoints: [entry],
|
|
206
|
+
bundle: true,
|
|
207
|
+
platform: "node",
|
|
208
|
+
target: "node22",
|
|
209
|
+
format: "cjs",
|
|
210
|
+
write: false,
|
|
211
|
+
tsconfigRaw: {},
|
|
212
|
+
define: { "import.meta.url": "__artifactURL" },
|
|
213
|
+
banner: {
|
|
214
|
+
js: options.binding
|
|
215
|
+
? 'const __artifactURL = require("node:url").pathToFileURL(__filename).href;'
|
|
216
|
+
: `const __filename=${JSON.stringify(`task-tree:///${entry}`)};const __dirname=${JSON.stringify(`task-tree:///${posix.dirname(entry)}`)};const __artifactURL=__filename;`,
|
|
217
|
+
},
|
|
218
|
+
metafile: true,
|
|
219
|
+
minify: true,
|
|
220
|
+
legalComments: "eof",
|
|
221
|
+
logLevel: "silent",
|
|
222
|
+
logOverride: {
|
|
223
|
+
"unsupported-dynamic-import": "error",
|
|
224
|
+
"unsupported-require-call": "error",
|
|
225
|
+
"empty-import-meta": "error",
|
|
226
|
+
},
|
|
227
|
+
plugins: [plugin],
|
|
228
|
+
});
|
|
229
|
+
options.signal?.throwIfAborted();
|
|
230
|
+
if (result.outputFiles.length !== 1 ||
|
|
231
|
+
Object.values(result.metafile.outputs).some((output) => output.imports.some((dependency) => dependency.external && !isBuiltin(dependency.path))))
|
|
232
|
+
throw new Error("Task Worker must bundle every non-builtin dependency.");
|
|
233
|
+
return result.outputFiles[0].contents;
|
|
234
|
+
}
|
|
235
|
+
export function evaluateContract(bytes) {
|
|
236
|
+
const module = { exports: {} };
|
|
237
|
+
const require = createRequire(import.meta.url);
|
|
238
|
+
const builtinRequire = (specifier) => {
|
|
239
|
+
if (!isBuiltin(specifier))
|
|
240
|
+
throw new Error(`Contract has an unbundled dependency: ${specifier}`);
|
|
241
|
+
return require(specifier);
|
|
242
|
+
};
|
|
243
|
+
new Function("require", "module", "exports", new TextDecoder("utf-8", { fatal: true }).decode(bytes))(builtinRequire, module, module.exports);
|
|
244
|
+
const value = module.exports;
|
|
245
|
+
if (!value || typeof value !== "object" || !("default" in value))
|
|
246
|
+
throw new Error("Contract module must default-export a contract.");
|
|
247
|
+
return value.default;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=esbuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esbuild.js","sourceRoot":"","sources":["../src/esbuild.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type ReadonlyFileTree, type ReadOptions } from "./tree.js";
|
|
2
|
+
export type { ReadonlyFileTree, ReadOptions, TreeEntry } from "./tree.js";
|
|
3
|
+
export declare const taskBuildSchemaUri = "https://shazhou-ww.github.io/potential-guide/schemas/artifacts/task-build/v1.json";
|
|
4
|
+
export interface BuilderLimits {
|
|
5
|
+
readonly fileBytes: number;
|
|
6
|
+
readonly bytes: number;
|
|
7
|
+
readonly sourceBytes: number;
|
|
8
|
+
readonly sourceFiles: number;
|
|
9
|
+
readonly traversalPaths: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const defaultBuilderLimits: BuilderLimits;
|
|
12
|
+
export interface TaskContract {
|
|
13
|
+
readonly input: unknown;
|
|
14
|
+
readonly result: unknown;
|
|
15
|
+
readonly message: unknown;
|
|
16
|
+
readonly schemas?: Readonly<Record<string, unknown>>;
|
|
17
|
+
}
|
|
18
|
+
export interface TaskBuildOptions extends ReadOptions {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly runtime: {
|
|
21
|
+
readonly minVersion: string;
|
|
22
|
+
};
|
|
23
|
+
readonly source: {
|
|
24
|
+
readonly entry: string;
|
|
25
|
+
readonly contract: string | TaskContract;
|
|
26
|
+
readonly mode?: "callback" | "explicit";
|
|
27
|
+
readonly exportName?: string;
|
|
28
|
+
readonly sdk?: string;
|
|
29
|
+
};
|
|
30
|
+
readonly include?: readonly {
|
|
31
|
+
readonly from: string;
|
|
32
|
+
readonly to: string;
|
|
33
|
+
}[];
|
|
34
|
+
readonly binary?: readonly string[];
|
|
35
|
+
readonly allowContractExecution?: boolean;
|
|
36
|
+
readonly limits?: Partial<BuilderLimits>;
|
|
37
|
+
}
|
|
38
|
+
/** Compile modules now; resources remain lazy streams owned by the caller's input tree. */
|
|
39
|
+
export declare function buildTaskBundle(input: ReadonlyFileTree, options: TaskBuildOptions): Promise<ReadonlyFileTree>;
|
|
40
|
+
export interface TaskBuildFile {
|
|
41
|
+
readonly options: TaskBuildOptions;
|
|
42
|
+
readonly outDirectory: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function readTaskBuild(input: ReadonlyFileTree, path: string, options?: ReadOptions & {
|
|
45
|
+
readonly allowContractExecution?: boolean;
|
|
46
|
+
}): Promise<TaskBuildFile>;
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAEjB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE1E,eAAO,MAAM,kBAAkB,sFACsD,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,oBAAoB,EAAE,aAMjC,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1C;AAyHD,2FAA2F;AAC3F,wBAAsB,eAAe,CACnC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA0E3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAW,GAAG;IAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAO,GACxE,OAAO,CAAC,aAAa,CAAC,CA4GxB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { json, normalizeTaskText, parseTaskBundleYaml, readTaskBundle, selectTaskBinary, taskBundleLimits, taskBundlePattern, taskSchemaUri, validateTaskBundle, } from "@silvermoon-work/task-protocol";
|
|
3
|
+
import { stringify } from "yaml";
|
|
4
|
+
import { contractSchemas } from "./contract.js";
|
|
5
|
+
import { compileTree, evaluateContract } from "./esbuild.js";
|
|
6
|
+
import { resourceStream } from "./streams.js";
|
|
7
|
+
import { checkTreePath, listTree, memoryFile, readBytes, treeError, } from "./tree.js";
|
|
8
|
+
export const taskBuildSchemaUri = "https://shazhou-ww.github.io/potential-guide/schemas/artifacts/task-build/v1.json";
|
|
9
|
+
export const defaultBuilderLimits = Object.freeze({
|
|
10
|
+
fileBytes: taskBundleLimits.fileBytes,
|
|
11
|
+
bytes: taskBundleLimits.bytes,
|
|
12
|
+
sourceBytes: 128 * 1024 * 1024,
|
|
13
|
+
sourceFiles: 4096,
|
|
14
|
+
traversalPaths: 16_384,
|
|
15
|
+
});
|
|
16
|
+
function limitsFor(options) {
|
|
17
|
+
const limits = { ...defaultBuilderLimits, ...options.limits };
|
|
18
|
+
for (const value of Object.values(limits))
|
|
19
|
+
if (!Number.isSafeInteger(value) || value <= 0)
|
|
20
|
+
throw new Error("Invalid builder byte/path limit.");
|
|
21
|
+
if (limits.fileBytes > taskBundleLimits.fileBytes || limits.bytes > taskBundleLimits.bytes)
|
|
22
|
+
throw new Error("Builder limits cannot exceed Bundle protocol limits.");
|
|
23
|
+
return limits;
|
|
24
|
+
}
|
|
25
|
+
async function selectResources(input, rules, limits, options) {
|
|
26
|
+
const selected = new Map();
|
|
27
|
+
const sources = new Set();
|
|
28
|
+
for (const rule of rules) {
|
|
29
|
+
const matcher = taskBundlePattern(rule.from);
|
|
30
|
+
if (!rule.to.startsWith("resources/") || !rule.to.endsWith("/"))
|
|
31
|
+
throw new Error("Include destinations must be resources/ directories ending in /.");
|
|
32
|
+
checkTreePath(rule.to.slice(0, -1));
|
|
33
|
+
const segments = rule.from.split("/");
|
|
34
|
+
const wildcard = segments.findIndex((part) => /[*?]/.test(part));
|
|
35
|
+
const base = (wildcard < 0 ? segments.slice(0, -1) : segments.slice(0, wildcard)).join("/");
|
|
36
|
+
let visited = 0;
|
|
37
|
+
let matches = 0;
|
|
38
|
+
const walk = async (directory) => {
|
|
39
|
+
for (const entry of await listTree(input, directory, options)) {
|
|
40
|
+
if (++visited > limits.traversalPaths)
|
|
41
|
+
throw treeError("capacity_exceeded", directory, "Include traversal exceeds path limit");
|
|
42
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules")
|
|
43
|
+
continue;
|
|
44
|
+
const path = directory ? `${directory}/${entry.name}` : entry.name;
|
|
45
|
+
if (entry.kind === "directory")
|
|
46
|
+
await walk(path);
|
|
47
|
+
else if (matcher.test(path)) {
|
|
48
|
+
const destination = `${rule.to}${base ? path.slice(base.length + 1) : path}`;
|
|
49
|
+
if (sources.has(path) || selected.has(destination))
|
|
50
|
+
throw new Error(`Overlapping include selections: ${destination}`);
|
|
51
|
+
selected.set(destination, path);
|
|
52
|
+
sources.add(path);
|
|
53
|
+
matches++;
|
|
54
|
+
if (selected.size > taskBundleLimits.files - 2)
|
|
55
|
+
throw new Error("Bundle exceeds file capacity.");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
await walk(base);
|
|
60
|
+
if (!matches)
|
|
61
|
+
throw new Error(`Include rule matched no files: ${rule.from}`);
|
|
62
|
+
}
|
|
63
|
+
return selected;
|
|
64
|
+
}
|
|
65
|
+
function outputTree(input, generated, resources, binary, limits) {
|
|
66
|
+
const directories = new Map([["", new Map()]]);
|
|
67
|
+
const sizes = new Map([...generated].map(([path, bytes]) => [path, bytes.byteLength]));
|
|
68
|
+
let total = [...sizes.values()].reduce((a, b) => a + b, 0);
|
|
69
|
+
const observe = (path, bytes) => {
|
|
70
|
+
const previous = sizes.get(path) ?? 0;
|
|
71
|
+
if (bytes <= previous)
|
|
72
|
+
return;
|
|
73
|
+
if (total + bytes - previous > limits.bytes)
|
|
74
|
+
throw treeError("capacity_exceeded", path, "Bundle exceeds total byte limit");
|
|
75
|
+
total += bytes - previous;
|
|
76
|
+
sizes.set(path, bytes);
|
|
77
|
+
};
|
|
78
|
+
for (const path of [...generated.keys(), ...resources.keys()]) {
|
|
79
|
+
const segments = path.split("/");
|
|
80
|
+
let parent = "";
|
|
81
|
+
for (const [index, name] of segments.entries()) {
|
|
82
|
+
const directory = index < segments.length - 1;
|
|
83
|
+
directories.get(parent).set(name, { name, kind: directory ? "directory" : "file" });
|
|
84
|
+
if (directory) {
|
|
85
|
+
parent = parent ? `${parent}/${name}` : name;
|
|
86
|
+
if (!directories.has(parent))
|
|
87
|
+
directories.set(parent, new Map());
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return Object.freeze({
|
|
92
|
+
async list(path, options = {}) {
|
|
93
|
+
checkTreePath(path);
|
|
94
|
+
options.signal?.throwIfAborted();
|
|
95
|
+
const entries = directories.get(path);
|
|
96
|
+
if (!entries)
|
|
97
|
+
throw treeError(generated.has(path) || resources.has(path) ? "ENOTDIR" : "ENOENT", path, "Output directory not found");
|
|
98
|
+
return [...entries.values()]
|
|
99
|
+
.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))
|
|
100
|
+
.map((entry) => Object.freeze({ ...entry }));
|
|
101
|
+
},
|
|
102
|
+
async read(path, options = {}) {
|
|
103
|
+
checkTreePath(path);
|
|
104
|
+
options.signal?.throwIfAborted();
|
|
105
|
+
const bytes = generated.get(path);
|
|
106
|
+
if (bytes)
|
|
107
|
+
return memoryFile(bytes, options);
|
|
108
|
+
const source = resources.get(path);
|
|
109
|
+
if (source !== undefined)
|
|
110
|
+
return resourceStream(input, source, path, binary.has(path), limits.fileBytes, observe, options);
|
|
111
|
+
throw treeError(directories.has(path) ? "EISDIR" : "ENOENT", path, "Output file not found");
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** Compile modules now; resources remain lazy streams owned by the caller's input tree. */
|
|
116
|
+
export async function buildTaskBundle(input, options) {
|
|
117
|
+
options.signal?.throwIfAborted();
|
|
118
|
+
checkTreePath(options.source.entry);
|
|
119
|
+
if (!options.source.entry)
|
|
120
|
+
throw new Error("Task entry must be a file.");
|
|
121
|
+
if (options.source.mode !== undefined && !["callback", "explicit"].includes(options.source.mode))
|
|
122
|
+
throw new Error("Invalid Task entry mode.");
|
|
123
|
+
if (options.source.mode !== "callback" && options.source.exportName !== undefined)
|
|
124
|
+
throw new Error("Only callback entries can select an export.");
|
|
125
|
+
const limits = limitsFor(options);
|
|
126
|
+
const resources = await selectResources(input, options.include ?? [], limits, options);
|
|
127
|
+
let contract = options.source.contract;
|
|
128
|
+
if (typeof contract === "string") {
|
|
129
|
+
checkTreePath(contract);
|
|
130
|
+
if (posix.extname(contract) === ".json")
|
|
131
|
+
contract = parseTaskBundleYaml(await readBytes(input, contract, 65_536, options));
|
|
132
|
+
else {
|
|
133
|
+
if (!options.allowContractExecution)
|
|
134
|
+
throw new Error("Code contracts require allowContractExecution: true (CLI --trusted-contract).");
|
|
135
|
+
contract = evaluateContract(await compileTree(input, contract, {
|
|
136
|
+
...limits,
|
|
137
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const schemas = contractSchemas(contract);
|
|
142
|
+
const primarySchemaPaths = [
|
|
143
|
+
"schemas/input.json",
|
|
144
|
+
"schemas/result.json",
|
|
145
|
+
"schemas/message.json",
|
|
146
|
+
];
|
|
147
|
+
const generated = new Map();
|
|
148
|
+
for (const { path, document } of schemas)
|
|
149
|
+
generated.set(path, Buffer.from(`${JSON.stringify(document, null, 2)}\n`));
|
|
150
|
+
const include = ["task.yaml", "worker.cjs", ...generated.keys(), ...resources.keys()].sort();
|
|
151
|
+
const declaration = validateTaskBundle({
|
|
152
|
+
$schema: taskSchemaUri,
|
|
153
|
+
name: options.name,
|
|
154
|
+
runtime: { type: "node", minVersion: options.runtime.minVersion },
|
|
155
|
+
entry: "worker.cjs",
|
|
156
|
+
include,
|
|
157
|
+
binary: selectTaskBinary(include, options.binary ?? []),
|
|
158
|
+
inputSchema: { $ref: primarySchemaPaths[0] },
|
|
159
|
+
resultSchema: { $ref: primarySchemaPaths[1] },
|
|
160
|
+
messageSchema: { $ref: primarySchemaPaths[2] },
|
|
161
|
+
});
|
|
162
|
+
generated.set("task.yaml", Buffer.from(stringify(declaration)));
|
|
163
|
+
// Empty resource placeholders check manifest and Schema closure, not deferred resource bytes.
|
|
164
|
+
const structuralFiles = new Map(generated);
|
|
165
|
+
structuralFiles.set("worker.cjs", Buffer.from("/* pending compilation */"));
|
|
166
|
+
for (const path of resources.keys())
|
|
167
|
+
structuralFiles.set(path, new Uint8Array());
|
|
168
|
+
const { resolved } = readTaskBundle(structuralFiles, limits);
|
|
169
|
+
generated.set("worker.cjs", normalizeTaskText(await compileTree(input, options.source.entry, {
|
|
170
|
+
...limits,
|
|
171
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
172
|
+
binding: resolved,
|
|
173
|
+
...(options.source.mode === "callback"
|
|
174
|
+
? { callbackExport: options.source.exportName ?? "default" }
|
|
175
|
+
: {}),
|
|
176
|
+
...(options.source.sdk ? { sdk: options.source.sdk } : {}),
|
|
177
|
+
}), "worker.cjs"));
|
|
178
|
+
structuralFiles.set("worker.cjs", generated.get("worker.cjs"));
|
|
179
|
+
readTaskBundle(structuralFiles, limits);
|
|
180
|
+
options.signal?.throwIfAborted();
|
|
181
|
+
return outputTree(input, generated, resources, new Set(declaration.binary), limits);
|
|
182
|
+
}
|
|
183
|
+
export async function readTaskBuild(input, path, options = {}) {
|
|
184
|
+
checkTreePath(path);
|
|
185
|
+
const value = parseTaskBundleYaml(await readBytes(input, path, 65_536, options));
|
|
186
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
187
|
+
throw new Error("Task build file must contain an object.");
|
|
188
|
+
if ((value.$schema !== undefined && value.$schema !== taskBuildSchemaUri) ||
|
|
189
|
+
Object.keys(value).some((key) => !["$schema", "name", "runtime", "source", "include", "binary", "outDirectory"].includes(key)) ||
|
|
190
|
+
typeof value.name !== "string" ||
|
|
191
|
+
typeof value.outDirectory !== "string")
|
|
192
|
+
throw new Error("Invalid Task build file fields.");
|
|
193
|
+
const runtime = value.runtime;
|
|
194
|
+
const source = value.source;
|
|
195
|
+
if (!runtime ||
|
|
196
|
+
typeof runtime !== "object" ||
|
|
197
|
+
Array.isArray(runtime) ||
|
|
198
|
+
Object.keys(runtime).some((key) => key !== "minVersion") ||
|
|
199
|
+
typeof runtime.minVersion !== "string" ||
|
|
200
|
+
!source ||
|
|
201
|
+
typeof source !== "object" ||
|
|
202
|
+
Array.isArray(source) ||
|
|
203
|
+
Object.keys(source).some((key) => !["entry", "contract", "mode", "exportName", "sdk"].includes(key)) ||
|
|
204
|
+
typeof source.entry !== "string" ||
|
|
205
|
+
typeof source.contract !== "string" ||
|
|
206
|
+
(source.mode !== undefined && source.mode !== "explicit" && source.mode !== "callback") ||
|
|
207
|
+
(source.exportName !== undefined && typeof source.exportName !== "string") ||
|
|
208
|
+
(source.sdk !== undefined && typeof source.sdk !== "string"))
|
|
209
|
+
throw new Error("Invalid Task runtime or source.");
|
|
210
|
+
const base = posix.dirname(path);
|
|
211
|
+
const relative = (name) => {
|
|
212
|
+
checkTreePath(name);
|
|
213
|
+
if (!name)
|
|
214
|
+
throw new Error("Build file paths must not be empty.");
|
|
215
|
+
return base === "." ? name : `${base}/${name}`;
|
|
216
|
+
};
|
|
217
|
+
const include = [];
|
|
218
|
+
if (value.include !== undefined) {
|
|
219
|
+
if (!Array.isArray(value.include))
|
|
220
|
+
throw new Error("Include must be an array.");
|
|
221
|
+
for (const rule of value.include) {
|
|
222
|
+
if (!rule ||
|
|
223
|
+
typeof rule !== "object" ||
|
|
224
|
+
Array.isArray(rule) ||
|
|
225
|
+
Object.keys(rule).sort().join(",") !== "from,to" ||
|
|
226
|
+
typeof rule.from !== "string" ||
|
|
227
|
+
typeof rule.to !== "string")
|
|
228
|
+
throw new Error("Invalid include rule.");
|
|
229
|
+
taskBundlePattern(rule.from);
|
|
230
|
+
include.push({ from: base === "." ? rule.from : `${base}/${rule.from}`, to: rule.to });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (value.binary !== undefined &&
|
|
234
|
+
(!Array.isArray(value.binary) || value.binary.some((pattern) => typeof pattern !== "string")))
|
|
235
|
+
throw new Error("Binary must be an array of patterns.");
|
|
236
|
+
const binary = [];
|
|
237
|
+
if (Array.isArray(value.binary))
|
|
238
|
+
for (const pattern of value.binary) {
|
|
239
|
+
if (typeof pattern !== "string")
|
|
240
|
+
throw new Error("Invalid binary pattern.");
|
|
241
|
+
binary.push(pattern);
|
|
242
|
+
}
|
|
243
|
+
const buildOptions = {
|
|
244
|
+
name: value.name,
|
|
245
|
+
runtime: { minVersion: runtime.minVersion },
|
|
246
|
+
source: {
|
|
247
|
+
entry: relative(source.entry),
|
|
248
|
+
contract: relative(source.contract),
|
|
249
|
+
...(source.mode ? { mode: source.mode } : {}),
|
|
250
|
+
...(source.exportName !== undefined ? { exportName: source.exportName } : {}),
|
|
251
|
+
...(source.sdk !== undefined ? { sdk: source.sdk } : {}),
|
|
252
|
+
},
|
|
253
|
+
include,
|
|
254
|
+
binary,
|
|
255
|
+
...options,
|
|
256
|
+
};
|
|
257
|
+
const outDirectory = relative(value.outDirectory);
|
|
258
|
+
if ([path, buildOptions.source.entry, String(buildOptions.source.contract)].some((inputPath) => inputPath === outDirectory || inputPath.startsWith(`${outDirectory}/`)))
|
|
259
|
+
throw new Error("Output must not contain build inputs.");
|
|
260
|
+
for (const rule of include) {
|
|
261
|
+
const parts = rule.from.split("/");
|
|
262
|
+
const wildcard = parts.findIndex((part) => /[*?]/.test(part));
|
|
263
|
+
const includeRoot = (wildcard < 0 ? parts.slice(0, -1) : parts.slice(0, wildcard)).join("/");
|
|
264
|
+
if (!includeRoot ||
|
|
265
|
+
includeRoot === outDirectory ||
|
|
266
|
+
includeRoot.startsWith(`${outDirectory}/`) ||
|
|
267
|
+
outDirectory.startsWith(`${includeRoot}/`))
|
|
268
|
+
throw new Error("Include selection must not traverse the output directory.");
|
|
269
|
+
}
|
|
270
|
+
// Validate JSON-only configuration before a caller can perform output I/O.
|
|
271
|
+
json(value);
|
|
272
|
+
return { options: buildOptions, outDirectory };
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ReadonlyFileTree, type ReadOptions } from "./tree.js";
|
|
2
|
+
/** A live read-only view, not an atomic snapshot. Confined dependency links are followed. */
|
|
3
|
+
export declare function directoryTree(directory: string): Promise<ReadonlyFileTree>;
|
|
4
|
+
/** Write sequentially into a new directory; never replace an existing output. */
|
|
5
|
+
export declare function writeDirectory(tree: ReadonlyFileTree, directory: string, options?: ReadOptions): Promise<readonly string[]>;
|
|
6
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAEjB,MAAM,WAAW,CAAC;AASnB,6FAA6F;AAC7F,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2ChF;AAED,iFAAiF;AACjF,wBAAsB,cAAc,CAClC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CA6E5B"}
|