@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.
Files changed (39) hide show
  1. package/dist/execution-events.d.ts +2 -2
  2. package/dist/execution-events.d.ts.map +1 -1
  3. package/dist/execution-events.js +3 -3
  4. package/dist/{execution-phases.d.ts → execution-evidence.d.ts} +8 -7
  5. package/dist/execution-evidence.d.ts.map +1 -0
  6. package/dist/{execution-phases.js → execution-evidence.js} +91 -51
  7. package/dist/execution-graph.js +1 -2
  8. package/dist/execution-jobs.js +1 -1
  9. package/dist/execution-outputs.d.ts.map +1 -1
  10. package/dist/execution-outputs.js +5 -10
  11. package/dist/execution-runtime-types.d.ts +7 -3
  12. package/dist/execution-runtime-types.d.ts.map +1 -1
  13. package/dist/execution-traces.d.ts +11 -1
  14. package/dist/execution-traces.d.ts.map +1 -1
  15. package/dist/execution-traces.js +305 -2
  16. package/dist/generic-spec.d.ts +8 -3
  17. package/dist/generic-spec.d.ts.map +1 -1
  18. package/dist/generic-spec.js +26 -37
  19. package/dist/index.d.ts +22 -11
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +868 -214
  22. package/dist/runtime-dockerfile.d.ts +14 -0
  23. package/dist/runtime-dockerfile.d.ts.map +1 -0
  24. package/dist/runtime-dockerfile.js +65 -0
  25. package/dist/sandbox-backends/docker.d.ts.map +1 -1
  26. package/dist/sandbox-backends/docker.js +9 -12
  27. package/dist/sandbox-backends/index.d.ts.map +1 -1
  28. package/dist/sandbox-backends/index.js +2 -1
  29. package/dist/sandbox-inputs.d.ts.map +1 -1
  30. package/dist/sandbox-inputs.js +1 -0
  31. package/dist/sandbox-plane.d.ts +1 -0
  32. package/dist/sandbox-plane.d.ts.map +1 -1
  33. package/dist/sandbox-plane.js +12 -22
  34. package/dist/trace-files.d.ts +2 -2
  35. package/dist/trace-files.d.ts.map +1 -1
  36. package/dist/trace-files.js +4 -4
  37. package/package.json +3 -3
  38. package/worker/sandbox-adapter-runner.cjs +22 -13
  39. 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":"AAqBA,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
+ {"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: ["none", "open"],
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
- if (execution.policy.network.egress === "none") {
355
- return { mode: "none", egress: "none", allowlistEnforced: true };
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":"AAAA,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
+ {"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((policy) => policy === "none" || policy === "open" || policy === "allowlist");
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,CAkBN;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"}
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"}
@@ -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,
@@ -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":"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,CA4F1C;AAkDD,wBAAgB,uCAAuC,CAAC,IAAI,EAAE,iCAAiC,GAAG,iCAAiC,CA0BlI;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,CAoB5B;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,CAmB9B;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;AAYD,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,MAAM,EAAE,CAuCV"}
1
+ {"version":3,"file":"sandbox-plane.d.ts","sourceRoot":"","sources":["../src/sandbox-plane.ts"],"names":[],"mappings":"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"}
@@ -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
  }
@@ -6,10 +6,10 @@ export declare function workbenchTraceRunDirectory(args: {
6
6
  sequence: number;
7
7
  runId: string;
8
8
  }): string;
9
- export declare function workbenchTracePhaseDirectory(args: {
9
+ export declare function workbenchTraceExecutionDirectory(args: {
10
10
  sequence: number;
11
11
  runId: string;
12
- phase: WorkbenchExecutionPurpose;
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,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,yBAAyB,CAAC;CAClC,GAAG,MAAM,CAET;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAKT"}
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"}
@@ -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 workbenchTracePhaseDirectory(args) {
47
- return `${workbenchTraceRunDirectory(args)}/${String(tracePhaseSequence(args.phase)).padStart(6, "0")}-${args.phase}`;
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 tracePhaseSequence(phase) {
87
- if (phase === "improve") {
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.46",
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.46",
26
- "@workbench-ai/workbench-contract": "0.0.46"
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
- executeAdapterInCurrentSandboxRuntime,
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 completedJob = await executeAdapterInCurrentSandboxRuntime(
31
- {
32
- ...validated.jobInput,
33
- now: startedAt,
34
- workspaceRoot: workspaceRootFromEnvironment(),
35
- pullImages: false,
36
- runtimeRegistry: "",
37
- },
38
- validated.execution,
39
- startedAt,
40
- validated.capability,
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"}