@workbench-ai/workbench 0.0.51 → 0.0.53
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/benchmark-fingerprint.d.ts +1 -3
- package/dist/benchmark-fingerprint.d.ts.map +1 -1
- package/dist/benchmark-fingerprint.js +19 -87
- package/dist/command-model.d.ts.map +1 -1
- package/dist/command-model.js +5 -3
- package/dist/dev-open/client.js +2 -2
- package/dist/dev-open-server.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +116 -83
- package/dist/local-archive.d.ts +4 -2
- package/dist/local-archive.d.ts.map +1 -1
- package/dist/local-archive.js +115 -24
- package/dist/project-source.d.ts +1 -0
- package/dist/project-source.d.ts.map +1 -1
- package/dist/project-source.js +23 -1
- package/package.json +4 -4
package/dist/dev-open-server.js
CHANGED
|
@@ -235,7 +235,7 @@ export async function localBenchmarkSnapshot(context) {
|
|
|
235
235
|
const summaries = candidates.map(candidateSummary);
|
|
236
236
|
const activeId = snapshot.activeId && candidates.some((candidate) => candidate.id === snapshot.activeId)
|
|
237
237
|
? snapshot.activeId
|
|
238
|
-
:
|
|
238
|
+
: null;
|
|
239
239
|
const currentBenchmarkFingerprint = await readCurrentBenchmarkFingerprint(context);
|
|
240
240
|
return {
|
|
241
241
|
workspaceRoot: path.resolve(workspace),
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0IA,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AA4BD,UAAU,iBAAiB;CAAG;AA4K9B,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAIH,EACD,cAAc,GAAE,iBAAsB,GACrC,OAAO,CAAC,MAAM,CAAC,CAmHjB"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import os from "node:os";
|
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { Writable } from "node:stream";
|
|
8
8
|
import { createCandidateFilePreview, createBaselineCandidateJob as createRuntimeBaselineCandidateJob, evaluationScorecardId, evaluationMeanMetrics, executeWorkbenchExecutionJob, engineResolveBindingForSpec, filterOptimizerTraceJobsForCaseIds, filterCandidateSourceFiles, formatWorkbenchCaseSelector, formatWorkbenchSelectionPolicy, workbenchCaseSelectorUsesAllCases, workbenchExecutionPurpose, workbenchRunExecutionFingerprint, createWorkbenchAdapterAuthBundle, createOptimizerTraceInputFiles, DOCKER_SANDBOX_BACKEND, localWorkbenchAdapterAuthStore, materializeWorkbenchRunResult, normalizeSurfaceFiles, planWorkbenchExecutionJobsForPurpose, runWorkbenchExecutionDag, resolveEngineCaseExecutionConfig, resolveWorkbenchResolvedSourceYaml, summarizeCandidateFiles, validateWorkbenchRunEnvelope, parseWorkbenchAdapterAuthTarget, workbenchEngineCaseIdsForImproveEvaluation, workbenchEngineCaseIdsForSelector, workbenchImproveOptimizeSelector, workbenchImproveSelectionPolicy, workbenchProjectSourceFingerprint, workbenchRuntimeBundleFingerprint, } from "@workbench-ai/workbench-core";
|
|
9
|
-
import { assertWorkbenchAdapterOperationResultOk, collectWorkbenchAdapterAuthRequirements,
|
|
9
|
+
import { assertWorkbenchAdapterOperationResultOk, collectWorkbenchAdapterAuthRequirements, normalizeWorkbenchAdapterOperationRequest, readWorkbenchAdapterOperationResult, workbenchAdapterOperationCommand, workbenchAdapterOperationResultPath, withDefaultWorkbenchAdapterAuthProfiles as applyDefaultWorkbenchAdapterAuthProfiles, } from "@workbench-ai/workbench-protocol";
|
|
10
10
|
import { builtinLocalTraceAdapter, builtinLocalTraceAdapters, sortLocalTraceRefs, } from "@workbench-ai/workbench-built-in-adapters/local-traces";
|
|
11
11
|
import { commandUsage, HOSTED_WATCH_LIFECYCLE_NOTE, LOCAL_DEV_OPEN_LIFECYCLE_NOTE, rootUsage, } from "./command-model.js";
|
|
12
12
|
import { startLocalWorkbenchDevServer } from "./dev-open-server.js";
|
|
@@ -15,7 +15,7 @@ import { defaultAdapterManifests, composeRuntimeDockerfileWithAdapters, resolveD
|
|
|
15
15
|
import { createAdapterCommandEnv } from "./adapter-command-env.js";
|
|
16
16
|
import { loadLocalArchive, loadLocalArchiveIndex, exportLocalRuntimeBundle, importLocalRuntimeBundle, runtimeBundleStats, materializeCandidateRoot, readLocalCandidate, readLocalCandidateFiles, readLocalJobs, saveLocalArchive, saveLocalJobs, setLocalActive, upsertLocalRun, upsertLocalCandidate, upsertLocalEvaluation, } from "./local-archive.js";
|
|
17
17
|
import { WorkspaceSnapshotError, } from "./workspace-snapshot.js";
|
|
18
|
-
import { readLocalProjectSource, WORKBENCH_BENCHMARK_FILE, } from "./project-source.js";
|
|
18
|
+
import { hostedEngineResolveFiles, readLocalProjectSource, WORKBENCH_BENCHMARK_FILE, } from "./project-source.js";
|
|
19
19
|
import { localBenchmarkFingerprint, localCandidateFingerprint, } from "./benchmark-fingerprint.js";
|
|
20
20
|
const require = createRequire(import.meta.url);
|
|
21
21
|
function getCliVersion() {
|
|
@@ -869,14 +869,15 @@ async function localRun(argv, io, runtimeOptions) {
|
|
|
869
869
|
},
|
|
870
870
|
});
|
|
871
871
|
for (const candidate of materialized.candidates) {
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
872
|
+
const localCandidate = localCandidateRecord(candidate);
|
|
873
|
+
outputCandidateId = localCandidate.id;
|
|
874
|
+
snapshot = upsertLocalCandidate(snapshot, localCandidate, materialized.candidateFiles[localCandidate.id] ?? []);
|
|
875
|
+
events.push(createLocalEvent("candidate_created", localCandidate.createdAt, {
|
|
875
876
|
runId,
|
|
876
|
-
candidateId:
|
|
877
|
-
baseId:
|
|
878
|
-
status:
|
|
879
|
-
metrics: evaluationMeanMetrics(
|
|
877
|
+
candidateId: localCandidate.id,
|
|
878
|
+
baseId: localCandidate.baseId,
|
|
879
|
+
status: localCandidate.status,
|
|
880
|
+
metrics: evaluationMeanMetrics(localCandidate.eval),
|
|
880
881
|
}));
|
|
881
882
|
}
|
|
882
883
|
for (const evaluation of materialized.evaluations) {
|
|
@@ -1280,7 +1281,7 @@ async function localEvaluateCandidate(argv, io, runtimeOptions) {
|
|
|
1280
1281
|
previousCandidate: existingCandidate ?? null,
|
|
1281
1282
|
existingCandidateCount: snapshot.candidates.length,
|
|
1282
1283
|
});
|
|
1283
|
-
for (const candidateRecord of materialized.candidates) {
|
|
1284
|
+
for (const candidateRecord of materialized.candidates.map(localCandidateRecord)) {
|
|
1284
1285
|
snapshot = upsertLocalCandidate(snapshot, candidateRecord, materialized.candidateFiles[candidateRecord.id] ?? []);
|
|
1285
1286
|
}
|
|
1286
1287
|
if (materialized.activeCandidateId) {
|
|
@@ -2918,7 +2919,9 @@ async function pushBenchmark(argv, io) {
|
|
|
2918
2919
|
const visibility = readOptionalBenchmarkVisibility(parsed.flags.visibility);
|
|
2919
2920
|
const createVisibility = visibility ?? "public";
|
|
2920
2921
|
const dryRun = parsed.flags["dry-run"] === true;
|
|
2921
|
-
const runtime = await exportLocalRuntimeBundle(dir
|
|
2922
|
+
const runtime = await exportLocalRuntimeBundle(dir, {
|
|
2923
|
+
currentBenchmarkFingerprint: localBenchmarkFingerprint(source),
|
|
2924
|
+
});
|
|
2922
2925
|
const state = localProjectState({
|
|
2923
2926
|
source,
|
|
2924
2927
|
runtime,
|
|
@@ -3002,11 +3005,10 @@ async function pushBenchmark(argv, io) {
|
|
|
3002
3005
|
responseProject,
|
|
3003
3006
|
visibility,
|
|
3004
3007
|
});
|
|
3005
|
-
const
|
|
3008
|
+
const applied = await acceptPushedProjectStateToLocal({
|
|
3009
|
+
dir,
|
|
3006
3010
|
baseUrl,
|
|
3007
3011
|
state: response.state,
|
|
3008
|
-
project: publishedProject,
|
|
3009
|
-
sourceFingerprint: state.source.fingerprint,
|
|
3010
3012
|
});
|
|
3011
3013
|
writeOutput({
|
|
3012
3014
|
ok: true,
|
|
@@ -3014,13 +3016,13 @@ async function pushBenchmark(argv, io) {
|
|
|
3014
3016
|
changed: response.changed === true,
|
|
3015
3017
|
benchmark: publishedProject,
|
|
3016
3018
|
visibility: visibility ?? "unchanged",
|
|
3017
|
-
origin:
|
|
3019
|
+
origin: applied.origin,
|
|
3018
3020
|
source: response.source,
|
|
3019
3021
|
runtime: response.runtime.stats,
|
|
3020
3022
|
urls: buildWorkbenchResourceUrls({
|
|
3021
3023
|
baseUrl,
|
|
3022
3024
|
projectId: publishedProject.id ?? responseProject.id,
|
|
3023
|
-
...originRemoteUrlParts(
|
|
3025
|
+
...originRemoteUrlParts(applied.origin),
|
|
3024
3026
|
}),
|
|
3025
3027
|
}, parsed, io, (record) => {
|
|
3026
3028
|
const value = record;
|
|
@@ -3037,13 +3039,12 @@ async function createHostedBenchmarkFromState(args) {
|
|
|
3037
3039
|
body: args.state,
|
|
3038
3040
|
}, args.baseUrl);
|
|
3039
3041
|
const project = hostedProjectSummaryFromState(result.state);
|
|
3040
|
-
const
|
|
3042
|
+
const applied = await acceptPushedProjectStateToLocal({
|
|
3043
|
+
dir: args.dir,
|
|
3041
3044
|
baseUrl: args.baseUrl,
|
|
3042
3045
|
state: result.state,
|
|
3043
|
-
project,
|
|
3044
|
-
sourceFingerprint: args.state.source.fingerprint,
|
|
3045
3046
|
});
|
|
3046
|
-
return { project, origin, result };
|
|
3047
|
+
return { project, origin: applied.origin, result };
|
|
3047
3048
|
}
|
|
3048
3049
|
async function applyRequestedProjectVisibility(args) {
|
|
3049
3050
|
if (args.visibility === "public") {
|
|
@@ -3150,11 +3151,11 @@ async function applyProjectStateToLocal(args) {
|
|
|
3150
3151
|
await assertLocalSourceMatchesOrigin(args.dir, args.origin);
|
|
3151
3152
|
}
|
|
3152
3153
|
await syncSourceFiles(args.dir, args.state.source.files);
|
|
3153
|
-
const
|
|
3154
|
+
const benchmarkFingerprint = localBenchmarkFingerprint(await readLocalProjectSource(args.dir));
|
|
3155
|
+
const runtimeImport = await importLocalRuntimeBundle(args.dir, args.state.runtime, benchmarkFingerprint);
|
|
3154
3156
|
const origin = await writeWorkbenchOriginFromState(args.dir, {
|
|
3155
3157
|
baseUrl: args.baseUrl,
|
|
3156
3158
|
state: args.state,
|
|
3157
|
-
sourceFingerprint: await localSourceFingerprint(args.dir),
|
|
3158
3159
|
});
|
|
3159
3160
|
return {
|
|
3160
3161
|
origin,
|
|
@@ -3162,6 +3163,15 @@ async function applyProjectStateToLocal(args) {
|
|
|
3162
3163
|
runtime: runtimeImport.stats,
|
|
3163
3164
|
};
|
|
3164
3165
|
}
|
|
3166
|
+
async function acceptPushedProjectStateToLocal(args) {
|
|
3167
|
+
const benchmarkFingerprint = localBenchmarkFingerprint(await readLocalProjectSource(args.dir));
|
|
3168
|
+
const runtime = await importLocalRuntimeBundle(args.dir, args.state.runtime, benchmarkFingerprint);
|
|
3169
|
+
const origin = await writeWorkbenchOriginFromState(args.dir, {
|
|
3170
|
+
baseUrl: args.baseUrl,
|
|
3171
|
+
state: args.state,
|
|
3172
|
+
});
|
|
3173
|
+
return { origin, runtime: runtime.stats };
|
|
3174
|
+
}
|
|
3165
3175
|
async function retryHostedWorkflow(argv, io) {
|
|
3166
3176
|
const parsed = parseArgs(argv);
|
|
3167
3177
|
rejectUnknownFlags(parsed, new Set([
|
|
@@ -3193,20 +3203,21 @@ async function retryHostedWorkflow(argv, io) {
|
|
|
3193
3203
|
method: "POST",
|
|
3194
3204
|
body: retryTarget.request,
|
|
3195
3205
|
}, target.baseUrl);
|
|
3196
|
-
const
|
|
3206
|
+
const runTarget = hostedTargetForRunStartResponse(target, response);
|
|
3207
|
+
const startedRun = withRunUrls(runTarget, response.run);
|
|
3197
3208
|
if (parsed.flags.watch === true) {
|
|
3198
3209
|
if (parsed.flags.json !== true) {
|
|
3199
3210
|
io.stdout.write(`${formatHostedRunStarted(startedRun, retryTarget.workflow).trimEnd()}\n${HOSTED_WATCH_LIFECYCLE_NOTE}\n`);
|
|
3200
3211
|
}
|
|
3201
3212
|
const watched = await watchHostedRun({
|
|
3202
3213
|
parsed,
|
|
3203
|
-
target,
|
|
3214
|
+
target: runTarget,
|
|
3204
3215
|
runId: response.run.id,
|
|
3205
3216
|
intervalMs: watchIntervalMs ?? 1000,
|
|
3206
3217
|
timeoutMs: watchTimeoutMs,
|
|
3207
3218
|
});
|
|
3208
|
-
const outputRun = withRunUrls(
|
|
3209
|
-
await tryImportTerminalHostedProjectState({ target, io });
|
|
3219
|
+
const outputRun = withRunUrls(runTarget, await withHostedRunFailureSummary(runTarget, watched));
|
|
3220
|
+
await tryImportTerminalHostedProjectState({ target: runTarget, io });
|
|
3210
3221
|
const result = {
|
|
3211
3222
|
ok: hostedRunSucceeded(watched),
|
|
3212
3223
|
retried: {
|
|
@@ -3377,12 +3388,10 @@ function hostedRunRecordFailed(run) {
|
|
|
3377
3388
|
}
|
|
3378
3389
|
async function startHostedWorkflow(workflow, argv, io) {
|
|
3379
3390
|
const parsed = parseArgs(argv);
|
|
3380
|
-
|
|
3391
|
+
const allowedFlags = new Set([
|
|
3381
3392
|
"dir",
|
|
3382
3393
|
"benchmark",
|
|
3383
|
-
"base",
|
|
3384
3394
|
"runs",
|
|
3385
|
-
"budget",
|
|
3386
3395
|
"samples",
|
|
3387
3396
|
"rerun",
|
|
3388
3397
|
"watch",
|
|
@@ -3390,7 +3399,15 @@ async function startHostedWorkflow(workflow, argv, io) {
|
|
|
3390
3399
|
"interval-ms",
|
|
3391
3400
|
"timeout-ms",
|
|
3392
3401
|
"json",
|
|
3393
|
-
])
|
|
3402
|
+
]);
|
|
3403
|
+
if (workflow === "eval") {
|
|
3404
|
+
allowedFlags.add("candidate");
|
|
3405
|
+
}
|
|
3406
|
+
else {
|
|
3407
|
+
allowedFlags.add("base");
|
|
3408
|
+
allowedFlags.add("budget");
|
|
3409
|
+
}
|
|
3410
|
+
rejectUnknownFlags(parsed, allowedFlags);
|
|
3394
3411
|
if (parsed.positionals.length > 1) {
|
|
3395
3412
|
throw new UsageError(`workbench ${workflow} --hosted accepts at most one source file or directory argument.`);
|
|
3396
3413
|
}
|
|
@@ -3431,25 +3448,27 @@ async function startHostedWorkflow(workflow, argv, io) {
|
|
|
3431
3448
|
}, parsed, io, () => `Processed ${selectedRunIds.length} hosted candidate run(s); ${failed} failed.`);
|
|
3432
3449
|
return failed === 0 ? 0 : 1;
|
|
3433
3450
|
}
|
|
3434
|
-
const
|
|
3451
|
+
const selectedCandidateId = workflow === "eval"
|
|
3452
|
+
? asOptionalString(parsed.flags.candidate)
|
|
3453
|
+
: asOptionalString(parsed.flags.base);
|
|
3435
3454
|
const request = workflow === "improve"
|
|
3436
3455
|
? {
|
|
3437
3456
|
workflow,
|
|
3438
3457
|
budget,
|
|
3439
3458
|
samples,
|
|
3440
|
-
...(
|
|
3459
|
+
...(selectedCandidateId ? { candidateId: selectedCandidateId } : {}),
|
|
3441
3460
|
}
|
|
3442
3461
|
: {
|
|
3443
3462
|
workflow,
|
|
3444
3463
|
samples,
|
|
3445
|
-
...(
|
|
3464
|
+
...(selectedCandidateId ? { candidateId: selectedCandidateId } : {}),
|
|
3446
3465
|
};
|
|
3447
3466
|
const projectSource = selectedRunIds[0] === defaultProjectSource.candidateRunId
|
|
3448
3467
|
? defaultProjectSource
|
|
3449
3468
|
: await readLocalProjectSource(path.resolve(sourceArg), { runId: selectedRunIds[0] });
|
|
3450
3469
|
request.sourceYaml = projectSource.specSource;
|
|
3451
3470
|
request.adapterFiles = projectSource.adapterFiles;
|
|
3452
|
-
if (workflow === "eval" && !
|
|
3471
|
+
if (workflow === "eval" && !selectedCandidateId) {
|
|
3453
3472
|
request.candidateFiles = projectSource.candidateFiles;
|
|
3454
3473
|
}
|
|
3455
3474
|
if (parsed.flags.rerun === true) {
|
|
@@ -3484,7 +3503,7 @@ async function startHostedWorkflow(workflow, argv, io) {
|
|
|
3484
3503
|
parsed,
|
|
3485
3504
|
target,
|
|
3486
3505
|
samples: request.samples,
|
|
3487
|
-
candidateId:
|
|
3506
|
+
candidateId: selectedCandidateId,
|
|
3488
3507
|
sourceYaml: projectSource.specSource,
|
|
3489
3508
|
adapterFiles: projectSource.adapterFiles,
|
|
3490
3509
|
intervalMs: watchIntervalMs ?? 1000,
|
|
@@ -3496,12 +3515,13 @@ async function startHostedWorkflow(workflow, argv, io) {
|
|
|
3496
3515
|
method: "POST",
|
|
3497
3516
|
body: request,
|
|
3498
3517
|
}, target.baseUrl);
|
|
3499
|
-
const
|
|
3518
|
+
const runTarget = hostedTargetForRunStartResponse(target, response);
|
|
3519
|
+
const startedRun = withRunUrls(runTarget, response.run);
|
|
3500
3520
|
const startedRunOutput = response.reused === true
|
|
3501
3521
|
? { ...startedRun, reused: true }
|
|
3502
3522
|
: startedRun;
|
|
3503
3523
|
if (response.reused === true && response.run.status === "finished") {
|
|
3504
|
-
await tryImportTerminalHostedProjectState({ target, io });
|
|
3524
|
+
await tryImportTerminalHostedProjectState({ target: runTarget, io });
|
|
3505
3525
|
writeOutput({
|
|
3506
3526
|
ok: hostedRunSucceeded(response.run),
|
|
3507
3527
|
reused: true,
|
|
@@ -3517,14 +3537,14 @@ async function startHostedWorkflow(workflow, argv, io) {
|
|
|
3517
3537
|
}
|
|
3518
3538
|
const watched = await watchHostedRun({
|
|
3519
3539
|
parsed,
|
|
3520
|
-
target,
|
|
3540
|
+
target: runTarget,
|
|
3521
3541
|
runId: response.run.id,
|
|
3522
3542
|
intervalMs: watchIntervalMs ?? 1000,
|
|
3523
3543
|
timeoutMs: watchTimeoutMs,
|
|
3524
3544
|
});
|
|
3525
|
-
const outputRun = await withHostedRunFailureSummary(
|
|
3526
|
-
await tryImportTerminalHostedProjectState({ target, io });
|
|
3527
|
-
writeOutput(withRunUrls(
|
|
3545
|
+
const outputRun = await withHostedRunFailureSummary(runTarget, watched);
|
|
3546
|
+
await tryImportTerminalHostedProjectState({ target: runTarget, io });
|
|
3547
|
+
writeOutput(withRunUrls(runTarget, outputRun), parsed, io, formatHostedRunResult);
|
|
3528
3548
|
return hostedRunSucceeded(watched) ? 0 : 1;
|
|
3529
3549
|
}
|
|
3530
3550
|
writeOutput(startedRunOutput, parsed, io, (run) => formatHostedRunStarted(run, workflow).trimEnd());
|
|
@@ -3556,9 +3576,10 @@ async function ensureHostedImproveBaseCandidate(args) {
|
|
|
3556
3576
|
...(args.adapterFiles.length > 0 ? { adapterFiles: args.adapterFiles } : {}),
|
|
3557
3577
|
},
|
|
3558
3578
|
}, args.target.baseUrl);
|
|
3579
|
+
const runTarget = hostedTargetForRunStartResponse(args.target, response);
|
|
3559
3580
|
const watched = await watchHostedRun({
|
|
3560
3581
|
parsed: args.parsed,
|
|
3561
|
-
target:
|
|
3582
|
+
target: runTarget,
|
|
3562
3583
|
runId: response.run.id,
|
|
3563
3584
|
intervalMs: args.intervalMs,
|
|
3564
3585
|
timeoutMs: args.timeoutMs,
|
|
@@ -3569,15 +3590,14 @@ async function ensureHostedImproveBaseCandidate(args) {
|
|
|
3569
3590
|
if (!watched.candidateId) {
|
|
3570
3591
|
throw new UsageError(`Parent candidate eval ${watched.id} did not produce a candidate.`);
|
|
3571
3592
|
}
|
|
3572
|
-
await tryImportTerminalHostedProjectState({ target:
|
|
3593
|
+
await tryImportTerminalHostedProjectState({ target: runTarget, io: args.io });
|
|
3573
3594
|
return watched.candidateId;
|
|
3574
3595
|
}
|
|
3575
3596
|
function hostedWorkflowArgsForRun(args) {
|
|
3576
3597
|
const next = ["--dir", args.sourceDir, "--runs", args.runId, "--json"];
|
|
3577
3598
|
appendStringFlag(next, "benchmark", asOptionalString(args.parsed.flags.benchmark));
|
|
3578
|
-
appendStringFlag(next, "
|
|
3599
|
+
appendStringFlag(next, "candidate", asOptionalString(args.parsed.flags.candidate));
|
|
3579
3600
|
appendStringFlag(next, "samples", asOptionalString(args.parsed.flags.samples));
|
|
3580
|
-
appendStringFlag(next, "budget", asOptionalString(args.parsed.flags.budget));
|
|
3581
3601
|
appendStringFlag(next, "interval-ms", asOptionalString(args.parsed.flags["interval-ms"]));
|
|
3582
3602
|
appendStringFlag(next, "timeout-ms", asOptionalString(args.parsed.flags["timeout-ms"]));
|
|
3583
3603
|
if (args.parsed.flags.watch === true) {
|
|
@@ -3814,6 +3834,9 @@ async function resolveRemoteProject(projectRef, baseUrl) {
|
|
|
3814
3834
|
return response.benchmark;
|
|
3815
3835
|
}
|
|
3816
3836
|
function withRunUrls(target, run) {
|
|
3837
|
+
if (!target.owner || !target.projectName) {
|
|
3838
|
+
return { ...run };
|
|
3839
|
+
}
|
|
3817
3840
|
return {
|
|
3818
3841
|
...run,
|
|
3819
3842
|
urls: buildWorkbenchResourceUrls(target, {
|
|
@@ -3822,6 +3845,31 @@ function withRunUrls(target, run) {
|
|
|
3822
3845
|
}),
|
|
3823
3846
|
};
|
|
3824
3847
|
}
|
|
3848
|
+
function hostedTargetForRunStartResponse(target, response) {
|
|
3849
|
+
const projectId = response.benchmark?.id ?? response.run.projectId ?? target.projectId;
|
|
3850
|
+
if (projectId === target.projectId && !response.benchmark) {
|
|
3851
|
+
return target;
|
|
3852
|
+
}
|
|
3853
|
+
const origin = target.origin?.projectId === projectId ? target.origin : null;
|
|
3854
|
+
const next = {
|
|
3855
|
+
...target,
|
|
3856
|
+
projectId,
|
|
3857
|
+
origin,
|
|
3858
|
+
};
|
|
3859
|
+
if (response.benchmark?.ownerUsername) {
|
|
3860
|
+
next.owner = response.benchmark.ownerUsername;
|
|
3861
|
+
}
|
|
3862
|
+
else {
|
|
3863
|
+
delete next.owner;
|
|
3864
|
+
}
|
|
3865
|
+
if (response.benchmark?.name) {
|
|
3866
|
+
next.projectName = response.benchmark.name;
|
|
3867
|
+
}
|
|
3868
|
+
else {
|
|
3869
|
+
delete next.projectName;
|
|
3870
|
+
}
|
|
3871
|
+
return next;
|
|
3872
|
+
}
|
|
3825
3873
|
function hostedRunEvaluationCandidateId(run, jobs = []) {
|
|
3826
3874
|
if (run.outputCandidateId) {
|
|
3827
3875
|
return run.outputCandidateId;
|
|
@@ -3834,7 +3882,8 @@ function hostedRunEvaluationCandidateId(run, jobs = []) {
|
|
|
3834
3882
|
}
|
|
3835
3883
|
function localProjectState(args) {
|
|
3836
3884
|
const stateSource = localProjectStateSource(args.source);
|
|
3837
|
-
const
|
|
3885
|
+
const runtime = runtimeBundleForProjectVisibility(args.runtime, args.visibility);
|
|
3886
|
+
const runtimeFingerprint = workbenchRuntimeBundleFingerprint(runtime);
|
|
3838
3887
|
return {
|
|
3839
3888
|
schema: "workbench.project.state.v1",
|
|
3840
3889
|
project: {
|
|
@@ -3850,7 +3899,22 @@ function localProjectState(args) {
|
|
|
3850
3899
|
runtimeFingerprint: args.origin?.runtimeFingerprint ?? runtimeFingerprint,
|
|
3851
3900
|
},
|
|
3852
3901
|
source: stateSource,
|
|
3853
|
-
runtime
|
|
3902
|
+
runtime,
|
|
3903
|
+
};
|
|
3904
|
+
}
|
|
3905
|
+
function localCandidateRecord(candidate) {
|
|
3906
|
+
return {
|
|
3907
|
+
...candidate,
|
|
3908
|
+
visibility: "private",
|
|
3909
|
+
};
|
|
3910
|
+
}
|
|
3911
|
+
function runtimeBundleForProjectVisibility(runtime, visibility) {
|
|
3912
|
+
return {
|
|
3913
|
+
...runtime,
|
|
3914
|
+
candidates: runtime.candidates.map((candidate) => ({
|
|
3915
|
+
...candidate,
|
|
3916
|
+
visibility,
|
|
3917
|
+
})),
|
|
3854
3918
|
};
|
|
3855
3919
|
}
|
|
3856
3920
|
function localProjectStateSource(source) {
|
|
@@ -3888,8 +3952,6 @@ function hostedProjectSummaryFromState(state) {
|
|
|
3888
3952
|
ownerUsername: state.project.ownerUsername,
|
|
3889
3953
|
name: state.project.name,
|
|
3890
3954
|
visibility: state.project.visibility,
|
|
3891
|
-
currentSpecVersionId: state.source.revisionId ?? state.base.sourceRevisionId,
|
|
3892
|
-
sourceFingerprint: state.source.fingerprint ?? state.base.sourceFingerprint,
|
|
3893
3955
|
};
|
|
3894
3956
|
}
|
|
3895
3957
|
function sourceFileCount(source) {
|
|
@@ -3910,28 +3972,6 @@ function hostedProjectSourceRequest(source) {
|
|
|
3910
3972
|
resources,
|
|
3911
3973
|
};
|
|
3912
3974
|
}
|
|
3913
|
-
function hostedEngineResolveFiles(source) {
|
|
3914
|
-
return [
|
|
3915
|
-
...source.engineResolveFiles,
|
|
3916
|
-
{
|
|
3917
|
-
path: WORKBENCH_ADAPTER_RESULT_FILE,
|
|
3918
|
-
content: `${JSON.stringify({
|
|
3919
|
-
protocol: WORKBENCH_ADAPTER_RESULT_PROTOCOL,
|
|
3920
|
-
operation: "engine.resolve",
|
|
3921
|
-
ok: true,
|
|
3922
|
-
value: {
|
|
3923
|
-
cases: source.engineCases,
|
|
3924
|
-
...(source.engineResolveEnvironment
|
|
3925
|
-
? { environment: source.engineResolveEnvironment }
|
|
3926
|
-
: {}),
|
|
3927
|
-
},
|
|
3928
|
-
feedback: {
|
|
3929
|
-
path: source.engineResolveFingerprintPath,
|
|
3930
|
-
},
|
|
3931
|
-
}, null, 2)}\n`,
|
|
3932
|
-
},
|
|
3933
|
-
];
|
|
3934
|
-
}
|
|
3935
3975
|
function isRemoteProjectId(value) {
|
|
3936
3976
|
return /^wb_[a-f0-9]{12}$/u.test(value);
|
|
3937
3977
|
}
|
|
@@ -4147,14 +4187,11 @@ async function writeWorkbenchOrigin(dir, input) {
|
|
|
4147
4187
|
return origin;
|
|
4148
4188
|
}
|
|
4149
4189
|
async function writeWorkbenchOriginFromState(dir, args) {
|
|
4150
|
-
const owner = args.
|
|
4151
|
-
const name = args.
|
|
4152
|
-
const sourceRevisionId = args.
|
|
4153
|
-
args.state.source.revisionId ??
|
|
4190
|
+
const owner = args.state.project.ownerUsername;
|
|
4191
|
+
const name = args.state.project.name;
|
|
4192
|
+
const sourceRevisionId = args.state.source.revisionId ??
|
|
4154
4193
|
args.state.base.sourceRevisionId;
|
|
4155
|
-
const sourceFingerprint = args.
|
|
4156
|
-
args.project?.sourceFingerprint ??
|
|
4157
|
-
args.state.source.fingerprint ??
|
|
4194
|
+
const sourceFingerprint = args.state.source.fingerprint ??
|
|
4158
4195
|
args.state.base.sourceFingerprint;
|
|
4159
4196
|
const runtimeFingerprint = args.state.base.runtimeFingerprint ??
|
|
4160
4197
|
workbenchRuntimeBundleFingerprint(args.state.runtime);
|
|
@@ -4164,16 +4201,12 @@ async function writeWorkbenchOriginFromState(dir, args) {
|
|
|
4164
4201
|
return await writeWorkbenchOrigin(dir, {
|
|
4165
4202
|
baseUrl: args.baseUrl,
|
|
4166
4203
|
remote: `${owner}/${name}`,
|
|
4167
|
-
projectId: args.
|
|
4204
|
+
projectId: args.state.project.id,
|
|
4168
4205
|
sourceRevisionId,
|
|
4169
4206
|
sourceFingerprint,
|
|
4170
4207
|
runtimeFingerprint,
|
|
4171
4208
|
});
|
|
4172
4209
|
}
|
|
4173
|
-
async function localSourceFingerprint(dir) {
|
|
4174
|
-
const source = localProjectStateSource(await readLocalProjectSource(dir));
|
|
4175
|
-
return source.fingerprint ?? workbenchProjectSourceFingerprint(source);
|
|
4176
|
-
}
|
|
4177
4210
|
function parseOriginRemote(origin) {
|
|
4178
4211
|
return parseRemoteName(origin.remote);
|
|
4179
4212
|
}
|
package/dist/local-archive.d.ts
CHANGED
|
@@ -23,8 +23,10 @@ export declare function loadLocalArchive(workspace: string): Promise<LocalArchiv
|
|
|
23
23
|
export declare function loadLocalArchiveIndex(workspace: string): Promise<LocalArchiveIndex>;
|
|
24
24
|
export declare function saveLocalArchive(workspace: string, snapshot: LocalArchiveSnapshot): Promise<void>;
|
|
25
25
|
export declare function saveLocalJobs(workspace: string, jobs: readonly HostedWorkbenchJob[]): Promise<void>;
|
|
26
|
-
export declare function exportLocalRuntimeBundle(workspace: string
|
|
27
|
-
|
|
26
|
+
export declare function exportLocalRuntimeBundle(workspace: string, options?: {
|
|
27
|
+
currentBenchmarkFingerprint?: string;
|
|
28
|
+
}): Promise<WorkbenchRuntimeBundle>;
|
|
29
|
+
export declare function importLocalRuntimeBundle(workspace: string, bundle: WorkbenchRuntimeBundle, currentBenchmarkFingerprint: string): Promise<WorkbenchRuntimeImportResult>;
|
|
28
30
|
export declare function runtimeBundleStats(bundle: WorkbenchRuntimeBundle): WorkbenchRuntimeBundleStats;
|
|
29
31
|
export declare function sanitizeRuntimeJobForExchange(job: HostedWorkbenchJob): HostedWorkbenchJob;
|
|
30
32
|
export declare function readLocalExecutionFiles(workspace: string, jobId: string): Promise<SurfaceSnapshotFile[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-archive.d.ts","sourceRoot":"","sources":["../src/local-archive.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"local-archive.d.ts","sourceRoot":"","sources":["../src/local-archive.ts"],"names":[],"mappings":"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"}
|