@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.
- package/dist/adapter-auth.d.ts.map +1 -1
- package/dist/adapter-auth.js +2 -0
- package/dist/execution-events.d.ts +1 -1
- package/dist/execution-events.d.ts.map +1 -1
- package/dist/execution-events.js +24 -2
- package/dist/generic-spec.d.ts +12 -0
- package/dist/generic-spec.d.ts.map +1 -1
- package/dist/generic-spec.js +54 -1
- package/dist/index.d.ts +49 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +431 -58
- package/dist/sandbox-backends/docker.d.ts.map +1 -1
- package/dist/sandbox-backends/docker.js +104 -7
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-auth.d.ts","sourceRoot":"","sources":["../src/adapter-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter-auth.d.ts","sourceRoot":"","sources":["../src/adapter-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter-auth.js
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/execution-events.js
CHANGED
|
@@ -147,8 +147,30 @@ export function createWorkbenchProgressStdoutParser(onEnvelope) {
|
|
|
147
147
|
},
|
|
148
148
|
};
|
|
149
149
|
}
|
|
150
|
-
export async function publishWorkbenchProgressStdoutEnvelope(envelope) {
|
|
151
|
-
|
|
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;
|
package/dist/generic-spec.d.ts
CHANGED
|
@@ -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":"AACA,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAG1C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA8B,SAAQ,0BAA0B;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"generic-spec.d.ts","sourceRoot":"","sources":["../src/generic-spec.ts"],"names":[],"mappings":"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"}
|
package/dist/generic-spec.js
CHANGED
|
@@ -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;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
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
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
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:
|
|
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
|
|
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(
|
|
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
|
|
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 ${
|
|
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
|
|
2694
|
+
const resultEngineUsage = normalizedWorkloadUsage?.engine
|
|
2359
2695
|
? undefined
|
|
2360
2696
|
: assignUsageRole("engine", resultUsage);
|
|
2361
|
-
return mergeUsageSummaries([normalizedWorkloadUsage,
|
|
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(
|
|
3185
|
-
return
|
|
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 ||
|
|
3942
|
+
if (!selected || hasHigherEvaluationMetric(candidate, selected, args.selection)) {
|
|
3590
3943
|
selected = candidate;
|
|
3591
3944
|
}
|
|
3592
3945
|
}
|
|
3593
3946
|
return selected;
|
|
3594
3947
|
}
|
|
3595
|
-
function
|
|
3596
|
-
const
|
|
3597
|
-
const
|
|
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
|
|
3607
|
-
const
|
|
3608
|
-
return
|
|
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;
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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-
|
|
26
|
-
"@workbench-ai/workbench-
|
|
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",
|