@workbench-ai/workbench 0.0.52 → 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/dev-open-server.js +1 -1
- package/dist/index.js +19 -6
- package/dist/local-archive.d.ts +3 -1
- package/dist/local-archive.d.ts.map +1 -1
- package/dist/local-archive.js +20 -22
- 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.js
CHANGED
|
@@ -2919,7 +2919,9 @@ async function pushBenchmark(argv, io) {
|
|
|
2919
2919
|
const visibility = readOptionalBenchmarkVisibility(parsed.flags.visibility);
|
|
2920
2920
|
const createVisibility = visibility ?? "public";
|
|
2921
2921
|
const dryRun = parsed.flags["dry-run"] === true;
|
|
2922
|
-
const runtime = await exportLocalRuntimeBundle(dir
|
|
2922
|
+
const runtime = await exportLocalRuntimeBundle(dir, {
|
|
2923
|
+
currentBenchmarkFingerprint: localBenchmarkFingerprint(source),
|
|
2924
|
+
});
|
|
2923
2925
|
const state = localProjectState({
|
|
2924
2926
|
source,
|
|
2925
2927
|
runtime,
|
|
@@ -3003,7 +3005,8 @@ async function pushBenchmark(argv, io) {
|
|
|
3003
3005
|
responseProject,
|
|
3004
3006
|
visibility,
|
|
3005
3007
|
});
|
|
3006
|
-
const
|
|
3008
|
+
const applied = await acceptPushedProjectStateToLocal({
|
|
3009
|
+
dir,
|
|
3007
3010
|
baseUrl,
|
|
3008
3011
|
state: response.state,
|
|
3009
3012
|
});
|
|
@@ -3013,13 +3016,13 @@ async function pushBenchmark(argv, io) {
|
|
|
3013
3016
|
changed: response.changed === true,
|
|
3014
3017
|
benchmark: publishedProject,
|
|
3015
3018
|
visibility: visibility ?? "unchanged",
|
|
3016
|
-
origin:
|
|
3019
|
+
origin: applied.origin,
|
|
3017
3020
|
source: response.source,
|
|
3018
3021
|
runtime: response.runtime.stats,
|
|
3019
3022
|
urls: buildWorkbenchResourceUrls({
|
|
3020
3023
|
baseUrl,
|
|
3021
3024
|
projectId: publishedProject.id ?? responseProject.id,
|
|
3022
|
-
...originRemoteUrlParts(
|
|
3025
|
+
...originRemoteUrlParts(applied.origin),
|
|
3023
3026
|
}),
|
|
3024
3027
|
}, parsed, io, (record) => {
|
|
3025
3028
|
const value = record;
|
|
@@ -3036,11 +3039,12 @@ async function createHostedBenchmarkFromState(args) {
|
|
|
3036
3039
|
body: args.state,
|
|
3037
3040
|
}, args.baseUrl);
|
|
3038
3041
|
const project = hostedProjectSummaryFromState(result.state);
|
|
3039
|
-
const
|
|
3042
|
+
const applied = await acceptPushedProjectStateToLocal({
|
|
3043
|
+
dir: args.dir,
|
|
3040
3044
|
baseUrl: args.baseUrl,
|
|
3041
3045
|
state: result.state,
|
|
3042
3046
|
});
|
|
3043
|
-
return { project, origin, result };
|
|
3047
|
+
return { project, origin: applied.origin, result };
|
|
3044
3048
|
}
|
|
3045
3049
|
async function applyRequestedProjectVisibility(args) {
|
|
3046
3050
|
if (args.visibility === "public") {
|
|
@@ -3159,6 +3163,15 @@ async function applyProjectStateToLocal(args) {
|
|
|
3159
3163
|
runtime: runtimeImport.stats,
|
|
3160
3164
|
};
|
|
3161
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
|
+
}
|
|
3162
3175
|
async function retryHostedWorkflow(argv, io) {
|
|
3163
3176
|
const parsed = parseArgs(argv);
|
|
3164
3177
|
rejectUnknownFlags(parsed, new Set([
|
package/dist/local-archive.d.ts
CHANGED
|
@@ -23,7 +23,9 @@ 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
|
|
26
|
+
export declare function exportLocalRuntimeBundle(workspace: string, options?: {
|
|
27
|
+
currentBenchmarkFingerprint?: string;
|
|
28
|
+
}): Promise<WorkbenchRuntimeBundle>;
|
|
27
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;
|
|
@@ -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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"}
|
package/dist/local-archive.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { buildWorkbenchTraceSessionsFromFiles, candidateRecordWithoutDerivedFields, sanitizeWorkbenchRuntimeCandidateForExchange, sanitizeWorkbenchRuntimeJobForExchange, selectExecutionOutputFilesForInspection, workbenchRuntimeBundleStats, workbenchSurfaceFilesEqualForExchange, } from "@workbench-ai/workbench-core";
|
|
3
|
+
import { buildWorkbenchTraceSessionsFromFiles, candidateRecordWithoutDerivedFields, sanitizeWorkbenchRuntimeCandidateForExchange, sanitizeWorkbenchRuntimeJobForExchange, selectExecutionOutputFilesForInspection, workbenchRuntimeExplicitActiveId, workbenchRuntimeBundleStats, workbenchSurfaceFilesEqualForExchange, } from "@workbench-ai/workbench-core";
|
|
4
4
|
const RUNTIME_DIR = ".workbench/runtime";
|
|
5
5
|
const CANDIDATE_RECORDS_DIR = "candidates";
|
|
6
6
|
export function localRuntimeDir(workspace) {
|
|
@@ -71,16 +71,24 @@ export async function saveLocalJobs(workspace, jobs) {
|
|
|
71
71
|
}
|
|
72
72
|
await writeArchivedLocalJobs(workspace, jobs, new Map());
|
|
73
73
|
}
|
|
74
|
-
export async function exportLocalRuntimeBundle(workspace) {
|
|
74
|
+
export async function exportLocalRuntimeBundle(workspace, options = {}) {
|
|
75
75
|
const snapshot = await loadLocalArchive(workspace);
|
|
76
76
|
const jobs = (await readLocalJobs(workspace)).map(sanitizeRuntimeJobForExchange);
|
|
77
77
|
const executionFiles = await Promise.all(jobs.map(async (job) => ({
|
|
78
78
|
jobId: job.id,
|
|
79
79
|
files: await readLocalExecutionFiles(workspace, job.id),
|
|
80
80
|
})));
|
|
81
|
+
const activeId = options.currentBenchmarkFingerprint
|
|
82
|
+
? workbenchRuntimeExplicitActiveId({
|
|
83
|
+
candidates: snapshot.candidates,
|
|
84
|
+
runs: snapshot.runs,
|
|
85
|
+
preferredActiveId: snapshot.activeId,
|
|
86
|
+
benchmarkFingerprint: options.currentBenchmarkFingerprint,
|
|
87
|
+
})
|
|
88
|
+
: snapshot.activeId;
|
|
81
89
|
return {
|
|
82
90
|
schema: "workbench.runtime.bundle.v1",
|
|
83
|
-
activeId
|
|
91
|
+
activeId,
|
|
84
92
|
candidates: snapshot.candidates.map(sanitizeWorkbenchRuntimeCandidateForExchange),
|
|
85
93
|
candidateFiles: Object.entries(snapshot.candidateFiles).map(([candidateId, files]) => ({
|
|
86
94
|
candidateId,
|
|
@@ -121,12 +129,6 @@ export async function importLocalRuntimeBundle(workspace, bundle, currentBenchma
|
|
|
121
129
|
}
|
|
122
130
|
candidateFiles[candidateId] = files;
|
|
123
131
|
}
|
|
124
|
-
const activeId = compatibleRuntimeActiveCandidateId(candidates, bundle.activeId ?? null, currentBenchmarkFingerprint) ??
|
|
125
|
-
compatibleRuntimeActiveCandidateId(candidates, snapshot.activeId, currentBenchmarkFingerprint) ??
|
|
126
|
-
latestCompatibleRuntimeCandidateId(candidates, currentBenchmarkFingerprint);
|
|
127
|
-
if (activeId !== snapshot.activeId) {
|
|
128
|
-
changed = true;
|
|
129
|
-
}
|
|
130
132
|
const evaluations = mergeRecordsById(snapshot.evaluations, bundle.evaluations, (evaluation) => evaluation.id, (didChange) => {
|
|
131
133
|
changed ||= didChange;
|
|
132
134
|
}, runtimeEvaluationsCompatibleForExchange).sort((left, right) => left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id));
|
|
@@ -165,6 +167,15 @@ export async function importLocalRuntimeBundle(workspace, bundle, currentBenchma
|
|
|
165
167
|
changed ||= didChange;
|
|
166
168
|
}, runtimeJobsEqualForExchange).sort((left, right) => (left.startedAt ?? left.createdAt).localeCompare(right.startedAt ?? right.createdAt) ||
|
|
167
169
|
left.id.localeCompare(right.id));
|
|
170
|
+
const activeId = workbenchRuntimeExplicitActiveId({
|
|
171
|
+
candidates,
|
|
172
|
+
runs,
|
|
173
|
+
preferredActiveId: bundle.activeId ?? null,
|
|
174
|
+
benchmarkFingerprint: currentBenchmarkFingerprint,
|
|
175
|
+
});
|
|
176
|
+
if (activeId !== snapshot.activeId) {
|
|
177
|
+
changed = true;
|
|
178
|
+
}
|
|
168
179
|
await saveLocalArchive(workspace, {
|
|
169
180
|
activeId,
|
|
170
181
|
candidates,
|
|
@@ -446,19 +457,6 @@ function runtimeJobIdentityForExchange(job) {
|
|
|
446
457
|
attempt: job.attempt,
|
|
447
458
|
};
|
|
448
459
|
}
|
|
449
|
-
function compatibleRuntimeActiveCandidateId(candidates, candidateId, benchmarkFingerprint) {
|
|
450
|
-
if (!candidateId) {
|
|
451
|
-
return null;
|
|
452
|
-
}
|
|
453
|
-
const candidate = candidates.find((entry) => entry.id === candidateId) ?? null;
|
|
454
|
-
return candidate?.benchmarkFingerprint === benchmarkFingerprint ? candidate.id : null;
|
|
455
|
-
}
|
|
456
|
-
function latestCompatibleRuntimeCandidateId(candidates, benchmarkFingerprint) {
|
|
457
|
-
return candidates
|
|
458
|
-
.filter((candidate) => candidate.benchmarkFingerprint === benchmarkFingerprint &&
|
|
459
|
-
candidate.status === "evaluated")
|
|
460
|
-
.at(-1)?.id ?? null;
|
|
461
|
-
}
|
|
462
460
|
function canonicalRuntimeJson(value) {
|
|
463
461
|
if (Array.isArray(value)) {
|
|
464
462
|
return value.map(canonicalRuntimeJson);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workbench-ai/workbench",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.53",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"yaml": "^2.8.2",
|
|
24
|
-
"@workbench-ai/workbench-built-in-adapters": "0.0.
|
|
25
|
-
"@workbench-ai/workbench-core": "0.0.
|
|
26
|
-
"@workbench-ai/workbench-protocol": "0.0.
|
|
24
|
+
"@workbench-ai/workbench-built-in-adapters": "0.0.53",
|
|
25
|
+
"@workbench-ai/workbench-core": "0.0.53",
|
|
26
|
+
"@workbench-ai/workbench-protocol": "0.0.53"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@tailwindcss/postcss": "^4.2.2",
|