@workbench-ai/workbench-core 0.0.50 → 0.0.52

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.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-auth.d.ts","sourceRoot":"","sources":["../src/adapter-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-auth.d.ts","sourceRoot":"","sources":["../src/adapter-auth.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
+ import { assertWorkbenchAdapterAuthEnvNameAllowed } from "@workbench-ai/workbench-contract";
4
5
  const ADAPTER_AUTH_STORE_VERSION = 1;
5
6
  const DEFAULT_AUTH_PROFILE = "default";
6
7
  export function defaultWorkbenchAdapterAuthStoreRoot() {
@@ -225,6 +226,7 @@ function sanitizeWorkbenchAdapterAuthEnvVar(value) {
225
226
  if (!/^[A-Z_][A-Z0-9_]*$/u.test(name)) {
226
227
  throw new Error(`Adapter auth env var is invalid: ${name}`);
227
228
  }
229
+ assertWorkbenchAdapterAuthEnvNameAllowed(name);
228
230
  if (!envValue.trim()) {
229
231
  throw new Error(`Adapter auth env var ${name} is empty.`);
230
232
  }
@@ -49,5 +49,5 @@ export declare function createWorkbenchProgressStdoutParser(onEnvelope: (envelop
49
49
  write(chunk: Buffer | string): void;
50
50
  flush(): void;
51
51
  };
52
- export declare function publishWorkbenchProgressStdoutEnvelope(envelope: WorkbenchProgressStdoutEnvelope): Promise<void>;
52
+ export declare function publishWorkbenchProgressStdoutEnvelope(envelope: WorkbenchProgressStdoutEnvelope, expectedTarget?: WorkbenchExecutionProgressTarget): Promise<void>;
53
53
  //# sourceMappingURL=execution-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-events.d.ts","sourceRoot":"","sources":["../src/execution-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,gCAAgC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,6BAA6B,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAsClC;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gCAAgC,GAAG,SAAS,EACvD,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AAyCD,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,wBAAwB,CAAC;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,4BAA4B,CAAC;KACrC,CAAC;CACH;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAC9D;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf,CA0DA;AAED,wBAAsB,sCAAsC,CAC1D,QAAQ,EAAE,+BAA+B,GACxC,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"execution-events.d.ts","sourceRoot":"","sources":["../src/execution-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,gCAAgC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,6BAA6B,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAsClC;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gCAAgC,GAAG,SAAS,EACvD,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AAyCD,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,wBAAwB,CAAC;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,4BAA4B,CAAC;KACrC,CAAC;CACH;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAC9D;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf,CA0DA;AAED,wBAAsB,sCAAsC,CAC1D,QAAQ,EAAE,+BAA+B,EACzC,cAAc,CAAC,EAAE,gCAAgC,GAChD,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -147,8 +147,30 @@ export function createWorkbenchProgressStdoutParser(onEnvelope) {
147
147
  },
148
148
  };
149
149
  }
150
- export async function publishWorkbenchProgressStdoutEnvelope(envelope) {
151
- await postProgressBody(envelope);
150
+ export async function publishWorkbenchProgressStdoutEnvelope(envelope, expectedTarget) {
151
+ const target = validProgressTarget(expectedTarget);
152
+ if (!target) {
153
+ await postProgressBody(envelope);
154
+ return;
155
+ }
156
+ if (!progressEnvelopeMatchesTarget(envelope, target)) {
157
+ return;
158
+ }
159
+ await postProgressBody({
160
+ url: target.url,
161
+ body: {
162
+ ...envelope.body,
163
+ ...(target.ownerUserId ? { ownerUserId: target.ownerUserId } : {}),
164
+ progressToken: target.token,
165
+ },
166
+ });
167
+ }
168
+ function progressEnvelopeMatchesTarget(envelope, target) {
169
+ return envelope.url === target.url &&
170
+ envelope.body.progressToken === target.token &&
171
+ (!target.ownerUserId ||
172
+ envelope.body.ownerUserId === undefined ||
173
+ envelope.body.ownerUserId === target.ownerUserId);
152
174
  }
153
175
  function firstExistingIndex(indexes) {
154
176
  return indexes.filter((index) => index >= 0).sort((a, b) => a - b)[0] ?? -1;
@@ -29,8 +29,18 @@ export interface AuthoredBenchmarkSpec {
29
29
  export interface WorkbenchCandidateRunSpec extends WorkbenchAdapterInvocation {
30
30
  name: string;
31
31
  }
32
+ export interface WorkbenchCaseSelector {
33
+ all?: true;
34
+ split?: string;
35
+ }
36
+ export interface WorkbenchSelectionSpec {
37
+ metric: string;
38
+ cases?: WorkbenchCaseSelector;
39
+ }
32
40
  export interface WorkbenchCandidateImproveSpec extends WorkbenchAdapterInvocation {
33
41
  edits: string[];
42
+ optimizeOn?: WorkbenchCaseSelector;
43
+ selectBy?: WorkbenchSelectionSpec;
34
44
  }
35
45
  export interface WorkbenchCandidateManifestSpec {
36
46
  version: 4;
@@ -71,6 +81,8 @@ export interface GenericRunSpec {
71
81
  runs: Record<string, WorkbenchCandidateRunSpec>;
72
82
  improve?: {
73
83
  edits: string[];
84
+ optimizeOn?: WorkbenchCaseSelector;
85
+ selectBy?: WorkbenchSelectionSpec;
74
86
  };
75
87
  };
76
88
  environment: WorkbenchRuntimeSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"generic-spec.d.ts","sourceRoot":"","sources":["../src/generic-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic-spec.d.ts","sourceRoot":"","sources":["../src/generic-spec.ts"],"names":[],"mappings":"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"}
@@ -161,6 +161,8 @@ function genericSpecFromAuthoredBundle(source) {
161
161
  ? {
162
162
  improve: {
163
163
  edits: [...candidate.improve.edits],
164
+ ...(candidate.improve.optimizeOn ? { optimizeOn: cloneJson(candidate.improve.optimizeOn) } : {}),
165
+ ...(candidate.improve.selectBy ? { selectBy: cloneJson(candidate.improve.selectBy) } : {}),
164
166
  },
165
167
  }
166
168
  : {}),
@@ -315,16 +317,67 @@ function normalizeCandidateImprove(value, label, errors) {
315
317
  if (!record) {
316
318
  return undefined;
317
319
  }
318
- rejectUnknownKeys(record, label, ["edits", "use", "with", "auth"], errors);
320
+ rejectUnknownKeys(record, label, ["edits", "use", "with", "auth", "optimizeOn", "selectBy"], errors);
319
321
  const edits = normalizeRelativePathList(record.edits, `${label}.edits`, errors);
320
322
  const invocation = normalizePhaseAdapter(adapterRecordFrom(record), label, errors);
323
+ const optimizeOn = normalizeCaseSelector(record.optimizeOn, `${label}.optimizeOn`, errors);
324
+ const selectBy = normalizeSelectionSpec(record.selectBy, `${label}.selectBy`, errors);
321
325
  return edits.length > 0 && invocation
322
326
  ? {
323
327
  ...invocation,
324
328
  edits,
329
+ ...(optimizeOn ? { optimizeOn } : {}),
330
+ ...(selectBy ? { selectBy } : {}),
325
331
  }
326
332
  : undefined;
327
333
  }
334
+ function normalizeSelectionSpec(value, label, errors) {
335
+ if (value === undefined) {
336
+ return undefined;
337
+ }
338
+ const record = readRequiredRecord(value, label, errors);
339
+ if (!record) {
340
+ return undefined;
341
+ }
342
+ rejectUnknownKeys(record, label, ["metric", "cases"], errors);
343
+ const metric = readRequiredString(record.metric, `${label}.metric`, errors);
344
+ const cases = normalizeCaseSelector(record.cases, `${label}.cases`, errors);
345
+ return metric
346
+ ? {
347
+ metric,
348
+ ...(cases ? { cases } : {}),
349
+ }
350
+ : undefined;
351
+ }
352
+ function normalizeCaseSelector(value, label, errors) {
353
+ if (value === undefined) {
354
+ return undefined;
355
+ }
356
+ const record = readRequiredRecord(value, label, errors);
357
+ if (!record) {
358
+ return undefined;
359
+ }
360
+ rejectUnknownKeys(record, label, ["all", "split"], errors);
361
+ const hasAll = Object.prototype.hasOwnProperty.call(record, "all");
362
+ const hasSplit = Object.prototype.hasOwnProperty.call(record, "split");
363
+ if (hasAll && hasSplit) {
364
+ errors.push(`${label} must specify either all or split, not both.`);
365
+ return undefined;
366
+ }
367
+ if (!hasAll && !hasSplit) {
368
+ errors.push(`${label} must specify all: true or split.`);
369
+ return undefined;
370
+ }
371
+ if (hasAll) {
372
+ if (record.all !== true) {
373
+ errors.push(`${label}.all must be true when provided.`);
374
+ return undefined;
375
+ }
376
+ return { all: true };
377
+ }
378
+ const split = readRequiredString(record.split, `${label}.split`, errors);
379
+ return split ? { split } : undefined;
380
+ }
328
381
  function adapterRecordFrom(record) {
329
382
  return {
330
383
  use: record.use,
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import type { AuthoredWorkbenchSourceDocument, CandidateCaseExecutionRef, CandidateCaseReview, CandidateFilePreview, CandidateFileSummary, CandidateLineageGraph, CandidateRecord, CandidateSummary, EvalCaseResult, EvaluationRecord, EvaluationScorecard, HostedWorkbenchEnvironment, HostedWorkbenchEnvironmentVersion, HostedWorkbenchFileInput, HostedWorkbenchJob, Json, SurfaceSnapshotFile, UsageSummary, WorkbenchCandidatePatch, WorkbenchExecutionCapability, WorkbenchExecutionSpec, WorkbenchResult } from "@workbench-ai/workbench-contract";
2
- import { type WorkbenchAdapterOperationExecutor, type WorkbenchAdapterOperationResult } from "@workbench-ai/workbench-protocol";
3
- import { type GenericEngineCaseSpec, type GenericRunSpec, type WorkbenchEngineCase } from "./generic-spec.ts";
1
+ import type { AuthoredWorkbenchSourceDocument, CandidateCaseExecutionRef, CandidateCaseReview, CandidateFilePreview, CandidateFileSummary, CandidateLineageGraph, CandidateRecord, CandidateSummary, EvalCaseResult, EngineResolveBinding, EvaluationRecord, EvaluationScorecard, HostedWorkbenchEnvironment, HostedWorkbenchEnvironmentVersion, HostedWorkbenchFileInput, HostedWorkbenchJob, Json, SurfaceSnapshotFile, UsageSummary, WorkbenchRuntimeBundle, WorkbenchRuntimeBundleStats, WorkbenchProjectSourceResources, WorkbenchProjectStateSource, WorkbenchCandidatePatch, WorkbenchExecutionCapability, WorkbenchExecutionSpec, WorkbenchResult } from "@workbench-ai/workbench-contract";
2
+ import { type WorkbenchAdapterOperationExecutor, type WorkbenchAdapterOperationResult, type WorkbenchAdapterManifest } from "@workbench-ai/workbench-protocol";
3
+ import { type GenericEngineCaseSpec, type GenericRunSpec, type WorkbenchCaseSelector, type WorkbenchEngineCase } from "./generic-spec.ts";
4
4
  import type { WorkbenchExecutionRuntimeInput } from "./execution-runtime-types.ts";
5
5
  import { createWorkbenchExecutionCapability, type SandboxExecutionFileStore, type SandboxPlane } from "./sandbox-plane.ts";
6
- export { BENCHMARK_SPEC_FILE, CANDIDATE_SPEC_FILE, DEFAULT_EXECUTION_RESOURCES, engineCasePrivateFiles, engineCaseFilesForRuntimeInput, engineCasePublicFiles, engineResolveInvocationForSpec, engineResolveBindingForSpec, engineResolveBindingForSourceYaml, isWorkbenchCandidateManifestPath, parseWorkbenchSourceFiles, resolveEngineCaseExecutionConfig, resolveWorkbenchResolvedSourceYaml, resolveWorkbenchSourceFiles, runtimeNetwork, runtimeResources, serializeWorkbenchResolvedSourceYaml, validateWorkbenchResolvedSourceYaml, type AuthoredBenchmarkSpec, type WorkbenchCandidateImproveSpec, type WorkbenchCandidateManifestSpec, type WorkbenchCandidateRunSpec, type GenericRunSpec, type GenericEngineCaseSpec, type WorkbenchEngineCase, type WorkbenchResolvedSource, } from "./generic-spec.ts";
6
+ export { BENCHMARK_SPEC_FILE, CANDIDATE_SPEC_FILE, DEFAULT_EXECUTION_RESOURCES, engineCasePrivateFiles, engineCaseFilesForRuntimeInput, engineCasePublicFiles, engineResolveInvocationForSpec, engineResolveBindingForSpec, engineResolveBindingForSourceYaml, isWorkbenchCandidateManifestPath, parseWorkbenchSourceFiles, resolveEngineCaseExecutionConfig, resolveWorkbenchResolvedSourceYaml, resolveWorkbenchSourceFiles, runtimeNetwork, runtimeResources, serializeWorkbenchResolvedSourceYaml, validateWorkbenchResolvedSourceYaml, type AuthoredBenchmarkSpec, type WorkbenchCandidateImproveSpec, type WorkbenchCandidateManifestSpec, type WorkbenchCandidateRunSpec, type WorkbenchCaseSelector, type WorkbenchSelectionSpec, type GenericRunSpec, type GenericEngineCaseSpec, type WorkbenchEngineCase, type WorkbenchResolvedSource, } from "./generic-spec.ts";
7
7
  export { composeRuntimeDockerfileWithAdapterInstallers, type WorkbenchRuntimeAdapterInstaller, type WorkbenchRuntimeAdapterInstallerFile, } from "./runtime-dockerfile.ts";
8
8
  export { adapterCommandName, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, parseWorkbenchAdapterManifest, workbenchAdapterManifestRequiresAuth, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, type WorkbenchPrimitiveAdapterOperation, type WorkbenchAdapterOperation, type WorkbenchAdapterOperationExecutor, type WorkbenchAdapterOperationManifest, type WorkbenchAdapterSlotManifest, type WorkbenchAdapterAuthRequirement, type WorkbenchAdapterAuthManifest, type WorkbenchAdapterAuthMethodManifest, type WorkbenchAdapterInvocationLike, type WorkbenchAdapterManifest, } from "@workbench-ai/workbench-protocol";
9
9
  export { adapterAuthEnv, createWorkbenchAdapterAuthBundle, defaultWorkbenchAdapterAuthStoreRoot, localWorkbenchAdapterAuthStore, normalizeWorkbenchAdapterAuthTarget, parseWorkbenchAdapterAuthTarget, sanitizeWorkbenchAdapterAuthBundle, type WorkbenchAdapterAuthBundle, type WorkbenchAdapterAuthEnvVar, type WorkbenchAdapterAuthFile, type WorkbenchAdapterAuthStatus, type WorkbenchAdapterAuthStatusRecord, type WorkbenchAdapterAuthStore, type WorkbenchAdapterAuthTarget, } from "./adapter-auth.ts";
@@ -25,7 +25,31 @@ export { buildCandidateCaseExecutionRefs, buildWorkbenchExecutionEvidence, isWor
25
25
  export { buildWorkbenchTraceSessionsFromFiles, combineWorkbenchTraceSessions, finalizeWorkbenchExecutionTraceForJob, mergeWorkbenchExecutionTracesByJob, readWorkbenchExecutionTraceFiles, traceSessionLabel, type WorkbenchTraceMergeJob, } from "./execution-traces.ts";
26
26
  export { DOCKER_SANDBOX_BACKEND, assertSandboxHostHealthForProvider, createDockerSandboxBackendDescriptor, createDockerSandboxPlane, resolveWorkbenchSandboxProviderName, sandboxProviderAdmissionForResources, sandboxProviderDefaultMaxConcurrentJobs, sandboxProviderLeaseScope, sandboxHostHealthExpectationForProvider, type SandboxProviderAdmission, type SandboxProviderHostCost, type SandboxProviderLeaseRequest, type SandboxProviderRequestedResources, type SandboxHostHealthExpectation, type WorkbenchSandboxProviderName, } from "./sandbox-backends/index.ts";
27
27
  export type { WorkbenchExecutionEventPublisher, WorkbenchExecutionProgressTarget, } from "./execution-events.ts";
28
- export type { CandidateCaseReview, CandidateRecord, EngineResolveBinding, EvaluationScorecard, HostedWorkbenchJob, Json, RunSummary, RuntimeEvent, SurfaceSnapshotFile, WorkbenchExecutionCapability, WorkbenchExecutionTrace, WorkbenchTraceSession, WorkbenchSandboxHandle, WorkbenchSandboxExecutionMetadata, } from "@workbench-ai/workbench-contract";
28
+ export type { CandidateCaseReview, CandidateRecord, EngineResolveBinding, EvaluationScorecard, HostedWorkbenchJob, Json, RunSummary, RuntimeEvent, SurfaceSnapshotFile, WorkbenchRuntimeBundle, WorkbenchRuntimeBundleStats, WorkbenchRuntimeRun, WorkbenchRuntimeCandidateFiles, WorkbenchRuntimeExecutionFiles, WorkbenchRuntimeImportResult, WorkbenchProjectSourceResources, WorkbenchProjectState, WorkbenchProjectStateBase, WorkbenchProjectStateImportResult, WorkbenchProjectStateRemote, WorkbenchProjectStateSource, WorkbenchExecutionCapability, WorkbenchExecutionTrace, WorkbenchTraceSession, WorkbenchSandboxHandle, WorkbenchSandboxExecutionMetadata, } from "@workbench-ai/workbench-contract";
29
+ export declare function sanitizeWorkbenchRuntimeJobForExchange(job: HostedWorkbenchJob): HostedWorkbenchJob;
30
+ export declare function sanitizeWorkbenchRuntimeCandidateForExchange(candidate: CandidateRecord): CandidateRecord;
31
+ export interface WorkbenchBenchmarkContentFingerprintInput {
32
+ sourceYaml: string;
33
+ engineResolveFiles: readonly SurfaceSnapshotFile[];
34
+ engineResolveBinding: EngineResolveBinding;
35
+ adapterFiles?: readonly SurfaceSnapshotFile[];
36
+ adapterManifests?: readonly WorkbenchAdapterManifest[];
37
+ runtimeFiles?: readonly SurfaceSnapshotFile[];
38
+ resources?: WorkbenchProjectSourceResources | null;
39
+ network?: WorkbenchProjectStateSource["network"] | null;
40
+ }
41
+ export interface WorkbenchCandidateContentFingerprintInput {
42
+ sourceYaml: string;
43
+ candidateFiles: readonly SurfaceSnapshotFile[];
44
+ adapterFiles?: readonly SurfaceSnapshotFile[];
45
+ adapterManifests?: readonly WorkbenchAdapterManifest[];
46
+ }
47
+ export declare function workbenchBenchmarkContentFingerprint(input: WorkbenchBenchmarkContentFingerprintInput): string;
48
+ export declare function workbenchCandidateContentFingerprint(input: WorkbenchCandidateContentFingerprintInput): string;
49
+ export declare function workbenchProjectSourceFingerprint(input: Omit<WorkbenchProjectStateSource, "files" | "revisionId" | "fingerprint">): string;
50
+ export declare function workbenchRuntimeBundleFingerprint(bundle: WorkbenchRuntimeBundle): string;
51
+ export declare function workbenchSurfaceFilesEqualForExchange(left: readonly SurfaceSnapshotFile[], right: readonly SurfaceSnapshotFile[]): boolean;
52
+ export declare function workbenchRuntimeBundleStats(bundle: WorkbenchRuntimeBundle): WorkbenchRuntimeBundleStats;
29
53
  export interface WorkbenchRunMaterialization {
30
54
  candidates: CandidateRecord[];
31
55
  candidateFiles: Record<string, SurfaceSnapshotFile[]>;
@@ -89,6 +113,11 @@ export declare function materializeWorkbenchRunResult(args: {
89
113
  jobs: readonly HostedWorkbenchJob[];
90
114
  previousCandidate?: CandidateRecord | null;
91
115
  existingCandidateCount: number;
116
+ selection?: {
117
+ metric: string;
118
+ caseIds?: readonly string[];
119
+ label?: string;
120
+ };
92
121
  }): WorkbenchRunMaterialization;
93
122
  export declare function evaluationScorecardId(runId: string, candidateId: string): string;
94
123
  export declare function selectExecutionOutputFilesForInspection(args: {
@@ -100,6 +129,21 @@ export declare function isWorkbenchInternalOutputPath(filePath: string): boolean
100
129
  export declare function createOptimizerTraceInputFiles(args: {
101
130
  jobs: readonly HostedWorkbenchJob[];
102
131
  }): SurfaceSnapshotFile[];
132
+ export interface WorkbenchSelectionPolicy {
133
+ metric: string;
134
+ selector: WorkbenchCaseSelector;
135
+ }
136
+ export declare function workbenchImproveOptimizeSelector(spec: GenericRunSpec): WorkbenchCaseSelector;
137
+ export declare function workbenchImproveSelectionPolicy(spec: GenericRunSpec): WorkbenchSelectionPolicy;
138
+ export declare function workbenchEngineCaseIdsForSelector(engineCases: readonly WorkbenchEngineCase[], selector: WorkbenchCaseSelector): string[];
139
+ export declare function workbenchEngineCaseIdsForImproveEvaluation(args: {
140
+ spec: GenericRunSpec;
141
+ engineCases: readonly WorkbenchEngineCase[];
142
+ }): string[];
143
+ export declare function filterOptimizerTraceJobsForCaseIds(jobs: readonly HostedWorkbenchJob[], caseIds: readonly string[]): HostedWorkbenchJob[];
144
+ export declare function formatWorkbenchCaseSelector(selector: WorkbenchCaseSelector): string;
145
+ export declare function formatWorkbenchSelectionPolicy(policy: WorkbenchSelectionPolicy): string;
146
+ export declare function workbenchCaseSelectorUsesAllCases(selector: WorkbenchCaseSelector): boolean;
103
147
  export declare function evaluationMeanMetrics(evaluation: Pick<EvaluationRecord, "metrics"> | null | undefined): Record<string, number> | undefined;
104
148
  export declare function candidateRecordWithoutDerivedFields(candidate: CandidateRecord): CandidateRecord;
105
149
  export declare function candidateSummaryFromRecord(candidate: CandidateRecord): CandidateSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import YAML from "yaml";
6
- import { adapterCommandName, assertWorkbenchAdapterOperationResultOk, collectWorkbenchAdapterAuthRequirements, parseWorkbenchAdapterManifest, readWorkbenchAdapterOperationResult, WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterOperationResultPath, } from "@workbench-ai/workbench-protocol";
7
- import { BENCHMARK_SPEC_FILE, engineCasePrivateFiles, engineCaseFilesForRuntimeInput, engineCasePublicFiles, resolveEngineCaseExecutionConfig, resolveWorkbenchResolvedSourceYaml as resolveWorkbenchResolvedSourceYamlInternal, validateWorkbenchResolvedSourceYaml as validateWorkbenchResolvedSourceYamlInternal, isWorkbenchCandidateManifestPath, } from "./generic-spec.js";
6
+ import { adapterCommandName, assertWorkbenchAdapterOperationResultOk, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, parseWorkbenchAdapterManifest, readWorkbenchAdapterOperationResult, WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterOperationResultPath, } from "@workbench-ai/workbench-protocol";
7
+ import { BENCHMARK_SPEC_FILE, DEFAULT_EXECUTION_RESOURCES, engineCasePrivateFiles, engineCaseFilesForRuntimeInput, engineCasePublicFiles, resolveEngineCaseExecutionConfig, resolveWorkbenchResolvedSourceYaml as resolveWorkbenchResolvedSourceYamlInternal, validateWorkbenchResolvedSourceYaml as validateWorkbenchResolvedSourceYamlInternal, isWorkbenchCandidateManifestPath, } from "./generic-spec.js";
8
8
  import { attachSandboxMetadataToJob, createWorkbenchSandboxFileStore, isSurfaceSnapshotFile, readWorkbenchExecutionSpec, } from "./sandbox-inputs.js";
9
9
  import { asRuntimeRecord, importNodeModule, isJsonPayload, jsonRecord, nodeBuiltin, quoteShellArg, resolveWorkbenchWorkerId, } from "./runtime-utils.js";
10
10
  import { createWorkbenchExecutionCapability, createWorkbenchSandboxAllocation, collectExecutionCapabilityScopeIssues, collectSandboxAllocationScopeIssues, collectSandboxHandleScopeIssues, assertSandboxBackendSupportsNetworkPolicy, executeValidatedSandboxExecution, } from "./sandbox-plane.js";
@@ -36,6 +36,248 @@ export { collectSandboxAllocationScopeIssues, collectExecutionCapabilityScopeIss
36
36
  export { buildCandidateCaseExecutionRefs, buildWorkbenchExecutionEvidence, isWorkbenchExecutionActive, readWorkbenchExecutionId, readWorkbenchExecutionMetadataNumber, readWorkbenchExecutionMetadataString, readWorkbenchExecutionPurpose, resolveWorkbenchJobGroupStatus, } from "./execution-evidence.js";
37
37
  export { buildWorkbenchTraceSessionsFromFiles, combineWorkbenchTraceSessions, finalizeWorkbenchExecutionTraceForJob, mergeWorkbenchExecutionTracesByJob, readWorkbenchExecutionTraceFiles, traceSessionLabel, } from "./execution-traces.js";
38
38
  export { DOCKER_SANDBOX_BACKEND, assertSandboxHostHealthForProvider, createDockerSandboxBackendDescriptor, createDockerSandboxPlane, resolveWorkbenchSandboxProviderName, sandboxProviderAdmissionForResources, sandboxProviderDefaultMaxConcurrentJobs, sandboxProviderLeaseScope, sandboxHostHealthExpectationForProvider, } from "./sandbox-backends/index.js";
39
+ export function sanitizeWorkbenchRuntimeJobForExchange(job) {
40
+ const { leaseUntil: _leaseUntil, wakeupLeaseUntil: _wakeupLeaseUntil, hostId: _hostId, workerId: _workerId, claimTokenHash: _claimTokenHash, trace: _trace, traceSessions: _traceSessions, ...portable } = job;
41
+ return { ...portable };
42
+ }
43
+ export function sanitizeWorkbenchRuntimeCandidateForExchange(candidate) {
44
+ const { ownerUserId: _ownerUserId, ownerUsername: _ownerUsername, metrics: _metrics, candidateRunId: _candidateRunId, candidateRunName: _candidateRunName, ...portable } = candidate;
45
+ return { ...portable };
46
+ }
47
+ export function workbenchBenchmarkContentFingerprint(input) {
48
+ const benchmarkSource = workbenchBenchmarkSourceYamlForFingerprint(input.sourceYaml);
49
+ const resolvedSpec = resolveWorkbenchResolvedSourceYamlInternal(input.sourceYaml);
50
+ const adapterManifests = input.adapterManifests ??
51
+ adapterManifestsForContentFingerprint(input.adapterFiles ?? []);
52
+ const benchmarkAdapterIds = new Set(collectWorkbenchAdapterInvocations([resolvedSpec.engineRun], adapterManifests)
53
+ .map((invocation) => invocation.use));
54
+ const canonical = {
55
+ sourceYaml: normalizeTextForProjectStateFingerprint(benchmarkSource.sourceYaml),
56
+ engineResolveFiles: canonicalFilesForProjectStateFingerprint(input.engineResolveFiles),
57
+ engineResolveBinding: canonicalEngineResolveBindingForFingerprint(input.engineResolveBinding),
58
+ adapterFiles: canonicalFilesForProjectStateFingerprint(adapterFilesForContentFingerprint(input.adapterFiles ?? [], benchmarkSource.adapterSources, benchmarkAdapterIds)),
59
+ runtimeFiles: canonicalFilesForProjectStateFingerprint(input.runtimeFiles ?? []),
60
+ resources: input.resources
61
+ ? normalizeProjectStateResources(input.resources)
62
+ : null,
63
+ network: input.network ?? null,
64
+ };
65
+ return createHash("sha256").update(JSON.stringify(canonical)).digest("hex");
66
+ }
67
+ export function workbenchCandidateContentFingerprint(input) {
68
+ const candidateSource = workbenchCandidateSourceYamlForFingerprint(input.sourceYaml);
69
+ const resolvedSpec = resolveWorkbenchResolvedSourceYamlInternal(input.sourceYaml);
70
+ const adapterManifests = input.adapterManifests ??
71
+ adapterManifestsForContentFingerprint(input.adapterFiles ?? []);
72
+ const candidateAdapterIds = new Set(collectWorkbenchAdapterInvocations([resolvedSpec.run], adapterManifests)
73
+ .map((invocation) => invocation.use));
74
+ const canonical = {
75
+ sourceYaml: normalizeTextForProjectStateFingerprint(candidateSource.sourceYaml),
76
+ candidateFiles: canonicalFilesForProjectStateFingerprint(input.candidateFiles),
77
+ adapterFiles: canonicalFilesForProjectStateFingerprint(adapterFilesForContentFingerprint(input.adapterFiles ?? [], candidateSource.adapterSources, candidateAdapterIds)),
78
+ };
79
+ return createHash("sha256").update(JSON.stringify(canonical)).digest("hex");
80
+ }
81
+ export function workbenchProjectSourceFingerprint(input) {
82
+ const canonical = {
83
+ sourceYaml: normalizeTextForProjectStateFingerprint(input.source),
84
+ candidateFiles: canonicalFilesForProjectStateFingerprint(input.candidateFiles),
85
+ engineResolveFiles: canonicalFilesForProjectStateFingerprint(input.engineResolveFiles),
86
+ engineResolveBinding: {
87
+ engine: input.engineResolveBinding.engine,
88
+ resolver: {
89
+ use: input.engineResolveBinding.resolver.use,
90
+ withFingerprint: input.engineResolveBinding.resolver.withFingerprint,
91
+ },
92
+ },
93
+ adapterFiles: canonicalFilesForProjectStateFingerprint(input.adapterFiles),
94
+ runtimeFiles: canonicalFilesForProjectStateFingerprint(input.runtimeFiles),
95
+ dockerfile: normalizeTextForProjectStateFingerprint(input.dockerfile),
96
+ runtimeDockerfile: normalizeTextForProjectStateFingerprint(input.runtimeDockerfile),
97
+ resources: normalizeProjectStateResources(input.resources),
98
+ network: input.network,
99
+ };
100
+ return createHash("sha256").update(JSON.stringify(canonicalizeProjectState(canonical))).digest("hex");
101
+ }
102
+ export function workbenchRuntimeBundleFingerprint(bundle) {
103
+ const canonical = {
104
+ schema: bundle.schema,
105
+ activeId: bundle.activeId,
106
+ candidates: sortByStableKey(bundle.candidates.map(sanitizeWorkbenchRuntimeCandidateForExchange), (candidate) => candidate.id),
107
+ candidateFiles: sortByStableKey(bundle.candidateFiles.map((group) => ({
108
+ candidateId: group.candidateId,
109
+ files: canonicalFilesForProjectStateFingerprint(group.files),
110
+ })), (group) => group.candidateId),
111
+ evaluations: sortByStableKey(bundle.evaluations, (evaluation) => evaluation.id),
112
+ runs: sortByStableKey(bundle.runs, (run) => run.id),
113
+ jobs: sortByStableKey(bundle.jobs.map(runtimeJobForProjectStateFingerprint), (job) => job.id),
114
+ executionFiles: sortByStableKey(bundle.executionFiles.map((group) => ({
115
+ jobId: group.jobId,
116
+ files: canonicalFilesForProjectStateFingerprint(group.files),
117
+ })), (group) => group.jobId),
118
+ events: sortByStableKey(bundle.events, (event) => [event.runId ?? "_", event.jobId ?? "_", event.at, event.id].join("#")),
119
+ };
120
+ return createHash("sha256").update(JSON.stringify(canonicalizeProjectState(canonical))).digest("hex");
121
+ }
122
+ export function workbenchSurfaceFilesEqualForExchange(left, right) {
123
+ return JSON.stringify(canonicalFilesForProjectStateFingerprint(left)) ===
124
+ JSON.stringify(canonicalFilesForProjectStateFingerprint(right));
125
+ }
126
+ export function workbenchRuntimeBundleStats(bundle) {
127
+ return {
128
+ candidates: bundle.candidates.length,
129
+ candidateFiles: bundle.candidateFiles.reduce((sum, group) => sum + group.files.length, 0),
130
+ evaluations: bundle.evaluations.length,
131
+ runs: bundle.runs.length,
132
+ jobs: bundle.jobs.length,
133
+ executionFiles: bundle.executionFiles.reduce((sum, group) => sum + group.files.length, 0),
134
+ events: bundle.events.length,
135
+ activeId: bundle.activeId,
136
+ };
137
+ }
138
+ function workbenchCandidateSourceYamlForFingerprint(sourceYaml) {
139
+ const parsed = YAML.parse(sourceYaml);
140
+ const candidate = parsed && typeof parsed === "object" && !Array.isArray(parsed)
141
+ ? parsed.candidate
142
+ : null;
143
+ const candidateRecord = candidate && typeof candidate === "object" && !Array.isArray(candidate)
144
+ ? candidate
145
+ : null;
146
+ const adapters = Array.isArray(candidateRecord?.adapters)
147
+ ? candidateRecord.adapters.flatMap((entry) => typeof entry === "string" ? [entry] : [])
148
+ : [];
149
+ const sourceRecord = splitCandidateSourceRecord(candidateRecord);
150
+ return {
151
+ sourceYaml: `${YAML.stringify(sourceRecord ?? {}).trimEnd()}\n`,
152
+ adapterSources: adapters,
153
+ };
154
+ }
155
+ function workbenchBenchmarkSourceYamlForFingerprint(sourceYaml) {
156
+ const parsed = YAML.parse(sourceYaml);
157
+ const benchmark = parsed && typeof parsed === "object" && !Array.isArray(parsed)
158
+ ? parsed.benchmark
159
+ : null;
160
+ const benchmarkRecord = benchmark && typeof benchmark === "object" && !Array.isArray(benchmark)
161
+ ? benchmark
162
+ : null;
163
+ const adapters = Array.isArray(benchmarkRecord?.adapters)
164
+ ? benchmarkRecord.adapters.flatMap((entry) => typeof entry === "string" ? [entry] : [])
165
+ : [];
166
+ return {
167
+ sourceYaml: `${YAML.stringify(benchmarkRecord ?? {}).trimEnd()}\n`,
168
+ adapterSources: adapters,
169
+ };
170
+ }
171
+ function canonicalEngineResolveBindingForFingerprint(binding) {
172
+ return {
173
+ engine: binding.engine,
174
+ resolver: {
175
+ use: binding.resolver.use,
176
+ withFingerprint: binding.resolver.withFingerprint,
177
+ },
178
+ };
179
+ }
180
+ function adapterFilesForContentFingerprint(adapterFiles, adapterSources, adapterIds) {
181
+ const roots = [
182
+ ...adapterSources.map(normalizeSourcePathForContentFingerprint).filter(Boolean),
183
+ ...adapterRootsForContentFingerprint(adapterFiles, adapterIds),
184
+ ];
185
+ if (roots.length === 0) {
186
+ return [];
187
+ }
188
+ return adapterFiles.filter((file) => roots.some((root) => isWithinSourcePathForContentFingerprint(file.path, root)));
189
+ }
190
+ function adapterRootsForContentFingerprint(adapterFiles, adapterIds) {
191
+ const roots = [];
192
+ for (const file of adapterFiles) {
193
+ const normalizedPath = normalizeSourcePathForContentFingerprint(file.path);
194
+ if ((normalizedPath !== "workbench.adapter.yaml" &&
195
+ !normalizedPath.endsWith("/workbench.adapter.yaml")) ||
196
+ file.encoding !== "utf8") {
197
+ continue;
198
+ }
199
+ const manifest = parseWorkbenchAdapterManifest(file.content, normalizedPath);
200
+ if (adapterIds.has(manifest.id)) {
201
+ roots.push(normalizedPath === "workbench.adapter.yaml"
202
+ ? ""
203
+ : normalizedPath.slice(0, -"/workbench.adapter.yaml".length));
204
+ }
205
+ }
206
+ return roots;
207
+ }
208
+ function adapterManifestsForContentFingerprint(adapterFiles) {
209
+ return adapterFiles.flatMap((file) => {
210
+ const normalizedPath = normalizeSourcePathForContentFingerprint(file.path);
211
+ if ((normalizedPath !== "workbench.adapter.yaml" &&
212
+ !normalizedPath.endsWith("/workbench.adapter.yaml")) ||
213
+ file.encoding !== "utf8") {
214
+ return [];
215
+ }
216
+ return [parseWorkbenchAdapterManifest(file.content, normalizedPath)];
217
+ });
218
+ }
219
+ function isWithinSourcePathForContentFingerprint(filePath, rootPath) {
220
+ const normalizedFile = normalizeSourcePathForContentFingerprint(filePath);
221
+ const normalizedRoot = normalizeSourcePathForContentFingerprint(rootPath);
222
+ if (!normalizedRoot) {
223
+ return true;
224
+ }
225
+ return normalizedFile === normalizedRoot ||
226
+ normalizedFile.startsWith(`${normalizedRoot}/`);
227
+ }
228
+ function normalizeSourcePathForContentFingerprint(value) {
229
+ return value
230
+ .replace(/\\/gu, "/")
231
+ .replace(/^\/+/u, "")
232
+ .replace(/\/+/gu, "/")
233
+ .replace(/^(?:\.\/)+/u, "");
234
+ }
235
+ function runtimeJobForProjectStateFingerprint(job) {
236
+ const portable = sanitizeWorkbenchRuntimeJobForExchange(job);
237
+ const output = portable.output;
238
+ if (!output || typeof output !== "object" || Array.isArray(output)) {
239
+ return portable;
240
+ }
241
+ const { files: _files, fileSet: _fileSet, ...portableOutput } = output;
242
+ return {
243
+ ...portable,
244
+ output: portableOutput,
245
+ };
246
+ }
247
+ function canonicalFilesForProjectStateFingerprint(files) {
248
+ return sortByStableKey(files.map((file) => ({
249
+ path: file.path,
250
+ encoding: file.encoding,
251
+ executable: Boolean(file.executable),
252
+ content: file.content,
253
+ })), (file) => file.path);
254
+ }
255
+ function normalizeTextForProjectStateFingerprint(value) {
256
+ return value.replace(/\r\n/gu, "\n").replace(/\r/gu, "\n");
257
+ }
258
+ function normalizeProjectStateResources(resources) {
259
+ return {
260
+ cpu: resources.cpu ?? DEFAULT_EXECUTION_RESOURCES.cpu,
261
+ memoryGb: resources.memoryGb ?? DEFAULT_EXECUTION_RESOURCES.memoryGb,
262
+ diskGb: resources.diskGb ?? DEFAULT_EXECUTION_RESOURCES.diskGb,
263
+ timeoutMinutes: resources.timeoutMinutes ?? DEFAULT_EXECUTION_RESOURCES.timeoutMinutes,
264
+ };
265
+ }
266
+ function sortByStableKey(items, keyFor) {
267
+ return [...items].sort((left, right) => keyFor(left).localeCompare(keyFor(right)));
268
+ }
269
+ function canonicalizeProjectState(value) {
270
+ if (Array.isArray(value)) {
271
+ return value.map(canonicalizeProjectState);
272
+ }
273
+ if (!value || typeof value !== "object") {
274
+ return value;
275
+ }
276
+ const record = value;
277
+ return Object.fromEntries(Object.keys(record)
278
+ .sort()
279
+ .map((key) => [key, canonicalizeProjectState(record[key])]));
280
+ }
39
281
  export const DEFAULT_ENVIRONMENT_VERSIONS = [
40
282
  {
41
283
  id: "envv_python_3_12",
@@ -407,10 +649,7 @@ export function materializeWorkbenchRunResult(args) {
407
649
  const candidateId = candidateRevision.candidateId;
408
650
  const candidateJobs = evaluationsByCandidate.get(candidateId) ?? [];
409
651
  const succeededEvaluationJobs = candidateJobs.filter((job) => job.status === "succeeded");
410
- const outputs = normalizeEvaluationSampleOutputs({
411
- jobs: succeededEvaluationJobs,
412
- allJobs: completed,
413
- })
652
+ const outputs = normalizeEvaluationSampleOutputs(succeededEvaluationJobs)
414
653
  .sort((left, right) => compareSampleOutputs(left.output, right.output));
415
654
  const outputJobIds = new Set(outputs.flatMap(({ jobs }) => jobs.map((job) => job.id)));
416
655
  const completedSampleKeys = new Set(outputs
@@ -490,6 +729,15 @@ export function materializeWorkbenchRunResult(args) {
490
729
  candidateRunId: args.spec.candidate.selectedRunId,
491
730
  candidateRunName: args.spec.candidate.selectedRunName,
492
731
  evaluation: evalRecord,
732
+ ...(args.selection
733
+ ? {
734
+ selection: {
735
+ metric: args.selection.metric,
736
+ caseIds: args.selection.caseIds,
737
+ ...(args.selection.label ? { label: args.selection.label } : {}),
738
+ },
739
+ }
740
+ : {}),
493
741
  }));
494
742
  candidateFiles[candidateId] = materializedCandidateFiles({
495
743
  candidateRevisionFiles: candidateRevision.files,
@@ -498,6 +746,7 @@ export function materializeWorkbenchRunResult(args) {
498
746
  const selectedCandidate = selectCandidate({
499
747
  candidates,
500
748
  previousCandidate: args.previousCandidate ?? null,
749
+ selection: args.selection,
501
750
  });
502
751
  return {
503
752
  candidates,
@@ -619,6 +868,9 @@ function materializedCandidateFiles(args) {
619
868
  }
620
869
  function createEvaluationScorecard(args) {
621
870
  const evaluation = args.evaluation;
871
+ const selectionScore = args.selection
872
+ ? readEvaluationSelectionStats(evaluation, args.selection.metric, args.selection.caseIds)
873
+ : null;
622
874
  return {
623
875
  id: evaluationScorecardId(args.runId, args.candidate.id),
624
876
  runId: args.runId,
@@ -636,6 +888,9 @@ function createEvaluationScorecard(args) {
636
888
  completedSampleCount: evaluation.completedSampleCount,
637
889
  errorSampleCount: evaluation.errorSampleCount,
638
890
  ...(evaluation.metrics ? { metrics: evaluation.metrics } : {}),
891
+ ...(args.selection ? { selectionMetric: args.selection.metric } : {}),
892
+ ...(args.selection ? { selectionLabel: args.selection.label ?? `${args.selection.metric} on selected cases` } : {}),
893
+ ...(selectionScore ? { selectionScore } : {}),
639
894
  ...(evaluation.durationMs ? { durationMs: evaluation.durationMs } : {}),
640
895
  ...(evaluation.usage ? { usage: evaluation.usage } : {}),
641
896
  ...(evaluation.error ? { error: evaluation.error } : {}),
@@ -703,6 +958,62 @@ export function createOptimizerTraceInputFiles(args) {
703
958
  }, null, 2)}\n`));
704
959
  return dedupeSurfaceFiles(files);
705
960
  }
961
+ export function workbenchImproveOptimizeSelector(spec) {
962
+ return cloneWorkbenchCaseSelector(spec.candidate.improve?.optimizeOn ?? { all: true });
963
+ }
964
+ export function workbenchImproveSelectionPolicy(spec) {
965
+ const optimizeOn = workbenchImproveOptimizeSelector(spec);
966
+ const selectBy = spec.candidate.improve?.selectBy;
967
+ return {
968
+ metric: selectBy?.metric ?? "score",
969
+ selector: cloneWorkbenchCaseSelector(selectBy?.cases ?? optimizeOn),
970
+ };
971
+ }
972
+ export function workbenchEngineCaseIdsForSelector(engineCases, selector) {
973
+ return engineCases
974
+ .filter((engineCase) => workbenchEngineCaseMatchesSelector(engineCase, selector))
975
+ .map((engineCase) => engineCase.id);
976
+ }
977
+ export function workbenchEngineCaseIdsForImproveEvaluation(args) {
978
+ const optimizeIds = new Set(workbenchEngineCaseIdsForSelector(args.engineCases, workbenchImproveOptimizeSelector(args.spec)));
979
+ const selectionIds = new Set(workbenchEngineCaseIdsForSelector(args.engineCases, workbenchImproveSelectionPolicy(args.spec).selector));
980
+ return args.engineCases
981
+ .map((engineCase) => engineCase.id)
982
+ .filter((caseId) => optimizeIds.has(caseId) || selectionIds.has(caseId));
983
+ }
984
+ export function filterOptimizerTraceJobsForCaseIds(jobs, caseIds) {
985
+ const allowed = new Set(caseIds);
986
+ if (allowed.size === 0) {
987
+ return [];
988
+ }
989
+ return jobs.filter((job) => {
990
+ if (workbenchExecutionPurpose(job) !== "attempt") {
991
+ return false;
992
+ }
993
+ const caseId = readJobString(job.input, "caseId");
994
+ return caseId !== null && allowed.has(caseId);
995
+ });
996
+ }
997
+ export function formatWorkbenchCaseSelector(selector) {
998
+ return workbenchCaseSelectorUsesAllCases(selector)
999
+ ? "all cases"
1000
+ : `split=${selector.split}`;
1001
+ }
1002
+ export function formatWorkbenchSelectionPolicy(policy) {
1003
+ return `${policy.metric} on ${formatWorkbenchCaseSelector(policy.selector)}`;
1004
+ }
1005
+ export function workbenchCaseSelectorUsesAllCases(selector) {
1006
+ return !selector.split;
1007
+ }
1008
+ function workbenchEngineCaseMatchesSelector(engineCase, selector) {
1009
+ if (workbenchCaseSelectorUsesAllCases(selector)) {
1010
+ return true;
1011
+ }
1012
+ return engineCase.case.split === selector.split;
1013
+ }
1014
+ function cloneWorkbenchCaseSelector(selector) {
1015
+ return selector.split ? { split: selector.split } : { all: true };
1016
+ }
706
1017
  export function evaluationMeanMetrics(evaluation) {
707
1018
  const entries = Object.entries(evaluation?.metrics ?? {})
708
1019
  .filter((entry) => Number.isFinite(entry[1].mean));
@@ -1104,6 +1415,12 @@ function parseAuthoredWorkbenchSourceSpec(source) {
1104
1415
  ? {
1105
1416
  improve: {
1106
1417
  edits: [...resolved.candidate.improve.edits],
1418
+ ...(resolved.candidate.improve.optimizeOn
1419
+ ? { optimizeOn: resolved.candidate.improve.optimizeOn }
1420
+ : {}),
1421
+ ...(resolved.candidate.improve.selectBy
1422
+ ? { selectBy: resolved.candidate.improve.selectBy }
1423
+ : {}),
1107
1424
  ...improveSpecFromInvocation(resolved.improve),
1108
1425
  },
1109
1426
  }
@@ -1527,9 +1844,6 @@ export async function executeAdapterInCurrentRuntime(args, execution, startedAt,
1527
1844
  const runtimeInput = {
1528
1845
  ...args,
1529
1846
  ...(adapterAuth.root ? { adapterAuthRoot: adapterAuth.root } : {}),
1530
- ...(Object.keys(adapterAuth.env).length > 0
1531
- ? { adapterAuthEnv: adapterAuth.env }
1532
- : {}),
1533
1847
  };
1534
1848
  try {
1535
1849
  if (execution.purpose === "improve") {
@@ -1598,31 +1912,17 @@ function adapterAuthRequest(bundles, root, currentAdapterId) {
1598
1912
  const self = {};
1599
1913
  const adapters = {};
1600
1914
  for (const bundle of bundles) {
1601
- const key = bundle.slot ?? "default";
1602
- const fileAuth = bundle.files.length > 0
1603
- ? {
1604
- ...(root ? { filesRoot: `${root}/${bundle.adapterId}/${bundle.slot ?? "_"}/${bundle.profile}` } : {}),
1605
- files: bundle.files.map((file) => ({
1606
- path: file.path,
1607
- encoding: file.encoding,
1608
- })),
1609
- }
1610
- : undefined;
1611
- const entry = {
1612
- method: bundle.method,
1613
- profile: bundle.profile,
1614
- ...(bundle.env && bundle.env.length > 0
1615
- ? { env: Object.fromEntries(bundle.env.map((entry) => [entry.name, "materialized"])) }
1616
- : {}),
1617
- ...(fileAuth ? fileAuth : {}),
1618
- };
1619
- adapters[bundle.adapterId] = {
1620
- ...(adapters[bundle.adapterId] ?? {}),
1621
- [key]: entry,
1622
- };
1623
- if (!currentAdapterId || bundle.adapterId === currentAdapterId) {
1624
- self[key] = entry;
1915
+ const entry = adapterAuthRequestEntry(bundle, root);
1916
+ if (currentAdapterId && bundle.adapterId === currentAdapterId) {
1917
+ self[bundle.slot ?? "default"] = entry;
1918
+ continue;
1919
+ }
1920
+ if (!currentAdapterId) {
1921
+ self[bundle.slot ?? "default"] = entry;
1922
+ continue;
1625
1923
  }
1924
+ adapters[bundle.adapterId] ??= {};
1925
+ adapters[bundle.adapterId][bundle.slot ?? "default"] = entry;
1626
1926
  }
1627
1927
  const entries = {};
1628
1928
  if (Object.keys(self).length > 0) {
@@ -1633,6 +1933,25 @@ function adapterAuthRequest(bundles, root, currentAdapterId) {
1633
1933
  }
1634
1934
  return entries;
1635
1935
  }
1936
+ function adapterAuthRequestEntry(bundle, root) {
1937
+ const fileAuth = bundle.files.length > 0
1938
+ ? {
1939
+ ...(root ? { filesRoot: `${root}/${bundle.adapterId}/${bundle.slot ?? "_"}/${bundle.profile}` } : {}),
1940
+ files: bundle.files.map((file) => ({
1941
+ path: file.path,
1942
+ encoding: file.encoding,
1943
+ })),
1944
+ }
1945
+ : undefined;
1946
+ return {
1947
+ method: bundle.method,
1948
+ profile: bundle.profile,
1949
+ ...(bundle.env && bundle.env.length > 0
1950
+ ? { env: Object.fromEntries(bundle.env.map((entry) => [entry.name, "materialized"])) }
1951
+ : {}),
1952
+ ...(fileAuth ? fileAuth : {}),
1953
+ };
1954
+ }
1636
1955
  function adapterAuthRequestForStep(args, adapterId) {
1637
1956
  const profiles = (args.adapterAuthProfiles ?? [])
1638
1957
  .map((bundle) => sanitizeWorkbenchAdapterAuthBundle(bundle));
@@ -1641,6 +1960,24 @@ function adapterAuthRequestForStep(args, adapterId) {
1641
1960
  }
1642
1961
  return adapterAuthRequest(profiles, args.adapterAuthRoot, adapterId);
1643
1962
  }
1963
+ function adapterAuthEnvForStep(args, adapterId) {
1964
+ void adapterId;
1965
+ const profiles = (args.adapterAuthProfiles ?? [])
1966
+ .map((bundle) => sanitizeWorkbenchAdapterAuthBundle(bundle));
1967
+ if (profiles.length === 0) {
1968
+ return args.adapterAuthEnv ?? {};
1969
+ }
1970
+ const env = {};
1971
+ for (const bundle of profiles) {
1972
+ Object.assign(env, adapterAuthEnv(bundle));
1973
+ }
1974
+ return env;
1975
+ }
1976
+ function adapterAuthProfilesForAdapter(args, adapterId) {
1977
+ return (args.adapterAuthProfiles ?? [])
1978
+ .map((bundle) => sanitizeWorkbenchAdapterAuthBundle(bundle))
1979
+ .filter((bundle) => bundle.adapterId === adapterId);
1980
+ }
1644
1981
  function adapterAuthProfilesForExecution(execution, args) {
1645
1982
  const profiles = (args.adapterAuthProfiles ?? [])
1646
1983
  .map((bundle) => sanitizeWorkbenchAdapterAuthBundle(bundle));
@@ -1780,6 +2117,7 @@ async function executeAttemptExecutionInCurrentRuntime(args, execution, startedA
1780
2117
  attemptIndex: workload.attemptIndex,
1781
2118
  sampleIndex: workload.sampleIndex,
1782
2119
  caseId: workload.caseId,
2120
+ split: workload.engineCaseSpec?.split,
1783
2121
  startedAt,
1784
2122
  finishedAt,
1785
2123
  durationMs: workloadResult.durationMs,
@@ -1839,9 +2177,6 @@ export async function executeRuntimeControlOperationSequenceInCurrentRuntime(arg
1839
2177
  result = await runHostedCommandExecutionSteps({
1840
2178
  ...runtimeArgs,
1841
2179
  ...(adapterAuth.root ? { adapterAuthRoot: adapterAuth.root } : {}),
1842
- ...(Object.keys(adapterAuth.env).length > 0
1843
- ? { adapterAuthEnv: adapterAuth.env }
1844
- : {}),
1845
2180
  }, workload, args.runtimeControlOperation.operations.map((operation, index) => runtimeControlStepForOperation(operation, index, args.adapterManifests)), startedAt, {
1846
2181
  runCandidatePrepare: args.runtimeControlOperation.prepare ?? false,
1847
2182
  workspaceFiles: args.runtimeControlOperation.inputs?.workspace ?? [],
@@ -2001,12 +2336,12 @@ function runtimeControlInputFiles(inputs, key, fallback) {
2001
2336
  return cloneSurfaceFiles(fallback);
2002
2337
  }
2003
2338
  function runtimeControlStepForOperation(operation, index, manifests = []) {
2004
- const command = operation.invocation.command?.trim()
2005
- || adapterProtocolCommandSpec({
2006
- use: operation.invocation.use,
2007
- with: operation.invocation.with ?? {},
2008
- ...(operation.invocation.auth !== undefined ? { auth: operation.invocation.auth } : {}),
2009
- }, operation.operation, manifests).command;
2339
+ const commandSpec = adapterProtocolCommandSpec({
2340
+ use: operation.invocation.use,
2341
+ with: operation.invocation.with ?? {},
2342
+ ...(operation.invocation.auth !== undefined ? { auth: operation.invocation.auth } : {}),
2343
+ }, operation.operation, manifests);
2344
+ const command = operation.invocation.command?.trim() || commandSpec.command;
2010
2345
  return {
2011
2346
  kind: operation.operation === "candidate.run"
2012
2347
  ? "candidate"
@@ -2015,7 +2350,7 @@ function runtimeControlStepForOperation(operation, index, manifests = []) {
2015
2350
  : "engine",
2016
2351
  label: operation.label ?? `${operation.operation.replace(".", "_")}_${index + 1}`,
2017
2352
  operation: operation.operation,
2018
- executor: "sandbox",
2353
+ executor: commandSpec.executor,
2019
2354
  adapter: {
2020
2355
  use: operation.invocation.use,
2021
2356
  with: operation.invocation.with ?? {},
@@ -2178,7 +2513,8 @@ async function runHostedCommandExecutionSteps(args, workload, steps, startedAt,
2178
2513
  enginePrivateStaged = true;
2179
2514
  }
2180
2515
  await resetHostedWorkloadStepOutput(workspace.root);
2181
- const adapterRequestPath = await writeWorkbenchAdapterRequest(workspace.root, workload, execution, step, adapterAuthRequestForStep(args, step.adapter?.use ?? execution.adapter.use), args.adapterManifests);
2516
+ const stepAdapterId = step.adapter?.use ?? execution.adapter.use;
2517
+ const adapterRequestPath = await writeWorkbenchAdapterRequest(workspace.root, workload, execution, step, adapterAuthRequestForStep(args, stepAdapterId), args.adapterManifests);
2182
2518
  const stepRole = stepEventRole(step);
2183
2519
  await publishCommandStepEvent(options.eventPublisher, {
2184
2520
  step: step.label,
@@ -2190,17 +2526,17 @@ async function runHostedCommandExecutionSteps(args, workload, steps, startedAt,
2190
2526
  throw new Error(`Adapter step ${step.label} is missing a command.`);
2191
2527
  }
2192
2528
  const adapterRoot = step.executor === "host"
2193
- ? hostAdapterRoots.get(step.adapter?.use ?? execution.adapter.use)
2529
+ ? hostAdapterRoots.get(stepAdapterId)
2194
2530
  : undefined;
2195
2531
  const command = createHostedWorkloadShellCommand(workspace.root, step.command, step.label, step.okExitCodes);
2196
2532
  await execFileAsync("sh", ["-c", command], {
2197
2533
  cwd: adapterRoot ?? workspace.root,
2198
- env: createHostedWorkloadAdapterEnv(workspace.root, adapterRequestPath, args.adapterAuthEnv, adapterRoot ? { adapterRoot } : undefined, args.adapterRuntimeEnv),
2534
+ env: createHostedWorkloadAdapterEnv(workspace.root, adapterRequestPath, adapterAuthEnvForStep(args, stepAdapterId), adapterRoot ? { adapterRoot } : undefined, args.adapterRuntimeEnv),
2199
2535
  maxBuffer: 10 * 1024 * 1024,
2200
2536
  timeout: stepTimeoutMs,
2201
2537
  });
2202
2538
  const operationResult = await readWorkbenchAdapterOperationResult(outputDir(workspace.root), step.operation);
2203
- assertWorkbenchAdapterOperationResultOk(operationResult, `Adapter ${step.adapter?.use ?? execution.adapter.use} ${step.operation}`);
2539
+ assertWorkbenchAdapterOperationResultOk(operationResult, `Adapter ${stepAdapterId} ${step.operation}`);
2204
2540
  await writeSurfaceFiles(outputDir(workspace.root), [
2205
2541
  textSurfaceFile(`.workbench/traces/${workload.job.id}/${step.label}/result.json`, `${JSON.stringify(operationResult, null, 2)}\n`),
2206
2542
  ]);
@@ -2355,10 +2691,10 @@ function adapterOperationUsageSummary(result) {
2355
2691
  }
2356
2692
  function attemptUsageSummary(workloadUsage, resultUsage) {
2357
2693
  const normalizedWorkloadUsage = completeUsageSummary(workloadUsage);
2358
- const legacyEngineUsage = normalizedWorkloadUsage?.engine
2694
+ const resultEngineUsage = normalizedWorkloadUsage?.engine
2359
2695
  ? undefined
2360
2696
  : assignUsageRole("engine", resultUsage);
2361
- return mergeUsageSummaries([normalizedWorkloadUsage, legacyEngineUsage]);
2697
+ return mergeUsageSummaries([normalizedWorkloadUsage, resultEngineUsage]);
2362
2698
  }
2363
2699
  function hasExplicitUsageRole(usage) {
2364
2700
  const normalized = completeUsageSummary(usage);
@@ -2671,6 +3007,7 @@ async function writeWorkbenchAdapterRequest(root, workload, execution, step, aut
2671
3007
  const requestPath = path.join(root, ".workbench", "request.json");
2672
3008
  await fs.mkdir(path.dirname(requestPath), { recursive: true });
2673
3009
  const casePrompt = workload.engineCaseSpec?.prompt;
3010
+ const caseSplit = workload.engineCaseSpec?.split;
2674
3011
  const adapter = step.adapter ?? execution.adapter;
2675
3012
  const candidateCommand = adapterProtocolCommandSpec(workload.spec.run, "candidate.run", manifests).command;
2676
3013
  const payload = {
@@ -2709,6 +3046,7 @@ async function writeWorkbenchAdapterRequest(root, workload, execution, step, aut
2709
3046
  case: {
2710
3047
  id: workload.caseId,
2711
3048
  ...(casePrompt ? { prompt: casePrompt } : {}),
3049
+ ...(caseSplit ? { split: caseSplit } : {}),
2712
3050
  },
2713
3051
  },
2714
3052
  paths: {
@@ -3117,6 +3455,7 @@ function evaluateSample(args) {
3117
3455
  }
3118
3456
  const cases = runtimeTimedCaseResults({
3119
3457
  caseId: args.caseId,
3458
+ split: args.split,
3120
3459
  status: "completed",
3121
3460
  durationMs,
3122
3461
  metrics,
@@ -3181,8 +3520,8 @@ function normalizeSampleJobOutput(value) {
3181
3520
  : traceFilePaths(files),
3182
3521
  };
3183
3522
  }
3184
- function normalizeEvaluationSampleOutputs(args) {
3185
- return args.jobs.flatMap((job) => {
3523
+ function normalizeEvaluationSampleOutputs(jobs) {
3524
+ return jobs.flatMap((job) => {
3186
3525
  const output = normalizeSampleJobOutput(job.output);
3187
3526
  if (!output) {
3188
3527
  return [];
@@ -3194,6 +3533,7 @@ function normalizeEvaluationSampleOutputs(args) {
3194
3533
  ...output.sample,
3195
3534
  cases: runtimeTimedCaseResults({
3196
3535
  caseId,
3536
+ split: readJobEngineCaseSplit(job),
3197
3537
  status: output.sample.status === "error" ? "error" : "completed",
3198
3538
  durationMs,
3199
3539
  metrics: output.sample.metrics ?? {},
@@ -3220,11 +3560,22 @@ function runtimeTimedCaseResults(args) {
3220
3560
  }];
3221
3561
  return cases.map((entry) => ({
3222
3562
  ...entry,
3563
+ ...(!entry.split && args.split && entry.id === args.caseId ? { split: args.split } : {}),
3223
3564
  status: entry.status ?? args.status,
3224
3565
  metrics: entry.metrics ?? args.metrics,
3225
3566
  durationMs: args.durationMs,
3226
3567
  }));
3227
3568
  }
3569
+ function readJobEngineCaseSplit(job) {
3570
+ const input = jsonRecord(job.input);
3571
+ const execution = jsonRecord(input.execution);
3572
+ const metadata = jsonRecord(execution.metadata);
3573
+ const engineCase = jsonRecord(metadata.engineCase);
3574
+ const split = engineCase.split;
3575
+ return typeof split === "string" && split.trim().length > 0
3576
+ ? split.trim()
3577
+ : undefined;
3578
+ }
3228
3579
  function runtimeJobDurationMs(job) {
3229
3580
  if (typeof job.startedAt !== "string" || typeof job.finishedAt !== "string") {
3230
3581
  return undefined;
@@ -3318,6 +3669,7 @@ function errorEvaluationSampleFromJobGroup(jobs, candidateId, attemptIndex) {
3318
3669
  }
3319
3670
  const sampleIndex = readOptionalJobNumber(job.input, "sampleIndex");
3320
3671
  const caseId = readJobString(job.input, "caseId");
3672
+ const split = readJobEngineCaseSplit(job);
3321
3673
  if (sampleIndex === null || !caseId) {
3322
3674
  return null;
3323
3675
  }
@@ -3342,6 +3694,7 @@ function errorEvaluationSampleFromJobGroup(jobs, candidateId, attemptIndex) {
3342
3694
  ...(error ? { error } : {}),
3343
3695
  cases: [{
3344
3696
  id: caseId,
3697
+ ...(split ? { split } : {}),
3345
3698
  status: "error",
3346
3699
  ...(durationMs !== undefined ? { durationMs } : {}),
3347
3700
  metrics: {},
@@ -3586,15 +3939,16 @@ function aggregateCaseStatus(results) {
3586
3939
  function selectCandidate(args) {
3587
3940
  let selected = args.previousCandidate;
3588
3941
  for (const candidate of args.candidates) {
3589
- if (!selected || hasHigherScore(candidate, selected)) {
3942
+ if (!selected || hasHigherEvaluationMetric(candidate, selected, args.selection)) {
3590
3943
  selected = candidate;
3591
3944
  }
3592
3945
  }
3593
3946
  return selected;
3594
3947
  }
3595
- function hasHigherScore(candidate, incumbent) {
3596
- const candidateValue = readEvaluationMean(candidate.eval, "score");
3597
- const incumbentValue = readEvaluationMean(incumbent.eval, "score");
3948
+ function hasHigherEvaluationMetric(candidate, incumbent, selection) {
3949
+ const metric = selection?.metric ?? "score";
3950
+ const candidateValue = readEvaluationSelectionMean(candidate.eval, metric, selection?.caseIds);
3951
+ const incumbentValue = readEvaluationSelectionMean(incumbent.eval, metric, selection?.caseIds);
3598
3952
  if (candidateValue == null) {
3599
3953
  return false;
3600
3954
  }
@@ -3603,9 +3957,28 @@ function hasHigherScore(candidate, incumbent) {
3603
3957
  }
3604
3958
  return candidateValue > incumbentValue;
3605
3959
  }
3606
- function readEvaluationMean(evaluation, metric) {
3607
- const direct = evaluation?.metrics?.[metric]?.mean;
3608
- return typeof direct === "number" && Number.isFinite(direct) ? direct : null;
3960
+ function readEvaluationSelectionMean(evaluation, metric, caseIds) {
3961
+ const stats = readEvaluationSelectionStats(evaluation, metric, caseIds);
3962
+ return stats ? stats.mean : null;
3963
+ }
3964
+ function readEvaluationSelectionStats(evaluation, metric, caseIds) {
3965
+ if (!caseIds) {
3966
+ const direct = evaluation?.metrics?.[metric];
3967
+ return direct && Number.isFinite(direct.mean) ? direct : null;
3968
+ }
3969
+ if (caseIds.length === 0) {
3970
+ return null;
3971
+ }
3972
+ const allowed = new Set(caseIds);
3973
+ const values = (evaluation?.samples ?? [])
3974
+ .flatMap((sample) => sample.cases ?? [])
3975
+ .flatMap((caseResult) => {
3976
+ const metricValue = caseResult.metrics[metric];
3977
+ return allowed.has(caseResult.id) && typeof metricValue === "number" && Number.isFinite(metricValue)
3978
+ ? [metricValue]
3979
+ : [];
3980
+ });
3981
+ return values.length > 0 ? metricStats(values) : null;
3609
3982
  }
3610
3983
  function metricStats(values) {
3611
3984
  const count = values.length;
@@ -1 +1 @@
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
+ {"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;AA6C7B,wBAAgB,oCAAoC,IACjD,wBAAwB,CAY1B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,yBAAyB,GACnC,YAAY,CAmDd"}
@@ -145,12 +145,13 @@ async function prepareDockerSandboxWorkspace(args, request, startedAt) {
145
145
  stderr: stderrPath,
146
146
  templateImage: image,
147
147
  containerName: dockerContainerName(request.allocation.sandboxId),
148
- runtimeRoot: runtimePayload.mountRoot,
148
+ runtimeMounts: runtimePayload.mounts,
149
149
  runnerPath: runtimePayload.runnerPath,
150
150
  runtimeImport: runtimePayload.runtimeImport,
151
151
  sandboxUid: sandboxUser.uid,
152
152
  sandboxGid: sandboxUser.gid,
153
153
  network: network,
154
+ ...(args.progress ? { progressTarget: args.progress } : {}),
154
155
  };
155
156
  }
156
157
  async function runDockerSandboxExecution(sandbox, execution) {
@@ -161,11 +162,12 @@ async function runDockerSandboxExecution(sandbox, execution) {
161
162
  const stderrPath = readRequiredMetadataString(metadata, "stderr", DOCKER_SANDBOX_BACKEND);
162
163
  const image = readRequiredMetadataString(metadata, "templateImage", DOCKER_SANDBOX_BACKEND);
163
164
  const containerName = readRequiredMetadataString(metadata, "containerName", DOCKER_SANDBOX_BACKEND);
164
- const runtimeRoot = readRequiredMetadataString(metadata, "runtimeRoot", DOCKER_SANDBOX_BACKEND);
165
+ const runtimeMounts = readDockerRuntimeMounts(metadata.runtimeMounts);
165
166
  const runnerPath = readRequiredMetadataString(metadata, "runnerPath", DOCKER_SANDBOX_BACKEND);
166
167
  const runtimeImport = readRequiredMetadataString(metadata, "runtimeImport", DOCKER_SANDBOX_BACKEND);
167
168
  const sandboxUid = readRequiredMetadataNumber(metadata, "sandboxUid", DOCKER_SANDBOX_BACKEND);
168
169
  const sandboxGid = readRequiredMetadataNumber(metadata, "sandboxGid", DOCKER_SANDBOX_BACKEND);
170
+ const progressTarget = readOptionalProgressTarget(metadata.progressTarget);
169
171
  const network = asRuntimeRecord(metadata.network);
170
172
  const resources = execution.policy.resources;
171
173
  const tmpfsSize = dockerSize(resources.diskGb);
@@ -204,8 +206,7 @@ async function runDockerSandboxExecution(sandbox, execution) {
204
206
  DOCKER_RUNTIME_MOUNT,
205
207
  "-v",
206
208
  `${root}:/workbench-execution`,
207
- "-v",
208
- `${runtimeRoot}:${DOCKER_RUNTIME_MOUNT}:ro`,
209
+ ...dockerRuntimeMountArgs(runtimeMounts),
209
210
  "--env",
210
211
  "HOME=/tmp",
211
212
  "--env",
@@ -227,6 +228,7 @@ async function runDockerSandboxExecution(sandbox, execution) {
227
228
  stdoutPath,
228
229
  stderrPath,
229
230
  timeoutMs,
231
+ progressTarget,
230
232
  });
231
233
  }
232
234
  catch (error) {
@@ -254,6 +256,22 @@ async function runDockerSandboxExecution(sandbox, execution) {
254
256
  }
255
257
  return response.job;
256
258
  }
259
+ function dockerRuntimeMountArgs(mounts) {
260
+ return [
261
+ "--tmpfs",
262
+ `${DOCKER_RUNTIME_MOUNT}:rw,nosuid,nodev,size=16m,mode=755`,
263
+ ...mounts.flatMap((mount) => [
264
+ "--mount",
265
+ `type=bind,source=${mount.source},target=${dockerRuntimeMountTarget(mount.target)},readonly`,
266
+ ]),
267
+ ];
268
+ }
269
+ function dockerRuntimeMountTarget(target) {
270
+ const relativeTarget = target.replace(/^\/+|\/+$/gu, "");
271
+ return relativeTarget
272
+ ? `${DOCKER_RUNTIME_MOUNT}/${relativeTarget}`
273
+ : DOCKER_RUNTIME_MOUNT;
274
+ }
257
275
  function tmpfsDockerArg(pathname, uid, gid, size) {
258
276
  return `${pathname}:rw,exec,uid=${uid},gid=${gid},mode=1777,size=${size}`;
259
277
  }
@@ -300,7 +318,8 @@ function runDockerSandboxProcess(spawn, args, options) {
300
318
  let timedOut = false;
301
319
  const progressPublishes = [];
302
320
  const progressParser = createWorkbenchProgressStdoutParser((envelope) => {
303
- progressPublishes.push(publishWorkbenchProgressStdoutEnvelope(envelope).catch(() => undefined));
321
+ progressPublishes.push(publishWorkbenchProgressStdoutEnvelope(envelope, options.progressTarget)
322
+ .catch(() => undefined));
304
323
  });
305
324
  const stdout = createWriteStream(options.stdoutPath);
306
325
  const stderr = createWriteStream(options.stderrPath);
@@ -468,12 +487,27 @@ function resolveLocalDockerRuntimePayload() {
468
487
  }
469
488
  function monorepoDockerPayload(root) {
470
489
  return {
471
- mountRoot: root,
490
+ mounts: monorepoDockerRuntimeMounts(root),
472
491
  runnerPath: `${DOCKER_RUNTIME_MOUNT}/products/workbench/packages/core/worker/sandbox-adapter-runner.cjs`,
473
492
  runtimeImport: `${DOCKER_RUNTIME_MOUNT}/products/workbench/packages/core/src/index.ts`,
474
493
  builtInDockerfileRoot: path.join(root, "products/workbench/environments"),
475
494
  };
476
495
  }
496
+ function monorepoDockerRuntimeMounts(root) {
497
+ return [
498
+ ...requiredDockerRuntimeMounts(root, [
499
+ ["products/workbench/packages/core", "products/workbench/packages/core"],
500
+ ["products/workbench/packages/contract", "products/workbench/packages/contract"],
501
+ ["products/workbench/packages/protocol", "products/workbench/packages/protocol"],
502
+ ["products/workbench/packages/built-in-adapters", "products/workbench/packages/built-in-adapters"],
503
+ ["products/agent-drivers", "products/agent-drivers"],
504
+ ["products/workbench/environments", "products/workbench/environments"],
505
+ ]),
506
+ ...optionalDockerRuntimeMounts(root, [
507
+ ["node_modules", "node_modules"],
508
+ ]),
509
+ ];
510
+ }
477
511
  function findInstalledPackageDockerPayload() {
478
512
  const moduleDir = path.dirname(fileURLToPath(import.meta.url));
479
513
  const packageRoot = path.resolve(moduleDir, "../..");
@@ -485,7 +519,7 @@ function findInstalledPackageDockerPayload() {
485
519
  existsSync(path.join(packageRoot, "dist/index.js")) &&
486
520
  existsSync(path.join(packageRoot, "environments/node-22/Dockerfile"))) {
487
521
  return {
488
- mountRoot: path.dirname(nodeModulesRoot),
522
+ mounts: [{ source: nodeModulesRoot, target: "node_modules" }],
489
523
  runnerPath: `${DOCKER_RUNTIME_MOUNT}/node_modules/@workbench-ai/workbench-core/worker/sandbox-adapter-runner.cjs`,
490
524
  runtimeImport: `${DOCKER_RUNTIME_MOUNT}/node_modules/@workbench-ai/workbench-core/dist/index.js`,
491
525
  builtInDockerfileRoot: path.join(packageRoot, "environments"),
@@ -493,6 +527,21 @@ function findInstalledPackageDockerPayload() {
493
527
  }
494
528
  return null;
495
529
  }
530
+ function requiredDockerRuntimeMounts(root, entries) {
531
+ return entries.map(([source, target]) => {
532
+ const absoluteSource = path.join(root, source);
533
+ if (!existsSync(absoluteSource)) {
534
+ throw new Error(`Docker sandbox runtime is missing ${source}.`);
535
+ }
536
+ return { source: absoluteSource, target };
537
+ });
538
+ }
539
+ function optionalDockerRuntimeMounts(root, entries) {
540
+ return entries.flatMap(([source, target]) => {
541
+ const absoluteSource = path.join(root, source);
542
+ return existsSync(absoluteSource) ? [{ source: absoluteSource, target }] : [];
543
+ });
544
+ }
496
545
  function findAncestorNamed(start, name) {
497
546
  let current = start;
498
547
  for (;;) {
@@ -542,6 +591,54 @@ function readRequiredMetadataNumber(metadata, key, backend) {
542
591
  }
543
592
  return value;
544
593
  }
594
+ function readDockerRuntimeMounts(value) {
595
+ if (!Array.isArray(value)) {
596
+ throw new Error(`${DOCKER_SANDBOX_BACKEND} sandbox metadata is missing runtime mounts.`);
597
+ }
598
+ const mounts = value.flatMap((entry) => {
599
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
600
+ return [];
601
+ }
602
+ const record = entry;
603
+ if (typeof record.source !== "string" || typeof record.target !== "string") {
604
+ return [];
605
+ }
606
+ if (!isSafeDockerRuntimeMountTarget(record.target)) {
607
+ return [];
608
+ }
609
+ return [{ source: record.source, target: record.target }];
610
+ });
611
+ if (mounts.length === 0) {
612
+ throw new Error(`${DOCKER_SANDBOX_BACKEND} sandbox metadata is missing runtime mounts.`);
613
+ }
614
+ return mounts;
615
+ }
616
+ function isSafeDockerRuntimeMountTarget(target) {
617
+ if (target === "") {
618
+ return true;
619
+ }
620
+ return !target.startsWith("/") &&
621
+ !target.split("/").includes("..") &&
622
+ !/[\0\r\n:,]/u.test(target);
623
+ }
624
+ function readOptionalProgressTarget(value) {
625
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
626
+ return undefined;
627
+ }
628
+ const record = value;
629
+ if (typeof record.url !== "string" || typeof record.token !== "string") {
630
+ return undefined;
631
+ }
632
+ return {
633
+ url: record.url,
634
+ token: record.token,
635
+ ...(typeof record.ownerUserId === "string" ? { ownerUserId: record.ownerUserId } : {}),
636
+ ...(typeof record.flushWindowMs === "number" ? { flushWindowMs: record.flushWindowMs } : {}),
637
+ ...(record.transport === "stdout" || record.transport === "both" || record.transport === "http"
638
+ ? { transport: record.transport }
639
+ : {}),
640
+ };
641
+ }
545
642
  function dockerSandboxUser() {
546
643
  const uid = typeof process.getuid === "function" ? process.getuid() : null;
547
644
  const gid = typeof process.getgid === "function" ? process.getgid() : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workbench-ai/workbench-core",
3
- "version": "0.0.50",
3
+ "version": "0.0.52",
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-contract": "0.0.50",
26
- "@workbench-ai/workbench-protocol": "0.0.50"
25
+ "@workbench-ai/workbench-protocol": "0.0.52",
26
+ "@workbench-ai/workbench-contract": "0.0.52"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "^24.3.1",