@workbench-ai/workbench-core 0.0.46 → 0.0.47
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/execution-events.d.ts +2 -2
- package/dist/execution-events.d.ts.map +1 -1
- package/dist/execution-events.js +3 -3
- package/dist/{execution-phases.d.ts → execution-evidence.d.ts} +8 -7
- package/dist/execution-evidence.d.ts.map +1 -0
- package/dist/{execution-phases.js → execution-evidence.js} +91 -51
- package/dist/execution-graph.js +1 -2
- package/dist/execution-jobs.js +1 -1
- package/dist/execution-outputs.d.ts.map +1 -1
- package/dist/execution-outputs.js +5 -10
- package/dist/execution-runtime-types.d.ts +7 -3
- package/dist/execution-runtime-types.d.ts.map +1 -1
- package/dist/execution-traces.d.ts +11 -1
- package/dist/execution-traces.d.ts.map +1 -1
- package/dist/execution-traces.js +305 -2
- package/dist/generic-spec.d.ts +8 -3
- package/dist/generic-spec.d.ts.map +1 -1
- package/dist/generic-spec.js +26 -37
- package/dist/index.d.ts +22 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +868 -214
- package/dist/runtime-dockerfile.d.ts +14 -0
- package/dist/runtime-dockerfile.d.ts.map +1 -0
- package/dist/runtime-dockerfile.js +65 -0
- package/dist/sandbox-backends/docker.d.ts.map +1 -1
- package/dist/sandbox-backends/docker.js +9 -12
- package/dist/sandbox-backends/index.d.ts.map +1 -1
- package/dist/sandbox-backends/index.js +2 -1
- package/dist/sandbox-inputs.d.ts.map +1 -1
- package/dist/sandbox-inputs.js +1 -0
- package/dist/sandbox-plane.d.ts +1 -0
- package/dist/sandbox-plane.d.ts.map +1 -1
- package/dist/sandbox-plane.js +12 -22
- package/dist/trace-files.d.ts +2 -2
- package/dist/trace-files.d.ts.map +1 -1
- package/dist/trace-files.js +4 -4
- package/package.json +3 -3
- package/worker/sandbox-adapter-runner.cjs +22 -13
- package/dist/execution-phases.d.ts.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface WorkbenchRuntimeAdapterInstallerFile {
|
|
2
|
+
path: string;
|
|
3
|
+
content: string;
|
|
4
|
+
encoding?: "utf8" | "base64";
|
|
5
|
+
executable?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface WorkbenchRuntimeAdapterInstaller {
|
|
8
|
+
id: string;
|
|
9
|
+
source: string;
|
|
10
|
+
setup: readonly string[];
|
|
11
|
+
files?: readonly WorkbenchRuntimeAdapterInstallerFile[];
|
|
12
|
+
}
|
|
13
|
+
export declare function composeRuntimeDockerfileWithAdapterInstallers(dockerfile: string, adapters: readonly WorkbenchRuntimeAdapterInstaller[]): string;
|
|
14
|
+
//# sourceMappingURL=runtime-dockerfile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-dockerfile.d.ts","sourceRoot":"","sources":["../src/runtime-dockerfile.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,oCAAoC,EAAE,CAAC;CACzD;AAED,wBAAgB,6CAA6C,CAC3D,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,gCAAgC,EAAE,GACpD,MAAM,CAiCR"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function composeRuntimeDockerfileWithAdapterInstallers(dockerfile, adapters) {
|
|
3
|
+
const installAdapters = adapters.filter((adapter) => adapter.setup.length > 0 || (adapter.files?.length ?? 0) > 0);
|
|
4
|
+
if (installAdapters.length === 0) {
|
|
5
|
+
return dockerfile;
|
|
6
|
+
}
|
|
7
|
+
const finalUser = readFinalDockerfileUser(dockerfile);
|
|
8
|
+
const lines = [
|
|
9
|
+
dockerfile.trimEnd(),
|
|
10
|
+
"",
|
|
11
|
+
"# Workbench adapter setup. The benchmark Dockerfile owns task dependencies;",
|
|
12
|
+
"# adapter manifests own adapter runtime dependencies.",
|
|
13
|
+
"USER root",
|
|
14
|
+
];
|
|
15
|
+
for (const adapter of installAdapters) {
|
|
16
|
+
lines.push("");
|
|
17
|
+
lines.push(`# Adapter: ${adapter.id} (${adapter.source})`);
|
|
18
|
+
if ((adapter.files?.length ?? 0) > 0) {
|
|
19
|
+
lines.push(...adapterSourceDockerfileLines(adapter));
|
|
20
|
+
lines.push(`WORKDIR /opt/workbench-adapters/${adapter.id}`);
|
|
21
|
+
}
|
|
22
|
+
for (const command of adapter.setup) {
|
|
23
|
+
lines.push(`RUN ${command}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (finalUser) {
|
|
27
|
+
lines.push("");
|
|
28
|
+
lines.push(`# Restore benchmark runtime user.`);
|
|
29
|
+
lines.push(`USER ${finalUser}`);
|
|
30
|
+
}
|
|
31
|
+
lines.push("WORKDIR /workspace", "");
|
|
32
|
+
return lines.join("\n");
|
|
33
|
+
}
|
|
34
|
+
function readFinalDockerfileUser(dockerfile) {
|
|
35
|
+
let finalUser = null;
|
|
36
|
+
for (const line of dockerfile.split(/\r?\n/u)) {
|
|
37
|
+
const trimmed = line.trim();
|
|
38
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const match = /^USER\s+(.+)$/iu.exec(trimmed);
|
|
42
|
+
if (match?.[1]) {
|
|
43
|
+
finalUser = match[1].trim();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return finalUser;
|
|
47
|
+
}
|
|
48
|
+
function adapterSourceDockerfileLines(adapter) {
|
|
49
|
+
const root = `/opt/workbench-adapters/${adapter.id}`;
|
|
50
|
+
const lines = [`RUN mkdir -p ${shellWord(root)}`];
|
|
51
|
+
for (const file of adapter.files ?? []) {
|
|
52
|
+
const destination = `${root}/${normalizeAdapterFilePath(file.path)}`;
|
|
53
|
+
const encoded = file.encoding === "base64"
|
|
54
|
+
? file.content
|
|
55
|
+
: Buffer.from(file.content, "utf8").toString("base64");
|
|
56
|
+
lines.push(`RUN mkdir -p ${shellWord(path.posix.dirname(destination))} && printf '%s' ${shellWord(encoded)} | base64 -d > ${shellWord(destination)}${file.executable ? ` && chmod 755 ${shellWord(destination)}` : ""}`);
|
|
57
|
+
}
|
|
58
|
+
return lines;
|
|
59
|
+
}
|
|
60
|
+
function normalizeAdapterFilePath(value) {
|
|
61
|
+
return value.replace(/\\/gu, "/").replace(/^\/+/u, "").replace(/^\.?\//u, "");
|
|
62
|
+
}
|
|
63
|
+
function shellWord(value) {
|
|
64
|
+
return `'${value.replace(/'/gu, "'\"'\"'")}'`;
|
|
65
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandbox-backends/docker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandbox-backends/docker.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,8BAA8B,EAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,yBAAyB,EAE9B,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAuC7B,wBAAgB,oCAAoC,IACjD,wBAAwB,CAY1B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,yBAAyB,GACnC,YAAY,CAmDd"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WORKBENCH_EXECUTION_NETWORK_EGRESS_VALUES, } from "@workbench-ai/workbench-contract";
|
|
1
2
|
import { createHash, } from "node:crypto";
|
|
2
3
|
import { createWriteStream, existsSync, } from "node:fs";
|
|
3
4
|
import path from "node:path";
|
|
@@ -23,7 +24,7 @@ export function createDockerSandboxBackendDescriptor() {
|
|
|
23
24
|
snapshots: true,
|
|
24
25
|
interactiveExec: false,
|
|
25
26
|
filesystemDiff: false,
|
|
26
|
-
networkPolicy:
|
|
27
|
+
networkPolicy: WORKBENCH_EXECUTION_NETWORK_EGRESS_VALUES,
|
|
27
28
|
fileCapabilities: true,
|
|
28
29
|
},
|
|
29
30
|
};
|
|
@@ -351,18 +352,14 @@ function runDockerSandboxProcess(spawn, args, options) {
|
|
|
351
352
|
});
|
|
352
353
|
}
|
|
353
354
|
function dockerNetworkConfigForExecution(execution) {
|
|
354
|
-
|
|
355
|
-
|
|
355
|
+
switch (execution.policy.network.egress) {
|
|
356
|
+
case "none":
|
|
357
|
+
return { mode: "none", egress: "none" };
|
|
358
|
+
case "open":
|
|
359
|
+
return { mode: "bridge", egress: "open" };
|
|
360
|
+
default:
|
|
361
|
+
throw new Error(`Unsupported Docker network egress policy ${String(execution.policy.network.egress)}.`);
|
|
356
362
|
}
|
|
357
|
-
if (execution.policy.network.egress === "open") {
|
|
358
|
-
return { mode: "bridge", egress: "open", allowlistEnforced: true };
|
|
359
|
-
}
|
|
360
|
-
return {
|
|
361
|
-
mode: "bridge",
|
|
362
|
-
egress: "allowlist",
|
|
363
|
-
allow: [...(execution.policy.network.allow ?? [])],
|
|
364
|
-
allowlistEnforced: false,
|
|
365
|
-
};
|
|
366
363
|
}
|
|
367
364
|
function dockerContainerName(sandboxId) {
|
|
368
365
|
return `workbench-sandbox-${sandboxId}`.replace(/[^a-z0-9_.-]+/giu, "-").slice(0, 120);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox-backends/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox-backends/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,8BAA8B,EAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,0BAA0B,EAE1B,yBAAyB,EACzB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAEL,KAAK,4BAA4B,EAElC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,mCAAmC,EACnC,KAAK,4BAA4B,GAClC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,cAAc,EAAE,2BAA2B,EAAE,CAAC;CAC/C;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,yBAAyB,GACnC,YAAY,CAMd;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,4BAA4B,GACrC,4BAA4B,CAS9B;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,4BAA4B,GACrC,IAAI,CAeN;AAED,wBAAgB,uCAAuC,CACrD,SAAS,EAAE,4BAA4B,GACtC,MAAM,GAAG,IAAI,CAEf;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,4BAA4B,EACtC,SAAS,EAAE,iCAAiC,GAC3C,wBAAwB,CAkB1B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,4BAA4B,GACrC,MAAM,CAER"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isWorkbenchExecutionNetworkEgress, } from "@workbench-ai/workbench-contract";
|
|
1
2
|
import { createDockerSandboxBackendDescriptor, createDockerSandboxPlane, } from "./docker.js";
|
|
2
3
|
import { DOCKER_SANDBOX_BACKEND, resolveWorkbenchSandboxProviderName, } from "./names.js";
|
|
3
4
|
export { DOCKER_SANDBOX_BACKEND, resolveWorkbenchSandboxProviderName, } from "./names.js";
|
|
@@ -70,7 +71,7 @@ function isSandboxBackendCapabilities(value) {
|
|
|
70
71
|
typeof record.filesystemDiff === "boolean" &&
|
|
71
72
|
typeof record.fileCapabilities === "boolean" &&
|
|
72
73
|
Array.isArray(record.networkPolicy) &&
|
|
73
|
-
record.networkPolicy.every(
|
|
74
|
+
record.networkPolicy.every(isWorkbenchExecutionNetworkEgress);
|
|
74
75
|
}
|
|
75
76
|
function assertPositiveResource(value, label) {
|
|
76
77
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-inputs.d.ts","sourceRoot":"","sources":["../src/sandbox-inputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,IAAI,EACJ,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EAClC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AActC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,sBAAsB,CAO1F;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,8BAA8B,GAAG,yBAAyB,CAoB/G;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAC9C,wBAAwB,CAW1B;AAqBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAC/C,KAAK,EAAE,SAAS,mBAAmB,EAAE,GACpC,wBAAwB,CAO1B;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,8BAA8B,EACpC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,IAAI,
|
|
1
|
+
{"version":3,"file":"sandbox-inputs.d.ts","sourceRoot":"","sources":["../src/sandbox-inputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,IAAI,EACJ,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EAClC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AActC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,sBAAsB,CAO1F;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,8BAA8B,GAAG,yBAAyB,CAoB/G;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAC9C,wBAAwB,CAW1B;AAqBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAC/C,KAAK,EAAE,SAAS,mBAAmB,EAAE,GACpC,wBAAwB,CAO1B;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,8BAA8B,EACpC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,IAAI,CAmBN;AAED,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,kBAAkB,EACvB,SAAS,EAAE,sBAAsB,GAChC,kBAAkB,CAgBpB;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAgBxG;AAED,wBAAsB,sCAAsC,CAAC,IAAI,EAAE;IACjE,YAAY,EAAE,kBAAkB,CAAC;IACjC,SAAS,EAAE,sBAAsB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAC5D,UAAU,EAAE,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,EAAE,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IACpD,SAAS,EAAE,yBAAyB,CAAC;CACtC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA6CpC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAQ9G;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,4BAA4B,EACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,iCAAiC,GAC1C,kBAAkB,CAEpB;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,OAAO,GAChB,kBAAkB,CAepB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAWlF"}
|
package/dist/sandbox-inputs.js
CHANGED
|
@@ -75,6 +75,7 @@ export function createSandboxAdapterRequest(args, request, startedAt) {
|
|
|
75
75
|
...(args.adapterAuthProfiles ? { adapterAuthProfiles: args.adapterAuthProfiles } : {}),
|
|
76
76
|
...(args.adapterManifests ? { adapterManifests: args.adapterManifests } : {}),
|
|
77
77
|
...(args.progress ? { progress: args.progress } : {}),
|
|
78
|
+
...(args.runtimeControlOperation ? { runtimeControlOperation: args.runtimeControlOperation } : {}),
|
|
78
79
|
},
|
|
79
80
|
execution: request.execution,
|
|
80
81
|
capability: request.capability,
|
package/dist/sandbox-plane.d.ts
CHANGED
|
@@ -72,6 +72,7 @@ export interface ValidatedSandboxExecutionResult {
|
|
|
72
72
|
payloads: WorkbenchExecutionOutputPayloads;
|
|
73
73
|
}
|
|
74
74
|
export declare function executeValidatedSandboxExecution(plane: SandboxPlane, execution: WorkbenchExecutionSpec, options: SandboxExecutionOptions): Promise<ValidatedSandboxExecutionResult>;
|
|
75
|
+
export declare function assertSandboxBackendSupportsNetworkPolicy(backend: SandboxBackendDescriptor, execution: Pick<WorkbenchExecutionSpec, "id" | "policy">): void;
|
|
75
76
|
export declare function createWorkbenchSandboxExecutionMetadata(args: WorkbenchSandboxExecutionMetadata): WorkbenchSandboxExecutionMetadata;
|
|
76
77
|
export declare function collectSandboxHandleScopeIssues(sandbox: SandboxHandle, allocation: WorkbenchSandboxAllocation, execution: WorkbenchExecutionSpec): string[];
|
|
77
78
|
export declare function createWorkbenchSandboxAllocation(execution: WorkbenchExecutionSpec, options: WorkbenchSandboxAllocationOptions): WorkbenchSandboxAllocation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-plane.d.ts","sourceRoot":"","sources":["../src/sandbox-plane.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sandbox-plane.d.ts","sourceRoot":"","sources":["../src/sandbox-plane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,IAAI,EACJ,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAGL,KAAK,gCAAgC,EACtC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,0BAA0B,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC1F,WAAW,CAAC,UAAU,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjH,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,yBAAyB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,SAAS,+BAA+B,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,sBAAsB,CAAC;IAClC,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,0BAA0B,CAAC;IACvC,UAAU,EAAE,4BAA4B,CAAC;IACzC,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,sBAAsB,CAAC;IAClC,WAAW,EAAE,uBAAuB,CAAC;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,0BAA0B,CAAC;IACvC,UAAU,EAAE,4BAA4B,CAAC;IACzC,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,wBAAwB,CAAC;IAClC,kBAAkB,CAAC,CAAC,SAAS,EAAE,sBAAsB,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC3H,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvG,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvG,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,wBAAwB,CAAC;IACjC,QAAQ,EAAE,gCAAgC,CAAC;CAC5C;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,+BAA+B,CAAC,CA6F1C;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,wBAAwB,EACjC,SAAS,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,QAAQ,CAAC,GACvD,IAAI,CAMN;AAkDD,wBAAgB,uCAAuC,CAAC,IAAI,EAAE,iCAAiC,GAAG,iCAAiC,CAoBlI;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,sBAAsB,GAChC,MAAM,EAAE,CAkBV;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,iCAAiC,GACzC,0BAA0B,CAiB5B;AAcD,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,4BAA4B,CAgB9B;AAED,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,4BAA4B,EACxC,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,MAAM,EAAE,CAsCV;AAWD,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,MAAM,EAAE,CAkCV"}
|
package/dist/sandbox-plane.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { assertWorkbenchExecutionIsolation, validateWorkbenchExecutionOutputPayloads, } from "./execution-outputs.js";
|
|
2
2
|
export async function executeValidatedSandboxExecution(plane, execution, options) {
|
|
3
3
|
assertWorkbenchExecutionIsolation(execution);
|
|
4
|
+
assertSandboxBackendSupportsNetworkPolicy(plane.backend, execution);
|
|
4
5
|
const inputs = await options.fileStore.materializeInputs(execution);
|
|
5
6
|
const now = options.now ?? new Date().toISOString();
|
|
6
7
|
const timing = {};
|
|
@@ -92,6 +93,13 @@ export async function executeValidatedSandboxExecution(plane, execution, options
|
|
|
92
93
|
payloads: validateWorkbenchExecutionOutputPayloads(execution, outputPayloads),
|
|
93
94
|
};
|
|
94
95
|
}
|
|
96
|
+
export function assertSandboxBackendSupportsNetworkPolicy(backend, execution) {
|
|
97
|
+
const egress = execution.policy.network.egress;
|
|
98
|
+
if (!backend.capabilities.networkPolicy.includes(egress)) {
|
|
99
|
+
const supported = backend.capabilities.networkPolicy.join(", ") || "none";
|
|
100
|
+
throw new Error(`Sandbox backend ${backend.name} does not support network egress ${egress} for execution ${execution.id}. Supported egress policies: ${supported}.`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
95
103
|
function attachSandboxLifecycleTiming(result, timing) {
|
|
96
104
|
const metadata = isJsonRecord(result.metadata) ? result.metadata : {};
|
|
97
105
|
const completedJob = isJsonRecord(metadata.completedJob) ? metadata.completedJob : null;
|
|
@@ -134,19 +142,13 @@ export function createWorkbenchSandboxExecutionMetadata(args) {
|
|
|
134
142
|
allocation: {
|
|
135
143
|
...args.allocation,
|
|
136
144
|
template: { ...args.allocation.template },
|
|
137
|
-
network: {
|
|
138
|
-
...args.allocation.network,
|
|
139
|
-
...(args.allocation.network.allow ? { allow: [...args.allocation.network.allow] } : {}),
|
|
140
|
-
},
|
|
145
|
+
network: { ...args.allocation.network },
|
|
141
146
|
},
|
|
142
147
|
capability: {
|
|
143
148
|
...args.capability,
|
|
144
149
|
subject: { ...args.capability.subject },
|
|
145
150
|
inputs: args.capability.inputs.map((input) => ({ ...input })),
|
|
146
|
-
network: {
|
|
147
|
-
...args.capability.network,
|
|
148
|
-
...(args.capability.network.allow ? { allow: [...args.capability.network.allow] } : {}),
|
|
149
|
-
},
|
|
151
|
+
network: { ...args.capability.network },
|
|
150
152
|
},
|
|
151
153
|
handle: {
|
|
152
154
|
...args.handle,
|
|
@@ -186,10 +188,7 @@ export function createWorkbenchSandboxAllocation(execution, options) {
|
|
|
186
188
|
backend: options.backend,
|
|
187
189
|
runnerId: options.runnerId ?? "local-runner",
|
|
188
190
|
template: { ...execution.sandbox },
|
|
189
|
-
network: {
|
|
190
|
-
...execution.policy.network,
|
|
191
|
-
...(execution.policy.network.allow ? { allow: [...execution.policy.network.allow] } : {}),
|
|
192
|
-
},
|
|
191
|
+
network: { ...execution.policy.network },
|
|
193
192
|
status: "allocated",
|
|
194
193
|
createdAt: new Date(nowMs).toISOString(),
|
|
195
194
|
expiresAt: new Date(nowMs + ttlMs).toISOString(),
|
|
@@ -220,10 +219,7 @@ export function createWorkbenchExecutionCapability(execution, options = {}) {
|
|
|
220
219
|
},
|
|
221
220
|
inputs: execution.inputs.map((input) => ({ ...input })),
|
|
222
221
|
outputPrefix: options.outputPrefix ?? `executions/${execution.id}/outputs/`,
|
|
223
|
-
network: {
|
|
224
|
-
...execution.policy.network,
|
|
225
|
-
...(execution.policy.network.allow ? { allow: [...execution.policy.network.allow] } : {}),
|
|
226
|
-
},
|
|
222
|
+
network: { ...execution.policy.network },
|
|
227
223
|
expiresAt: new Date(nowMs + ttlMs).toISOString(),
|
|
228
224
|
};
|
|
229
225
|
}
|
|
@@ -273,7 +269,6 @@ function networkPolicyKey(policy) {
|
|
|
273
269
|
}
|
|
274
270
|
return JSON.stringify({
|
|
275
271
|
egress: policy.egress,
|
|
276
|
-
...(Array.isArray(policy.allow) ? { allow: [...policy.allow] } : {}),
|
|
277
272
|
});
|
|
278
273
|
}
|
|
279
274
|
export function collectSandboxAllocationScopeIssues(allocation, execution, options = {}) {
|
|
@@ -299,11 +294,6 @@ export function collectSandboxAllocationScopeIssues(allocation, execution, optio
|
|
|
299
294
|
if (allocation.network.egress !== execution.policy.network.egress) {
|
|
300
295
|
issues.push(`Sandbox allocation network policy does not match execution ${execution.id}.`);
|
|
301
296
|
}
|
|
302
|
-
const expectedAllow = execution.policy.network.allow ?? [];
|
|
303
|
-
const actualAllow = allocation.network.allow ?? [];
|
|
304
|
-
if (JSON.stringify(actualAllow) !== JSON.stringify(expectedAllow)) {
|
|
305
|
-
issues.push(`Sandbox allocation network allowlist does not match execution ${execution.id}.`);
|
|
306
|
-
}
|
|
307
297
|
if (!["allocated", "running", "stopping", "stopped"].includes(allocation.status)) {
|
|
308
298
|
issues.push(`Sandbox allocation status ${allocation.status} is not supported for execution ${execution.id}.`);
|
|
309
299
|
}
|
package/dist/trace-files.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ export declare function workbenchTraceRunDirectory(args: {
|
|
|
6
6
|
sequence: number;
|
|
7
7
|
runId: string;
|
|
8
8
|
}): string;
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function workbenchTraceExecutionDirectory(args: {
|
|
10
10
|
sequence: number;
|
|
11
11
|
runId: string;
|
|
12
|
-
|
|
12
|
+
purpose: WorkbenchExecutionPurpose;
|
|
13
13
|
}): string;
|
|
14
14
|
export declare function workbenchTraceRunDirectoryName(args: {
|
|
15
15
|
sequence: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-files.d.ts","sourceRoot":"","sources":["../src/trace-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAO1C,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiChH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAK9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAET;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"trace-files.d.ts","sourceRoot":"","sources":["../src/trace-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAO1C,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiChH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAK9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAET;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,yBAAyB,CAAC;CACpC,GAAG,MAAM,CAET;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAKT"}
|
package/dist/trace-files.js
CHANGED
|
@@ -43,8 +43,8 @@ export function traceFilePaths(files) {
|
|
|
43
43
|
export function workbenchTraceRunDirectory(args) {
|
|
44
44
|
return `${WORKBENCH_TRACE_ROOT}/${workbenchTraceRunDirectoryName(args)}`;
|
|
45
45
|
}
|
|
46
|
-
export function
|
|
47
|
-
return `${workbenchTraceRunDirectory(args)}/${String(
|
|
46
|
+
export function workbenchTraceExecutionDirectory(args) {
|
|
47
|
+
return `${workbenchTraceRunDirectory(args)}/${String(tracePurposeSequence(args.purpose)).padStart(6, "0")}-${args.purpose}`;
|
|
48
48
|
}
|
|
49
49
|
export function workbenchTraceRunDirectoryName(args) {
|
|
50
50
|
const sequence = Number.isSafeInteger(args.sequence) && args.sequence >= 0
|
|
@@ -83,8 +83,8 @@ function sanitizeTracePathSegment(value) {
|
|
|
83
83
|
.replace(/^_+|_+$/gu, "");
|
|
84
84
|
return sanitized || "run";
|
|
85
85
|
}
|
|
86
|
-
function
|
|
87
|
-
if (
|
|
86
|
+
function tracePurposeSequence(purpose) {
|
|
87
|
+
if (purpose === "improve") {
|
|
88
88
|
return 1;
|
|
89
89
|
}
|
|
90
90
|
return 2;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workbench-ai/workbench-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"yaml": "^2.8.2",
|
|
25
|
-
"@workbench-ai/workbench-protocol": "0.0.
|
|
26
|
-
"@workbench-ai/workbench-contract": "0.0.
|
|
25
|
+
"@workbench-ai/workbench-protocol": "0.0.47",
|
|
26
|
+
"@workbench-ai/workbench-contract": "0.0.47"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^24.3.1",
|
|
@@ -23,22 +23,31 @@ async function main() {
|
|
|
23
23
|
markStage("request-removed");
|
|
24
24
|
const runtimeImport = process.env.WORKBENCH_RUNTIME_IMPORT || "../src/index.ts";
|
|
25
25
|
const {
|
|
26
|
-
|
|
26
|
+
executeAdapterInCurrentRuntime,
|
|
27
|
+
executeRuntimeControlOperationSequenceInCurrentRuntime,
|
|
27
28
|
} = await import(runtimeImport);
|
|
28
29
|
markStage("runtime-imported");
|
|
29
30
|
const startedAt = typeof request.startedAt === "string" ? request.startedAt : new Date().toISOString();
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
const runtimeInput = {
|
|
32
|
+
...validated.jobInput,
|
|
33
|
+
now: startedAt,
|
|
34
|
+
workspaceRoot: workspaceRootFromEnvironment(),
|
|
35
|
+
pullImages: false,
|
|
36
|
+
runtimeRegistry: "",
|
|
37
|
+
};
|
|
38
|
+
const completedJob = validated.jobInput.runtimeControlOperation
|
|
39
|
+
? await executeRuntimeControlOperationSequenceInCurrentRuntime(
|
|
40
|
+
runtimeInput,
|
|
41
|
+
validated.execution,
|
|
42
|
+
startedAt,
|
|
43
|
+
validated.capability,
|
|
44
|
+
)
|
|
45
|
+
: await executeAdapterInCurrentRuntime(
|
|
46
|
+
runtimeInput,
|
|
47
|
+
validated.execution,
|
|
48
|
+
startedAt,
|
|
49
|
+
validated.capability,
|
|
50
|
+
);
|
|
42
51
|
markStage("adapter-completed");
|
|
43
52
|
fs.writeFileSync(responsePath, `${JSON.stringify({ ok: true, job: completedJob }, null, 2)}\n`);
|
|
44
53
|
} catch (error) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-phases.d.ts","sourceRoot":"","sources":["../src/execution-phases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EAExB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAI1C,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CA0D9B;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,CACX,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,2BAA2B,KAC9B,uBAAuB,CAAC;CAC9B,GAAG,mBAAmB,EAAE,CAkDxB;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,kBAAkB,GACtB,sBAAsB,CAAC,SAAS,CAAC,GAAG,IAAI,CAQ1C;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAG/E;AAED,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GACzC,OAAO,CAET;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS;IAAE,MAAM,EAAE,wBAAwB,CAAA;CAAE,EAAE,GACpD,wBAAwB,CAc1B"}
|